# ╔══════════════════════════════════════════════════════════╗ # ║ picom.conf ║ # ╚══════════════════════════════════════════════════════════╝ # ── Backend ────────────────────────────────────────────────────────────────── backend = "glx"; # ── Vsync ──────────────────────────────────────────────────────────────────── vsync = true; # ── Custom shader (gradient window borders) ─────────────────────────────────── # Place gradient-border.glsl in ~/.config/picom/ then uncomment: window-shader-fg-rule = [ "/home/lanceb/.config/picom/gradient-border.glsl:focused" ]; glx-copy-from-front = false; use-damage = true; # ── Corner Rounding ─────────────────────────────────────────────────────────── corner-radius = 5; # Exclude corners on certain window types (optional – comment out if unwanted) rounded-corners-exclude = [ "window_type = 'dock'", "window_type = 'desktop'", "class_g = 'Polybar'", "class_g = 'Rofi'" ]; # ── Opacity ─────────────────────────────────────────────────────────────────── # Unfocused windows get 0.8 opacity inactive-opacity = 0.8; # Focused / active windows are fully opaque active-opacity = 1.0; # Don't let applications override opacity via EWMH hints (set true to respect them) inactive-opacity-override = false; # Exclude certain windows from opacity rules opacity-rule = [ "100:window_type = 'dock'", "100:window_type = 'desktop'", "100:class_g = 'Rofi'", "100:_NET_WM_STATE@:32a *= '_NET_WM_STATE_FULLSCREEN'" ]; # ── Background Blur ─────────────────────────────────────────────────────────── blur-background = true; blur-method = "dual_kawase"; blur-strength = 5; # Don't blur behind the desktop itself blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'", "_GTK_FRAME_EXTENTS@:c" ]; # ── Shadows ─────────────────────────────────────────────────────────────────── shadow = true; shadow-radius = 12; shadow-offset-x = -6; shadow-offset-y = -6; shadow-opacity = 0.6; shadow-exclude = [ "window_type = 'dock'", "window_type = 'desktop'", "_GTK_FRAME_EXTENTS@:c" ]; # ── Fading ──────────────────────────────────────────────────────────────────── fading = true; fade-in-step = 0.03; fade-out-step = 0.03; fade-delta = 5; # ── Window Type Tweaks ──────────────────────────────────────────────────────── wintypes: { normal = { fade = true; shadow = true; }; tooltip = { fade = true; shadow = false; opacity = 0.9; focus = true; }; dock = { shadow = false; clip-shadow-above = true; }; dnd = { shadow = false; }; popup_menu = { opacity = 0.95; }; dropdown_menu = { opacity = 0.95; }; }; # ── Animations ─────────────────────────────────────────────────────────────── animations = ({ triggers = ["open", "show"]; scale-x = { curve = "cubic-bezier(0.22, 1, 0.36, 1)"; duration = 0.18; start = 0.85; end = 1; }; scale-y = "scale-x"; offset-x = "(1 - scale-x) / 2 * window-width"; offset-y = "(1 - scale-y) / 2 * window-height"; shadow-scale-x = "scale-x"; shadow-scale-y = "scale-y"; shadow-offset-x = "offset-x"; shadow-offset-y = "offset-y"; }, { triggers = ["close", "hide"]; scale-x = { curve = "cubic-bezier(0.4, 0, 1, 1)"; duration = 0.15; start = 1; end = 1.1; }; scale-y = "scale-x"; offset-x = "(1 - scale-x) / 2 * window-width"; offset-y = "(1 - scale-y) / 2 * window-height"; shadow-scale-x = "scale-x"; shadow-scale-y = "scale-y"; shadow-offset-x = "offset-x"; shadow-offset-y = "offset-y"; opacity = { curve = "linear"; duration = 0.15; start = "window-raw-opacity-before"; end = 0; }; shadow-opacity = "opacity"; });