From b0b6a12b238ce2f28c55d61fb9b8f6673ffe2a0e Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Mon, 6 Dec 2021 15:14:02 +0100 Subject: [PATCH] Rewrite picom config --- home/.config/picom.conf | 302 ++++++++++++++++++++++++++++++++++++---- packages.yaml | 3 +- 2 files changed, 275 insertions(+), 30 deletions(-) diff --git a/home/.config/picom.conf b/home/.config/picom.conf index 25e3b2c..4e2c19f 100644 --- a/home/.config/picom.conf +++ b/home/.config/picom.conf @@ -1,16 +1,175 @@ -# Apply blur to terminals +# NOTE 1: This configuration when used as-is, requires --experimental-backends +# command line option to be used, in order to enable the usage of the +# dual-kawase blur method. + +# NOTE 2: With the picom from standard repositories, currently using experimental +# backends will disable the support for rounded corners. If you want to use both +# the dual-kawase blur method and rounded corners, you will need to use a fork. +# However it is not mandantory. If you will use the standard version, you will just +# see a warning in picom's logs each time it's started, you can disable rounded +# corners completely to prevent this. If you do want to use a fork, I recommend this: +# (picom-jonaburg-git on AUR). + +# NOTE 3: The shadows are currently disabled, the reason for this are the issues +# that occur with combining rounded corners and shadows, for more info, check: +# + + +# General settings +################### + +# Daemonize process. Fork to background after initialization. +# Causes issues with certain (badly-written) drivers. +daemon = false + +# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`. +# `xrender` is the default one. +# We use GLX since it's generally a lot faster than xrender. +# There usually aren't anny issues with this, but if you do experience some +# try falling back to xrender. +backend = "glx"; + +# To properly use the GLX backend, we need to enable experimental backends +experimental-backends = true; + +# Enable/Disable VSync. +vsync = true; + +# Enable remote control via D-Bus. +dbus = false; + +# Try to detect WM windows (a non-override-redirect window with no +# child that has 'WM_STATE') and mark them as active. +mark-wmwin-focused = true; + +# Mark override-redirect windows that doesn't have a child window +# with 'WM_STATE' focused. +mark-ovredir-focused = true; + +# Try to detect windows with rounded corners and don't consider them +# shaped windows. The accuracy is not very high, unfortunately. +detect-rounded-corners = true; + +# Detect '_NET_WM_OPACITY' on client windows, useful for window managers +# not passing '_NET_WM_OPACITY' of client windows to frame windows. +detect-client-opacity = true; + +# Specify refresh rate of the screen. If not specified or 0, picom will +# try detecting this with X RandR extension. +refresh-rate = 0; + +# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer. +# Might cause incorrect opacity when rendering transparent content (but never +# practically happened) and may not work with blur-background. +# My tests show a 15% performance boost. Recommended. +glx-no-stencil = true; + +# GLX backend: Avoid rebinding pixmap on window damage. +# Probably could improve performance on rapid window content changes, +# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.). +# Recommended if it works. +glx-no-rebind-pixmap = true; + +# Disable/Enable the use of damage information. +# Disabling cause the whole screen to be redrawn everytime, instead of the part +# of the screen has actually changed. Potentially degrades the performance, +# but might fix some artifacts. It is recommended to keep this enabled. +# The opposing option is no-use-damage +use-damage = true + +# Window type settings +# +# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard: +# "unknown", "desktop", "dock", "toolbar", "menu", "utility", +# "splash", "dialog", "normal", "dropdown_menu", "popup_menu", +# "tooltip", "notification", "combo", and "dnd". +# +# Following per window-type options are available: :: +# +# fade, shadow::: +# Controls window-type-specific shadow and fade settings. +# +# opacity::: +# Controls default opacity of the window type. +# +# focus::: +# Controls whether the window of this type is to be always considered focused. +# (By default, all window types except "normal" and "dialog" has this on.) +# +# full-shadow::: +# Controls whether shadow is drawn under the parts of the window that you +# normally won't be able to see. Useful when the window has parts of it +# transparent, and you want shadows in those areas. +# +# redir-ignore::: +# Controls whether this type of windows should cause screen to become +# redirected again after been unredirected. If you have unredir-if-possible +# set, and doesn't want certain window to cause unnecessary screen redirection, +# you can set this to `true`. +# +wintypes: +{ + normal = { full-shadow = true; blur-background = true; }; + splash = { blur-background = false; }; + menu = { full-shadow = true; }; + tooltip = { fade = true; shadow = false; focus = true;}; + dock = { shadow = false; }; + dnd = { shadow = false; }; + popup_menu = { full-shadow = true; }; + utility = { full-shadow = true; }; + toolbar = { full-shadow = true; }; + notification = { opacity = 1; } +}; + + +# Transparency / Opacity +######################### + +# Specify a list of opacity rules. # format: "[Opacity level]:[xprop info name] = '[xprop value]'" -# class_g reffers to class in position #0, -# class_i reffers to class in position #1 +# - class_g reffers to class in position #0, +# - class_i reffers to class in position #1 +# Note we don't make any guarantee about possible conflicts with other +# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows. + +# Apply blur to terminals opacity-rule = [ - "90:class_g = 'Alacritty'", - "90:class_g = 'st-256color'", - "90:class_g = 'URxvt'", - "90:class_g = 'kitty'", - "90:class_g = 'tabbed'" + "100:name = 'Dunst'", + # Opacities with enabled shadows (shadows allow for higher alpha - lower number) + #"70:class_g = 'Alacritty'", + #"70:class_g = 'st-256color'", + #"70:class_g = 'URxvt'", + #"70:class_g = 'kitty'", + #"82:class_g = 'Spotify'" + # Opacities without shadows + "80:class_g = 'Alacritty'", + "80:class_g = 'st-256color'", + "80:class_g = 'URxvt'", + "80:class_g = 'kitty'", + "92:class_g = 'Spotify'" ]; -# Blur +# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0) +active-opacity = 1; +# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0) +inactive-opacity = 1; +# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) +frame-opacity = 1.0; +# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0) +opacity = 1.0 +# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows. +inactive-opacity-override = false +# Dim inactive windows. (0.0 - 1.0, defaults to 0.0) +inactive-dim = 0.0 +# Use fixed inactive dim value, instead of adjusting according to window opacity. +inactive-dim-fixed = 1.0 +# Specify a list of conditions of windows that should always be considered focused. +focus-exclude = [] + + +# Background blurring +######################## + blur: { # dual_kawase blur method requires GLX as backend @@ -18,28 +177,113 @@ blur: # dual_kawase allows for multi-threaded bluring that's # very fast. method = "dual_kawase"; - strength = 1; + #method = "kernel"; + #kernel = "11x11gaussian"; + strength = 4; + deviation = 1.0; + # When true, blur background of semi-transparent / ARGB window. + background = false; + # When true, the background of windows when the window frame + # is not opaque is blurred, implies background=true + background-frame = false; + # Whe true, use fixeed blur strength rather than adjusing + # according to window opacity + background-fixed = false; + # Specify the blur convolution kernel + kern = "3x3box" } -wintypes: -{ - normal = { blur-background = true }; - splash = { blur-background = false }; -}; +# Exclude conditions for background blur +blur-background-exclude = [ + # Prevents picom from blurring the background + # when taking selection screenshot with `maim` + "class_g = 'slop'", + "_GTK_FRAME_EXTENTS@:c" +]; -# Fading + +# Shadows +################ + +# Enabled client-side shadows on windows. Note desktop windows +# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, +# unless explicitly requested using the wintypes option. +shadow = false; + +# The blur radius for shadows, in pixels. (defaults to 12) +shadow-radius = 12; +# The opacity of shadows. (0.0 - 1.0, defaults to 0.75) +shadow-opacity = 0.75; +# The left offset for shadows, in pixels. (defaults to -15) +shadow-offset-x = -15; +# The top offset for shadows, in pixels. (defaults to -15) +shadow-offset-y = -15; +# Red color value of shadow (0.0 - 1.0, defaults to 0). +shadow-red = 0 +# Green color value of shadow (0.0 - 1.0, defaults to 0). +shadow-green = 0 +# Blue color value of shadow (0.0 - 1.0, defaults to 0). +shadow-blue = 0 +# Crop shadow of a window fully on a particular Xinerama screen to the screen. +xinerama-shadow-crop = false + +# Specify a list of conditions of windows that should have no shadow. +shadow-exclude = [ + "name = 'Notification'", + "class_g = 'Conky'", + "class_g ?= 'Notify-osd'", + "class_g = 'Cairo-clock'", + "class_g = 'slop'", + "class_g = 'Polybar'", + "_GTK_FRAME_EXTENTS@:c" +]; + + +# Window Fading +################ + +# Fade windows in/out when opening/closing and when opacity changes, +# unless no-fading-openclose is used. fading = false; -fade-in-step = 0.07; -fade-out-step = 0.07; -fade-exclude = [ ]; -# GLX backend -# Use GLX as a backend instead of default xrender. -# GLX will generally be a lot faster than xrender. -# There shouldn't be any issues with this, but if you -# do experience any, you should try falling back to xrender. -backend = "glx"; -glx-no-stencil = true; -glx-copy-from-front = false; -use-damage = true -glx-no-rebind-pixmap = true; +# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) +fade-in-step = 0.07; +# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) +fade-out-step = 0.1; +# The time between steps in fade step, in milliseconds. (> 0, defaults to 10) +fade-delta = 10 +# Do not fade on window open/close. +no-fading-openclose = false +# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, +# Fluxbox, etc. +no-fading-destroyed-argb = false + +# Specify a list of conditions of windows that should not be faded. +# don't need this, we disable fading for all normal windows with wintypes: {} +fade-exclude = [ + "class_g = 'slop'" # maim +] + + +# Corners +################ + +# Sets the radius of rounded window corners. When > 0, the compositor will +# round the corners of windows. +corner-radius = 12; +rounded-corners-exclude = [ + "class_g = 'Rofi'", + "class_g = 'dmenu'", + "name = 'Notification area'", + "name = 'Dunst'" +] + +# Rounded corners alone only changes the window, but the borders +# around it still remain rectangular, round-borders option allows +# the borders to also be round. +round-borders = 1; +# Specify a list of border width rules. +# format: "[pixels]:[xprop info name] = '[xprop value]'" +# Note this doesn't have any guarantee about not conflicting with the +# border width set by the window manager. +round-borders-rule = []; diff --git a/packages.yaml b/packages.yaml index c938966..3197d77 100644 --- a/packages.yaml +++ b/packages.yaml @@ -142,7 +142,8 @@ aur: - opensnitch # Application level firewall with traffic monitoring (Alternatively, there's portmaster) # WM/Xorg - - picom-git # Git version of picom compositor + #- picom-git # Git version of picom compositor + - picom-ibhagwan-git # Forked picom version with support for both rounded corner and dual_kawase blur - devour # WM agnostic window swallowing for terminals - xcursor-simp1e-breeze-snow # Breeze cursor theme