feat(identity): rename user-visible identity to voculinux with one-time legacy import

The fork takes its own name everywhere a user can see it: binaries
(voculinux, voculinux-gui), desktop entry, autostart, tray, D-Bus
namespace (com.voculinux.Voculinux, no alias for the old name),
config/data/cache dirs, single-instance lock, IBus engine identity,
tray icons, resource prefixes, VOCULINUX_* environment names, and the
update-checker user agent. The internal Python module stays vocalinux
and the distribution metadata keeps the upstream URLs as provenance.

On first run a previous Vocalinux install's config.json, custom
dictionary, and portal restore token are copied once into the new
locations (new config always wins, no merge, no write-back); models
re-resolve through the pinned-checksum download path. An offline
naming-sweep test proves no old-name strings remain on user-visible
surfaces outside the allowlist.

Refs #18
This commit is contained in:
soubarnak
2026-11-06 01:29:39 +05:30
parent c565e6d946
commit ea7be5f111
251 changed files with 2449 additions and 1991 deletions
+9 -9
View File
@@ -108,10 +108,10 @@ echo "== Satisfy the AUR-resolved depends for dependency resolution =="
STUB="$WORKDIR/stub"
mkdir -p "$STUB"
cat >"$STUB/PKGBUILD" <<EOF
pkgname=vocalinux-gate-stub
pkgname=voculinux-gate-stub
pkgver=1
pkgrel=1
pkgdesc="Satisfies the AUR-resolved depends of the vocalinux build gate"
pkgdesc="Satisfies the AUR-resolved depends of the voculinux build gate"
arch=('any')
provides=('python-pywhispercpp' 'python-pynput')
EOF
@@ -169,12 +169,12 @@ pacman -U --noconfirm "$BUILD"/*.pkg.tar.* >/dev/null
# The console script proves the wheel's entry points landed; the imports walk
# every depends entry the package declares (gi/Gtk/AppIndicator, IBus, cairo,
# pyaudio, numpy, requests, tqdm, psutil, evdev, xlib, pynput).
vocalinux --version
voculinux --version
python - "$_version" <<'PY' || fail "the installed package does not import or has the wrong version"
import sys
from importlib.metadata import version
assert version("vocalinux") == sys.argv[1], "installed distribution version differs from the sdist"
assert version("voculinux") == sys.argv[1], "installed distribution version differs from the sdist"
import vocalinux.main
import vocalinux.ui.tray_indicator
@@ -196,13 +196,13 @@ if [ "${AUR_SOURCE_ONLY:-0}" = 1 ]; then
exit 0
fi
echo "== Build vocalinux-bin against a stub AppImage =="
echo "== Build voculinux-bin against a stub AppImage =="
# The -bin package's arch sources are the published release assets, which do
# not exist for an untagged HEAD. A placeholder exercises the same package()
# install path on this arch; the pinned sums still describe the real assets,
# so this stage skips checksum verification — release.yml's updpkgsums keeps
# the published PKGBUILD pinned to the actual files.
BINPKGDIR="$REPO/packaging/aur/vocalinux-bin"
BINPKGDIR="$REPO/packaging/aur/voculinux-bin"
[ -f "$BINPKGDIR/PKGBUILD" ] || fail "$BINPKGDIR/PKGBUILD not found"
# shellcheck source=/dev/null
source "$BINPKGDIR/PKGBUILD"
@@ -214,10 +214,10 @@ pacman_retry -S --needed --noconfirm --asdeps "${depends[@]}" >/dev/null
# directory as that user — makepkg writes into it as `builder`.
BINBUILD="$WORKDIR/binpkg"
runuser -u builder -- mkdir -p "$BINBUILD"
cp "$BINPKGDIR/PKGBUILD" "$BINPKGDIR/vocalinux.desktop" \
"$BINPKGDIR/vocalinux.svg" "$BINPKGDIR/LICENSE" "$BINBUILD/"
cp "$BINPKGDIR/PKGBUILD" "$BINPKGDIR/voculinux.desktop" \
"$BINPKGDIR/voculinux.svg" "$BINPKGDIR/LICENSE" "$BINBUILD/"
CARCH="$(uname -m)"
printf 'aur gate stub\n' >"$BINBUILD/Vocalinux-${_tag}-${CARCH}.AppImage"
printf 'aur gate stub\n' >"$BINBUILD/Voculinux-${_tag}-${CARCH}.AppImage"
(
cd "$BINBUILD"
@@ -1,7 +1,7 @@
# Maintainer: Jatin K Malik <jatinkrmalik@gmail.com>
# Updated by .github/workflows/release.yml on v* tags. Setup: docs/AUR.md
pkgname=vocalinux-bin
pkgname=voculinux-bin
# AUR pkgver cannot contain hyphens (v0.14.0-beta -> 0.14.0beta).
pkgver=0.17.0
_tag=0.17.0
@@ -28,17 +28,17 @@ optdepends=(
'wl-clipboard: Wayland clipboard (wl-copy/wl-paste) injection fallbacks'
'ydotool: uinput keystroke injection fallback'
)
provides=('vocalinux')
conflicts=('vocalinux' 'vocalinux-git')
provides=('voculinux')
conflicts=('voculinux' 'voculinux-git')
# Stripping would rewrite the runtime header of a self-mounting ELF.
options=('!strip')
source=(
'vocalinux.desktop'
'vocalinux.svg'
'voculinux.desktop'
'voculinux.svg'
'LICENSE'
)
source_x86_64=("Vocalinux-${_tag}-x86_64.AppImage::https://github.com/VocaHQ/vocalinux/releases/download/v${_tag}/Vocalinux-${_tag}-x86_64.AppImage")
source_aarch64=("Vocalinux-${_tag}-aarch64.AppImage::https://github.com/VocaHQ/vocalinux/releases/download/v${_tag}/Vocalinux-${_tag}-aarch64.AppImage")
source_x86_64=("Voculinux-${_tag}-x86_64.AppImage::https://github.com/VocaHQ/vocalinux/releases/download/v${_tag}/Voculinux-${_tag}-x86_64.AppImage")
source_aarch64=("Voculinux-${_tag}-aarch64.AppImage::https://github.com/VocaHQ/vocalinux/releases/download/v${_tag}/Voculinux-${_tag}-aarch64.AppImage")
sha256sums=('837006a9c689146308eae8c57cba1cdcc06673a108e72f39231837c6f63ae487'
'128b8939ffc00314a55d0600ab29c6a92dfb116138e088c59579a086616ec8ec'
'8486a10c4393cee1c25392769ddd3b2d6c242d6ec7928e1414efff7dfb2f07ef')
@@ -46,16 +46,16 @@ sha256sums_x86_64=('1a87408bf5bd8f9176c395a4da9ce28c68a1a7585bd67f125ff6037c4328
sha256sums_aarch64=('b256fe8577e2733a4da3ae4f9c2b9717f10017ad8328b832070ce04edc996a7d')
package() {
install -Dm755 "Vocalinux-${_tag}-${CARCH}.AppImage" \
"${pkgdir}/opt/${pkgname}/Vocalinux-${_tag}-${CARCH}.AppImage"
install -Dm755 "Voculinux-${_tag}-${CARCH}.AppImage" \
"${pkgdir}/opt/${pkgname}/Voculinux-${_tag}-${CARCH}.AppImage"
install -Dm644 vocalinux.desktop \
"${pkgdir}/usr/share/applications/vocalinux.desktop"
install -Dm644 vocalinux.svg \
"${pkgdir}/usr/share/icons/hicolor/scalable/apps/vocalinux.svg"
install -Dm644 voculinux.desktop \
"${pkgdir}/usr/share/applications/voculinux.desktop"
install -Dm644 voculinux.svg \
"${pkgdir}/usr/share/icons/hicolor/scalable/apps/voculinux.svg"
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
install -dm755 "${pkgdir}/usr/bin"
ln -s "/opt/${pkgname}/Vocalinux-${_tag}-${CARCH}.AppImage" \
"${pkgdir}/usr/bin/vocalinux"
ln -s "/opt/${pkgname}/Voculinux-${_tag}-${CARCH}.AppImage" \
"${pkgdir}/usr/bin/voculinux"
}
@@ -1,11 +1,11 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=Vocalinux
Name=Voculinux
Comment=Seamless voice dictation system for Linux
GenericName=Voice Typing
Exec=vocalinux
Icon=vocalinux
Exec=voculinux
Icon=voculinux
Terminal=false
Categories=Utility;Accessibility;AudioVideo;
Keywords=voice;typing;dictation;speech;recognition;transcription;accessibility;
@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 460" width="460" height="460" role="img" aria-label="Vocalinux">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460 460" width="460" height="460" role="img" aria-label="Voculinux">
<circle cx="229" cy="231.5" r="221.5" fill="#0F6B57"/>
<path d="M 164 127 A 65 65 0 0 1 294 127 L 294 224 A 65 65 0 0 1 164 224 Z" fill="#F2F6F2"/>
<path d="M 144.87 202.02 A 87 87 0 1 0 312.13 202.02" fill="none" stroke="#F2F6F2" stroke-width="18" stroke-linecap="round"/>

Before

Width:  |  Height:  |  Size: 887 B

After

Width:  |  Height:  |  Size: 887 B

@@ -1,7 +1,7 @@
# Maintainer: Jatin K Malik <jatinkrmalik@gmail.com>
# Updated by .github/workflows/release.yml on v* tags. Setup: docs/AUR.md
pkgname=vocalinux
pkgname=voculinux
# AUR pkgver cannot contain hyphens (v0.14.0-beta -> 0.14.0beta).
pkgver=0.18.4
_tag=0.18.4
@@ -58,7 +58,7 @@ optdepends=(
'wtype: Wayland keystroke injection fallback'
'gtk-layer-shell: dictation overlay as a layer surface on KDE and wlroots Wayland'
)
conflicts=('vocalinux-git')
conflicts=('voculinux-git')
source=("${pkgname}-${_version}.tar.gz::https://github.com/VocaHQ/vocalinux/releases/download/v${_tag}/${pkgname}-${_version}.tar.gz")
# Canonical release sdist, also published on PyPI. prepare_aur_source.py verifies
# its checksum/provenance before pinning the next version; publication never rehashes.
@@ -74,7 +74,7 @@ package() {
python -m installer --destdir="${pkgdir}" dist/*.whl
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
install -Dm644 vocalinux.desktop "${pkgdir}/usr/share/applications/vocalinux.desktop"
install -Dm644 voculinux.desktop "${pkgdir}/usr/share/applications/voculinux.desktop"
for icon in resources/icons/scalable/*.svg; do
install -Dm644 "$icon" "${pkgdir}/usr/share/icons/hicolor/scalable/apps/$(basename "$icon")"