# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## System Overview

This is a NixOS system configuration repository using Nix flakes with home-manager integration. The configuration manages multiple machines:
- **xps13**: Dell XPS 13 laptop with Hyprland desktop environment
- **Titan**: Server configuration 
- **Athena**: Server configuration

## Architecture

The configuration is organized using a modular structure:

- `flake.nix`: Main flake configuration defining system inputs and outputs for all machines
- `modules/`: Shared configuration modules
  - `configuration-common.nix`: Common system settings shared across machines
  - `configuration-[machine].nix`: Machine-specific system configurations
  - `hardware-configuration-[machine].nix`: Hardware-specific configurations
  - `home-manager-common.nix`: Common home-manager packages and settings
  - `hyprland.nix`: Hyprland window manager configuration
  - `waybar.nix`: Waybar status bar configuration
- `home-[machine].nix`: Machine-specific home-manager configurations
- `home/`: User dotfiles and configuration files
- `secrets/`: SOPS encrypted secrets

## Key Technologies

- **NixOS**: Declarative Linux distribution
- **Nix Flakes**: Modern Nix package management with lockfile
- **Home Manager**: Dotfile and user environment management
- **SOPS**: Secret management with encryption
- **Disko**: Declarative disk partitioning
- **Hyprland**: Wayland compositor (xps13 only)
- **Neovim**: Custom neovim configuration from external git repository

## Common Commands

### System Management
```bash
# Build and switch to new configuration (requires sudo)
sudo nixos-rebuild switch --flake .#[machine-name]

# Build without switching (test configuration)
nixos-rebuild build --flake .#[machine-name]

# Test configuration (temporary, reverts on reboot)
sudo nixos-rebuild test --flake .#[machine-name]

# Check flake for errors
nix flake check

# Update flake inputs
nix flake update

# Show available system generations
nixos-rebuild list-generations
```

### Machine-Specific Examples
```bash
# XPS 13 laptop
sudo nixos-rebuild switch --flake .#xps13

# Titan server
sudo nixos-rebuild switch --flake .#Titan

# Athena server  
sudo nixos-rebuild switch --flake .#Athena
```

### Development
```bash
# Enter development shell with nix tools
nix develop

# Format nix files
nix fmt
```

## Important Notes

- All machines use the username `th3r00t`
- Neovim configuration is managed externally from `git.th3r00t.net/th3r00t/nvim-config.git`
- SOPS is used for secret management - encrypted files are in `secrets/`
- Hardware configurations are machine-specific and auto-generated
- The flake uses nixos-unstable channel
- Custom overlays are defined in flake.nix for package modifications