{ description = "CCCHH Nix Infrastructure"; inputs = { # Use the NixOS small channels for nixpkgs. # https://nixos.org/manual/nixos/stable/#sec-upgrading # https://github.com/NixOS/nixpkgs nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11-small"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small"; # Add nixos-generators as an input. # See here: https://github.com/nix-community/nixos-generators#using-in-a-flake nixos-generators = { url = "github:nix-community/nixos-generators"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { nixpkgs, nixpkgs-unstable, nixos-generators, ... }: let # Shairport Sync 4.3.1 (with nqptp 1.2.4) with metadata, MQTT and AirPlay 2 support. shairportSync431ExtendedNixpkgsUnstableOverlay = final: prev: { shairport-sync = (prev.shairport-sync.override { enableMetadata = true; enableAirplay2 = true; }).overrideAttrs (finalAttr: previousAttr: { # See: https://github.com/mikebrady/shairport-sync/blob/e78a88b64adfe7b5f88fd6faedf55c57445bb240/CONFIGURATION%20FLAGS.md configureFlags = previousAttr.configureFlags ++ [ "--with-mqtt-client" ]; buildInputs = previousAttr.buildInputs ++ [ final.mosquitto ]; # Use specific Shairport Sync and nqptp versions, since with those the # following error doesn't happen: # fatal error: The nqptp service on this system, which is required for # Shairport Sync to operate, does not seem to be initialised. # # Also use a more recent dev version to fix Pipewire stuttering issue. # See: # https://github.com/mikebrady/shairport-sync/issues/1736 # https://github.com/mikebrady/shairport-sync/blob/a65ec2d7f1f380bbae196d7f8f1cd6a88ef5777b/RELEASENOTES-DEVELOPMENT.md#version-432-dev-51-g98679bbb src = final.fetchFromGitHub { owner = "mikebrady"; repo = finalAttr.pname; rev = "98679bbb54f5aaeda859e34aa28425647b8d179e"; hash = "sha256-k0kcgtWk2xlG34lP0ryEaqdskYMNM68YnIRLwFR3jaY="; }; }); nqptp = prev.nqptp.overrideAttrs (finalAttr: previousAttr: { # See Shairport Sync version note. src = final.fetchFromGitHub { owner = "mikebrady"; repo = finalAttr.pname; rev = "1.2.4"; hash = "sha256-roTNcr3v2kzE6vQ5plAVtlw1+2yJplltOYsGGibtoZo="; }; # Custom install phase to avoid setcap. # See: # https://github.com/mikebrady/nqptp/blob/1.2.4/Makefile.am#L23 installPhase = '' mkdir -p $out/bin cp nqptp $out/bin/ ''; }); }; pkgs-unstable = nixpkgs-unstable.legacyPackages."x86_64-linux"; in { colmena = { meta = { nixpkgs = nixpkgs.legacyPackages."x86_64-linux"; nodeNixpkgs = { audio-hauptraum-kueche = nixpkgs-unstable.legacyPackages."x86_64-linux".extend shairportSync431ExtendedNixpkgsUnstableOverlay; audio-hauptraum-tafel = nixpkgs-unstable.legacyPackages."x86_64-linux".extend shairportSync431ExtendedNixpkgsUnstableOverlay; }; nodeSpecialArgs = { git = { inherit pkgs-unstable; }; }; }; audio-hauptraum-kueche = { deployment = { targetHost = "audio-hauptraum-kueche.z9.ccchh.net"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "thinkcccluster" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/audio-hauptraum-kueche ]; }; audio-hauptraum-tafel = { deployment = { targetHost = "audio-hauptraum-tafel.z9.ccchh.net"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "thinkcccluster" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/audio-hauptraum-tafel ]; }; esphome = { deployment = { targetHost = "esphome.z9.ccchh.net"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "thinkcccluster" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/esphome ]; }; public-reverse-proxy = { deployment = { targetHost = "public-reverse-proxy.z9.ccchh.net"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "thinkcccluster" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/public-reverse-proxy ]; }; netbox = { deployment = { targetHost = "netbox-intern.hamburg.ccc.de"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "chaosknoten" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/netbox ]; }; matrix = { deployment = { targetHost = "matrix-intern.hamburg.ccc.de"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "chaosknoten" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/matrix ]; }; public-web-static = { deployment = { targetHost = "public-web-static-intern.hamburg.ccc.de"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "chaosknoten" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/public-web-static ]; }; git = { deployment = { targetHost = "git.hamburg.ccc.de"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "chaosknoten" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/git ]; }; forgejo-actions-runner = { deployment = { targetHost = "forgejo-actions-runner-intern.hamburg.ccc.de"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "chaosknoten" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/forgejo-actions-runner ]; }; ptouch-print-server = { deployment = { targetHost = "ptouch-print-server.z9.ccchh.net"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "thinkcccluster" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/ptouch-print-server ]; }; }; packages.x86_64-linux = { proxmox-nixos-template = nixos-generators.nixosGenerate { system = "x86_64-linux"; modules = [ ./config/nixos-generators/proxmox.nix ./config/common ./config/proxmox-vm ]; format = "proxmox"; }; proxmox-chaosknoten-nixos-template = nixos-generators.nixosGenerate { system = "x86_64-linux"; modules = [ ./config/nixos-generators/proxmox-chaosknoten.nix ./config/proxmox-chaosknoten-additional-initial-config.nix ./config/common ./config/proxmox-vm ]; format = "proxmox"; }; }; formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixpkgs-fmt; }; }