๐ฏ Declarative, reproducible system configurations for all my machines
This repository contains my complete NixOS system configurations managed using Nix Flakes. It provides a fully declarative, version-controlled setup for multiple machines with consistent environments across desktop, development, and security research workflows.
- ๐ Reproducible: Exact same system state across machines
- ๐ฆ Version Controlled: All configs in git with full history
- ๐ Atomic Updates: Rollback to previous generations instantly
- ๐งฉ Modular: Reusable components for easy customization
- ๐ Home Manager: Dotfiles and user configs declaratively managed
| Machine | Type | Description |
|---|---|---|
| ๐ lightshow | Desktop | High-performance workstation with NVIDIA GPU support |
| ๐ฑ tabby | Laptop | Mobile setup with high-DPI display and touchpad optimization |
graph TB
A[๐ฏ flake.nix] --> B[โ๏ธ configuration.nix]
B --> C[๐ฆ packages/*]
B --> D[๐ง overlays/]
A --> E[๐ lightshow/]
A --> F[๐ฑ tabby/]
C --> C1[๐จ Desktop: GNOME]
C --> C2[๐ Shells: Fish + Bash]
C --> C3[โก Dev Tools]
C --> C4[๐ Security Tools]
C --> C5[๐ฎ Gaming: Steam]
E --> E1[๐ฎ NVIDIA Drivers]
E --> E2[๐ก WiFi Adapter]
F --> F1[๐ฅ๏ธ HiDPI: 130 DPI]
F --> F2[๐ Touchpad Config]
B --> H[๐ home-manager]
H --> H1[๐ค ugflows]
H --> H2[๐ค jesse]
H --> H3[๐ค jensen]
H --> H4[๐ค lauren]
style A fill:#5277C3
style B fill:#7EBAE4
style C fill:#B4E7CE
style H fill:#FFD4A3
.
โโโ ๐ฏ flake.nix # Flake entry point & dependency management
โโโ โ๏ธ configuration.nix # Shared base configuration
โโโ ๐ flake.lock # Locked dependency versions
โ
โโโ ๐ฅ๏ธ Machine Configurations
โ โโโ lightshow/
โ โ โโโ lightshow.nix
โ โ โโโ hardware-configuration.nix
โ โโโ tabby/
โ โโโ tabby.nix
โ โโโ hardware-configuration.nix
โ
โโโ ๐ฆ packages/ # Modular configuration components
โ โโโ systemPackages.nix # System-wide package list
โ โโโ users.nix # User accounts & home-manager
โ โโโ gnome.nix # GNOME desktop environment
โ โโโ vim.nix # Vim with Python dev setup
โ โโโ tmux.nix # Tmux configuration
โ โโโ bash.nix # Bash shell
โ โโโ fish/ # Fish shell (default)
โ โโโ scripts.nix # Custom scripts overlay
โ โโโ steam.nix # Gaming platform
โ โโโ qtile/ # Alternative window manager
โ โโโ rofi/ # Application launcher
โ โโโ git/ # Git configuration
โ
โโโ ๐ง overlays/ # Package customizations
โโโ default.nix # i3ipc, lastpass-cli fixes
- Primary: GNOME Desktop with GDM
- Alternative: Qtile tiling window manager (optional)
- Launcher: Rofi with custom themes
- Fonts: Nerd Fonts (FiraCode, Hack) for icon support
flowchart LR
A[๐ Login] --> B{Shell?}
B -->|Default| C[๐ Fish Shell]
B -->|Fallback| D[๐ Bash]
C --> E[โญ Starship Prompt]
C --> F[๐ FZF Integration]
C --> G[โจ๏ธ Vi Keybindings]
D --> H[โก Powerline]
style C fill:#A8E6CF
style E fill:#FFD4A3
Features:
- ๐ Fish Shell: Modern shell with auto-suggestions
- โญ Starship: Beautiful, fast prompt
- ๐ FZF: Fuzzy finder with bat preview
- โจ๏ธ Vi Mode: Vim-style editing in shell
- ๐ Custom Aliases: Optimized workflows
- Editor: Vim with jedi-vim, ALE, flake8, black, isort
- Tools: Full Python 3 stack with development packages
kubectl,helm,argocd,kubeseal- Docker and Kubernetes tooling
- Tailscale VPN
- Search:
ripgrep,fd,fzf - Display:
bat,eza,glow - Dev:
direnv,devenv,gh - AI:
claude-code - Terminal:
tmux,ttyd,vhs(terminal recording)
Network Analysis:
nmap,tshark,kismet,wavemonaircrack-ng,wifite2,airgeddon
Web Security:
burpsuite,nikto,sqlmap,wpscanhydra,metasploit
- ๐ฎ Steam: With remote play enabled
- ๐ฌ Video:
obs-studio,kdenlive,mpv - ๐จ Creative: GIMP, Inkscape
- ๐ต Music: Pianobar, Pithos, Plex
- ๐บ Streaming: Video editing and production tools
Browsers:
- Firefox, Google Chrome, Tor Browser
Communication:
- Discord, Telegram, Mailspring
Productivity:
- VS Code, LibreOffice suite
- Various system utilities
- NixOS installed on your system
- Git installed
- Flakes enabled in your Nix configuration
# Clone the repository
git clone https://github.com/yourusername/configs.git ~/projects/configs
cd ~/projects/configs
# Initialize git submodules (for rofi themes)
git submodule update --init --recursive
# Build and switch to the configuration
sudo nixos-rebuild switch --flake .#<hostname>Replace <hostname> with either lightshow or tabby.
flowchart TD
A[๐ Make Changes] --> B{Update Type?}
B -->|Config Only| C[๐ง Edit .nix files]
B -->|Dependencies| D[๐ Update flake.lock]
C --> E[๐งช Test Build]
D --> E
E --> F{Build Success?}
F -->|โ No| G[๐ Fix Errors]
F -->|โ
Yes| H[๐ Apply Changes]
G --> E
H --> I{Apply Method?}
I -->|Test Only| J[nupt: Test without switching]
I -->|Apply Now| K[nupd: Rebuild & switch]
I -->|Full Update| L[nupdf: Update deps + rebuild]
J --> M[โ
Review Changes]
K --> M
L --> M
M --> N{Satisfied?}
N -->|โ
Yes| O[๐ Done!]
N -->|โ No| P[โฎ๏ธ Rollback]
P --> Q[Select previous generation]
Q --> O
style A fill:#A8E6CF
style H fill:#FFD4A3
style O fill:#B4E7CE
style P fill:#FF9AA2
These convenient aliases are available after installation:
# Test configuration without switching
nupt
# Rebuild and switch to new configuration
nupd
# Update flake.lock, then rebuild (full update)
nupdf# Test build without switching
sudo nixos-rebuild test --flake .#<hostname>
# Build and switch
sudo nixos-rebuild switch --flake .#<hostname>
# Update flake inputs
nix flake update
# Update specific input
nix flake lock --update-input nixpkgsThe configuration manages 4 user accounts:
| User | Full Name | Groups | Role |
|---|---|---|---|
| ๐งโ๐ป ugflows | Justin Speegle | wheel, networkmanager | Primary admin |
| ๐ค jesse | - | networkmanager | Family member |
| ๐ค jensen | - | networkmanager | Family member |
| ๐ค lauren | - | networkmanager | Family member |
All users are configured with:
- Initial hashed passwords
- NetworkManager access
- Home-manager integration for dotfiles
-
Create a new directory for your machine:
mkdir my-machine
-
Generate hardware configuration:
sudo nixos-generate-config --show-hardware-config > my-machine/hardware-configuration.nix -
Create machine-specific config
my-machine/my-machine.nix:{ config, pkgs, ... }: { imports = [ ./hardware-configuration.nix ]; networking.hostName = "my-machine"; # Add machine-specific settings here }
-
Add to
flake.nix:nixosConfigurations = { lightshow = myMachine ./lightshow/lightshow.nix; tabby = myMachine ./tabby/tabby.nix; my-machine = myMachine ./my-machine/my-machine.nix; # Add this line };
Edit packages/systemPackages.nix and add to the appropriate category:
environment.systemPackages = with pkgs; [
# Add your packages here
my-new-package
];-
Create a new file in
packages/:touch packages/my-feature.nix
-
Add your configuration:
{ config, pkgs, ... }: { # Your custom configuration }
-
Import in
configuration.nix:imports = [ # ... existing imports ./packages/my-feature.nix ];
graph LR
A[๐ฆ flake.nix] --> B[nixpkgs/nixos-unstable]
A --> C[nixpkgs/nixos-24.05]
A --> D[home-manager]
A --> E[github:jcspeegs/scripts]
B --> F[Latest Packages]
C --> G[Stable Fallback]
D --> H[User Environments]
E --> I[Custom Scripts]
style A fill:#5277C3
style F fill:#A8E6CF
style H fill:#FFD4A3
The configuration enables these system services:
- ๐ mlocate: File indexing (hourly updates)
- ๐ Tailscale: VPN mesh networking
- ๐จ๏ธ CUPS: Printing with Epson drivers
- ๐ต PipeWire: Modern audio system
- ๐๏ธ GVFS: Virtual filesystem for Nautilus
- ๐ Man Pages: Comprehensive documentation
- Bootloader: systemd-boot with EFI support
- Kernel: Latest Linux kernel (
linuxPackages_latest) - Graphics: Hardware acceleration enabled
# Clean build cache
nix-collect-garbage -d
# Retry with verbose output
sudo nixos-rebuild switch --flake .#<hostname> --show-trace# List available generations
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
# Rollback to previous
sudo nixos-rebuild switch --rollback
# Or boot into previous generation from bootloader menugit submodule update --init --recursive# Show flake metadata
nix flake metadata
# Show flake outputs
nix flake show- ๐ NixOS Manual
- ๐ Home Manager Manual
- โ๏ธ Nix Flakes Wiki
- ๐ NixOS Package Search
- ๐ ๏ธ NixOS Options Search
This is a personal configuration repository, but feel free to:
- ๐ Use it as inspiration for your own configs
- ๐ Report issues or suggest improvements
- ๐ Fork and adapt for your needs
This configuration is provided as-is for personal use. Feel free to use, modify, and distribute as you see fit.
- ๐ฏ NixOS Community: For the amazing ecosystem
- ๐ Home Manager: For declarative dotfile management
- ๐ Starship: For the beautiful prompt
- ๐ Fish Shell: For the modern shell experience
Made with โ๏ธ by Justin Speegle
Powered by NixOS, the purely functional Linux distribution