testsAndMisc/linux_configuration/scripts/single_use/features/setup_activitywatch.sh
Krzysztof kuhy Rudnicki 0aa78ea7aa
Some checks are pending
Pre-commit checks / pre-commit (push) Waiting to run
Shell tests / shell-tests (push) Waiting to run
Shell tests / arch-tests (push) Waiting to run
Split three more scripts; make the verifier catch heredoc cuts
transcribe.sh 473 -> 39, setup_activitywatch.sh 457 -> 102 and
setup_wireguard_ssh.sh 464 -> 136.

enforce_vbox_hosts.sh is reverted: its seam landed inside a heredoc and
the resulting lib had an unterminated here-document. That is the worst
failure yet, because shellcheck reported it only as SC1094 on the caller
- which reads like a nicety, not a file that will not parse. The
verifier now runs bash -n over every lib before linting the entry and
names the offending file; proven by corrupting a copy and restoring it.

Also guarded a cd before `git clone ... .`, which would otherwise have
cloned an AUR repo into the caller's directory.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
2026-08-16 20:16:08 +02:00

105 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# Script to set up ActivityWatch on Arch Linux with i3
# Handles installation, startup, autostart, and i3blocks status
# Handles sudo privileges automatically
set -e # Exit on any error
# Source common library for shared functions
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
# shellcheck source=../../lib/common.sh
source "$SCRIPT_DIR/../../lib/common.sh"
# Function to check and request sudo privileges for package installation
check_sudo() {
if [[ $EUID -ne 0 ]] && [[ $1 == "install" ]]; then
echo "Package installation requires sudo privileges."
echo "Requesting sudo access..."
exec sudo "$0" "$@"
fi
}
# Get the actual user (even when running with sudo)
set_actual_user_vars
echo "ActivityWatch Setup for Arch Linux + i3"
echo "======================================="
echo "Current Date: $(date)"
echo "User: $ACTUAL_USER"
echo "Target user: $ACTUAL_USER"
echo "User home: $USER_HOME"
# Function to check if ActivityWatch is installed
check_activitywatch_installed() {
echo ""
echo "1. Checking ActivityWatch Installation..."
echo "========================================"
# Check if activitywatch-bin is installed via pacman
if pacman -Qi activitywatch-bin &>/dev/null; then
echo "✓ activitywatch-bin package is installed"
return 0
fi
# Check if aw-qt binary exists in common locations
local common_paths=(
"/usr/bin/aw-qt"
"/usr/local/bin/aw-qt"
"$USER_HOME/.local/bin/aw-qt"
"$USER_HOME/activitywatch/aw-qt"
)
for path in "${common_paths[@]}"; do
if [[ -x $path ]]; then
echo "✓ ActivityWatch found at: $path"
return 0
fi
done
echo "✗ ActivityWatch not found"
return 1
}
# shellcheck source=lib/aw_install.sh
source "$SCRIPT_DIR/lib/aw_install.sh"
# shellcheck source=lib/aw_service.sh
source "$SCRIPT_DIR/lib/aw_service.sh"
# shellcheck source=lib/aw_autostart.sh
source "$SCRIPT_DIR/lib/aw_autostart.sh"
# Main execution flow
main() {
local need_install=false
local need_start=false
# Check installation
if ! check_activitywatch_installed; then
need_install=true
fi
# Install if needed
if [[ $need_install == true ]]; then
install_activitywatch
fi
# Check if running
if ! check_activitywatch_running; then
need_start=true
fi
# Start if needed
if [[ $need_start == true ]]; then
start_activitywatch
fi
# Always set up autostart and i3blocks (in case they're missing)
setup_autostart
create_i3blocks_status
test_setup
show_instructions
}
# Run main function
main "$@"