diff options
Diffstat (limited to '')
| -rw-r--r-- | nix/flake/hosts.nix | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/nix/flake/hosts.nix b/nix/flake/hosts.nix new file mode 100644 index 0000000..3ce8c6b --- /dev/null +++ b/nix/flake/hosts.nix @@ -0,0 +1,184 @@ +{ + inputs, + self, + withSystem, + ... +}: +let + inherit (inputs.nixpkgs.lib // builtins) + filterAttrs + foldl' + makeOverridable + mapAttrs' + mapAttrsToList + mkForce + mkIf + nixosSystem + readDir + replaceStrings + substring + ; + + inherit (inputs.darwin.lib) darwinSystem; + + nixSettings = { + nix.registry.nixpkgs = { + flake = inputs.nixpkgs; + }; + }; + + mapSystems = + dir: mapAttrsToList (name: _: name) (filterAttrs (_: type: type == "directory") (readDir dir)); + + mapHosts = foldl' ( + hosts: system: + hosts + // (mapAttrs' ( + filename: _: + let + name = replaceStrings [ ".nix" ] [ "" ] filename; + in + { + inherit name; + value = { + inherit system; + hostconf = ../machines/nixos + "/${system}/${filename}"; + }; + } + ) (builtins.readDir ../machines/nixos/${system})) + ) { }; + + mapMacs = foldl' ( + hosts: system: + hosts + // (mapAttrs' ( + filename: _: + let + name = replaceStrings [ ".nix" ] [ "" ] filename; + in + { + inherit name; + value = { + inherit system; + hostconf = ../machines/darwin + "/${system}/${filename}"; + }; + } + ) (builtins.readDir ../machines/darwin/${system})) + ) { }; + + defaultModules = [ + nixSettings + inputs.agenix.nixosModules.age + inputs.disko.nixosModules.disko + inputs.home-manager.nixosModules.home-manager + ../modules/default.nix + ]; + + darwinDefaultModules = [ + nixSettings + inputs.agenix.darwinModules.age + inputs.home-manager.darwinModules.home-manager + ../modules/default-darwin.nix + ]; + + darwinConfigurations = mapAttrs' ( + name: conf: + let + inherit (conf) system hostconf; + adminUser = { + name = "fcuny"; + userinfo = { + email = "franck@fcuny.net"; + fullName = "Franck Cuny"; + }; + }; + in + { + inherit name; + value = withSystem system ( + { pkgs, ... }: + makeOverridable darwinSystem { + inherit system; + specialArgs = { + hostName = name; + inherit adminUser; + inherit self; + inherit inputs; + }; + modules = + [ + { inherit adminUser; } + { + nixpkgs.pkgs = pkgs; + nixpkgs.hostPlatform = system; + system.stateVersion = 5; + environment.systemPackages = [ + pkgs.git + ]; + } + ] + ++ darwinDefaultModules + ++ [ + hostconf + ]; + } + ); + } + ) (mapMacs (mapSystems ../machines/darwin)); + + nixosConfigurations = mapAttrs' ( + name: conf: + let + inherit (conf) system hostconf; + adminUser = { + name = "fcuny"; + userinfo = { + email = "franck@fcuny.net"; + fullName = "Franck Cuny"; + }; + }; + in + { + inherit name; + value = withSystem system ( + { pkgs, ... }: + makeOverridable nixosSystem { + inherit system; + specialArgs = { + hostName = name; + inherit adminUser; + inherit self; + hostConfigurations = mapAttrs' (name: conf: { + inherit name; + value = conf.config; + }) nixosConfigurations; + inherit inputs; + }; + modules = + [ + { + inherit adminUser; + } + { + system.configurationRevision = mkIf (self ? rev) self.rev; + system.nixos.versionSuffix = mkForce "git.${substring 0 11 inputs.nixpkgs.rev}"; + nixpkgs.pkgs = pkgs; + environment.systemPackages = [ + pkgs.git + ]; + } + ] + ++ defaultModules + ++ [ + hostconf + ]; + } + ); + } + ) (mapHosts (mapSystems ../machines/nixos)); +in +{ + flake = { + inherit nixosConfigurations darwinConfigurations; + }; +} |
