# Project Index Quick reference to all files and their purposes. ## Getting Started Start here in this order: 1. **README.md** - Feature overview and quick start 2. **SETUP.md** - Step-by-step installation guide 3. **QUICKREF.md** - Command reference for daily use ## Documentation - **README.md** - Overview, features, directory structure, usage patterns - **SETUP.md** - Detailed setup from scratch, per-scenario instructions - **QUICKREF.md** - Command reference, common tasks, one-liners - **CUSTOMIZATION.md** - Advanced patterns, extension examples - **ARCHITECTURE.md** - Design principles, data flow, scalability - **INDEX.md** - This file ## Configuration Files ### Core Configuration - **flake.nix** - Main entry point - Defines all inputs (nixpkgs, home-manager, sops-nix, disko) - Specifies all outputs (nixosConfigurations, homeConfigurations) - Includes development shell and installer app - **Requires customization**: Replace `youruser` with actual username ### Host Configurations (Per-Machine) - **hosts/laptop/default.nix** - Laptop configuration template - Networking hostname - Disko disk partitioning - Development tools to enable - **Requires customization**: Hostname, disk device, language selection - **hosts/server/default.nix** - Server configuration template - Minimal development tools - Same structure as laptop, customize as needed ### NixOS System Modules (Shared) - **nixos/default.nix** - System configuration entry point - Imports all modules - System packages (git, curl, vim, htop) - Nix settings, garbage collection, locale - **Touch rarely**: Mostly imports - **nixos/modules/system.nix** - System base configuration - User creation (currently `youruser` - customize) - Sudo configuration - System state version - **Options exposed**: `custom.system.enable` - **nixos/modules/development.nix** - Development tools module - Language-specific packages (rust, python, nodejs, go, ruby) - Build tools (gcc, cmake, gdb, etc) - Container support (docker/podman) - **Options exposed**: `custom.development.enable`, `custom.development.languages` - **Example**: Set `languages = [ "rust" "python" ]` to install - **nixos/modules/shell.nix** - Shell configuration - Zsh, bash, fish support - Starship prompt, direnv integration - **Options exposed**: `custom.shell.enable`, `custom.shell.defaultShell` - **nixos/modules/secrets-example.nix** - Secrets integration example - Shows how to use sops-nix for encrypted secrets - NOT imported by default - Uncomment in `nixos/default.nix` to enable - Reference for managing SSH keys, API tokens, passwords - **nixos/modules/example-template.nix** - Template for new modules - Shows the module pattern: options + config - Copy and customize for new features ### Home Manager User Configuration (Portable) - **home/default.nix** - User configuration entry point - Imports all home modules - Home username, home directory, stateVersion - User-level packages (utilities, tools) - Environment variables - **Requires customization**: Username, email (in git.nix) - **home/modules/shell.nix** - Shell environment - Zsh configuration (autosuggestion, syntax highlighting) - Shell aliases (ls → exa, cat → bat) - Starship prompt setup - Direnv integration for per-project shells - Zsh-z plugin for directory navigation - **home/modules/editor.nix** - Editor configuration - Neovim as primary editor - LSP setup (language servers) - Plugins: telescope, lualine, treesitter, git integration - Alternative: VSCode (commented out) - **Note**: Basic config, customize for your needs - **home/modules/git.nix** - Git configuration - Git username, email - Default branch, pull strategy - Common aliases (st, co, br, ci) - **Requires customization**: Your name and email - **home/modules/dev-tools.nix** - Development utilities - Debuggers (lldb, gdb) - Version managers (fnm, pyenv) - Build tools (cmake, ninja, meson) - System utilities (tmux, htop, iotop) - Container tools (podman, podman-compose) - Tmux configuration with mouse support and vi keybindings - **home/modules/example-template.nix** - Template for new user modules - Shows home-manager module pattern - Copy and customize for new user features ### Secrets Management - **secrets/.sops.yaml** - SOPS encryption configuration - Specifies which keys can decrypt secrets - Points to your age public key - **Requires**: Replace placeholder with your actual age public key - **secrets/secrets.yaml** - Encrypted secrets file - SSH keys, API tokens, passwords - Encrypted with sops (safe to commit) - **Usage**: Edit with `sops secrets/secrets.yaml` - **Never**: Commit unencrypted version ## Build & Deployment No separate deployment files needed - everything flows through flake.nix: ``` flake.nix ├─ nixosConfigurations.laptop → Deploy with: sudo nixos-rebuild switch --flake .#laptop ├─ homeConfigurations.youruser@linux → Deploy with: home-manager switch --flake .#youruser@linux ├─ devShells.default → Enter with: nix develop └─ apps.installer → Run with: nix run .#installer -- laptop ``` ## Support Files - **.gitignore** - Prevents committing secrets, temp files, nix artifacts - **flake.lock** - COMMIT THIS: Pins all dependencies for reproducibility ## Quick Navigation ### "I want to..." | Task | File | Line | Command | |------|------|------|---------| | **Change my hostname** | hosts/laptop/default.nix | 8 | `sed -i 's/laptop/myname/' ...` | | **Change my username** | flake.nix | ~40, 70 | Global replace: `"youruser"` | | **Add a programming language** | hosts/laptop/default.nix | 35 | Add to `languages = [...]` | | **Install new system package** | nixos/default.nix | 14 | Add to `systemPackages` | | **Install new user package** | home/default.nix | 16 | Add to `home.packages` | | **Change default shell** | nixos/modules/shell.nix | 11 | Change `defaultShell = "fish"` | | **Add SSH key to secrets** | secrets/secrets.yaml | 8 | `sops secrets/secrets.yaml` | | **Use unstable package** | home/modules/dev-tools.nix | varies | Use `pkgs-unstable.package` | | **Create a new module** | nixos/modules/example-template.nix | — | Copy template, customize | | **Add a new machine** | hosts/ | — | `mkdir newhost && cp laptop/* newhost/` | ## File Customization Checklist On first setup, customize these: - [ ] **flake.nix** - Replace all `youruser` (3 locations) - [ ] **hosts/laptop/default.nix** - Set `networking.hostName`, verify `/dev/sda` disk - [ ] **home/default.nix** - Set `home.username` - [ ] **home/modules/git.nix** - Set `userName` and `userEmail` - [ ] **secrets/.sops.yaml** - Add your age public key - [ ] **secrets/secrets.yaml** - Add actual SSH keys and API tokens ## File Statistics - **Documentation**: 6 files (README, SETUP, QUICKREF, CUSTOMIZATION, ARCHITECTURE, INDEX) - **Configuration**: 1 core file (flake.nix) - **System modules**: 5 files (default, system, development, shell, secrets-example) - **Home modules**: 6 files (default, shell, editor, git, dev-tools, example-template) - **Hosts**: 2 example files (laptop, server) - **Secrets**: 2 files (.sops.yaml, secrets.yaml) - **Support**: 2 files (.gitignore, flake.lock) Total: ~24 files, all under 500 lines each ## Update Schedule ### When to update inputs ```bash # Monthly (security patches) nix flake update nixpkgs sudo nixos-rebuild switch --flake .#laptop # Less frequently (minor version bumps) nix flake update # Test before committing nix flake check sudo nixos-rebuild test --flake .#laptop ``` ### When to add modules Add modules when: - Feature can be enabled/disabled independently - Reused across multiple machines - Follows the options + config pattern ## Related Resources - NixOS Manual: https://nixos.org/manual/nixos/stable - Home Manager: https://nix-community.github.io/home-manager - Nix Flakes: https://nix.dev/manual/nix/latest/command-ref/new-cli/nix3-flake - sops-nix: https://github.com/mic92/sops-nix - Disko: https://github.com/nix-community/disko --- **Next Step**: Read README.md for a feature overview, then SETUP.md for installation instructions.