#!/bin/sh # dmode — Display mode selector via dmenu # Switches picom shaders for different visual modes STATE_FILE="/tmp/display_mode_state" SHADER_DIR="$HOME/.config/picom/shaders" PICOM_CONF="$HOME/.config/picom.conf" current_mode="Normal" [ -f "$STATE_FILE" ] && current_mode=$(cat "$STATE_FILE") # Apply a shader (kill picom, restart with shader) apply_mode() { shader="$1" label="$2" pkill -x picom sleep 0.5 if [ -z "$shader" ]; then picom --config "$PICOM_CONF" -b else picom --config "$PICOM_CONF" --window-shader-fg "$shader" -b fi echo "$label" > "$STATE_FILE" notify-send "Display Mode" "$label" } # Main menu choice=$(printf '%s\n' \ " Normal" \ " Reading Mode" \ " Cinematic Mode" \ " Focus Mode" \ | dmenu -i -l 5 -p " Mode [$current_mode]:") [ -z "$choice" ] && exit 0 case "$choice" in *Normal*) apply_mode "" "Normal" ;; *Reading*) apply_mode "$SHADER_DIR/reading_mode.glsl" "Reading Mode" ;; *Focus*) apply_mode "$SHADER_DIR/focus_mode.glsl" "Focus Mode" ;; *Cinematic*) # Nested submenu for film types film=$(printf '%s\n' \ " Technicolor (1930s-60s)" \ " Film Noir (1940s-50s)" \ " Kodachrome (1960s-70s)" \ " 70mm Epic (1960s-70s)" \ " Faded Film (1970s-80s)" \ | dmenu -i -l 5 -p " Film Type:") [ -z "$film" ] && exit 0 case "$film" in *Technicolor*) apply_mode "$SHADER_DIR/technicolor.glsl" "Cinematic: Technicolor" ;; *Noir*) apply_mode "$SHADER_DIR/film_noir.glsl" "Cinematic: Film Noir" ;; *Kodachrome*) apply_mode "$SHADER_DIR/kodachrome.glsl" "Cinematic: Kodachrome" ;; *70mm*) apply_mode "$SHADER_DIR/epic_70mm.glsl" "Cinematic: 70mm Epic" ;; *Faded*) apply_mode "$SHADER_DIR/faded_film.glsl" "Cinematic: Faded Film" ;; esac ;; esac