Skip to main content

Welcome to Your New Environment

You’ve successfully installed Gentleman.Dots! This guide will help you start using your new development setup effectively. We’ll cover the essential workflows and shortcuts to make you productive immediately.
This guide assumes you’ve completed the installation. If not, go back and set up your environment first.

Launch Your Setup

1

Open your terminal emulator

Launch the terminal you installed (Alacritty, WezTerm, Kitty, or Ghostty).You should see:
  • Starship prompt with the Gentleman theme
  • Your current directory path
  • Git branch info (if in a repo)
The prompt shows language versions (Node.js, Rust, Go, etc.) when you’re in a project directory.
2

Your shell starts automatically

The shell you chose during installation (Fish, Zsh, or Nushell) should be your default.Verify:
echo $SHELL
# Should show: /usr/local/bin/fish, /bin/zsh, or /usr/local/bin/nu
3

Window manager may auto-start

If you didn’t choose “none” for window manager, Tmux or Zellij may start automatically.
You’ll see a status bar at the bottom with:
  • Session name
  • Window list
  • System info (CPU, memory, date/time)
The prefix key is Ctrl+a (not the default Ctrl+b).
You’ll see a UI with tabs at the top and a status bar showing:
  • Tab names
  • Mode indicator
  • Keybinding hints
To disable auto-start:
# Edit ~/.config/fish/config.fish
# Comment out or remove the tmux/zellij launch line

Essential Keybindings

Window Manager Shortcuts

The prefix key is Ctrl+a (customized from the default Ctrl+b).
ActionKeybinding
PrefixCtrl+a
New windowPrefix + c
Next windowPrefix + n
Previous windowPrefix + p
Split horizontalPrefix + |
Split verticalPrefix + -
Navigate panesPrefix + arrow keys
Resize panePrefix + Ctrl+arrow
Detach sessionPrefix + d
List sessionsPrefix + s
Install pluginsPrefix + I (capital i)
Reload configPrefix + r
Seamless Vim/Neovim navigation: Use Ctrl+h/j/k/l to move between tmux panes and Neovim splits without thinking about boundaries!
Common workflows:
# Create a new session
tmux new -s myproject

# Attach to existing session
tmux attach -t myproject

# List all sessions
tmux ls

# Kill a session
tmux kill-session -t myproject

Shell Shortcuts

These work in all shells (Fish, Zsh, Nushell):
ToolKeybindingDescription
fzfCtrl+rSearch command history
fzfCtrl+tFind files in current directory
fzfAlt+cChange directory interactively
AtuinCtrl+rEnhanced history search (if configured)
Modern CLI tools (already installed):
# bat - better cat with syntax highlighting
bat file.js
bat -l python script.py  # force language

# eza - better ls with icons and colors  
eza
eza -l        # long format
eza -la       # include hidden
eza -T        # tree view
eza -l --git  # show git status

# rg (ripgrep) - blazing fast search
rg "pattern" 
rg -i "case insensitive"
rg -t js "only in .js files"
rg -C 3 "with 3 lines context"

# fd - better find
fd pattern
fd -e js      # only .js files
fd -H         # include hidden
fd -t d       # only directories

# zoxide - smart cd
z project     # jump to directory matching "project"
z -l          # list matches

# lazygit - beautiful git TUI
lazygit

Launch Neovim

1

Start Neovim

nvim
# Or open a file:
nvim myfile.js
On first launch, Lazy.nvim will install all plugins automatically. This takes 1-2 minutes.
You may see some error messages on the very first launch - this is normal. Just press Enter to dismiss them, wait for plugins to finish installing, then quit (:q) and reopen Neovim.
2

Verify plugins loaded

Once inside Neovim:
:Lazy
This opens the Lazy.nvim plugin manager. You should see all plugins with green checkmarks.Press q to close the Lazy window.
3

Try basic navigation

Neovim uses Vim keybindings:
KeyAction
h/j/k/lLeft/Down/Up/Right
iEnter insert mode
EscReturn to normal mode
:wSave file
:qQuit
:wqSave and quit
If you’re new to Vim, run :Tutor inside Neovim for an interactive tutorial, or try the vim-be-good plugin (included) to practice: :VimBeGood

Essential Neovim Shortcuts

The Gentleman.Dots Neovim config uses Space as the leader key.
KeybindingAction
Space + SpaceFind files (fzf-lua)
Space + fFile explorer (Oil.nvim)
Space + /Search in files (grep)
Space + bList buffers
Space + rRecent files
Ctrl+h/j/k/lNavigate between splits
Oil.nvim tips:
  • Edit file paths like text, then press Enter to apply changes
  • - to go up a directory
  • g? to see all keybindings
KeybindingAction
gdGo to definition
grShow references
KHover documentation
Space + caCode actions
Space + rnRename symbol
[d / ]dPrevious/next diagnostic
Space + eShow diagnostics
Auto-completion:
  • Start typing, suggestions appear automatically
  • Tab / Shift+Tab to navigate suggestions
  • Enter to accept
  • Powered by blink.cmp
