{ 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-25.05"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; disko.url = "github:nix-community/disko"; disko.inputs.nixpkgs.follows = "nixpkgs"; ethereum-nix = { url = "github:nix-community/ethereum.nix"; inputs.nixpkgs.follows = "nixpkgs-unstable"; }; home-manager = { url = "github:nix-community/home-manager/release-25.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"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; browser-previews = { url = "github:nix-community/browser-previews"; inputs.nixpkgs.follows = "nixpkgs-unstable"; }; omarchy-nix = { url = "github:henrysipp/omarchy-nix"; inputs.nixpkgs.follows = "nixpkgs"; inputs.home-manager.follows = "home-manager"; }; }; outputs = { self, nixpkgs, nixpkgs-unstable, deploy-rs, disko, ethereum-nix, home-manager, impermanence, sops-nix, browser-previews, omarchy-nix, ... }@inputs: let inherit (self); overlay-unstable = final: prev: { unstable = import nixpkgs-unstable { inherit (prev) system; config.allowUnfree = true; }; }; overlay-browser-previews = final: prev: { browser-previews = browser-previews.packages.${prev.system}; }; mkHost = system: profile: modules: let # Profile parameter is only used by home-manager for user environment # NixOS system configuration is handled via explicit imports in host configs in nixpkgs.lib.nixosSystem { system = system; modules = [ ( { config, pkgs, ... }: { nixpkgs.overlays = [ overlay-unstable overlay-browser-previews ]; nixpkgs.config.allowUnfree = true; } ) disko.nixosModules.disko sops-nix.nixosModules.sops impermanence.nixosModules.impermanence omarchy-nix.nixosModules.default home-manager.nixosModules.home-manager { omarchy = { full_name = "Petru Paler"; email_address = "petru@paler.net"; theme = "tokyo-night"; monitors = [ "DP-1,preferred,auto,1.5" ]; }; home-manager = { useGlobalPkgs = true; useUserPackages = true; users.ppetru = { imports = [ (inputs.impermanence + "/home-manager.nix") inputs.nix-index-database.homeModules.nix-index inputs.nixvim.homeModules.nixvim omarchy-nix.homeManagerModules.default ./home ]; }; extraSpecialArgs = { inherit profile; }; }; } ] ++ modules; specialArgs = { inherit inputs self; }; }; pkgsFor = system: import nixpkgs { inherit system; overlays = [ overlay-unstable ]; }; deployPkgsFor = system: import nixpkgs { inherit system; overlays = [ overlay-unstable deploy-rs.overlays.default (self: super: { deploy-rs = { inherit (pkgsFor system) deploy-rs; lib = super.deploy-rs.lib; }; }) ]; }; in { nixosConfigurations = { c1 = mkHost "x86_64-linux" "minimal" [ ./hosts/c1 ]; c2 = mkHost "x86_64-linux" "minimal" [ ./hosts/c2 ]; c3 = mkHost "x86_64-linux" "minimal" [ ./hosts/c3 ]; alo-cloud-1 = mkHost "aarch64-linux" "cloud" [ ./hosts/alo-cloud-1 ]; zippy = mkHost "x86_64-linux" "minimal" [ ethereum-nix.nixosModules.default ./hosts/zippy ]; chilly = mkHost "x86_64-linux" "workstation" [ ./hosts/chilly ]; sparky = mkHost "x86_64-linux" "desktop" [ ./hosts/sparky ]; }; 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; }; }; }; sparky = { hostname = "sparky"; profiles = { system = { user = "root"; path = (deployPkgsFor "x86_64-linux").deploy-rs.lib.activate.nixos self.nixosConfigurations.sparky; }; }; }; }; }; checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; }; }