Files
nixos/CLAUDE.md
T
kenji 6919f27890 refactor(modules): rename system/ to nixos/
Clearer naming to distinguish NixOS system modules from
Home Manager modules (nixos/ vs home/).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 19:13:10 -06:00

2.3 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 new configuration
sudo nixos-rebuild switch --flake ~/.config/nixos/#hakase

# Manage SOPS secrets
nix-shell -p sops --run "sops secrets/secrets.yaml"
nix-shell -p sops --run "sops updatekeys secrets/secrets.yaml"

Architecture Overview

This is a modular, flake-based NixOS configuration for a single host (hakase).

Key Entry Points

  • flake.nix - Declares inputs and creates NixOS configuration
  • config.nix - Central configuration values (username, hostname, paths, theme settings, bookmarks)
  • hosts/hakase/configuration.nix - Host-level entry point that imports system modules

Module Organization

Two-tier module system:

  • modules/nixos/ - NixOS system-level modules (boot, kernel, services, hardware)
  • modules/home/ - Home Manager user-level modules (imported via home/hakase.nix)

Application configs: Each application has its own directory in apps/ with a default.nix and optional sub-modules (e.g., apps/hyprland/hypr/*.nix for Hyprland settings).

Configuration Flow

flake.nix
  └─ nixosConfigurations.hakase
       ├─ hosts/hakase/configuration.nix
       │   └─ modules/nixos/default.nix (imports all system modules)
       └─ home-manager
           └─ home/hakase.nix
               └─ modules/home/* → apps/*

Module Pattern

Modules receive these parameters:

{ pkgs, config, myConfig, inputs, ... }:

Access configuration values via myConfig:

myConfig.nixos.username    # "hakase"
myConfig.nixos.hostname    # "hakase"
myConfig.terminal.default  # Terminal emulator
myConfig.hyprland.monitors # Monitor configuration

Secrets Management

Uses SOPS for encrypted secrets. Keys stored at ~/.config/sops/age/keys.txt.

Access secrets in modules:

config.sops.secrets.secret_name.path

Key Technologies

  • Hyprland with UWSM (systemd session management)
  • Stylix for system-wide theming from wallpaper colors
  • Home Manager for user environment
  • nixovim flake for Neovim configuration

Git Commit Convention

Use conventional commits: feat(scope):, fix(scope):, refactor:, add:, remove:, cleanup: