Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.
123 lines
2.8 KiB
Nix
123 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 ];
|
|||
}
|