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
+14 -14
View File
@@ -7,8 +7,8 @@ install_desktop_entry() {
print_info "Installing desktop entry..."
# Check if desktop entry file exists
if [ ! -f "vocalinux.desktop" ]; then
print_error "Desktop entry file not found: vocalinux.desktop"
if [ ! -f "voculinux.desktop" ]; then
print_error "Desktop entry file not found: voculinux.desktop"
return 1
fi
@@ -19,27 +19,27 @@ install_desktop_entry() {
}
# Copy desktop entry
cp vocalinux.desktop "$DESKTOP_DIR/" || {
cp voculinux.desktop "$DESKTOP_DIR/" || {
print_error "Failed to copy desktop entry to $DESKTOP_DIR"
return 1
}
# Update the desktop entry to use the wrapper script with GI_TYPELIB_PATH
WRAPPER_SCRIPT="$HOME/.local/bin/vocalinux-gui"
WRAPPER_SCRIPT="$HOME/.local/bin/voculinux-gui"
if [ ! -f "$WRAPPER_SCRIPT" ]; then
print_warning "Wrapper script not found at $WRAPPER_SCRIPT"
print_warning "Desktop entry may not work correctly"
else
# Update Exec line to include GI_TYPELIB_PATH for PyGObject
# Use the detected path for cross-distro compatibility
sed -i "s|^Exec=vocalinux|Exec=env GI_TYPELIB_PATH=$GI_TYPELIB_DETECTED $WRAPPER_SCRIPT|" "$DESKTOP_DIR/vocalinux.desktop" || {
sed -i "s|^Exec=voculinux|Exec=env GI_TYPELIB_PATH=$GI_TYPELIB_DETECTED $WRAPPER_SCRIPT|" "$DESKTOP_DIR/voculinux.desktop" || {
print_warning "Failed to update desktop entry path"
}
print_info "Updated desktop entry to use wrapper script with GI_TYPELIB_PATH"
fi
# Make desktop entry executable
chmod +x "$DESKTOP_DIR/vocalinux.desktop" || {
chmod +x "$DESKTOP_DIR/voculinux.desktop" || {
print_warning "Failed to make desktop entry executable"
}
@@ -64,10 +64,10 @@ install_icons() {
# List of icons to install
local ICONS=(
"vocalinux.svg"
"vocalinux-microphone.svg"
"vocalinux-microphone-off.svg"
"vocalinux-microphone-process.svg"
"voculinux.svg"
"voculinux-microphone.svg"
"voculinux-microphone-off.svg"
"voculinux-microphone-process.svg"
)
# Install each icon
@@ -85,10 +85,10 @@ install_icons() {
done
if [ "$INSTALLED_COUNT" -eq "${#ICONS[@]}" ]; then
print_success "Installed all custom Vocalinux icons"
print_success "Installed all custom Voculinux icons"
return 0
elif [ "$INSTALLED_COUNT" -gt 0 ]; then
print_warning "Installed $INSTALLED_COUNT/${#ICONS[@]} custom Vocalinux icons"
print_warning "Installed $INSTALLED_COUNT/${#ICONS[@]} custom Voculinux icons"
return 0
else
print_error "Failed to install any icons"
@@ -125,8 +125,8 @@ update_icon_cache() {
install_resources_to_venv() {
print_info "Installing resources to virtual environment..."
# Target directory: $VENV_DIR/share/vocalinux/resources
local VENV_RESOURCES_DIR="$VENV_DIR/share/vocalinux/resources"
# Target directory: $VENV_DIR/share/voculinux/resources
local VENV_RESOURCES_DIR="$VENV_DIR/share/voculinux/resources"
# Create directories
mkdir -p "$VENV_RESOURCES_DIR/icons/scalable" || {
+4 -4
View File
@@ -27,7 +27,7 @@ run_interactive_install() {
EOF
echo "Welcome! This guided installation will help you set up Vocalinux"
echo "Welcome! This guided installation will help you set up Voculinux"
echo "with the best options for your system."
echo ""
echo "Local engines (whisper.cpp, Whisper, Faster Whisper, VOSK) process audio on-device after you download a model."
@@ -38,11 +38,11 @@ EOF
# and update in place instead of redoing first-time setup. Choosing the full
# guided setup continues below and can re-point the engine deliberately.
if [[ "${EXISTING_INSTALL:-no}" == "yes" ]]; then
echo "An existing Vocalinux installation was detected:"
echo "An existing Voculinux installation was detected:"
echo " Configuration: $CONFIG_DIR/config.json (kept unchanged by an upgrade)"
echo " Virtual env: $VENV_DIR (reused by an upgrade)"
echo ""
echo " 1. Upgrade (keep current settings) - update Vocalinux only"
echo " 1. Upgrade (keep current settings) - update Voculinux only"
echo " 2. Full guided setup - choose engine, backend, and model options"
echo ""
@@ -330,7 +330,7 @@ EOF
echo " Remote Server: $REMOTE_DISPLAY"
fi
echo " Models: $MODELS_DISPLAY"
echo " Install Location: ${INSTALL_DIR:-\$HOME/.local/share/vocalinux}"
echo " Install Location: ${INSTALL_DIR:-\$HOME/.local/share/voculinux}"
echo ""
read_prompt -p "Press Enter to continue with installation, or Ctrl+C to cancel..."
echo ""
+8 -8
View File
@@ -191,7 +191,7 @@ install_whisper_model() {
print_info "Downloading Whisper tiny model..."
print_info "This may take a few minutes depending on your internet connection."
local TEMP_FILE="$VOCALINUX_TMP_DIR/tiny.pt"
local TEMP_FILE="$VOCULINUX_TMP_DIR/tiny.pt"
if ! download_model_file "$TINY_MODEL_URL" "$TEMP_FILE" "Whisper model"; then
return 1
@@ -214,7 +214,7 @@ install_whisper_model() {
print_success "Whisper tiny model installed successfully ($MODEL_SIZE)"
# Create a marker file to indicate this model was pre-installed
echo "$(date)" > "$WHISPER_DIR/.vocalinux_preinstalled"
echo "$(date)" > "$WHISPER_DIR/.voculinux_preinstalled"
return 0
else
@@ -241,7 +241,7 @@ install_vosk_models() {
# is deleted after unpacking. So whoever unpacks it records the verified zip
# digest in a stamp (here, and in the app's own downloader), and the directory
# is trusted only while that stamp matches what we pin today.
local SMALL_MODEL_STAMP="$SMALL_MODEL_PATH/.vocalinux_verified"
local SMALL_MODEL_STAMP="$SMALL_MODEL_PATH/.voculinux_verified"
local EXPECTED_ZIP_DIGEST
EXPECTED_ZIP_DIGEST=$(pinned_digest_for "$SMALL_MODEL_ARCHIVE" || true)
if [ -d "$SMALL_MODEL_PATH" ]; then
@@ -282,7 +282,7 @@ install_vosk_models() {
print_info "Downloading small VOSK model (approximately 40MB)..."
print_info "This may take a few minutes depending on your internet connection."
local TEMP_ZIP="$VOCALINUX_TMP_DIR/$(basename $SMALL_MODEL_URL)"
local TEMP_ZIP="$VOCULINUX_TMP_DIR/$(basename $SMALL_MODEL_URL)"
if ! download_model_file "$SMALL_MODEL_URL" "$TEMP_ZIP" "VOSK model"; then
return 1
@@ -334,13 +334,13 @@ install_vosk_models() {
fi
chmod -R 755 "$STAGING_DIR/$SMALL_MODEL_NAME"
echo "$(date)" > "$STAGING_DIR/$SMALL_MODEL_NAME/.vocalinux_preinstalled"
echo "$(date)" > "$STAGING_DIR/$SMALL_MODEL_NAME/.voculinux_preinstalled"
# Record the digest this tree was extracted from, so a later run can tell a
# verified model from one that merely exists. Written before the swap: an
# unstamped tree is one this function would download all over again.
if [ -z "$EXPECTED_ZIP_DIGEST" ] ||
! printf '%s\n' "$EXPECTED_ZIP_DIGEST" > "$STAGING_DIR/$SMALL_MODEL_NAME/.vocalinux_verified"; then
! printf '%s\n' "$EXPECTED_ZIP_DIGEST" > "$STAGING_DIR/$SMALL_MODEL_NAME/.voculinux_verified"; then
print_error "Could not record the verified digest for $SMALL_MODEL_NAME"
rm -rf "$STAGING_DIR"
return 1
@@ -418,7 +418,7 @@ install_whispercpp_model() {
print_info "Downloading whisper.cpp tiny model..."
print_info "This may take a few minutes depending on your internet connection."
local TEMP_FILE="$VOCALINUX_TMP_DIR/ggml-tiny.bin"
local TEMP_FILE="$VOCULINUX_TMP_DIR/ggml-tiny.bin"
if ! download_model_file "$TINY_MODEL_URL" "$TEMP_FILE" "whisper.cpp model"; then
return 1
@@ -441,7 +441,7 @@ install_whispercpp_model() {
print_success "whisper.cpp tiny model installed successfully ($MODEL_SIZE)"
# Create a marker file to indicate this model was pre-installed
echo "$(date)" > "$WHISPERCPP_DIR/.vocalinux_preinstalled"
echo "$(date)" > "$WHISPERCPP_DIR/.voculinux_preinstalled"
return 0
else
+1 -1
View File
@@ -565,7 +565,7 @@ install_system_dependencies() {
print_error "Unsupported distribution family: $DISTRO_FAMILY"
print_info ""
print_info "Your distribution ($DISTRO_NAME) is not officially supported."
print_info "However, you can still install Vocalinux manually:"
print_info "However, you can still install Voculinux manually:"
print_info ""
print_info "1. Run the dependency checker:"
print_info " bash scripts/check-system-deps.sh"