1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/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