Qtile Configuration
Qtile
config.py
imports
1: import os 2: from collections.abc import Callable 3: import shutil 4: 5: import libqtile.resources 6: from libqtile import bar, layout, qtile, widget, hook 7: from libqtile.config import Click, Drag, Group, Key, Match, Output, Screen 8: from libqtile.lazy import lazy 9: from libqtile.utils import guess_terminal
Set the mod variable
10: mod = "mod4"
Set the terminal variable
11: terminal = guess_terminal()
guessbrowser() function
12: 13: def guess_browser(): 14: """"Get currently available browser.""" 15: for b in ["firefox", "brave-browser", "google-chrome-stable"]: 16: if shutil.which(b): 17: return b 18: 19: 20: browser = guess_browser()
mail variable
21: mail = "thunderbird"
filemanager variable
22: filemanager = "thunar"
Keys
23: keys = [ 24: # A list of available commands that can be bound to keys can be found 25: # at https://docs.qtile.org/en/latest/manual/config/lazy.html 26: # Switch between windows 27: Key([mod], "h", lazy.layout.left(), desc="Move focus to left"), 28: Key([mod], "l", lazy.layout.right(), desc="Move focus to right"), 29: Key([mod], "j", lazy.layout.down(), desc="Move focus down"), 30: Key([mod], "k", lazy.layout.up(), desc="Move focus up"), 31: Key([mod], "space", lazy.layout.next(), desc="Move window focus to other window"), 32: Key(["mod1"], "Tab", lazy.layout.next(), desc="Move window focus to other window"), 33: # Move windows between left/right columns or move up/down in current stack. 34: # Moving out of range in Columns layout will create new column. 35: Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left"), 36: Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move window to the right"), 37: Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"), 38: Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), 39: # Grow windows. If current window is on the edge of screen and direction 40: # will be to screen edge - window would shrink. 41: Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow window to the left"), 42: Key([mod, "control"], "l", lazy.layout.grow_right(), desc="Grow window to the right"), 43: Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"), 44: Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"), 45: Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"), 46: # Toggle between split and unsplit sides of stack. 47: # Split = all windows displayed 48: # Unsplit = 1 window displayed, like Max layout, but still with 49: # multiple stack panes 50: Key( 51: [mod, "shift"], 52: "Return", 53: lazy.layout.toggle_split(), 54: desc="Toggle between split and unsplit sides of stack", 55: ), 56: # Toggle between different layouts as defined below 57: Key([mod], "Tab", lazy.screen.toggle_group(), desc="Toggle between groups"), 58: Key([mod, "mod1"], "Tab", lazy.next_layout(), desc="Toggle between layouts"), 59: # Key([mod], "w", lazy.window.kill(), desc="Kill focused window"), 60: Key( 61: [mod], 62: "f", 63: lazy.window.toggle_fullscreen(), 64: desc="Toggle fullscreen on the focused window", 65: ), 66: Key([mod], "t", lazy.window.toggle_floating(), desc="Toggle floating on the focused window"), 67: Key([mod, "control"], "r", lazy.reload_config(), desc="Reload the config"), 68: Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), 69: Key([mod], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget"), 70: Key([mod], "bracketleft", lazy.to_screen(0)), 71: Key([mod], "bracketright", lazy.to_screen(1)), 72: 73: Key([], "XF86AudioRaiseVolume", 74: lazy.spawn("pactl set-sink-volume @DEFAULT_SINK@ +10%"), desc="Raise Volume Up"), 75: Key([], "XF86AudioLowerVolume", 76: lazy.spawn("pactl set-sink-volume @DEFAULT_SINK@ -10%"), desc="Raise Volume Down"), 77: Key([], "XF86AudioMute", 78: lazy.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle"), desc="Toggle Audio Mute"), 79: Key([], "XF86AudioMicMute", 80: lazy.spawn("pactl set-source-mute @DEFAULT_SOURCE@ toggle"), desc="Toggle Audio Mic Mute"), 81: 82: Key([], "XF86AudioPlay", 83: lazy.spawn("playerctl play-pause"), desc="Toggle play/pause"), 84: Key([], "XF86AudioPrev", 85: lazy.spawn("playerctl previous"), desc="Previous"), 86: Key([], "XF86AudioNext", 87: lazy.spawn("playerctl next"), desc="Next"), 88: # TODO: XF86Tools for Audio 89: Key([], "XF86Calculator", 90: lazy.spawn("rofi -show calc -modi calc -no-show-match -no-sort"), desc="Calculator"), 91: 92: Key([], "XF86HomePage", 93: lazy.spawn(browser), desc="Browser"), 94: Key([mod, "mod1"], "b", 95: lazy.spawn(browser), desc="Browser"), 96: Key([], "XF86Mail", 97: lazy.spawn(mail), desc="Mail Client"), 98: Key([], "XF86Search", 99: lazy.spawn("rofi-search"), desc="Search"), 100: 101: Key([], "Print", 102: lazy.spawn("flameshot gui"), desc="flameshot"), 103: 104: Key([mod, "mod1"], "v", lazy.spawn("neovide"), desc="neovide"), 105: Key([mod, "mod1"], "p", lazy.spawn("rofi-pass"), desc="rofi pass"), 106: Key([mod, "mod1"], "n", lazy.spawn("emacsclient -c -a emacs"), desc="emacs"), 107: Key([mod, "mod1"], "s", lazy.spawn("screenkey"), desc="screenkey"), 108: 109: Key([mod], "e", lazy.spawn(filemanager), desc="file-manager"), 110: Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"), 111: Key([mod, "shift"], "Return", lazy.spawn(f"{terminal} -e tmux new -A -s main"), desc="Tmux"), 112: Key(["mod1"], "F4", lazy.window.kill(), desc="kill focused window"), 113: Key([mod], "F4", lazy.window.kill(), desc="kill focused window"), 114: Key([mod], "d", lazy.spawn("rofi -show drun"), desc="rofi menu"), 115: Key([mod], "c", 116: lazy.spawn("rofi -modi 'clipboard:greenclip print' -show clipboard"), 117: desc="rofi greenclip"), 118: Key([mod, "shift"], "w", 119: lazy.spawn("rofi -show windowcd"), desc="rofi windowcd"), 120: Key([mod], "w", 121: lazy.spawn("rofi -show window"), desc="rofi window"), 122: Key([mod], "q", 123: lazy.spawn("rofi -show p -modi p:'rofi-power-menu --symbols-font \"Symbols Nerd Font Mono\"' -font 'OverpassM Nerd Font Mono' -theme catppuccin-default -theme-str 'window {width: 8em;} listview {lines: 6;}'"), desc="rofi-power-menu"), 124: Key([mod], "period", lazy.spawn("rofimoji"), desc="rofimoji"), 125: # Key([mod, "shift"], "t", lazy.spawn(ocr()), desc="ocr"), 126: ]
Switch VTs in wayland
127: for vt in range(1, 8): 128: keys.append( 129: Key( 130: ["control", "mod1"], 131: f"f{vt}", 132: lazy.core.change_vt(vt).when(func=lambda: qtile.core.name == "wayland"), 133: desc=f"Switch to VT{vt}", 134: ) 135: )
groups
136: groups = [Group(i) for i in "123456789"] 137: 138: for i in groups: 139: keys.extend( 140: [ 141: # mod + group number = switch to group 142: Key( 143: [mod], 144: i.name, 145: lazy.group[i.name].toscreen(), 146: desc=f"Switch to group {i.name}", 147: ), 148: # mod + shift + group number = switch to & move focused window to group 149: Key( 150: [mod, "shift"], 151: i.name, 152: lazy.window.togroup(i.name, switch_group=True), 153: desc=f"Switch to & move focused window to group {i.name}", 154: ), 155: # Or, use below if you prefer not to switch to that group. 156: # # mod + shift + group number = move focused window to group 157: # Key([mod, "shift"], i.name, lazy.window.togroup(i.name), 158: # desc="move focused window to group {}".format(i.name)), 159: ] 160: )
layouts
161: layouts = [ 162: layout.Columns(border_focus_stack=["#d75f5f", "#8f3d3d"], border_width=4), 163: layout.Max(), 164: # Try more layouts by unleashing below layouts. 165: # layout.Stack(num_stacks=2), 166: # layout.Bsp(), 167: # layout.Matrix(), 168: # layout.MonadTall(), 169: # layout.MonadWide(), 170: # layout.RatioTile(), 171: # layout.Tile(), 172: # layout.TreeTab(), 173: # layout.VerticalTile(), 174: # layout.Zoomy(), 175: ]
widget and extension defaults
176: widget_defaults = dict( 177: font="OverpassM Nerd Font Mono", 178: fontsize=12, 179: padding=3, 180: ) 181: extension_defaults = widget_defaults.copy()
screens
182: logo = os.path.join(os.path.dirname(libqtile.resources.__file__), "logo.png") 183: screens = [ 184: Screen( 185: bottom=bar.Bar( 186: [ 187: widget.CurrentLayout(), 188: widget.GroupBox(), 189: widget.Prompt(), 190: widget.WindowName(), 191: widget.CurrentScreen(), 192: widget.Chord( 193: chords_colors={ 194: "launch": ("#ff0000", "#ffffff"), 195: }, 196: name_transform=lambda name: name.upper(), 197: ), 198: # widget.TextBox("default config", name="default"), 199: # widget.TextBox("Press <M-r> to spawn", foreground="#d75f5f"), 200: # NB Systray is incompatible with Wayland, consider using StatusNotifier instead 201: # widget.StatusNotifier(), 202: # widget.TunedManager(), 203: widget.CapsNumLockIndicator(), 204: widget.ThermalZone(), 205: widget.PulseVolume(), 206: # widget.Volume( 207: # volume_down_command="pactl set-sink-volume @DEFAULT_SINK@ -10%", 208: # volume_up_command="pactl set-sink-volume @DEFAULT_SINK@ +10%", 209: # volume_app="pavucontrol", 210: # ), 211: widget.Clock(format="%Y-%m-%d %a %I:%M %p"), 212: widget.QuickExit(), 213: widget.Systray(), 214: ], 215: 24, 216: # border_width=[2, 0, 2, 0], # Draw top and bottom borders 217: # border_color=["ff00ff", "000000", "ff00ff", "000000"] # Borders are magenta 218: ), 219: #background="#000000", 220: wallpaper="assets/img/arch-black-4k.png", 221: #wallpaper_mode="fill", 222: # You can uncomment this variable if you see that on X11 floating resize/moving is laggy 223: # By default we handle these events delayed to already improve performance, however your system might still be struggling 224: # This variable is set to None (no cap) by default, but you can set it to 60 to indicate that you limit it to 60 events per second 225: # x11_drag_polling_rate = 60, 226: ), 227: Screen( 228: bottom=bar.Bar( 229: [ 230: widget.WindowName(), 231: widget.CurrentScreen(), 232: # widget.Canto(), 233: ], 234: 24, 235: ), 236: wallpaper="assets/img/various-arch-1-4k.png", 237: #wallpaper_mode="center", 238: ), 239: ] 240: 241: # Instead of screens, you can define a function here to specify which Screen 242: # should correspond to which Output. 243: fake_screens: list[Screen] | None = None 244: 245: # Instead of screens or fake screens, you can define a function here that 246: # returns a list of Screen objects based on the list of Outputs; that way you 247: # can decide based on e.g. the number of screens, or which ports are plugged 248: # in exactly what do render in each bar for each screen. 249: generate_screens: Callable[[list[Output]], list[Screen]] | None = None
mouse - drag floating layouts
250: mouse = [ 251: Drag([mod], "Button1", lazy.window.set_position_floating(), start=lazy.window.get_position()), 252: Drag([mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size()), 253: Click([mod], "Button2", lazy.window.bring_to_front()), 254: ]
misc
255: dgroups_key_binder = None 256: dgroups_app_rules = [] # type: list 257: follow_mouse_focus = True 258: bring_front_click = False 259: floats_kept_above = True 260: cursor_warp = False 261: auto_fullscreen = True 262: focus_on_window_activation = "smart" 263: focus_previous_on_window_remove = False 264: reconfigure_screens = True 265: 266: # If things like steam games want to auto-minimize themselves when losing 267: # focus, should we respect this or not? 268: auto_minimize = True 269: 270: # When using the Wayland backend, this can be used to configure input devices. 271: wl_input_rules = None 272: 273: # xcursor theme (string or None) and size (integer) for Wayland backend 274: wl_xcursor_theme = None 275: wl_xcursor_size = 24 276: 277: idle_timers = [] # type: list 278: idle_inhibitors = [] # type: list 279: 280: # XXX: Gasp! We're lying here. In fact, nobody really uses or cares about this 281: # string besides java UI toolkits; you can see several discussions on the 282: # mailing lists, GitHub issues, and other WM documentation that suggest setting 283: # this string if your java app doesn't work correctly. We may as well just lie 284: # and say that we're a working one by default. 285: # 286: # We choose LG3D to maximize irony: it is a 3D non-reparenting WM written in 287: # java that happens to be on java's whitelist. 288: wmname = "LG3D"
float rules
289: floating_layout = layout.Floating( 290: float_rules=[ 291: # Run the utility of `xprop` to see the wm class and name of an X client. 292: *layout.Floating.default_float_rules, 293: Match(wm_class="confirmreset"), # gitk 294: Match(wm_class="makebranch"), # gitk 295: Match(wm_class="maketag"), # gitk 296: Match(wm_class="ssh-askpass"), # ssh-askpass 297: Match(title="branchdialog"), # gitk 298: Match(title="pinentry"), # GPG key password entry 299: ] 300: )
startups
301: STARTUP_COMMANDS = [ 302: "dbus-update-activation-environment --all" 303: "xsetroot -cursor_name left_ptr", 304: "xset r rate 500 25", 305: "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &", 306: "picom -b &", 307: "greenclip daemon>/dev/null &", 308: "thunar --daemon &", 309: "unclutter &", 310: "nm-applet & ", 311: "~/.fehbg &", 312: "emacs --daemon &", 313: "xsettingsd &" 314: ] 315: 316: 317: @hook.subscribe.startup_once 318: def autostart(): 319: """Stuffs to autostart.""" 320: for cmd in STARTUP_COMMANDS: 321: os.system(cmd)
Picom
picom.conf
shadows
1: # Enabled client-side shadows on windows. Note desktop windows 2: # (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, 3: # unless explicitly requested using the wintypes option. 4: # 5: # Can be set per-window using rules. 6: # 7: # Default: false 8: shadow = true; 9: 10: # The blur radius for shadows, in pixels. 11: # 12: # Default: 12 13: shadow-radius = 7; 14: 15: # The opacity of shadows. 16: # 17: # Range: 0.0 - 1.0 18: # Default: 0.75 19: # shadow-opacity = .75 20: 21: # The left offset for shadows, in pixels. 22: # 23: # Default: -15 24: shadow-offset-x = -7; 25: 26: # The top offset for shadows, in pixels. 27: # 28: # Default: -15 29: shadow-offset-y = -7; 30: 31: # Hex string color value of shadow. Formatted like "#RRGGBB", e.g. "#C0FFEE". 32: # 33: # Default: #000000 34: # shadow-color = "#000000" 35: 36: # Crop shadow of a window fully on a particular monitor to that monitor. This is 37: # currently implemented using the X RandR extension. 38: # 39: # Default: false 40: # crop-shadow-to-monitor = false
fading
41: # Fade windows in/out when opening/closing and when opacity changes, 42: # unless no-fading-openclose is used. Can be set per-window using rules. 43: # 44: # Default: false 45: fading = true; 46: 47: # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) 48: fade-in-step = 0.03; 49: 50: # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) 51: fade-out-step = 0.03; 52: 53: # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) 54: # fade-delta = 10 55: 56: # Do not fade on window open/close. 57: # no-fading-openclose = false 58: 59: # Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc. 60: # no-fading-destroyed-argb = false
transparency / opacity
61: # Opacity of window titlebars and borders. 62: # 63: # Range: 0.1 - 1.0 64: # Default: 1.0 (disabled) 65: frame-opacity = 0.9; 66: 67: # Use fixed inactive dim value, instead of adjusting according to window opacity. 68: # 69: # Default: false 70: # inactive-dim-fixed = true
corners
71: # Sets the radius of rounded window corners. When > 0, the compositor will 72: # round the corners of windows. Does not interact well with 73: # `transparent-clipping`. 74: # 75: # Default: 0 (disabled) 76: corner-radius = 0
blur
77: # Parameters for background blurring, see BLUR section in the man page for more information. 78: # blur-method = 79: # blur-size = 12 80: # 81: # blur-deviation = false 82: # 83: # blur-strength = 5 84: 85: # Blur background of semi-transparent / ARGB windows. 86: # Can be set per-window using rules. 87: # 88: # Default: false 89: # blur-background = false 90: 91: # Blur background of windows when the window frame is not opaque. 92: # Implies: 93: # blur-background 94: # 95: # Default: false 96: # blur-background-frame = false 97: 98: # Use fixed blur strength rather than adjusting according to window opacity. 99: # 100: # Default: false 101: # blur-background-fixed = false 102: 103: 104: # Specify the blur convolution kernel, with the following format: 105: # example: 106: # 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"; 107: # Can also be a pre-defined kernel, see the man page. 108: # 109: # Default: "" 110: blur-kern = "3x3box";
general settings
111: # Enable remote control via D-Bus. See the man page for more details. 112: # 113: # Default: false 114: # dbus = true 115: 116: # Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers. 117: # daemon = false 118: 119: # Specify the backend to use: `xrender`, `glx`, or `egl`. 120: # 121: # Default: "xrender" 122: backend = "xrender" 123: 124: # Use higher precision during rendering, and apply dither when presenting the 125: # rendered screen. Reduces banding artifacts, but may cause performance 126: # degradation. Only works with OpenGL. 127: dithered-present = false; 128: 129: # Enable/disable VSync. 130: # 131: # Default: false 132: vsync = true; 133: 134: # Try to detect windows with rounded corners and don't consider them 135: # shaped windows. The accuracy is not very high, unfortunately. 136: # 137: # Has nothing to do with `corner-radius`. 138: # 139: # Default: false 140: detect-rounded-corners = true; 141: 142: # Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers 143: # not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows. 144: # 145: # Default: false 146: detect-client-opacity = true; 147: 148: # Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, 149: # rather than listening to 'FocusIn'/'FocusOut' event. May be more accurate, 150: # provided that the WM supports it. 151: # 152: # Default: false 153: # use-ewmh-active-win = false 154: 155: # Unredirect all windows if a full-screen opaque window is detected, 156: # to maximize performance for full-screen windows. Known to cause flickering 157: # when redirecting/unredirecting windows. 158: # 159: # Default: false 160: # unredir-if-possible = false 161: 162: # Delay before unredirecting the window, in milliseconds. 163: # 164: # Default: 0. 165: # unredir-if-possible-delay = 0 166: 167: # Use 'WM_TRANSIENT_FOR' to group windows, and consider windows 168: # in the same group focused at the same time. 169: # 170: # Default: false 171: detect-transient = true; 172: 173: # Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same 174: # group focused at the same time. This usually means windows from the same application 175: # will be considered focused or unfocused at the same time. 176: # 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too. 177: # 178: # Default: false 179: # detect-client-leader = false 180: 181: # Use of damage information for rendering. This cause the only the part of the 182: # screen that has actually changed to be redrawn, instead of the whole screen 183: # every time. Should improve performance. 184: # 185: # Default: false 186: use-damage = true; 187: 188: # Use X Sync fence to wait for the completion of rendering of other windows, 189: # before using their content to render the current screen. 190: # 191: # Required for explicit sync drivers, such as nvidia. 192: # 193: # Default: false 194: # xrender-sync-fence = false 195: 196: # GLX backend: Use specified GLSL fragment shader for rendering window 197: # contents. Read the man page for a detailed explanation of the interface. 198: # 199: # Can be set per-window using rules. 200: # 201: # window-shader-fg = "default" 202: 203: # Force all windows to be painted with blending. Useful if you 204: # have a `window-shader-fg` that could turn opaque pixels transparent. 205: # 206: # Default: false 207: # force-win-blend = false 208: 209: # Do not use EWMH to detect fullscreen windows. 210: # Reverts to checking if a window is fullscreen based only on its size and coordinates. 211: # 212: # Default: false 213: # no-ewmh-fullscreen = false 214: 215: # Dimming bright windows so their brightness doesn't exceed this set value. 216: # Brightness of a window is estimated by averaging all pixels in the window, 217: # so this could comes with a performance hit. 218: # Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. 219: # 220: # Default: 1.0 (disabled) 221: # max-brightness = 1.0 222: 223: # Make transparent windows clip other windows like non-transparent windows do, 224: # instead of blending on top of them. e.g. placing a transparent window on top 225: # of another window will cut a "hole" in that window, and show the desktop background 226: # underneath. 227: # 228: # Default: false 229: # transparent-clipping = false 230: 231: # Set the log level. Possible values are: 232: # "trace", "debug", "info", "warn", "error" 233: # in increasing level of importance. Case insensitive. 234: # If using the "TRACE" log level, it's better to log into a file 235: # using *--log-file*, since it can generate a huge stream of logs. 236: # 237: # Default: "warn" 238: # log-level = "warn"; 239: 240: # Set the log file. 241: # If *--log-file* is never specified, logs will be written to stderr. 242: # Otherwise, logs will to written to the given file, though some of the early 243: # logs might still be written to the stderr. 244: # When setting this option from the config file, it is recommended to use an absolute path. 245: # 246: # log-file = "/path/to/your/log/file" 247: 248: # Write process ID to a file. 249: # write-pid-path = "/path/to/your/log/file"
rules
250: rules: ({ 251: match = "window_type = 'tooltip'"; 252: fade = false; 253: shadow = true; 254: opacity = 0.75; 255: full-shadow = false; 256: }, { 257: match = "window_type = 'dock' || " 258: "window_type = 'desktop' || " 259: "_GTK_FRAME_EXTENTS@"; 260: blur-background = false; 261: }, { 262: match = "window_type != 'dock'"; 263: # shader = "my_shader.frag"; 264: }, { 265: match = "window_type = 'dock' || " 266: "window_type = 'desktop'"; 267: corner-radius = 0; 268: }, { 269: match = "name = 'Notification' || " 270: "class_g = 'Conky' || " 271: "class_g ?= 'Notify-osd' || " 272: "class_g = 'Cairo-clock' || " 273: "_GTK_FRAME_EXTENTS@"; 274: shadow = false; 275: })
imports
276: # `@include` directive can be used to include additional configuration files. 277: # Relative paths are search either in the parent of this configuration file 278: # (when the configuration is loaded through a symlink, the symlink will be 279: # resolved first). Or in `$XDG_CONFIG_HOME/picom/include`. 280: # 281: # @include "extra.conf"
xdg-desktop-portal
qtile-portal.conf
[preferred] default=gtk
Rofi
config.rasi
/* -*- mode: css; eval: (rainbow-mode +1) -*- */ @theme "catppuccin-default"
catppuccin-default.rasi
/* -*- mode: css; eval: (rainbow-mode +1) -*- */ @import "catppuccin-mocha" * { selected-active-foreground: @background; lightfg: @text; separatorcolor: @foreground; urgent-foreground: @red; alternate-urgent-background: @lightbg; lightbg: @mantle; background-color: transparent; border-color: @foreground; normal-background: @background; selected-urgent-background: @red; alternate-active-background: @lightbg; spacing: 2; alternate-normal-foreground: @foreground; urgent-background: @background; selected-normal-foreground: @lightbg; active-foreground: @blue; background: @base; selected-active-background: @blue; active-background: @background; selected-normal-background: @lightfg; alternate-normal-background: @lightbg; foreground: @text; selected-urgent-foreground: @background; normal-foreground: @foreground; alternate-urgent-foreground: @red; alternate-active-foreground: @blue; } element { padding: 1px ; cursor: pointer; spacing: 5px ; border: 0; } element normal.normal { background-color: @normal-background; text-color: @normal-foreground; } element normal.urgent { background-color: @urgent-background; text-color: @urgent-foreground; } element normal.active { background-color: @active-background; text-color: @active-foreground; } element selected.normal { background-color: @selected-normal-background; text-color: @selected-normal-foreground; } element selected.urgent { background-color: @selected-urgent-background; text-color: @selected-urgent-foreground; } element selected.active { background-color: @selected-active-background; text-color: @selected-active-foreground; } element alternate.normal { background-color: @alternate-normal-background; text-color: @alternate-normal-foreground; } element alternate.urgent { background-color: @alternate-urgent-background; text-color: @alternate-urgent-foreground; } element alternate.active { background-color: @alternate-active-background; text-color: @alternate-active-foreground; } element-text { background-color: transparent; cursor: inherit; highlight: inherit; text-color: inherit; } element-icon { background-color: transparent; size: 1.0000em ; cursor: inherit; text-color: inherit; } window { padding: 5; background-color: @background; border: 1; } mainbox { padding: 0; border: 0; } message { padding: 1px ; border-color: @separatorcolor; border: 2px dash 0px 0px ; } textbox { text-color: @foreground; } listview { padding: 2px 0px 0px ; scrollbar: true; border-color: @separatorcolor; spacing: 2px ; fixed-height: 0; border: 2px dash 0px 0px ; } scrollbar { width: 4px ; padding: 0; handle-width: 8px ; border: 0; handle-color: @normal-foreground; } sidebar { border-color: @separatorcolor; border: 2px dash 0px 0px ; } button { cursor: pointer; spacing: 0; text-color: @normal-foreground; } button selected { background-color: @selected-normal-background; text-color: @selected-normal-foreground; } num-filtered-rows { expand: false; text-color: Gray; } num-rows { expand: false; text-color: Gray; } textbox-num-sep { expand: false; str: "/"; text-color: Gray; } inputbar { padding: 1px ; spacing: 0px ; text-color: @normal-foreground; children: [ "prompt","textbox-prompt-colon","entry","num-filtered-rows","textbox-num-sep","num-rows","case-indicator" ]; } case-indicator { spacing: 0; text-color: @normal-foreground; } entry { text-color: @normal-foreground; cursor: text; spacing: 0; placeholder-color: Gray; placeholder: "Type to filter"; } prompt { spacing: 0; text-color: @normal-foreground; } textbox-prompt-colon { margin: 0px 0.3000em 0.0000em 0.0000em ; expand: false; str: ":"; text-color: inherit; }
themes/catppuccin-mocha.rasi
/* -*- mode: css; eval: (rainbow-mode +1) -*- */ * { rosewater: #f5e0dc; flamingo: #f2cdcd; pink: #f5c2e7; mauve: #cba6f7; red: #f38ba8; maroon: #eba0ac; peach: #fab387; yellow: #f9e2af; green: #a6e3a1; teal: #94e2d5; sky: #89dceb; sapphire: #74c7ec; blue: #89b4fa; lavender: #b4befe; text: #cdd6f4; subtext1: #bac2de; subtext0: #a6adc8; overlay2: #9399b2; overlay1: #7f849c; overlay0: #6c7086; surface2: #585b70; surface1: #45475a; surface0: #313244; base: #1e1e2e; mantle: #181825; crust: #11111b; }
GTK-3
settings.ini
[Settings] gtk-theme-name=catppuccin-mocha-blue-standard+default gtk-icon-theme-name=Papirus-Dark gtk-font-name=Adwaita Sans 11 gtk-cursor-theme-name=catppuccin-mocha-light-cursors gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-button-images=0 gtk-menu-images=0 gtk-enable-event-sounds=1 gtk-enable-input-feedback-sounds=1 gtk-xft-antialias=1 gtk-xft-hinting=1 gtk-xft-hintstyle=hintmedium gtk-application-prefer-dark-theme = true gtk-key-theme-name = Emacs
GTK-4
settings.ini
[Settings] gtk-icon-theme-name = Papirus-Dark gtk-theme-name = catppuccin-mocha-blue-standard+default gtk-font-name=Adwaita Sans 11 gtk-cursor-theme-name=catppuccin-mocha-light-cursors gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-button-images=0 gtk-menu-images=0 gtk-enable-event-sounds=1 gtk-enable-input-feedback-sounds=1 gtk-xft-antialias=1 gtk-xft-hinting=1 gtk-xft-hintstyle=hintmedium gtk-application-prefer-dark-theme = true gtk-key-theme-name = Emacs