{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-old-stable.url = "github:nixos/nixpkgs/nixos-25.05"; sops-nix.url = "github:Mic92/sops-nix"; sops-nix.inputs.nixpkgs.follows = "nixpkgs"; nixos-mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; nixos-mailserver.inputs.nixpkgs.follows = "nixpkgs"; headplane.url = "github:tale/headplane"; comin.url = "github:nlewo/comin"; comin.inputs.nixpkgs.follows = "nixpkgs"; deploy-rs.url = "github:serokell/deploy-rs"; deploy-rs.inputs.nixpkgs.follows = "nixpkgs"; nixvim.url = "github:nix-community/nixvim/nixos-25.11"; nixvim.inputs.nixpkgs.follows = "nixpkgs"; git-hooks.url = "github:cachix/git-hooks.nix"; git-hooks.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, nixpkgs, ... }@inputs: let inherit (self) outputs; supportedSystems = [ "x86_64-linux" "aarch64-linux" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; # Extend nixpkgs.lib with our custom utils lib = nixpkgs.lib.extend (final: prev: self.lib or { }); constants = import ./constants.nix; mkNixosConfiguration = system: modules: nixpkgs.lib.nixosSystem { inherit system modules; specialArgs = { inherit inputs outputs lib constants ; }; }; in { # Custom library functions lib = { utils = import ./lib/utils.nix { lib = nixpkgs.lib; }; }; # Apps apps = forAllSystems ( system: let pkgs = nixpkgs.legacyPackages.${system}; mkApp = name: { type = "app"; program = pkgs.lib.getExe (pkgs.callPackage ./apps/${name} { }); }; in { rebuild = mkApp "rebuild"; } ); packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system}); overlays = import ./overlays { inherit inputs; }; nixosModules = import ./modules/nixos; nixosConfigurations = { cryodev-main = mkNixosConfiguration "x86_64-linux" [ ./hosts/cryodev-main ]; cryodev-pi = mkNixosConfiguration "aarch64-linux" [ ./hosts/cryodev-pi ]; }; templates = { raspberry-pi = { path = ./templates/raspberry-pi; description = "Raspberry Pi 4 Client"; }; generic-server = { path = ./templates/generic-server; description = "Generic x86_64 Customer Server"; }; }; formatter = forAllSystems ( system: let pkgs = nixpkgs.legacyPackages.${system}; config = self.checks.${system}.pre-commit-check.config; inherit (config) package configFile; script = '' ${pkgs.lib.getExe package} run --all-files --config ${configFile} ''; in pkgs.writeShellScriptBin "pre-commit-run" script ); deploy = { nodes = { cryodev-main = { hostname = constants.domain; profiles.system = { user = "root"; path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.cryodev-main; }; }; }; }; checks = forAllSystems ( system: let pkgs = nixpkgs.legacyPackages.${system}; flakePkgs = self.packages.${system}; overlaidPkgs = import nixpkgs { inherit system; overlays = [ self.overlays.modifications ]; }; deployChecks = inputs.deploy-rs.lib.${system}.deployChecks self.deploy; in { pre-commit-check = inputs.git-hooks.lib.${system}.run { src = ./.; hooks = { nixfmt.enable = true; }; }; build-packages = pkgs.linkFarm "flake-packages-${system}" flakePkgs; build-overlays = pkgs.linkFarm "flake-overlays-${system}" { # package = overlaidPkgs.package; }; } // deployChecks ); }; }