diff --git a/clanModules/packages/README.md b/clanModules/packages/README.md index 0bff44396..59864bee0 100644 --- a/clanModules/packages/README.md +++ b/clanModules/packages/README.md @@ -1,5 +1,5 @@ --- description = "Define package sets from nixpkgs and install them on one or more machines" categories = ["System"] -features = [ "inventory" ] +features = [ "inventory" "deprecated" ] --- diff --git a/clanServices/packages/default.nix b/clanServices/packages/default.nix new file mode 100644 index 000000000..0ff5470c0 --- /dev/null +++ b/clanServices/packages/default.nix @@ -0,0 +1,41 @@ +{ ... }: +{ + _class = "clan.service"; + manifest.name = "clan-core/packages"; + manifest.description = "Define package sets from nixpkgs and install them on one or more machines"; + manifest.categories = [ + "System" + ]; + + roles.default = { + interface = + { lib, ... }: + { + options.packages = lib.mkOption { + + type = lib.types.listOf lib.types.str; + default = [ ]; + example = [ "cowsay" ]; + description = "The packages to install on the machine"; + }; + }; + + perInstance = + { settings, ... }: + { + nixosModule = + { + lib, + pkgs, + ... + }: + { + + environment.systemPackages = map ( + pName: lib.getAttrFromPath (lib.splitString "." pName) pkgs + ) settings.packages; + }; + }; + }; + +} diff --git a/clanServices/packages/flake-module.nix b/clanServices/packages/flake-module.nix new file mode 100644 index 000000000..b27fc1621 --- /dev/null +++ b/clanServices/packages/flake-module.nix @@ -0,0 +1,19 @@ +{ lib, self, ... }: +{ + clan.modules = { + packages = lib.modules.importApply ./default.nix { }; + }; + + perSystem = + { pkgs, ... }: + { + checks = lib.optionalAttrs (pkgs.stdenv.isLinux) { + packages = import ./tests/vm/default.nix { + inherit pkgs; + clan-core = self; + nixosLib = import (self.inputs.nixpkgs + "/nixos/lib") { }; + }; + }; + }; + +} diff --git a/clanServices/packages/tests/vm/default.nix b/clanServices/packages/tests/vm/default.nix new file mode 100644 index 000000000..3448b2376 --- /dev/null +++ b/clanServices/packages/tests/vm/default.nix @@ -0,0 +1,41 @@ +{ + pkgs, + nixosLib, + clan-core, + ... +}: + +nixosLib.runTest ( + { ... }: + { + imports = [ + clan-core.modules.nixosVmTest.clanTest + ]; + + hostPkgs = pkgs; + + name = "packages"; + + clan = { + directory = ./.; + modules."@clan/packages" = ../../default.nix; + inventory = { + machines.server = { }; + + instances.default = { + module.name = "@clan/packages"; + roles.default.machines."server".settings = { + packages = [ "cbonsai" ]; + }; + }; + }; + }; + + nodes.server = { }; + + testScript = '' + start_all() + server.succeed("cbonsai") + ''; + } +) diff --git a/clanServices/packages/tests/vm/sops/users/admin/key.json b/clanServices/packages/tests/vm/sops/users/admin/key.json new file mode 100644 index 000000000..e408aa96b --- /dev/null +++ b/clanServices/packages/tests/vm/sops/users/admin/key.json @@ -0,0 +1,4 @@ +{ + "publickey": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg", + "type": "age" +}