--- /dev/null
+#!/bin/sh
+# This script should be called by xss-lock on no X activity.
+# xss-lock is started in ~/.dwmrc.
+
+# Set mcabber=1 if mcabber is present and running, else 0
+mcabber=0
+if [ -d ~/.mcabber ]; then
+ if [ -p ~/.mcabber/mcabber.fifo ]; then
+ mcabber=1
+ fi
+fi
+
+# Suspend dunst messages
+killall -SIGUSR1 -u $USER dunst 2>/dev/null
+
+# Mark idle in mcabber
+[ $mcabber -eq 1 ] && echo "/status away (Auto-idle)" > ~/.mcabber/mcabber.fifo
+
+# Lock the screen and wait until unlocked
+i3lock --nofork --color=000000
+
+# Mark online in mcabber
+[ $mcabber -eq 1 ] && echo "/status online -" > ~/.mcabber/mcabber.fifo
+
+# Resume dunst messages
+killall -SIGUSR2 -u $USER dunst 2>/dev/null
dispcfg
# Screen saver. DPMS standby -> suspend -> off in seconds
-# xss-lock calls i3lock on no X activity (DPMS standby)
xset dpms 300 600 1200
-(pgrep -x xss-lock || exec xss-lock -- i3lock --dpms ) &
+
+# Use xss-lock to call a program on no X activity (DPMS standby)
+if [ -x ~/.Xidle ]; then
+ # If provided, .Xidle can do stuff before and after a call to 'i3lock -n'
+ (pgrep -x xss-lock || exec xss-lock -- ~/.Xidle ) &
+elif [ -x /usr/bin/i3lock ]; then
+ # Fall back to i3lock, which provides a screen lock.
+ # Instead of --dpms use --color. This is less confusing on monitors that
+ # are slow to sync back up. And since X should generally have the monitor
+ # suspended by this point anyway, the behavior should only change in the
+ # case of things like an invalid password being entered.
+ (pgrep -x xss-lock || exec xss-lock -- i3lock --color=000000 ) &
+fi
# Turn off touchpad (later use a toggle)
type synclient 2>/dev/null && synclient TouchpadOff=1
dolink ../.dotfiles/mcabberrc .mcabber/mcabberrc
dolink ../.dotfiles/mcabber.eventcmd .mcabber/eventcmd
dolink ../../.dotfiles/profrc .config/profanity/profrc
+dolink .dotfiles/Xidle .Xidle