6.6 KiB
NixOS-WSL Configuration for pan
This is a flake-based NixOS-WSL configuration ported from the standalone Home Manager setup. It provides a declarative, reproducible system configuration with integrated Home Manager and access to the latest unstable packages.
Structure
nixos/
├── flake.nix # Flake with nixos-unstable, nixos-wsl, home-manager
├── flake.lock # Locked dependency versions (auto-generated)
├── configuration.nix # System-level NixOS-WSL configuration
├── home.nix # Home Manager user configuration
├── modules/ # User-level module configurations
│ ├── sh.nix # Shell (Zsh with Prezto, fzf, zoxide)
│ ├── tmux.nix # Tmux configuration
│ ├── git.nix # Git, Lazygit, Jujutsu
│ ├── nvim.nix # Neovim with 40+ plugins
│ ├── dev.nix # Development tools
│ └── task.nix # Taskwarrior, Timewarrior
├── README.md # This file
├── TODO.md # Known issues and future work
├── SUMMARY.md # Implementation overview
└── MIGRATION.md # Guide for migrating from channels to flakes
Installation
1. Test the Configuration (Recommended First Step)
Before applying, validate and test build:
cd /home/pan/dev/config/dot/nix/nixos
# Validate flake syntax
nix flake check --impure
# Test build without activating
sudo nixos-rebuild build --flake .#nix --impure
The --impure flag is needed for NIX_LD settings in the home configuration.
2. Customize Configuration (Optional)
Edit configuration.nix to adjust:
- Hostname: Change
networking.hostName(current: "nix") - Timezone: Change
time.timeZone(current: "Europe/Berlin") - WSL user: Change
wsl.defaultUser(current: "pan")
The current settings should work for your NixOS-WSL setup.
3. Apply Configuration
Apply the flake configuration:
sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure
Or from inside the directory:
cd /home/pan/dev/config/dot/nix/nixos
sudo nixos-rebuild switch --flake .#nix --impure
4. Verify Installation
After applying, verify everything works:
# Check system
nixos-version
# Check flake info
nix flake metadata /home/pan/dev/config/dot/nix/nixos
# Test your tools
zsh --version
tmux -V
nvim --version
Updating the Configuration
After making changes to any configuration file:
sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure
Updating System Packages
To update all packages to the latest versions from nixos-unstable:
cd /home/pan/dev/config/dot/nix/nixos
# Update flake inputs (nixpkgs, home-manager, nixos-wsl)
nix flake update
# Apply the updates
sudo nixos-rebuild switch --flake .#nix --impure
View what changed:
git diff flake.lock # See version bumps
Rollback
Rollback to Previous Generation
If something breaks after an update:
sudo nixos-rebuild switch --rollback
List All Generations
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
Switch to Specific Generation
sudo nixos-rebuild switch --switch-generation <number>
Rollback from Boot Menu
At boot time, select "NixOS - All configurations" to see all previous generations and boot into any of them.
Differences from Original Ubuntu Configuration
Removed Features
- macOS/Darwin support: All nix-darwin references removed
- WSL-specific paths: Hard-coded Windows paths in tmux configuration removed
- Platform conditionals: Darwin and Windows checks cleaned up
System-Level Changes
- User management: User
panis now defined at the system level - Boot configuration: Bootloader settings added
- Networking: NetworkManager enabled for network management
- Zsh: Enabled system-wide (configured via Home Manager)
Custom Packages Status
The following custom packages from the original configuration are currently commented out in modules/dev.nix:
claude-codeopencodegemini-cli
See TODO.md for information on integrating these packages.
Verification After Installation
Test Shell Environment
# Verify zsh is running
echo $SHELL
# Test fzf (Ctrl+R for history search)
# Test zoxide
z /path/to/directory
# Test lsd, bat
lsd
bat some-file
Test Tmux
# Start tmux
tmux new -s test
# Test custom keybindings:
# Alt+L/H - Next/previous window
# Alt+J/K - Next/previous session
# Ctrl+a + Ctrl+g - Lazygit popup
Test Neovim
nvim test.nix
# Inside nvim:
# :LspInfo - Check LSP status
# :checkhealth - Check overall health
Test Git & VCS
git config --get user.name # Should be "Martin Pander"
git config --get user.email # Should be "martin.pander@knowtion.de"
lazygit --version
jj --version
Test Taskwarrior
task --version # Should be 3.x
tt # taskwarrior-tui
timew --version
Test Development Tools
direnv --version
visidata --version
Common Tasks
Add a New Package
Edit home.nix or the appropriate module file, then rebuild:
sudo nixos-rebuild switch --flake .#nixos
Enable a System Service
Edit configuration.nix to add the service, then rebuild:
sudo nixos-rebuild switch --flake .#nixos
Cleanup Old Generations
Remove old generations to free up disk space:
# Delete generations older than 30 days
sudo nix-collect-garbage --delete-older-than 30d
# Or delete all old generations except current
sudo nix-collect-garbage -d
Troubleshooting
Build Fails
Check for syntax errors:
nix flake check
Services Don't Start
Check service status:
systemctl status <service-name>
journalctl -u <service-name>
Home Manager Issues
Rebuild Home Manager separately:
home-manager switch --flake .#pan
NIX_LD Issues
If you encounter issues running non-Nix binaries, check that NIX_LD variables are set:
echo $NIX_LD
echo $NIX_LD_LIBRARY_PATH
Resources
Support
For issues specific to this configuration, see the TODO.md file for known limitations and planned improvements.