feat(tmux): add tmux-sessionizer

nixos
Moritz Böhme 2023-04-26 08:57:59 +02:00
parent af1f1fec2e
commit 414a3a1fdf
Signed by: moritz
GPG Key ID: 970C6E89EB0547A9
1 changed files with 50 additions and 17 deletions

View File

@ -3,6 +3,37 @@
with lib; with lib;
let let
cfg = config.my.programs.tmux; cfg = config.my.programs.tmux;
tmux-sessionizer = pkgs.writeShellApplication {
name = "ts";
runtimeInputs = with pkgs; [ tmux findutils coreutils procps fd ];
text = ''
#!/usr/bin/env bash
if [[ $# -eq 1 ]]; then
selected=$1
else
selected=$(fd -gH '.git' ~/ --min-depth 1 --max-depth 5 --type d --prune --exec dirname {} | fzf)
fi
if [[ -z $selected ]]; then
exit 0
fi
selected_name=$(basename "$selected" | tr . _)
if ! tmux has-session -t="$selected_name" 2> /dev/null; then
tmux new-session -ds "$selected_name" -c "$selected"
fi
if [[ -z ''${TMUX+x} ]]; then
tmux attach -t "$selected_name"
else
tmux switch-client -t "$selected_name"
fi
'';
};
in in
{ {
options.my.programs.tmux = { options.my.programs.tmux = {
@ -12,7 +43,10 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
my.shell.abbreviations.t = "tmux"; my.shell.abbreviations.t = "tmux";
home-manager.users.moritz.programs.tmux = {
home-manager.users.moritz.home.packages = [ tmux-sessionizer ];
home-manager.users.moritz.programs = {
tmux = {
enable = true; enable = true;
clock24 = true; clock24 = true;
customPaneNavigationAndResize = true; customPaneNavigationAndResize = true;
@ -27,7 +61,6 @@ in
yank yank
]; ];
}; };
home-manager.users.moritz.programs = {
fzf.tmux.enableShellIntegration = true; fzf.tmux.enableShellIntegration = true;
fish.interactiveShellInit = fish.interactiveShellInit =
let let
@ -39,11 +72,11 @@ in
if ! fish_is_root_user && test "$TERM_PROGRAM" != 'vscode' && ${insideVariableMissing} if ! fish_is_root_user && test "$TERM_PROGRAM" != 'vscode' && ${insideVariableMissing}
if test -z $tmux_autostarted if test -z $tmux_autostarted
set -x tmux_autostarted true set -x tmux_autostarted true
tmux a ts
end end
end end
''; '';
};
};
};
};
} }