From 90896ca0b34cdf1379a5b35fbcbffe704c4b259b Mon Sep 17 00:00:00 2001 From: Zynh Ludwig Date: Sat, 3 Aug 2024 02:48:31 -0700 Subject: [PATCH] tmux-sessionizer: module init --- home/modules/default.nix | 1 + home/modules/tmux-sessionizer.nix | 59 +++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 home/modules/tmux-sessionizer.nix diff --git a/home/modules/default.nix b/home/modules/default.nix index bbb1fa7..10b428f 100644 --- a/home/modules/default.nix +++ b/home/modules/default.nix @@ -19,6 +19,7 @@ in snowhawk.user.enable = lib.mkDefault true; snowhawk.tmux.enable = lib.mkDefault true; + snowhawk.tmux.sessionizer.enable = lib.mkDefault true; snowhawk.fish.enable = lib.mkDefault true; snowhawk.git.enable = lib.mkDefault true; snowhawk.lazygit.enable = lib.mkDefault true; diff --git a/home/modules/tmux-sessionizer.nix b/home/modules/tmux-sessionizer.nix new file mode 100644 index 0000000..7023b2c --- /dev/null +++ b/home/modules/tmux-sessionizer.nix @@ -0,0 +1,59 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.snowhawk.tmux.sessionizer; + tmuxCfg = config.snowhawk.tmux; + + enable = cfg.enable && tmuxCfg.enable; +in +{ + options = { + snowhawk.tmux.sessionizer = { + enable = lib.mkEnableOption "tmux-sessionizer home-manager module"; + + pkg = lib.mkOption { + type = lib.types.package; + description = '' + tmux-sessionizer binary package + ''; + }; + }; + }; + + config = lib.mkIf enable { + + snowhawk.tmux.sessionizer.pkg = + let + tmux = "${pkgs.tmux}/bin/tmux"; + pgrep = "${pkgs.procps}/bin/pgrep"; + basename = "${pkgs.coreutils}/bin/basename"; + tr = "${pkgs.coreutils}/bin/tr"; + in + lib.mkDefault (pkgs.writeShellScriptBin "tmux-sessionizer" '' + if [[ $# -eq 1 ]]; then + selected=$1 + else + selected=$(find "$(readlink -f ~/projects)" ~/ ~/.config ~/.suckless/ -mindepth 1 -maxdepth 1 -type d | fzf) + fi + + if [[ -z $selected ]]; then + exit 0 + fi + + selected_name=$(${basename} "$selected" | ${tr} . _) + tmux_running=$(${pgrep} tmux) + + if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then + ${tmux} new-session -s "$selected_name" -c "$selected" + exit 0 + fi + + if ! ${tmux} has-session -t="$selected_name" 2>/dev/null; then + ${tmux} new-session -ds "$selected_name" -c "$selected" + fi + + ${tmux} switch-client -t "$selected_name" + ''); + + }; +}