Files
dot/README.md
2026-02-06 20:51:39 +01:00

283 lines
6.6 KiB
Markdown

# 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:
```bash
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:
```bash
sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure
```
Or from inside the directory:
```bash
cd /home/pan/dev/config/dot/nix/nixos
sudo nixos-rebuild switch --flake .#nix --impure
```
### 4. Verify Installation
After applying, verify everything works:
```bash
# 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:
```bash
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:
```bash
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:
```bash
git diff flake.lock # See version bumps
```
## Rollback
### Rollback to Previous Generation
If something breaks after an update:
```bash
sudo nixos-rebuild switch --rollback
```
### List All Generations
```bash
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
```
### Switch to Specific Generation
```bash
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](TODO.md) for information on integrating these packages.
## Verification After Installation
### Test Shell Environment
```bash
# 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
```bash
# 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
```bash
nvim test.nix
# Inside nvim:
# :LspInfo - Check LSP status
# :checkhealth - Check overall health
```
### Test Git & VCS
```bash
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
```bash
task --version # Should be 3.x
tt # taskwarrior-tui
timew --version
```
### Test Development Tools
```bash
direnv --version
visidata --version
```
## Common Tasks
### Add a New Package
Edit `home.nix` or the appropriate module file, then rebuild:
```bash
sudo nixos-rebuild switch --flake .#nixos
```
### Enable a System Service
Edit `configuration.nix` to add the service, then rebuild:
```bash
sudo nixos-rebuild switch --flake .#nixos
```
### Cleanup Old Generations
Remove old generations to free up disk space:
```bash
# 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:
```bash
nix flake check
```
### Services Don't Start
Check service status:
```bash
systemctl status <service-name>
journalctl -u <service-name>
```
### Home Manager Issues
Rebuild Home Manager separately:
```bash
home-manager switch --flake .#pan
```
### NIX_LD Issues
If you encounter issues running non-Nix binaries, check that NIX_LD variables are set:
```bash
echo $NIX_LD
echo $NIX_LD_LIBRARY_PATH
```
## Resources
- [NixOS Manual](https://nixos.org/manual/nixos/stable/)
- [Home Manager Manual](https://nix-community.github.io/home-manager/)
- [Nixpkgs Search](https://search.nixos.org/packages)
- [NixOS Discourse](https://discourse.nixos.org/)
## Support
For issues specific to this configuration, see the TODO.md file for known limitations and planned improvements.