mirror of
https://github.com/nix-community/home-manager
synced 2024-11-30 23:19:47 +01:00
52 lines
1.6 KiB
Nix
52 lines
1.6 KiB
Nix
|
{ 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
|
||
|
'';
|
||
|
})
|
||
|
];
|
||
|
}
|