#!/bin/bash CONFIG_DIR="${HOME}/.config/set-screen" function get_display_state_hash() { local hash etc read hash etc < <( for i in /sys/class/drm/card*/card*-*; do echo $i cat $i/status cat $i/edid done | sha1sum -b) echo "$hash" } function display_state_dir() { local hash hash="$(get_display_state_hash)" echo "${CONFIG_DIR}/$hash" } function make_display_state_dir() { local dir dir="$(display_state_dir)" mkdir -p "$dir" echo "Created $dir" if [[ -n "$1" ]]; then local srccmd="${CONFIG_DIR}/$1/command" if [[ -x "$srccmd" ]]; then ln -s "$srccmd" "$dir/command" && \ echo "Linked <$1> command" else echo "<$1> command is not there, ignoring" fi fi } function run_display_state_commands() { local dir dir="$(display_state_dir)" if [[ -x "${dir}/command" ]]; then if [[ -x "${CONFIG_DIR}/pre-command" ]]; then "${CONFIG_DIR}/pre-command" fi "${dir}/command" if [[ -x "${CONFIG_DIR}/post-command" ]]; then "${CONFIG_DIR}/post-command" fi else >&2 echo "There's no settings for the current display configuration; run '$0 make' to create them" fi } function print_usage() { cat <&2 print_usage; exit 1 ;; esac