refactor: group stow packages into common, mac and kde

Split the packages by platform so each app stays an opt-in Stow package
under common/, mac/ or kde/. KDE gets its own Fastfetch, Helium and
Spectacle packages, and darwin-breeze becomes kde/theme. The READMEs
document stowing a whole group as well as individual packages.
This commit is contained in:
tri committed 2026-10-30 21:57:15 +07:00
1 parent 1e99a15f6c
commit 34e978e84c
74 files changed
+532 -151

No files matched your search

@@ -0,0 +1 @@
<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(0.78 0 0 0.78 3.52 3.52)"><g transform="matrix(.99917103 0 0 .9988667 .023961 .026876)"><path d="m29.946 15.942c.354 9.205-9.874 16.514-18.469 13.197-8.505-2.569-12.285-13.93-7.003-21.077 4.9-7.801 17.469-8.068 22.695-.48a13.97 13.97 0 0 1 2.777 8.36z" fill="none" opacity=".95" stroke="#f5f5f5" stroke-width="2.093"/><path d="m12.758 26.311v-5.725c-.282.433-.679.792-1.19 1.079a3.216 3.216 0 0 1 -1.613.43c-1.27 0-2.366-.555-3.287-1.663-.914-1.109-1.371-2.628-1.371-4.559 0-1.174.185-2.227.555-3.16.376-.932.917-1.636 1.623-2.114a4.074 4.074 0 0 1 2.34-.726c1.323 0 2.365.609 3.125 1.827v-1.563h1.633v16.174zm-5.596-10.36c0 1.504.29 2.635.867 3.39.579.75 1.27 1.124 2.078 1.124.773 0 1.438-.356 1.996-1.068.558-.72.837-1.81.837-3.27 0-1.557-.296-2.727-.887-3.513-.585-.785-1.274-1.178-2.067-1.178-.787 0-1.456.367-2.007 1.101-.544.727-.817 1.865-.817 3.413m11.938 5.88h-1.683v-16.141h1.815v5.758c.766-1.05 1.744-1.574 2.934-1.574.658 0 1.28.147 1.865.44a3.768 3.768 0 0 1 1.452 1.222c.383.521.682 1.153.897 1.894s.323 1.534.323 2.378c0 2.004-.454 3.553-1.361 4.647-.908 1.093-1.997 1.64-3.267 1.64-1.264 0-2.255-.576-2.974-1.728v1.464m-.02-5.935c0 1.402.174 2.415.524 3.04.571 1.02 1.344 1.53 2.319 1.53.793 0 1.479-.375 2.057-1.123.578-.756.867-1.88.867-3.37 0-1.526-.28-2.653-.837-3.38-.551-.726-1.22-1.09-2.007-1.09-.793 0-1.478.378-2.057 1.134-.578.75-.867 1.835-.867 3.26" fill="#fafafa"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+24
View File
@@ -0,0 +1,24 @@
#!/bin/bash
# Copy the Breeze-style icons over Ngó Sen's monochrome tray icons.
# Runs as root; the pacman hook re-runs it after every fcitx5-ngosen install/upgrade.
set -euo pipefail
here=$(cd "$(dirname "$0")" && pwd)
ROOT=${ROOT:-} # for dry-run testing only
# Ngó Sen points at hicolor, but Plasma looks the icon up by name in breeze/breeze-dark
dirs=(usr/share/icons/hicolor/scalable/{apps,status}
usr/share/icons/breeze{,-dark}/status/{22,24})
mtree=$(zcat "$ROOT"/var/lib/pacman/local/fcitx5-ngosen-*/mtree 2>/dev/null || true)
for d in "${dirs[@]}"; do
for f in "$here"/icons/*.svg; do
n=$(basename "$f"); t=$ROOT/$d/$n
[[ -f $t ]] || continue
# Still the file the package installed: keep it as the original for restore.sh
sum=$(grep -F "./$d/$n " <<<"$mtree" | grep -o 'sha256digest=[0-9a-f]*' | cut -d= -f2 || true)
if [[ -n $sum && $(sha256sum <"$t" | cut -d' ' -f1) == "$sum" ]]; then
install -Dm644 "$t" "$here/orig/$d/$n"
fi
install -m644 "$f" "$t"
done
done
@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22">
<style id="current-color-scheme" type="text/css">.ColorScheme-Text { color: #232629; }</style>
<g class="ColorScheme-Text" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.3">
<rect x="3.5" y="3.5" width="15" height="15" rx="2.5" stroke-width="1"/><path d="M8.3 7.5 11 14.5l2.7-7"/>
</g></svg>

After

Width:  |  Height:  |  Size: 426 B

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22">
<style id="current-color-scheme" type="text/css">.ColorScheme-Text { color: #fcfcfc; }</style>
<g class="ColorScheme-Text" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.3">
<rect x="3.5" y="3.5" width="15" height="15" rx="2.5" stroke-width="1"/><path d="M8.3 7.5 11 14.5l2.7-7"/>
</g></svg>

After

Width:  |  Height:  |  Size: 426 B

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22">
<style id="current-color-scheme" type="text/css">.ColorScheme-Text { color: #232629; }</style>
<g class="ColorScheme-Text" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1">
<circle cx="11" cy="11" r="7.5"/><path d="M7.8 12.6q3.2 3.2 6.4 0"/><path d="M8.6 8.6v.6M13.4 8.6v.6" stroke-width="1.6"/>
</g></svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22">
<style id="current-color-scheme" type="text/css">.ColorScheme-Text { color: #fcfcfc; }</style>
<g class="ColorScheme-Text" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1">
<circle cx="11" cy="11" r="7.5"/><path d="M7.8 12.6q3.2 3.2 6.4 0"/><path d="M8.6 8.6v.6M13.4 8.6v.6" stroke-width="1.6"/>
</g></svg>

After

Width:  |  Height:  |  Size: 440 B

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22">
<style id="current-color-scheme" type="text/css">.ColorScheme-Text { color: #232629; }</style>
<g class="ColorScheme-Text" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.3">
<rect x="3.5" y="3.5" width="15" height="15" rx="2.5" stroke-width="1"/><path d="M13.3 7.5H8.8v7h4.5M8.8 11h3.7"/>
</g></svg>

After

Width:  |  Height:  |  Size: 434 B

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22" width="22" height="22">
<style id="current-color-scheme" type="text/css">.ColorScheme-Text { color: #fcfcfc; }</style>
<g class="ColorScheme-Text" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.3">
<rect x="3.5" y="3.5" width="15" height="15" rx="2.5" stroke-width="1"/><path d="M13.3 7.5H8.8v7h4.5M8.8 11h3.7"/>
</g></svg>

After

Width:  |  Height:  |  Size: 434 B

+33
View File
@@ -0,0 +1,33 @@
#!/bin/bash
# Install Breeze-style tray icons for Ngó Sen. Usage: sudo ./install.sh
set -euo pipefail
here=$(cd "$(dirname "$0")" && pwd)
ROOT=${ROOT:-} # for dry-run testing only
[[ $EUID -eq 0 || -n $ROOT ]] || { echo "Must be run with sudo"; exit 1; }
owner=${SUDO_USER:-$(id -un "${PKEXEC_UID:-0}")}
dest=$ROOT/usr/local/share/ngosen-breeze-icons
install -d "$dest/icons"
install -m644 "$here"/icons/*.svg "$dest/icons/"
install -m755 "$here/apply.sh" "$dest/apply.sh"
install -Dm644 "$here/ngosen-breeze-icons.hook" "$ROOT/etc/pacman.d/hooks/ngosen-breeze-icons.hook"
# Older versions used NoUpgrade in pacman.conf; the hook replaces it
sed -i '/^# ngosen-breeze-icons$/,+1d' "$ROOT/etc/pacman.conf"
ROOT=$ROOT "$dest/apply.sh"
# Ngó Sen: use the monochrome icons (not the lotus ones), white for a dark panel
conf=$ROOT$(getent passwd "$owner" | cut -d: -f6)/.config/fcitx5/conf/ngosen.conf
as_owner() { if [[ -n $ROOT ]]; then "$@"; else runuser -u "$owner" -- "$@"; fi; }
if [[ -f $conf ]]; then
for kv in UseLotusIcons=False IconTheme=Dark; do
k=${kv%%=*}
if grep -q "^$k=" "$conf"; then as_owner sed -i "s/^$k=.*/$kv/" "$conf"
elif grep -q "^# $k=" "$conf"; then as_owner sed -i "s/^# $k=.*/$kv/" "$conf"
else as_owner sh -c "echo '$kv' >> '$conf'"; fi
done
else
as_owner install -Dm600 /dev/stdin "$conf" <<<$'UseLotusIcons=False\nIconTheme=Dark'
fi
echo "Done. Restart fcitx5 and plasmashell (without sudo):"
echo " $here/restart-fcitx5.sh; systemctl --user restart plasma-plasmashell"
@@ -0,0 +1,10 @@
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = fcitx5-ngosen
[Action]
Description = Applying Breeze-style tray icons for Ngó Sen...
When = PostTransaction
Exec = /usr/local/share/ngosen-breeze-icons/apply.sh
@@ -0,0 +1,7 @@
#!/bin/bash
# Restart fcitx5 through KWin (KDE Wayland) so it keeps the Wayland input method frontend.
L=$(kreadconfig6 --file kwinrc --group Wayland --key InputMethod)
[[ -n $L ]] || L=/usr/share/applications/fcitx5-wayland-launcher.desktop
pkill -x fcitx5; sleep 1
kwriteconfig6 --notify --file kwinrc --group Wayland --key InputMethod --delete; sleep 1
kwriteconfig6 --notify --file kwinrc --group Wayland --key InputMethod "$L"
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
# Put Ngó Sen's original icons back and remove the hook. Usage: sudo ./restore.sh
set -euo pipefail
ROOT=${ROOT:-} # for dry-run testing only
[[ $EUID -eq 0 || -n $ROOT ]] || { echo "Must be run with sudo"; exit 1; }
dest=$ROOT/usr/local/share/ngosen-breeze-icons
[[ -d $dest/orig/usr ]] || { echo "No original icons in $dest/orig"; exit 1; }
(cd "$dest/orig" && find usr -name '*.svg' -print0) | while IFS= read -r -d '' f; do
install -m644 "$dest/orig/$f" "$ROOT/$f"
done
rm -f "$ROOT/etc/pacman.d/hooks/ngosen-breeze-icons.hook"
rm -rf "$dest"
echo "Restored. To get the lotus icons back, turn them on in Ngó Sen Settings."
echo "Restart plasmashell (without sudo): systemctl --user restart plasma-plasmashell"
+53
View File
@@ -0,0 +1,53 @@
# Tray icons that match Breeze
```sh
stow -d kde -t "$HOME" tray-icons
```
Some icons need one more step after stowing; see below.
## Ngó Sen (fcitx5-ngosen)
Replaces Ngó Sen's monochrome tray icons with a V/E inside a rounded frame.
```sh
sudo ~/.local/share/ngosen-breeze-icons/install.sh
~/.local/share/ngosen-breeze-icons/restart-fcitx5.sh
systemctl --user restart plasma-plasmashell
```
- Ngó Sen points the tray at `/usr/share/icons/hicolor`, but Plasma looks
the icon up by name in the `breeze`/`breeze-dark` themes under
`/usr/share` and ignores `~/.local/share/icons`, so the system files have
to be replaced.
- `install.sh` copies the icons and `apply.sh` to
`/usr/local/share/ngosen-breeze-icons/`, installs the pacman hook
`/etc/pacman.d/hooks/ngosen-breeze-icons.hook` to re-apply them after
every package upgrade, and sets `UseLotusIcons=False` and
`IconTheme=Dark` in `~/.config/fcitx5/conf/ngosen.conf`.
- The original icons are kept in `/usr/local/share/ngosen-breeze-icons/orig/`;
`sudo ~/.local/share/ngosen-breeze-icons/restore.sh` puts them back and
removes the hook.
- On KDE Wayland don't start fcitx5 with `fcitx5 -d`; use
`restart-fcitx5.sh` so KWin launches it.
## qBittorrent
`qbittorrent-tray-mono.svg` is qBittorrent's monochrome tray icon scaled
down to 78%, so it has the same padding as Breeze status icons instead of
filling the whole tray slot.
qBittorrent 5.x only looks the tray icon up in the icon theme when "Use
icons from system theme" is on, so also set (qBittorrent closed, or via
Tools > Options > Behavior):
```ini
# ~/.config/qBittorrent/qBittorrent.conf
[Appearance]
TrayIconStyle=Monochrome
[Preferences]
Advanced\useSystemIconTheme=true
```
`qBittorrent.conf` itself isn't stowed: qBittorrent rewrites it on exit.