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:
@@ -1,15 +1,15 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Vocalinux
|
||||
Name=Voculinux
|
||||
Comment=Free, offline voice dictation for Linux
|
||||
GenericName=Voice Typing
|
||||
Exec=vocalinux
|
||||
Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/vocalinux.svg
|
||||
Exec=voculinux
|
||||
Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/voculinux.svg
|
||||
Terminal=false
|
||||
Categories=Utility;Accessibility;AudioVideo;
|
||||
Keywords=voice;typing;dictation;speech;recognition;transcription;accessibility;
|
||||
StartupNotify=true
|
||||
StartupWMClass=com.vocalinux.Vocalinux
|
||||
StartupWMClass=com.voculinux.Voculinux
|
||||
X-GNOME-UsesNotifications=true
|
||||
X-SnapInstanceName=vocalinux
|
||||
X-SnapInstanceName=voculinux
|
||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
+1
-1
@@ -54,7 +54,7 @@ def relocate_scripts(install: Path, tooling: Path) -> None:
|
||||
"if __name__ == '__main__':\n"
|
||||
" sys.exit(main())\n"
|
||||
)
|
||||
for name in ("vocalinux", "vocalinux-gui"):
|
||||
for name in ("voculinux", "voculinux-gui"):
|
||||
path = install / "bin" / name
|
||||
if path.is_symlink() or not path.is_file():
|
||||
raise RuntimeError(f"Missing installed entry point: {path}")
|
||||
|
||||
@@ -17,7 +17,7 @@ import runpy
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
MANIFEST = Path("usr/share/vocalinux/python-inputs.json")
|
||||
MANIFEST = Path("usr/share/voculinux/python-inputs.json")
|
||||
|
||||
|
||||
def normalize(name: str) -> str:
|
||||
@@ -80,7 +80,7 @@ def record(root: Path, source: Path) -> None:
|
||||
if importlib.metadata.version(name) != expected_version:
|
||||
raise RuntimeError(f"Build tool {name} differs from its locked version")
|
||||
expected = locked_versions(source / "requirements/runtime.txt")
|
||||
expected["vocalinux"] = runpy.run_path(str(source / "src/vocalinux/version.py"))["__version__"]
|
||||
expected["voculinux"] = runpy.run_path(str(source / "src/vocalinux/version.py"))["__version__"]
|
||||
audit(root, expected)
|
||||
manifest = {
|
||||
"python": list(sys.version_info[:2]),
|
||||
|
||||
@@ -7,16 +7,16 @@ if [ "$#" -ne 1 ] || [ ! -f "$1" ]; then
|
||||
echo "Usage: bash snap/local/smoke-test.sh PATH.snap" >&2
|
||||
exit 1
|
||||
fi
|
||||
if snap list vocalinux >/dev/null 2>&1; then
|
||||
echo "Refusing to replace an existing Vocalinux snap; use a disposable host" >&2
|
||||
if snap list voculinux >/dev/null 2>&1; then
|
||||
echo "Refusing to replace an existing Voculinux snap; use a disposable host" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo snap install --dangerous "$1"
|
||||
snap run vocalinux --version
|
||||
snap run voculinux --version
|
||||
# --shell does not run the application's command chain. Explicitly enter the
|
||||
# same GNOME desktop-launch environment before checking the installed payload.
|
||||
PYNPUT_BACKEND=dummy snap run --shell vocalinux -c '
|
||||
PYNPUT_BACKEND=dummy snap run --shell voculinux -c '
|
||||
exec "$SNAP/snap/command-chain/desktop-launch" "$SNAP/bin/python3" \
|
||||
"$SNAP/usr/lib/vocalinux/check_runtime.py" --root "$SNAP"
|
||||
"$SNAP/usr/lib/voculinux/check_runtime.py" --root "$SNAP"
|
||||
'
|
||||
|
||||
+24
-24
@@ -1,4 +1,4 @@
|
||||
# Vocalinux Snap packaging
|
||||
# Voculinux Snap packaging
|
||||
#
|
||||
# First ship: strict confinement, default whisper.cpp engine path, GTK tray UI,
|
||||
# mic capture, model download, and text injection (RemoteDesktop portal, wtype, xdotool).
|
||||
@@ -8,15 +8,15 @@
|
||||
# snapcraft pack
|
||||
# See docs/SNAP.md for controlled inputs, the build gate and verification limits.
|
||||
|
||||
name: vocalinux
|
||||
name: voculinux
|
||||
base: core24 # Ubuntu 24.04 / Python 3.12 (project requires-python >=3.11)
|
||||
# Fallback version; live version is set from src/vocalinux/version.py via
|
||||
# adopt-info + craftctl set in the vocalinux part (required for craftctl).
|
||||
# adopt-info + craftctl set in the voculinux part (required for craftctl).
|
||||
version: "0.17.0"
|
||||
adopt-info: vocalinux
|
||||
adopt-info: voculinux
|
||||
summary: Free offline voice dictation for Linux
|
||||
description: |
|
||||
Vocalinux is free voice typing for Linux. Hold a shortcut or toggle dictation, and text lands in almost any app on X11 or Wayland.
|
||||
Voculinux is free voice typing for Linux. Hold a shortcut or toggle dictation, and text lands in almost any app on X11 or Wayland.
|
||||
|
||||
Speech recognition runs on your machine after you download a model. No Voca account. No cloud transcription on the default path.
|
||||
|
||||
@@ -29,33 +29,33 @@ description: |
|
||||
- Text injection via the Wayland RemoteDesktop portal, wtype, or xdotool
|
||||
|
||||
Sandbox notes:
|
||||
- Global hotkeys need: sudo snap connect vocalinux:raw-input
|
||||
and sudo snap connect vocalinux:hardware-observe
|
||||
- Global hotkeys need: sudo snap connect voculinux:raw-input
|
||||
and sudo snap connect voculinux:hardware-observe
|
||||
- Native Wayland typing uses the RemoteDesktop portal: the compositor
|
||||
asks once on first dictation. The snap ships no uinput plug and no
|
||||
ydotool; the Store denied the super-privileged grant.
|
||||
- KDE Plasma: KWin's portal can mistype letter case (KDE bug 489021);
|
||||
set "Virtual Keyboard = IBus Wayland" so the IBus path delivers text.
|
||||
- Microphone may need: sudo snap connect vocalinux:audio-record
|
||||
- Microphone may need: sudo snap connect voculinux:audio-record
|
||||
The microphone list comes from the sound server, so pick a device
|
||||
in Settings rather than relying on the system default.
|
||||
- whisper.cpp runs on the CPU in this snap; it has no GPU backend.
|
||||
For Vulkan acceleration install the AppImage or use install.sh.
|
||||
- Config and models live under ~/snap/vocalinux/
|
||||
- Config and models live under ~/snap/voculinux/
|
||||
|
||||
grade: stable
|
||||
confinement: strict
|
||||
license: AGPL-3.0-only
|
||||
icon: snap/gui/vocalinux.png
|
||||
icon: snap/gui/voculinux.png
|
||||
contact: https://github.com/VocaHQ/vocalinux/issues
|
||||
issues: https://github.com/VocaHQ/vocalinux/issues
|
||||
website: https://vocalinux.com
|
||||
website: https://voculinux.com
|
||||
source-code: https://github.com/VocaHQ/vocalinux
|
||||
donation: https://github.com/sponsors/jatinkrmalik
|
||||
|
||||
apps:
|
||||
vocalinux:
|
||||
command: bin/vocalinux
|
||||
voculinux:
|
||||
command: bin/voculinux
|
||||
extensions: [gnome]
|
||||
plugs:
|
||||
# gnome extension already grants desktop, desktop-legacy, gsettings,
|
||||
@@ -67,17 +67,17 @@ apps:
|
||||
- network-bind # optional remote_api engine
|
||||
# Global hotkeys via python-evdev (/dev/input/event*).
|
||||
# Super-privileged: not auto-connected; user must:
|
||||
# sudo snap connect vocalinux:raw-input
|
||||
# sudo snap connect voculinux:raw-input
|
||||
- raw-input
|
||||
# Needed for /proc/bus/input/devices; not auto-connected:
|
||||
# sudo snap connect vocalinux:hardware-observe
|
||||
# sudo snap connect voculinux:hardware-observe
|
||||
- hardware-observe
|
||||
# No uinput plug; the RemoteDesktop portal types on Wayland instead.
|
||||
# The Store denied the super-privileged grant
|
||||
# (https://forum.snapcraft.io/t/53528), and ydotool is not staged
|
||||
# because it cannot reach /dev/uinput under confinement.
|
||||
common-id: com.vocalinux.Vocalinux
|
||||
desktop: usr/share/applications/vocalinux.desktop
|
||||
common-id: com.voculinux.Voculinux
|
||||
desktop: usr/share/applications/voculinux.desktop
|
||||
environment:
|
||||
# Prefer bundled CLI helpers (xdotool, xsel, xclip, wl-copy).
|
||||
# Do NOT prepend $SNAP/usr/lib over the gnome extension platform path:
|
||||
@@ -103,7 +103,7 @@ layout:
|
||||
bind: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/alsa-lib
|
||||
|
||||
parts:
|
||||
vocalinux:
|
||||
voculinux:
|
||||
# The Python plugin would resolve dependencies and build tools again.
|
||||
plugin: nil
|
||||
source: .
|
||||
@@ -151,13 +151,13 @@ parts:
|
||||
--source "${CRAFT_PART_BUILD}" --install "${CRAFT_PART_INSTALL}" \
|
||||
--work "${CRAFT_PART_BUILD}/.snap-python-build"
|
||||
install -Dm644 "${CRAFT_PART_SRC}/snap/local/check_runtime.py" \
|
||||
"${CRAFT_PART_INSTALL}/usr/lib/vocalinux/check_runtime.py"
|
||||
install -Dm644 "${CRAFT_PROJECT_DIR}/snap/gui/vocalinux.desktop" \
|
||||
"${CRAFT_PART_INSTALL}/usr/share/applications/vocalinux.desktop"
|
||||
install -Dm644 "${CRAFT_PROJECT_DIR}/resources/icons/scalable/vocalinux.svg" \
|
||||
"${CRAFT_PART_INSTALL}/usr/share/icons/hicolor/scalable/apps/vocalinux.svg"
|
||||
"${CRAFT_PART_INSTALL}/usr/lib/voculinux/check_runtime.py"
|
||||
install -Dm644 "${CRAFT_PROJECT_DIR}/snap/gui/voculinux.desktop" \
|
||||
"${CRAFT_PART_INSTALL}/usr/share/applications/voculinux.desktop"
|
||||
install -Dm644 "${CRAFT_PROJECT_DIR}/resources/icons/scalable/voculinux.svg" \
|
||||
"${CRAFT_PART_INSTALL}/usr/share/icons/hicolor/scalable/apps/voculinux.svg"
|
||||
# meta/gui is what snapd uses for the store/desktop icon when present.
|
||||
install -Dm644 "${CRAFT_PROJECT_DIR}/resources/icons/scalable/vocalinux.svg" \
|
||||
install -Dm644 "${CRAFT_PROJECT_DIR}/resources/icons/scalable/voculinux.svg" \
|
||||
"${CRAFT_PART_INSTALL}/meta/gui/icon.svg"
|
||||
install -Dm644 "${CRAFT_PROJECT_DIR}/snap/local/alsa/asound.conf" \
|
||||
"${CRAFT_PART_INSTALL}/etc/asound.conf"
|
||||
|
||||
Reference in New Issue
Block a user