Commit 7e3c43f

HPCesia <me@hpcesia.com>
2026-09-03 03:23:11
zellij: new zjd implement
1 parent 1d47091
Changed files (1)
modules
dev
modules/dev/zellij/default.nix
@@ -1,7 +1,12 @@
 {
   den.aspects.dev.zellij = {
     provides.to-users = {
-      hjem = {pkgs, ...}: {
+      hjem = {
+        pkgs,
+        lib,
+        config,
+        ...
+      }: {
         packages = [pkgs.zellij];
 
         xdg.config.files = {
@@ -15,9 +20,61 @@
           "zellij/layouts".source = ./layouts;
         };
 
-        files.".bashrc".text = ''
+        files.".bashrc".text = lib.mkOrder 3000 ''
           alias -- zj=zellij
-          alias -- zjd='zellij --layout dev'
+
+          ZJD_SESSIONS="${config.xdg.cache.directory}/zellij/sessions.map"
+
+          __zjd_slug() {
+            tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g; s/^-+|-+$//g'
+          }
+
+          __zjd_session_name() {
+            local name parent existing
+            name="$(printf '%s\n' "''${PWD##*/}" | __zjd_slug)"
+            [ -n "$name" ] || name="root"
+            parent="$(printf '%s\n' "''${PWD%/*}" | sed -E 's|.*/||' | __zjd_slug)"
+            [ -n "$parent" ] || parent="root"
+            existing="$(awk -v n="$name" '$1 == n { print $2 }' "$ZJD_SESSIONS" 2>/dev/null | head -1)"
+            if [ -n "$existing" ] && [ "$existing" != "$PWD" ]; then
+              name="''${parent}-''${name}"
+            fi
+            printf '%s\n' "$name"
+          }
+
+          __zjd_prune() {
+            [ -f "$ZJD_SESSIONS" ] || return 0
+            local sessions data
+            sessions="$(zellij list-sessions -s 2>/dev/null)"
+            data="$(grep -v '^$' "$ZJD_SESSIONS")"
+            while IFS=' ' read -r name path; do
+              [ -n "$name" ] || continue
+              if ! grep -qx "$name" <<< "$sessions"; then
+                data="$(grep -v "^$name " <<< "$data")"
+              elif [ ! -d "$path" ]; then
+                zellij kill-session "$name" 2>/dev/null
+                data="$(grep -v "^$name " <<< "$data")"
+              fi
+            done <<< "$data"
+            printf '%s\n' "$data" > "$ZJD_SESSIONS"
+          }
+
+          zjd() {
+            if [ -n "''${ZELLIJ:-}" ]; then
+              printf '%s\n' "already in a zellij session" >&2
+              return 1
+            fi
+            __zjd_prune
+            local name
+            name="$(__zjd_session_name)"
+            if zellij list-sessions -s 2>/dev/null | grep -qx "$name"; then
+              zellij attach "$name"
+            else
+              mkdir -p "''${ZJD_SESSIONS%/*}"
+              printf '%s %s\n' "$name" "$PWD" >> "$ZJD_SESSIONS"
+              zellij -s "$name" -n dev
+            fi
+          }
         '';
       };
     };