diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ab79da03..4a890f1f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -97,6 +97,8 @@ /modules/programs/zathura.nix @rprospero +/modules/programs/zoxide.nix @marsam + /modules/services/cbatticon.nix @pmiddend /modules/services/dunst.nix @rycee diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 57840fcb..933446aa 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1520,6 +1520,13 @@ in A new module is available: 'programs.dircolors' ''; } + + { + time = "2020-05-26T17:13:58+00:00"; + message = '' + A new module is available: 'programs.zoxide' + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 1ca6fe4c..1f4deefe 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -116,6 +116,7 @@ let (loadModule ./programs/vscode/haskell.nix { }) (loadModule ./programs/z-lua.nix { }) (loadModule ./programs/zathura.nix { }) + (loadModule ./programs/zoxide.nix { }) (loadModule ./programs/zsh.nix { }) (loadModule ./services/blueman-applet.nix { }) (loadModule ./services/cbatticon.nix { condition = hostPlatform.isLinux; }) diff --git a/modules/programs/zoxide.nix b/modules/programs/zoxide.nix new file mode 100644 index 00000000..842ff109 --- /dev/null +++ b/modules/programs/zoxide.nix @@ -0,0 +1,79 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.zoxide; + +in { + meta.maintainers = [ maintainers.marsam ]; + + options.programs.zoxide = { + enable = mkEnableOption "zoxide"; + + package = mkOption { + type = types.package; + default = pkgs.zoxide; + defaultText = literalExample "pkgs.zoxide"; + description = '' + Zoxide package to install. + ''; + }; + + options = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ "--no-aliases" ]; + description = '' + List of options to pass to zoxide. + ''; + }; + + 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. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + programs.bash.initExtra = mkIf cfg.enableBashIntegration '' + eval "$(${cfg.package}/bin/zoxide init bash ${ + concatStringsSep " " cfg.options + })" + ''; + + programs.zsh.initExtra = mkIf cfg.enableZshIntegration '' + eval "$(${cfg.package}/bin/zoxide init zsh ${ + concatStringsSep " " cfg.options + })" + ''; + + programs.fish.shellInit = mkIf cfg.enableFishIntegration '' + ${cfg.package}/bin/zoxide init fish ${ + concatStringsSep " " cfg.options + } | source + ''; + }; +}