{ config, lib, pkgs, ... }: with lib; let cfg = config.programs.pistol; configFile = concatStringsSep "\n" (mapAttrsToList (k: v: "${k} ${v}") cfg.config); in { meta.maintainers = [ hm.maintainers.mtoohey ]; options.programs.pistol = { enable = mkEnableOption '' Pistol, a general purpose file previewer designed for terminal file managers''; config = mkOption { type = with types; attrsOf str; default = { }; example = literalExpression '' { "text/*" = "bat --paging=never --color=always %pistol-filename%"; "inode/directory" = "ls -l --color %pistol-filename%"; } ''; description = '' Pistol configuration written to $XDG_CONFIG_HOME/pistol/pistol.conf. ''; }; }; config = mkIf cfg.enable (mkMerge [ { home.packages = [ pkgs.pistol ]; } (mkIf (cfg.config != { } && pkgs.stdenv.hostPlatform.isDarwin) { home.file."Library/Application Support/pistol/pistol.conf".text = configFile; }) (mkIf (cfg.config != { } && !pkgs.stdenv.hostPlatform.isDarwin) { xdg.configFile."pistol/pistol.conf".text = configFile; }) ]); }