mirror-kde-plasma-desktop/kconf_update/50-krunner-activate-typing.sh
Mr Smith dd5dff1aa4 Ask for bash in 50-krunner-activate-typing.sh
50-krunner-activate-typing.sh contains bashisms, so the shebang should ask
env for bash, not sh. When /bin/sh is linked to a shell other than bash, the
script won't work.
2026-10-02 14:37:32 -04:00

72 lines
3 KiB
Bash
Executable file

#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2026 Guillermo Steren <gstkein@gmail.com>
#
# SPDX-License-Identifier: GPL-2.0-or-later
# kconf update script to migrate users who previously disabled
# activateWhenTypingOnDesktop for KRunner. This script only flips
# users who explicitly set the key to "false" to "true" and
# leaves unset keys untouched.
# Minimal behavior:
# - Locate the user config file (prefer $HOME/.config/krunnerrc)
# - If the file exists and contains the key ActivateWhenTypingOnDesktop,
# set that key to "true" (make a backup first). Do not create the key.
# Locate config file
if [ -f "$HOME/.config/krunnerrc" ]; then
CONFIG_FILE="$HOME/.config/krunnerrc"
elif [ -n "${XDG_CONFIG_HOME:-}" ] && [ -f "${XDG_CONFIG_HOME}/krunnerrc" ]; then
CONFIG_FILE="${XDG_CONFIG_HOME}/krunnerrc"
else
# No existing user config found; nothing to do.
exit 0
fi
# Only modify if the key exists in the file
if grep -q '^[[:space:]]*ActivateWhenTypingOnDesktop[[:space:]]*=' "$CONFIG_FILE"; then
# Read the current value so we can react if it was explicitly "false"
OLDVAL=$(awk -F= '/^[[:space:]]*ActivateWhenTypingOnDesktop[[:space:]]*=/{gsub(/^[[:space:]]+|[[:space:]]+$/,"",$2); print $2; exit}' "$CONFIG_FILE")
cp -a "$CONFIG_FILE" "$CONFIG_FILE".bak 2>/dev/null || true
# Remove the key entirely from the user's config (migrate to default behavior).
sed -i '/^[[:space:]]*ActivateWhenTypingOnDesktop[[:space:]]*=.*/d' "$CONFIG_FILE"
# If the user explicitly disabled activateWhenTypingOnDesktop, also enable
# the containment/plasmoid option `useTypeAhead` where present.
if [ "${OLDVAL:-}" = "false" ]; then
SEARCH_DIR="${XDG_CONFIG_HOME:-$HOME/.config}"
# Prefer the standard applets file in $HOME/.config if present
candidates=()
if [ -f "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" ]; then
candidates+=("$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc")
fi
if [ -n "${XDG_CONFIG_HOME:-}" ] && [ -f "${XDG_CONFIG_HOME}/plasma-org.kde.plasma.desktop-appletsrc" ]; then
candidates+=("${XDG_CONFIG_HOME}/plasma-org.kde.plasma.desktop-appletsrc")
fi
# If none of the standard locations exist, search the config dir for matching files
if [ ${#candidates[@]} -eq 0 ]; then
while IFS= read -r -d '' f; do
candidates+=("$f")
done < <(find "$SEARCH_DIR" -type f -name 'plasma-org.kde.plasma.desktop-appletsrc*' -print0 2>/dev/null)
fi
for f in "${candidates[@]:-}"
do
if [ -z "$f" ] || [ ! -f "$f" ]; then
continue
fi
if grep -q '^[[:space:]]*useTypeAhead[[:space:]]*=' "$f" 2>/dev/null; then
cp -a "$f" "$f".bak 2>/dev/null || true
# Set any existing useTypeAhead assignments to true
sed -i 's/^[[:space:]]*useTypeAhead[[:space:]]*=.*/useTypeAhead=true/g' "$f"
fi
done
fi
fi
exit 0