Personal NixOS configuration with unified feature modules based on the dendritic pattern.
New here? See DOCS.md for complete navigation.
Architecture:
- docs/DENDRITIC-MIGRATION.md - Unified feature modules guide β START HERE
- docs/ARCHITECTURE.md - Detailed module system documentation
- FLEET-MANAGEMENT.md - Deploy and manage systems
System-Specific:
- systems/cortex/AI-SERVICES.md - AI/LLM infrastructure on Cortex
- docs/BOOTSTRAP.md - Bootstrap new NixOS systems
Security & Secrets:
- docs/SECURITY.md - Security configuration
- SECRETS.md - Secrets management (sops-nix + age)
Deploy to existing system:
./scripts/fleet.sh deploy cortexUpdate all systems:
./scripts/fleet-deploy.sh update --allLocal rebuild:
sudo nixos-rebuild switch --flake .#orionSee FLEET-MANAGEMENT.md for complete deployment guide.
Unified Feature Modules - One file per feature, containing both system and user configuration.
modules/
βββ features/ # β PRIMARY: 30 unified feature modules
β βββ hyprland.nix # Wayland compositor + config
β βββ mullvad.nix # VPN service + browser
β βββ git.nix # Git + user config
β βββ ... # All features in one place!
βββ system/ # Special-purpose system modules
β βββ base/ # Essential base configuration
β βββ ai-services/ # Cortex-specific AI services
βββ home/ # Home Manager base layers
βββ _base/ # Essential CLI tools
βββ _base-desktop/ # Desktop environment essentials
# systems/orion/default.nix
modules.features = {
# Desktop environment
hyprland.enable = true;
hyprpanel.enable = true;
# Development tools
git.enable = true;
vscode.enable = true;
kitty.enable = true;
# Web browsers
brave.enable = true;
firefox.enable = true;
# Services
mullvad.enable = true;
syncthing.enable = true;
# Infrastructure
audio.enable = true;
bluetooth.enable = true;
networking.enable = true;
};Benefits:
- π― Single source of truth: One file per feature
- π§ Consistent interface: All use
modules.features.* - π¦ Complete configuration: System + home together
- π§© Composable: Mix and match across systems
See docs/DENDRITIC-MIGRATION.md for complete details.
- One Feature, One File - All configuration for a feature in a single place
- Unified Namespace - All features use
modules.features.* - Explicit Configuration - Features never auto-enable
- Composability - Mix and match features across systems
- Parameterization - Configure via
userVars/systemVars
See docs/DENDRITIC-MIGRATION.md for the migration story and detailed architecture.
New Feature Module:
# 1. Create file in modules/features/
touch modules/features/myfeature.nix
# 2. Define module (see template in docs/DENDRITIC-MIGRATION.md)
# 3. Enable in system
# systems/orion/default.nix
modules.features.myfeature.enable = true;
# 4. Test and apply
nix flake check
sudo nixos-rebuild switch --flake .#orionNew System:
cp -r systems/orion systems/newsystem
# Edit variables.nix, hardware.nix, add to flake.nixSee FLEET-MANAGEMENT.md for detailed system setup instructions.
System (requires sudo):
sudo nixos-rebuild switch --flake .#orionHome Manager (as NixOS module - default):
# Rebuilt automatically with system
sudo nixos-rebuild switch --flake .#orionHome Manager (standalone):
home-manager switch --flake .#sygUsing nh (alternative):
nh os switch # System rebuild
nh home switch # Home Manager rebuild| System | Type | Hardware | Purpose |
|---|---|---|---|
| Orion | Workstation | Framework 13 (AMD 7040) | Development, daily driver |
| Cortex | Server | RTX 5090 (32GB VRAM) | AI/LLM inference, compute |
- Hyprland:
dotfiles/.config/hypr/ - VS Code:
dotfiles/.config/Code/User/ - Git:
dotfiles/.config/git/ - Wallpapers:
wallpapers/
- DOCS.md - Complete documentation index
- FLEET-MANAGEMENT.md - Deployment guide
- systems/cortex/AI-SERVICES.md - AI infrastructure on Cortex
- Community: NixOS Discourse, r/NixOS
Configuration managed with Nix Flakes. Dotfiles symlinked by Home Manager.
Some extensions are already configured but commented out. To enable them:
- Edit
modules/home/programs/librewolf.nix - Uncomment the desired extension by removing the
#symbol - Rebuild with
home-manager switch --flake .
-
Find the extension on addons.mozilla.org
-
Get the short ID from the URL:
https://addons.mozilla.org/en-US/firefox/addon/SHORT_ID/ -
Get the UUID (extension ID) using one of these methods:
- Method A: Download the XPI file, unzip it, and run:
jq .browser_specific_settings.gecko.id manifest.json
- Method B: Install manually in LibreWolf β
about:addonsβ extension details β copy ID
- Method A: Download the XPI file, unzip it, and run:
-
Add to configuration:
(extension "short-id" "uuid@example.com")
-
Where to get the required information:
-
Short ID:
- This is the last part of the add-onβs URL on addons.mozilla.org.
- Example: For
https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/, the short ID isublock-origin.
-
UUID (Extension ID):
- Method 1: Download the
.xpifile from the add-on page, unzip it, and look for theidinmanifest.json:unzip addon.xpi -d addon jq .browser_specific_settings.gecko.id addon/manifest.json
- Method 2: Install the extension in LibreWolf, go to
about:support, and look for the Extension ID under Extensions.
- Method 1: Download the
-
Example entry:
(extension "ublock-origin" "uBlock0@raymondhill.net")
-
| Extension | Short ID | UUID |
|---|---|---|
| uBlock Origin | ublock-origin |
uBlock0@raymondhill.net |
| Bitwarden | bitwarden-password-manager |
{446900e4-71c2-419f-a6a7-df9c091e268b} |
| Privacy Badger | privacy-badger17 |
jid1-MnnxcxisBPnSXQ@jetpack |
| DuckDuckGo Privacy Essentials | duckduckgo-for-firefox |
jid1-ZAdIEUB7XOzOJw@jetpack |
| Decentraleyes | decentraleyes |
jid1-BoFifL9Vbdl2zQ@jetpack |
| ClearURLs | clearurls |
{74145f27-f039-47ce-a470-a662b129930a} |
| Dark Reader | darkreader |
addon@darkreader.org |
| Tree Style Tab | tree-style-tab |
treestyletab@piro.sakura.ne.jp |
| Violentmonkey | violentmonkey |
{aecec67f-0d10-4fa7-b7c7-609a2db280cf} |
| Multi-Account Containers | multi-account-containers |
@testpilot-containers |
- Configuration:
dotfiles/.config/hypr/ - Wallpapers:
wallpapers/ - Scripts:
scripts/
- VS Code settings:
dotfiles/.config/Code/User/settings.json - Git configuration:
dotfiles/.config/git/
- Dotfiles are managed using Home Manager with live-updating symlinks
- Monitor configuration is stored in
monitors.json - Additional notes in
notes.txt