Compare commits

...

3 Commits

Author SHA1 Message Date
63d741e55e [media] Use delfin instead of jellyfin
This is potentially temporary. But jellyfin-media-player has been
flagged as having a security problem by using an old version of
qtwebengine. So we'll maybe find time to try out delfin or maybe just
wait until the security issue gets fixed or maybe just use the web
browser. We have options
2025-10-01 21:35:18 -07:00
9ed3ad8fb8 Fix linux builds after nix-darwin updates 2025-10-01 21:35:18 -07:00
330cd6f92b Add /boot partition expansion plan and temporary configurationLimit fix
- Add comprehensive BOOT_EXPANSION_PLAN.md with step-by-step instructions for safely expanding /boot from 100MB to 1GB
- Temporarily reduce configurationLimit to 1 to resolve immediate /boot space crisis
- Plan supports 20 generations (configurationLimit = 20) after expansion
- Uses safe approach: shrink /games partition, create new EFI partition
- Includes full recovery context and troubleshooting information

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 21:35:18 -07:00
5 changed files with 300 additions and 8 deletions

View File

@@ -10,11 +10,17 @@ let
sha256 = "sha256-vHwgENjip2+AFzs4oZfnKEAJKwf5Zid7fakImvxxQUw=";
};
# Default emacs configuration with vterm support
defaultEmacsPackage = pkgs.emacs-macport.pkgs.withPackages (epkgs: [
# Shared emacs packages
emacsPackages = epkgs: [
epkgs.vterm
epkgs.treesit-grammars.with-all-grammars
]);
];
# Default emacs configuration with vterm support
defaultEmacsPackage =
if pkgs.stdenv.isDarwin
then pkgs.emacs-macport.pkgs.withPackages emacsPackages
else pkgs.emacs.pkgs.withPackages emacsPackages;
in
{
config = {

View File

@@ -12,9 +12,9 @@ in
config = mkIf cfg.enable {
home.packages = [
claude-code
codex
goose-cli
pkgs.claude-code
pkgs.codex
pkgs.goose-cli
# Custom packages
customPkgs.tea-rbw

View File

@@ -13,7 +13,9 @@ in
config = mkIf cfg.enable {
home.packages = with pkgs; [
# Media players and streaming
jellyfin-media-player
# Using delfin instead of jellyfin-media-player to avoid qtwebengine security issues
# For full Jellyfin features, use web interface at http://jellyfin-server:8096
delfin
moonlight-qt
vlc
];

View File

@@ -0,0 +1,284 @@
# NixOS /boot Partition Expansion Plan
## CRITICAL CONTEXT & PROBLEM STATEMENT
**System:** `zix790prors` - Dual-boot Windows 11 + NixOS on Samsung SSD 990 PRO 4TB
**Problem:** Current /boot partition (/dev/nvme0n1p1) is only 100MB, insufficient for multiple NixOS generations
**Goal:** Create 1GB /boot partition to support 20+ NixOS generations (~38MB each)
**Current Partition Layout:**
```
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 206847 204800 100M EFI System (/boot)
/dev/nvme0n1p2 206848 239615 32768 16M Microsoft reserved
/dev/nvme0n1p3 239616 1953316863 1953077248 931.3G Microsoft basic data (Windows)
/dev/nvme0n1p6 1953316864 3906394111 1953077248 931.3G Linux filesystem (/nix/store)
/dev/nvme0n1p5 3906394112 7812548607 3906154496 1.8T Linux filesystem (/games - btrfs)
/dev/nvme0n1p4 7812548608 7814031359 1482752 724M Windows recovery environment
```
**Strategy:** Shrink /games partition (p5) by 1GB and create new 1GB EFI partition
---
## PLAN A: DETAILED STEP-BY-STEP INSTRUCTIONS
### PREREQUISITES
1. **Boot from NixOS live USB** (build with `./build-liveusb.sh`)
2. **Have Windows recovery media ready** (just in case)
3. **Backup important data** (though this shouldn't affect user data)
### PHASE 1: PREPARATION & BACKUP
```bash
# 1. Connect to internet
sudo systemctl start wpa_supplicant
# OR for ethernet: sudo systemctl start dhcpcd
# 2. Mount current filesystems
sudo mkdir -p /mnt/{boot,nix,games}
sudo mount /dev/nvme0n1p1 /mnt/boot
sudo mount /dev/nvme0n1p6 /mnt/nix
sudo mount /dev/nvme0n1p5 /mnt/games
# 3. Backup current /boot contents
sudo mkdir -p /tmp/boot-backup
sudo cp -a /mnt/boot/* /tmp/boot-backup/
sudo ls -la /tmp/boot-backup/ # Verify backup
# 4. Record current UUIDs for later
sudo blkid /dev/nvme0n1p1 > /tmp/original-boot-uuid.txt
cat /tmp/original-boot-uuid.txt
```
### PHASE 2: SHRINK /games PARTITION
```bash
# 1. Check /games filesystem
sudo btrfs filesystem show /mnt/games
sudo btrfs filesystem usage /mnt/games
# 2. Shrink btrfs filesystem first (by 1.1GB for safety margin)
sudo btrfs filesystem resize -1200M /mnt/games
# 3. Verify shrink was successful
sudo btrfs filesystem usage /mnt/games
# 4. Unmount to resize partition
sudo umount /mnt/games
# 5. Note current partition end sector
sudo fdisk -l /dev/nvme0n1 | grep nvme0n1p5
# Current: 3906394112 7812548607 (note the END: 7812548607)
# 6. Calculate new end sector (subtract ~2M sectors for 1GB)
# New end should be approximately: 7812548607 - 2097152 = 7810451455
```
### PHASE 3: RESIZE PARTITIONS
```bash
# 1. Use parted to resize /games partition
sudo parted /dev/nvme0n1
# In parted shell:
print # Show current layout
resizepart 5 7810451455 # Resize partition 5 to new end
print # Verify the change
quit
# 2. Verify partition table
sudo fdisk -l /dev/nvme0n1
```
### PHASE 4: CREATE NEW 1GB EFI PARTITION
```bash
# 1. Create new partition in freed space
sudo parted /dev/nvme0n1
# In parted shell:
print free # Show free space
mkpart primary fat32 7810451456 7812548607 # Create new partition
set 7 esp on # Set ESP flag (assuming it becomes p7)
print # Verify
quit
# 2. Format new partition as FAT32
sudo mkfs.fat -F32 -n "NIXBOOT" /dev/nvme0n1p7
# 3. Get new partition UUID
sudo blkid /dev/nvme0n1p7
```
### PHASE 5: COPY BOOT CONTENTS
```bash
# 1. Mount new boot partition
sudo mkdir -p /mnt/new-boot
sudo mount /dev/nvme0n1p7 /mnt/new-boot
# 2. Copy all boot contents
sudo cp -a /tmp/boot-backup/* /mnt/new-boot/
# 3. Verify copy
sudo ls -la /mnt/new-boot/
sudo du -sh /mnt/new-boot/*
```
### PHASE 6: UPDATE CONFIGURATION
```bash
# 1. Mount root filesystem
sudo mount /dev/nvme0n1p6 /mnt/nix
sudo mount /dev/nvme0n1p6 /mnt # For nixos-enter
# 2. Mount other needed filesystems for chroot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount /dev/nvme0n1p7 /mnt/boot # Mount NEW boot partition
# 3. Enter NixOS environment
sudo nixos-enter
# 4. Inside chroot - update hardware configuration
# Edit /etc/nixos/hardware-configuration.nix or check current fstab
NEW_UUID=$(blkid /dev/nvme0n1p7 | grep -o 'UUID="[^"]*"' | cut -d'"' -f2)
echo "New boot UUID: $NEW_UUID"
# 5. Update boot partition UUID in configuration
# This step depends on your current setup - likely in hardware-configuration.nix
```
### PHASE 7: REGENERATE BOOTLOADER
```bash
# Still in nixos-enter chroot:
# 1. Rebuild bootloader configuration
nixos-rebuild switch --install-bootloader
# 2. Exit chroot
exit
# 3. Update EFI boot variables (if needed)
sudo efibootmgr -v # Check current entries
```
### PHASE 8: VERIFICATION & CLEANUP
```bash
# 1. Unmount everything
sudo umount /mnt/new-boot
sudo umount /mnt/boot
sudo umount /mnt/nix
sudo umount /mnt/games
# 2. Remount /games with new partition size
sudo mount /dev/nvme0n1p5 /mnt/games
sudo btrfs filesystem resize max /mnt/games # Expand btrfs to use available space
# 3. Final verification
sudo fdisk -l /dev/nvme0n1
sudo lsblk
```
### PHASE 9: TEST BOOT
```bash
# 1. Reboot and test
sudo reboot
# 2. After successful boot, update NixOS config
# Change configurationLimit to 20 (perfect for 1GB /boot)
# In /home/johno/nixos-configs/machines/zix790prors/configuration.nix:
# boot.loader.systemd-boot.configurationLimit = 20;
# 3. Test rebuild
sudo nixos-rebuild switch --flake .#zix790prors
```
---
## PLAN B: TROUBLESHOOTING & CONTEXT FOR ADDITIONAL HELP
### IF THINGS GO WRONG
**Scenario 1: System won't boot**
- Boot from live USB
- Mount old boot partition: `sudo mount /dev/nvme0n1p1 /mnt/boot`
- Check if bootloader entries exist: `ls /mnt/boot/loader/entries/`
- Regenerate from live USB using `nixos-install` with `--root /mnt`
**Scenario 2: Partition operations fail**
- **STOP IMMEDIATELY**
- Document exact error message
- Use `sudo fdisk -l` and `sudo parted /dev/nvme0n1 print` to check current state
- Do NOT proceed without understanding the error
**Scenario 3: Btrfs resize fails**
- Check available space: `sudo btrfs filesystem usage /mnt/games`
- May need to balance first: `sudo btrfs balance start /mnt/games`
- Or defragment: `sudo btrfs filesystem defragment -r /mnt/games`
### RECOVERY INFORMATION
**Original partition layout (before changes):**
```
/dev/nvme0n1p1: 100M EFI (/boot) - sectors 2048-206847
/dev/nvme0n1p5: 1.8T btrfs (/games) - sectors 3906394112-7812548607
```
**Key files to check:**
- `/etc/fstab` - filesystem mount configuration
- `/etc/nixos/hardware-configuration.nix` - NixOS hardware config
- `/boot/loader/loader.conf` - systemd-boot config
**Important UUIDs (save these before starting):**
```bash
# Run these BEFORE making changes:
sudo blkid /dev/nvme0n1p1 # Current boot partition
sudo blkid /dev/nvme0n1p5 # Games partition
sudo blkid /dev/nvme0n1p6 # Nix store partition
```
**Emergency boot options:**
- Boot from Windows (should be unaffected)
- Boot from NixOS live USB
- Use systemd-boot menu to select older generation (if available)
### ALTERNATIVE APPROACHES IF PLAN A FAILS
1. **Expand into Microsoft reserved instead** (lower risk, less space)
2. **Use external USB for /boot** (temporary solution)
3. **Recreate partition table** (nuclear option, requires full backup)
---
## TECHNICAL DETAILS FOR CLAUDE CODE ASSISTANCE
**Repository:** `/home/johno/nixos-configs` - NixOS flake-based configuration
**Machine config:** `machines/zix790prors/configuration.nix`
**Current configurationLimit:** 1 (temporarily reduced from 2)
**Target configurationLimit:** 20 (requires ~1GB /boot)
**Key commands for status checking:**
```bash
# Partition info
sudo fdisk -l /dev/nvme0n1
sudo parted /dev/nvme0n1 print free
sudo lsblk
# Filesystem info
sudo btrfs filesystem show
sudo btrfs filesystem usage /games
df -h /boot
# Boot info
sudo efibootmgr -v
ls -la /boot/loader/entries/
```
**This document created:** 2025-10-02 by Claude Code
**Hardware:** Samsung SSD 990 PRO 4TB, NixOS + Windows 11 dual boot

View File

@@ -34,7 +34,7 @@ with lib;
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.systemd-boot.configurationLimit = 2; # Reduced to save /boot space (TODO Increase /boot partition size)
boot.loader.systemd-boot.configurationLimit = 1; # Temporarily reduced to 1 to free /boot space
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.timeout = 10;