summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-12-11 01:24:34 -0600
committerAlejandro Soto <alejandro@34project.org>2024-12-11 01:24:34 -0600
commit23aacc7e231b5f73745a6ef72abbcdecf193790d (patch)
treee5b64243d61b95c186ffe9946d19e0211064d407
parent771624767c3d916e2c77d352e71c07bffca8da59 (diff)
pkgs/tmux-open: implement persistent tmux sessions by i3/sway workspace
Diffstat (limited to '')
-rw-r--r--home/desktop/sway.nix4
-rw-r--r--pkgs/default.nix1
-rw-r--r--pkgs/tmux-open/default.nix11
-rw-r--r--pkgs/tmux-open/tmux-open.sh15
4 files changed, 28 insertions, 3 deletions
diff --git a/home/desktop/sway.nix b/home/desktop/sway.nix
index 1162e87..b212bdf 100644
--- a/home/desktop/sway.nix
+++ b/home/desktop/sway.nix
@@ -60,8 +60,6 @@ in
mod = config.wayland.windowManager.sway.config.modifier;
wofi = config.programs.wofi.package;
- inherit (pkgs.local) st tmux-lift;
-
grimshot = getExe pkgs.sway-contrib.grimshot;
in
mkOptionDefault {
@@ -70,7 +68,7 @@ in
"${mod}+d" = "exec --no-startup-id ${getExe wofi} -S run";
"${mod}+i" = "exec busctl --user call rs.wl-gammarelay / rs.wl.gammarelay ToggleInverted";
"${mod}+o" = "exec ${getExe config.programs.swaylock.package} -fF";
- "${mod}+Return" = "exec ${getExe st} -e ${getExe tmux-lift}";
+ "${mod}+Return" = "exec ${getExe pkgs.local.st} -e ${getExe pkgs.local.tmux-lift} ${getExe pkgs.local.tmux-open}";
"${mod}+Shift+e" = "input * xkb_layout latam";
"${mod}+Shift+u" = "input * xkb_layout us";
"${mod}+p" = "exec ${grimshot} copy active";
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 36dc309..4de6906 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -18,6 +18,7 @@ in
scripts = callPackage ./scripts { };
simple-scalar = callPackage ./simple-scalar { };
tmux-lift = callPackage ./tmux-lift { };
+ tmux-open = callPackage ./tmux-open { };
tmux-pass = callPackage ./tmux-pass.nix { };
st = prev.st.override {
diff --git a/pkgs/tmux-open/default.nix b/pkgs/tmux-open/default.nix
new file mode 100644
index 0000000..e2c799c
--- /dev/null
+++ b/pkgs/tmux-open/default.nix
@@ -0,0 +1,11 @@
+{ jq
+, substituteAll
+, sway
+, tmux
+, writeShellScriptBin
+, ...
+}:
+writeShellScriptBin "tmux-open" (builtins.readFile (substituteAll {
+ src = ./tmux-open.sh;
+ env = { inherit jq sway tmux; };
+}))
diff --git a/pkgs/tmux-open/tmux-open.sh b/pkgs/tmux-open/tmux-open.sh
new file mode 100644
index 0000000..c6537b7
--- /dev/null
+++ b/pkgs/tmux-open/tmux-open.sh
@@ -0,0 +1,15 @@
+set -o errexit
+set -o nounset
+set -o pipefail
+
+workspace="$( \
+ @sway@/bin/swaymsg -t get_workspaces \
+ | @jq@/bin/jq '.[] | select(.focused==true).name' \
+ | cut -d"\"" -f2)"
+
+session="ws$workspace"
+if @tmux@/bin/tmux has-session -t "$session" 2>/dev/null && [ -n "$(@tmux@/bin/tmux list-clients -t "$session")" ]; then
+ session="$session-$$"
+fi
+
+exec @tmux@/bin/tmux new-session -A -s "$session" -e "SWAYSOCK=$SWAYSOCK" -e "DISPLAY=$DISPLAY"