qusal/salt/dom0/files/bin/qubes-kde-win-rules
Ben Grande bdd4c789c1
fix: avoid echo usage
Echo can interpret operand as an option and checking every variable to
be echoed is troublesome while with printf, if the format specifier is
present before the operand, printing as string can be enforced.
2024-08-06 18:15:24 +02:00

79 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
# SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
## Write KWin rules for window of specific domain to be in specific activity.
# shellcheck disable=SC1090,SC2317
set -eu
file="${XDG_CONFIG_HOME:=${HOME}/.config}/kwinrulesrc"
usage(){
printf '%s\n' "Usage: ${0##*/} <group> <activity>
Example: ${0##*/} personal personal
Example: ${0##*/} fun personal
Example: ${0##*/} work work
If domain is work, dvm-work, disp-work and work-something will all be present
in the work activity" >&2
exit 1
}
writeconf(){
group="$1"
key="$2"
value="$3"
group_id="$(grep -B1 -e "^Description=${group}$" -- "${file}" | head -1 |
tr -d "[" | tr -d "]")"
if test -z "${group_id}"; then
highest_id="$(grep -e "\[[0-9]\+\]" -- "${file}" | tr -d "[" | tr -d "]" |
sort | tail -1)"
if test -n "${highest_id}"; then
group_id="$((highest_id+1))"
else
group_id="0"
fi
fi
kwriteconfig --file "${file}" --group "${group_id}" --key "${key}" \
"${value}"
}
writeconf_group(){
chosen_group="$1"
chosen_activity="$2"
writeconf "${chosen_group}" Description "${chosen_group}"
if test -n "${chosen_activity}"; then
chosen_activity_id="$(kactivities-cli --list-activities |
awk -v activity="${chosen_activity}" '$3 ~ activity {print $2}')"
if test -z "${chosen_activity_id}"; then
printf '%s\n' "Invalid activity name: ${chosen_activity}"
exit 1
fi
writeconf "${chosen_group}" activity "${chosen_activity_id}"
writeconf "${chosen_group}" activityrule 2
fi
## Regex: https://doc.qt.io/qt-6/qregularexpression.html
writeconf "${chosen_group}" title \
"^\\[(disp-|dvm-)?${chosen_group}(-\\S+)?\\] .*"
writeconf "${chosen_group}" titlematch 3
writeconf "${chosen_group}" wmclass "${chosen_group}"
writeconf "${chosen_group}" wmclasscomplete false
writeconf "${chosen_group}" wmclassmatch 2
}
case "${1-}" in
""|-h|--?help) usage;;
*) ;;
esac
case "${2-}" in
"") usage;;
*) ;;
esac
writeconf_group "${1}" "${2}"
dbus-send --type=signal /KWin org.kde.KWin.reloadConfig