Files
dotfiles/tests/registry.nix
T
2026-07-27 12:34:20 +09:00

140 lines
4.0 KiB
Nix

{
inputs,
lib,
pkgs,
}:
let
registry = import ../libs/registry.nix {
inherit inputs lib;
modulesRoot = ./fixtures/registry/modules;
};
hostLib = import ../libs/hosts.nix {
inherit inputs lib registry;
};
baseModule = {
options = {
home = {
username = lib.mkOption { type = lib.types.str; };
homeDirectory = lib.mkOption { type = lib.types.str; };
stateVersion = lib.mkOption { type = lib.types.str; };
};
};
};
eval =
class: selected:
lib.evalModules {
specialArgs = {
inherit pkgs;
marker = "special-arg";
};
modules = [
baseModule
(registry.mkModule { inherit class; })
(registry.mkSelectionModule selected)
];
};
nixos = eval "nixos" [ "profiles.interface.test" ];
darwin = eval "darwin" [ "applications.alpha" ];
home = eval "home" [ "profiles.interface.test" ];
nixosHost = hostLib.mkNixos "registry-test" {
system = "x86_64-linux";
stateVersion = "26.05";
user = "test";
path = ./fixtures/registry/hosts;
profiles = [ "interface.test" ];
};
darwinHost = hostLib.mkDarwin "registry-test-darwin" {
system = "aarch64-darwin";
stateVersion = "26.05";
user = "test";
path = ./fixtures/registry/hosts;
applications = [ "alpha" ];
};
missingUnit = builtins.tryEval (
builtins.deepSeq (registry.validateUnitIds [ "applications.missing" ]) true
);
invalidDependencyRegistry = import ../libs/registry.nix {
inherit inputs lib;
modulesRoot = ./fixtures/registry-invalid-dependency/modules;
};
missingDependency = builtins.tryEval (builtins.deepSeq invalidDependencyRegistry.unitIds true);
invalidFragmentRegistry = import ../libs/registry.nix {
inherit inputs lib;
modulesRoot = ./fixtures/registry-invalid-fragment/modules;
};
invalidFragmentEvaluation = lib.evalModules {
modules = [
(invalidFragmentRegistry.mkModule { class = "home"; })
(invalidFragmentRegistry.mkSelectionModule [ "applications.broken" ])
];
};
invalidFragment = builtins.tryEval (builtins.deepSeq invalidFragmentEvaluation.config true);
assertions =
assert
registry.unitIds == [
"applications.alpha"
"applications.beta"
"profiles.interface.test"
"services.nested"
"users.test"
];
assert !(builtins.elem "namespace" registry.unitIds);
assert nixos.config.my.profiles.interface.test.enable;
assert nixos.config.my.applications.alpha.enable;
assert nixos.config.my.applications.beta.enable;
assert nixos.config.my.services.nested.enable;
assert nixos.config.test.nested;
assert
nixos.config.test.systemValues == [
"common:special-arg"
"nixos"
];
assert nixos.config.test.external == "set-by-nixos-fragment";
assert
darwin.config.test.systemValues == [
"common:special-arg"
"darwin"
];
assert
home.config.test.homeValues == [
"home"
"beta-home"
];
assert nixosHost.config.my.profiles.interface.test.enable;
assert nixosHost.config.system.stateVersion == "26.05";
assert nixosHost.config.home-manager.users.test.home.stateVersion == "26.05";
assert nixosHost.config.home-manager.users.test.my.applications.alpha.enable;
assert
nixosHost.config.home-manager.users.test.test.homeValues == [
"home"
"beta-home"
];
assert darwinHost.config.my.applications.alpha.enable;
assert darwinHost.config.home-manager.users.test.home.stateVersion == "26.05";
assert darwinHost.config.home-manager.users.test.my.applications.alpha.enable;
assert darwinHost.config.home-manager.users.test.test.homeValues == [ "home" ];
assert
darwinHost.config.test.systemValues == [
"common:host"
"darwin"
];
assert !missingUnit.success;
assert !missingDependency.success;
assert !invalidFragment.success;
true;
in
assert assertions;
pkgs.runCommand "unit-registry-evaluation-tests" { } ''
touch "$out"
''