2023-01-10 09:35:00 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
|
|
let
|
|
|
|
cfg = config.programs.pistol;
|
|
|
|
|
|
|
|
configFile = concatStringsSep "\n" (map ({ fpath, mime, command }:
|
|
|
|
if fpath == "" then "${mime} ${command}" else "fpath ${fpath} ${command}")
|
|
|
|
cfg.associations);
|
|
|
|
|
|
|
|
association = types.submodule {
|
|
|
|
options = {
|
|
|
|
command = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
description = "Preview command for files matched by this association.";
|
|
|
|
};
|
|
|
|
|
|
|
|
fpath = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
default = "";
|
|
|
|
description = "File path regex that this association should match.";
|
|
|
|
};
|
|
|
|
|
|
|
|
mime = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
default = "";
|
|
|
|
description = "Mime type regex that this association should match.";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
in {
|
|
|
|
imports = [
|
|
|
|
(mkRemovedOptionModule [ "programs" "pistol" "config" ]
|
|
|
|
"Pistol is now configured with programs.pistol.associations.")
|
|
|
|
];
|
|
|
|
|
|
|
|
meta.maintainers = [ hm.maintainers.mtoohey ];
|
|
|
|
|
|
|
|
options.programs.pistol = {
|
|
|
|
enable = mkEnableOption "file previewer for terminal file managers";
|
|
|
|
|
|
|
|
associations = mkOption {
|
|
|
|
type = types.listOf association;
|
|
|
|
default = [ ];
|
|
|
|
example = literalExpression ''
|
|
|
|
[
|
|
|
|
{ mime = "application/json"; command = "bat %pistol-filename%"; }
|
|
|
|
{ mime = "application/*"; command = "hexyl %pistol-filename%"; }
|
|
|
|
{ fpath = ".*.md$"; command = "sh: bat --paging=never --color=always %pistol-filename% | head -8"; }
|
|
|
|
]
|
|
|
|
'';
|
|
|
|
description = ''
|
|
|
|
Associations written to the Pistol configuration at
|
2023-08-08 10:19:01 +00:00
|
|
|
{file}`$XDG_CONFIG_HOME/pistol/pistol.conf`.
|
2023-01-10 09:35:00 +00:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable (mkMerge [
|
|
|
|
{
|
|
|
|
assertions = [{
|
|
|
|
assertion = all ({ fpath, mime, ... }:
|
|
|
|
(fpath != "" && mime == "") || (fpath == "" && mime != ""))
|
|
|
|
cfg.associations;
|
|
|
|
message = ''
|
|
|
|
Each entry in programs.pistol.associations must contain exactly one
|
|
|
|
of fpath or mime.
|
|
|
|
'';
|
|
|
|
}];
|
|
|
|
|
|
|
|
home.packages = [ pkgs.pistol ];
|
|
|
|
}
|
|
|
|
|
|
|
|
(mkIf (cfg.associations != [ ] && pkgs.stdenv.hostPlatform.isDarwin) {
|
|
|
|
home.file."Library/Application Support/pistol/pistol.conf".text =
|
|
|
|
configFile;
|
|
|
|
})
|
|
|
|
|
|
|
|
(mkIf (cfg.associations != [ ] && !pkgs.stdenv.hostPlatform.isDarwin) {
|
|
|
|
xdg.configFile."pistol/pistol.conf".text = configFile;
|
|
|
|
})
|
|
|
|
]);
|
|
|
|
}
|