2026-02-06 20:51:39 +01:00
2026-02-06 20:51:39 +01:00
2026-02-06 16:08:01 +01:00
2026-01-19 12:49:56 +01:00
2024-04-10 11:19:24 +02:00
2020-09-10 09:54:18 +02:00
2026-02-06 20:51:39 +01:00
2026-02-06 20:51:39 +01:00
2026-02-06 20:51:39 +01:00
2026-02-06 20:51:39 +01:00
2026-02-06 20:51:39 +01:00

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

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 pan is 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-code
  • opencode
  • gemini-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.

Description
No description provided
Readme 2.5 MiB
Languages
Lua 58.3%
Nix 41.7%