# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview NixOS flake configuration for multiple machines (kronos laptop, herra desktop) using NixOS 25.11 and Home Manager 25.11. Features a layered architecture with swappable desktop rices. ## Common Commands ```bash # Apply configuration (full rebuild and activation) sudo nixos-rebuild switch # Test configuration without making it the default boot option sudo nixos-rebuild test # Validate flake syntax and check for errors nix flake check # Preview what changes would be made sudo nixos-rebuild dry-run # Update flake inputs to latest versions nix flake update # Update specific input (e.g., nixpkgs) nix flake lock --update-input nixpkgs # Build for specific host sudo nixos-rebuild switch --flake .#kronos sudo nixos-rebuild switch --flake .#herra ``` ## Architecture ``` flake.nix # Entry point ↓ hosts/{kronos,herra}/ # Per-machine (hostname + hardware) ↓ system/ # System-wide config ├─ boot, audio, bluetooth, networking, graphics ├─ packages, programs, services, users, nix ├─ desktop.nix # X11 + i3wm └─ stylix.nix # Theming ↓ home/mun/ # User config ├─ programs/ # git, ssh, zsh └─ (imports active rice) ↓ home/rices/{nord-blue,original}/ # Desktop themes ``` ## Key Files - `flake.nix` - Defines inputs (nixpkgs, nixpkgs-unstable, home-manager, stylix, fenix, crane, nixowos) and outputs - `hosts/kronos/configuration.nix` - Laptop-specific config (minimal: just hostname) - `hosts/herra/configuration.nix` - Desktop config (dual-boot with Windows 11, uses GRUB OS prober) - `system/default.nix` - System module orchestrator - `system/packages.nix` - System-wide packages - `home/mun/default.nix` - User orchestrator (imports active rice, user packages, programs) - `home/rices/nord-blue/variables.nix` - Active rice color definitions - `home/rices/nord-blue/default.nix` - Active rice module orchestrator ## Adding Configurations **New system package:** Add to `system/packages.nix` under `environment.systemPackages` **New user package:** Add to `home/mun/default.nix` under `home.packages` (supports fenix Rust toolchain, TeX Live combinations, RetroArch cores) **New system module:** Create in `system/`, add to `system/default.nix` imports **New user program:** Create in `home/mun/programs/`, add to `home/mun/default.nix` imports **New rice module:** Create in active rice directory (`home/rices/nord-blue/`), add to its `default.nix` imports **New rice:** Create `home/rices/my-rice/` with `default.nix` (imports modules) and `variables.nix` (colors, wallpaper) ## Switching Rices Edit `home/mun/default.nix` to change the rice import: ```nix imports = [ ./programs/zsh.nix ./programs/ssh.nix ./programs/git.nix ../rices/nord-blue # Current: alacritty, i3, nvim, helix, picom, fastfetch # ../rices/original # Alternative: kitty, i3, polybar, rofi, dunst, neovim, nnn, picom ]; ``` Then: `sudo nixos-rebuild switch` ## Important Architecture Details **Overlays:** Flake provides `pkgs.unstable.*` for accessing bleeding-edge packages from nixpkgs-unstable while staying on stable 25.11 **NixOwOs Integration:** Enabled in `home/mun/default.nix` for NixOS branding/theming (os-release customization, overlays) **Machine Separation:** Host configs are intentionally minimal (hostname + hardware). All shared system config lives in `system/`, all shared user config in `home/mun/` **Rice Philosophy:** Rices are purely home-manager level. Desktop environment (X11 + i3wm base) is defined in `system/desktop.nix`, rices only configure appearance/theming **Stylix:** System-level theming framework imported at flake level, configured in `system/stylix.nix`