Add function to generate machine option lists + use it for services.
This commit is contained in:
parent
e6efbd736d
commit
13a25fe675
2 changed files with 12 additions and 6 deletions
7
fn.nix
7
fn.nix
|
@ -69,4 +69,11 @@ rec {
|
|||
true)
|
||||
))
|
||||
ld);
|
||||
makeOptionTypeList = path: (lists.forEach
|
||||
# get a list of all files ending in .nix in path
|
||||
(filter (filePath: hasSuffix ".nix" filePath)
|
||||
(lsfRec path true))
|
||||
# remove leading path and trailing ".nix", replace every slash with "::"
|
||||
(replaceStrings [ "${path}/" "/" ".nix" ] [ "" "::" "" ])
|
||||
);
|
||||
}
|
||||
|
|
|
@ -5,9 +5,8 @@ with lib;
|
|||
|
||||
let
|
||||
cfg = config.machine;
|
||||
metapkgs = let
|
||||
pPath = (toString ../pkgsets);
|
||||
in (lists.forEach (fn.lsfRec pPath true) (v: replaceStrings [ "${pPath}/" "/" ".nix" ] [ "" "::" "" ] v));
|
||||
pkgsetList = fn.makeOptionTypeList (toString ../pkgsets);
|
||||
serviceList = fn.makeOptionTypeList (toString ../services);
|
||||
pkgOption = pname: {
|
||||
name = pname;
|
||||
value = rec {
|
||||
|
@ -30,16 +29,16 @@ let
|
|||
in {
|
||||
options.machine = {
|
||||
pkgs = mkOption {
|
||||
type = (types.listOf (types.enum metapkgs));
|
||||
type = (types.listOf (types.enum pkgsetList));
|
||||
default = [ "base" ];
|
||||
description = ''
|
||||
The list of metapackages to be installed.
|
||||
'';
|
||||
};
|
||||
# Package names containing '::' are sub packages and should not have their own pkgset.
|
||||
pkgsets = listToAttrs (map pkgOption (lists.filter (v: !(strings.hasInfix "::" v)) metapkgs));
|
||||
pkgsets = listToAttrs (map pkgOption (lists.filter (v: !(strings.hasInfix "::" v)) pkgsetList));
|
||||
services = mkOption {
|
||||
type = types.listOf types.str;
|
||||
type = (types.listOf (types.enum serviceList));
|
||||
default = [];
|
||||
description = ''
|
||||
List of services to be enabled.
|
||||
|
|
Loading…
Reference in a new issue