nix/scripts/x
2026-02-14 21:52:18 -05:00

74 lines
1.5 KiB
Bash
Executable file

#!/bin/sh
# X11 utilities -- only usable under X11 sessions
[ "$XDG_SESSION_TYPE" = "x11" ] || {
echo "x: requires X11 session (current: ${XDG_SESSION_TYPE:-unknown})" >&2
exit 1
}
require() {
for cmd in "$@"; do
command -v "$cmd" >/dev/null 2>&1 || {
echo "x: missing dependency: $cmd" >&2
exit 1
}
done
}
cmd="$1"; shift
case "$cmd" in
setup)
require xrdb xset xmodmap xss-lock slock
xrdb -merge "$XDG_CONFIG_HOME"/X11/xresources."$THEME"
xset b off
xset m 0
xset r rate 300 50
xset s 300
xset dpms 420 540 720
xmodmap "$XDG_CONFIG_HOME"/X11/xmodmap
xss-lock -- slock &
;;
bg)
require xrandr feh
randr="$(xrandr | rg ' connected ')"
mons="$(echo "$randr" | wc -l)"
wpdir="$HOME"/Pictures/wp
[ "$1" ] && bgone="$1" || bgone="$wpdir"/one/cliff.jpg
cmd="feh --no-fehbg --bg-fill $bgone"
if [ "$mons" = 2 ]; then
[ "$2" ] && bgtwo="$2" || bgtwo="$wpdir"/two/lilies.jpg
cmd="$cmd --bg-fill $bgtwo"
else
cmd="feh --no-fehbg --bg-fill $bgone"
fi
eval "$cmd"
;;
mon)
require xrandr
mons="$(xrandr | rg --no-config ' connected ' | awk '{ print $1 }')"
one="$(echo "$mons" | head -n 1)"
two="$(echo "$mons" | tail -n 1)"
case "$two" in
*None* | "$one")
unset two
;;
esac
xrandr --auto
xrandr --output "$one" --primary --mode 1920x1200 --scale 1x1 --set TearFree on --dpi 161.73
[ -z "$two" ] && exit
xrandr --output "$one" --pos 960x2160 --output "$two" --scale 1.5x1.5 --pos 0x0
;;
*)
echo "Usage: x {setup|bg|mon}" >&2
exit 1
;;
esac