diff --git a/checks/cloudInitImage.nix b/checks/cloudInitImage.nix new file mode 100644 index 0000000..f45df76 --- /dev/null +++ b/checks/cloudInitImage.nix @@ -0,0 +1,10 @@ +{ self, inputs, ... }: +let + inherit (inputs.nixpkgs) lib; +in +{ + perSystem = { system, ... }: { + checks = lib.optionalAttrs (system == "x86_64-linux") + (lib.mapAttrs' (name: value: lib.nameValuePair "cloudInitImage-${name}" value) self.cloudInitImages.${system}); + }; +} diff --git a/checks/default.nix b/checks/default.nix index 4e49f8e..81ec1d1 100644 --- a/checks/default.nix +++ b/checks/default.nix @@ -2,5 +2,6 @@ imports = [ ./devShells.nix ./nixosConfigurations.nix + ./cloudInitImage.nix ]; } diff --git a/flake.nix b/flake.nix index b6c4d78..6591107 100644 --- a/flake.nix +++ b/flake.nix @@ -26,6 +26,8 @@ ./modules ./pkgs ./checks + ./lib/cloud-init.nix + ./flakeModules ]; perSystem = { pkgs, inputs', ... }: { diff --git a/flakeModules/cloud-init.nix b/flakeModules/cloud-init.nix new file mode 100644 index 0000000..b6e24c0 --- /dev/null +++ b/flakeModules/cloud-init.nix @@ -0,0 +1,13 @@ +{ lib, flake-parts-lib, ... }: +let + inherit (lib) mkOption types ; + inherit (flake-parts-lib) mkTransposedPerSystemModule ; +in +mkTransposedPerSystemModule { + name = "cloudInitImages"; + option = mkOption { + type = types.lazyAttrsOf types.package; + default = { }; + }; + file = ./cloud-init.nix; +} diff --git a/flakeModules/default.nix b/flakeModules/default.nix new file mode 100644 index 0000000..4c0dc5c --- /dev/null +++ b/flakeModules/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./cloud-init.nix + ]; +} diff --git a/lib/cloud-init.nix b/lib/cloud-init.nix new file mode 100644 index 0000000..a3607b9 --- /dev/null +++ b/lib/cloud-init.nix @@ -0,0 +1,60 @@ +{ inputs, ... }: { + perSystem = { system, ... }: { + cloudInitImages.default = (inputs.nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = { inherit inputs; }; + modules = [ + ({ config, lib, pkgs, modulesPath, ... }: { + imports = [ + ../profiles/base + (modulesPath + "/profiles/minimal.nix") + (modulesPath + "/profiles/qemu-guest.nix") + (modulesPath + "/installer/cd-dvd/iso-image.nix") + inputs.colmena.nixosModules.deploymentOptions + inputs.sops-nix.nixosModules.default + ]; + + nixpkgs.hostPlatform = system; + system.stateVersion = "24.05"; + + isoImage = { + makeEfiBootable = true; + forceTextMode = true; + isoBaseName = "nixos-cloudinit-entropia"; + }; + + networking = { + useDHCP = true; + useNetworkd = true; + }; + + services.cloud-init = { + enable = true; + network.enable = true; + settings = { + cloud_init_modules = lib.mkForce [ + "seed_random" + "bootcmd" + "resolv_conf" + "rsyslog" + "users-groups" + "ssh" + ]; + + cloud_config_modules = lib.mkForce [ + "set-passwords" + "timezone" + "disable_ec2_metadata" + ]; + + cloud_final_modules = lib.mkForce [ + "final-message" + ]; + + }; + }; + }) + ]; + }).config.system.build.isoImage; + }; +}