{ config, lib, pkgs, ... }: with lib; let cfg = config.programs.scmpuff; in { meta.maintainers = [ maintainers.cpcloud ]; options.programs.scmpuff = { enable = mkEnableOption '' scmpuff, a command line tool that allows you to work quicker with Git by substituting numeric shortcuts for files''; package = mkOption { type = types.package; default = pkgs.scmpuff; defaultText = literalExpression "pkgs.scmpuff"; description = "Package providing the {command}`scmpuff` tool."; }; enableBashIntegration = mkOption { default = true; type = types.bool; description = '' Whether to enable Bash integration. ''; }; enableZshIntegration = mkOption { default = true; type = types.bool; description = '' Whether to enable Zsh integration. ''; }; enableFishIntegration = mkOption { default = true; type = types.bool; description = '' Whether to enable fish integration. ''; }; enableAliases = mkOption { default = true; type = types.bool; description = '' Whether to enable aliases (e.g. gs, ga, gd, gco). ''; }; }; config = mkIf cfg.enable (let mkArgs = shell: concatStringsSep " " ([ "--shell=${shell}" ] ++ optional (!cfg.enableAliases) "--aliases=false"); in { home.packages = [ cfg.package ]; programs.bash.initExtra = mkIf cfg.enableBashIntegration '' eval "$(${cfg.package}/bin/scmpuff init ${mkArgs "bash"})" ''; programs.zsh.initExtra = mkIf cfg.enableZshIntegration '' eval "$(${cfg.package}/bin/scmpuff init ${mkArgs "zsh"})" ''; programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration (mkAfter '' ${cfg.package}/bin/scmpuff init ${mkArgs "fish"} | source ''); }); }