From 3ac7941968e20ebaf553a7e44f8dbfb990de4eb1 Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 28 Feb 2018 14:30:11 +0100 Subject: types: refactor source --- lib/types.nix | 102 ++++++++++++++++++++++++++-------------------------------- 1 file changed, 45 insertions(+), 57 deletions(-) (limited to 'lib') diff --git a/lib/types.nix b/lib/types.nix index b85794925..9ae92ea7e 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -2,7 +2,7 @@ let inherit (lib) - all any concatMapStringsSep concatStringsSep const filter flip + all any attrNames concatMapStringsSep concatStringsSep const filter flip genid hasSuffix head isInt isString length mergeOneOption mkOption mkOptionType optional optionalAttrs optionals range splitString stringLength substring test testString typeOf; @@ -231,90 +231,78 @@ rec { source = submodule ({ config, ... }: { options = { type = let - types = [ - "file" - "git" - "pass" - "symlink" - ]; + known-types = attrNames source-types; + type-candidates = filter (k: config.${k} != null) known-types; in mkOption { - type = enum types; - default = let - cands = filter (k: config.${k} != null) types; - in - if length cands == 1 - then head cands - else throw "cannot determine type"; - }; - file = let - file-path = (file-source.getSubOptions "FIXME").path.type; - in mkOption { - type = nullOr (either file-source file-path); - default = null; + default = if length type-candidates == 1 + then head type-candidates + else throw "cannot determine type"; + type = enum known-types; + }; + file = mkOption { apply = x: - if file-path.check x + if absolute-pathname.check x then { path = x; } else x; + default = null; + type = nullOr (either absolute-pathname source-types.file); }; git = mkOption { - type = nullOr git-source; default = null; + type = nullOr source-types.git; }; pass = mkOption { - type = nullOr pass-source; default = null; + type = nullOr source-types.pass; }; - symlink = let - symlink-target = (symlink-source.getSubOptions "FIXME").target.type; - in mkOption { - type = nullOr (either symlink-source symlink-target); + symlink = mkOption { + type = nullOr (either pathname source-types.symlink); default = null; apply = x: - if symlink-target.check x + if pathname.check x then { target = x; } else x; }; }; }); - file-source = submodule { - options = { - path = mkOption { - type = absolute-pathname; + source-types = { + file = submodule { + options = { + path = mkOption { + type = absolute-pathname; + }; }; }; - }; - - git-source = submodule { - options = { - ref = mkOption { - type = str; # TODO types.git.ref - }; - url = mkOption { - type = str; # TODO types.git.url + git = submodule { + options = { + ref = mkOption { + type = str; # TODO types.git.ref + }; + url = mkOption { + type = str; # TODO types.git.url + }; }; }; - }; - - pass-source = submodule { - options = { - dir = mkOption { - type = absolute-pathname; - }; - name = mkOption { - type = pathname; # TODO relative-pathname + pass = submodule { + options = { + dir = mkOption { + type = absolute-pathname; + }; + name = mkOption { + type = pathname; # TODO relative-pathname + }; }; }; - }; - - symlink-source = submodule { - options = { - target = mkOption { - type = pathname; # TODO relative-pathname + symlink = submodule { + options = { + target = mkOption { + type = pathname; # TODO relative-pathname + }; }; }; - }; + }; suffixed-str = suffs: mkOptionType { -- cgit v1.2.3 From dd4fac0fa477c7e3da10aef705d4b1757369d11d Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 28 Feb 2018 14:15:29 +0100 Subject: populate: 2.1.0 -> 2.3.0 --- lib/types.nix | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'lib') diff --git a/lib/types.nix b/lib/types.nix index 9ae92ea7e..1cf2d96c9 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -255,6 +255,14 @@ rec { default = null; type = nullOr source-types.pass; }; + pipe = mkOption { + apply = x: + if absolute-pathname.check x + then { command = x; } + else x; + default = null; + type = nullOr (either absolute-pathname source-types.pipe); + }; symlink = mkOption { type = nullOr (either pathname source-types.symlink); default = null; @@ -294,6 +302,13 @@ rec { }; }; }; + pipe = submodule { + options = { + command = mkOption { + type = absolute-pathname; + }; + }; + }; symlink = submodule { options = { target = mkOption { -- cgit v1.2.3 [cgit] Unable to lock slot /tmp/cgit/3b300000.lock: No such file or directory (2)