This repository contains:
- Nix configuration (starting in
flake.nix) for:- macOS machines configured with nix-darwin
- Linux NixOS machines (WSL)
- Dotfiles managed by chezmoi
- Neovim configuration using lazy.nvim and NvChad
lazy.nvimloads plugin config from~/.config/nvim/lua/plugins/*.lua(which is generated bychezmoifrom./chezmoi/dot_config/nvim/lua/plugins/*.lua)- Neovim
lazyplugin config extends any config provided by NvChad plugin config
- Neovim configuration using lazy.nvim and NvChad
In alphabetical order:
├──.chezmoiroot Chezmoi source-root marker├──.pi/skills/ Local agent skills (nix packages, terminal configs, model pricing, flake inputs)├──.python-version Pinned Python version├──AGENTS.md Guidance for AI assistants working on this repo├──chezmoi/ Dotfiles managed by chezmoi│ ├──.chezmoi.toml.tmpl Chezmoi behavior/template variables│ ├──.chezmoiignore Files chezmoi should ignore│ ├──dot_cargo/ Cargo (Rust) config files│ ├──dot_colima/ Colima container-runtime config│ ├──dot_commandcode/ CommandCode mods, config, and settings│ ├──dot_config/ App configs│ │ ├──bat/ bat (better cat) config│ │ ├──fish/ Fish shell config and functions│ │ ├──gastown/ Gastown shell hook│ │ ├──ghostty/ Ghostty terminal config│ │ ├──helix/ Helix editor config│ │ ├──herdr/ Herdr config and plugins│ │ ├──hk/ hk config│ │ ├──kitty/ Kitty terminal config and theme│ │ ├──lftp/ lftp FTP client config│ │ ├──nvim/ Neovim editor config│ │ │ ├──autoload/normful.vim Legacy Vim autoload helpers│ │ │ ├──lua/augroups.lua.tmpl Neovim autocommand groups (chezmoi template)│ │ │ ├──lua/chadrc.lua NvChad configuration│ │ │ ├──lua/directory-watcher.lua Auto-refresh when directory changes│ │ │ ├──lua/hotreload.lua Live config reload│ │ │ ├──lua/lazy-config.lua Lazy.nvim plugin manager config│ │ │ ├──lua/lsp-on-attach.lua LSP client attachment handlers│ │ │ ├──lua/mappings-helpers.lua Key mapping utility functions│ │ │ ├──lua/mappings.lua Custom key bindings│ │ │ ├──lua/neovide.lua Neovide GUI client config│ │ │ ├──lua/options.lua Neovim options and settings│ │ │ ├──lua/plugins/ ~60 plugin specs in lazy.nvim format (e.g. telescope, treesitter, lspconfig)│ │ │ └──lua/user-commands.lua Custom user commands│ │ ├──pi-auto-name/ pi auto-name config│ │ ├──private_atuin/ Atuin shell-history config (private)│ │ ├──private_lean-ctx/ lean-ctx layout and config (private)│ │ ├──procs/ procs process viewer config│ │ ├──rpiv-advisor/ rpiv-advisor config (private)│ │ ├──rpiv-pi/ rpiv-pi model config (private)│ │ ├──tmux/ tmux config, helpers, and tpluck config│ │ ├──tokscale/ tokscale custom model pricing│ │ ├──wezterm/ WezTerm terminal config (chezmoi template)│ │ ├──yazi/ Yazi file manager config│ │ ├──zellij/ Zellij terminal multiplexer config│ │ └──zsh/ Zsh completions and functions│ ├──dot_gitconfig.tmpl Global Git configuration (chezmoi template)│ ├──dot_gitignore_global Global Git ignore patterns│ ├──dot_local/bin/ Personal scripts (~25 executables: git helpers, media converters)│ ├──dot_pi/ pi agent settings, models, subagents, and custom agents│ ├──dot_ripgreprc ripgrep defaults│ ├──dot_serena/ Serena config modifier│ ├──dot_terminfo/ Terminfo entries (e.g. wezterm)│ ├──dot_warp/ Warp terminal themes, settings, keybindings, workflows│ ├──dot_zshrc Zsh rc│ ├──intelephense/ Intelephense licence template│ ├──private_Library/ macOS LaunchAgents and app prefs, e.g. glow themes (private)│ └──private_dot_jcode/ jcode config (private, chezmoi template)├──flake.lock Nix flake lock (pins inputs for reproducibility)├──flake.nix Main Nix flake (NixOS + macOS configs)├──LICENSE License├──mac/ macOS (nix-darwin) configuration│ └──cyan/ Host config for 'cyan' MacBook Pro│ └──configuration.nix nix-darwin system configuration├──modules/ Shared NixOS/nix-darwin modules used by hosts│ ├──core-wsl.nix WSL-specific base config│ ├──interactive-cli.nix Interactive CLI tooling│ ├──locale.nix Locale and timezone settings│ ├──neovim.nix Neovim build + language tooling│ ├──nix.nix Nix daemon, GC, substituters/caches│ ├──optional-packages-without-config.nix Optional packages needing no extra config│ ├──overall-options.nix Shared top-level options│ ├──user-minimal.nix Minimal user setup│ └──user-ssh-keypair.nix Managed user SSH keypair├──overlays/ Nixpkgs overlays: default.nix, figlet-patched/ (patched figlet + tests), hello-wrapped-config/├──packages/ Custom Nix packages, one dir per package each withdefault.nix(~40 packages, e.g. neovim/, tpluck/, lean-ctx/; some Rust packages also carryCargo.lock)├──pyproject.toml Python project config├──stylua.toml StyLua formatter config (Lua files)├──uv.lock uv lockfile for reproducible Python deps└──wsl/ WSL host configs└──duro/ Host config for 'duro' WSL instance (configuration.nix,my-config.nix)
Aside from this README.md, the other main docs are:
- AGENTS.md: detailed instructions for AI coding agents to understand this repository. Humans may find it useful too
- Currently, this repo contains config for:
- A MacBook Pro named
cyanin mac/cyan/configuration.nix - A WSL instance named
duroin wsl/duro/configuration.nix
- A MacBook Pro named
I tried it already and didn't like it, Specifically, I tried running NixOS in a VM in VMWare Fusion and Parallels.
Although it worked, I realized that I prefer the simplicity of using nix-darwin on macOS. There seemed to be too many bugs and workarounds needed to make Parallels Tools or VMWare Tools properly.
Home Manager adds another layer of unnecessary complexity for me. I can't remember all of the Nix options specific to Home Manager. And althought I could, I just don't want to spend unnecessary time reading through the Nix configuration in Home Manager.
I use all 3: WezTerm, kitty, Ghostty.
I configure them with nearly identical keymappings.
For most scenarios, any one of them is sufficient for me. But they each have some special strengths:
Kitty:
- smoothest inline image rendering, using its graphics protocol, which I use with image.nvim
- visual font selector
WezTerm:
- has the most features and special modes
Ghostty:
- no issues when SSH'ing into certain VMs