feat: add little-rascal laptop configuration and deployment

- Add complete NixOS configuration for little-rascal laptop
- Include Niri window manager and CLI-focused setup
- Add hardware configuration for laptop hardware
- Include deployment script for little-rascal
- Update flake.nix to include little-rascal as build target
- Add deploy-rs configuration for little-rascal deployment

The little-rascal laptop is now fully integrated into the Home Lab
infrastructure with complete NixOS configuration management.
This commit is contained in:
Geir Okkenhaug Jerstad 2025-06-30 11:40:31 +02:00
parent f42bae513c
commit 3715e542b2
6 changed files with 355 additions and 46 deletions

162
scripts/deploy-little-rascal.sh Executable file
View file

@ -0,0 +1,162 @@
#!/usr/bin/env bash
# Little Rascal NixOS Installation and Deployment Script
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
LAPTOP_HOSTNAME="little-rascal"
LAPTOP_IP="little-rascal.tail807ea.ts.net" # Or use IP address
SSH_USER="geir"
FLAKE_PATH="/home/geir/Home-lab"
echo -e "${BLUE}=== Little Rascal NixOS Deployment Helper ===${NC}"
echo
# Function to print colored output
print_step() {
echo -e "${GREEN}[STEP]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
# Check if we're running from the Home-lab directory
if [ ! -f "flake.nix" ]; then
print_error "Please run this script from the Home-lab directory"
exit 1
fi
# Menu selection
echo "What would you like to do?"
echo "1. Generate hardware configuration (run this on the laptop after minimal install)"
echo "2. Test SSH connection to laptop"
echo "3. Deploy full configuration to laptop"
echo "4. Check deployment status"
echo "5. Show manual installation steps"
echo
read -p "Enter your choice (1-5): " choice
case $choice in
1)
print_step "Generating hardware configuration..."
echo "Run this command ON THE LAPTOP after minimal NixOS installation:"
echo
echo -e "${YELLOW}sudo nixos-generate-config --show-hardware-config > hardware-configuration.nix${NC}"
echo
echo "Then copy the hardware-configuration.nix to this machine at:"
echo " $FLAKE_PATH/machines/little-rascal/hardware-configuration.nix"
;;
2)
print_step "Testing SSH connection to laptop..."
if ssh -o ConnectTimeout=5 $SSH_USER@$LAPTOP_IP "echo 'SSH connection successful!'" 2>/dev/null; then
print_info "✅ SSH connection to $LAPTOP_IP successful!"
# Check if Tailscale is running
if ssh $SSH_USER@$LAPTOP_IP "systemctl is-active tailscale" 2>/dev/null | grep -q "active"; then
print_info "✅ Tailscale is running on laptop"
else
print_warning "⚠️ Tailscale might not be running on laptop"
fi
else
print_error "❌ Cannot connect to $LAPTOP_IP via SSH"
echo "Make sure:"
echo " - The laptop is connected to the network"
echo " - SSH is enabled and running"
echo " - Your SSH key is properly configured"
echo " - Tailscale is connected (if using .ts.net address)"
fi
;;
3)
print_step "Deploying full configuration to laptop..."
# First, test the configuration builds locally
print_info "Building configuration locally first..."
if nixos-rebuild build --flake .#little-rascal; then
print_info "✅ Configuration builds successfully"
else
print_error "❌ Configuration failed to build"
exit 1
fi
# Deploy using deploy-rs
print_info "Deploying to laptop via deploy-rs..."
if deploy .#little-rascal; then
print_info "✅ Deployment successful!"
else
print_error "❌ Deployment failed"
print_info "You can try manual deployment with:"
echo " nixos-rebuild switch --flake .#little-rascal --target-host $SSH_USER@$LAPTOP_IP --use-remote-sudo"
fi
;;
4)
print_step "Checking deployment status..."
print_info "Current system generation on laptop:"
ssh $SSH_USER@$LAPTOP_IP "sudo nixos-rebuild list-generations | tail -5"
print_info "Current running configuration:"
ssh $SSH_USER@$LAPTOP_IP "readlink /run/current-system"
;;
5)
print_step "Manual installation steps:"
echo
echo -e "${YELLOW}1. Boot from NixOS installer ISO${NC}"
echo "2. Set up disk partitioning (example for UEFI system):"
echo " sudo parted /dev/nvme0n1 mklabel gpt"
echo " sudo parted /dev/nvme0n1 mkpart ESP fat32 1MiB 512MiB"
echo " sudo parted /dev/nvme0n1 set 1 esp on"
echo " sudo parted /dev/nvme0n1 mkpart primary 512MiB 100%"
echo
echo "3. Format partitions:"
echo " sudo mkfs.fat -F 32 -n BOOT /dev/nvme0n1p1"
echo " sudo mkfs.ext4 -L nixos /dev/nvme0n1p2"
echo
echo "4. Mount filesystems:"
echo " sudo mount /dev/disk/by-label/nixos /mnt"
echo " sudo mkdir -p /mnt/boot"
echo " sudo mount /dev/disk/by-label/BOOT /mnt/boot"
echo
echo "5. Generate and edit configuration:"
echo " sudo nixos-generate-config --root /mnt"
echo " sudo nano /mnt/etc/nixos/configuration.nix"
echo " # Copy minimal-configuration.nix content and adjust disk UUIDs"
echo
echo "6. Install NixOS:"
echo " sudo nixos-install"
echo
echo "7. Set root password and reboot:"
echo " sudo nixos-enter --root /mnt"
echo " passwd"
echo " exit"
echo " reboot"
echo
echo -e "${YELLOW}8. After reboot, connect to Tailscale and run this script again with option 3${NC}"
;;
*)
print_error "Invalid choice"
exit 1
;;
esac
echo
print_info "Done!"