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:
+14
-14
@@ -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" || {
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user