bat: support list settings and shell escaping

Fixes #2262
This commit is contained in:
Robert Helgesson 2021-08-12 21:24:19 +02:00
parent 604561ba9a
commit 3d93e1e802
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
4 changed files with 54 additions and 5 deletions

View file

@ -6,6 +6,11 @@ let
cfg = config.programs.bat; cfg = config.programs.bat;
toConfigFile = generators.toKeyValue {
mkKeyValue = k: v: "--${k}=${lib.escapeShellArg v}";
listsAsDuplicateKeys = true;
};
in { in {
meta.maintainers = [ maintainers.marsam ]; meta.maintainers = [ maintainers.marsam ];
@ -13,11 +18,12 @@ in {
enable = mkEnableOption "bat, a cat clone with wings"; enable = mkEnableOption "bat, a cat clone with wings";
config = mkOption { config = mkOption {
type = types.attrsOf types.str; type = with types; attrsOf (either str (listOf str));
default = { }; default = { };
example = { example = {
theme = "TwoDark"; theme = "TwoDark";
pager = "less -FR"; pager = "less -FR";
map-syntax = [ "*.jenkinsfile:Groovy" "*.props:Java Properties" ];
}; };
description = '' description = ''
Bat configuration. Bat configuration.
@ -48,10 +54,8 @@ in {
home.packages = [ pkgs.bat ]; home.packages = [ pkgs.bat ];
xdg.configFile = mkMerge ([{ xdg.configFile = mkMerge ([{
"bat/config" = mkIf (cfg.config != { }) { "bat/config" =
text = concatStringsSep "\n" mkIf (cfg.config != { }) { text = toConfigFile cfg.config; };
(mapAttrsToList (n: v: ''--${n}="${v}"'') cfg.config);
};
}] ++ flip mapAttrsToList cfg.themes }] ++ flip mapAttrsToList cfg.themes
(name: body: { "bat/themes/${name}.tmTheme" = { text = body; }; })); (name: body: { "bat/themes/${name}.tmTheme" = { text = body; }; }));
}; };

View file

@ -45,6 +45,7 @@ import nmt {
./modules/programs/aria2 ./modules/programs/aria2
./modules/programs/autojump ./modules/programs/autojump
./modules/programs/bash ./modules/programs/bash
./modules/programs/bat
./modules/programs/browserpass ./modules/programs/browserpass
./modules/programs/dircolors ./modules/programs/dircolors
./modules/programs/direnv ./modules/programs/direnv

View file

@ -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.
''
}
'';
};
}

View file

@ -0,0 +1 @@
{ bat = ./bat.nix; }