fix(walker): don't spawn a duplicate elephant alongside the service
nomarchy-launch-walker guarded its manual elephant start with `pgrep -x elephant`, which never matches the Home Manager service's actual process name `.elephant-wrapped` (Linux truncates comm to 15 chars). So every menu invocation spawned a second elephant that races elephant.service for the socket — a latent source of menus intermittently coming up empty. Gate on `systemctl --user is-active elephant.service` first, with a working `pgrep -f elephant-wrapped` fallback for non-service setups; do the same for walker.service. Verified in a headless system.build.vm: opening the theme menu now keeps the elephant process count at 1 (was 2) and the menu still renders. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -8,12 +8,20 @@ if command -v walker >/dev/null 2>&1; then
|
|||||||
# /dev/null. If they inherit stdout from a $(...) caller (e.g. nomarchy-menu
|
# /dev/null. If they inherit stdout from a $(...) caller (e.g. nomarchy-menu
|
||||||
# doing `$(menu ...)`), bash waits for those fds to close on every return,
|
# doing `$(menu ...)`), bash waits for those fds to close on every return,
|
||||||
# which hangs the terminal after each menu selection.
|
# which hangs the terminal after each menu selection.
|
||||||
if ! pgrep -x elephant > /dev/null; then
|
# Prefer the Home Manager systemd user services (programs.walker.runAsService).
|
||||||
|
# The manual fallbacks below MUST check the services first: the service runs
|
||||||
|
# the wrapped binary `.elephant-wrapped`, which `pgrep -x elephant` never
|
||||||
|
# matches — so the old check spawned a *second*, competing elephant on every
|
||||||
|
# menu invocation, racing the service for the socket. Only hand-start when no
|
||||||
|
# service and no process exists (e.g. walker used outside the HM service).
|
||||||
|
if ! systemctl --user is-active --quiet elephant.service 2>/dev/null \
|
||||||
|
&& ! pgrep -x elephant >/dev/null && ! pgrep -f elephant-wrapped >/dev/null; then
|
||||||
setsid uwsm-app -- elephant </dev/null >/dev/null 2>&1 &
|
setsid uwsm-app -- elephant </dev/null >/dev/null 2>&1 &
|
||||||
disown
|
disown
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! pgrep -f "walker --gapplication-service" > /dev/null; then
|
if ! systemctl --user is-active --quiet walker.service 2>/dev/null \
|
||||||
|
&& ! pgrep -f "walker --gapplication-service" >/dev/null; then
|
||||||
setsid uwsm-app -- walker --gapplication-service </dev/null >/dev/null 2>&1 &
|
setsid uwsm-app -- walker --gapplication-service </dev/null >/dev/null 2>&1 &
|
||||||
disown
|
disown
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user