@vibelord/lanes 1.6.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/lanes/VERSION +1 -1
- package/payload/lanes/client/ghostty/lanes-themed-window +12 -2
- package/payload/lanes/client/lanes-launch +21 -4
- package/payload/lanes/client/lanes-window +8 -0
- package/payload/lanes/docs/INSTALL.md +5 -3
- package/payload/lanes/install.sh +5 -0
- package/payload/manifest.json +3 -3
package/package.json
CHANGED
package/payload/lanes/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.6.
|
|
1
|
+
1.6.1
|
|
@@ -46,9 +46,19 @@ def main():
|
|
|
46
46
|
inherited.append(line)
|
|
47
47
|
base.write_text("\n".join(inherited) + "\n")
|
|
48
48
|
|
|
49
|
-
lines = [line for line in target.read_text().splitlines() if key_of(line) != "config-file"]
|
|
50
|
-
lines.extend((f"config-file = {base}",))
|
|
51
49
|
appearance = lanes / "appearance.ghostty"
|
|
50
|
+
generated = {base.resolve(), appearance.resolve()}
|
|
51
|
+
|
|
52
|
+
def own(line):
|
|
53
|
+
"""An include of Lanes' own (the palette chain under ~/.config/lanes) stays; the everyday Ghostty ones are
|
|
54
|
+
replaced by the filtered base below; an earlier run's base/appearance lines are re-added, not kept."""
|
|
55
|
+
value = line.split("=", 1)[1].strip().removeprefix("?").strip().strip('"')
|
|
56
|
+
path = Path(value).expanduser()
|
|
57
|
+
path = (path if path.is_absolute() else lanes / path).resolve()
|
|
58
|
+
return path not in generated and path.is_relative_to(lanes.resolve())
|
|
59
|
+
|
|
60
|
+
lines = [line for line in target.read_text().splitlines() if key_of(line) != "config-file" or own(line)]
|
|
61
|
+
lines.extend((f"config-file = {base}",))
|
|
52
62
|
if appearance.is_file():
|
|
53
63
|
lines.append(f"config-file = {appearance}")
|
|
54
64
|
rendered = "\n".join(lines) + "\n"
|
|
@@ -384,6 +384,7 @@ dog_ready=
|
|
|
384
384
|
reader=
|
|
385
385
|
holding=
|
|
386
386
|
now=
|
|
387
|
+
hold_enter=
|
|
387
388
|
limit=
|
|
388
389
|
tree= # set: a timeout or a signal ends the child's whole process tree (kill_tree), not only the child
|
|
389
390
|
helper_pid=
|
|
@@ -528,17 +529,33 @@ kill_tree() {
|
|
|
528
529
|
}
|
|
529
530
|
# hold <seconds> [jitter]: wait, but Enter continues at once. No raw mode, so there is no terminal state to restore
|
|
530
531
|
# when the window closes mid-wait: a line reader signals this shell instead. End of input (no terminal) is no Enter.
|
|
532
|
+
# The wait is a poll in tenth-second steps, not one `run sleep`: an Enter that landed before a sleep's pid was on
|
|
533
|
+
# record went unserved for the whole wait (DEF-2176), and dash keeps a trap that lands during its blocking `wait`
|
|
534
|
+
# pending until that wait ends — after a foreground step every shell runs it. The reader also leaves a marker, read
|
|
535
|
+
# by the poll, so even a trap not yet run ends the wait. No child is ended by another process: no job notice leaks.
|
|
531
536
|
trap 'if [ -n "$holding" ]; then now=1; [ -z "$child" ] || { kill -TERM "$child"; wait "$child"; } 2>/dev/null; fi' USR1
|
|
537
|
+
hold_poll() { # hold_poll SECONDS: whole seconds in tenth-second steps; Enter (now, or the reader's marker) ends it
|
|
538
|
+
steps=$(( ${1%%.*} * 10 )) 2>/dev/null || steps=0
|
|
539
|
+
while [ "$steps" -gt 0 ]; do
|
|
540
|
+
if [ -n "$now" ] || [ -e "$hold_enter" ]; then return 0; fi
|
|
541
|
+
sleep .1
|
|
542
|
+
steps=$((steps - 1))
|
|
543
|
+
done
|
|
544
|
+
}
|
|
532
545
|
hold() {
|
|
533
546
|
now=; holding=1
|
|
547
|
+
hold_enter=${TMPDIR:-/tmp}/lanes-hold-$$.enter
|
|
548
|
+
rm -f "$hold_enter" 2>/dev/null || :
|
|
534
549
|
exec 9<&0
|
|
535
|
-
( IFS= read -r line <&9 && kill -USR1 "$$" ) 2>/dev/null &
|
|
550
|
+
( IFS= read -r line <&9 && { : >"$hold_enter" 2>/dev/null || :; kill -USR1 "$$"; } ) 2>/dev/null &
|
|
536
551
|
reader=$!
|
|
537
552
|
exec 9<&-
|
|
538
|
-
|
|
539
|
-
# Jitter is a second
|
|
540
|
-
if [ -z "$now" ] && [ -n "${2:-}" ]; then
|
|
553
|
+
hold_poll "$1"
|
|
554
|
+
# Jitter is a second wait: should its number ever be malformed, the whole wait is still served — no tight loop.
|
|
555
|
+
if [ -z "$now" ] && [ ! -e "$hold_enter" ] && [ -n "${2:-}" ]; then hold_poll "$2"; fi
|
|
541
556
|
holding=
|
|
557
|
+
rm -f "$hold_enter" 2>/dev/null || :
|
|
558
|
+
hold_enter=
|
|
542
559
|
kill -TERM "$reader" 2>/dev/null || :
|
|
543
560
|
wait "$reader" 2>/dev/null || :
|
|
544
561
|
reader=
|
|
@@ -40,6 +40,14 @@ elif [ -n "$look" ]; then
|
|
|
40
40
|
device=$(head -n 1 "$config/device")
|
|
41
41
|
file=$config/ghostty.look.conf
|
|
42
42
|
fi
|
|
43
|
+
# Linux Ghostty: Omarchy's everyday theme sets colours explicitly, which would override the theme pair. The themed
|
|
44
|
+
# launcher rewrites ghostty.conf with those filtered out of the inherited settings; every way in (key binding, desktop
|
|
45
|
+
# entry, this command) prepares it here, before a variant is derived from it (DEF-2175). Without it, the plain config.
|
|
46
|
+
if [ "$(uname -s)" != Darwin ] && command -v ghostty >/dev/null 2>&1 && command -v python3 >/dev/null 2>&1 \
|
|
47
|
+
&& [ -x "$HOME/.local/bin/lanes-themed-window" ]; then
|
|
48
|
+
"$HOME/.local/bin/lanes-themed-window" --prepare-only >/dev/null \
|
|
49
|
+
|| echo 'lanes-window: the themed Ghostty config did not validate; opening with the plain one' >&2
|
|
50
|
+
fi
|
|
43
51
|
if [ -n "$device" ]; then
|
|
44
52
|
device="$device$look"
|
|
45
53
|
sed "s|^command = .*|command = $launch $device|" "$config/ghostty.conf" > "$file"
|
|
@@ -265,9 +265,11 @@ cd bw-tools/lanes
|
|
|
265
265
|
|
|
266
266
|
OpenSSH is required. Install Ghostty for a dedicated window, or run `lanes-launch` in your existing terminal.
|
|
267
267
|
Linux also supports Foot, plus optional Omarchy/Hyprland shortcuts. The dedicated Ghostty window defaults to
|
|
268
|
-
Catppuccin Latte in light mode and Dracula in dark mode. On Omarchy,
|
|
269
|
-
|
|
270
|
-
|
|
268
|
+
Catppuccin Latte in light mode and Dracula in dark mode. On Omarchy, the window's config is prepared by every way of
|
|
269
|
+
opening it — the Super+Shift+L binding, the launcher entry, `lanes-window` — and by the installer itself: everyday
|
|
270
|
+
fonts, padding and shortcuts are inherited, inherited theme colors are excluded so this pair takes effect, and Lanes'
|
|
271
|
+
own includes (an opted-in `--palette`) stay; the everyday Ghostty config is left untouched. A window that is already
|
|
272
|
+
open keeps the config it started with: close it and open it again. Tailscale is required when your profile uses
|
|
271
273
|
a tailnet address. When the profile's `LANES_SERVER_NAME` ends in `.ts.net`, the installer checks Tailscale before
|
|
272
274
|
the server: without it, it prints `tailscale: not installed — macOS: brew install --cask tailscale · Linux:
|
|
273
275
|
https://tailscale.com/download` and exits 4 (the client is installed); on a logged-out machine it prints
|
package/payload/lanes/install.sh
CHANGED
|
@@ -386,6 +386,11 @@ install_client() {
|
|
|
386
386
|
if [ "$os" = Darwin ]; then cat "$target/ghostty/macos.conf"; else cat "$target/ghostty/omarchy.conf"; fi
|
|
387
387
|
} > "$config/ghostty.conf"
|
|
388
388
|
install_palette
|
|
389
|
+
# Linux Ghostty: write the colour-filtered inherited config now (lanes-window does it again on every open), so a
|
|
390
|
+
# fresh install or update never shows Omarchy's colours over the theme pair (DEF-2175).
|
|
391
|
+
if [ "$os" != Darwin ] && command -v ghostty >/dev/null 2>&1 && command -v python3 >/dev/null 2>&1; then
|
|
392
|
+
"$bin/lanes-themed-window" --prepare-only >/dev/null 2>&1 || warn 'Ghostty: the themed config did not validate; the plain config stands'
|
|
393
|
+
fi
|
|
389
394
|
}
|
|
390
395
|
|
|
391
396
|
# The Ghostty binary, for its version only: on PATH, else inside the macOS app bundle.
|
package/payload/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibelord/lanes",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"commit": "
|
|
5
|
-
"digest": "sha256:
|
|
3
|
+
"version": "1.6.1",
|
|
4
|
+
"commit": "3f05cdeda5ec54fef372c7b5f44cc6701040d4c6",
|
|
5
|
+
"digest": "sha256:abf3e3c8982ff67bf96b2cf154e840925371550e76a0173db04d66c6afa8e009",
|
|
6
6
|
"executables": [
|
|
7
7
|
"bin/lanes",
|
|
8
8
|
"client/ghostty/lanes-themed-window",
|