The Gentleman agent is enabled by default in OpenCode.nvim.
KeybindingAction
Space + aOpen AI assistant
Space + acAI chat
Space + aeExplain code
Space + arRefactor selection
Or use OpenCode CLI:
# From terminal
opencode

# Select Gentleman agent
/agent
# Choose: gentleman

# Chat with the agent
> How do I implement authentication in Express?
The Gentleman agent is designed to challenge your assumptions and propose alternatives. Don’t be surprised if it asks you to verify something or suggests a different approach!
KeybindingAction
Space + ggOpen LazyGit
Inside LazyGit:
  • Space to stage/unstage
  • c to commit
  • P to push
  • p to pull
  • ? for help
  • q to quit
KeybindingAction
Space + w + vSplit vertically
Space + w + sSplit horizontally
Space + w + cClose window
Space + w + oClose other windows
Ctrl+w =Equal window sizes
Space + tab + nNew tab
Space + tab + cClose tab
gt / gTNext/previous tab
KeybindingAction
/patternSearch forward
?patternSearch backward
n / NNext/previous match
*Search word under cursor
:%s/old/new/gReplace in file
:%s/old/new/gcReplace with confirmation
Press Space and wait 1 second - which-key will show all available keybindings!This is invaluable for discovering features. Try:
  • Space (wait) - see all leader key mappings
  • Space + g (wait) - see all git commands
  • Space + c (wait) - see all code commands

Switch AI Plugins

By default, OpenCode.nvim is enabled with the Gentleman agent. To switch:
1

Open plugin configuration

nvim ~/.config/nvim/lua/plugins/disabled.lua
2

Toggle plugin states

Find the plugins and change their enabled values:
-- Example: Switch from OpenCode to Claude Code
{
  "NickvanDyke/opencode.nvim",
  enabled = false,  -- Disable OpenCode
},
{
  "coder/claudecode.nvim",
  enabled = true,   -- Enable Claude Code
},
Only enable ONE AI plugin at a time to avoid keybinding conflicts!
Available AI plugins:
  • opencode.nvim - OpenCode with Gentleman agent (default)
  • avante.nvim - AI-powered coding assistant
  • copilot-chat.nvim - GitHub Copilot chat
  • codecompanion.nvim - Multi-provider AI support
  • claudecode.nvim - Claude AI integration
  • gemini.nvim - Google Gemini integration
3

Restart Neovim

:q
Then reopen Neovim. Lazy.nvim will install the newly enabled plugin automatically.

Configure OpenCode Model

1

Open OpenCode config

nvim ~/.config/opencode/opencode.json
2

Change the model

Edit the model field in the Gentleman agent:
{
  "agent": {
    "gentleman": {
      "model": "anthropic/claude-sonnet-4-20250514",
      ...
    }
  }
}
Popular models:
  • anthropic/claude-sonnet-4-20250514 (recommended)
  • anthropic/claude-haiku-4-20250514 (faster, cheaper)
  • openai/gpt-4o
  • openai/gpt-4o-mini
  • google/gemini-2.0-flash
  • google/gemini-2.5-pro-preview-06-05
3

Test the new model

opencode
/agent
# Select: gentleman

> Test message

Customize Your Theme

The Gentleman theme is applied across all tools. To customize:
nvim ~/.config/starship.toml
The Gentleman color palette is defined:
[palettes.gentleman]
text = "#F3F6F9"
red = "#CB7C94"
green = "#B7CC85"
yellow = "#FFE066"
blue = "#7FB4CA"
# ... more colors
Change any color or module format, then restart your shell.

Common Workflows

Starting a New Project

1

Create project directory

mkdir my-project
cd my-project
git init
2

Start your window manager session

# Tmux
tmux new -s my-project

# Zellij
zellij -s my-project
3

Create window layout

# Window 1: Editor
nvim

# Prefix + c (new window)
# Window 2: Server
npm run dev

# Prefix + c (new window)
# Window 3: Git/commands
lazygit
4

Code with AI assistance

Inside Neovim:
" Open a file
:e src/index.js

" Ask AI for help
<Space>a
> How should I structure this Express app?

Daily Development Session

# Morning: Attach to yesterday's session
tmux attach -t my-project
# or: zellij attach my-project

# All your windows/tabs are exactly as you left them!
# Neovim still has your buffers open
# Server might still be running
# Git status ready to view

# End of day: Just close terminal
# Session persists, ready for tomorrow

# Or explicitly detach:
# Tmux: Prefix + d
# Zellij: Ctrl+o then d

Code Review Workflow

# Open LazyGit in Neovim
# Press: Space + gg

# Or from terminal:
lazygit

# Navigate commits with j/k
# Press Enter on a commit to see changes
# Press Space to stage/unstage files
# Press c to commit
# Press P to push

Debugging with AI

1

Encounter an error

npm run build
# Error: Module not found: '@/components/Button'
2

Ask the Gentleman agent

opencode
/agent
gentleman

> I'm getting "Module not found: '@/components/Button'". 
> What's wrong?
The agent will:
  1. Ask to see your tsconfig.json or webpack config
  2. Verify the actual file path
  3. Propose 2-3 solutions with tradeoffs
  4. NOT just say “you’re right” - it’ll investigate first!

