forked from Fediversity/Fediversity
Closes #103 At last, a fully fledged data model for what Fediversity really is and does. This comes with a test that exercises a very simple but functionally complete arrangement with all ingredients fo the business logic: a dummy resource (login shell), a dummy application (`hello`, which needs a shell to live in), a dummy environment (a single NixOS VM that allows for one, the operator's, login shell), and a deployment of that environment given a dummy configuration (that enables `hello`). The next step will be to lift this purely evaluation-level test into a VM test which verifies that the resulting VM indeed has `hello` deployed to the operator's user account. Caveats: - The exact naming has a bit of room for improvement, and may have diverged from the design document - The test is not as pedantically type safe as it could be, since we simply use `types.raw` for resources such as NixOS users settings which *could* be more finely delineated Co-authored-by: Kiara Grouwstra <kiara@procolix.eu> Co-authored-by: kiara Grouwstra <kiara@procolix.eu> Reviewed-on: Fediversity/Fediversity#481 Reviewed-by: kiara Grouwstra <kiara@procolix.eu> Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io> Co-committed-by: Valentin Gagarin <valentin.gagarin@tweag.io>
36 lines
633 B
Nix
36 lines
633 B
Nix
/**
|
|
Modular function type
|
|
*/
|
|
{ config, lib, ... }:
|
|
let
|
|
inherit (lib) mkOption types;
|
|
inherit (types)
|
|
submodule
|
|
functionTo
|
|
optionType
|
|
;
|
|
in
|
|
{
|
|
options = {
|
|
input-type = mkOption {
|
|
type = optionType;
|
|
};
|
|
output-type = mkOption {
|
|
type = optionType;
|
|
};
|
|
function-type = mkOption {
|
|
type = optionType;
|
|
readOnly = true;
|
|
default = functionTo (submodule {
|
|
options = {
|
|
input = mkOption {
|
|
type = config.input-type;
|
|
};
|
|
output = mkOption {
|
|
type = config.output-type;
|
|
};
|
|
};
|
|
});
|
|
};
|
|
};
|
|
}
|