FreeCAD crashes with 'org.gtk.Settings.FileChooser is not installed' because home-manager packages don't get their GSettings schemas compiled into the system profile. Moving gtk3 to environment.systemPackages fixes this.
NixOS Configuration
Personal NixOS system configuration using Flakes and Home Manager for declarative system management.
System Overview
- OS: NixOS 25.11
- Desktop Environment: GNOME (Wayland/X11)
- Terminal: Ghostty + tmux
- Shell: Zsh with Oh-My-Zsh (agnoster theme)
- Editor: Neovim with kickstart.nvim
- Hostname: nixos
Features
Core System
- Bootloader: GRUB with EFI support and OS Prober (dual-boot ready)
- Timezone: America/New_York
- Locale: en_US.UTF-8
- Networking: NetworkManager enabled
Hardware Support
- Bluetooth: Enabled with Blueman
- Fingerprint Sensor: fprintd enabled
- Audio: PipeWire with ALSA and PulseAudio compatibility
- Printing: CUPS enabled
Security & Authentication
- YubiKey Support: Configured for login and sudo authentication
- Auto-lock on YubiKey removal: Sessions lock when YubiKey is disconnected
- Fingerprint Authentication: Available for compatible hardware
Development Environment
- Docker: Rootless mode enabled with proper namespace configuration
- VMware Workstation: Host support enabled
- Nix Flakes: Experimental features enabled
Networking
- Tailscale VPN: Enabled with client routing features
- Firewall: Configured with Tailscale trusted interface
- Editable /etc/hosts: Permissions set to 0644 for easy modification
Desktop Customization
- GNOME Extensions:
- Blur My Shell
- Just Perfection
- Arc Menu
- Fonts: 0xProto Nerd Font, Adwaita icons
- Scaling: Experimental fractional scaling and xwayland-native-scaling enabled
- QT Integration: QT apps use GNOME theme (Adwaita Dark)
Alternative Window Manager
- Hyprland: Configured but not currently active (see
home.nixfor configuration)
Installed Software
System Packages
- Firefox
- VMware Workstation
- Lunar Client (Minecraft)
- JetBrains Rust Rover
- Cursor (VS Code fork)
- Obsidian
- Claude Code
User Packages
- Kate (KDE text editor)
- Bitwarden (desktop + CLI)
- LunarVim
- KiCad
- Ghostty terminal
- Python 3
- nmap
- minicom
- freerdp
Configuration Files
.
├── configuration.nix # System-level configuration
├── home.nix # User-level configuration (Home Manager)
├── hardware-configuration.nix # Auto-generated hardware config
└── flake.nix # Flake inputs and outputs
Getting Started
First Time Setup
- Clone this repository:
git clone <your-repo-url> ~/Documents/nixos-configuration
cd ~/Documents/nixos-configuration
-
Review and customize configurations:
- Edit
configuration.nixfor system-wide changes - Edit
home.nixfor user-specific settings
- Edit
-
Apply the configuration:
sudo nixos-rebuild switch --flake .#nixos
Making Changes
System-Level Changes
Edit configuration.nix and rebuild:
sudo nixos-rebuild switch --flake .#nixos
User-Level Changes
Edit home.nix and rebuild:
sudo nixos-rebuild switch --flake .#nixos
# or use home-manager directly:
home-manager switch
Adding Packages
System-wide (available to all users):
Add to environment.systemPackages in configuration.nix:
environment.systemPackages = with pkgs; [
# your-package-here
];
User-specific:
Add to home.packages in home.nix:
home.packages = with pkgs; [
# your-package-here
];
Updating the System
Update flake inputs and rebuild:
nix flake update
sudo nixos-rebuild switch --flake .#nixos
Key Configurations
Git Configuration
Managed declaratively in home.nix:
- User: 0xWheatyz
- Email: wyatt@leeworks.dev
- Default Branch: master
- Auto push remote setup: Enabled
- Custom alias:
git lgfor pretty log visualization
SSH Configuration
Custom SSH hosts configured in home.nix:
- vps: Direct connection to 45.79.198.105
- home: Via jump host proxy
- git: Local git server at 10.0.1.10
- Connection multiplexing enabled for faster subsequent connections
Tmux
- Mouse support enabled
- Window numbering starts at 1
- 256-color terminal support
- Auto-starts on terminal launch
Zsh
- Oh-My-Zsh with agnoster theme
- Custom
nix developwrapper that launches in zsh - Tmux auto-start on interactive terminals
- Project shell indicator in prompt
Neovim Configuration
Using kickstart.nvim as the base configuration, managed through Flakes.
Required dependencies are automatically installed:
- Neovim
- ripgrep
- fd
- gcc
- gnumake
- git
Configuration is synchronized from the GitHub repository and placed in ~/.config/nvim.
Docker Configuration
Docker is configured in rootless mode:
- Unprivileged user namespaces enabled
- Socket variable automatically set
- User
l-wyattis in thedockergroup
Usage:
docker ps # No sudo required
Troubleshooting
Slow Shutdown
The configuration includes optimizations for shutdown handling:
- User manager timeout reduced to 30s (from default 90s)
- Prevents hangs when user linger is enabled
Building from Flake
If you encounter issues, try:
# Rebuild with verbose output
sudo nixos-rebuild switch --flake .#nixos --show-trace
# Check flake validity
nix flake check
# Update flake lock file
nix flake update
YubiKey Issues
If YubiKey authentication isn't working:
# Check PAM configuration
cat /etc/pam.d/login
cat /etc/pam.d/sudo
# Verify udev rules
udevadm control --reload-rules
Important Notes
- stateVersion: Set to 25.11 - do not change after initial installation
- Home Manager stateVersion: Also 25.11 - keep in sync with system version
- Unfree packages: Enabled system-wide via
nixpkgs.config.allowUnfree - User groups: l-wyatt is member of: networkmanager, wheel, docker, dialout
- User linger: Enabled for background services
Additional Resources
License
This configuration is personal and provided as-is for reference.