{ description = "Alo cluster"; inputs = { deploy-rs.url = "github:serokell/deploy-rs"; deploy-rs.inputs.nixpkgs.follows = "nixpkgs"; impermanence.url = "github:nix-community/impermanence"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; disko.url = "github:nix-community/disko"; disko.inputs.nixpkgs.follows = "nixpkgs"; home-manager = { url = "github:nix-community/home-manager/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-index-database = { url = "github:nix-community/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; }; nixvim = { url = "github:nix-community/nixvim"; inputs.nixpkgs.follows = "nixpkgs-unstable"; inputs.home-manager.follows = "home-manager"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs-stable.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, nixpkgs-unstable, deploy-rs, disko, home-manager, sops-nix, impermanence, ... }@inputs: let inherit (self); overlay-unstable = final: prev: { unstable = nixpkgs-unstable.legacyPackages.${prev.system}; }; mkNixos = system: modules: nixpkgs.lib.nixosSystem { system = system; modules = [ ( { config, pkgs, ... }: { nixpkgs.overlays = [ overlay-unstable ]; nixpkgs.config.allowUnfree = true; } ) disko.nixosModules.disko sops-nix.nixosModules.sops impermanence.nixosModules.impermanence ] ++ modules; specialArgs = { inherit inputs self; }; }; mkHMNixos = system: modules: mkNixos system ([ home-manager.nixosModules.home-manager { home-manager = { useGlobalPkgs = true; useUserPackages = true; users.ppetru = { imports = [ (inputs.impermanence + "/home-manager.nix") inputs.nix-index-database.hmModules.nix-index inputs.nixvim.homeManagerModules.nixvim ./home ]; }; }; }] ++ modules); pkgsFor = system: import nixpkgs { inherit system; overlays = [ overlay-unstable ]; }; deployPkgsFor = system: import nixpkgs { inherit system; overlays = [ overlay-unstable deploy-rs.overlay (self: super: { deploy-rs = { inherit (pkgsFor system) deploy-rs; lib = super.deploy-rs.lib; }; }) ]; }; in { nixosConfigurations = { c1 = mkHMNixos "x86_64-linux" [ ./hosts/c1 ]; c2 = mkHMNixos "x86_64-linux" [ ./hosts/c2 ]; c3 = mkHMNixos "x86_64-linux" [ ./hosts/c3 ]; alo-cloud-1 = mkHMNixos "aarch64-linux" [ ./hosts/alo-cloud-1 ]; zippy = mkHMNixos "x86_64-linux" [ ./hosts/zippy ]; chilly = mkHMNixos "x86_64-linux" [ ./hosts/chilly ]; }; deploy = { nodes = { c1 = { hostname = "c1"; profiles.system = { user = "root"; path = (deployPkgsFor "x86_64-linux").deploy-rs.lib.activate.nixos self.nixosConfigurations.c1; }; }; c2 = { hostname = "c2"; profiles.system = { user = "root"; path = (deployPkgsFor "x86_64-linux").deploy-rs.lib.activate.nixos self.nixosConfigurations.c2; }; }; c3 = { hostname = "c3"; profiles.system = { user = "root"; path = (deployPkgsFor "x86_64-linux").deploy-rs.lib.activate.nixos self.nixosConfigurations.c3; }; }; alo-cloud-1 = { hostname = "49.13.163.72"; profiles = { system = { user = "root"; path = (deployPkgsFor "aarch64-linux").deploy-rs.lib.activate.nixos self.nixosConfigurations.alo-cloud-1; }; }; }; zippy = { hostname = "zippy"; profiles = { system = { user = "root"; path = (deployPkgsFor "x86_64-linux").deploy-rs.lib.activate.nixos self.nixosConfigurations.zippy; }; }; }; chilly = { hostname = "chilly"; profiles = { system = { user = "root"; path = (deployPkgsFor "x86_64-linux").deploy-rs.lib.activate.nixos self.nixosConfigurations.chilly; }; }; }; }; }; checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; }; }