nixos/systems/skip01.nix
Julian Sutter 61c3722f5a Refactor NixOS configuration: Move GUI apps to desktop modules and create headless config
- Move GUI applications from users/jsutter.nix to appropriate desktop modules:
  * office.nix: slack, signal-desktop
  * gaming.nix: discord, stremio
  * plasma.nix: arc-theme, pinentry, tigervnc
  * dev.nix: putty
  * media.nix (new): vlc, deluge

- Create systems/common-headless.nix for server configurations:
  * Remove GUI dependencies (Flatpak, XDG portals, fonts, graphics drivers)
  * Include only essential CLI tools and server packages
  * Disable X server completely

- Simplify skip01 configuration:
  * Remove Intel graphics drivers and OpenGL support
  * Use headless common configuration
  * Keep unified users/jsutter.nix (no split files)

- Update flake.nix to include new media.nix module in desktop systems

Result: Clean separation between desktop and headless configurations
with improved modularity and maintainability.
2025-07-30 23:17:55 -07:00

71 lines
2 KiB
Nix

{ config, lib, pkgs, modulesPath, ... }: {
networking.hostName = "skip01";
# CPU Settings for 13th gen Intel Core i5
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
# Boot and kernel modules for Intel NUC
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ]; # No graphics drivers needed for headless
boot.kernelModules = [ "kvm-intel" ]; # Intel virtualization support
boot.extraModulePackages = [];
# Server-specific kernel parameters
boot.kernelParams = [
"intel_iommu=on" # Enable IOMMU for virtualization
];
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
# No graphics support needed for headless server
# Power management optimized for server use
powerManagement = {
enable = true;
cpuFreqGovernor = "ondemand";
};
# Thermal management
services.thermald.enable = true;
# Server-oriented settings
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
PermitRootLogin = "no";
};
};
# Swap configuration (smaller for server use)
swapDevices = [
{
device = "/swapfile";
size = 8192; # 8GB swap for server workload
priority = 0;
}
];
# Enable hardware monitoring (CLI only)
hardware.sensor.iio.enable = true;
# Network performance tuning for server use
boot.kernel.sysctl = {
"net.core.rmem_max" = 134217728;
"net.core.wmem_max" = 134217728;
"net.ipv4.tcp_rmem" = "4096 65536 134217728";
"net.ipv4.tcp_wmem" = "4096 65536 134217728";
"net.core.netdev_max_backlog" = 5000;
};
# Disable unnecessary services for server use
services.xserver.enable = lib.mkForce false;
services.pipewire.enable = lib.mkForce false;
# Enable container support for future server services
virtualisation.docker.enable = true;
virtualisation.podman.enable = true;
}