1
0
Fork 0
mirror of https://github.com/hercules-ci/flake-parts.git synced 2024-12-14 11:47:31 +00:00
flake-parts/lib.nix

71 lines
2 KiB
Nix
Raw Normal View History

2021-10-27 09:05:52 +00:00
{ lib }:
let
inherit (lib)
mkOption
types
;
# Polyfill functionTo to make sure it has type merging.
# Remove 2022-12
functionTo =
let sample = types.functionTo lib.types.str;
in
if sample.functor.wrapped._type or null == "option-type"
then types.functionTo
else
elemType: lib.mkOptionType {
name = "functionTo";
description = "function that evaluates to a(n) ${elemType.description}";
check = lib.isFunction;
merge = loc: defs:
fnArgs: (lib.mergeDefinitions (loc ++ [ "[function body]" ]) elemType (map (fn: { inherit (fn) file; value = fn.value fnArgs; }) defs)).mergedValue;
getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "[function body]" ]);
getSubModules = elemType.getSubModules;
substSubModules = m: functionTo (elemType.substSubModules m);
functor = (lib.defaultFunctor "functionTo") // { type = functionTo; wrapped = elemType; };
nestedTypes.elemType = elemType;
};
2022-05-25 14:36:33 +00:00
flake-parts-lib = {
2021-10-27 09:05:52 +00:00
evalFlakeModule =
{ self
, specialArgs ? { }
}:
module:
lib.evalModules {
2022-05-25 14:36:33 +00:00
specialArgs = { inherit self flake-parts-lib; inherit (self) inputs; } // specialArgs;
2021-10-27 09:05:52 +00:00
modules = [ ./all-modules.nix module ];
};
2021-11-21 14:47:11 +00:00
mkFlake = args: module:
2022-05-25 14:36:33 +00:00
(flake-parts-lib.evalFlakeModule args module).config.flake;
2021-11-21 14:47:11 +00:00
# For extending options in an already declared submodule.
# Workaround for https://github.com/NixOS/nixpkgs/issues/146882
mkSubmoduleOptions =
options:
mkOption {
type = types.submoduleWith {
2022-05-17 08:28:03 +00:00
modules = [{ inherit options; }];
2021-11-21 14:47:11 +00:00
};
};
2022-05-17 08:28:03 +00:00
2022-05-13 08:14:10 +00:00
mkPerSystemType =
module:
functionTo (types.submoduleWith {
2022-05-13 08:14:10 +00:00
modules = [ module ];
shorthandOnlyDefinesConfig = false;
});
2022-05-13 08:15:21 +00:00
mkPerSystemOption =
2022-05-13 08:14:10 +00:00
module:
mkOption {
2022-05-25 14:36:33 +00:00
type = flake-parts-lib.mkPerSystemType module;
2022-05-13 08:14:10 +00:00
};
2021-10-27 09:05:52 +00:00
};
2021-11-21 14:47:11 +00:00
2021-10-27 09:05:52 +00:00
in
2022-05-25 14:36:33 +00:00
flake-parts-lib