Tips & Tricks

Tmux sessions persist even when you close your terminal:
# Create named session
tmux new -s work

# Detach (Prefix + d)
# Close terminal completely
# Open terminal later

# List sessions
tmux ls

# Reattach
tmux attach -t work
# Everything is exactly as you left it!
Zellij works similarly:
zellij -s work
# Detach: Ctrl+o then d
# Later: zellij attach work
Use zoxide for smart navigation:
# After visiting directories a few times:
z proj    # jumps to ~/projects/my-project
z doc     # jumps to ~/Documents
z conf    # jumps to ~/.config

# See matches:
z -l proj
Use fzf for history:
# Press Ctrl+r, start typing
# Fuzzy search through all past commands
# Even commands from days ago!
Use eza aliases (if configured):
ll    # alias for: eza -l
la    # alias for: eza -la
lt    # alias for: eza -T (tree view)
Don’t try to learn everything at once:Week 1: Basic editing
  • i to insert, Esc to normal mode
  • h/j/k/l for movement
  • :w to save, :q to quit
Week 2: Navigation
  • w/b to move by word
  • 0/$ to start/end of line
  • gg/G to start/end of file
  • Space + Space to find files
Week 3: Editing power moves
  • d to delete, y to yank (copy), p to paste
  • dd delete line, yy yank line
  • ciw change inner word
  • di( delete inside parentheses
Week 4: LSP & AI
  • gd go to definition
  • K hover docs
  • Space + ca code actions
  • Space + a AI assistant
Use :VimBeGood (included plugin) to practice!
Create a tmux/zellij session per project:
# Project 1
tmux new -s frontend
cd ~/projects/frontend
nvim

# Detach: Prefix + d

# Project 2
tmux new -s backend
cd ~/projects/backend
nvim

# Detach: Prefix + d

# Switch between sessions:
# Prefix + s (shows list)
# Or from terminal:
tmux attach -t frontend
tmux attach -t backend
To get the latest changes from Gentleman.Dots:
# Clone the repo
cd ~/tmp
git clone https://github.com/Gentleman-Programming/Gentleman.Dots.git
cd Gentleman.Dots

# Copy updated configs
cp -r GentlemanNvim/nvim/* ~/.config/nvim/
cp starship.toml ~/.config/
# etc.

# Or re-run the installer to update everything
Check the GitHub repo for changelogs and updates!

Troubleshooting

" Inside Neovim:
:Lazy sync
" Wait for all plugins to install/update

" Check for errors:
:Lazy log

" Check health:
:checkhealth
" Check if language server is installed:
:Mason
" Install your language server (e.g., typescript-language-server)

" Check LSP status:
:LspInfo

" Restart LSP:
:LspRestart
The Nerd Font isn’t active in your terminal:
  1. Verify font is installed:
    fc-list | grep Iosevka  # Linux
    
  2. Set font in terminal config:
    • Alacritty: Edit font.normal.family in alacritty.toml
    • WezTerm: Edit font = wezterm.font in .wezterm.lua
    • Kitty: Edit font_family in kitty.conf
  3. Restart terminal
Check if AI CLIs are installed:
opencode --version
claude --version
gemini --version

# If missing, install:
curl -fsSL https://opencode.ai/install | bash
curl -fsSL https://claude.ai/install.sh | bash
brew install gemini-cli
Some may require API keys. Check each tool’s documentation.
If Ctrl+a doesn’t work as prefix:
  1. Check config:
    cat ~/.tmux.conf | grep prefix
    # Should show: set -g prefix C-a
    
  2. Reload config:
    tmux source-file ~/.tmux.conf
    
  3. If still using Ctrl+b, the config wasn’t loaded. Try:
    # Inside tmux:
    Ctrl+b :source-file ~/.tmux.conf
    
Zoxide learns over time. Use directories normally with cd first:
# Visit directories a few times
cd ~/projects/my-app
cd ~/Documents
cd ~/.config

# Now zoxide knows them:
z app    # jumps to ~/projects/my-app
z doc    # jumps to ~/Documents
z conf   # jumps to ~/.config

What’s Next?

You now have a powerful development environment! Here’s what to explore:

Master Neovim

  • Practice with :VimBeGood
  • Learn one new keybinding per day
  • Explore plugins in ~/.config/nvim/lua/plugins/

Customize Your Setup

  • Tweak colors in starship.toml
  • Add your own Neovim plugins
  • Create custom shell aliases

Explore AI Features

  • Try different AI models in OpenCode
  • Test other AI plugins (Avante, CodeCompanion)
  • Experiment with the Gentleman agent’s prompts

Join the Community

  • Star the GitHub repo
  • Report issues or contribute
  • Share your customizations

Pro tip: The best way to learn is by doing. Start a real project and discover features as you need them. The which-key plugin (press Space and wait) will guide you along the way!
Remember: The Gentleman agent is there to challenge and improve your thinking, not just to agree with you. Embrace the constructive feedback!

Build docs developers (and LLMs) love