-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathuninstall.sh
More file actions
executable file
·166 lines (151 loc) · 6.1 KB
/
Copy pathuninstall.sh
File metadata and controls
executable file
·166 lines (151 loc) · 6.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/usr/bin/env bash
# uninstall.sh - remove the lay runtime; --purge also removes user data and a clean source checkout.
set -euo pipefail
PURGE=0
KEEP_SOURCE=0
TEST_MODE="${LAY_UNINSTALL_TEST_MODE:-0}"
SYSTEM_ROOT="${LAY_UNINSTALL_SYSTEM_ROOT:-}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd || true)"
SOURCE_DIR="${LAY_INSTALL_DIR:-$SCRIPT_DIR}"
if [ ! -f "$SOURCE_DIR/Cargo.toml" ]; then
SOURCE_DIR="${LAY_INSTALL_DIR:-$HOME/projects/lay}"
fi
usage() {
cat <<'EOF'
Использование: bash uninstall.sh [--purge] [--keep-source]
Без флагов удаляется runtime lay, но сохраняются настройки, память и исходники.
--purge удалить также ~/.config/lay, данные, кэши, логи и чистую git-копию lay
--keep-source не удалять исходники даже вместе с --purge
EOF
}
while [ "$#" -gt 0 ]; do
case "$1" in
--purge) PURGE=1 ;;
--keep-source) KEEP_SOURCE=1 ;;
-h|--help) usage; exit 0 ;;
*) usage >&2; exit 2 ;;
esac
shift
done
run_runtime_cleanup() {
if [ "$TEST_MODE" = "1" ]; then
return
fi
for unit in lay-daemon.service lay-kde-tray.service lay-host-vm-guard.service lay-ibus-engine.service; do
systemctl --user disable --now "$unit" >/dev/null 2>&1 || true
done
pkill -x lay-daemon >/dev/null 2>&1 || true
pkill -x lay-ibus-engine >/dev/null 2>&1 || true
pkill -f "$HOME/.local/bin/lay-kde-tray" >/dev/null 2>&1 || true
pkill -f "$HOME/.local/bin/lay-host-vm-guard" >/dev/null 2>&1 || true
gnome-extensions disable lay@radislabus-star.github.io >/dev/null 2>&1 || true
if command -v ibus >/dev/null 2>&1; then
case "$(ibus engine 2>/dev/null || true)" in
lay-ime-ru|lay-ime-us) ibus engine xkb:us::eng >/dev/null 2>&1 || true ;;
esac
fi
}
remove_gnome_input_sources() {
if [ "$TEST_MODE" = "1" ] || ! command -v gsettings >/dev/null 2>&1; then
return
fi
sources="$(gsettings get org.gnome.desktop.input-sources sources 2>/dev/null || true)"
filtered="$(python3 - "$sources" <<'PY' 2>/dev/null || true
import ast
import sys
try:
sources = ast.literal_eval(sys.argv[1])
except Exception:
raise SystemExit(0)
filtered = [tuple(item) for item in sources if tuple(item) not in {
("ibus", "lay-ime-ru"),
("ibus", "lay-ime-us"),
}]
print(repr(filtered) if filtered else "@a(ss) []")
PY
)"
if [ -n "$filtered" ] && [ "$filtered" != "$sources" ]; then
gsettings set org.gnome.desktop.input-sources sources "$filtered" >/dev/null 2>&1 || true
gsettings set org.gnome.desktop.input-sources current 0 >/dev/null 2>&1 || true
fi
}
remove_system_file() {
path="$1"
if [ -n "$SYSTEM_ROOT" ]; then
rm -f "$SYSTEM_ROOT$path"
elif command -v sudo >/dev/null 2>&1; then
sudo rm -f "$path"
fi
}
echo "=== остановка lay ==="
run_runtime_cleanup
echo "=== удаление пользовательского runtime ==="
rm -f \
"$HOME/.local/bin/lay" \
"$HOME/.local/bin/lay-daemon" \
"$HOME/.local/bin/lay-nanda-wave-eval" \
"$HOME/.local/bin/lay-test-input" \
"$HOME/.local/bin/lay-ngram-corpus" \
"$HOME/.local/bin/lay-ibus-engine" \
"$HOME/.local/bin/lay-memory-report" \
"$HOME/.local/bin/lay-runtime-control" \
"$HOME/.local/bin/lay-kde-tray" \
"$HOME/.local/bin/lay-host-vm-guard" \
"$HOME/.local/bin/lay-nanda-train" \
"$HOME/.local/bin/lay-nanda-eval" \
"$HOME/.local/bin/lay-nanda-loop"
rm -f \
"$HOME/.config/systemd/user/lay-daemon.service" \
"$HOME/.config/systemd/user/lay-kde-tray.service" \
"$HOME/.config/systemd/user/lay-host-vm-guard.service" \
"$HOME/.config/systemd/user/lay-ibus-engine.service" \
"$HOME/.config/autostart/lay-kde-tray.desktop" \
"$HOME/.local/share/applications/io.github.radislabus_star.LaySettings.desktop" \
"$HOME/.local/share/ibus/component/lay-ime.xml" \
"$HOME/.local/share/ibus/component/lay.xml"
rm -rf \
"$HOME/.local/share/gnome-shell/extensions/lay@radislabus-star.github.io" \
"$HOME/.cache/lay"
remove_gnome_input_sources
remove_system_file /usr/share/ibus/component/lay-ime.xml
remove_system_file /usr/share/ibus/component/lay.xml
remove_system_file /etc/udev/rules.d/99-lay-uinput.rules
if [ "$TEST_MODE" != "1" ]; then
systemctl --user daemon-reload >/dev/null 2>&1 || true
ibus write-cache >/dev/null 2>&1 || true
if command -v sudo >/dev/null 2>&1; then
sudo ibus write-cache --system >/dev/null 2>&1 || true
sudo udevadm control --reload-rules >/dev/null 2>&1 || true
fi
update-desktop-database "$HOME/.local/share/applications" >/dev/null 2>&1 || true
fi
if [ "$PURGE" = "1" ]; then
echo "=== удаление настроек, памяти и логов ==="
rm -rf \
"$HOME/.config/lay" \
"$HOME/.local/share/lay" \
"$HOME/.local/state/lay"
fi
source_removed=0
if [ "$PURGE" = "1" ] && [ "$KEEP_SOURCE" = "0" ] && [ -d "$SOURCE_DIR/.git" ]; then
if [ -n "$(git -C "$SOURCE_DIR" status --porcelain --untracked-files=normal 2>/dev/null || true)" ]; then
echo "⚠ исходники оставлены: в $SOURCE_DIR есть локальные изменения"
elif git -C "$SOURCE_DIR" remote -v 2>/dev/null | grep -q 'radislabus-star/lay-public'; then
cd "$HOME"
rm -rf "$SOURCE_DIR"
source_removed=1
else
echo "⚠ исходники оставлены: $SOURCE_DIR не распознан как официальный lay checkout"
fi
fi
echo ""
echo "✓ runtime lay удалён"
if [ "$PURGE" = "1" ]; then
echo "✓ пользовательские настройки, память и логи удалены"
fi
if [ "$source_removed" = "1" ]; then
echo "✓ исходники удалены: $SOURCE_DIR"
elif [ "$KEEP_SOURCE" = "1" ] || [ "$PURGE" = "0" ]; then
echo "ℹ исходники сохранены: $SOURCE_DIR"
fi
echo "ℹ системные пакеты и членство в общей группе input не удалялись"