From a81bae3a8534381c24ef01e8e05e717975fa3b86 Mon Sep 17 00:00:00 2001 From: Martin Pander Date: Sat, 7 Feb 2026 13:54:58 +0100 Subject: [PATCH] Add unified nix configuration --- MIGRATION.md | 206 ------------- QUICK_START.md | 107 ------- README.md | 282 ------------------ SUMMARY.md | 180 ----------- newnix/flake.lock | 107 ------- newnix/flake.nix | 90 ------ nix/README.md | 137 +++++++++ TODO.md => nix/TODO.md | 22 +- nix/common.nix | 71 ----- nix/flake.lock | 50 +++- nix/flake.nix | 137 ++++----- .../hosts/home/darwin/configuration.nix | 0 {newnix => nix}/hosts/home/nix/home.nix | 0 .../hosts/home/nixos/configuration.nix | 0 {newnix => nix}/hosts/home/nixos/home.nix | 0 {newnix => nix}/hosts/work/nix/home.nix | 0 .../hosts/work/nixos/configuration.nix | 0 {newnix => nix}/hosts/work/nixos/home.nix | 0 {newnix => nix}/modules/home/common.nix | 0 {newnix => nix}/modules/home/dev.nix | 0 {newnix => nix}/modules/home/git.nix | 0 {newnix => nix}/modules/home/llm.nix | 0 {newnix => nix}/modules/home/nvim.nix | 0 {newnix => nix}/modules/home/sh.nix | 0 {newnix => nix}/modules/home/task.nix | 0 {newnix => nix}/modules/home/tmux.nix | 0 {newnix => nix}/modules/nixos/common.nix | 0 nix/nixos/MIGRATION.md | 206 ------------- nix/nixos/QUICK_START.md | 107 ------- nix/nixos/README.md | 282 ------------------ nix/nixos/SUMMARY.md | 180 ----------- nix/nixos/TODO.md | 173 ----------- nix/nixos/configuration.nix | 71 ----- nix/nixos/configuration.nix.old | 64 ---- nix/nixos/flake.lock | 86 ------ nix/nixos/flake.nix | 48 --- nix/nixos/home.nix | 59 ---- nix/nixos/modules/dev.nix | 18 -- nix/nixos/modules/git.nix | 88 ------ nix/nixos/modules/nvim.nix | 86 ------ nix/nixos/modules/sh.nix | 99 ------ nix/nixos/modules/task.nix | 75 ----- nix/nixos/modules/tmux.nix | 73 ----- nix/nixos/result | 1 - nix/user/dev.nix | 18 -- nix/user/git.nix | 88 ------ nix/user/nvim.nix | 91 ------ nix/user/profiles/martin.nix | 13 - nix/user/profiles/moustachioedBook.nix | 13 - nix/user/profiles/work.nix | 30 -- nix/user/sh.nix | 119 -------- nix/user/task.nix | 75 ----- nix/user/task_home.nix | 37 --- nix/user/tmux.nix | 72 ----- 54 files changed, 260 insertions(+), 3401 deletions(-) delete mode 100644 MIGRATION.md delete mode 100644 QUICK_START.md delete mode 100644 README.md delete mode 100644 SUMMARY.md delete mode 100644 newnix/flake.lock delete mode 100644 newnix/flake.nix create mode 100644 nix/README.md rename TODO.md => nix/TODO.md (87%) delete mode 100644 nix/common.nix rename {newnix => nix}/hosts/home/darwin/configuration.nix (100%) rename {newnix => nix}/hosts/home/nix/home.nix (100%) rename {newnix => nix}/hosts/home/nixos/configuration.nix (100%) rename {newnix => nix}/hosts/home/nixos/home.nix (100%) rename {newnix => nix}/hosts/work/nix/home.nix (100%) rename {newnix => nix}/hosts/work/nixos/configuration.nix (100%) rename {newnix => nix}/hosts/work/nixos/home.nix (100%) rename {newnix => nix}/modules/home/common.nix (100%) rename {newnix => nix}/modules/home/dev.nix (100%) rename {newnix => nix}/modules/home/git.nix (100%) rename {newnix => nix}/modules/home/llm.nix (100%) rename {newnix => nix}/modules/home/nvim.nix (100%) rename {newnix => nix}/modules/home/sh.nix (100%) rename {newnix => nix}/modules/home/task.nix (100%) rename {newnix => nix}/modules/home/tmux.nix (100%) rename {newnix => nix}/modules/nixos/common.nix (100%) delete mode 100644 nix/nixos/MIGRATION.md delete mode 100644 nix/nixos/QUICK_START.md delete mode 100644 nix/nixos/README.md delete mode 100644 nix/nixos/SUMMARY.md delete mode 100644 nix/nixos/TODO.md delete mode 100644 nix/nixos/configuration.nix delete mode 100644 nix/nixos/configuration.nix.old delete mode 100644 nix/nixos/flake.lock delete mode 100644 nix/nixos/flake.nix delete mode 100644 nix/nixos/home.nix delete mode 100644 nix/nixos/modules/dev.nix delete mode 100644 nix/nixos/modules/git.nix delete mode 100644 nix/nixos/modules/nvim.nix delete mode 100644 nix/nixos/modules/sh.nix delete mode 100644 nix/nixos/modules/task.nix delete mode 100644 nix/nixos/modules/tmux.nix delete mode 120000 nix/nixos/result delete mode 100644 nix/user/dev.nix delete mode 100644 nix/user/git.nix delete mode 100644 nix/user/nvim.nix delete mode 100644 nix/user/profiles/martin.nix delete mode 100644 nix/user/profiles/moustachioedBook.nix delete mode 100644 nix/user/profiles/work.nix delete mode 100644 nix/user/sh.nix delete mode 100644 nix/user/task.nix delete mode 100644 nix/user/task_home.nix delete mode 100644 nix/user/tmux.nix diff --git a/MIGRATION.md b/MIGRATION.md deleted file mode 100644 index 119f13f..0000000 --- a/MIGRATION.md +++ /dev/null @@ -1,206 +0,0 @@ -# Migration Guide: Channels → Flakes - -## Why Migrate to Flakes? - -✅ **Reproducibility**: Lock files pin exact package versions -✅ **Latest unstable packages**: Easy access to nixos-unstable -✅ **Better for dotfiles**: Version control with exact dependencies -✅ **Modern approach**: Future of Nix configuration -✅ **You're ready**: You already have flakes enabled! - -## Current State (Channels) - -Your current setup: -```bash -/etc/nixos/configuration.nix # Channel-based, imports from -``` - -Commands: -```bash -sudo nix-channel --update -sudo nixos-rebuild switch -``` - -## Target State (Flakes) - -New setup: -```bash -/home/pan/dev/config/dot/nix/nixos/ -├── flake.nix # Declares inputs (nixpkgs, nixos-wsl, home-manager) -├── configuration.nix # System config (no imports needed) -├── home.nix # Your user config -└── modules/ # User modules -``` - -Commands: -```bash -nix flake update # Update dependencies -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix -``` - -## Migration Steps - -### Step 1: Test the Flake Configuration - -First, let's make sure it builds without applying: - -```bash -cd /home/pan/dev/config/dot/nix/nixos -nix flake check --impure # Validate syntax -sudo nixos-rebuild build --flake .#nix --impure # Test build -``` - -If successful, you'll see a `result` symlink. The `--impure` flag is needed for NIX_LD settings. - -### Step 2: Review What Will Change - -Compare your current and new configs: -```bash -diff /etc/nixos/configuration.nix /home/pan/dev/config/dot/nix/nixos/configuration.nix -``` - -Key differences: -- ❌ Removed: `imports = [ ]` -- ✅ Added: Flake manages these as inputs -- ✅ Uses: nixos-unstable (latest packages) -- ✅ Locks: Exact versions in flake.lock - -### Step 3: Apply the Flake Configuration - -**Option A: Direct (Recommended)** -```bash -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure -``` - -**Option B: Symlink to /etc/nixos (Optional)** -```bash -sudo mv /etc/nixos/configuration.nix /etc/nixos/configuration.nix.backup -sudo ln -s /home/pan/dev/config/dot/nix/nixos/flake.nix /etc/nixos/flake.nix -sudo ln -s /home/pan/dev/config/dot/nix/nixos/configuration.nix /etc/nixos/configuration.nix -sudo nixos-rebuild switch --flake /etc/nixos#nix --impure -``` - -### Step 4: Verify Everything Works - -After switching: -```bash -# Check system info -nixos-version - -# Check flake info -nix flake metadata /home/pan/dev/config/dot/nix/nixos - -# Test your tools -zsh --version -tmux -V -nvim --version -git --version -task --version -``` - -### Step 5: Set Up Convenient Alias (Optional) - -Add to your shell config: -```bash -alias nixos-update='cd /home/pan/dev/config/dot/nix/nixos && nix flake update && sudo nixos-rebuild switch --flake .#nix --impure' -alias nixos-rebuild-switch='sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure' -``` - -## Rollback Plan - -If anything goes wrong, you can always rollback: - -```bash -# List generations -sudo nix-env --list-generations --profile /nix/var/nix/profiles/system - -# Rollback to previous generation -sudo nixos-rebuild switch --rollback - -# Or select from boot menu -# Reboot and choose previous generation -``` - -Your old channel-based config is still at `/etc/nixos/configuration.nix.backup`. - -## Common Commands - -### With Flakes - -```bash -# Update all inputs (nixpkgs, home-manager, nixos-wsl) -nix flake update - -# Update just one input -nix flake lock --update-input nixpkgs - -# Apply configuration -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure - -# Test without applying -sudo nixos-rebuild build --flake /home/pan/dev/config/dot/nix/nixos#nix --impure - -# Check what changed -nix flake metadata /home/pan/dev/config/dot/nix/nixos -git diff flake.lock # See version changes -``` - -### Garbage Collection - -```bash -# Delete old generations (save disk space) -sudo nix-collect-garbage --delete-older-than 30d - -# Full cleanup -sudo nix-collect-garbage -d -sudo nix-store --optimise -``` - -## FAQ - -### Do I need to remove channels? - -No, but you can clean them up: -```bash -sudo nix-channel --list # See current channels -sudo nix-channel --remove nixos # Remove if desired -``` - -### Will my existing packages break? - -No! The flake uses the same package set (nixos-unstable). Your home-manager config stays the same. - -### What about `--impure` flag? - -You need it because `home.nix` uses `NIX_LD` which reads from the store at evaluation time. This is fine and expected for this use case. - -### Can I still use `nixos-rebuild switch` without flags? - -Not directly with flakes. But you can: -1. Create an alias (see Step 5) -2. Symlink to `/etc/nixos/flake.nix` and use `--flake /etc/nixos#nix` - -### How do I update packages now? - -```bash -# Update flake.lock to latest versions -nix flake update - -# Then rebuild -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure -``` - -## Benefits You'll Get - -1. **Exact versions**: `flake.lock` pins everything -2. **Faster updates**: Only download what changed -3. **Better caching**: Flakes have better binary cache hits -4. **Git-friendly**: Your whole system in version control -5. **Easy sharing**: Others can reproduce your exact system - -## Next Steps After Migration - -1. ✅ Commit your configuration to git -2. ✅ Remove old channels (optional) -3. ✅ Set up shell aliases -4. ✅ Enjoy reproducible configs! 🎉 diff --git a/QUICK_START.md b/QUICK_START.md deleted file mode 100644 index 455c06f..0000000 --- a/QUICK_START.md +++ /dev/null @@ -1,107 +0,0 @@ -# Quick Start Guide - -## TL;DR - Should I Use Flakes? - -**YES!** ✅ Use flakes because: - -1. You get **nixos-unstable** (latest packages) with reproducibility -2. Your config is in **git** with locked versions (flake.lock) -3. You **already have flakes enabled** in your system -4. It's the **modern, recommended approach** - -## Current vs Flake Setup - -### Current (Channels) ❌ -```bash -# Update -sudo nix-channel --update -sudo nixos-rebuild switch - -# Config location -/etc/nixos/configuration.nix - -# Package versions -Whatever the channel has (not locked) -``` - -### With Flakes (Recommended) ✅ -```bash -# Update -nix flake update -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure - -# Config location -/home/pan/dev/config/dot/nix/nixos/ - ├── flake.nix (inputs: nixpkgs unstable, home-manager, nixos-wsl) - ├── flake.lock (exact versions locked) - └── configuration.nix - -# Package versions -Locked in flake.lock, reproducible everywhere -``` - -## Apply the Flake Configuration Now - -### Step 1: Test it -```bash -cd /home/pan/dev/config/dot/nix/nixos -nix flake check --impure -sudo nixos-rebuild build --flake .#nix --impure -``` - -### Step 2: If successful, apply it -```bash -sudo nixos-rebuild switch --flake .#nix --impure -``` - -### Step 3: Verify -```bash -nixos-version -nix flake metadata /home/pan/dev/config/dot/nix/nixos -``` - -## What Changes? - -- ✅ Same packages, just from nixos-unstable (usually newer) -- ✅ Same home-manager config (all your dotfiles stay) -- ✅ Same NixOS-WSL functionality -- ✅ Exact versions locked in flake.lock -- ✅ Easy to rollback (NixOS generations) - -## Daily Usage - -```bash -# Make config changes -vim /home/pan/dev/config/dot/nix/nixos/home.nix - -# Apply -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure - -# Update packages (weekly/monthly) -cd /home/pan/dev/config/dot/nix/nixos -nix flake update -sudo nixos-rebuild switch --flake .#nix --impure - -# Rollback if needed -sudo nixos-rebuild switch --rollback -``` - -## Create Convenience Alias - -Add to your `~/.zshrc` or shell config: - -```bash -# Quick rebuild -alias nr='sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure' - -# Update and rebuild -alias nu='cd /home/pan/dev/config/dot/nix/nixos && nix flake update && sudo nixos-rebuild switch --flake .#nix --impure' -``` - -Then just run `nr` to rebuild! - -## Need Help? - -- Read [MIGRATION.md](MIGRATION.md) for detailed migration guide -- Read [README.md](README.md) for full documentation -- Check [TODO.md](TODO.md) for known issues diff --git a/README.md b/README.md deleted file mode 100644 index c390e7d..0000000 --- a/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# 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 -``` - -### 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 -journalctl -u -``` - -### 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. diff --git a/SUMMARY.md b/SUMMARY.md deleted file mode 100644 index 3d3343b..0000000 --- a/SUMMARY.md +++ /dev/null @@ -1,180 +0,0 @@ -# NixOS Configuration - Implementation Summary - -This document summarizes the NixOS configuration that was created based on the migration plan. - -## What Was Created - -### Directory Structure - -``` -nixos/ -├── flake.nix # NixOS flake (no nix-darwin) -├── flake.lock # Flake lockfile (auto-generated) -├── configuration.nix # System-level configuration -├── hardware-configuration.nix # Hardware template (MUST be replaced) -├── home.nix # Home Manager integration -├── modules/ # User-level configurations -│ ├── sh.nix # Shell (Zsh, Prezto, fzf, zoxide) -│ ├── tmux.nix # Tmux (WSL paths removed) -│ ├── git.nix # Git, Lazygit, Jujutsu -│ ├── nvim.nix # Neovim with 40+ plugins -│ ├── dev.nix # Dev tools (direnv, visidata) -│ └── task.nix # Taskwarrior, Timewarrior -├── README.md # Installation and usage guide -├── TODO.md # Remaining tasks and issues -└── SUMMARY.md # This file -``` - -## Key Changes from Original Configuration - -### ✅ Removed -- **nix-darwin** input and outputs -- **macOS/Darwin** conditionals (lines 54-58 in sh.nix) -- **WSL** hard-coded paths (lines 31-32 in tmux.nix) -- **Windows** checks (lines 115-117 in sh.nix) - -### ✅ Added -- **System-level configuration** (configuration.nix) - - Boot loader setup (systemd-boot) - - Networking with NetworkManager - - User account definition - - System timezone and locale - - Nix flakes enabled - -- **Hardware configuration template** (hardware-configuration.nix) - - Placeholder for NixOS-generated config - - Must be replaced during installation - -### ✅ Modified -- **Home Manager integration** - - Now runs as NixOS module (not standalone) - - useGlobalPkgs enabled - - Removed allowUnfree (handled at system level) - -- **Shell configuration** (modules/sh.nix) - - Removed all platform-specific conditionals - - Clean Linux-only configuration - - Added `profileExtra` for .profile sourcing - -- **Tmux configuration** (modules/tmux.nix) - - Commented out note keybindings (C-n, C-p) - - Paths need to be updated for NixOS environment - -- **Development tools** (modules/dev.nix) - - Custom packages commented out: - - claude-code - - opencode - - gemini-cli - - TODO notes added for integration - -## Validation Status - -✅ Flake syntax is valid -✅ Configuration evaluates successfully -✅ All module imports resolve correctly -✅ No blocking errors found - -⚠️ Requires `--impure` flag due to NIX_LD settings - -## What Needs to Be Done Before Use - -### 🔴 Critical (Must Do) -1. **Replace hardware-configuration.nix** - ```bash - sudo nixos-generate-config --show-hardware-config > nixos/hardware-configuration.nix - ``` - -2. **Update hostname** in configuration.nix - - Currently set to: "nixos" - - Change to your actual hostname - -3. **Verify boot loader** choice in configuration.nix - - UEFI: systemd-boot (currently enabled) - - BIOS: GRUB (commented out) - -### 🟡 Important (Should Do) -1. **Verify timezone** in configuration.nix - - Currently: "Europe/Berlin" - -2. **Check locale settings** in configuration.nix - - Currently: en_US.UTF-8 / de_DE.UTF-8 - -3. **Verify nvim lua files** exist at: - - `/home/pan/dev/config/dot/nvim/base.lua` - - `/home/pan/dev/config/dot/nvim/keymaps.lua` - - `/home/pan/dev/config/dot/nvim/plugins.lua` - - `/home/pan/dev/config/dot/nvim/filetype.lua` - -### 🟢 Optional (Nice to Have) -1. **Update tmux note paths** in modules/tmux.nix (C-n, C-p keybindings) -2. **Add custom packages** (claude-code, opencode, gemini-cli) -3. **Review and customize** any other settings - -## How to Apply - -### Test Build (Recommended First) -```bash -cd /home/pan/dev/config/dot/nix/nixos -sudo nixos-rebuild build --flake .#nixos --impure -``` - -### Apply Configuration -```bash -cd /home/pan/dev/config/dot/nix/nixos -sudo nixos-rebuild switch --flake .#nixos --impure -``` - -### Update Packages -```bash -nix flake update -sudo nixos-rebuild switch --flake .#nixos --impure -``` - -## Verification Checklist - -After applying the configuration, verify: - -- [ ] System boots successfully -- [ ] User 'pan' can login -- [ ] Zsh loads with Prezto theme -- [ ] fzf keybindings work (Ctrl+R) -- [ ] zoxide works (`cd` command) -- [ ] Tmux starts without errors -- [ ] Neovim opens with all plugins -- [ ] Git config shows correct user -- [ ] Lazygit and Jujutsu work -- [ ] Taskwarrior shows version 3.x -- [ ] Direnv loads .envrc files - -## Files Preserved - -The original Home Manager configuration remains untouched: -- `/home/pan/dev/config/dot/nix/flake.nix` -- `/home/pan/dev/config/dot/nix/common.nix` -- `/home/pan/dev/config/dot/nix/user/*` - -You can continue using the Ubuntu setup alongside this NixOS configuration. - -## Documentation - -- **README.md**: Complete installation and usage guide -- **TODO.md**: Detailed list of remaining tasks and known issues -- **SUMMARY.md**: This file - quick overview and status - -## Support - -For issues or questions: -1. Check TODO.md for known issues -2. Review README.md for troubleshooting -3. Consult NixOS manual: https://nixos.org/manual/nixos/stable/ - -## Next Steps - -1. ✅ Configuration created successfully -2. ⏳ Replace hardware-configuration.nix -3. ⏳ Update hostname and timezone -4. ⏳ Test build configuration -5. ⏳ Apply configuration -6. ⏳ Verify all components work - -Good luck with your NixOS migration! 🚀 diff --git a/newnix/flake.lock b/newnix/flake.lock deleted file mode 100644 index 9d1fa68..0000000 --- a/newnix/flake.lock +++ /dev/null @@ -1,107 +0,0 @@ -{ - "nodes": { - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1767039857, - "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1770318660, - "narHash": "sha256-yFVde8QZK7Dc0Xa8eQDsmxLX4NJNfL1NKfctSyiQgMY=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "471e6a065f9efed51488d7c51a9abbd387df91b8", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, - "nix-darwin": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1770184146, - "narHash": "sha256-DsqnN6LvXmohTRaal7tVZO/AKBuZ02kPBiZKSU4qa/k=", - "owner": "LnL7", - "repo": "nix-darwin", - "rev": "0d7874ef7e3ba02d58bebb871e6e29da36fa1b37", - "type": "github" - }, - "original": { - "owner": "LnL7", - "repo": "nix-darwin", - "type": "github" - } - }, - "nixos-wsl": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1769217863, - "narHash": "sha256-RY9kJDXD6+2Td/59LkZ0PFSereCXHdBX9wIkbYjRKCY=", - "owner": "nix-community", - "repo": "NixOS-WSL", - "rev": "38a5250e57f583662eac3b944830e4b9e169e965", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "NixOS-WSL", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1770197578, - "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "home-manager": "home-manager", - "nix-darwin": "nix-darwin", - "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/newnix/flake.nix b/newnix/flake.nix deleted file mode 100644 index 038de7e..0000000 --- a/newnix/flake.nix +++ /dev/null @@ -1,90 +0,0 @@ -{ - description = "Unified Nix Configuration"; - - inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - - nixos-wsl = { - url = "github:nix-community/NixOS-WSL"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - nix-darwin = { - url = "github:LnL7/nix-darwin"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; - - outputs = { self, nixpkgs, nixos-wsl, home-manager, nix-darwin, ... }@inputs: - let - linuxSystem = "x86_64-linux"; - linuxAarchSystem = "aarch64-linux"; - darwinSystem = "aarch64-darwin"; - - pkgsLinux = nixpkgs.legacyPackages.${linuxSystem}; - pkgsLinuxAarch = nixpkgs.legacyPackages.${linuxAarchSystem}; - pkgsDarwin = nixpkgs.legacyPackages.${darwinSystem}; - in - { - - # --- NixOS Systems --- - nixosConfigurations = { - - # Work WSL - work = nixpkgs.lib.nixosSystem { - system = linuxSystem; - specialArgs = { inherit self; }; - modules = [ - nixos-wsl.nixosModules.wsl - ./hosts/work/nixos/configuration.nix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.pan = import ./hosts/work/nixos/home.nix; - } - ]; - }; - - # Home - home = nixpkgs.lib.nixosSystem { - system = linuxAarchSystem; - specialArgs = { inherit self; }; - modules = [ - ./hosts/home/nixos/configuration.nix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.martin = import ./hosts/home/nixos/home.nix; - } - ]; - }; - }; - - # --- Darwin Systems (Mac) --- - darwinConfigurations."Martins-MacBook-Pro" = nix-darwin.lib.darwinSystem { - system = darwinSystem; - specialArgs = { inherit self; }; - modules = [ ./hosts/home/darwin/configuration.nix ]; - }; - - # --- Standalone Home Manager --- - homeConfigurations = { - "pan@work" = home-manager.lib.homeManagerConfiguration { - pkgs = pkgsLinux; - modules = [ ./hosts/work/nix/home.nix ]; - }; - - "martin@mac" = home-manager.lib.homeManagerConfiguration { - pkgs = pkgsDarwin; - modules = [ ./hosts/home/nix/home.nix ]; - }; - }; - }; -} diff --git a/nix/README.md b/nix/README.md new file mode 100644 index 0000000..86553e9 --- /dev/null +++ b/nix/README.md @@ -0,0 +1,137 @@ +# Unified Nix Configuration + +This repository contains a modular, flake-based Nix configuration for multiple platforms and hosts. It provides a declarative and reproducible environment using NixOS, nix-darwin, and Home Manager. + +## Quick Start Guide + +### TL;DR - Should I Use Flakes? +**YES!** ✅ Use flakes because: +1. You get **nixpkgs-unstable** (latest packages) with reproducibility. +2. Your config is in **git** with locked versions (`flake.lock`). +3. It's the **modern, recommended approach** for Nix management. + +### Daily Usage + +```bash +# Apply changes (NixOS WSL) +sudo nixos-rebuild switch --flake .#work --impure + +# Apply changes (macOS) +darwin-rebuild switch --flake .#Martins-MacBook-Pro + +# Update packages (weekly/monthly) +nix flake update +# ... then run the switch command for your host +``` + +## Structure + +The configuration is organized into `hosts` and `modules`: + +``` +. +├── flake.nix # Entry point with all system configurations +├── flake.lock # Locked dependency versions +├── hosts/ # Machine-specific configurations +│ ├── home/ +│ │ ├── darwin/ # Martins-MacBook-Pro +│ │ ├── nix/ # Standalone Home Manager for Home +│ │ └── nixos/ # Home NixOS Server +│ └── work/ +│ ├── nix/ # Standalone Home Manager for Work +│ └── nixos/ # Work NixOS (WSL) +└── modules/ # Shared reusable modules + ├── home/ # Home Manager modules (sh, nvim, tmux, etc.) + └── nixos/ # NixOS-specific modules +``` + +## Available Configurations + +### NixOS +- **work**: WSL-based NixOS environment for work (User: `pan`). +- **home**: Server-based NixOS environment for home (User: `martin`). + +### Darwin (macOS) +- **Martins-MacBook-Pro**: nix-darwin configuration for macOS. + +### Standalone Home Manager +- **pan@work**: Home Manager for non-NixOS Linux at work. +- **martin@mac**: Home Manager for macOS (without nix-darwin). + +## Installation & Usage + +### 1. Apply Configuration + +Navigate to the repository and run the appropriate command for your system: + +**NixOS (Work/WSL):** +```bash +sudo nixos-rebuild switch --flake .#work --impure +``` + +**Darwin (macOS):** +```bash +darwin-rebuild switch --flake .#Martins-MacBook-Pro +``` + +**Standalone Home Manager:** +```bash +home-manager switch --flake .#pan@work +``` + +*Note: The `--impure` flag may be required for certain configurations (like NIX_LD).* + +### 2. Updating System Packages + +To update all packages to the latest versions from nixpkgs-unstable: + +```bash +# Update flake inputs +nix flake update + +# Apply the updates +sudo nixos-rebuild switch --flake .#work --impure +``` + +## Maintenance + +### Rollback +If something breaks after an update, you can rollback to the previous generation: +- **NixOS**: `sudo nixos-rebuild switch --rollback` +- **Darwin**: `darwin-rebuild --rollback` + +### Cleanup +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 +sudo nix-collect-garbage -d +``` + +## Modules Detail + +### Home Manager Modules (`modules/home/`) +- **sh.nix**: Zsh configuration with completions and aliases. +- **nvim.nix**: Personalized Neovim setup. +- **tmux.nix**: Terminal multiplexer configuration. +- **git.nix**: Git, Lazygit, and Jujutsu settings. +- **dev.nix**: Development tools and language runtimes. +- **llm.nix**: Local and API-based LLM tool configurations. +- **task.nix**: Taskwarrior and productivity tools. + +### NixOS Modules (`modules/nixos/`) +- **common.nix**: Shared system settings for all NixOS hosts. + +## Create Convenience Alias + +Add these to your shell configuration for faster updates: + +```bash +# Quick rebuild (adjust to your host) +alias nr='sudo nixos-rebuild switch --flake .#work --impure' + +# Update and rebuild +alias nu='nix flake update && sudo nixos-rebuild switch --flake .#work --impure' +``` \ No newline at end of file diff --git a/TODO.md b/nix/TODO.md similarity index 87% rename from TODO.md rename to nix/TODO.md index c56422e..2d2fa55 100644 --- a/TODO.md +++ b/nix/TODO.md @@ -144,23 +144,21 @@ Before considering this configuration complete: ## Notes -### Differences from Ubuntu Setup +### Unified Structure Benefits -1. **No macOS support**: All Darwin-specific code removed -2. **No WSL support**: WSL-specific paths and checks removed -3. **System-level user**: User defined in NixOS config, not standalone -4. **Integrated Home Manager**: HM runs as NixOS module, not standalone +1. **Multi-platform support**: Added support for Darwin (macOS) and NixOS (WSL and native). +2. **Modular Home Manager**: Reusable modules shared across all platforms. +3. **Machine-specific configurations**: Separated into `hosts/` for better organization. +4. **Flexible deployment**: Support for both NixOS modules and standalone Home Manager. ### Migration Path -If migrating from existing Ubuntu setup: +This configuration is designed to be the central point for all machines: -1. Backup current configuration -2. Install NixOS (keep Ubuntu if dual-boot) -3. Apply this configuration -4. Test all workflows -5. Import personal data (tasks, notes, etc.) -6. Verify custom packages availability +1. Clone to `~/dev/dot/newnix` (or preferred path). +2. Identify your host type (NixOS WSL, Darwin, etc.). +3. Apply the corresponding flake output as described in `README.md`. +4. Test and verify workflows. ## Questions to Resolve diff --git a/nix/common.nix b/nix/common.nix deleted file mode 100644 index 4ddf994..0000000 --- a/nix/common.nix +++ /dev/null @@ -1,71 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./user/sh.nix - ./user/tmux.nix - ./user/git.nix - ./user/dev.nix - ./user/nvim.nix - ]; - - home.packages = with pkgs; [ - nil - # neovim - - # (pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; }) - pkgs.nerd-fonts.fira-code - - pkgs.nix-ld - - # (pkgs.writeShellScriptBin "my-hello" '' - # echo "Hello, ${config.home.username}!" - # '') - ]; - - home.file = { - # ".screenrc".source = dotfiles/screenrc; - - # ".gradle/gradle.properties".text = '' - # org.gradle.console=verbose - # org.gradle.daemon.idletimeout=3600000 - # ''; - }; - - home.sessionVariables = { - NIX_LD_LIBRARY_PATH = with pkgs; lib.makeLibraryPath [ - stdenv.cc.cc - zlib - # Add other common libs here (glib, libx11, etc.) - ]; - NIX_LD = lib.fileContents "${pkgs.stdenv.cc}/nix-support/dynamic-linker"; - }; - - # Home Manager can also manage your environment variables through - # 'home.sessionVariables'. If you don't want to manage your shell through Home - # Manager then you have to manually source 'hm-session-vars.sh' located at - # either - # - # ~/.nix-profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # /etc/profiles/per-user/moustachioed/etc/profile.d/hm-session-vars.sh - # - #home.sessionVariables = { - # EDITOR = "nvim"; - #}; - #home.shellAliases = { - # "ll" = "ls -la"; - # "t" = "tmuxp"; - # "tl" = "tmuxp load"; - # }; - - news.display = "silent"; - - programs.home-manager.enable = true; -} diff --git a/nix/flake.lock b/nix/flake.lock index fc60680..9d1fa68 100644 --- a/nix/flake.lock +++ b/nix/flake.lock @@ -1,5 +1,21 @@ { "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -7,11 +23,11 @@ ] }, "locked": { - "lastModified": 1770164260, - "narHash": "sha256-mQgOAYWlVJyuyXjZN6yxqXWyODvQI5P/UZUCU7IOuYo=", + "lastModified": 1770318660, + "narHash": "sha256-yFVde8QZK7Dc0Xa8eQDsmxLX4NJNfL1NKfctSyiQgMY=", "owner": "nix-community", "repo": "home-manager", - "rev": "4fda26500b4539e0a1e3afba9f0e1616bdad4f85", + "rev": "471e6a065f9efed51488d7c51a9abbd387df91b8", "type": "github" }, "original": { @@ -40,13 +56,34 @@ "type": "github" } }, + "nixos-wsl": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769217863, + "narHash": "sha256-RY9kJDXD6+2Td/59LkZ0PFSereCXHdBX9wIkbYjRKCY=", + "owner": "nix-community", + "repo": "NixOS-WSL", + "rev": "38a5250e57f583662eac3b944830e4b9e169e965", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NixOS-WSL", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1770115704, - "narHash": "sha256-KHFT9UWOF2yRPlAnSXQJh6uVcgNcWlFqqiAZ7OVlHNc=", + "lastModified": 1770197578, + "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e6eae2ee2110f3d31110d5c222cd395303343b08", + "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", "type": "github" }, "original": { @@ -60,6 +97,7 @@ "inputs": { "home-manager": "home-manager", "nix-darwin": "nix-darwin", + "nixos-wsl": "nixos-wsl", "nixpkgs": "nixpkgs" } } diff --git a/nix/flake.nix b/nix/flake.nix index 4b43ebd..038de7e 100644 --- a/nix/flake.nix +++ b/nix/flake.nix @@ -1,89 +1,90 @@ { - description = "Home Manager configuration of moustachioed"; + description = "Unified Nix Configuration"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - nix-darwin.url = "github:LnL7/nix-darwin"; - nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; + + nixos-wsl = { + url = "github:nix-community/NixOS-WSL"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + + nix-darwin = { + url = "github:LnL7/nix-darwin"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { self, nix-darwin, nixpkgs, home-manager, ... }: + outputs = { self, nixpkgs, nixos-wsl, home-manager, nix-darwin, ... }@inputs: let - #system = "x86_64-darwin"; - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; + linuxSystem = "x86_64-linux"; + linuxAarchSystem = "aarch64-linux"; + darwinSystem = "aarch64-darwin"; - configuration = { pkgs, ... }: { - environment.systemPackages = - [ - pkgs.vim - ]; + pkgsLinux = nixpkgs.legacyPackages.${linuxSystem}; + pkgsLinuxAarch = nixpkgs.legacyPackages.${linuxAarchSystem}; + pkgsDarwin = nixpkgs.legacyPackages.${darwinSystem}; + in + { - # Auto upgrade nix package and the daemon service. - services.nix-daemon.enable = true; - # nix.package = pkgs.nix; + # --- NixOS Systems --- + nixosConfigurations = { - nix.settings.experimental-features = "nix-command flakes"; - - programs.zsh.enable = true; # default shell on catalina - - # Set Git commit hash for darwin-version. - system.configurationRevision = self.rev or self.dirtyRev or null; - - # Used for backwards compatibility, please read the changelog before changing. - # $ darwin-rebuild changelog - system.stateVersion = 4; - - # The platform the configuration will be used on. - nixpkgs.hostPlatform = system; - }; - in { - # Build darwin flake using: - # $ darwin-rebuild build --flake .#Martins-MacBook-Pro - darwinConfigurations."Martins-MacBook-Pro" = nix-darwin.lib.darwinSystem { - modules = [ configuration ]; - }; - - # Expose the package set, including overlays, for convenience. - darwinPackages = self.darwinConfigurations."Martins-MacBook-Pro".pkgs; - - homeConfigurations = { - "moustachioed" = home-manager.lib.homeManagerConfiguration { - inherit pkgs; - - modules = [ - ./user/profiles/moustachioedBook.nix - ./common.nix - ./user/task_home.nix - ]; - }; - - "martin" = home-manager.lib.homeManagerConfiguration { - inherit pkgs; - - modules = [ - ./user/profiles/martin.nix - ./common.nix - ./user/task_home.nix - ]; - }; - - "pan" = home-manager.lib.homeManagerConfiguration { - inherit pkgs; - - modules = [ - ./user/profiles/work.nix - ./common.nix - ./user/task.nix + # Work WSL + work = nixpkgs.lib.nixosSystem { + system = linuxSystem; + specialArgs = { inherit self; }; + modules = [ + nixos-wsl.nixosModules.wsl + ./hosts/work/nixos/configuration.nix + home-manager.nixosModules.home-manager { - nixpkgs.config.allowUnfree = true; + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.pan = import ./hosts/work/nixos/home.nix; + } + ]; + }; + + # Home + home = nixpkgs.lib.nixosSystem { + system = linuxAarchSystem; + specialArgs = { inherit self; }; + modules = [ + ./hosts/home/nixos/configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.martin = import ./hosts/home/nixos/home.nix; } ]; }; }; + + # --- Darwin Systems (Mac) --- + darwinConfigurations."Martins-MacBook-Pro" = nix-darwin.lib.darwinSystem { + system = darwinSystem; + specialArgs = { inherit self; }; + modules = [ ./hosts/home/darwin/configuration.nix ]; + }; + + # --- Standalone Home Manager --- + homeConfigurations = { + "pan@work" = home-manager.lib.homeManagerConfiguration { + pkgs = pkgsLinux; + modules = [ ./hosts/work/nix/home.nix ]; + }; + + "martin@mac" = home-manager.lib.homeManagerConfiguration { + pkgs = pkgsDarwin; + modules = [ ./hosts/home/nix/home.nix ]; + }; + }; }; } diff --git a/newnix/hosts/home/darwin/configuration.nix b/nix/hosts/home/darwin/configuration.nix similarity index 100% rename from newnix/hosts/home/darwin/configuration.nix rename to nix/hosts/home/darwin/configuration.nix diff --git a/newnix/hosts/home/nix/home.nix b/nix/hosts/home/nix/home.nix similarity index 100% rename from newnix/hosts/home/nix/home.nix rename to nix/hosts/home/nix/home.nix diff --git a/newnix/hosts/home/nixos/configuration.nix b/nix/hosts/home/nixos/configuration.nix similarity index 100% rename from newnix/hosts/home/nixos/configuration.nix rename to nix/hosts/home/nixos/configuration.nix diff --git a/newnix/hosts/home/nixos/home.nix b/nix/hosts/home/nixos/home.nix similarity index 100% rename from newnix/hosts/home/nixos/home.nix rename to nix/hosts/home/nixos/home.nix diff --git a/newnix/hosts/work/nix/home.nix b/nix/hosts/work/nix/home.nix similarity index 100% rename from newnix/hosts/work/nix/home.nix rename to nix/hosts/work/nix/home.nix diff --git a/newnix/hosts/work/nixos/configuration.nix b/nix/hosts/work/nixos/configuration.nix similarity index 100% rename from newnix/hosts/work/nixos/configuration.nix rename to nix/hosts/work/nixos/configuration.nix diff --git a/newnix/hosts/work/nixos/home.nix b/nix/hosts/work/nixos/home.nix similarity index 100% rename from newnix/hosts/work/nixos/home.nix rename to nix/hosts/work/nixos/home.nix diff --git a/newnix/modules/home/common.nix b/nix/modules/home/common.nix similarity index 100% rename from newnix/modules/home/common.nix rename to nix/modules/home/common.nix diff --git a/newnix/modules/home/dev.nix b/nix/modules/home/dev.nix similarity index 100% rename from newnix/modules/home/dev.nix rename to nix/modules/home/dev.nix diff --git a/newnix/modules/home/git.nix b/nix/modules/home/git.nix similarity index 100% rename from newnix/modules/home/git.nix rename to nix/modules/home/git.nix diff --git a/newnix/modules/home/llm.nix b/nix/modules/home/llm.nix similarity index 100% rename from newnix/modules/home/llm.nix rename to nix/modules/home/llm.nix diff --git a/newnix/modules/home/nvim.nix b/nix/modules/home/nvim.nix similarity index 100% rename from newnix/modules/home/nvim.nix rename to nix/modules/home/nvim.nix diff --git a/newnix/modules/home/sh.nix b/nix/modules/home/sh.nix similarity index 100% rename from newnix/modules/home/sh.nix rename to nix/modules/home/sh.nix diff --git a/newnix/modules/home/task.nix b/nix/modules/home/task.nix similarity index 100% rename from newnix/modules/home/task.nix rename to nix/modules/home/task.nix diff --git a/newnix/modules/home/tmux.nix b/nix/modules/home/tmux.nix similarity index 100% rename from newnix/modules/home/tmux.nix rename to nix/modules/home/tmux.nix diff --git a/newnix/modules/nixos/common.nix b/nix/modules/nixos/common.nix similarity index 100% rename from newnix/modules/nixos/common.nix rename to nix/modules/nixos/common.nix diff --git a/nix/nixos/MIGRATION.md b/nix/nixos/MIGRATION.md deleted file mode 100644 index 119f13f..0000000 --- a/nix/nixos/MIGRATION.md +++ /dev/null @@ -1,206 +0,0 @@ -# Migration Guide: Channels → Flakes - -## Why Migrate to Flakes? - -✅ **Reproducibility**: Lock files pin exact package versions -✅ **Latest unstable packages**: Easy access to nixos-unstable -✅ **Better for dotfiles**: Version control with exact dependencies -✅ **Modern approach**: Future of Nix configuration -✅ **You're ready**: You already have flakes enabled! - -## Current State (Channels) - -Your current setup: -```bash -/etc/nixos/configuration.nix # Channel-based, imports from -``` - -Commands: -```bash -sudo nix-channel --update -sudo nixos-rebuild switch -``` - -## Target State (Flakes) - -New setup: -```bash -/home/pan/dev/config/dot/nix/nixos/ -├── flake.nix # Declares inputs (nixpkgs, nixos-wsl, home-manager) -├── configuration.nix # System config (no imports needed) -├── home.nix # Your user config -└── modules/ # User modules -``` - -Commands: -```bash -nix flake update # Update dependencies -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix -``` - -## Migration Steps - -### Step 1: Test the Flake Configuration - -First, let's make sure it builds without applying: - -```bash -cd /home/pan/dev/config/dot/nix/nixos -nix flake check --impure # Validate syntax -sudo nixos-rebuild build --flake .#nix --impure # Test build -``` - -If successful, you'll see a `result` symlink. The `--impure` flag is needed for NIX_LD settings. - -### Step 2: Review What Will Change - -Compare your current and new configs: -```bash -diff /etc/nixos/configuration.nix /home/pan/dev/config/dot/nix/nixos/configuration.nix -``` - -Key differences: -- ❌ Removed: `imports = [ ]` -- ✅ Added: Flake manages these as inputs -- ✅ Uses: nixos-unstable (latest packages) -- ✅ Locks: Exact versions in flake.lock - -### Step 3: Apply the Flake Configuration - -**Option A: Direct (Recommended)** -```bash -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure -``` - -**Option B: Symlink to /etc/nixos (Optional)** -```bash -sudo mv /etc/nixos/configuration.nix /etc/nixos/configuration.nix.backup -sudo ln -s /home/pan/dev/config/dot/nix/nixos/flake.nix /etc/nixos/flake.nix -sudo ln -s /home/pan/dev/config/dot/nix/nixos/configuration.nix /etc/nixos/configuration.nix -sudo nixos-rebuild switch --flake /etc/nixos#nix --impure -``` - -### Step 4: Verify Everything Works - -After switching: -```bash -# Check system info -nixos-version - -# Check flake info -nix flake metadata /home/pan/dev/config/dot/nix/nixos - -# Test your tools -zsh --version -tmux -V -nvim --version -git --version -task --version -``` - -### Step 5: Set Up Convenient Alias (Optional) - -Add to your shell config: -```bash -alias nixos-update='cd /home/pan/dev/config/dot/nix/nixos && nix flake update && sudo nixos-rebuild switch --flake .#nix --impure' -alias nixos-rebuild-switch='sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure' -``` - -## Rollback Plan - -If anything goes wrong, you can always rollback: - -```bash -# List generations -sudo nix-env --list-generations --profile /nix/var/nix/profiles/system - -# Rollback to previous generation -sudo nixos-rebuild switch --rollback - -# Or select from boot menu -# Reboot and choose previous generation -``` - -Your old channel-based config is still at `/etc/nixos/configuration.nix.backup`. - -## Common Commands - -### With Flakes - -```bash -# Update all inputs (nixpkgs, home-manager, nixos-wsl) -nix flake update - -# Update just one input -nix flake lock --update-input nixpkgs - -# Apply configuration -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure - -# Test without applying -sudo nixos-rebuild build --flake /home/pan/dev/config/dot/nix/nixos#nix --impure - -# Check what changed -nix flake metadata /home/pan/dev/config/dot/nix/nixos -git diff flake.lock # See version changes -``` - -### Garbage Collection - -```bash -# Delete old generations (save disk space) -sudo nix-collect-garbage --delete-older-than 30d - -# Full cleanup -sudo nix-collect-garbage -d -sudo nix-store --optimise -``` - -## FAQ - -### Do I need to remove channels? - -No, but you can clean them up: -```bash -sudo nix-channel --list # See current channels -sudo nix-channel --remove nixos # Remove if desired -``` - -### Will my existing packages break? - -No! The flake uses the same package set (nixos-unstable). Your home-manager config stays the same. - -### What about `--impure` flag? - -You need it because `home.nix` uses `NIX_LD` which reads from the store at evaluation time. This is fine and expected for this use case. - -### Can I still use `nixos-rebuild switch` without flags? - -Not directly with flakes. But you can: -1. Create an alias (see Step 5) -2. Symlink to `/etc/nixos/flake.nix` and use `--flake /etc/nixos#nix` - -### How do I update packages now? - -```bash -# Update flake.lock to latest versions -nix flake update - -# Then rebuild -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure -``` - -## Benefits You'll Get - -1. **Exact versions**: `flake.lock` pins everything -2. **Faster updates**: Only download what changed -3. **Better caching**: Flakes have better binary cache hits -4. **Git-friendly**: Your whole system in version control -5. **Easy sharing**: Others can reproduce your exact system - -## Next Steps After Migration - -1. ✅ Commit your configuration to git -2. ✅ Remove old channels (optional) -3. ✅ Set up shell aliases -4. ✅ Enjoy reproducible configs! 🎉 diff --git a/nix/nixos/QUICK_START.md b/nix/nixos/QUICK_START.md deleted file mode 100644 index 455c06f..0000000 --- a/nix/nixos/QUICK_START.md +++ /dev/null @@ -1,107 +0,0 @@ -# Quick Start Guide - -## TL;DR - Should I Use Flakes? - -**YES!** ✅ Use flakes because: - -1. You get **nixos-unstable** (latest packages) with reproducibility -2. Your config is in **git** with locked versions (flake.lock) -3. You **already have flakes enabled** in your system -4. It's the **modern, recommended approach** - -## Current vs Flake Setup - -### Current (Channels) ❌ -```bash -# Update -sudo nix-channel --update -sudo nixos-rebuild switch - -# Config location -/etc/nixos/configuration.nix - -# Package versions -Whatever the channel has (not locked) -``` - -### With Flakes (Recommended) ✅ -```bash -# Update -nix flake update -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure - -# Config location -/home/pan/dev/config/dot/nix/nixos/ - ├── flake.nix (inputs: nixpkgs unstable, home-manager, nixos-wsl) - ├── flake.lock (exact versions locked) - └── configuration.nix - -# Package versions -Locked in flake.lock, reproducible everywhere -``` - -## Apply the Flake Configuration Now - -### Step 1: Test it -```bash -cd /home/pan/dev/config/dot/nix/nixos -nix flake check --impure -sudo nixos-rebuild build --flake .#nix --impure -``` - -### Step 2: If successful, apply it -```bash -sudo nixos-rebuild switch --flake .#nix --impure -``` - -### Step 3: Verify -```bash -nixos-version -nix flake metadata /home/pan/dev/config/dot/nix/nixos -``` - -## What Changes? - -- ✅ Same packages, just from nixos-unstable (usually newer) -- ✅ Same home-manager config (all your dotfiles stay) -- ✅ Same NixOS-WSL functionality -- ✅ Exact versions locked in flake.lock -- ✅ Easy to rollback (NixOS generations) - -## Daily Usage - -```bash -# Make config changes -vim /home/pan/dev/config/dot/nix/nixos/home.nix - -# Apply -sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure - -# Update packages (weekly/monthly) -cd /home/pan/dev/config/dot/nix/nixos -nix flake update -sudo nixos-rebuild switch --flake .#nix --impure - -# Rollback if needed -sudo nixos-rebuild switch --rollback -``` - -## Create Convenience Alias - -Add to your `~/.zshrc` or shell config: - -```bash -# Quick rebuild -alias nr='sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix --impure' - -# Update and rebuild -alias nu='cd /home/pan/dev/config/dot/nix/nixos && nix flake update && sudo nixos-rebuild switch --flake .#nix --impure' -``` - -Then just run `nr` to rebuild! - -## Need Help? - -- Read [MIGRATION.md](MIGRATION.md) for detailed migration guide -- Read [README.md](README.md) for full documentation -- Check [TODO.md](TODO.md) for known issues diff --git a/nix/nixos/README.md b/nix/nixos/README.md deleted file mode 100644 index c390e7d..0000000 --- a/nix/nixos/README.md +++ /dev/null @@ -1,282 +0,0 @@ -# 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 -``` - -### 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 -journalctl -u -``` - -### 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. diff --git a/nix/nixos/SUMMARY.md b/nix/nixos/SUMMARY.md deleted file mode 100644 index 3d3343b..0000000 --- a/nix/nixos/SUMMARY.md +++ /dev/null @@ -1,180 +0,0 @@ -# NixOS Configuration - Implementation Summary - -This document summarizes the NixOS configuration that was created based on the migration plan. - -## What Was Created - -### Directory Structure - -``` -nixos/ -├── flake.nix # NixOS flake (no nix-darwin) -├── flake.lock # Flake lockfile (auto-generated) -├── configuration.nix # System-level configuration -├── hardware-configuration.nix # Hardware template (MUST be replaced) -├── home.nix # Home Manager integration -├── modules/ # User-level configurations -│ ├── sh.nix # Shell (Zsh, Prezto, fzf, zoxide) -│ ├── tmux.nix # Tmux (WSL paths removed) -│ ├── git.nix # Git, Lazygit, Jujutsu -│ ├── nvim.nix # Neovim with 40+ plugins -│ ├── dev.nix # Dev tools (direnv, visidata) -│ └── task.nix # Taskwarrior, Timewarrior -├── README.md # Installation and usage guide -├── TODO.md # Remaining tasks and issues -└── SUMMARY.md # This file -``` - -## Key Changes from Original Configuration - -### ✅ Removed -- **nix-darwin** input and outputs -- **macOS/Darwin** conditionals (lines 54-58 in sh.nix) -- **WSL** hard-coded paths (lines 31-32 in tmux.nix) -- **Windows** checks (lines 115-117 in sh.nix) - -### ✅ Added -- **System-level configuration** (configuration.nix) - - Boot loader setup (systemd-boot) - - Networking with NetworkManager - - User account definition - - System timezone and locale - - Nix flakes enabled - -- **Hardware configuration template** (hardware-configuration.nix) - - Placeholder for NixOS-generated config - - Must be replaced during installation - -### ✅ Modified -- **Home Manager integration** - - Now runs as NixOS module (not standalone) - - useGlobalPkgs enabled - - Removed allowUnfree (handled at system level) - -- **Shell configuration** (modules/sh.nix) - - Removed all platform-specific conditionals - - Clean Linux-only configuration - - Added `profileExtra` for .profile sourcing - -- **Tmux configuration** (modules/tmux.nix) - - Commented out note keybindings (C-n, C-p) - - Paths need to be updated for NixOS environment - -- **Development tools** (modules/dev.nix) - - Custom packages commented out: - - claude-code - - opencode - - gemini-cli - - TODO notes added for integration - -## Validation Status - -✅ Flake syntax is valid -✅ Configuration evaluates successfully -✅ All module imports resolve correctly -✅ No blocking errors found - -⚠️ Requires `--impure` flag due to NIX_LD settings - -## What Needs to Be Done Before Use - -### 🔴 Critical (Must Do) -1. **Replace hardware-configuration.nix** - ```bash - sudo nixos-generate-config --show-hardware-config > nixos/hardware-configuration.nix - ``` - -2. **Update hostname** in configuration.nix - - Currently set to: "nixos" - - Change to your actual hostname - -3. **Verify boot loader** choice in configuration.nix - - UEFI: systemd-boot (currently enabled) - - BIOS: GRUB (commented out) - -### 🟡 Important (Should Do) -1. **Verify timezone** in configuration.nix - - Currently: "Europe/Berlin" - -2. **Check locale settings** in configuration.nix - - Currently: en_US.UTF-8 / de_DE.UTF-8 - -3. **Verify nvim lua files** exist at: - - `/home/pan/dev/config/dot/nvim/base.lua` - - `/home/pan/dev/config/dot/nvim/keymaps.lua` - - `/home/pan/dev/config/dot/nvim/plugins.lua` - - `/home/pan/dev/config/dot/nvim/filetype.lua` - -### 🟢 Optional (Nice to Have) -1. **Update tmux note paths** in modules/tmux.nix (C-n, C-p keybindings) -2. **Add custom packages** (claude-code, opencode, gemini-cli) -3. **Review and customize** any other settings - -## How to Apply - -### Test Build (Recommended First) -```bash -cd /home/pan/dev/config/dot/nix/nixos -sudo nixos-rebuild build --flake .#nixos --impure -``` - -### Apply Configuration -```bash -cd /home/pan/dev/config/dot/nix/nixos -sudo nixos-rebuild switch --flake .#nixos --impure -``` - -### Update Packages -```bash -nix flake update -sudo nixos-rebuild switch --flake .#nixos --impure -``` - -## Verification Checklist - -After applying the configuration, verify: - -- [ ] System boots successfully -- [ ] User 'pan' can login -- [ ] Zsh loads with Prezto theme -- [ ] fzf keybindings work (Ctrl+R) -- [ ] zoxide works (`cd` command) -- [ ] Tmux starts without errors -- [ ] Neovim opens with all plugins -- [ ] Git config shows correct user -- [ ] Lazygit and Jujutsu work -- [ ] Taskwarrior shows version 3.x -- [ ] Direnv loads .envrc files - -## Files Preserved - -The original Home Manager configuration remains untouched: -- `/home/pan/dev/config/dot/nix/flake.nix` -- `/home/pan/dev/config/dot/nix/common.nix` -- `/home/pan/dev/config/dot/nix/user/*` - -You can continue using the Ubuntu setup alongside this NixOS configuration. - -## Documentation - -- **README.md**: Complete installation and usage guide -- **TODO.md**: Detailed list of remaining tasks and known issues -- **SUMMARY.md**: This file - quick overview and status - -## Support - -For issues or questions: -1. Check TODO.md for known issues -2. Review README.md for troubleshooting -3. Consult NixOS manual: https://nixos.org/manual/nixos/stable/ - -## Next Steps - -1. ✅ Configuration created successfully -2. ⏳ Replace hardware-configuration.nix -3. ⏳ Update hostname and timezone -4. ⏳ Test build configuration -5. ⏳ Apply configuration -6. ⏳ Verify all components work - -Good luck with your NixOS migration! 🚀 diff --git a/nix/nixos/TODO.md b/nix/nixos/TODO.md deleted file mode 100644 index c56422e..0000000 --- a/nix/nixos/TODO.md +++ /dev/null @@ -1,173 +0,0 @@ -# TODO - NixOS Configuration - -This file tracks remaining tasks and known issues for the NixOS configuration. - -## High Priority - -### Hardware Configuration -- [ ] Replace `hardware-configuration.nix` with actual generated configuration - - Run `sudo nixos-generate-config --show-hardware-config > hardware-configuration.nix` - - Verify file systems are correctly configured - - Verify boot partition is correct - - Adjust CPU microcode (Intel vs AMD) - -### System Settings -- [ ] Set correct hostname in `configuration.nix` -- [ ] Verify timezone setting (currently: Europe/Berlin) -- [ ] Verify locale settings (currently: en_US.UTF-8 / de_DE.UTF-8) -- [ ] Choose boot loader (systemd-boot vs GRUB) - -## Medium Priority - -### Custom Packages - -The following packages need to be integrated or replaced: - -- [ ] **claude-code** - - Check if available in nixpkgs - - If custom: create derivation in `packages/claude-code.nix` - - Or use alternative package manager (npm, pip, cargo) - -- [ ] **opencode** - - Check if available in nixpkgs - - If custom: create derivation in `packages/opencode.nix` - - Or use alternative package manager - -- [ ] **gemini-cli** - - Check if available in nixpkgs - - If custom: create derivation in `packages/gemini-cli.nix` - - Or use alternative package manager - -### Tmux Configuration - -- [ ] Update note popup keybindings (C-n, C-p) with correct NixOS paths - - Current: Commented out (had WSL hard-coded paths) - - Action: Decide on note location and update paths - - Example: `~/Documents/notes/Work/quick_notes.md` - -- [ ] Verify `~/bin/tmuxp_selector.sh` script exists - - Used by `C-s` keybinding - - May need to be created or path adjusted - -## Low Priority - -### Shell Configuration - -- [ ] Consider adding additional shell aliases -- [ ] Review if any macOS-specific tools need Linux alternatives -- [ ] Consider adding dircolors configuration - -### Documentation - -- [ ] Add screenshots of tmux setup -- [ ] Document custom Neovim configuration (lua files) -- [ ] Create troubleshooting guide for common issues - -### Optimizations - -- [ ] Consider using `programs.zsh.shellInit` vs `initContent` -- [ ] Review if `nix-ld` is actually needed (check use cases) -- [ ] Consider splitting large modules into smaller files - -## Features Not Yet Ported - -These were not in the original Home Manager config but might be useful on NixOS: - -- [ ] Desktop environment / Window manager -- [ ] Display manager (GDM, SDDM, LightDM) -- [ ] Sound configuration (PipeWire/PulseAudio) -- [ ] Printing support -- [ ] Bluetooth support -- [ ] Docker / Podman -- [ ] Virtualization (QEMU/KVM) - -## Known Issues - -### Nvim Configuration Files - -The nvim configuration references lua files from the parent directory: -```nix -initLua = builtins.concatStringsSep "\n" [ - (lib.strings.fileContents ../../../nvim/base.lua) - (lib.strings.fileContents ../../../nvim/keymaps.lua) - (lib.strings.fileContents ../../../nvim/plugins.lua) - (lib.strings.fileContents ../../../nvim/filetype.lua) -]; -``` - -**Status**: Should work if nvim/ directory exists at `/home/pan/dev/config/dot/nvim/` - -**Action**: Verify these files exist or adjust paths - -### Profile Loading - -The shell configuration includes: -```nix -profileExtra = '' - source $HOME/.profile -''; -``` - -**Status**: Will fail silently if `~/.profile` doesn't exist - -**Action**: Either create `~/.profile` or remove this line if not needed - -## Testing Checklist - -Before considering this configuration complete: - -- [ ] System boots successfully -- [ ] User can login as `pan` -- [ ] Zsh loads with Prezto -- [ ] Tmux starts without errors -- [ ] Neovim opens and plugins load -- [ ] LSP servers work in Neovim -- [ ] Git commands work with correct identity -- [ ] Lazygit opens and works -- [ ] Jujutsu commands work -- [ ] Taskwarrior shows tasks -- [ ] Direnv loads `.envrc` files -- [ ] fzf keybindings work (Ctrl+R) -- [ ] zoxide navigation works -- [ ] All shell aliases work - -## Future Enhancements - -- [ ] Add backup/restore scripts -- [ ] Create CI/CD for testing configuration -- [ ] Add secrets management (agenix or sops-nix) -- [ ] Consider using flake-parts for better organization -- [ ] Add system monitoring tools -- [ ] Configure automatic updates -- [ ] Add custom shell functions -- [ ] Integrate with cloud sync for dotfiles - -## Notes - -### Differences from Ubuntu Setup - -1. **No macOS support**: All Darwin-specific code removed -2. **No WSL support**: WSL-specific paths and checks removed -3. **System-level user**: User defined in NixOS config, not standalone -4. **Integrated Home Manager**: HM runs as NixOS module, not standalone - -### Migration Path - -If migrating from existing Ubuntu setup: - -1. Backup current configuration -2. Install NixOS (keep Ubuntu if dual-boot) -3. Apply this configuration -4. Test all workflows -5. Import personal data (tasks, notes, etc.) -6. Verify custom packages availability - -## Questions to Resolve - -- [ ] What are the custom packages used for? -- [ ] Are there any private/work-specific configurations to add? -- [ ] Should we add any of the "Features Not Yet Ported"? -- [ ] Is GPU acceleration needed (NVIDIA, AMD)? -- [ ] Are there any cron jobs or systemd timers to configure? -- [ ] Should we enable fish or keep only zsh? -- [ ] Do we need any container tools (Docker, Podman)? diff --git a/nix/nixos/configuration.nix b/nix/nixos/configuration.nix deleted file mode 100644 index a84c00f..0000000 --- a/nix/nixos/configuration.nix +++ /dev/null @@ -1,71 +0,0 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page, on -# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). - -# NixOS-WSL specific options are documented on the NixOS-WSL repository: -# https://github.com/nix-community/NixOS-WSL - -{ config, lib, pkgs, ... }: - -{ - wsl.enable = true; - wsl.defaultUser = "pan"; - wsl.interop.register = true; - - # This value determines the NixOS release from which the default - # settings for stateful data, like file locations and database versions - # on your system were taken. It's perfectly fine and recommended to leave - # this value at the release version of the first install of this system. - # Before changing this value read the documentation for this option - # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = "25.05"; # Did you read the comment? - - networking.hostName = "nix"; - #networking.networkmanager.enable = true; - - time.timeZone = "Europe/Berlin"; # Adjust to your timezone - i18n.defaultLocale = "en_US.UTF-8"; - - i18n.extraLocaleSettings = { - LC_ADDRESS = "de_DE.UTF-8"; - LC_IDENTIFICATION = "de_DE.UTF-8"; - LC_MEASUREMENT = "de_DE.UTF-8"; - LC_MONETARY = "de_DE.UTF-8"; - LC_NAME = "de_DE.UTF-8"; - LC_NUMERIC = "de_DE.UTF-8"; - LC_PAPER = "de_DE.UTF-8"; - LC_TELEPHONE = "de_DE.UTF-8"; - LC_TIME = "de_DE.UTF-8"; - }; - - users.users.pan = { - isNormalUser = true; - extraGroups = [ "networkmanager" "wheel" ]; - uid = 1000; - shell = pkgs.zsh; - }; - - programs.zsh.enable = true; - - nix.settings = { - experimental-features = [ "nix-command" "flakes" ]; - }; - - nixpkgs.config.allowUnfree = true; - - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 7d"; - }; - - # Automatic Store Optimization - nix.settings.auto-optimise-store = true; - - environment.systemPackages = with pkgs; [ - git - wget - curl - vim - ]; -} diff --git a/nix/nixos/configuration.nix.old b/nix/nixos/configuration.nix.old deleted file mode 100644 index b419d6c..0000000 --- a/nix/nixos/configuration.nix.old +++ /dev/null @@ -1,64 +0,0 @@ -# NixOS-WSL Configuration -# This works with the flake.nix in this directory -# -# Apply with: -# sudo nixos-rebuild switch --flake /home/pan/dev/config/dot/nix/nixos#nix - -{ config, lib, pkgs, ... }: - -{ - # WSL-specific settings - wsl.enable = true; - wsl.defaultUser = "pan"; - wsl.interop.register = true; - - # Networking - networking.hostName = "nix"; - networking.networkmanager.enable = true; - - # Time zone and locale - time.timeZone = "Europe/Berlin"; - i18n.defaultLocale = "en_US.UTF-8"; - - i18n.extraLocaleSettings = { - LC_ADDRESS = "de_DE.UTF-8"; - LC_IDENTIFICATION = "de_DE.UTF-8"; - LC_MEASUREMENT = "de_DE.UTF-8"; - LC_MONETARY = "de_DE.UTF-8"; - LC_NAME = "de_DE.UTF-8"; - LC_NUMERIC = "de_DE.UTF-8"; - LC_PAPER = "de_DE.UTF-8"; - LC_TELEPHONE = "de_DE.UTF-8"; - LC_TIME = "de_DE.UTF-8"; - }; - - # User account - users.users.pan = { - isNormalUser = true; - description = "Martin Pander"; - extraGroups = [ "networkmanager" "wheel" ]; - shell = pkgs.zsh; - }; - - # Enable Zsh system-wide - programs.zsh.enable = true; - - # Nix settings - nix.settings = { - experimental-features = [ "nix-command" "flakes" ]; - }; - - # Allow unfree packages - nixpkgs.config.allowUnfree = true; - - # Minimal system packages (most go in Home Manager) - environment.systemPackages = with pkgs; [ - vim - git - wget - curl - ]; - - # NixOS version (don't change unless you know what you're doing) - system.stateVersion = "25.05"; -} diff --git a/nix/nixos/flake.lock b/nix/nixos/flake.lock deleted file mode 100644 index f0f3c02..0000000 --- a/nix/nixos/flake.lock +++ /dev/null @@ -1,86 +0,0 @@ -{ - "nodes": { - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1767039857, - "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1770318660, - "narHash": "sha256-yFVde8QZK7Dc0Xa8eQDsmxLX4NJNfL1NKfctSyiQgMY=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "471e6a065f9efed51488d7c51a9abbd387df91b8", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, - "nixos-wsl": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1769217863, - "narHash": "sha256-RY9kJDXD6+2Td/59LkZ0PFSereCXHdBX9wIkbYjRKCY=", - "owner": "nix-community", - "repo": "NixOS-WSL", - "rev": "38a5250e57f583662eac3b944830e4b9e169e965", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "NixOS-WSL", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1770197578, - "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "home-manager": "home-manager", - "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/nix/nixos/flake.nix b/nix/nixos/flake.nix deleted file mode 100644 index 84cea8f..0000000 --- a/nix/nixos/flake.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - description = "NixOS-WSL configuration for pan"; - - inputs = { - # Use nixos-unstable for latest packages - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - - # NixOS-WSL for WSL-specific functionality - nixos-wsl = { - url = "github:nix-community/NixOS-WSL"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - # Home Manager for user configuration - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; - - outputs = { self, nixpkgs, nixos-wsl, home-manager, ... }: - let - system = "x86_64-linux"; - in - { - nixosConfigurations = { - # Use your hostname: "nix" - nix = nixpkgs.lib.nixosSystem { - inherit system; - modules = [ - # NixOS-WSL module - nixos-wsl.nixosModules.wsl - - # System configuration - ./configuration.nix - - # Home Manager as NixOS module - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.pan = import ./home.nix; - } - ]; - }; - }; - }; -} diff --git a/nix/nixos/home.nix b/nix/nixos/home.nix deleted file mode 100644 index 7cacfce..0000000 --- a/nix/nixos/home.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./modules/sh.nix - ./modules/tmux.nix - ./modules/git.nix - ./modules/dev.nix - ./modules/nvim.nix - ./modules/task.nix - ]; - - # User details - home.username = "pan"; - home.homeDirectory = "/home/pan"; - - # Git and Jujutsu user configuration - programs.git.settings.user = { - name = "Martin Pander"; - email = "martin.pander@knowtion.de"; - }; - - programs.jujutsu.settings.user = { - name = "Martin Pander"; - email = "martin.pander@knowtion.de"; - }; - - # Home packages - home.packages = with pkgs; [ - nil # Nix LSP - nerd-fonts.fira-code - nix-ld - - # Language servers - yaml-language-server - marksman - dockerfile-language-server - ]; - - # NIX_LD settings for running non-Nix binaries - home.sessionVariables = { - NIX_LD_LIBRARY_PATH = with pkgs; lib.makeLibraryPath [ - stdenv.cc.cc - zlib - ]; - NIX_LD = lib.fileContents "${pkgs.stdenv.cc}/nix-support/dynamic-linker"; - }; - - # Silence news display - news.display = "silent"; - - # Enable Home Manager self-management - programs.home-manager.enable = true; - - # This value determines the Home Manager release which the configuration is - # compatible with. This helps avoid breakage when a new Home Manager release - # introduces backwards incompatible changes. - home.stateVersion = "25.05"; -} diff --git a/nix/nixos/modules/dev.nix b/nix/nixos/modules/dev.nix deleted file mode 100644 index b3439fd..0000000 --- a/nix/nixos/modules/dev.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.direnv = { - enable = true; - enableZshIntegration = true; - nix-direnv.enable = true; - }; - - home.packages = with pkgs; [ - visidata - bubblewrap - - claude-code - opencode - gemini-cli - ]; -} diff --git a/nix/nixos/modules/git.nix b/nix/nixos/modules/git.nix deleted file mode 100644 index b0a7763..0000000 --- a/nix/nixos/modules/git.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.git = { - enable = true; - settings = { - alias = { - st = "status"; - ci = "commit"; - co = "checkout"; - br = "branch"; - pl = "pull"; - ps = "push"; - sw = "switch"; - mno =" merge --no-ff"; - lg = "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"; - cleanup = "!git fetch --prune && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D"; - }; - - column.ui = "auto"; - branch.sort = "-committerdate"; - tag.sort = "version:refname"; - diff = { - algorithm = "histogram"; - colorMoved = "plain"; - mnemonicPrefix = "true"; - renames = "true"; - }; - pull.rebase = "true"; - push = { - default = "simple"; - autoSetupRemote = "true"; - followTags = "true"; - }; - fetch = { - prune = "true"; - pruneTags = "true"; - all = "true"; - }; - help.autocorrect = "prompt"; - commit.verbose = "true"; - rerere = { - enabled = "true"; - autoupdate = "true"; - }; - rebase = { - autoSquas = "true"; - autoStash = "true"; - updateRefs = "true"; - }; - merge.conflictstyle = "zdiff3"; - core.editor = "nvim"; - init.defaultBranch = "main"; - }; - - ignores = [ - ".direnv/" - ".envrc" - ]; - }; - - programs.difftastic = { - enable = true; - git.enable = true; - }; - - programs.lazygit = { - enable = true; - settings = { - theme.lightTheme = "true"; - git = { - log = { - format = "%C(yellow)%h%Creset %C(bold blue)<%an>%Creset %s %Cgreen(%cr)%Creset"; - graph = "true"; - }; - }; - }; - }; - - programs.jujutsu = { - enable = true; - settings = { - aliases = { - tug = ["bookmark" "move" "--from" "heads(::@- & bookmarks())" "--to" "@-"]; - }; - }; - }; -} diff --git a/nix/nixos/modules/nvim.nix b/nix/nixos/modules/nvim.nix deleted file mode 100644 index e26ced5..0000000 --- a/nix/nixos/modules/nvim.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.neovim = { - enable = true; - - defaultEditor = true; - vimAlias = true; - - plugins = with pkgs.vimPlugins; [ - vim-repeat - vim-surround - ts-comments-nvim - vim-fugitive - gitsigns-nvim - nvim-tree-lua - targets-vim - mini-pairs - mini-align - mini-bracketed - mini-splitjoin - mini-move - mini-ai - mini-icons - flash-nvim - trouble-nvim - conform-nvim - nvim-lint - promise-async - nvim-ufo - vim-windowswap - plenary-nvim - telescope-nvim - telescope-fzf-native-nvim - telescope-ui-select-nvim - yanky-nvim - lualine-nvim - undotree - luasnip - nvim-cmp - cmp_luasnip - cmp-buffer - cmp-path - cmp-cmdline - cmp-nvim-lsp - cmp-nvim-lsp-signature-help - cmp_yanky - cmp-git - nvim-lspconfig - lspkind-nvim - copilot-lua - copilot-cmp - CopilotChat-nvim - bullets-vim - nvim-dap - nvim-nio - nvim-dap-ui - nvim-dap-virtual-text - nvim-dap-go - nvim-dap-python - nvim-dap-lldb - todo-comments-nvim - vim-markdown - zen-mode-nvim - plantuml-syntax - obsidian-nvim - render-markdown-nvim - image-nvim - img-clip-nvim - vim-nix - (nvim-treesitter.withPlugins (p: [ p.awk p.bash p.c p.c_sharp p.cpp p.css p.diff p.dockerfile p.doxygen p.git_config p.gitcommit p.go p.gomod p.gosum p.gotmpl p.helm p.haskell p.html p.http p.java p.javascript p.json p.latex p.lua p.markdown p.markdown_inline p.matlab p.nix p.printf p.python p.regex p.rust p.sql p.strace p.supercollider p.svelte p.swift p.terraform p.tmux p.toml p.typescript p.vim p.xml p.yaml p.zig ])) - ]; - - initLua = builtins.concatStringsSep "\n" [ - (lib.strings.fileContents ../../../nvim/base.lua) - (lib.strings.fileContents ../../../nvim/keymaps.lua) - (lib.strings.fileContents ../../../nvim/plugins.lua) - (lib.strings.fileContents ../../../nvim/filetype.lua) - ]; - }; - - home.packages = with pkgs; [ - nodejs-slim - marksman - ]; -} diff --git a/nix/nixos/modules/sh.nix b/nix/nixos/modules/sh.nix deleted file mode 100644 index b87597c..0000000 --- a/nix/nixos/modules/sh.nix +++ /dev/null @@ -1,99 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.zsh = { - enable = true; - enableCompletion = true; - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - - history.size = 500000; - - prezto = { - enable = true; - caseSensitive = true; - color = true; - editor = { - dotExpansion = true; - keymap = "vi"; - }; - pmodules = [ - "environment" - "terminal" - "editor" - "history" - "directory" - "spectrum" - "utility" - "completion" - "syntax-highlighting" - "history-substring-search" - "prompt" - "git" - ]; - prompt.theme = "minimal"; - syntaxHighlighting.highlighters = [ - "main" - "brackets" - "pattern" - "line" - "cursor" - "root" - ]; - tmux = { - autoStartLocal = true; - itermIntegration = true; - }; - }; - - initContent = '' - HISTCONTROL='erasedups:ignoreboth' - HISTIGNORE='&:[ ]*:exit:ls:bg:fg:history:clear' - unsetopt beep - ''; - - profileExtra = '' - source $HOME/.profile - ''; - }; - - programs.fzf = { - enable = true; - enableZshIntegration = true; - }; - - programs.lsd = { - enable = true; - enableZshIntegration = true; - }; - - programs.zoxide = { - enable = true; - enableZshIntegration = true; - options = [ - "--cmd cd" - ]; - }; - - programs.bat.enable = true; - programs.ripgrep.enable = true; - programs.btop.enable = true; - programs.ranger.enable = true; - - home.packages = with pkgs; [ - fd - dust - glow - ripgrep-all - viddy - duf - ]; - - home.sessionVariables = { - BAT_THEME = "Coldark-Cold"; - }; - - home.shellAliases = { - lst = "lsd --tree"; - }; -} diff --git a/nix/nixos/modules/task.nix b/nix/nixos/modules/task.nix deleted file mode 100644 index e0bcab0..0000000 --- a/nix/nixos/modules/task.nix +++ /dev/null @@ -1,75 +0,0 @@ -{config, pkgs, lib, ...}: - -{ - programs.taskwarrior = { - enable = true; - colorTheme = "light-256"; - package = pkgs.taskwarrior3; - config = { - weekstart = "monday"; - - uda.tasksquire.tags.default="code,comm,cust,del,doc,mngmnt,ops,rsrch,rvw,track"; - - uda.parenttask.type="string"; - uda.parenttask.label="Parent"; - - uda.energy.type="string"; - uda.energy.label="Energy"; - uda.energy.values="h,m,l"; - uda.energy.default="m"; - - uda.priority.values = "H,M,,L"; - urgency.uda.priority.L.coefficient = -0.5; - urgency.user.tag.deferred.coefficient = -15.0; - urgency.user.tag.cust.coefficient = 5.0; - urgency.user.tag.fixed.coefficient = -100.0; - - report.next.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; - report.next.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; - report.next.filter="status:pending -WAITING -deferred -track"; - - report.time.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; - report.time.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; - report.time.filter="status:pending -WAITING -deferred +fixed"; - - report.deferred.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; - report.deferred.context="1"; - report.deferred.description="Deferred and waiting tasks"; - report.deferred.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; - report.deferred.filter="status:pending +deferred"; - report.deferred.sort="urgency-"; - - report.low.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; - report.low.context="1"; - report.low.description="Low energy tasks"; - report.low.filter="status:pending -WAITING -deferred"; - report.low.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; - report.low.sort="energy+,urgency-"; - - context.today.read = "(prio:H or +next)"; - context.today.write = "prio:H +next"; - context.deferred.read = "+deferred"; - context.deferred.write = "+deferred"; - context.customer.read = "+cust"; - context.customer.write = "+cust"; - context.low_energy.read = "+low"; - context.low_energy.write = "+low"; - - uda.taskwarrior-tui.task-report.show-info = false; - uda.taskwarrior-tui.selection.reverse = "yes"; - }; - }; - - home.packages = with pkgs; [ - taskwarrior-tui - timewarrior - ]; - - home.shellAliases = lib.mkMerge [ { - t = "task"; - tt = "taskwarrior-tui"; - tw = "timew"; - tws = "timew summary :ids"; - } - ]; -} diff --git a/nix/nixos/modules/tmux.nix b/nix/nixos/modules/tmux.nix deleted file mode 100644 index 81774b0..0000000 --- a/nix/nixos/modules/tmux.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.tmux = { - enable = true; - shortcut = "a"; - mouse = true; - keyMode = "vi"; - escapeTime = 0; - terminal = "screen-256color"; - tmuxp.enable = true; - extraConfig = '' - set -g display-time 1500 - - unbind S - bind S command-prompt "switch -t %1" - - bind-key -n M-K switch-client -p - bind-key -n M-J switch-client -n - - bind-key -n M-L next-window - bind-key -n M-H previous-window - - bind '"' split-window -c "#{pane_current_path}" - bind % split-window -h -c "#{pane_current_path}" - bind c new-window -a -c "#{pane_current_path}" - - bind C-s display-popup -E "zsh ~/bin/tmuxp_selector.sh" - bind C-g display-popup -E -d "#{pane_current_path}" -xC -yC -w 95% -h 95% "lazygit" - bind C-t display-popup -E -xC -yC -w 95% -h 95% "tasksquire" - # Note: The following keybindings had hard-coded WSL paths that were removed. - # Adjust the paths below to match your NixOS environment: - # bind C-n display-popup -E -xC -yC -w 95% -h 95% -d "~/Documents/notes/Work/" "vim quick_notes.md" - # bind C-p display-popup -E -xC -yC -w 95% -h 95% -d "~/Documents/notes/Work/development/" "vim mbpr.md" - - ####################################### - # status line - ####################################### - set -g status-justify centre - - set -g status-left "#[bg=#808080,fg=#ffffff,bold] #S #[default]#[bg=#BCBCBC] #{-30:pane_title} " - set -g status-left-length 40 - - set -g status-right "#[bg=#BCBCBC] %H:%M #[bg=#808080,fg=#ffffff] %d.%m.%y " - - # setw -g window-status-format " #W#F " - # setw -g window-status-current-format " #W#F " - setw -g window-status-format " #W " - setw -g window-status-current-format " #W " - setw -g window-status-separator "" - - ####################################### - # colors, taken from vim-lucius - ####################################### - set -g status-style "bg=#DADADA,fg=#000000" - - setw -g window-status-style "bg=#BCBCBC,fg=#000000" - setw -g window-status-current-style "bg=#808080,fg=#ffffff" - - setw -g window-status-activity-style "bg=#AFD7AF,fg=#000000" - setw -g window-status-bell-style "bg=#AFD7AF,fg=#000000" - #setw -g window-status-content-style "bg=#AFD7AF,fg=#000000" - - set -g pane-active-border-style "bg=#eeeeee,fg=#006699" - set -g pane-border-style "bg=#eeeeee,fg=#999999" - ''; - }; - - home.shellAliases = { - "o" = "tmuxp"; - "ol" = "tmuxp load"; - }; -} diff --git a/nix/nixos/result b/nix/nixos/result deleted file mode 120000 index 224a89b..0000000 --- a/nix/nixos/result +++ /dev/null @@ -1 +0,0 @@ -/nix/store/sdjnb1hp96jbv904y92vnil7cjnc8x78-nixos-system-nix-26.05.20260204.00c21e4 \ No newline at end of file diff --git a/nix/user/dev.nix b/nix/user/dev.nix deleted file mode 100644 index 1434c25..0000000 --- a/nix/user/dev.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.direnv = { - enable = true; - enableZshIntegration = true; - nix-direnv.enable = true; - }; - - home.packages = with pkgs; [ - visidata - claude-code - opencode - gemini-cli - bubblewrap - # crush - ]; -} diff --git a/nix/user/git.nix b/nix/user/git.nix deleted file mode 100644 index b0a7763..0000000 --- a/nix/user/git.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.git = { - enable = true; - settings = { - alias = { - st = "status"; - ci = "commit"; - co = "checkout"; - br = "branch"; - pl = "pull"; - ps = "push"; - sw = "switch"; - mno =" merge --no-ff"; - lg = "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"; - cleanup = "!git fetch --prune && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D"; - }; - - column.ui = "auto"; - branch.sort = "-committerdate"; - tag.sort = "version:refname"; - diff = { - algorithm = "histogram"; - colorMoved = "plain"; - mnemonicPrefix = "true"; - renames = "true"; - }; - pull.rebase = "true"; - push = { - default = "simple"; - autoSetupRemote = "true"; - followTags = "true"; - }; - fetch = { - prune = "true"; - pruneTags = "true"; - all = "true"; - }; - help.autocorrect = "prompt"; - commit.verbose = "true"; - rerere = { - enabled = "true"; - autoupdate = "true"; - }; - rebase = { - autoSquas = "true"; - autoStash = "true"; - updateRefs = "true"; - }; - merge.conflictstyle = "zdiff3"; - core.editor = "nvim"; - init.defaultBranch = "main"; - }; - - ignores = [ - ".direnv/" - ".envrc" - ]; - }; - - programs.difftastic = { - enable = true; - git.enable = true; - }; - - programs.lazygit = { - enable = true; - settings = { - theme.lightTheme = "true"; - git = { - log = { - format = "%C(yellow)%h%Creset %C(bold blue)<%an>%Creset %s %Cgreen(%cr)%Creset"; - graph = "true"; - }; - }; - }; - }; - - programs.jujutsu = { - enable = true; - settings = { - aliases = { - tug = ["bookmark" "move" "--from" "heads(::@- & bookmarks())" "--to" "@-"]; - }; - }; - }; -} diff --git a/nix/user/nvim.nix b/nix/user/nvim.nix deleted file mode 100644 index 8c34ac5..0000000 --- a/nix/user/nvim.nix +++ /dev/null @@ -1,91 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.neovim = { - enable = true; - - defaultEditor = true; - vimAlias = true; - - plugins = with pkgs.vimPlugins; [ - vim-repeat - vim-surround - ts-comments-nvim - vim-fugitive - gitsigns-nvim - nvim-tree-lua - targets-vim - mini-pairs - mini-align - mini-bracketed - mini-splitjoin - mini-move - mini-ai - mini-icons - flash-nvim - trouble-nvim - conform-nvim - nvim-lint - promise-async - nvim-ufo - vim-windowswap - plenary-nvim - telescope-nvim - telescope-fzf-native-nvim - telescope-ui-select-nvim - yanky-nvim - lualine-nvim - undotree - luasnip - nvim-cmp - cmp_luasnip - cmp-buffer - cmp-path - cmp-cmdline - cmp-nvim-lsp - cmp-nvim-lsp-signature-help - cmp_yanky - cmp-git - nvim-lspconfig - lspkind-nvim - copilot-lua - copilot-cmp - CopilotChat-nvim - bullets-vim - nvim-dap - nvim-nio - nvim-dap-ui - nvim-dap-virtual-text - nvim-dap-go - nvim-dap-python - nvim-dap-lldb - todo-comments-nvim - vim-markdown - zen-mode-nvim - plantuml-syntax - obsidian-nvim - render-markdown-nvim - image-nvim - img-clip-nvim - vim-nix - (nvim-treesitter.withPlugins (p: [ p.awk p.bash p.c p.c_sharp p.cpp p.css p.diff p.dockerfile p.doxygen p.git_config p.gitcommit p.go p.gomod p.gosum p.gotmpl p.helm p.haskell p.html p.http p.java p.javascript p.json p.latex p.lua p.markdown p.markdown_inline p.matlab p.nix p.printf p.python p.regex p.rust p.sql p.strace p.supercollider p.svelte p.swift p.terraform p.tmux p.toml p.typescript p.vim p.xml p.yaml p.zig ])) - ]; - - # extraConfig = '' - # set t_vb= - # ''; - - initLua = builtins.concatStringsSep "\n" [ - (lib.strings.fileContents ../../nvim/base.lua) - (lib.strings.fileContents ../../nvim/keymaps.lua) - (lib.strings.fileContents ../../nvim/plugins.lua) - (lib.strings.fileContents ../../nvim/filetype.lua) - ]; - }; - - home.packages = with pkgs; [ - nodejs-slim - marksman - ]; -} - diff --git a/nix/user/profiles/martin.nix b/nix/user/profiles/martin.nix deleted file mode 100644 index 4f9fc00..0000000 --- a/nix/user/profiles/martin.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.username = "martin"; - home.homeDirectory = "/Users/martin"; - - home.stateVersion = "24.05"; # Please read the comment before changing. - - programs.git = { - userName = "Martin"; - userEmail = "git@pander-on.de"; - }; -} diff --git a/nix/user/profiles/moustachioedBook.nix b/nix/user/profiles/moustachioedBook.nix deleted file mode 100644 index 7266617..0000000 --- a/nix/user/profiles/moustachioedBook.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.username = "moustachioed"; - home.homeDirectory = "/Users/moustachioed"; - - home.stateVersion = "23.11"; # Please read the comment before changing. - - programs.git = { - userName = "Martin"; - userEmail = "git@pander-on.de"; - }; -} diff --git a/nix/user/profiles/work.nix b/nix/user/profiles/work.nix deleted file mode 100644 index 1e19b8e..0000000 --- a/nix/user/profiles/work.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.username = "pan"; - home.homeDirectory = "/home/pan"; - - home.stateVersion = "23.11"; # Please read the comment before changing. - - programs.git.settings.user = { - name = "Martin Pander"; - email = "martin.pander@knowtion.de"; - }; - - programs.jujutsu.settings.user = { - name = "Martin Pander"; - email = "martin.pander@knowtion.de"; - }; - - - home.packages = with pkgs; [ - yaml-language-server - marksman - dockerfile-language-server - ]; - - programs.zsh.profileExtra = '' - source $HOME/.profile - ''; - -} diff --git a/nix/user/sh.nix b/nix/user/sh.nix deleted file mode 100644 index 620b855..0000000 --- a/nix/user/sh.nix +++ /dev/null @@ -1,119 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.zsh = { - enable = true; - enableCompletion = true; - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - - history.size = 500000; - #history.path = "${config.xdg.dataHome}/zsh/history"; - prezto = { - enable = true; - caseSensitive = true; - color = true; - editor = { - dotExpansion = true; - keymap = "vi"; - }; - pmodules = [ - "environment" - "terminal" - "editor" - "history" - "directory" - "spectrum" - "utility" - "completion" - "syntax-highlighting" - "history-substring-search" - "prompt" - "git" - ]; - prompt.theme = "minimal"; - syntaxHighlighting.highlighters = [ - "main" - "brackets" - "pattern" - "line" - "cursor" - "root" - ]; - tmux = { - autoStartLocal = true; - itermIntegration = true; - }; - }; - - initContent = '' - HISTCONTROL='erasedups:ignoreboth' - HISTIGNORE='&:[ ]*:exit:ls:bg:fg:history:clear' - unsetopt beep - - if [[ "$(uname -s)" == "Darwin" ]]; then - export RUSTUP_HOME="$HOME/.rustup" - export CARGO_HOME="$HOME/.cargo" - [ -f "$CARGO_HOME/env" ] && . "$CARGO_HOME/env" - fi; - if [[ "$(uname -r)" == *Microsoft* ]]; then - if command -v tmuxp &> /dev/null && [ -z "$TMUX" ]; then - tmuxp load --yes misc - fi - fi; - ''; - }; - - programs.fzf = { - enable = true; - enableZshIntegration = true; - }; - - programs.lsd = { - enable = true; - enableZshIntegration = true; - }; - - programs.zoxide = { - enable = true; - enableZshIntegration = true; - options = [ - "--cmd cd" - ]; - }; - - programs.bat.enable = true; - programs.ripgrep.enable = true; - programs.btop.enable = true; - programs.ranger.enable = true; - - home.packages = with pkgs; [ - fd - dust - glow - ripgrep-all - viddy - duf - # (llm.withPlugins (ps: [ - # ps.llm-gemini - # ps.llm-claude - # ])) - ]; - - home.sessionVariables = lib.mkMerge [ { - BAT_THEME = "Coldark-Cold"; - } - ]; - - home.shellAliases = lib.mkMerge [ - { - lst = "lsd --tree"; - } - - # This is the correct way to use lib.mkIf within lib.mkMerge - # (lib.mkIf pkgs.stdenv.targetPlatform.isWindows { - (lib.mkIf (lib.strings.hasSuffix "windows" pkgs.system) { - open = "explorer.exe ."; - }) - ]; -} diff --git a/nix/user/task.nix b/nix/user/task.nix deleted file mode 100644 index e0bcab0..0000000 --- a/nix/user/task.nix +++ /dev/null @@ -1,75 +0,0 @@ -{config, pkgs, lib, ...}: - -{ - programs.taskwarrior = { - enable = true; - colorTheme = "light-256"; - package = pkgs.taskwarrior3; - config = { - weekstart = "monday"; - - uda.tasksquire.tags.default="code,comm,cust,del,doc,mngmnt,ops,rsrch,rvw,track"; - - uda.parenttask.type="string"; - uda.parenttask.label="Parent"; - - uda.energy.type="string"; - uda.energy.label="Energy"; - uda.energy.values="h,m,l"; - uda.energy.default="m"; - - uda.priority.values = "H,M,,L"; - urgency.uda.priority.L.coefficient = -0.5; - urgency.user.tag.deferred.coefficient = -15.0; - urgency.user.tag.cust.coefficient = 5.0; - urgency.user.tag.fixed.coefficient = -100.0; - - report.next.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; - report.next.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; - report.next.filter="status:pending -WAITING -deferred -track"; - - report.time.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; - report.time.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; - report.time.filter="status:pending -WAITING -deferred +fixed"; - - report.deferred.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; - report.deferred.context="1"; - report.deferred.description="Deferred and waiting tasks"; - report.deferred.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; - report.deferred.filter="status:pending +deferred"; - report.deferred.sort="urgency-"; - - report.low.columns="id,start.age,entry.age,depends,priority,energy,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; - report.low.context="1"; - report.low.description="Low energy tasks"; - report.low.filter="status:pending -WAITING -deferred"; - report.low.labels="ID,Active,Age,Deps,P,E,Project,Tag,Recur,S,Due,Until,Description,Urg"; - report.low.sort="energy+,urgency-"; - - context.today.read = "(prio:H or +next)"; - context.today.write = "prio:H +next"; - context.deferred.read = "+deferred"; - context.deferred.write = "+deferred"; - context.customer.read = "+cust"; - context.customer.write = "+cust"; - context.low_energy.read = "+low"; - context.low_energy.write = "+low"; - - uda.taskwarrior-tui.task-report.show-info = false; - uda.taskwarrior-tui.selection.reverse = "yes"; - }; - }; - - home.packages = with pkgs; [ - taskwarrior-tui - timewarrior - ]; - - home.shellAliases = lib.mkMerge [ { - t = "task"; - tt = "taskwarrior-tui"; - tw = "timew"; - tws = "timew summary :ids"; - } - ]; -} diff --git a/nix/user/task_home.nix b/nix/user/task_home.nix deleted file mode 100644 index d0e47b3..0000000 --- a/nix/user/task_home.nix +++ /dev/null @@ -1,37 +0,0 @@ -{config, pkgs, lib, ...}: - -{ - programs.taskwarrior = { - enable = true; - colorTheme = "light-256"; - package = pkgs.taskwarrior3; - config = { - weekstart = "monday"; - - uda.priority.values = "H,M,,L"; - urgency.uda.priority.L.coefficient = -0.5; - urgency.user.tag.deferred.coefficient = -15.0; - urgency.user.tag.cust.coefficient = 5.0; - - context.today.read = "-deferred and (prio:H or +next)"; - context.today.write = "prio:H or +next"; - context.deferred.read = "+deferred"; - context.deferred.write = "+deferred"; - context.low_energy.read = "+low"; - context.low_energy.write = "+low"; - - uda.taskwarrior-tui.task-report.show-info = false; - uda.taskwarrior-tui.selection.reverse = "yes"; - }; - }; - - home.packages = with pkgs; [ - taskwarrior-tui - ]; - - home.shellAliases = lib.mkMerge [ { - t = "task"; - tt = "taskwarrior-tui"; - } - ]; -} diff --git a/nix/user/tmux.nix b/nix/user/tmux.nix deleted file mode 100644 index 3d61f34..0000000 --- a/nix/user/tmux.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.tmux = { - enable = true; - shortcut = "a"; - mouse = true; - keyMode = "vi"; - escapeTime = 0; - terminal = "screen-256color"; - tmuxp.enable = true; - extraConfig = '' - set -g display-time 1500 - - unbind S - bind S command-prompt "switch -t %1" - - bind-key -n M-K switch-client -p - bind-key -n M-J switch-client -n - - bind-key -n M-L next-window - bind-key -n M-H previous-window - - bind '"' split-window -c "#{pane_current_path}" - bind % split-window -h -c "#{pane_current_path}" - bind c new-window -a -c "#{pane_current_path}" - - bind C-s display-popup -E "zsh ~/bin/tmuxp_selector.sh" - bind C-g display-popup -E -d "#{pane_current_path}" -xC -yC -w 95% -h 95% "lazygit" - bind C-t display-popup -E -xC -yC -w 95% -h 95% "tasksquire" - bind C-n display-popup -E -xC -yC -w 95% -h 95% -d "/mnt/c/Users/marti/Documents/notes/Work/" "vim quick_notes.md" - bind C-p display-popup -E -xC -yC -w 95% -h 95% -d "/mnt/c/Users/marti/Documents/notes/Work/development/" "vim mbpr.md" - - ####################################### - # status line - ####################################### - set -g status-justify centre - - set -g status-left "#[bg=#808080,fg=#ffffff,bold] #S #[default]#[bg=#BCBCBC] #{-30:pane_title} " - set -g status-left-length 40 - - set -g status-right "#[bg=#BCBCBC] %H:%M #[bg=#808080,fg=#ffffff] %d.%m.%y " - - # setw -g window-status-format " #W#F " - # setw -g window-status-current-format " #W#F " - setw -g window-status-format " #W " - setw -g window-status-current-format " #W " - setw -g window-status-separator "" - - ####################################### - # colors, taken from vim-lucius - ####################################### - set -g status-style "bg=#DADADA,fg=#000000" - - setw -g window-status-style "bg=#BCBCBC,fg=#000000" - setw -g window-status-current-style "bg=#808080,fg=#ffffff" - - setw -g window-status-activity-style "bg=#AFD7AF,fg=#000000" - setw -g window-status-bell-style "bg=#AFD7AF,fg=#000000" - #setw -g window-status-content-style "bg=#AFD7AF,fg=#000000" - - set -g pane-active-border-style "bg=#eeeeee,fg=#006699" - set -g pane-border-style "bg=#eeeeee,fg=#999999" - ''; - }; - - home.shellAliases = lib.mkMerge [ { - "o" = "tmuxp"; - "ol" = "tmuxp load"; - } - ]; -}