From 3d93e1e80274fd014cbdae510c0ca3b07bcfc9b6 Mon Sep 17 00:00:00 2001 From: Robert Helgesson Date: Thu, 12 Aug 2021 21:24:19 +0200 Subject: [PATCH] bat: support list settings and shell escaping Fixes #2262 --- modules/programs/bat.nix | 14 ++++++--- tests/default.nix | 1 + tests/modules/programs/bat/bat.nix | 43 ++++++++++++++++++++++++++ tests/modules/programs/bat/default.nix | 1 + 4 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 tests/modules/programs/bat/bat.nix create mode 100644 tests/modules/programs/bat/default.nix diff --git a/modules/programs/bat.nix b/modules/programs/bat.nix index e2b30ea9..2c9c6d0c 100644 --- a/modules/programs/bat.nix +++ b/modules/programs/bat.nix @@ -6,6 +6,11 @@ let cfg = config.programs.bat; + toConfigFile = generators.toKeyValue { + mkKeyValue = k: v: "--${k}=${lib.escapeShellArg v}"; + listsAsDuplicateKeys = true; + }; + in { meta.maintainers = [ maintainers.marsam ]; @@ -13,11 +18,12 @@ in { enable = mkEnableOption "bat, a cat clone with wings"; config = mkOption { - type = types.attrsOf types.str; + type = with types; attrsOf (either str (listOf str)); default = { }; example = { theme = "TwoDark"; pager = "less -FR"; + map-syntax = [ "*.jenkinsfile:Groovy" "*.props:Java Properties" ]; }; description = '' Bat configuration. @@ -48,10 +54,8 @@ in { home.packages = [ pkgs.bat ]; xdg.configFile = mkMerge ([{ - "bat/config" = mkIf (cfg.config != { }) { - text = concatStringsSep "\n" - (mapAttrsToList (n: v: ''--${n}="${v}"'') cfg.config); - }; + "bat/config" = + mkIf (cfg.config != { }) { text = toConfigFile cfg.config; }; }] ++ flip mapAttrsToList cfg.themes (name: body: { "bat/themes/${name}.tmTheme" = { text = body; }; })); }; diff --git a/tests/default.nix b/tests/default.nix index 31ef6250..b95f8f73 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -45,6 +45,7 @@ import nmt { ./modules/programs/aria2 ./modules/programs/autojump ./modules/programs/bash + ./modules/programs/bat ./modules/programs/browserpass ./modules/programs/dircolors ./modules/programs/direnv diff --git a/tests/modules/programs/bat/bat.nix b/tests/modules/programs/bat/bat.nix new file mode 100644 index 00000000..2860d1e6 --- /dev/null +++ b/tests/modules/programs/bat/bat.nix @@ -0,0 +1,43 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + programs.bat = { + enable = true; + + config = { + theme = "TwoDark"; + pager = "less -FR"; + map-syntax = [ "*.jenkinsfile:Groovy" "*.props:Java Properties" ]; + }; + + themes.testtheme = '' + This is a test theme. + ''; + }; + + nixpkgs.overlays = + [ (self: super: { bat = pkgs.writeScriptBin "dummy" ""; }) ]; + + nmt.script = '' + assertFileExists home-files/.config/bat/config + assertFileContent home-files/.config/bat/config ${ + pkgs.writeText "bat.expected" '' + --map-syntax='*.jenkinsfile:Groovy' + --map-syntax='*.props:Java Properties' + --pager='less -FR' + --theme='TwoDark' + '' + } + + assertFileExists home-files/.config/bat/themes/testtheme.tmTheme + assertFileContent home-files/.config/bat/themes/testtheme.tmTheme ${ + pkgs.writeText "bat.expected" '' + This is a test theme. + '' + } + ''; + }; +} diff --git a/tests/modules/programs/bat/default.nix b/tests/modules/programs/bat/default.nix new file mode 100644 index 00000000..001d4bca --- /dev/null +++ b/tests/modules/programs/bat/default.nix @@ -0,0 +1 @@ +{ bat = ./bat.nix; }