diff --git a/env/.config/systemd/user/tmux-kill-sessions.service b/env/.config/systemd/user/tmux-kill-sessions.service new file mode 100644 index 0000000..6b2c0f0 --- /dev/null +++ b/env/.config/systemd/user/tmux-kill-sessions.service @@ -0,0 +1,7 @@ +[Unit] +Description=Tmux kill sessions service +After=graphical-session.target + +[Service] +Type=oneshot +ExecStart=%h/.local/scripts/tmux-kill-old-sessions diff --git a/env/.config/systemd/user/tmux-kill-sessions.timer b/env/.config/systemd/user/tmux-kill-sessions.timer new file mode 100644 index 0000000..3111556 --- /dev/null +++ b/env/.config/systemd/user/tmux-kill-sessions.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Tmux kill sessions timer +Requires=tmux-kill-sessions.service + +[Timer] +OnBootSec=1min +OnUnitActiveSec=2hours +AccuracySec=10sec + +[Install] +WantedBy=timers.target diff --git a/env/.local/scripts/tmux-kill-old-sessions b/env/.local/scripts/tmux-kill-old-sessions new file mode 100755 index 0000000..54ae675 --- /dev/null +++ b/env/.local/scripts/tmux-kill-old-sessions @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# Kills tmux sessions that are past the threshold to free up resources. +# +# Adapted from https://gist.github.com/dhulihan/4c65e868851660fb0d8bfa2d059e7967 + +set -e +set -o nounset +set -o pipefail + +SCRIPTS=${SCRIPTS:-$HOME/.local/scripts} +THIS_FILE=${BASH_SOURCE[0]} +LOG_LABEL=$(basename "$THIS_FILE") +THIS=${THIS:-$LOG_LABEL} +LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"} + +# Threshold +TOO_OLD_THRESHOLD=7200 # 2 hours +NOW=$(date +%s) + +# Logging utility function, use in place of echo. +log() { + logging log --source "$THIS_FILE" "$@" +} + +################################################################################ +# MAIN +################################################################################ + +# Setup logging file and label. +source "$SCRIPTS/hypr/logging" +setup-logging "$LOG_FILE" "$LOG_LABEL" + +tmux ls -F '#{session_name}:#{session_activity}' | while read -r line; do + session_name=${line%:*} + last_activity=${line#*:} + elapsed=$((NOW - last_activity)) + + if [[ "$elapsed" -gt "$TOO_OLD_THRESHOLD" ]]; then + log "$session_name is ${elapsed}s inactive, killing..." + tmux kill-session -t "$session_name" + fi +done diff --git a/system b/system index 4417240..5c9af4b 100755 --- a/system +++ b/system @@ -22,7 +22,7 @@ log() { } log_and_run() { - log "Running: \"$@\"" + log "Running: \"$*\"" if [[ $dry_run == "0" ]]; then eval $1 @@ -37,5 +37,6 @@ log_and_run "sudo setcap "cap_dac_override+p" $(which espanso)" log_and_run "systemctl --user enable --now logout-task.service" log_and_run "systemctl --user enable --now battery-monitor.timer" +log_and_run "systemctl --user enable --now tmux-kill-sessions.timer" log_and_run "sudo systemctl enable --now pcscd.service" log_and_run "sudo systemctl enable --now firewalld.service"