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:
+2
-2
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "vocalinux-website",
|
||||
"name": "voculinux-website",
|
||||
"version": "0.18.5",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
@@ -20,7 +20,7 @@
|
||||
"test:all": "npm run test && npm run test:types",
|
||||
"test:viewport": "node scripts/viewport-qa.mjs http://127.0.0.1:3456",
|
||||
"render:social": "node scripts/render-social-assets.mjs",
|
||||
"deploy": "next build && touch out/.nojekyll && echo 'vocalinux.com' > out/CNAME"
|
||||
"deploy": "next build && touch out/.nojekyll && echo 'voculinux.com' > out/CNAME"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": "^20.14.10",
|
||||
|
||||
+39
-39
@@ -27,8 +27,8 @@ const homeJsonLd = [
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"@id": "https://vocalinux.com/#softwareapplication",
|
||||
name: "Vocalinux",
|
||||
"@id": "https://voculinux.com/#softwareapplication",
|
||||
name: "Voculinux",
|
||||
applicationCategory: "UtilitiesApplication",
|
||||
operatingSystem: "Linux",
|
||||
isAccessibleForFree: true,
|
||||
@@ -46,9 +46,9 @@ const homeJsonLd = [
|
||||
name: "Jatin K Malik",
|
||||
url: "https://github.com/jatinkrmalik",
|
||||
},
|
||||
url: "https://vocalinux.com/",
|
||||
url: "https://voculinux.com/",
|
||||
downloadUrl: GITHUB_REPO_URL,
|
||||
screenshot: "https://vocalinux.com/og-image.png",
|
||||
screenshot: "https://voculinux.com/og-image.png",
|
||||
featureList: [
|
||||
"Local speech recognition with whisper.cpp, Faster Whisper, Whisper, VOSK, and Parakeet",
|
||||
"Remote API speech recognition for compatible self-hosted transcription servers",
|
||||
@@ -85,7 +85,7 @@ const homeJsonLd = [
|
||||
mainEntity: [
|
||||
{
|
||||
"@type": "Question",
|
||||
name: "Does Vocalinux work offline?",
|
||||
name: "Does Voculinux work offline?",
|
||||
acceptedAnswer: {
|
||||
"@type": "Answer",
|
||||
text: "Local engines process speech on your Linux machine. Remote API is optional and only talks to servers you configure.",
|
||||
@@ -93,10 +93,10 @@ const homeJsonLd = [
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
name: "Does Vocalinux collect usage telemetry?",
|
||||
name: "Does Voculinux collect usage telemetry?",
|
||||
acceptedAnswer: {
|
||||
"@type": "Answer",
|
||||
text: "No. The installed app does not send usage telemetry, analytics events, or background usage pings. Even the project maintainer cannot see how many people install or actively use Vocalinux.",
|
||||
text: "No. The installed app does not send usage telemetry, analytics events, or background usage pings. Even the project maintainer cannot see how many people install or actively use Voculinux.",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -104,7 +104,7 @@ const homeJsonLd = [
|
||||
name: "Which Linux distributions are supported?",
|
||||
acceptedAnswer: {
|
||||
"@type": "Answer",
|
||||
text: "Vocalinux supports Ubuntu, Fedora, Debian, Arch, Linux Mint, Pop!_OS, and other modern Linux distributions across X11 and Wayland.",
|
||||
text: "Voculinux supports Ubuntu, Fedora, Debian, Arch, Linux Mint, Pop!_OS, and other modern Linux distributions across X11 and Wayland.",
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -120,12 +120,12 @@ const homeJsonLd = [
|
||||
name: "What happens when I close my laptop lid?",
|
||||
acceptedAnswer: {
|
||||
"@type": "Answer",
|
||||
text: "Vocalinux v0.10.1+ automatically recovers speech recognition and keyboard shortcuts after system suspend/resume. No manual restart needed.",
|
||||
text: "Voculinux v0.10.1+ automatically recovers speech recognition and keyboard shortcuts after system suspend/resume. No manual restart needed.",
|
||||
},
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
name: "Does Vocalinux preserve my keyboard layout?",
|
||||
name: "Does Voculinux preserve my keyboard layout?",
|
||||
acceptedAnswer: {
|
||||
"@type": "Answer",
|
||||
text: "Yes. v0.10.1+ preserves your XKB keyboard layout when activating IBus, so you won't unexpectedly switch to US layout mid-dictation.",
|
||||
@@ -136,27 +136,27 @@ const homeJsonLd = [
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "HowTo",
|
||||
name: "Install Vocalinux on Linux",
|
||||
name: "Install Voculinux on Linux",
|
||||
description: "Install offline voice dictation on Linux in a few minutes.",
|
||||
totalTime: "PT10M",
|
||||
step: [
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
name: "Run the install command",
|
||||
text: "Copy the install command from vocalinux.com and run it in terminal.",
|
||||
url: "https://vocalinux.com/#install",
|
||||
text: "Copy the install command from voculinux.com and run it in terminal.",
|
||||
url: "https://voculinux.com/#install",
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
name: "Complete the guided setup",
|
||||
text: "Pick your speech engine and model size in the interactive installer.",
|
||||
url: "https://vocalinux.com/#install",
|
||||
url: "https://voculinux.com/#install",
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
name: "Start dictating",
|
||||
text: "Launch vocalinux and hold Right Alt (Option) to begin dictation, or choose toggle mode in Settings.",
|
||||
url: "https://vocalinux.com/#install",
|
||||
text: "Launch voculinux and hold Right Alt (Option) to begin dictation, or choose toggle mode in Settings.",
|
||||
url: "https://voculinux.com/#install",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -291,7 +291,7 @@ export default function HomePage() {
|
||||
<div className="hero-cta">
|
||||
<div className="hero-actions">
|
||||
<a className="btn btn-primary" href="#install">
|
||||
Install Vocalinux{" "}
|
||||
Install Voculinux{" "}
|
||||
<span className="btn-arrow btn-arrow-down" aria-hidden="true">
|
||||
↓
|
||||
</span>
|
||||
@@ -319,10 +319,10 @@ export default function HomePage() {
|
||||
<div
|
||||
className="workbench min-w-0"
|
||||
role="img"
|
||||
aria-label="Vocalinux listening from the system tray and inserting text into a Linux editor"
|
||||
aria-label="Voculinux listening from the system tray and inserting text into a Linux editor"
|
||||
>
|
||||
<div className="panel-bar">
|
||||
<span>Vocalinux</span>
|
||||
<span>Voculinux</span>
|
||||
<span className="panel-status">
|
||||
<i className="rec-dot" aria-hidden="true"></i>
|
||||
listening
|
||||
@@ -391,7 +391,7 @@ export default function HomePage() {
|
||||
</div>
|
||||
<pre>
|
||||
<TerminalPrompt />
|
||||
vocalinux
|
||||
voculinux
|
||||
{"\n"}
|
||||
<span className="terminal-comment">
|
||||
# audio stays on this machine
|
||||
@@ -434,7 +434,7 @@ export default function HomePage() {
|
||||
A small loop that stays out of the way.
|
||||
</h2>
|
||||
<p className="section-lede">
|
||||
Vocalinux lives in the system tray, so dictation starts where your
|
||||
Voculinux lives in the system tray, so dictation starts where your
|
||||
work already is.
|
||||
</p>
|
||||
</div>
|
||||
@@ -448,7 +448,7 @@ export default function HomePage() {
|
||||
<h3>Speak where you already type.</h3>
|
||||
<p>
|
||||
Hold Right Alt, or switch to toggle mode. The tray tells you
|
||||
when Vocalinux is listening, then text lands in the focused
|
||||
when Voculinux is listening, then text lands in the focused
|
||||
field.
|
||||
</p>
|
||||
</div>
|
||||
@@ -599,7 +599,7 @@ export default function HomePage() {
|
||||
<figure className="shot shot-frame">
|
||||
<Image
|
||||
src="/screenshots/00-transcription.png"
|
||||
alt="Vocalinux dictating into a text editor with the tray menu open"
|
||||
alt="Voculinux dictating into a text editor with the tray menu open"
|
||||
width={2518}
|
||||
height={2057}
|
||||
className="h-auto w-full"
|
||||
@@ -612,7 +612,7 @@ export default function HomePage() {
|
||||
<figure className="shot shot-frame">
|
||||
<Image
|
||||
src="/screenshots/settings-speech-engine.png"
|
||||
alt="Vocalinux settings dialog showing speech engine options"
|
||||
alt="Voculinux settings dialog showing speech engine options"
|
||||
width={2128}
|
||||
height={1698}
|
||||
className="h-auto w-full"
|
||||
@@ -625,7 +625,7 @@ export default function HomePage() {
|
||||
<figure className="shot shot-frame">
|
||||
<Image
|
||||
src="/screenshots/02-system-tray.png"
|
||||
alt="Vocalinux system tray icon and menu"
|
||||
alt="Voculinux system tray icon and menu"
|
||||
width={315}
|
||||
height={466}
|
||||
className="mx-auto h-auto max-h-[18rem] w-auto object-contain"
|
||||
@@ -658,7 +658,7 @@ export default function HomePage() {
|
||||
Your voice has a path. We show you which one.
|
||||
</h2>
|
||||
<p className="section-lede">
|
||||
Vocalinux does not need a Voca cloud to transcribe. The important
|
||||
Voculinux does not need a Voca cloud to transcribe. The important
|
||||
boundary is the engine you selected.
|
||||
</p>
|
||||
</div>
|
||||
@@ -743,7 +743,7 @@ export default function HomePage() {
|
||||
displayCommand={interactiveInstallDisplayCommand}
|
||||
label="install.sh --interactive"
|
||||
/>
|
||||
<p className="section-lede">Then launch <code>vocalinux</code>.</p>
|
||||
<p className="section-lede">Then launch <code>voculinux</code>.</p>
|
||||
<div className="install-alts">
|
||||
<a
|
||||
className="install-alt"
|
||||
@@ -784,25 +784,25 @@ export default function HomePage() {
|
||||
</a>
|
||||
<a
|
||||
className="install-alt"
|
||||
href="https://snapcraft.io/vocalinux"
|
||||
href="https://snapcraft.io/voculinux"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<p className="install-alt-kicker">Snap Store</p>
|
||||
<h3>Snap</h3>
|
||||
<p>
|
||||
<code>snap install vocalinux --edge</code>. amd64 only for
|
||||
<code>snap install voculinux --edge</code>. amd64 only for
|
||||
now; a .snap is attached to every release too.
|
||||
</p>
|
||||
</a>
|
||||
<a
|
||||
className="install-alt"
|
||||
href="https://aur.archlinux.org/packages/vocalinux"
|
||||
href="https://aur.archlinux.org/packages/voculinux"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<p className="install-alt-kicker">Arch</p>
|
||||
<h3>AUR</h3>
|
||||
<p>
|
||||
<code>yay -S vocalinux</code>, or vocalinux-bin for the
|
||||
<code>yay -S voculinux</code>, or voculinux-bin for the
|
||||
prebuilt package.
|
||||
</p>
|
||||
</a>
|
||||
@@ -852,7 +852,7 @@ export default function HomePage() {
|
||||
{(
|
||||
[
|
||||
{
|
||||
question: "Does Vocalinux work offline?",
|
||||
question: "Does Voculinux work offline?",
|
||||
answer: (
|
||||
<>
|
||||
Local engines (whisper.cpp, Faster Whisper, Whisper, VOSK,
|
||||
@@ -865,7 +865,7 @@ export default function HomePage() {
|
||||
open: true,
|
||||
},
|
||||
{
|
||||
question: "Does Vocalinux collect usage telemetry?",
|
||||
question: "Does Voculinux collect usage telemetry?",
|
||||
answer:
|
||||
"No. The installed app does not send usage telemetry, analytics events, or background usage pings.",
|
||||
},
|
||||
@@ -891,7 +891,7 @@ export default function HomePage() {
|
||||
),
|
||||
},
|
||||
{
|
||||
question: "Can Vocalinux use a remote transcription server?",
|
||||
question: "Can Voculinux use a remote transcription server?",
|
||||
answer: (
|
||||
<>
|
||||
Yes. OpenAI-compatible Whisper servers and the whisper.cpp
|
||||
@@ -914,12 +914,12 @@ export default function HomePage() {
|
||||
),
|
||||
},
|
||||
{
|
||||
question: "Does Vocalinux preserve my keyboard layout?",
|
||||
question: "Does Voculinux preserve my keyboard layout?",
|
||||
answer:
|
||||
"Yes. v0.10.1+ keeps your XKB layout when activating IBus.",
|
||||
},
|
||||
{
|
||||
question: "Is Vocalinux free?",
|
||||
question: "Is Voculinux free?",
|
||||
answer: (
|
||||
<>
|
||||
Yes. Free and open source under AGPL-3.0, no premium
|
||||
@@ -955,7 +955,7 @@ export default function HomePage() {
|
||||
Same promise, other machines.
|
||||
</h2>
|
||||
<p className="section-lede">
|
||||
Vocalinux is part of{" "}
|
||||
Voculinux is part of{" "}
|
||||
<a href="https://vocahq.com" rel="noopener noreferrer">
|
||||
VocaHQ
|
||||
</a>
|
||||
@@ -976,7 +976,7 @@ export default function HomePage() {
|
||||
</span>
|
||||
<span className="chip">You are here</span>
|
||||
</div>
|
||||
<h3>Vocalinux</h3>
|
||||
<h3>Voculinux</h3>
|
||||
<p>
|
||||
System tray app with whisper.cpp, Vulkan, and local engines on
|
||||
Linux.
|
||||
@@ -1082,7 +1082,7 @@ export default function HomePage() {
|
||||
<div className="hero-cta">
|
||||
<div className="hero-actions">
|
||||
<a className="btn btn-primary" href="#install">
|
||||
Install Vocalinux
|
||||
Install Voculinux
|
||||
</a>
|
||||
<a
|
||||
className="btn btn-secondary"
|
||||
|
||||
Reference in New Issue
Block a user