add CLAUDE.md
This commit is contained in:
71
CLAUDE.md
Normal file
71
CLAUDE.md
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
NixOS dotfiles repository using Nix Flakes for managing multiple machines. Configuration is in French (comments, docs).
|
||||||
|
|
||||||
|
## Build & Deploy Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Rebuild and switch configuration (local)
|
||||||
|
sudo nixos-rebuild switch --flake .#<hostname>
|
||||||
|
|
||||||
|
# Rebuild on remote machine
|
||||||
|
nixos-rebuild switch --flake .#<hostname> --target-host beastie@<ip> --sudo
|
||||||
|
|
||||||
|
# Bootstrap new machine with nixos-anywhere
|
||||||
|
nixos-anywhere --flake .#generic --target-host root@<ip> \
|
||||||
|
--generate-hardware-config nixos-generate-config ./hosts/generic/hardware-configuration.nix
|
||||||
|
|
||||||
|
# Generate custom ISO
|
||||||
|
nixos-generate --format iso --configuration ./iso/customiso.nix -o ~/Downloads/nixos.iso
|
||||||
|
|
||||||
|
# Update flake inputs
|
||||||
|
nix flake update
|
||||||
|
|
||||||
|
# Update secrets after adding new host key
|
||||||
|
sops updatekeys secrets.yaml
|
||||||
|
nix flake update mysecrets
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
**Flake Inputs:**
|
||||||
|
- `nixpkgs-stable` (25.05) and `nixpkgs-unstable` channels
|
||||||
|
- `disko` for declarative disk partitioning
|
||||||
|
- `sops-nix` for encrypted secrets
|
||||||
|
- `mysecrets` - local git repo at `/home/beastie/nixos/secrets` (required dependency)
|
||||||
|
|
||||||
|
**Hosts:** `generic` (ISO), `test-kvm` (stable), `home-nix` (unstable), `work-nix` (unstable)
|
||||||
|
|
||||||
|
**Module Hierarchy:**
|
||||||
|
1. `modules/core/` - Applied to ALL hosts (grub, ssh, packages, users, tty, system)
|
||||||
|
2. `modules/optionnals/` - Selectively imported per host
|
||||||
|
3. `modules/optionnals/hosts/<hostname>.nix` - Host-specific networking, services
|
||||||
|
4. `modules/optionnals/desktop/` - Desktop environment modules (Hyprland, apps)
|
||||||
|
|
||||||
|
## Key Patterns
|
||||||
|
|
||||||
|
**Custom Options** (`modules/optionnals/options.nix`):
|
||||||
|
- `my.laninterface`, `my.ipv4address`, `my.ipv4netmask`, `my.ipv4gateway`, `my.wolipv6address`
|
||||||
|
|
||||||
|
**Special Args** passed to all modules via flake.nix:
|
||||||
|
- `hostname` and `username` - used for host/user-specific configuration
|
||||||
|
|
||||||
|
**Secrets (sops-nix):**
|
||||||
|
- Encrypted YAML in separate `mysecrets` repo
|
||||||
|
- Referenced via `config.sops.secrets.<name>.path` or `config.sops.templates`
|
||||||
|
- Age encryption with SSH host keys
|
||||||
|
|
||||||
|
**XDG Config Distribution:**
|
||||||
|
- Desktop configs (hyprland, waybar, kitty, rofi) use `environment.etc."xdg/<app>".source`
|
||||||
|
- Host-specific variants: `hyprland-${hostname}.conf`
|
||||||
|
|
||||||
|
## Important Considerations
|
||||||
|
|
||||||
|
- Test changes on `test-kvm` before deploying to production hosts
|
||||||
|
- `mysecrets` flake input must exist locally at `/home/beastie/nixos/secrets`
|
||||||
|
- Different hosts use different `stateVersion` (25.05 vs 25.11)
|
||||||
|
- Core module changes affect ALL machines
|
||||||
@@ -94,5 +94,6 @@ in
|
|||||||
pkgs.nixfmt
|
pkgs.nixfmt
|
||||||
pkgs.ansible
|
pkgs.ansible
|
||||||
pkgs.python313
|
pkgs.python313
|
||||||
|
pkgs.claude-code
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user