Important Notice (January 2026): Anthropic has blocked third-party tools (OpenCode, Crush, etc.) from using Claude Max subscriptions. OAuth tokens are now restricted to Claude Code only. This config now uses Claude Code as the primary AI assistant in Neovim, and OpenCode with API key as secondary option.
This repository provides a complete, declarative development environment configuration using Nix Flakes and Home Manager. Everything is configured through local modules and automatically installs all dependencies.
- Languages: Node.js, Bun, Cargo/Rust, Go, GCC
- Package Managers: Volta (Node.js), Cargo, Bun
- Build Tools: Nil (Nix LSP), Nixd (Nix language server)
- Utilities: jq, bash, fd, ripgrep, coreutils, unzip, bat, yazi
- Fish Shell: Complete configuration with 400+ command completions
- Nushell: Modern shell with custom config and environment setup
- Zsh: Traditional shell with modern enhancements
- Starship: Cross-shell prompt with custom configuration
- Ghostty: Modern GPU-accelerated terminal with custom themes
- WezTerm: Feature-rich terminal with Lua configuration
- Tmux: Terminal multiplexer with custom key bindings
- Zellij: Modern terminal workspace (optional - see customization)
- Neovim: Fully configured IDE with LazyVim, AI assistants, and 40+ plugins
- Zed: Modern code editor with custom themes and settings
- Git & GitHub CLI: Pre-configured version control
- Lazy Git: Terminal UI for Git operations
- Claude Code CLI: Primary AI coding assistant with 35 skills, SDD orchestrator workflow, Engram persistent memory, and custom Gentleman persona
- OpenCode: Multi-model AI assistant with 12 agents (gentleman, sdd-orchestrator, dangerous-gentleman + 9 SDD sub-agents), same 35 skills, multi-provider support
- Engram: Persistent memory system for cross-session context and SDD artifact storage
- MCP Servers: Context7 (documentation), Notion (knowledge management)
- Gemini CLI: Google's AI assistant (optional)
- Television: Modern file navigator and system monitor
- Zoxide: Smart directory jumping
- Atuin: Enhanced shell history
- Carapace: Universal shell completions
- FZF: Fuzzy finder integration
- Raycast Scripts: Custom automation scripts for display management
- OmniWM (current Home Manager default): Apple Silicon, macOS 26+; migration and login setup
- Yabai + Skhd + SketchyBar (legacy): kept for recovery, not imported or started by the default flake
- Nehir / Aerospace: Alternative window managers (optional)
- Oil.nvim: Custom file navigation scripts
- Custom Scripts: Productivity-enhancing shell scripts
- Nerd Fonts: Iosevka Term for consistent typography
- Declarative Configuration: Everything version-controlled and reproducible
The flake automatically handles system-specific configurations, installs all dependencies, and sets up your complete development environment with a single command.
- Zero Configuration: Everything works out of the box
- Declarative: Version-controlled, reproducible environment
- Modern Toolchain: Latest development tools and utilities
- AI-Enhanced: Multiple AI coding assistants integrated
- Shell Agnostic: Fish, Nushell, and Zsh all configured
- Terminal Flexibility: Multiple terminal emulators supported
- macOS Optimized: Specifically tuned for macOS workflows
| Category | Tools |
|---|---|
| Package Manager | Nix with Flakes + Home Manager |
| Shells | Fish, Nushell, Zsh with Starship prompt |
| Terminals | Ghostty, WezTerm, Tmux, Zellij (optional) |
| Editor | Neovim (LazyVim) + Zed |
| Languages | Node.js, Rust, Go, with Volta management |
| AI Tools | Claude Code, OpenCode (12 agents), Engram, Herdr, Context7, Notion MCP |
| Navigation | Television, Yazi, Oil.nvim, Zoxide |
| Development | Git, GitHub CLI, Lazy Git |
| Window Manager | OmniWM (current); Yabai + Skhd + SketchyBar (legacy) |
| Automation | Raycast Scripts |
.
├── flake.nix # Main Nix flake configuration
├── README.md # This file
├── AGENTS.md # AI agent instructions
│
├── # ─── Shell Configurations ───
├── fish.nix # Fish shell configuration
├── fish/ # Fish completions (400+ commands)
├── nushell.nix # Nushell configuration
├── nushell/ # Nushell config and env files
├── zsh.nix # Zsh configuration
├── starship.nix # Starship prompt configuration
│
├── # ─── Terminal Emulators ───
├── ghostty.nix # Ghostty terminal configuration
├── ghostty/ # Ghostty config, themes, and shaders
├── wezterm.nix # WezTerm configuration
├── tmux.nix # Tmux configuration
├── zellij.nix # Zellij terminal workspace (optional)
├── zellij/ # Zellij plugins (zjstatus, forgot)
│
├── # ─── Editors ───
├── nvim.nix # Neovim configuration
├── nvim/ # Neovim plugins and settings (LazyVim)
├── nvim-oil-minimal/ # Minimal Neovim config for Oil.nvim
├── zed.nix # Zed editor configuration
├── zed/ # Zed themes, keymaps, tasks, prompts
│
├── # ─── AI Tools ───
├── claude.nix # Claude Code CLI configuration
├── claude/ # Claude settings, 35 skills, themes, statusline, output styles
├── opencode.nix # OpenCode AI configuration
├── opencode/ # OpenCode config, AGENTS.md, 35 skills, themes
├── engram.nix # Engram persistent memory configuration
├── herdr.nix # Herdr agent multiplexer configuration
├── gemini.nix # Gemini CLI configuration (optional)
│
├── # ─── Window Management (macOS) ───
├── omniwm.nix # OmniWM install check and legacy startup migration
├── nehir.nix # Nehir config (optional, not imported)
├── nehir/ # Nehir hotkeys, settings, workspaces (TOML)
├── yabai.nix # Yabai window manager configuration (legacy, not imported)
├── yabai/ # Yabai scripts and config
├── skhd.nix # Skhd hotkey daemon configuration (legacy, not imported)
├── skhd/ # Skhd keybindings (skhdrc)
├── sketchybar.nix # SketchyBar status bar configuration (legacy, not imported)
├── sketchybar/ # SketchyBar plugins and config
├── simple-bar.nix # simple-bar for Übersicht (disabled)
├── simple-bar/ # simple-bar themes (disabled)
├── aerospace/ # Aerospace window manager config (optional)
│
├── # ─── Utilities ───
├── television.nix # Television file navigator
├── television/ # Television config and channels
├── oil-scripts.nix # Custom Oil.nvim scripts
├── scripts/ # Custom utility scripts (ocd, oil)
├── raycast.nix # Raycast scripts configuration
└── raycast/ # Raycast automation scripts
If you're using Linux, you MUST disable macOS-specific modules before running the installation.
The following modules are macOS-only and will fail on Linux:
| Module | Description | Why macOS-only |
|---|---|---|
omniwm.nix |
OmniWM and legacy startup migration | Requires Apple Silicon and macOS 26+ |
yabai.nix, skhd.nix, sketchybar.nix |
Legacy window-management modules (not imported) | macOS-only |
simple-bar.nix |
Status bar widget | Requires Übersicht (macOS app) |
raycast.nix |
Automation scripts | Raycast is macOS-only |
Edit flake.nix and comment out these lines in the modules array (around line 40-57):
modules = [
./nushell.nix
./ghostty.nix
./zed.nix
./television.nix
./wezterm.nix
# ./zellij.nix # Optional - uncomment if you want Zellij
./tmux.nix
./fish.nix
./starship.nix
./nvim.nix
./zsh.nix
./oil-scripts.nix
./opencode.nix
./claude.nix
# ─── macOS ONLY - Comment these on Linux ───
# ./omniwm.nix # ← Comment this line
# ./raycast.nix # ← Comment this line
{
# ... rest of configThe default flake does not add the legacy window-manager packages to home.packages.
1. Set your username (around line 20):
# ─── User Configuration ───
# Change this to your Linux username
username = "YourUser"; # ← Replace with your username2. Change home directory path (around line 67):
# Change from macOS path:
home.homeDirectory = "/Users/${username}";
# To Linux path:
home.homeDirectory = "/home/${username}";3. Add Linux system support (around line 17):
# Change from:
supportedSystems = [ "x86_64-darwin" "aarch64-darwin" ];
# To (add your Linux architecture):
supportedSystems = [ "x86_64-darwin" "aarch64-darwin" "x86_64-linux" "aarch64-linux" ];4. Add Linux home configuration (around line 140):
homeConfigurations = {
# macOS system configurations
"gentleman-macos-intel" = mkHomeConfiguration "x86_64-darwin";
"gentleman-macos-arm" = mkHomeConfiguration "aarch64-darwin";
# Linux system configurations (add these)
"gentleman-linux" = mkHomeConfiguration "x86_64-linux";
"gentleman-linux-arm" = mkHomeConfiguration "aarch64-linux";
# Default to Apple Silicon
"gentleman" = mkHomeConfiguration "aarch64-darwin";
};5. Run installation with Linux config:
home-manager switch --flake .#gentleman-linuxFor window management on Linux, consider:
- i3/Sway - Popular tiling window managers
- Hyprland - Modern Wayland compositor
- bspwm - Scriptable tiling window manager
- Polybar/Waybar - Status bars (replace simple-bar)
Note: This configuration is primarily optimized for macOS. Linux support is possible but requires manual adjustment of these modules.
The default Home Manager flake uses OmniWM on Apple Silicon with macOS 26 or later. It preserves an existing app and GUI-managed settings; otherwise activation installs the Homebrew cask. Enable Start at Login yourself in OmniWM, then verify it in macOS Login Items. No additional launch agent is created.
See the migration guide for the legacy service cleanup, failure behavior, and tests. Nehir and the old yabai/skhd/SketchyBar modules remain in the repository but are not imported.
Legacy — not imported or started by the default flake. Kept for users who explicitly return to yabai.
This configuration includes a fully customized SketchyBar setup with:
- Workspace indicators with Yabai integration
- System monitors (CPU, memory, battery)
- Media controls and now playing info
- Custom plugins for various system information
| Plugin | Description |
|---|---|
spaces.sh |
Workspace/space indicators with window counts |
front_app.sh |
Currently focused application |
media.sh |
Now playing media info |
battery.sh |
Battery status and percentage |
wifi.sh |
Network connection status |
clock.sh |
Date and time display |
The default flake does not start SketchyBar. If you deliberately opt back into the legacy setup, these commands control it:
# Start
brew services start sketchybar
# Restart
brew services restart sketchybar
# Stop
brew services stop sketchybarCustom Raycast automation scripts for display and system management:
| Script | Description |
|---|---|
set-4k.sh |
Set LG TV to 4K resolution with multi-monitor arrangement |
set-1080p.sh |
Set LG TV to 1080p resolution with multi-monitor arrangement |
reset-display-placement.sh |
Auto-detect resolution and reset display arrangement |
restart-sketchybar.sh |
Kill and restart SketchyBar |
- Open Raycast Settings → Extensions → Script Commands
- Add
~/Raycast Scripts/as a script directory - Scripts will be available in Raycast search
- displayplacer:
brew install displayplacer
Note: Display scripts use hardcoded monitor IDs. Run
displayplacer listto get your monitor IDs and update the scripts accordingly.
sh <(curl -L https://nixos.org/nix/install)To enable the experimental features for flakes and the new nix-command (needed for our declarative setup), create/edit the configuration file:
# For daemon installation (default on macOS)
# The file may not exist, create it if needed
sudo mkdir -p /etc/nix
sudo nano /etc/nix/nix.conf
# Or: sudo vi /etc/nix/nix.confAdd:
extra-experimental-features = flakes nix-command
build-users-group = nixbld
(This is necessary because support for flakes and the new Nix command is still experimental, but it allows us to have a fully declarative and reproducible configuration.)
The flake has Intel and Apple Silicon targets, but the default OmniWM module requires Apple Silicon and macOS 26+. Disable or replace that module before activating an Intel configuration.
You only need to update the username variable at the top of flake.nix (around line 20):
# ─── User Configuration ───
# Change this to your macOS username
username = "YourUser"; # ← Replace with your usernameThis single variable is used for both home.username and home.homeDirectory, so you only need to change it in one place.
Configurations are automatically applied. Choose your preferred terminal:
-
Ghostty (Recommended): https://ghostty.org/download
- Reload config with Shift + Cmd + ,
- Modern GPU-accelerated with custom themes
- Optimized for performance
- 50+ custom shaders included (CRT effects, cursor trails, matrix, etc.)
-
- Feature-rich with Lua configuration
- Cross-platform compatibility
- Advanced customization options
The configuration includes 50+ GLSL shaders for visual effects:
| Category | Examples |
|---|---|
| CRT Effects | crt.glsl, bettercrt.glsl, retro-terminal.glsl |
| Cursor Trails | cursor_blaze.glsl, cursor_smear.glsl, cursor_frozen.glsl |
| Backgrounds | starfield.glsl, matrix-hallway.glsl, galaxy.glsl |
| Effects | bloom.glsl, glitchy.glsl, underwater.glsl |
To enable a shader, edit ~/.config/ghostty/config and add:
custom-shader = ~/.config/ghostty/shaders/cursor_smear_gentleman.glsl
Current default: OmniWM. See OmniWM Window Manager above. The Yabai/Skhd options below are legacy and no longer imported by
flake.nix.
The retained legacy modules can be re-imported explicitly, which also restores their startup hooks. They provide:
- Yabai: Tiling window manager with BSP layout
- Skhd: Hotkey daemon for keyboard shortcuts
- SketchyBar: Status bar with workspace indicators
Key bindings (configured in skhd/skhdrc):
| Shortcut | Action |
|---|---|
alt + h/j/k/l |
Focus window (vim-style) |
shift + alt + h/j/k/l |
Move window |
alt + 1-9 |
Switch to space |
shift + alt + 1-9 |
Move window to space |
alt + f |
Toggle fullscreen |
alt + t |
Toggle float |
Note: Yabai requires accessibility permissions and SIP configuration. See
yabai/README.mdfor details.
For a simpler setup without SIP changes, copy the Aerospace configuration:
cp ./aerospace/.aerospace.toml ~/Aerospace provides:
- Automatic window tiling
- Workspace management
- Keyboard-driven navigation
- macOS-native integration (no SIP changes needed)
Before running the flake configuration, you need to set up Home Manager:
# Add home-manager channel
nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
# Update channels
nix-channel --update
# Install home-manager
nix-shell '<home-manager>' -A installOnce you have cloned the repository and are inside its directory, run the command for your system.
. to find the flake.nix file.
For Apple Silicon with macOS 26 or later:
home-manager switch --flake .#gentlemanAlternative: Specific system configurations:
-
Apple Silicon Macs (M1/M2/M3/M4):
home-manager switch --flake .#gentleman-macos-arm -
Intel Macs: the
gentleman-macos-inteltarget requires disabling or replacingomniwm.nixbefore activation; OmniWM rejects Intel before the Home Manager write boundary.
(These commands apply the configuration defined in the flake, installing all dependencies and applying the necessary settings.)
PATH is configured automatically on macOS!
Now run the following script to add Nushell, Fish or Zsh to your list of available shells and select it as the default one:
Fish (Recommended):
shellPath="$HOME/.local/state/nix/profiles/home-manager/home-path/bin/fish" && sudo sh -c "grep -Fxq '$shellPath' /etc/shells || echo '$shellPath' >> /etc/shells" && sudo chsh -s "$shellPath" "$USER"Nushell:
shellPath="$HOME/.local/state/nix/profiles/home-manager/home-path/bin/nu" && sudo sh -c "grep -Fxq '$shellPath' /etc/shells || echo '$shellPath' >> /etc/shells" && sudo chsh -s "$shellPath" "$USER"Zsh:
shellPath="$HOME/.local/state/nix/profiles/home-manager/home-path/bin/zsh" && sudo sh -c "grep -Fxq '$shellPath' /etc/shells || echo '$shellPath' >> /etc/shells" && sudo chsh -s "$shellPath" "$USER"- Declarative Setup: All configurations are defined in Nix modules
- Automatic Deployment: Files are copied to correct macOS locations
- Dependency Management: All tools and dependencies installed automatically
- Version Pinning: Reproducible builds with locked versions
- System Integration: Proper PATH configuration and shell integration
Configurations are automatically deployed to:
| Tool | Location |
|---|---|
| Nushell | ~/Library/Application Support/nushell/ |
| Fish | ~/.config/fish/ |
| Ghostty | ~/.config/ghostty/ |
| WezTerm | ~/.wezterm.lua |
| Neovim | ~/.config/nvim/ |
| Zed | ~/Library/Application Support/Zed/ |
| Starship | ~/.config/starship.toml |
| Tmux | ~/.config/tmux/ |
| Zellij | ~/.config/zellij/ (optional) |
| Television | ~/.config/television/ |
| Claude Code | ~/.claude/ |
| OpenCode | ~/.config/opencode/ |
| Engram | ~/go/bin/engram (managed by engram.nix) |
| OmniWM | ~/.config/omniwm/ (managed by the app) |
| Yabai | ~/.config/yabai/ (legacy) |
| Skhd | ~/.config/skhd/ (legacy) |
| SketchyBar | ~/.config/sketchybar/ (legacy) |
| Raycast | ~/Raycast Scripts/ |
- Shell Completions: 400+ Fish completions for better productivity
- Smart History: Atuin for enhanced command history across shells
- Fuzzy Finding: FZF integration for quick file/command finding
- Directory Navigation: Zoxide for intelligent directory jumping
- File Management: Yazi and Television for modern file browsing
- Git Workflow: Lazy Git for streamlined version control
- Claude Code Integration: Native AI coding assistant with 35 skills and SDD orchestrator
- OpenCode Multi-Agent: 12 agents spanning multiple AI providers for SDD workflow
- Engram Memory: Persistent cross-session memory for context and artifact storage
- MCP Servers: Context7 for live documentation, Notion for knowledge management
- SDD Workflow: Full Spec-Driven Development pipeline (explore → propose → spec → design → tasks → apply → verify → archive)
- Consistent Themes: Catppuccin and custom themes across all tools
- Nerd Font Support: Iosevka Term for perfect icon rendering
- GPU Acceleration: Modern terminals with hardware acceleration
- Custom Key Bindings: Vim-like navigation across all tools
Command not found after installation:
hash -r # Refresh command cache
source ~/.zshrc # or ~/.bashrcnix: command not found when running home-manager:
This happens when the Nix binaries aren't in your PATH. Source the Nix daemon profile first:
# Source Nix profile
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
# Then run home-manager
home-manager switch --flake .#gentlemanPermission denied when copying configs (sketchybar, nvim, etc):
Some config files may be set as read-only. Fix permissions before running home-manager:
# For sketchybar:
chmod -R u+w ~/.config/sketchybar/
# For nvim:
chmod -R u+w ~/.config/nvim/
# Then re-run home-manager
home-manager switch --flake .#gentlemanNix installation issues:
- Ensure
/etc/nix/nix.confhas experimental features enabled - Restart terminal after Nix installation
- Check that you're in the project directory when running commands
Terminal not picking up themes:
- For Ghostty: Use Shift + Cmd + , to reload config
- For WezTerm: Restart the terminal
- Verify config files are in correct locations
Adding your own configurations:
- Edit the relevant
.nixfiles - Run the installation command again
- Changes are applied automatically
Managing versions:
- Update
flake.lockwith:nix flake update - Pin specific package versions in the flake
Enabling Optional Configurations:
Some configurations are commented out by default. To enable them:
-
Zellij Terminal Workspace:
# Edit flake.nix and uncomment the Zellij line sed -i '' 's|# ./zellij.nix|./zellij.nix|' flake.nix # Re-run the installation nix run github:nix-community/home-manager -- switch --flake .#gentleman-macos-arm -b backup
Features:
- Modern terminal multiplexer alternative to tmux
- Vim-like keybindings with custom themes
- Plugin system with status bar and session management
- Custom layouts and workspace management
Additional Configuration Required: After enabling Zellij, you need to update shell configurations to use Zellij instead of tmux:
Fish Shell (
~/.config/fish/config.fish):# Change line ~31 from: if not set -q TMUX; and not set -q ZED_TERMINAL tmux # To: if not set -q ZELLIJ; and not set -q ZED_TERMINAL zellij
Zsh Shell (
~/.zshrc):# Change lines ~100-102 from: WM_VAR="/$TMUX" WM_CMD="tmux" # To: WM_VAR="/$ZELLIJ" WM_CMD="zellij"
Nushell (
~/.config/nushell/config.nu):# Change lines ~1015-1016 from: let MULTIPLEXER = "tmux" let MULTIPLEXER_ENV_PREFIX = "TMUX" # To: let MULTIPLEXER = "zellij" let MULTIPLEXER_ENV_PREFIX = "ZELLIJ"
-
Gemini CLI Integration:
# Edit flake.nix and add Gemini module # Add './gemini.nix' to the modules list in flake.nix # Re-run the installation nix run github:nix-community/home-manager -- switch --flake .#gentleman-macos-arm -b backup
Features:
- Google's AI assistant CLI tool
- Integrated via Bun package manager
- Direct access with
geminicommand - Perfect for AI-powered development workflows
This configuration includes a complete Claude Code CLI setup with custom skills, themes, and output styles.
| Feature | Description |
|---|---|
| CLAUDE.md | Custom system instructions and Gentleman persona |
| Skills | 35 skills covering SDD workflow, frameworks, testing, and project patterns |
| Output Styles | Custom response formatting (Gentleman style) |
| Themes | Custom TweakCC theme for terminal |
| Statusline | Custom status bar script |
| MCP Servers | context7 (docs), engram (memory), notion (knowledge) |
Both Claude Code and OpenCode share the exact same 35 skills, organized by category:
SDD Skills (9) — Spec-Driven Development workflow:
| Skill | Description |
|---|---|
sdd-init |
Initialize SDD context in any project |
sdd-explore |
Explore and investigate ideas before committing |
sdd-propose |
Create a change proposal with intent and scope |
sdd-spec |
Write specifications with requirements and scenarios |
sdd-design |
Create technical design document |
sdd-tasks |
Break down a change into implementation tasks |
sdd-apply |
Implement tasks following specs and design |
sdd-verify |
Validate implementation matches specs |
sdd-archive |
Sync delta specs and archive completed changes |
Framework Skills (10):
| Skill | Trigger |
|---|---|
react-19 |
React components, hooks, JSX (React Compiler) |
nextjs-15 |
App Router, Server Components, Server Actions |
typescript |
Types, interfaces, generics (strict mode) |
tailwind-4 |
Tailwind CSS 4 styling patterns |
zod-4 |
Zod 4 schema validation |
zustand-5 |
Zustand 5 state management |
ai-sdk-5 |
Vercel AI SDK 5 chat features |
django-drf |
Django REST Framework ViewSets, Serializers |
dotnet |
.NET 9 / ASP.NET Core Minimal APIs |
scope-rule-architect-angular |
Angular 20+ Scope Rule architecture |
Testing Skills (3):
| Skill | Trigger |
|---|---|
playwright |
E2E tests, Page Objects, selectors |
pytest |
Python tests, fixtures, mocking |
go-testing |
Go tests, Bubbletea TUI testing |
Workflow Skills (5):
| Skill | Trigger |
|---|---|
skill-creator |
Creating new AI agent skills |
skill-registry |
Update skill registry for project |
pr-review |
Review GitHub PRs and issues |
technical-review |
Review candidate submissions |
homebrew-release |
Release workflow for Gentleman-Programming projects |
Project Skills (7) — Gentleman.Dots specific:
| Skill | Trigger |
|---|---|
gentleman-bubbletea |
Bubbletea TUI patterns in installer |
gentleman-installer |
Installation step patterns |
gentleman-system |
System detection and command execution |
gentleman-trainer |
Vim Trainer RPG system patterns |
gentleman-e2e |
Docker-based E2E testing |
jira-epic |
Create Jira epics (Prowler standard format) |
jira-task |
Create Jira tasks (Prowler standard format) |
Creative (1):
| Skill | Trigger |
|---|---|
stream-deck |
Slide-deck presentations for streams and courses |
OpenCode shares all 35 skills with Claude Code and additionally includes:
- 12 agents defined in
opencode.json:gentleman— primary coding agent with Gentleman persona (primary)sdd-orchestrator— SDD orchestration with delegation-only behavior (primary)dangerous-gentleman— all permissions enabled, for complex automation- 9 hidden SDD sub-agents, each using a different model:
sdd-apply→ claude-sonnet-4-6sdd-archive→ gpt-5.4sdd-design→ claude-opus-4-6sdd-explore→ claude-sonnet-4-6sdd-init→ claude-opus-4-6sdd-propose→ gemini-3.1-pro-previewsdd-spec→ gemini-3.1-pro-previewsdd-tasks→ gemini-3.1-pro-previewsdd-verify→ gpt-5.4
- AGENTS.md — project-level agent instructions referenced by all agents via
{file:./AGENTS.md} - MCP Servers: context7 (documentation), engram (persistent memory), notion (knowledge management)
This configuration includes support for the following AI tools:
- Avante.nvim - AI-powered coding assistant
- CopilotChat.nvim - GitHub Copilot chat interface
- OpenCode.nvim - OpenCode AI integration
- CodeCompanion.nvim - Multi-AI provider support
- Claude Code.nvim - Claude AI integration (enabled by default)
- Gemini.nvim - Google Gemini integration
Claude Code is already enabled by default. To switch to a different AI assistant:
-
Navigate to the disabled plugins file:
nvim ~/.config/nvim/lua/plugins/disabled.lua -
Disable Claude Code by changing
enabled = truetoenabled = false:{ "greggh/claude-code.nvim", enabled = false, -- Disable Claude Code }, -
Enable your preferred AI assistant by changing
enabled = falsetoenabled = true:{ "yetone/avante.nvim", enabled = true, -- Change to true to enable }, -
Save the file and restart Neovim.
- Only enable ONE AI plugin at a time to avoid conflicts and keybinding issues
- Required CLI tools are automatically installed by the script:
- Claude Code CLI (
brew install --cask claude-code) - OpenCode CLI (
curl -fsSL https://opencode.ai/install | bash) - Gemini CLI (
brew install gemini-cli)
- Claude Code CLI (
- API keys may be required for some services - check each plugin's documentation
- Node.js 18+ is required for most AI plugins (automatically handled by the configuration)
To switch from one AI assistant to another:
- Set your current AI plugin to
enabled = false - Set your desired AI plugin to
enabled = true - Restart Neovim
- For beginners: Start with CodeCompanion.nvim - supports multiple AI providers
- For Claude users: Use Claude Code.nvim with the Claude Code CLI
- For GitHub Copilot users: Use CopilotChat.nvim
- For Google Gemini users: Use Gemini.nvim with the Gemini CLI
Why Claude Code is the default: In January 2026, Anthropic restricted their OAuth tokens to only work with the official Claude Code CLI. Third-party tools like OpenCode, Crush, etc. were blocked from using Claude Max/Pro subscriptions.
Recommended: Use OpenCode with API Key
The safest way to use OpenCode is with an Anthropic API key:
{
"provider": "anthropic",
"model": "anthropic/claude-sonnet-4-20250514"
}Then set your API key:
export ANTHROPIC_API_KEY="your-api-key-here"Location: ~/.config/opencode/opencode.json
This setup also includes an sdd-orchestrator agent with the same Gentleman personality as gentleman, plus delegate-only SDD orchestration behavior.
Recommended usage flow:
-
Start OpenCode in your project:
opencode . -
Open the agent picker (
Tab) and selectsdd-orchestrator -
Run SDD commands:
/sdd:init /sdd:new <change-name> /sdd:continue -
Switch back to
gentleman(Tab) for day-to-day coding.
Artifact store recommendation:
- Use
artifact_store.mode: engram(recommended) - https://github.com/gentleman-programming/engram autofallback order: user-requested files -> engram -> existing openspec -> none
⚠️ RISKY ALTERNATIVE: opencode-anthropic-auth plugin (click to expand)
There's a community plugin (opencode-anthropic-auth) that enables OAuth authentication with Claude Max/Pro subscriptions. However, this violates Anthropic's Terms of Service and can result in account suspension.
What the plugin does:
- Spoofs the Claude Code CLI's OAuth client ID
- Fakes the user-agent to impersonate Claude Code
- Replaces "OpenCode" strings to evade server detection
From Anthropic's Usage Policy:
"Do Not Abuse our Platform: Intentionally bypass capabilities, restrictions, or guardrails established within our products without prior authorization from Anthropic"
Risks:
- 🚫 Account ban - Your Claude account can be suspended
⚠️ You can request an unban via X/Twitter, but it's not guaranteed- 🔄 Anthropic could block this workaround at any time
If you still want to use it (at your own risk):
{
"plugin": ["opencode-anthropic-auth"],
"model": "anthropic/claude-sonnet-4-20250514"
}We do NOT recommend this approach. Use Claude Code CLI or OpenCode with an API key instead.
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Test your changes thoroughly
- Submit a pull request
For questions or issues, open a GitHub issue.
Thanks to everyone who has contributed to Gentleman.Dots!
Happy coding! 🚀
— Gentleman Programming