aboutsummaryrefslogtreecommitdiff
path: root/home-manager/modules/misc/vte.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/modules/misc/vte.nix')
-rw-r--r--home-manager/modules/misc/vte.nix51
1 files changed, 51 insertions, 0 deletions
diff --git a/home-manager/modules/misc/vte.nix b/home-manager/modules/misc/vte.nix
new file mode 100644
index 00000000000..fbe38c0163e
--- /dev/null
+++ b/home-manager/modules/misc/vte.nix
@@ -0,0 +1,51 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ meta.maintainers = [ maintainers.rycee ];
+
+ options.programs = let
+ description = ''
+ Whether to enable integration with terminals using the VTE
+ library. This will let the terminal track the current working
+ directory.
+ '';
+ in {
+ bash.enableVteIntegration = mkEnableOption "" // { inherit description; };
+
+ zsh.enableVteIntegration = mkEnableOption "" // { inherit description; };
+ };
+
+ config = mkMerge [
+ (mkIf config.programs.bash.enableVteIntegration {
+ # Unfortunately we have to do a little dance here to fix two
+ # problems with the upstream vte.sh file:
+ #
+ # - It does `PROMPT_COMMAND="__vte_prompt_command"` which
+ # clobbers any previously assigned prompt command.
+ #
+ # - Its `__vte_prompt_command` function runs commands that will
+ # overwrite the exit status of the command the user ran.
+ programs.bash.initExtra = ''
+ __HM_PROMPT_COMMAND="''${PROMPT_COMMAND:+''${PROMPT_COMMAND%;};}__hm_vte_prompt_command"
+ . ${pkgs.vte}/etc/profile.d/vte.sh
+ if [[ $(type -t __vte_prompt_command) = function ]]; then
+ __hm_vte_prompt_command() {
+ local old_exit_status=$?
+ __vte_prompt_command
+ return $old_exit_status
+ }
+ PROMPT_COMMAND="$__HM_PROMPT_COMMAND"
+ fi
+ unset __HM_PROMPT_COMMAND
+ '';
+ })
+
+ (mkIf config.programs.zsh.enableVteIntegration {
+ programs.zsh.initExtra = ''
+ . ${pkgs.vte}/etc/profile.d/vte.sh
+ '';
+ })
+ ];
+}