A modular NixOS configuration using flakes, flake-parts, Home Manager, and fwupd.
Version: NixOS 26.05 (Yarara) Stable
Host: Ghost (Primary Laptop)
nixme/
├── 📄 flake.nix # Entry point - defines inputs (nixpkgs, home-manager)
├── 📄 parts.nix # Flake-parts configuration - wires everything together
├── 📄 flake.lock # Lock file for reproducible builds
│
├── 🖥️ hosts/ # MACHINE configurations
│ └── ghost/
│ ├── default.nix # Ghost laptop config (bootloader, user)
│ └── hardware-configuration.nix # Hardware-specific (LUKS, systemd-boot, kernel modules)
│
├── 🧩 modules/ # Reusable modules
│ ├── nixos/ # ⬅️ SYSTEM-LEVEL modules (require sudo)
│ │ ├── options.nix # Global nixme.* options namespace
│ │ ├── desktops/gnome # GNOME desktop environment
│ │ ├── security/base # Firewall, SSH hardening
│ │ └── system/base # Core packages, Nix settings, auto-upgrade
│ │
│ └── home/ # ⬅️ USER-LEVEL modules (Home Manager)
│ ├── desktops/gnome-dconf # GNOME user settings
│ ├── dev/git # Git configuration
│ ├── editors/nvim # Neovim editor
│ ├── networking # Network diagnostic tools
│ ├── security # Security tools
│ ├── shells/bash # Bash with modern enhancements
│ ├── shells/starship # Starship prompt
│ ├── sysadmin # System monitoring tools
│ └── terminals/kitty # Kitty terminal
│
├── 👤 users/ # USER configurations
│ └── stefan-hacks/
│ └── home.nix # Imports and enables home/ modules
│
└── 📚 README.md # This file
🏗️ Architecture Philosophy
System vs User Separation
Directory
Affects
Privilege
Examples
modules/nixos/
Entire system
sudo
Bootloader, GNOME, audio, firmware
modules/home/
Single user
None
Shell configs, editors, terminal settings
Mental Model: Think of it like macOS System Preferences vs User Preferences.
cd ~ /.config/nixme
sudo nixos-rebuild switch --flake .# ghost
home-manager switch --flake .# stefan-hacks
System Level (modules/nixos/)
Module
Purpose
Status
system/base
Core packages, Nix settings, auto-upgrade
✅ Enabled
security/base
Firewall, SSH hardening
✅ Enabled
desktops/gnome
GNOME desktop with PipeWire, Bluetooth, fonts, printing
✅ Enabled
User Level (modules/home/)
Module
Purpose
Status
shells/bash
Bash with blesh, carapace, atuin, zoxide
✅ Enabled
shells/starship
Starship prompt
✅ Enabled
editors/nvim
Neovim editor
✅ Enabled
terminals/kitty
Kitty terminal
✅ Enabled
dev/git
Git + lazygit + gh
✅ Enabled
desktops/gnome-dconf
GNOME user settings
✅ Enabled
sysadmin
System monitoring & hardware tools
✅ Enabled
networking
Network diagnostic & security tools
✅ Enabled
security
Auditing & encryption tools
✅ Enabled
The bash module includes:
Blesh - Syntax highlighting, auto-suggestions, menu completion
Carapace - Completions for 500+ CLI tools
Atuin - Shell history sync and search
Zoxide - Smart cd replacement
Setting
Value
Bootloader
systemd-boot (UEFI)
Timeout
3 seconds
Boot entries
10 (max)
LUKS
Enabled (root + swap)
Hostname
ghost
Timezone
America/Sao_Paulo
Locale
en_US.UTF-8
stateVersion
26.05
🛠️ Available (But Disabled) Modules
The repo contains additional modules that are not currently enabled :
Category
Modules
Browsers
Brave, Chromium, Firefox, LibreWolf
Communication
Discord, Telegram
Creative
Blender, GIMP
Gaming
Steam
Media
MPV, Spotify, VLC
Productivity
Notes apps, Office suites
Containers
Docker, Kubernetes (kubectl, helm)
Databases
MongoDB, MySQL, PostgreSQL, Redis, SQLite
Desktops
Hyprland, i3, KDE, Sway, XFCE
Development
VSCode, JetBrains, Go, Node.js, Python, Rust
Graphics
AMD, NVIDIA drivers
Monitoring
Grafana, Netdata, Prometheus
VPN
Mullvad, OpenVPN, WireGuard
Web Servers
Caddy, Nginx
Security
AppArmor, ClamAV, Fail2ban
Services
Nextcloud, Samba
File
Purpose
flake.nix
Inputs: nixpkgs 26.05, home-manager, flake-parts
hosts/ghost/default.nix
Ghost config - bootloader, user, system settings
users/stefan-hacks/home.nix
User config - enables home/ modules
modules/nixos/desktops/gnome/
GNOME desktop with all deps
# Update flake inputs
nix flake update
# Test
nix flake check
# Apply
sudo nixos-rebuild switch --flake .# ghost
home-manager switch --flake .# stefan-hacks
# Commit and push
git add -A
git commit -m " update: description"
git push origin master