at master 1.8 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 ... 6}: 7let 8 inherit (lib.options) mkEnableOption mkPackageOption mkOption; 9 inherit (lib.modules) mkIf; 10 inherit (lib.meta) getExe; 11 inherit (lib.types) listOf str; 12 inherit (lib.strings) concatStringsSep; 13 14 cfg = config.programs.zoxide; 15 16 cfgFlags = concatStringsSep " " cfg.flags; 17 18in 19{ 20 options.programs.zoxide = { 21 enable = mkEnableOption "zoxide, a smarter cd command that learns your habits"; 22 package = mkPackageOption pkgs "zoxide" { }; 23 24 enableBashIntegration = mkEnableOption "Bash integration" // { 25 default = true; 26 }; 27 enableZshIntegration = mkEnableOption "Zsh integration" // { 28 default = true; 29 }; 30 enableFishIntegration = mkEnableOption "Fish integration" // { 31 default = true; 32 }; 33 enableXonshIntegration = mkEnableOption "Xonsh integration" // { 34 default = true; 35 }; 36 37 flags = mkOption { 38 type = listOf str; 39 default = [ ]; 40 example = [ 41 "--no-cmd" 42 "--cmd j" 43 ]; 44 description = '' 45 List of flags for zoxide init 46 ''; 47 }; 48 49 }; 50 51 config = mkIf cfg.enable { 52 environment.systemPackages = [ cfg.package ]; 53 54 programs = { 55 zsh.interactiveShellInit = mkIf cfg.enableZshIntegration '' 56 eval "$(${getExe cfg.package} init zsh ${cfgFlags} )" 57 ''; 58 bash.interactiveShellInit = mkIf cfg.enableBashIntegration '' 59 eval "$(${getExe cfg.package} init bash ${cfgFlags} )" 60 ''; 61 fish.interactiveShellInit = mkIf cfg.enableFishIntegration '' 62 ${getExe cfg.package} init fish ${cfgFlags} | source 63 ''; 64 xonsh.config = '' 65 execx($(${getExe cfg.package} init xonsh ${cfgFlags}), 'exec', __xonsh__.ctx, filename='zoxide') 66 ''; 67 }; 68 69 }; 70 71 meta.maintainers = with lib.maintainers; [ heisfer ]; 72}