3.1 KiB
3.1 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Build Commands
# Rebuild and switch to main system (default specialization)
ns # alias for: nh os switch --specialisation 00-main-system
# Update flake inputs and commit lock file
nu # alias for: (cd ~/nixos-dots && nix flake update --commit-lock-file)
# Edit configuration in Emacs
ne # alias for: emacsclient -c ~/nixos-dots/configuration.nix
# Direct rebuild commands (if not using nh aliases)
sudo nixos-rebuild switch --flake .#mrfluffyPC
sudo nixos-rebuild switch --flake .#mrfluffyLaptop
Architecture
Multi-Host / Multi-User System
This is a NixOS flake configuration targeting two machines (mrfluffyPC, mrfluffyLaptop) with three users (mrfluffy, work, game). The systemName variable ("pc" or "laptop") is passed through specialArgs to enable hardware-conditional configuration.
Specializations
Two boot specializations exist in configuration.nix:
00-main-system: Default desktop environment with Hyprland, full dev tooling01-steam: Gaming mode with Gamescope, Steam Big Picture, auto-login togameuser
Directory Structure
flake.nix # Flake inputs and nixosConfigurations
configuration.nix # Entry point: users, home-manager, specializations
hardware-configuration.nix
system/ # NixOS modules (boot, hardware, services, packages)
├── boot.nix # Bootloader, kernel config (laptop/pc conditional)
├── hardware.nix # GPU drivers (Intel for laptop, AMD for PC)
├── nixOSPkgs.nix # System packages (~2300 lines)
├── services.nix # System services (greetd, pipewire, etc.)
└── specialisation/ # Boot mode configs
home/ # Home Manager user configs
├── mrfluffy.nix # Main user (imports dots/, stylix, services)
├── work.nix # Work user
├── game.nix # Gaming user
├── homePkgs.nix # User packages
└── stylix.nix # Unified theming (base16, fonts, cursors)
dots/ # Application dotfiles as Nix modules
├── hyprland.nix # Primary window manager
├── waybar.nix # Status bar
├── foot.nix # Terminal
├── zsh.nix # Shell config with aliases
└── doom/ # Doom Emacs config (raw files)
assets/Wallpapers/ # Wallpaper images
Window Manager Selection
Set in flake.nix via window_manager variable (options: "hyprland", "river", "niri", "all"). Currently set to "hyprland". This variable is passed to modules for conditional WM configuration.
Theming
Stylix + nix-colors provide unified theming across all applications:
- Color scheme:
hardcore(base00:#141414) - Configured in
home/stylix.nix
Conditional Hardware Config
Use the systemName variable ("laptop" or "pc") for hardware-specific code:
let
isLaptop = systemName == "laptop";
isPc = systemName == "pc";
in
# ... use lib.mkIf for conditional values