Blueprint is a declarative, reproducible development environment built on Nix and NixOS. It's based on Numtide's Blueprint, adapted and extended with personal configurations.
Nix is a purely functional package manager and programming language created by Eelco Dolstra in 2003. It treats packages and configurations as immutable, reproducible artifacts, enabling developers to describe their entire system state in code.
Why Nix matters:
- Reproducibility: Define your environment once, deploy it identically everywhere (laptop, server, team)
- Declarative: System state is explicit code, not imperative commands
- Atomic Operations: Updates and rollbacks are instant and safe
- Dependency Management: No "dependency hell" — strict isolation and versioning
- Culture: A vibrant community building the future of package management and system configuration
I'm deeply committed to the Nix ecosystem because it fundamentally changes how we think about software environments. Rather than "it works on my machine," you get "it works everywhere, guaranteed."
- darwin: Fully configured (x86_64 and arm64 support)
- nixos: Work in progress
Rebuild your system with:
darwin-rebuild switch --flake .#darwinUnlike traditional home-manager approaches, Blueprint uses Nix Darwin for macOS system configuration, providing deeper integration with macOS while maintaining Nix's declarative philosophy.
Coming soon. Current setup is validated on Darwin.
- Terminal: Ghostty — A modern, GPU-accelerated terminal
- Shell: Fish — Friendly interactive shell with smart completions
- Prompt: Starship — Minimal, blazing-fast cross-shell prompt
- Multiplexer: tmux — Terminal multiplexer (primary)
- Alternative: Zellij — User-friendly multiplexer (exploring)
- Editor: NixVim — Neovim configured entirely in Nix
- Theme: Dracula (current)
- Custom Theme: Denim (work in progress)
The Denim theme is a personal tribute to denim culture — inspired by raw denim, salvage denim heritage, Japanese denim craftsmanship, and the intricate details of the Kapital brand. It's more than aesthetics; it's about bringing that timeless, worn-in quality to the dev environment.
- Primary Font: Geist Mono — Clean, readable monospace font
- Enhancement: Nerd Fonts — Extended icons and symbols
- Backlog Tool: Backlog.md — Git-native collaboration between humans and AI agents
- AI Tools: Nix AI Tools (Numtide) — AI-powered utilities for the Nix ecosystem
Blueprint fully leverages NixVim for Neovim configuration. All settings are declarative, version-controlled, and reproducible.
Core Integration: blink-cmp (framework) + lspconfig (6 LSP servers) + supermaven (AI) + luasnip (snippets)
The completion system is built on blink-cmp, a modern, performant completion framework that aggregates multiple sources into a single, unified menu:
- LSP: Real-time diagnostics and completions from language servers
- Paths: File system path completion
- Snippets: Code templates via luasnip
- Buffer: Words from open buffers
- AI: Supermaven AI-powered suggestions (free tier available)
All sources are merged into a single menu with async fuzzy matching (0.5-4ms), typo resistance, and contextual awareness.
Keymaps:
<C-space>— Open completion menu<Tab>/<S-Tab>— Navigate completions<CR>— Accept selected completion<C-a>— Accept AI suggestion (Supermaven)<C-e>— Dismiss completion menu<C-j>— Accept AI word suggestion (Supermaven)
First-time setup:
:SupermavenUseFree
:LspInfo
blueprint/
├── modules/
│ ├── home/
│ │ ├── home-shared.nix (Shell, LSP, fonts, packages)
│ │ ├── programs/
│ │ │ ├── nixvim/
│ │ │ │ └── config/
│ │ │ │ ├── default.nix (Plugin imports)
│ │ │ │ ├── blink.nix (Completion framework + luasnip)
│ │ │ │ ├── lspconfig.nix (Language servers)
│ │ │ │ ├── supermaven.nix (AI completion)
│ │ │ │ ├── keymaps.nix (All keybindings)
│ │ │ │ ├── which-key.nix (Keymap groups & help)
│ │ │ │ ├── colorscheme.nix (Theme configuration)
│ │ │ │ └── [28 other plugins]
│ │ │ ├── fish.nix (Shell configuration)
│ │ │ ├── ghostty.nix (Terminal settings)
│ │ │ ├── starship.nix (Prompt configuration)
│ │ │ ├── tmux.nix (Multiplexer config)
│ │ │ ├── zellij.nix (Zellij config)
│ │ │ ├── git.nix (Git settings)
│ │ └── home-darwin.nix
│ ├── darwin/
│ └── nixos/
├── hosts/
│ ├── darwin/
│ │ └── default.nix (Darwin system config)
│ └── nixos/
├── flake.nix
├── flake.lock
├── cz.json
└── README.md (this file)
Completion: blink-cmp, blink-compat, luasnip, lspconfig, supermaven
UI: alpha, bufferline, lualine, noice, which-key, snacks, fidget
Navigation: telescope, harpoon, oil, tmux-navigator, flash, navbuddy
Git: gitsigns, diffview, fugitive, lazygit, undotree
Code Quality: conform, trouble, neotest, dap (+ dap-ui, dap-go, dap-virtual-text)
Treesitter: treesitter, treesitter-textobjects, treesitter-context, twilight
Text Editing: comment, mini (ai, surround, pairs), spectre, render-markdown
Other: editorconfig, sleuth, persistence, arrow, lazydev, pbcopy
Configured in modules/home/home-shared.nix under programs.nixvim.lsp.servers.
| Server | Languages | Features |
|---|---|---|
| gopls | Go | Completion, diagnostics, inlay hints, refactoring |
| ts_ls | TypeScript/JavaScript | Type checking, imports, completions |
| lua_ls | Lua | Vim API awareness, completions |
| bashls | Bash | Linting, diagnostics, completions |
| jsonls | JSON | Schema validation, completions |
| nil_ls | Nix | Formatter awareness, completions |
All keybindings are documented via which-key (press <leader>? to view).
Core Navigation:
H/L— Start/end of linej/k— Smart vertical navigation (respects line wraps)J/K(visual) — Move selection up/down<Left>/<Right>— Previous/next buffer<C-h/j/k/l>— tmux pane navigation<C-\>— tmux previous pane
Search & Find (<leader>f):
ff— Find files (Telescope)fw— Find word (live grep)fb— Find buffersfh— Find help tags
File Navigation:
-— Oil file explorer (parent directory)<leader>e— Snacks file explorer<leader>h+ {a/m/1/2/3/4} — Harpoon bookmarks
LSP (<leader>c):
cf— Format buffercl— LSP referencescs— Symbolsgd— Go to definition (Trouble)gr— Go to references (Trouble)gi— Go to implementation (Trouble)gy— Go to type definition (Trouble)
Debugging (<leader>D):
b— Toggle breakpointc— Continuesi— Step intoso— Step overu— DAP UI toggle
Testing (<leader>t):
r— Run nearest testf— Run file testss— Toggle test summary
Git:
<leader>G— Gitsigns (hunks, blame, staging)k/j— Previous/next hunkp— Preview hunks/u— Stage/unstager/R— Reset hunk/bufferl— Blame lined— Diff against HEAD
<leader>g— LazyGit<leader>GU— Undo tree
Diagnostics (<leader>x):
x— All diagnosticsX— Buffer diagnosticsl— LSP definitions/referencesL— Location listQ— Quickfix list
UI Toggles (<leader>u):
s— Spellingw— Line wrapL— Relative line numbersl— Line numbersd— Diagnosticsc— Conceal levelT— Treesitterb— Dark backgroundh— Inlay hintsg— Indent guidesD— Dim
Code Inspection (<leader>v):
v— Init treesitter selection
Treesitter Text Objects (outer/inner):
af/if— Functionac/ic— Classai/ii— Conditionalal/il— Loopap/ip— Parameter[f/]f— Previous/next function[c/]c— Previous/next class[p/]p— Previous/next parameter<leader>a/A— Swap parameter with next/previous
Motion (Flash):
s— Flash jump to characterS— Flash treesitter scoper— Remote flash (operator pending)R— Treesitter search<C-s>(command mode) — Toggle flash search
Find & Replace (<leader>R):
r— Open spectrew— Replace wordf— Replace in buffer
Session Management (<leader>q):
s— Load current sessionS— Select sessionl— Load last sessiond— Disable persistence
Code Navigation:
<leader>nb— Navbuddy (code structure browser)
- Leader key: Space (
<space>) - Completion: Async with typo tolerance
- Snippets: luasnip preset
- Nerd Font: Mono variant with full icon support
- Theme: Dracula (with Denim WIP alternative)
- Declarative: All config in Nix files
- Documented: Each file has rationale and source links
- Minimal: No external setup scripts needed
- Composable: Plugins import cleanly, no conflicts
- Reproducible: Exact environment guaranteed across machines
- Discoverable: Keymaps documented with which-key and descriptions
From home-shared.nix:
Terminal & Shell: tmux, zellij, starship, lazygit, lazydocker, gh
CLI Utilities: ripgrep, fzf, fd, bat, eza, btop, jq, zoxide, yazi
Fonts: Geist Mono, Nerd Fonts symbols-only
AI Tools (from nix-ai-tools): amp, catnip, claude-code, droid, forge, gemini-cli, goose-cli, qwen-code
- Numtide Blueprint — The original template this is based on
- Numtide Nix AI Tools — AI integrations
- Run
:SupermavenUseFreein NixVim to activate AI completion - Check
:LspInfoto verify all language servers are running - Press
<leader>?to view all keybindings organized by group - Review plugin configs in
modules/home/programs/nixvim/config/for customization - Customize Fish shell in
modules/home/programs/fish.nix - Check out the Denim theme preview at arminbabaei.com/theme
- Monitor NixOS configuration progress in
modules/nixos/