summaryrefslogtreecommitdiff
path: root/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool
diff options
context:
space:
mode:
authornippy <you@example.com>2026-04-18 13:49:56 +0200
committernippy <you@example.com>2026-04-18 13:49:56 +0200
commit5d94c0a7d44a2255b81815a52a7056a94a39842d (patch)
tree759bdea9645c6a62f9e1e4c001f7d81cccd120d2 /raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool
parente79cdf210b267f21a186255ce1a4d50029439d54 (diff)
downloadRaveOS-PKGBUILD-5d94c0a7d44a2255b81815a52a7056a94a39842d.tar.gz
RaveOS-PKGBUILD-5d94c0a7d44a2255b81815a52a7056a94a39842d.zip
update Raveos themes
Diffstat (limited to 'raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool')
-rwxr-xr-xraveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool/installer.sh300
-rw-r--r--raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool/shutdowntimerctl55
2 files changed, 355 insertions, 0 deletions
diff --git a/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool/installer.sh b/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool/installer.sh
new file mode 100755
index 0000000..56d4167
--- /dev/null
+++ b/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool/installer.sh
@@ -0,0 +1,300 @@
+#!/bin/bash
+
+# SPDX-FileCopyrightText: 2023 Deminder <tremminder@gmail.com>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# Adapted from cpupower extension by:
+# Martin Koppehel <psl.kontakt@gmail.com>, Fin Christensen <christensen.fin@gmail.com>
+
+# installer.sh - This script installs a policykit rule for the Shutdown Timer gnome-shell extension.
+#
+# This file is part of the gnome-shell extension ShutdownTimer@Deminder.
+
+
+set -e
+
+################################
+# EXTENSION SPECIFIC OPTIONS: #
+################################
+
+EXTENSION_NAME="Shutdown Timer"
+ACTION_BASE="dem.shutdowntimer"
+RULE_BASE="$ACTION_BASE.settimers"
+CFC_BASE="shutdowntimerctl"
+POLKIT_DIR="polkit"
+VERSION=1
+
+
+EXIT_SUCCESS=0
+EXIT_INVALID_ARG=1
+EXIT_FAILED=2
+EXIT_NEEDS_UPDATE=3
+EXIT_NEEDS_SECURITY_UPDATE=4
+EXIT_NOT_INSTALLED=5
+EXIT_MUST_BE_ROOT=6
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #stackoverflow 59895
+
+export TEXTDOMAINDIR="$DIR/../locale"
+export TEXTDOMAIN="ShutdownTimer"
+function gtxt() {
+ gettext "$1"
+}
+
+function polkit_version_greater_than() {
+ printf -v versions '%s\n%s' "$(pkaction --version | cut -d' ' -f3)" "$1"
+ [[ $versions != "$(sort -V <<< "$versions")" ]]
+}
+
+function polkit_action_lookup_program_gets_realpath() {
+ polkit_version_greater_than "126"
+}
+
+function polkit_supports_standalonerule() {
+ polkit_version_greater_than "0.106"
+}
+
+function check_support() {
+ local polkit_info=", stand-alone polkit rules"
+ if polkit_supports_standalonerule; then
+ polkit_info+=" available"
+ if polkit_action_lookup_program_gets_realpath; then
+ polkit_info+=", with realpath program lookup"
+ fi
+ else
+ polkit_info+=" not avaliable"
+ fi
+ if which rtcwake >/dev/null 2>&1
+ then
+ echo "rtcwake supported${polkit_info}"
+ exit ${EXIT_SUCCESS}
+ else
+ echo "rtcwake unsupported${polkit_info}"
+ exit ${EXIT_FAILED}
+ fi
+}
+
+function require_root() {
+ if [ "${EUID}" -ne 0 ]; then
+ echo "This action must be run as root!"
+ exit ${EXIT_MUST_BE_ROOT}
+ fi
+}
+
+function fail() {
+ echo "$(gtxt "Failed")${1}" >&2 && exit ${EXIT_FAILED}
+}
+DEFAULT_SUCCESS_MSG=$(gtxt 'Success')
+
+function success() {
+ echo -n "${1:-$DEFAULT_SUCCESS_MSG}"
+ echo -e "\U1F7E2"
+}
+
+
+
+########################
+# GENERALIZED SCRIPT: #
+########################
+
+function usage() {
+ echo "Usage: installer.sh [options] {supported,install,check,update,uninstall}"
+ echo
+ echo "Available options:"
+ echo " --tool-user USER Set the user of the tool (default: \$USER)"
+ echo
+ exit ${EXIT_INVALID_ARG}
+}
+
+if [ $# -lt 1 ]
+then
+ usage
+fi
+
+ACTION=""
+TOOL_USER="$USER"
+while [[ $# -gt 0 ]]
+do
+ key="$1"
+
+ # we have to use command line arguments here as pkexec does not support
+ # setting environment variables
+ case $key in
+ --tool-user)
+ TOOL_USER="$2"
+ shift
+ shift
+ ;;
+ supported|install|check|update|uninstall)
+ if [ -z "$ACTION" ]
+ then
+ ACTION="$1"
+ else
+ echo "Too many actions specified. Please give at most 1."
+ usage
+ fi
+ shift
+ ;;
+ *)
+ echo "Unknown argument $key"
+ usage
+ ;;
+ esac
+done
+
+
+CFC_DIR="/usr/local/bin"
+RULE_DIR="/etc/polkit-1/rules.d"
+
+if polkit_supports_standalonerule; then
+ RULE_IN="${DIR}/../${POLKIT_DIR}/10-$RULE_BASE.rules"
+else
+ RULE_IN="${RULE_IN}.legacy"
+ ACTION_IN="${DIR}/../${POLKIT_DIR}/${ACTION_BASE}.policy.in"
+fi
+TOOL_IN="${DIR}/$CFC_BASE"
+
+TOOL_OUT="${CFC_DIR}/${CFC_BASE}-${TOOL_USER}"
+RULE_OUT="${RULE_DIR}/10-${RULE_BASE}-${TOOL_USER}.rules"
+ACTION_ID="${RULE_BASE}.${TOOL_USER}"
+ACTION_OUT="/usr/share/polkit-1/actions/${ACTION_ID}.policy"
+
+function print_policy_xml() {
+ sed -e "s:{{PATH}}:${TOOL_OUT}:g" \
+ -e "s:{{ACTION_BASE}}:${ACTION_BASE}:g" \
+ -e "s:{{ACTION_ID}}:${ACTION_ID}:g" "${ACTION_IN}"
+}
+
+function print_rules_javascript() {
+ if [[ "$RULE_IN" == *.legacy ]]; then
+ sed -e "s:{{RULE_BASE}}:${RULE_BASE}:g" "${RULE_IN}"
+ else
+ local tool_out=${TOOL_OUT}
+ if polkit_action_lookup_program_gets_realpath; then
+ tool_out="$(realpath "${TOOL_OUT}")"
+ fi
+ sed -e "s:{{TOOL_OUT}}:${tool_out}:g" \
+ -e "s:{{TOOL_USER}}:${TOOL_USER}:g" "${RULE_IN}"
+ fi
+
+}
+
+if [ "$ACTION" = "supported" ]
+then
+ check_support
+fi
+
+
+if [ "$ACTION" = "check" ]
+then
+ require_root
+ NOT_FOUND=0
+ NEEDS_UPDATE=0
+ function check_installed() {
+ if [ -f "$1" ]; then
+ echo -n "Found: $1"
+ if cmp --silent "$1" "$2"; then
+ echo " (OK)"
+ else
+ echo " (needs update)"
+ NEEDS_UPDATE=1
+ fi
+ else
+ echo "Not found: $1"
+ NOT_FOUND=1
+ fi
+ }
+ check_installed "${TOOL_OUT}" "${TOOL_IN}"
+ check_installed "${RULE_OUT}" <(print_rules_javascript)
+ if [ "$NEEDS_UPDATE" -gt 0 ]; then
+ echo "Your $EXTENSION_NAME installation needs updating!"
+ exit ${EXIT_NEEDS_UPDATE}
+ fi
+ if [ "$NOT_FOUND" -gt 0 ]; then
+ echo "Not installed!"
+ exit ${EXIT_NOT_INSTALLED}
+ fi
+
+ echo "OK"
+ exit ${EXIT_SUCCESS}
+fi
+
+TOOL_NAME=$(basename ${TOOL_OUT})
+
+if [ "$ACTION" = "install" ]
+then
+ require_root
+ echo -n "$(gtxt 'Installing') ${TOOL_NAME} $(gtxt 'tool')... "
+ mkdir -p "${CFC_DIR}"
+ install "${TOOL_IN}" "${TOOL_OUT}" || fail
+ success
+
+ if [ ! -z "$ACTION_IN" ];then
+ echo "$(gtxt 'Using legacy policykit install')..."
+ echo -n "$(gtxt 'Installing') $(gtxt 'policykit action')..."
+ (print_policy_xml > "${ACTION_OUT}" 2>/dev/null && chmod 0644 "${ACTION_OUT}") || fail
+ success
+ fi
+
+ echo -n "$(gtxt 'Installing') $(gtxt 'policykit rule')..."
+ mkdir -p "${RULE_DIR}"
+ (print_rules_javascript > "${RULE_OUT}" 2>/dev/null && chmod 0644 "${RULE_OUT}") || fail
+ success
+
+ exit ${EXIT_SUCCESS}
+fi
+
+if [ "$ACTION" = "update" ]
+then
+ require_root
+ "${BASH_SOURCE[0]}" --tool-user "${TOOL_USER}" uninstall || exit $?
+ "${BASH_SOURCE[0]}" --tool-user "${TOOL_USER}" install || exit $?
+
+ exit ${EXIT_SUCCESS}
+fi
+
+if [ "$ACTION" = "uninstall" ]
+then
+ require_root
+ LEG_CFG_OUT="/usr/bin/shutdowntimerctl-$TOOL_USER"
+ if [ -f "$LEG_CFG_OUT" ]
+ then
+ # remove legacy "tool" install
+ echo -n "$(gtxt 'Uninstalling') $(gtxt 'tool')..."
+ rm "${LEG_CFG_OUT}" || fail " - $(gtxt 'cannot remove') ${LEG_CFG_OUT}" && success
+ fi
+
+ if [ -f "$ACTION_OUT" ]
+ then
+ # remove legacy "policykit action" install
+ echo -n "$(gtxt 'Uninstalling') $(gtxt 'policykit action')..."
+ rm "${ACTION_OUT}" || fail " - $(gtxt 'cannot remove') ${ACTION_OUT}" && success
+ fi
+ LEG_RULE_OUT="/usr/share/polkit-1/rules.d/10-dem.shutdowntimer.settimers.rules"
+ if [ -f "$LEG_RULE_OUT" ]
+ then
+ # remove legacy "policykit action" install
+ echo -n "$(gtxt 'Uninstalling') $(gtxt 'policykit rule')..."
+ rm "${LEG_RULE_OUT}" || fail " - $(gtxt 'cannot remove') ${LEG_RULE_OUT}" && success
+ fi
+
+ function uninstallFile() {
+ echo -n "$(gtxt 'Uninstalling') $2... "
+ if [ -f "$1" ]
+ then
+ rm "$1" || fail " - $(gtxt 'cannot remove') $1" && success
+ else
+ echo "$2 $(gtxt 'not installed at') $1"
+ fi
+ }
+
+ uninstallFile "${TOOL_OUT}" "${TOOL_NAME} $(gtxt 'tool')"
+ uninstallFile "${RULE_OUT}" "$(gtxt 'policykit rule')"
+
+ exit ${EXIT_SUCCESS}
+fi
+
+echo "Unknown parameter."
+usage
+
+
diff --git a/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool/shutdowntimerctl b/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool/shutdowntimerctl
new file mode 100644
index 0000000..c79c6b0
--- /dev/null
+++ b/raveos-theme/gnome/theme-data/extensions/installed/ShutdownTimer@deminder/tool/shutdowntimerctl
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+# SPDX-FileCopyrightText: 2023 Deminder <tremminder@gmail.com>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# shutdowntimerctl - This script can configure the shutdown and rtc wake alarm schedule.
+#
+# This file is part of the gnome-shell extension ShutdownTimer@Deminder.
+
+SHUTDOWN_BIN=/usr/sbin/shutdown
+RTCWAKE_BIN=/usr/sbin/rtcwake
+
+SHUTDOWN_MODE="-P"
+if [ ! -z "$2" ] && [ "$2" -gt 0 ];then
+ POSITIVE_VALUE="$2"
+fi
+
+function print_help() {
+ echo "[help] (show this help)" >&2
+ echo "[shutdown|reboot|shutdown-cancel] {MINUTES}" >&2
+ echo "[wake|wake-cancel] {MINUTES} (default: 0)" >&2
+}
+
+if [ "$#" -lt 1 ]; then
+ print_help
+ exit
+fi
+
+case "$1" in
+ shutdown|reboot)
+ if [[ "$1" = "reboot" ]]; then
+ SHUTDOWN_MODE="-r"
+ fi
+ $SHUTDOWN_BIN "$SHUTDOWN_MODE" "$POSITIVE_VALUE"
+ ;;
+ shutdown-cancel)
+ $SHUTDOWN_BIN -c
+ ;;
+ wake)
+ $RTCWAKE_BIN --date +${POSITIVE_VALUE:-0}min --mode no
+ ;;
+ wake-cancel)
+ $RTCWAKE_BIN --mode disable
+ ;;
+ --version)
+ echo 1
+ ;;
+ -h|help)
+ print_help
+ ;;
+ *)
+ echo "Invalid argument: $1" >&2
+ print_help
+esac
+