diff --git a/modules/programs/lf.nix b/modules/programs/lf.nix index e7ad02744..995b926f4 100644 --- a/modules/programs/lf.nix +++ b/modules/programs/lf.nix @@ -2,55 +2,7 @@ with lib; -let - cfg = config.programs.lf; - - knownSettings = { - anchorfind = types.bool; - color256 = types.bool; - dircounts = types.bool; - dirfirst = types.bool; - drawbox = types.bool; - globsearch = types.bool; - icons = types.bool; - hidden = types.bool; - ignorecase = types.bool; - ignoredia = types.bool; - incsearch = types.bool; - preview = types.bool; - reverse = types.bool; - smartcase = types.bool; - smartdia = types.bool; - wrapscan = types.bool; - wrapscroll = types.bool; - number = types.bool; - relativenumber = types.bool; - findlen = types.int; - period = types.int; - scrolloff = types.int; - tabstop = types.int; - errorfmt = types.str; - filesep = types.str; - ifs = types.str; - promptfmt = types.str; - shell = types.str; - sortby = types.str; - timefmt = types.str; - ratios = types.str; - info = types.str; - shellopts = types.str; - }; - - lfSettingsType = types.submodule { - options = let - opt = name: type: - mkOption { - type = types.nullOr type; - default = null; - visible = false; - }; - in mapAttrs opt knownSettings; - }; +let cfg = config.programs.lf; in { meta.maintainers = [ hm.maintainers.owm111 ]; @@ -68,27 +20,19 @@ in { }; settings = mkOption { - type = lfSettingsType; + type = with types; + attrsOf (oneOf [ str int (listOf (either str int)) bool ]); default = { }; example = { tabstop = 4; number = true; - ratios = "1:1:2"; + ratios = [ 1 1 2 ]; }; description = '' - An attribute set of lf settings. The attribute names and corresponding - values must be among the following supported options. - - ${concatStringsSep "\n" (mapAttrsToList (n: v: '' - {var}`${n}` - : ${v.description} - '') knownSettings)} - - See the lf documentation for detailed descriptions of these options. - Use {option}`programs.lf.previewer.*` to set lf's - {var}`previewer` option, and - [](#opt-programs.lf.extraConfig) for any other option not listed above. - All string options are quoted with double quotes. + An attribute set of lf settings. See the lf documentation for + detailed descriptions of these options. Prefer + {option}`programs.lf.previewer.*` for setting lf's {var}`previewer` + option. All string options are quoted with double quotes. ''; }; @@ -181,12 +125,14 @@ in { optionalString (v != null) "set ${ if isBool v then "${optionalString (!v) "no"}${k}" + else if isList v then + ''${k} "${concatStringsSep ":" (map (w: toString w) v)}"'' else "${k} ${if isInt v then toString v else ''"${v}"''}" }"; - settingsStr = concatStringsSep "\n" (remove "" (mapAttrsToList fmtSetting - (builtins.intersectAttrs knownSettings cfg.settings))); + settingsStr = concatStringsSep "\n" + (remove "" (mapAttrsToList fmtSetting cfg.settings)); fmtCmdMap = before: k: v: "${before} ${k}${optionalString (v != null && v != "") " ${v}"}"; diff --git a/tests/modules/programs/lf/all-options.nix b/tests/modules/programs/lf/all-options.nix index 35d7901d6..9632e7cf6 100644 --- a/tests/modules/programs/lf/all-options.nix +++ b/tests/modules/programs/lf/all-options.nix @@ -71,7 +71,7 @@ in { ignorecase = false; icons = true; tabstop = 4; - ratios = "2:2:3"; + ratios = [ 2 2 3 ]; }; };