{ description = "A vibrant NixOS configuration for multiple machines"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager-stable = { url = "github:nix-community/home-manager/release-24.11"; inputs.nixpkgs.follows = "nixpkgs-stable"; }; disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; nixos-anywhere = { url = "github:nix-community/nixos-anywhere"; inputs.nixpkgs.follows = "nixpkgs"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-flatpak.url = "github:gmodena/nix-flatpak"; # TeleportFling: standalone screen + audio sender for OBS Teleport. teleportfling.url = "git+http://homeserver:3050/pedley/TeleportFling.git"; }; outputs = { self , nixpkgs , nixpkgs-stable , home-manager , home-manager-stable , disko , nixos-anywhere , sops-nix , nix-flatpak , teleportfling , ... }@inputs: let system = "x86_64-linux"; serverOverlays = [ # Empty - antigravity removed ]; # Overlays shared by all desktops/laptops (no CUDA/NDI) desktopOverlays = [ (final: prev: { stable = import nixpkgs-stable { system = final.stdenv.hostPlatform.system; config = { allowUnfree = true; allowBroken = true; }; }; }) ]; # Full overlay set used by x1carbon only (CUDA + NDI for OBS Studio etc.) overlays = [ (final: prev: { stable = import nixpkgs-stable { system = final.stdenv.hostPlatform.system; config = { allowUnfree = true; allowBroken = true; cudaSupport = true; cudaCapabilities = [ "6.1" ]; }; }; }) (final: prev: { ndi-6 = prev.ndi-6.overrideAttrs (old: { src = prev.fetchurl { url = "https://downloads.ndi.tv/SDK/NDI_SDK_Linux/Install_NDI_SDK_v6_Linux.tar.gz"; hash = "sha256-8DFPJFRG3vxIi2POtGiazxqWWu79ray3BXG7IWqMwYM="; }; }); }) ]; # Packages with known vulnerabilities that are explicitly permitted. # Single-sourced here; referenced by the mkNixosSystem module below. permittedInsecurePackages = [ "electron-39.8.10" "qtwebengine-5.15.19" "ventoy-1.1.17" ]; # Specific pkgs for Desktop with CUDA support (using stable to avoid broken CUDA builds) # No longer needed as a separate input, we use overlays now. # pkgsDesktop = ... (Removed) # Function to generate a NixOS system configuration hostUsers = { x1carbon = [ "petere" ]; caitlin-x1 = [ "caitlin" "petere" ]; x470 = [ "petere" "guest" ]; mary-x270 = [ "mary" "petere" ]; richmond-server = [ "petere" ]; homeserver-1 = [ "petere" ]; mcf-server = [ "petere" ]; mcf-stream = [ "guest" "petere" ]; hp-laptop = [ "petere" ]; }; # Function to generate a NixOS system configuration mkNixosSystem = hostname: { specialArgs ? { } , modules ? [ ] , hostOverlays ? desktopOverlays , nixpkgsInput ? nixpkgs , homeManagerInput ? home-manager , }: nixpkgsInput.lib.nixosSystem { # Use the original nixpkgs.lib here specialArgs = { inherit inputs; } // specialArgs; # Removed pkgs from specialArgs modules = [ { nixpkgs.config.allowUnfree = true; nixpkgs.config.permittedInsecurePackages = permittedInsecurePackages; nixpkgs.overlays = hostOverlays; } sops-nix.nixosModules.sops (./hosts + "/${hostname}/configuration.nix") homeManagerInput.nixosModules.home-manager nix-flatpak.nixosModules.nix-flatpak { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.backupFileExtension = "backup"; home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.sharedModules = [ ./home-manager/modules/zsh.nix ]; } ] ++ (nixpkgs.lib.map # Use original nixpkgs.lib here (user: import (./home-manager/users + "/${user}.nix")) (hostUsers.${hostname} or [ ]) ) ++ modules; }; in { nixosConfigurations = { x1carbon = mkNixosSystem "x1carbon" { hostOverlays = overlays; }; caitlin-x1 = mkNixosSystem "caitlin-x1" { }; x470 = mkNixosSystem "x470" { }; mary-x270 = mkNixosSystem "mary-x270" { }; richmond-server = mkNixosSystem "richmond-server" { hostOverlays = serverOverlays; }; homeserver-1 = mkNixosSystem "homeserver-1" { hostOverlays = serverOverlays; }; mcf-server = mkNixosSystem "mcf-server" { hostOverlays = serverOverlays; }; mcf-stream = mkNixosSystem "mcf-stream" { }; hp-laptop = mkNixosSystem "hp-laptop" { }; }; packages.${system} = { }; formatter.${system} = nixpkgs.legacyPackages.${system}.nixfmt; devShells.${system}.default = let devPkgs = nixpkgs.legacyPackages.${system}; in devPkgs.mkShell { packages = with devPkgs; [ sops age nixfmt ]; }; }; }