Anish Govind 8010cea0bc home: centralize theme and make home-manager feature-aware
- add home/theme.nix as the single Silicon Volt palette and pass it to
  home modules via extraSpecialArgs
- drive foot, hyprland, hyprlock, mako, fzf, starship, rofi and the
  herdr picker from that palette; raw config files use @color@ tokens
  substituted at build time
- pass my = config.my into home-manager; add my.pi.enable, my.flakeDir
- gate home/pi.nix on my.pi.enable (enabled on hades)
- route zshconf/hyprconf aliases and FLAKE_CONFIG through my.flakeDir
- rename the hyprland monitor option volt.monitors -> hypr.monitors
- fix use_auto_tmux command-substitution bug in zsh/init.zsh
- track home/nvim/config/lazy-lock.json for reproducible plugins
- document theming and toggles in the README
2026-09-19 00:48:19 -07:00

NixOS Configs

Reproducible multi-host NixOS + Hyprland ("Silicon Volt") configuration.

Install (new machine)

# Setup disks
nix run --experimental-features "nix-common flakes" github:nix-community/disko -- --mode disko --flake .#hades

# install configs
nixos-install --flake .#hades

# set password
nixos-enter --root /mnt -- passwd anish

Rebuild (existing machine)

rebuild switch   # zsh helper: sudo nixos-rebuild switch --flake ~/NixOS-Configs#<host>

Adding a new host (e.g. a laptop)

  1. Create hosts/<name>/ with default.nix, hardware-configuration.nix, and (optionally) disko.nix. Shared modules (modules/core, modules/graphical, modules/apps) are already pulled in by commonModules in flake.nix — the host only adds its own hardware/disko config.
  2. Register it in flake.nix under nixosConfigurations.
  3. Turn optional features on per machine via the shared my.* options:
# hosts/<name>/default.nix
my = {
  username = "anish";      # default; change for a different primary user
  gaming.enable = false;   # Steam, Gamemode, MangoHud
  ai.local.enable = false; # Ollama, ComfyUI, Open WebUI
  pi.enable = false;       # pi coding agent (home-manager)
};
  1. Declare host-specific displays in hosts/<name>/default.nix:
home-manager.users.anish.hypr.monitors = [
  {
    output = "eDP-1";              # or "desc:<panel description>"
    mode = "2880x1800@120Hz";      # or "preferred"
    position = "auto";
    scale = 2;
    vrr = null;                    # optional per-monitor VRR
  }
  { output = ""; mode = "preferred"; position = "auto"; scale = "auto"; } # fallback
];

The hypr.monitors default (any output @ preferred) keeps every machine working out of the box; hosts override only what they need. Hosts without an NVIDIA GPU simply don't import modules/hardware/nvidia.nix — all vendor env vars live there, while the vendor-neutral hardware.graphics stack lives in modules/graphical.

Feature toggles (my.*)

Optional app modules are always imported (via modules/apps/default.nix) but only activate when a host sets the corresponding flag, so hosts never need to edit import lists:

Option Enables
my.username Primary user (users, home-manager, getty autologin)
my.flakeDir Checkout path used by the rebuild helper and zshconf/hyprconf aliases
my.gaming.enable Steam, Gamemode, MangoHud
my.ai.local.enable Ollama (CUDA), ComfyUI, Open WebUI
my.pi.enable pi coding agent (home-manager)

Hardware modules remain explicit imports per host (e.g. modules/hardware/nvidia.nix).

Theming

The Silicon Volt palette lives in one place, home/theme.nix, and is passed to every home-manager module through extraSpecialArgs. Tools that only accept a raw config file (starship, rofi, the herdr picker) carry @color@ placeholders that are substituted from the same palette at build time, so changing an accent means editing one file.

Description
No description provided
Readme 289 KiB
Languages
QML 68.2%
Nix 20.8%
Lua 7.1%
Shell 3.9%