Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Dev Environment

The dev home-manager module is a single import that delivers a complete day-to-day environment: fish + starship + a zellij/yazi workspace via yazelix, nixvim with 30+ plugins, and the usual CLI sidekicks (atuin, bat, eza, fd, fzf, gh, glab, gpg, lazygit, ripgrep, zoxide, delta). Personal identity (git user, ssh keys, sops) lives in your own config — dev provides the tooling, not the secrets.

Terminal multiplexer (zellij via yazelix)

Yazelix wires zellij + yazi into a single workspace where the file manager and shell panes coexist. There’s no tmux anymore.

ActionDefault keybinding
Open file pickeryazelix’s y from any pane (or run y for yazi standalone)
Edit a file from yaziEnter — opens in nvim, or routes to a shared zellij nvim pane if one is open
New pane / splitzellij’s Ctrl+p then a direction key
Detach sessionCtrl+o d
Quit sessionCtrl+q

Configuration lives upstream in yazelix’s docs — the dev module just enables it with terminal = "ghostty" and binds yazi/lazygit/helix to host (non-flake) versions for speed.

Shell (fish)

Fish is enabled with empty greeting, atuin for history search, zoxide for cd, and yazelix integration. There are no fixed abbreviations baked in by the module — add your own in your personal config if you want them.

Starship prompt shows: [ssh:host] dir [git_branch][git_status] (nix) (k8s/ctx) (cmd_duration) >

  • Hostname only when SSH’d in (ssh: prefix).
  • Directory truncated to 3 segments, clamped to repo root.
  • Git status is [$ahead_behind$modified] inline with the branch.
  • Nix shell marker shows when you’re inside nix develop / nix shell.
  • Kubernetes context/namespace, when the current dir matches a kube-related path.
  • Command duration only for commands ≥ 2s.
  • Prompt char is > — green on success, red on the last non-zero exit.

File manager (yazi)

Yazi opens via y (shell wrapper) or from within yazelix. Defaults: hidden files visible, natural sort, directories first.

Press Enter on a text-ish file and it opens in nvim — or hands off to an existing zellij nvim pane if one’s already running (the rule is in mgr.opener.edit).

Neovim (nixvim)

Leader key is Space. The full plugin and LSP set is in modules/home/dev.nix — the highlights below.

File navigation

KeyAction
-Open parent directory (oil.nvim file explorer)
qClose oil buffer
Ctrl+sOpen file in vertical split (in oil)
Space ffFind files (telescope)
Space flLive grep across project
Space fBSwitch buffers
Space foRecent files
Space fbFile browser (telescope)
Space f/Fuzzy find in current buffer
Space f<CR>Resume last telescope search

Harpoon (quick file switching)

Pin up to 4 files for instant access:

KeyAction
Space haAdd current file to harpoon
Space hhToggle harpoon quick menu
Space h1Space h4Jump to harpoon file 1–4

Flash (jump anywhere)

Press s then type 2 characters to jump to any visible match. Labels appear on matches — type the label to jump.

LSP

KeyAction
Space gdGo to definition
Space grList references
Space gIGo to implementation
Space gtGo to type definition
Space fsDocument symbols
Space fdDiagnostics

Diagnostics float automatically on CursorHold. Inlay hints are enabled.

Enabled language servers: bash, C/C++ (clangd), CSS, Docker, Go, HTML, LaTeX (ltex), Lua, Markdown, Nix (nil), Python (pyright), Rust (rust-analyzer), Terraform, TypeScript, YAML, Zig.

Treesitter text objects

Select, move between, and swap code structures.

Selection (visual mode):

KeySelects
vaf / vifAround/inside function
vac / vicAround/inside class
vaa / viaAround/inside parameter
vai / viiAround/inside conditional
val / vilAround/inside loop

Movement:

KeyJumps to
]f / [fNext/previous function start
]F / [FNext/previous function end
]c / [cNext/previous class start
]a / [aNext/previous parameter

Swap:

KeyAction
Space saSwap parameter with next
Space sASwap parameter with previous

Surround

KeyActionExample
ys{motion}{char}Add surroundysiw" wraps word in quotes
cs{old}{new}Change surroundcs"' changes " to '
ds{char}Delete surroundds" removes surrounding quotes

Other features

KeyAction
Space uToggle undotree (persistent undo history across sessions)
Space fqQuickfix list
Space frRegisters
Space f'Marks
Space fhHelp tags

Formatting on save

Conform-nvim with LSP fallback:

LanguageFormatters
Gogofmt, goimports
Pythonisort, black
Terraform/HCLterraform_fmt, hclfmt
Nixalejandra
Luastylua
YAMLyamlfix
Othertrim_whitespace

Copilot

GitHub Copilot is wired through copilot-cmp (completion menu), not ghost text. Suggestions appear alongside LSP completions.

Git

Configured with delta for side-by-side diffs, absorb, histogram diff algorithm, zdiff3 merge style, and rerere. The module does not set user.name or user.email — add those in your own config:

programs.git.settings.user = {
  name = "Your Name";
  email = "you@example.com";
};