From 84c16e3b248c77ec9e4f1bc5c41068f2dc53f114 Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Thu, 9 Apr 2020 16:19:56 +0200 Subject: [PATCH] Added Picom configuration file --- org/config/picom.org | 639 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 639 insertions(+) create mode 100644 org/config/picom.org diff --git a/org/config/picom.org b/org/config/picom.org new file mode 100644 index 0000000..f65035c --- /dev/null +++ b/org/config/picom.org @@ -0,0 +1,639 @@ +#+title: Phundrak’s Picom Configuration +#+INCLUDE: headers.org +#+OPTIONS: auto-id:t +#+HTML_HEAD_EXTRA: +#+HTML_HEAD_EXTRA: +#+HTML_HEAD_EXTRA: +#+PROPERTY: header-args:conf :comments link :exports code :tangle ~/.config/picom/picom.conf +#+STARTUP: content + +* Table of Contents :TOC:noexport: + :PROPERTIES: + :CUSTOM_ID: h-f61204c4-beb8-4008-b02e-55eae4e8f163 + :END: + +- [[#introduction][Introduction]] +- [[#shadows][Shadows]] + - [[#deprecated-options][Deprecated options]] +- [[#fading][Fading]] +- [[#transparency-and-opacity][Transparency and opacity]] +- [[#background-blurring][Background blurring]] +- [[#general-settings][General settings]] + - [[#glx-backend-specific-options][GLX backend-specific options]] + +* Introduction + :PROPERTIES: + :CUSTOM_ID: h-2280c387-9a3a-4df1-a101-3be4fbc7cef4 + :END: + Picom is the successor to Compton, a standalone compositor for Xorg. It + provides compositing for WM that do not provide any, such as i3. I am + currently using [[https://github.com/ibhagwan/picom][ibhagwan’s fork of compton]] which provides the ~dual-kawase~ + blur from [[https://github.com/tryone144/compton][tryone’s compton]] and rounded corners from [[https://github.com/sdhand/picom][sdhand’s compton]]. + +* Shadows + :PROPERTIES: + :CUSTOM_ID: h-8fb60f60-8ba6-40cc-881b-a2a77b51e954 + :END: + The following enables 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. + #+BEGIN_SRC conf + shadow = false; + #+END_SRC + + The blur radius radius for shadows is measured in pixels, and it defaults to + 12px. + #+BEGIN_SRC conf + shadow-radius = 7; + #+END_SRC + + Picom can also apply some level of opacity on shadows. + - Default value :: ~0.75~ + - Min value :: ~0.0~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + shadow-opacity = 0.85 + #+END_SRC + + The left and top offsets for shadows are expressed in pixels. + - Default value :: ~-15~ + #+BEGIN_SRC conf + shadow-offset-x = -5; + shadow-offset-y = -5; + #+END_SRC + + The following values have an impact on the shadow’s RGB color. + - Default value :: ~0.0~ + - Min value :: ~0.0~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + shadow-red = 0.0; + shadow-green = 0.0; + shadow-blue = 0.0; + #+END_SRC + + It is possible to specify a list of conditions of windows that should have no + shadow. + - Default value :: ~[]~ + #+BEGIN_SRC conf + shadow-exclude = [ + "name = 'Notification'", + "class_g = 'Conky'", + "class_g ?= 'Notify-osd'", + "class_g = 'Cairo-clock'", + "_GTK_FRAME_EXTENTS@:c" + ]; + #+END_SRC + + It is also possible to specify an X geometry that describes the region in + which shadows should not be painted in, such as a dock window region. For + example, + #+BEGIN_SRC conf :tangle no + # shadow-exclude-reg = "x10+0+0" + #+END_SRC + would make the 10 pixels at the bottom of the screen not have any shadow + painted on. + - Default value :: ~""~ + #+BEGIN_SRC conf :tangle no + shadow-exclude-reg = "" + #+END_SRC + + Finally, it is also possible to crop the shadow of a window fully on a + particular Xinerama screen to the screen. + - Default value :: ~false~ + #+BEGIN_SRC conf + xinerama-shadow-crop = false + #+END_SRC + +** Deprecated options + :PROPERTIES: + :CUSTOM_ID: h-c00a180b-abdc-48df-ba1e-17c486934274 + :HEADER-ARGS:conf: :tangle no + :END: + Options in this subheader *will not* be exported to my configuration file. + + Thanks to this value, Picom can avoid drawing shadows on dock or panel + windows. This option is deprecated, and users should use the ~wintypes~ + option in their config file instead. + - Default value :: ~false~ + #+BEGIN_SRC conf + no-dock-shadow = false; + #+END_SRC + + This option allows Picom not to draw on drag-and-drop windows. This option is + deprecated, and users should use the ~wintypes~ option in their config file + instead. + - Default value :: ~false~ + #+BEGIN_SRC conf + no-dnd-shadow = false; + #+END_SRC + + ~shadow-ignore-shaped~ is also deprecated. It used to indicate Picom not to + paint shadows on shaped windows. Note shaped windows here means windows + setting their shape through X Shape extension. Those using ARGB background + are beyond Picom’s control. Since it is deprecated, you could instead use + #+BEGIN_SRC conf :tangle no + shadow-exclude = 'bounding_shaped' + #+END_SRC + or + #+BEGIN_SRC conf :tangle no + shadow-exclude = 'bounding_shaped && !rounded_corners' + #+END_SRC + - Default value :: ~""~ + #+BEGIN_SRC conf :tangle no + shadow-ignore-shaped = "" + #+END_SRC + +* Fading + :PROPERTIES: + :CUSTOM_ID: h-650f6479-4579-4114-9732-dfaabe7e1d22 + :END: + Picom has the ability to create some fading effects on windows when opening or + closing or when the opacity changes. The following parameter toggles this + feature on or off. However, its behavior can be changed with + ~no-fading-openclose~. + - Default value :: ~false~ + #+BEGIN_SRC conf + fading = true + #+END_SRC + + These values controls the opacity change between steps while fading in and + out. + - Default value :: ~0.028~ (fade-in), ~0.03~ (fade-out) + - Min value :: ~0.01~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + fade-in-step = 0.09; + fade-out-step = 0.08; + #+END_SRC + + This value represents the time between steps in fade steps, in milliseconds. + - Default value :: ~10~ + - Min value :: ~1~ + #+BEGIN_SRC conf + fade-delta = 20; + #+END_SRC + + It is possible to exclude some windows that should not be faded with a + specified list of conditions. + - Default value :: ~[]~ + #+BEGIN_SRC conf + fade-exclude = [ "class_g = 'mpv'" ]; + #+END_SRC + + This option allows Picom not to create any fade on windows opening or closing. + - Default value :: ~false~ + #+BEGIN_SRC conf + no-fading-openclose = true; + #+END_SRC + + Finally, this option is a workaround for Openbox, Fluxbox and others by not + fading destroyed ARGB windows with WM frame. + - Default value :: ~false~ + #+BEGIN_SRC conf + no-fading-destroyed-argb = false + #+END_SRC + +* Transparency and opacity + :PROPERTIES: + :CUSTOM_ID: h-7c4d53bd-ea82-4800-89be-f528f3ff1208 + :END: + Picom is also able to create some opacity or transparency for windows, + depending on their state or on some user-defined rules. For instance, the + following value describes the opacity of inactive windows. + - Default value :: ~1.0~ + - Min value :: ~0.1~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + inactive-opacity = 0.6; + #+END_SRC + + On the other hand, it is possible to declare a default opacity for active + windows. + - Default value :: ~1.0~ + - Min value :: ~0.1~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + active-opacity = 1; + #+END_SRC + + This however describes the opacity of window titlebars and borders. + - Default value :: ~1.0~ + - Min value :: ~0.1~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + frame-opacity = 1.0; + #+END_SRC + + ~menu-opacity~ describes the opacity for dropdown menus and popup menus. + - Default value :: ~1.0~ + - Min value :: ~0.1~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + # menu-opacity = 0.9; + #+END_SRC + + ~inactive-opacity-override~ allows the user to let inactive opacity set by + ~-i~ override the ~_NET_WM_OPACITY_ values of windows. + - Default value :: ~true~ + #+BEGIN_SRC conf + inactive-opacity-override = true; + #+END_SRC + + While it is possible to alter opacity on inactive windows, it is also possible + to dim them. + - Default value :: ~1.0~ + - Min value :: ~0.1~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + # inactive-dim = 1.0 + #+END_SRC + + It is also possible to use a fixed inactive dim value, instead of adjusting + according to window opacity. + - Default value :: ~1.0~ + - Min value :: ~0.1~ + - Max value :: ~1.0~ + #+BEGIN_SRC conf + # inactive-dim-fixed = 1.0 + #+END_SRC + + It is also possible to specify a list of conditions of windows that should + always be considered focused. + - Default value :: ~[]~ + #+BEGIN_SRC conf + focus-exclude = [ "class_g = 'mpv'" ]; + #+END_SRC + + The user can also specify a list of opacity rules, in the format + ~PERCENT:PATTERN~, like ~50:name *= "Firefox"~. picom-trans is recommended + over this. Note we don't make any guarantee about possible conflicts with + other programs that set ~_NET_WM_WINDOW_OPACITY~ on frame or client windows. + - Default value :: ~[]~ + #+BEGIN_SRC conf + opacity-rule = [ + "85:class_g = 'Polybar'", + # "55:class_g *?= 'Rofi'", + "80:class_g = 'St'", + ]; + #+END_SRC + +* Background blurring + :PROPERTIES: + :CUSTOM_ID: h-e40a644d-b594-41f0-9aca-307f77c456ba + :END: + The following are the parameters for background blurring, see the \*BLUR\* + section for more information. + #+BEGIN_SRC conf + blur-method = "kawase"; + blur-size = 5; + blur-deviation = false; + #+END_SRC + + This value enables or disables the blur for the background of semi-transparent + or ARGB windows. It has bad performances though, with driver-dependent + behavior. The name of the switch may change without prior notifications. + - Default value :: ~false~ + #+BEGIN_SRC conf + blur-background = true; + #+END_SRC + + Blur background of windows when the window frame is not opaque. If true, this + implies the value ~true~ for ~blur-background~. + - Default value :: ~false~ + #+BEGIN_SRC conf + blur-background-frame = true; + #+END_SRC + + The following determines whether to use fixed blur strength rather than + adjusting according to window opacity. + - Default value :: ~false~ + #+BEGIN_SRC conf + blur-background-fixed = false; + #+END_SRC + + Specify the blur convolution kernel, with the format + ~"5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"~. + - Default value :: ~''~ + #+BEGIN_SRC conf + # blur-kern = "3x3box"; + blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"; + #+END_SRC + + It is possible to write exclude conditions for background blur. + - Default value :: ~[]~ + #+BEGIN_SRC conf + blur-background-exclude = [ + "window_type = 'desktop'", + "class_g = 'Polybar'", + "_GTK_FRAME_EXTENTS@:c" + ]; + #+END_SRC +* General settings + :PROPERTIES: + :CUSTOM_ID: h-09a57a66-f298-4e04-880a-6d4dbb00a28a + :END: + Daemonize process. Fork to background after initialization. Causes issues + with certain (badly-written) drivers. + - Default value :: ~false~ + #+BEGIN_SRC conf + daemon = true; + #+END_SRC + + Picom has three backends it can use: ~xrender~, ~glx~, and ~xr_glx_hybrid~. + GLX backend is typically much faster but depends on a sane driver. + - Default value :: ~xrender~ + #+BEGIN_SRC conf + backend = "glx"; + #+END_SRC + + This enables or disables VSync. + - Default value :: ~false~ + #+BEGIN_SRC conf + vsync = true; + #+END_SRC + + Enable remote control via D-Bus. See the \*D-BUS API\* section below for more + details. + - Default value :: ~false~ + #+BEGIN_SRC conf + dbus = false; + #+END_SRC + + Try to detect WM windows (a non-override-redirect window with no child that + has ~WM_STATE~) and markz them as active. + - Default value :: ~false~ + #+BEGIN_SRC conf + mark-wmwin-focused = true; + #+END_SRC + + + Mark override-redirect windows that doesn't have a child window with + ~WM_STATE~ focused. + - Default value :: ~false~ + #+BEGIN_SRC conf + mark-ovredir-focused = true; + #+END_SRC + + Try to detect windows with rounded corners and don't consider them shaped + windows. The accuracy is not very high, unfortunately. + - Default value :: ~false~ + #+BEGIN_SRC conf + detect-rounded-corners = true; + #+END_SRC + + Detect ~_NET_WM_OPACITY~ on client windows, useful for window managers not + passing ~_NET_WM_OPACITY~ of client windows to frame windows. + - Default value :: ~false~ + #+BEGIN_SRC conf + detect-client-opacity = true; + #+END_SRC + + Specify refresh rate of the screen. If not specified or 0, picom will try + detecting this with X RandR extension. + - Default value :: ~60~ + #+BEGIN_SRC conf + refresh-rate = 60; + #+END_SRC + + Limit picom to repaint at most once every 1 / ~refresh_rate~ second to boost + performance. This should not be used with + #+BEGIN_SRC text :tangle no + vsync drm/opengl/opengl-oml + #+END_SRC + as they essentially does sw-opti's job already, unless you wish to specify a + lower refresh rate than the actual value. + - Default value :: ~""~ + #+BEGIN_SRC conf + # sw-opti =; + #+END_SRC + + Use EWMH ~_NET_ACTIVE_WINDOW~ to determine currently focused window, rather + than listening to ~FocusIn~/~FocusOut~ event. Might have more accuracy, + provided that the WM supports it. + - Default value :: ~false~ + #+BEGIN_SRC conf + # use-ewmh-active-win = false; + #+END_SRC + + Unredirect all windows if a full-screen opaque window is detected, to maximize + performance for full-screen windows. Known to cause flickering when + redirecting/unredirecting windows. paint-on-overlay may make the flickering + less obvious. + - Default value :: ~false~ + #+BEGIN_SRC conf + unredir-if-possible = false; + #+END_SRC + + Delay before unredirecting the window, in milliseconds. + - Default value :: ~0~ + #+BEGIN_SRC conf + unredir-if-possible-delay = 0; + #+END_SRC + + Conditions of windows that shouldn't be considered full-screen for + unredirecting screen. + - Default value :: ~[]~ + #+BEGIN_SRC conf + unredir-if-possible-exclude = []; + #+END_SRC + + Use ~WM_TRANSIENT_FOR~ to group windows, and consider windows in the same + group focused at the same time. + - Default value :: ~false~ + #+BEGIN_SRC conf + detect-transient = true; + #+END_SRC + + Use ~WM_CLIENT_LEADER~ to group windows, and consider windows in the same + group focused at the same time. ~WM_TRANSIENT_FOR~ has higher priority if + detect-transient is enabled, too. + - Default value :: ~false~ + #+BEGIN_SRC conf + detect-client-leader = true; + #+END_SRC + + Resize damaged region by a specific number of pixels. A positive value + enlarges it while a negative one shrinks it. If the value is positive, those + additional pixels will not be actually painted to screen, only used in blur + calculation, and such. (Due to technical limitations, with use-damage, those + pixels will still be incorrectly painted to screen.) Primarily used to fix the + line corruption issues of blur, in which case you should use the blur radius + value here (e.g. with a 3x3 kernel, you should use ~--resize-damage 1~, with a + 5x5 one you use ~--resize-damage 2~, and so on). May or may not work with + *--glx-no-stencil*. Shrinking doesn't function correctly. + - Default value :: ~1~ + #+BEGIN_SRC conf + resize-damage = 1; + #+END_SRC + + Specify a list of conditions of windows that should be painted with inverted + color. Resource-hogging, and is not well tested. + - Default value :: ~[]~ + #+BEGIN_SRC conf + invert-color-include = []; + #+END_SRC + + Disable the use of damage information. This 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. The + opposing option is use-damage + - Default value :: ~false~ + #+BEGIN_SRC conf + use-damage = false; + #+END_SRC + + Use X Sync fence to sync clients' draw calls, to make sure all draw calls are + finished before picom starts drawing. Needed on nvidia-drivers with GLX + backend for some users. + - Default value :: ~false~ + #+BEGIN_SRC conf + xrender-sync-fence = false; + #+END_SRC + + Force all windows to be painted with blending. Useful if you have a + glx-fshader-win that could turn opaque pixels transparent. + - Default value :: ~false~ + #+BEGIN_SRC conf + force-win-blend = false; + #+END_SRC + + Do not use EWMH to detect fullscreen windows. Reverts to checking if a window + is fullscreen based only on its size and coordinates. + - Default value :: ~false~ + #+BEGIN_SRC conf + no-ewmh-fullscreen = false; + #+END_SRC + + Dimming bright windows so their brightness doesn't exceed this set value. + Brightness of a window is estimated by averaging all pixels in the window, so + this could comes with a performance hit. Setting this to 1.0 disables this + behaviour. Requires ~--use-damage~ to be disabled. + - Default value :: ~1.0~ + #+BEGIN_SRC conf + max-brightness = 1.0; + #+END_SRC + + Make transparent windows clip other windows like non-transparent windows do, + instead of blending on top of them. + - Default value :: ~false~ + #+BEGIN_SRC conf + transparent-clipping = false; + #+END_SRC + + Set the log level. Possible values are: + - ~trace~ + - ~debug~ + - ~info~ + - ~warn~ + - ~error~ + in increasing level of importance. Case doesn't matter. If using the "TRACE" + log level, it's better to log into a file using ~--log-file~, since it can + generate a huge stream of logs. + - Default value :: ~"debug"~ + #+BEGIN_SRC conf + log-level = "warn"; + #+END_SRC + + Set the log file. If ~--log-file~ is never specified, logs will be written to + stderr. Otherwise, logs will to written to the given file, though some of the + early logs might still be written to the stderr. When setting this option from + the config file, it is recommended to use an absolute path. + - Default value :: ~''~ + #+BEGIN_SRC conf + # log-file = '/path/to/your/log/file'; + #+END_SRC + + Show all X errors (for debugging) + - Default value :: ~false~ + #+BEGIN_SRC conf + # show-all-xerrors = false; + #+END_SRC + + Write process ID to a file. + - Default value :: ~''~ + #+BEGIN_SRC conf + # write-pid-path = '/path/to/your/log/file'; + #+END_SRC + + 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"~ + - ~"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`. + #+BEGIN_SRC conf + wintypes: + { + tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; }; + dock = { shadow = false; } + dnd = { shadow = false; } + popup_menu = { opacity = 0.8; } + dropdown_menu = { opacity = 0.8; } + }; + #+END_SRC + +** GLX backend-specific options + :PROPERTIES: + :CUSTOM_ID: h-6aca0f58-6d9e-4bb7-ba88-5195b573ee01 + :END: + 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. Tests show a 15% + performance boost. Recommended. + - Default value :: ~false~ + #+BEGIN_SRC conf + glx-no-stencil = true; + #+END_SRC + + 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. + - Default value :: ~false~ + #+BEGIN_SRC conf + glx-no-rebind-pixmap = false; + #+END_SRC + + Use specified GLSL fragment shader for rendering window contents. See + ~compton-default-fshader-win.glsl~ and + ~compton-fake-transparency-fshader-win.glsl~ in the source tree for examples. + - Default value :: ~''~ + #+BEGIN_SRC conf :tangle no + glx-fshader-win = ''; + #+END_SRC + + #+BEGIN_SRC conf + corner-radius = 9.0; + rounded-corners-exclude = []; + blur: { + method = "dual_kawase"; + strength = 7; + background = false; + background-frame = false; + background-fixed = false; + } + #+END_SRC