Commit aa13eaf
Changed files (1)
modules
dev
zellij
modules/dev/zellij/default.nix
@@ -6,75 +6,88 @@
lib,
config,
...
- }: {
- packages = [pkgs.zellij];
+ }: let
+ zjd = pkgs.writeShellApplication {
+ name = "zjd";
+ runtimeInputs = [
+ pkgs.zellij
+ pkgs.coreutils
+ pkgs.gnused
+ pkgs.gawk
+ pkgs.gnugrep
+ ];
+ text = ''
+ ZJD_SESSIONS="${config.xdg.cache.directory}/zellij/sessions.map"
- xdg.config.files = {
- "zellij/config.kdl".text =
- ''
- pane_frames false
- show_release_notes false
- show_startup_tips false
- ''
- + builtins.readFile ./keybinds.kdl;
- "zellij/layouts".source = ./layouts;
- };
-
- files.".bashrc".text = lib.mkOrder 3000 ''
- alias -- zj=zellij
-
- 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_slug() {
+ tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g; s/^-+|-+$//g'
+ }
- __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")"
+ __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
- done <<< "$data"
- printf '%s\n' "$data" > "$ZJD_SESSIONS"
- }
+ 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
+ exit 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"
+ exec zellij attach "$name"
else
mkdir -p "''${ZJD_SESSIONS%/*}"
printf '%s %s\n' "$name" "$PWD" >> "$ZJD_SESSIONS"
- zellij -s "$name" -n dev
+ exec zellij -s "$name" -n dev
fi
- }
+ '';
+ };
+ in {
+ packages = [
+ pkgs.zellij
+ zjd
+ ];
+
+ xdg.config.files = {
+ "zellij/config.kdl".text =
+ ''
+ pane_frames false
+ show_release_notes false
+ show_startup_tips false
+ ''
+ + builtins.readFile ./keybinds.kdl;
+ "zellij/layouts".source = ./layouts;
+ };
+
+ files.".bashrc".text = lib.mkOrder 3000 ''
+ alias -- zj=zellij
'';
};
};