Watch
1
0
Fork
You've already forked souveraine
0

surfaces/quickshell: bring the phone shell under the surface tree

Dock fan-out stacks, drag-to-combine, pill gesture rewrite, and the ii
patch set (TaskbarApps stacks API, Config dock.stacks schema) — pulled
from the live phone and made canonical here. deploy.sh grew a manifest
and a --phone mode: rsync the surface over, symlink ii into it, so live
edits land in a git tree instead of drifting.
This commit is contained in:
Fimeg 2026-07-12 08:57:10 -04:00
commit 037dc06922
13 changed files with 2982 additions and 0 deletions

76
surfaces/quickshell/deploy.sh Executable file
View file

@ -0,0 +1,76 @@
#!/usr/bin/env bash
# Deploy the Souveraine quickshell surface over illogical-impulse.
# Overlay pattern: full replacement files, SYMLINKED so this repo checkout
# stays the source of truth — a "live edit" in ~/.config is an edit to the
# repo tree, visible in git status. Idempotent; -u restores upstream.
#
# deploy.sh symlink the surface into this machine's ii config
# deploy.sh -u restore upstream files, remove our additions
# deploy.sh --phone rsync this surface to the phone and deploy there
# (tree lands in ~/souveraine-surfaces/quickshell)
set -euo pipefail
SRC="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
QS="${HOME}/.config/quickshell"
II="${QS}/ii"
# Manifest: "<repo-relative> <target-relative-to-~/.config/quickshell>"
# Files replacing an upstream ii file get a one-time .upstream backup;
# files with no upstream counterpart (new components) are just linked.
MANIFEST="
services/Souveraine.qml ii/services/Souveraine.qml
services/Ai.qml ii/services/Ai.qml
services/TaskbarApps.qml ii/services/TaskbarApps.qml
modules/common/Config.qml ii/modules/common/Config.qml
modules/ii/dock/Dock.qml ii/modules/ii/dock/Dock.qml
modules/ii/dock/DockApps.qml ii/modules/ii/dock/DockApps.qml
modules/ii/dock/DockAppButton.qml ii/modules/ii/dock/DockAppButton.qml
modules/ii/dock/DockButton.qml ii/modules/ii/dock/DockButton.qml
modules/ii/dock/DockSeparator.qml ii/modules/ii/dock/DockSeparator.qml
modules/ii/dock/DockStack.qml ii/modules/ii/dock/DockStack.qml
pill/shell.qml pill/shell.qml
"
PHONE_USB=casey@172.16.42.1
PHONE_DEST="souveraine-surfaces/quickshell"
if [[ "${1:-}" == "--phone" ]]; then
ssh_i=(ssh -i "$HOME/.ssh/ani" -o ConnectTimeout=5)
"${ssh_i[@]}" "$PHONE_USB" "mkdir -p ~/$PHONE_DEST"
rsync -a --delete -e "ssh -i $HOME/.ssh/ani" "$SRC/" "$PHONE_USB:$PHONE_DEST/"
"${ssh_i[@]}" "$PHONE_USB" "bash ~/$PHONE_DEST/deploy.sh"
echo "Deployed to phone. Quickshell hot-reloads; if the dock misbehaves: pkill -f 'qs -c ii' (autostart relaunches)."
exit 0
fi
if [[ "${1:-}" == "-u" || "${1:-}" == "--uninstall" ]]; then
while read -r rel target; do
[[ -z "$rel" ]] && continue
t="$QS/$target"
if [[ -f "$t.upstream" ]]; then
rm -f "$t"; mv "$t.upstream" "$t"
echo "restored $target"
elif [[ -L "$t" ]]; then
rm -f "$t"
echo "removed $target (no upstream)"
fi
done <<< "$MANIFEST"
exit 0
fi
[[ -d "$II" ]] || { echo "illogical-impulse config not found at $II" >&2; exit 1; }
mkdir -p "$QS/pill"
while read -r rel target; do
[[ -z "$rel" ]] && continue
src="$SRC/$rel"; t="$QS/$target"
[[ -f "$src" ]] || { echo "missing $src" >&2; exit 1; }
# Back up upstream once (a real file, not our own symlink)
if [[ -f "$t" && ! -L "$t" && ! -f "$t.upstream" ]]; then
cp "$t" "$t.upstream"
fi
ln -sf "$src" "$t"
done <<< "$MANIFEST"
echo "Souveraine quickshell surface deployed ($(echo "$MANIFEST" | grep -c .) files symlinked from $SRC)"
echo "Quickshell hot-reloads on change; restart with: pkill -f 'qs -c ii' && pkill -f 'qs -c pill'"