164 lines
4.8 KiB
Markdown
164 lines
4.8 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Common Commands
|
|
|
|
### Building and Rebuilding Systems
|
|
```bash
|
|
# Rebuild NixOS configuration for current system
|
|
sudo nixos-rebuild switch --flake .
|
|
|
|
# Build for specific system
|
|
sudo nixos-rebuild switch --flake .#nate-work
|
|
sudo nixos-rebuild switch --flake .#nate
|
|
sudo nixos-rebuild switch --flake .#luci
|
|
sudo nixos-rebuild switch --flake .#jaci
|
|
sudo nixos-rebuild switch --flake .#scrappy
|
|
|
|
# Test configuration without switching
|
|
sudo nixos-rebuild test --flake .
|
|
|
|
# Check configuration without building
|
|
nix flake check
|
|
```
|
|
|
|
### Package Management
|
|
```bash
|
|
# Update flake inputs
|
|
nix flake update
|
|
|
|
# Run garbage collection
|
|
nix-collect-garbage -d
|
|
|
|
# Check system generations
|
|
nixos-rebuild list-generations
|
|
|
|
# Rollback to previous generation
|
|
sudo nixos-rebuild switch --rollback
|
|
```
|
|
|
|
### Home Manager
|
|
```bash
|
|
# Apply home manager configuration
|
|
home-manager switch --flake .
|
|
|
|
# For specific user configurations
|
|
home-manager switch --flake .#nate-work
|
|
```
|
|
|
|
## Architecture Overview
|
|
|
|
This is a multi-user NixOS configuration repository using Nix flakes. The repository manages configurations for multiple machines and users across different environments.
|
|
|
|
### Repository Structure
|
|
|
|
- **flake.nix**: Main flake configuration defining all system configurations
|
|
- **{user}/**: Individual user configuration directories (nate, nate-work, luci, jaci, scrappy)
|
|
- **shared/**: Shared modules and configurations across systems
|
|
- **{user}/default.nix**: System-level configuration for each user/machine
|
|
- **{user}/desktop-configuration.nix**: Desktop environment configuration
|
|
- **{user}/modules/**: User-specific modules and configurations
|
|
- **{user}/dotfiles/**: User dotfiles and application configurations
|
|
|
|
### Key Components
|
|
|
|
#### System Configurations
|
|
Each system configuration follows this pattern:
|
|
- `default.nix`: Main system configuration with user settings, hostname, desktop environment
|
|
- `desktop-configuration.nix`: Desktop environment setup (Sway/Hyprland)
|
|
- `modules/home-manager/home.nix`: Home Manager configuration
|
|
- `nixos/hardware-configuration.nix`: Hardware-specific settings
|
|
|
|
#### Supported Desktop Environments
|
|
- **Sway**: Wayland compositor (default)
|
|
- **Hyprland**: Modern Wayland compositor
|
|
- Desktop choice configured via `deskCfg.de` option
|
|
|
|
#### User Management
|
|
- Custom `main_user` module handles user creation
|
|
- Desktop users get additional groups (video, audio, adbusers)
|
|
- Server users get minimal groups (wheel, networkmanager)
|
|
|
|
#### Package Management
|
|
- Stable packages from nixpkgs 25.05
|
|
- Unstable packages available via `nixpkgs-unstable`
|
|
- Catppuccin theme integration via catppuccin.nix
|
|
- NUR (Nix User Repository) overlay enabled
|
|
|
|
### Configuration Patterns
|
|
|
|
#### User-Specific Settings
|
|
Each user configuration defines:
|
|
```nix
|
|
{
|
|
userName = "username";
|
|
fullName = "Full Name";
|
|
email = "email@domain.com";
|
|
hostName = "hostname";
|
|
desktop = "sway" or "hyprland";
|
|
gaming = true/false;
|
|
}
|
|
```
|
|
|
|
#### Module System
|
|
- Custom modules in `modules/` directories
|
|
- Shared modules in `shared/modules/`
|
|
- Options defined with `lib.mkOption`
|
|
- Conditional configuration with `lib.mkIf`
|
|
|
|
#### Home Manager Integration
|
|
- Home Manager configurations in `modules/home-manager/home.nix`
|
|
- Dotfiles linked from `dotfiles/` directories
|
|
- User packages defined in `homePackages`
|
|
|
|
### Development Environment
|
|
|
|
#### Installed Development Tools
|
|
- **Editors**: Helix (default), Emacs
|
|
- **Languages**: Go, Python, Clojure, Nix
|
|
- **LSPs**: gopls, nil, bash-language-server, python-lsp-server
|
|
- **Tools**: Docker, distrobox, jq, make, cmake
|
|
- **Version Control**: Git with delta, direnv
|
|
|
|
#### Shell Configuration
|
|
- **Default Shell**: Zsh with Oh My Zsh
|
|
- **Theme**: half-life
|
|
- **Plugins**: git, ssh-agent
|
|
- **Aliases**: Modern Unix tools (lsd, bat, ripgrep, fd, fzf)
|
|
|
|
### Security and Maintenance
|
|
|
|
#### Automatic Updates
|
|
- `auto-update.nix` module for automatic system updates
|
|
- Garbage collection configured weekly
|
|
- Boot loader limited to 5 generations
|
|
- Store optimization enabled
|
|
|
|
#### Security Features
|
|
- ClamAV antivirus on work systems
|
|
- Gnome Keyring for SSH secrets
|
|
- Firewall configuration for servers
|
|
- Initial password set to "password" (should be changed)
|
|
|
|
### Server Configuration
|
|
|
|
For server deployments, use `shared/server-configuration.nix` which provides:
|
|
- SSH server option
|
|
- NFS server with configurable exports
|
|
- Syncthing for file synchronization
|
|
- Radicale CalDAV server
|
|
- Printer sharing via CUPS/Avahi
|
|
|
|
### Special Features
|
|
|
|
#### Claude Code Integration
|
|
- Work profile: `claudew` command (uses AWS Bedrock)
|
|
- Personal profile: `claudep` command (uses standard API)
|
|
- Configuration directories: `/home/nate/.claude-work` and `/home/nate/.claude-personal`
|
|
|
|
#### Catppuccin Theme
|
|
- Consistent theming across applications
|
|
- Macchiato variant with lavender accent
|
|
- GTK, Qt, and terminal theme integration
|