No description
  • Nix 95.7%
  • Shell 3.1%
  • CSS 1.2%
Find a file
Ben Zimmer b36a1ef254 feat(syncthing): pair ~/Pictures between kaylee, river, and the nas
Adds a "pictures" folder to both hosts' syncthing configuration,
mirroring the same shape as the existing shared folders (~/.config/nix,
~/Development, ~/Dotfiles, ~/Documents). Scope is intentionally
narrower than the other four: only kaylee ↔ river ↔ nas (no serenity
because macOS' Photos.app already manages that library separately —
adding it would double-store every image and confuse the two syncs).

  - staggered versioning, 30 days retention, 1 h clean interval
    (same defaults as Development / Documents).
  - ignorePerms = true so the kaylee/river permission model doesn't
    trip on macOS-era metadata that may already be in the tree.

If serenity ever wants in later, add "serenity" to the devices list
on both hosts in the same shape.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-04 16:31:08 +02:00
.devenv initial 2025-03-22 15:33:18 +01:00
home chore(noctalia): port live runtime tweaks into the declarative baseline 2026-07-04 16:31:08 +02:00
hosts feat(syncthing): pair ~/Pictures between kaylee, river, and the nas 2026-07-04 16:31:08 +02:00
modules refactor(niri): shared modules/niri-system.nix + portal + fstrim parity 2026-07-03 11:58:00 +02:00
packages refactor: remove Hyprland compositor, keep hyprlock/hypridle 2026-02-07 07:52:13 +01:00
secrets kaylee: add backup_nas_ssh_key for zfs-autobackup 2026-06-22 12:03:42 +02:00
tests/zfs-usb-key refactor(zfs-usb-key): remove debugFallbackKeyFile option 2026-05-07 09:21:28 +02:00
.gitignore chore: track flake.lock for reproducible deploys 2026-06-22 14:42:10 +02:00
.sops.yaml sops: add per-machine admin age key for kaylee 2026-06-22 09:49:31 +02:00
.stignore chore(syncthing): exclude flake.lock from sync 2026-06-29 13:57:07 +02:00
AGENTS.md docs: update AGENTS.md with niri reload command 2026-02-11 11:22:57 +01:00
CONTRIBUTING.md docs: add AI agent guidelines to CONTRIBUTING.md 2025-12-12 10:44:32 +01:00
flake.lock chore(flake): bump noctalia-shell ff27db8 → 5f636c6 2026-07-01 14:45:07 +02:00
flake.nix refactor: kaylee ↔ river config parity + GNOME Circle pack 2026-06-24 18:15:29 +02:00
nix.conf add ben to trusted nix users 2025-09-16 16:54:38 +02:00
packages.nix refactor: kaylee ↔ river config parity + GNOME Circle pack 2026-06-24 18:15:29 +02:00
README.md polish: low-priority optimizations and documentation 2025-12-11 12:31:41 +01:00

NixOS Configuration

Personal NixOS and nix-darwin configuration managed with flakes.

Hosts

river (NixOS Desktop)

  • Platform: x86_64-linux
  • Hardware: ASUS TUF X870-PLUS WIFI motherboard with AMD Ryzen CPU
  • GPU: NVIDIA RTX (proprietary drivers)
  • Storage: ZFS with encryption
  • Desktop: Hyprland (Wayland compositor)
  • Display: Multi-monitor setup (DP-3 primary at 2560x1440, DP-2 secondary at 1920x1080)

serenity (macOS Laptop)

  • Platform: aarch64-darwin
  • OS: macOS with nix-darwin
  • Window Manager: AeroSpace

Quick Start

Build and Switch

The repository includes a smart switch function that detects your OS and runs the appropriate rebuild command:

# Automatically detects platform and rebuilds
switch

# Or use platform-specific commands:
# NixOS:
sudo nixos-rebuild switch --flake ~/.config/nix

# macOS (nix-darwin):
sudo darwin-rebuild switch --flake ~/.config/nix

Update Flake Inputs

cd ~/.config/nix
nix flake update
switch

Secrets Management

Secrets are managed using sops-nix with age encryption.

Key Locations

  • NixOS: /home/ben/.config/sops/age/keys.txt
  • macOS: /Users/ben/Library/Application Support/sops/age/keys.txt

Editing Secrets

# Edit shared secrets
sops secrets/shared/secrets.yaml

# Edit host-specific secrets
sops secrets/river/secrets.yaml

Available Secrets

  • anthropic_api_key - Claude API key
  • homebrew_github_api_token - GitHub token for Homebrew
  • gemini_api_key - Google Gemini API key
  • rclone_gdrive_token - Google Drive OAuth token for rclone

Repository Structure

.
├── flake.nix              # Main flake configuration
├── home/                  # Home Manager modules
│   ├── hyprland.nix      # Wayland compositor config
│   ├── waybar.nix        # Status bar config
│   ├── waybar-scripts.nix # Waybar helper scripts
│   ├── syncthing.nix     # File synchronization
│   ├── session.nix       # Session paths and variables
│   ├── zsh.nix           # Shell configuration
│   └── ...               # Other home modules
├── hosts/                 # Host-specific configurations
│   ├── river/            # NixOS desktop
│   │   ├── configuration.nix
│   │   ├── hardware-configuration.nix
│   │   ├── home.nix
│   │   └── secrets.nix
│   └── serenity/         # macOS laptop
│       ├── configuration.nix
│       └── home.nix
├── packages.nix          # Common packages
└── secrets/              # Encrypted secrets (sops)
    └── shared/
        └── secrets.yaml

Key Features

System Monitoring

  • Prometheus: System metrics collection via vmagent
  • Node Exporter: CPU, memory, disk metrics
  • NVIDIA GPU Exporter: GPU metrics (NVIDIA cards)
  • Custom Fan Control: Dynamic fan curve based on CPU temperature

Desktop Environment (river)

  • Compositor: Hyprland with blur, animations, and multi-monitor support
  • Status Bar: Waybar with custom scripts
  • Application Launcher: Rofi and Walker
  • Notifications: SwayNC (swaync)
  • Terminal: Ghostty
  • File Manager: Nemo
  • Theming: Catppuccin Mocha

Development Tools

  • Editor: Neovim
  • Shell: Zsh with oh-my-zsh
  • Multiplexer: Tmux with tmuxinator
  • Version Managers: mise (replaces asdf)
  • Fuzzy Finder: fzf
  • Directory Jumper: z-lua

Syncthing Folders

The following directories are synced between hosts:

  • ~/.config/nix - This configuration repository
  • ~/Development - Development projects
  • ~/Dotfiles - Additional dotfiles

Custom Waybar Scripts

Located in home/waybar/scripts/, packaged as proper derivations:

  • power-menu.sh - Power options (suspend, shutdown, reboot, logout)
  • audio-output-menu.sh - Audio output device switcher
  • usb-monitor.sh - USB device notifications
  • usb-menu.sh - USB device menu
  • gamma-control.sh - Screen color temperature control

Hyprland Keybindings

See home/hyprland.nix for full list. Some highlights:

  • Super + Return - Terminal
  • Super + B - Browser
  • Super + S - Power menu
  • Super + A - Audio output menu
  • Super + V - Clipboard manager
  • Super + [1-9] - Switch workspace

Contributing

See CONTRIBUTING.md for guidelines on:

  • Code style and formatting
  • Path handling (use ${config.home.homeDirectory})
  • Secret management
  • Module organization

License

Personal configuration - use at your own risk.