diff --git a/modules/home-manager/profiles/default.nix b/modules/home-manager/profiles/default.nix index fd910d8..8817f85 100644 --- a/modules/home-manager/profiles/default.nix +++ b/modules/home-manager/profiles/default.nix @@ -1,7 +1,7 @@ {...}: { imports = [ ./gfonts.nix - ./gterminal.nix + ./gterminal ./vault ]; options = {}; diff --git a/modules/home-manager/profiles/gterminal.nix b/modules/home-manager/profiles/gterminal/default.nix similarity index 87% rename from modules/home-manager/profiles/gterminal.nix rename to modules/home-manager/profiles/gterminal/default.nix index ef8c4e5..6516adf 100644 --- a/modules/home-manager/profiles/gterminal.nix +++ b/modules/home-manager/profiles/gterminal/default.nix @@ -5,10 +5,24 @@ ... }: let cfg = config.profiles.gterminal; + + PATHS = + lib.strings.concatMapStringsSep " " + (p: (builtins.replaceStrings ["~/"] ["${config.home.homeDirectory}/"] p)) + cfg.sessionizer.paths; + + sessionizer = pkgs.writeShellScriptBin "sessionizer" '' + function tmux() { ${pkgs.tmux}/bin/tmux "$@"; } + function fzf() { ${pkgs.fzf}/bin/fzf "$@"; } + + PATHS="${PATHS}" + + ${builtins.readFile ./sessionizer.sh} + ''; in { imports = [ - ../programs/wezterm.nix - ../programs/neovim.nix + ../../programs/wezterm.nix + ../../programs/neovim.nix ]; options.profiles.gterminal = with lib; with lib.types; { @@ -27,6 +41,16 @@ in { default = "${cfg.emulator.pkg}/bin/alacritty"; }; }; + sessionizer = { + enable = mkOption { + type = bool; + default = true; + }; + paths = mkOption { + type = listOf str; + default = []; + }; + }; shell = { pkg = mkOption { type = package; @@ -113,6 +137,12 @@ in { bind -T prefix / split-window -v -c "#''''{pane_current_path}" bind -T prefix \\ split-window -h -c "#''''{pane_current_path}" + + ${ + if cfg.sessionizer.enable + then "bind -T prefix g run-shell \"tmux neww ${sessionizer}/bin/sessionizer\"" + else "" + } ''; tmux.keyMode = "vi"; tmux.newSession = true; @@ -210,6 +240,8 @@ in { alias tmux="tmux -f ${config.xdg.configHome}/tmux/tmux.conf"; alias lg="${pkgs.lazygit}/bin/lazygit"; + alias goto="${sessionizer}/bin/sessionizer" + alias gt="${sessionizer}/bin/sessionizer" ''; }; }; diff --git a/modules/home-manager/profiles/gterminal/sessionizer.sh b/modules/home-manager/profiles/gterminal/sessionizer.sh new file mode 100644 index 0000000..e0de29a --- /dev/null +++ b/modules/home-manager/profiles/gterminal/sessionizer.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# "Chat is MIT" +# Thank you ThePrimeagen ;) +# https://github.com/ThePrimeagen/.dotfiles/blob/master/bin/.local/scripts/tmux-sessionizer + +if [[ $# -eq 1 ]]; then + selected="$1" +else + selected=$(find "$PATHS" -mindepth 1 -maxdepth 2 -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"