A comprehensive, reproducible Nix Home Manager configuration optimized for functional programming and modern development workflows.
# 1. Install Nix with flakes
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
# 2. Clone this configuration
git clone https://github.com/LitFill/home-manager.git ~/.config/home-manager
cd ~/.config/home-manager
# 3. Update username in home.nix and flake.nix
# 4. Activate the configuration
home-manager switch --flake .#your-usernameFor detailed setup instructions, see the Setup Guide.
- Setup Guide - Installation and configuration
- Configuration Guide - Module documentation and customization
- Examples - Visual examples and workflows
- Contributing - How to contribute to this configuration
home-manager/
├── config/
│ ├── nixvim/ # Neovim configuration
│ │ ├── base.nix # Common Neovim modules hub
│ │ ├── profiles/ # Machine-specific profiles
│ │ ├── plugins.nix # Plugin definitions
│ │ ├── keymaps.nix # Keyboard shortcuts
│ │ ├── lsp.nix # Language server setup
│ │ ├── autocmds.nix # Auto commands
│ │ ├── options.nix # Editor options
│ │ └── extra.nix # Additional configurations
│ ├── shell/ # Shell configurations
│ │ ├── nushell.nix # Nushell setup
│ │ └── starship.nix # Starship prompt
│ ├── tmux.nix # Terminal multiplexer
│ ├── packages.nix # Package list
│ ├── git.nix # Git configuration
│ ├── shell.nix # Shell tools
│ └── nixvim.nix # NixVim entry point
├── home.nix # Main configuration
├── flake.nix # Nix flake definition
├── SETUP.md # Setup instructions
└── README.md # This file
- Functional Programming: Haskell (GHC, HLS, Fourmolu), Idris2, OCaml
- Modern Languages: Rust (rustup), TypeScript, Lua
- Language Servers: Comprehensive LSP support for all major languages
- Code Quality: Hlint, Shellcheck, StyLua, Fourmolu formatters
- Shell: Nushell with Starship prompt and carapace completions
- Navigation: zoxide for smart directory jumping, broot for file browsing
- Multiplexing: tmux with sensible defaults
- File Tools: yazi (file manager), fd (find), ripgrep (search)
- Editor: Neovim with NixVim configuration
- System Monitoring: btop, fastfetch
- Documentation: pandoc, glow for markdown rendering
- Finance: Complete hledger suite for accounting
- Reproducible: Everything declared in Nix, no manual setup
- Modular: Clean separation of concerns with individual modules
- Minimal: Essential tools without bloat
- Cross-platform: Works on any Linux system with Nix
| Category | Packages |
|---|---|
| Languages | Haskell, Idris2, Rust, TypeScript, Lua |
| Tools | Git, tmux, fd, ripgrep, rsync |
| Formatters | Fourmolu, StyLua, nixfmt |
| LSP Servers | HLS, rust-analyzer, tsserver, lua-ls |
| System | btop, fastfetch, direnv |
| Documentation | pandoc, glow |
| Finance | hledger suite |
This configuration is designed to be easily customizable:
- Add packages: Edit
config/packages.nix - Configure shell: Modify
config/shell/files - Customize editor: Update
config/nixvim/directory - Change tools: Edit individual module files
The Neovim configuration is modular and supports profiles for machine-specific overrides:
- Base Config:
config/nixvim/base.nixcontains the shared configuration. - Profiles:
config/nixvim/profiles/contains machine-specific modules. - Switching Profiles: Set
neovim-profileinflake.nixto the desired profile name.
Important
Because this project uses Nix Flakes, any new profile files must be staged or committed (e.g., git add config/nixvim/profiles/my-profile.nix) before they can be used in flake.nix. Nix will not be able to find untracked files.
For now I purposefully ignore config/desktop.nix for I am not on NixOS yet.
Contributions are welcome! See CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.