diff --git a/files/workspace-term.sh b/files/workspace-term.sh new file mode 100644 index 0000000..5054850 --- /dev/null +++ b/files/workspace-term.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +workspace=$(i3-msg -t get_workspaces | jq -r '.[] | select(.focused) | .name') + +# Cherche le dossier courant d'un terminal déjà ouvert sur ce bureau +terminal_cwd() { + local wids + wids=$(i3-msg -t get_tree | jq -r " + .nodes[].nodes[].nodes[] + | select(.name == \"$workspace\") + | .. | objects | select(.window? != null) | .window + ") + + for wid in $wids; do + local pid + pid=$(xdotool getwindowpid "$wid" 2>/dev/null) || continue + local shell_pid + shell_pid=$(pgrep -P "$pid" -x zsh | head -1) || continue + local cwd + cwd=$(readlink "/proc/$shell_pid/cwd" 2>/dev/null) || continue + echo "$cwd" + return + done +} + +dir=$(terminal_cwd) + +if [ -z "$dir" ]; then + dir_file="$HOME/.config/i3/workspace-dirs" + dir=$(grep "^${workspace}=" "$dir_file" 2>/dev/null | cut -d= -f2-) +fi + +exec sakura --working-directory "${dir:-$HOME}" diff --git a/home.nix b/home.nix index 33f501a..362604a 100644 --- a/home.nix +++ b/home.nix @@ -14,6 +14,10 @@ source = ./files/stt-dictate.sh; executable = true; }; + home.file.".local/bin/workspace-term" = { + source = ./files/workspace-term.sh; + executable = true; + }; imports = [ ./packages.nix diff --git a/programs/i3.nix b/programs/i3.nix index 7bb08ef..441f0b8 100644 --- a/programs/i3.nix +++ b/programs/i3.nix @@ -19,7 +19,7 @@ # see https://rycee.gitlab.io/home-manager/options.html#opt-xsession.windowManager.i3.config.keybindings keybindings = pkgs.lib.mkOptionDefault { - "${modifier}+Return" = "exec sakura"; # i3-sensible-terminal + "${modifier}+Return" = "exec ~/.local/bin/workspace-term"; ### BÉPO ### "${modifier}+b" = "kill"; diff --git a/programs/zsh.nix b/programs/zsh.nix index 936a303..4f0eaa9 100644 --- a/programs/zsh.nix +++ b/programs/zsh.nix @@ -25,7 +25,6 @@ "fasd" "git" "httpie" - "last-working-dir" "pass" "ssh-agent" ];