122 lines
2.8 KiB
Nix
122 lines
2.8 KiB
Nix
{
|
|
pkgs,
|
|
config,
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
inherit (builtins) isList elem;
|
|
inherit (lib)
|
|
getExe
|
|
literalExpression
|
|
maintainers
|
|
mapAttrs'
|
|
mkEnableOption
|
|
mkIf
|
|
mkOption
|
|
mkPackageOption
|
|
nameValuePair
|
|
optionalString
|
|
types
|
|
;
|
|
inherit (types) listOf package;
|
|
|
|
cfg = config.programs.bat;
|
|
|
|
settingsFormat = pkgs.formats.keyValue { listsAsDuplicateKeys = true; };
|
|
inherit (settingsFormat) generate type;
|
|
|
|
initScript =
|
|
{
|
|
program,
|
|
shell,
|
|
flags ? [ ],
|
|
}:
|
|
if (shell != "fish") then
|
|
''
|
|
eval "$(${getExe program} ${toString flags})"
|
|
''
|
|
else
|
|
''
|
|
${getExe program} ${toString flags} | source
|
|
'';
|
|
|
|
shellInit =
|
|
shell:
|
|
optionalString (elem pkgs.bat-extras.batpipe cfg.extraPackages) (initScript {
|
|
program = pkgs.bat-extras.batpipe;
|
|
inherit shell;
|
|
})
|
|
+ optionalString (elem pkgs.bat-extras.batman cfg.extraPackages) (initScript {
|
|
program = pkgs.bat-extras.batman;
|
|
inherit shell;
|
|
flags = [ "--export-env" ];
|
|
});
|
|
in
|
|
{
|
|
options.programs.bat = {
|
|
enable = mkEnableOption "`bat`, a {manpage}`cat(1)` clone with wings";
|
|
|
|
package = mkPackageOption pkgs "bat" { };
|
|
|
|
extraPackages = mkOption {
|
|
default = [ ];
|
|
example = literalExpression ''
|
|
with pkgs.bat-extras; [
|
|
batdiff
|
|
batman
|
|
prettybat
|
|
];
|
|
'';
|
|
description = ''
|
|
Extra `bat` scripts to be added to the system configuration.
|
|
'';
|
|
type = listOf package;
|
|
};
|
|
|
|
settings = mkOption {
|
|
default = { };
|
|
example = {
|
|
theme = "TwoDark";
|
|
italic-text = "always";
|
|
paging = "never";
|
|
pager = "less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse";
|
|
map-syntax = [
|
|
"*.ino:C++"
|
|
".ignore:Git Ignore"
|
|
];
|
|
};
|
|
description = ''
|
|
Parameters to be written to the system-wide `bat` configuration file.
|
|
'';
|
|
inherit type;
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
environment = {
|
|
systemPackages = [ cfg.package ] ++ cfg.extraPackages;
|
|
etc."bat/config".source = generate "bat-config" (
|
|
mapAttrs' (
|
|
name: value:
|
|
nameValuePair ("--" + name) (
|
|
if (isList value) then map (str: "\"${str}\"") value else "\"${value}\""
|
|
)
|
|
) cfg.settings
|
|
);
|
|
};
|
|
|
|
programs = {
|
|
bash = mkIf (!config.programs.fish.enable) {
|
|
interactiveShellInit = shellInit "bash";
|
|
};
|
|
fish = mkIf config.programs.fish.enable {
|
|
interactiveShellInit = shellInit "fish";
|
|
};
|
|
zsh = mkIf (!config.programs.fish.enable && config.programs.zsh.enable) {
|
|
interactiveShellInit = shellInit "zsh";
|
|
};
|
|
};
|
|
};
|
|
meta.maintainers = with maintainers; [ sigmasquadron ];
|
|
}
|