217 lines
5.9 KiB
Nix
217 lines
5.9 KiB
Nix
{
|
|
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
|
|
];
|
|
};
|
|
};
|
|
}
|