Files
noctalia_configuration/.config/umbriel/config.toml
T

699 lines
34 KiB
TOML

# Umbriel example configuration
# Distribution packages normally install this file as
# /usr/share/umbriel/config.toml. Copy it to ~/.config/umbriel/config.toml
# before making personal changes. Creating the user file and saving later edits
# both apply live, so a logout is not needed.
# Validate the standard config without starting or disturbing the compositor:
# umbriel validate
# Use `-c` for a custom config path:
# umbriel validate -c /path/to/config.toml
# Complete documentation: https://docs.noctalia.dev/umbriel/
# ─────────────────────────────── Includes ───────────────────────────────────
# Split large configurations into smaller files. Required files are applied in
# list order, followed by optional files, then values in this main file.
# Missing optional files are silently ignored and remain watched. Relative
# paths start from the directory containing this file.
# Documentation: https://docs.noctalia.dev/umbriel/configuration/#include
# ────────────────────────────────────────────────────────────────────────────
[include]
files = [] # Example: ["appearance.toml", "outputs.toml"]
[include.optional]
files = [] # Example: ["~/.config/umbriel/noctalia.toml"]
# ─────────────────────────────── General ────────────────────────────────────
# Configure startup commands, session behavior, environment variables, and
# hardware events.
# Documentation: https://docs.noctalia.dev/umbriel/configuration/#general
# ────────────────────────────────────────────────────────────────────────────
[general]
autostart = ["noctalia"] # Commands run once when the session starts
# mod_key = "Super" # Force Super instead of nested-session Alt
xwayland = true # Requires xwayland-satellite; restart to change
show_cheatsheet = true # Show the keybind overlay on startup
focus_on_activate = false # Do not let unsolicited requests steal focus
honor_restored_maximize = false # Honor restored maximized state
# Session environment
# Values apply only at session startup. Native sessions also publish them to
# newly started systemd user services. Add or uncomment values as needed.
# Documentation: https://docs.noctalia.dev/umbriel/configuration/#environment
[environment]
GTK_THEME = "Adwaita:dark"
QT_QPA_PLATFORMTHEME = "qt5ct"
# Hardware events
# These commands run when a laptop lid opens or closes. Uncomment either hook
# to enable it.
# Documentation: https://docs.noctalia.dev/umbriel/configuration/#events
[events]
lid_close = "notify-send 'The laptop lid is closed'"
lid_open = "notify-send 'The laptop lid is open'"
# ─────────────────────────────── Outputs ────────────────────────────────────
# Configure monitor identity, mode, logical placement, scaling, HDR, VRR, and
# workspace inventory. Run `umbriel outputs` to list names and available modes.
# Documentation: https://docs.noctalia.dev/umbriel/outputs/
# ────────────────────────────────────────────────────────────────────────────
# Output sections are machine-specific, so this example stays commented.
# Uncomment the complete block below and replace DP-1 with the correct name.
# Use a connector when the rule belongs to a port. To follow one physical
# display between machines or ports, replace the header with its quoted Config
# name, for example [output."Some Make Some Model ABC123"].
# [output.DP-1]
# enabled = true # False removes the output but preserves its state
# mode = "2560x1440@144" # WIDTHxHEIGHT or WIDTHxHEIGHT@HZ
# position = [0, 0] # Logical top-left; omit for automatic placement
# scale = 1.25 # Logical size is mode size divided by scale
# transform = "normal" # normal, 90, 180, 270, or a flipped variant
# vrr = "fullscreen" # disabled, always, or fullscreen
# tearing = true # Permit eligible fullscreen asynchronous flips
# direct_scanout = true # False forces composition on this output
# hdr = "auto" # off, on, auto, or fullscreen
# sdr_white = 203 # SDR reference white in cd/m2 during HDR
# workspaces = 5 # Omit for dynamic workspaces
# Replace the count with ["WEB", "CHAT", "MEDIA"] for named static workspaces,
# or with "dynamic" to state the dynamic default explicitly. A dynamic output
# can keep a minimum number of workspaces instead, so a bar always shows them:
# [output.DP-1]
# min_workspaces = 3 # Dynamic floor; rejected with a static inventory
# New scrolling columns on this output can use a different initial width. This
# affects new columns only; existing columns keep their current size.
# Documentation: https://docs.noctalia.dev/umbriel/outputs/#initial-scrolling-width
# [output.DP-1.layout.scrolling]
# default_width_fraction = 0.4
# ────────────────────────────── Workspaces ──────────────────────────────────
# Choose global workspace behavior. Each output uses dynamic workspaces unless
# its output section defines a static count or list of names.
# Documentation: https://docs.noctalia.dev/umbriel/workspaces/
# ────────────────────────────────────────────────────────────────────────────
[workspaces]
# Each output supports at most 64 workspaces, including empty ones.
back_and_forth = false # Re-select active workspace to switch back
empty_above = false # Keep one empty workspace above active range
# Workspace rules customize layout without creating workspaces. Select exactly
# one `index` or `name`; `output` is optional. This recipe works with dynamic
# inventories and static inventories that contain workspace 2. Uncomment the
# complete block.
# Documentation: https://docs.noctalia.dev/umbriel/workspaces/#workspace-rules
# [[workspace]]
# index = 2
# output = "DP-1"
# layout.mode = "dwindle"
# layout.gap = 4
# layout.struts.top = 24
# layout.scrolling.center_underfull_strip = false
# layout.dwindle.preserve_split = true
# A name selector must exist in a static output inventory, for example
# `workspaces = ["WEB", "CHAT"]` in the matching output block.
# [[workspace]]
# name = "CHAT"
# output = "DP-1"
# layout.mode = "master"
# ─────────────────────────────── Colors ─────────────────────────────────────
# Configure every color Umbriel paints. Values stay commented so an included
# Noctalia-generated palette can supply them without this main file winning.
# Documentation: https://docs.noctalia.dev/umbriel/appearance/#colors
# ────────────────────────────────────────────────────────────────────────────
[colors]
background = "#32302f" # Internal panels and banners
text_primary = "#fbf1c7" # Primary text
text_muted = "#a89984" # Secondary help and status text
accent_primary = "#689d6a" # Titles, key chords, and primary emphasis
accent_secondary = "#458588" # Group headings and secondary emphasis
warning = "#d79921" # Warning text and warning-only diagnostics
error = "#cc241d" # Error text, confirmations, and diagnostics
insert_hint = "#d65d0e" # Drag-and-drop target preview
backdrop = "#32302f" # Fullscreen gaps and lock screen
shadow = "#282828" # Window shadow
[colors.border]
focused = "#fe8019" # Focused window border
# unfocused = "#292933FF" # Unfocused window border
# scratchpad_focused = "#E5C07BFF" # Focused scratchpad border
# scratchpad_unfocused = "#5C4A2AFF" # Unfocused scratchpad border
# outer = "#1A1A1FFF" # Outer border ring
[colors.overview]
# background_tint = "#10101430" # Tint over the desktop background
# workspace_background = "#00000044" # Background behind each workspace
# badge = "#7AA3FFFF" # Overview shortcut badge
# ───────────────────────────── Appearance ───────────────────────────────────
# Configure window decoration geometry, blur, shadows, and other visual
# effects.
# Documentation: https://docs.noctalia.dev/umbriel/appearance/#window-appearance
# ────────────────────────────────────────────────────────────────────────────
[appearance]
prefer_no_csd = true # Prefer Umbriel's border-only decoration
border_width = 2 # Inner border width, 0-100 logical pixels
outer_border_width = 0 # Optional outer ring, 0-100 logical pixels
corner_radius = 10 # Radius of the final decorated edge, 0-100
drag_opacity = 0.75 # Window opacity during a tiled or floating drag
[appearance.blur]
# This is the global blur engine. A matching window or layer rule must still
# opt a surface into blur.
enabled = true # Disable blur and release per-output effect buffers
optimized = true # Reuse one cached background blur per output
passes = 3 # Blur passes, 0-8
radius = 3 # Blur radius, 0-100
noise = 0.02 # Noise overlay, 0.0-1.0
brightness = 0.9 # 0.0-2.0
contrast = 0.9 # 0.0-2.0
saturation = 1.1 # 0.0-2.0
[appearance.shadow]
# Custom window shaders automatically shape the shadow from their output alpha.
# Shadows stay beneath windows and follow closing snapshots as well.
enabled = true # Draw shadows behind non-fullscreen windows
softness = 10 # Gaussian softness, 0-200; 0 is a hard edge
offset_x = 2 # Horizontal offset, -200 to 200
offset_y = 2 # Vertical offset, -200 to 200
# ──────────────────────────────── Input ─────────────────────────────────────
# Configure keyboards, pointers, tablets, cursor behavior, and focus policy.
# Documentation: https://docs.noctalia.dev/umbriel/input/
# ────────────────────────────────────────────────────────────────────────────
[input]
middle_click_paste = true # Primary-selection paste; applies on reload
window_drag_toggle = "none" # Retarget a window drag: "none", "floating", or "pinned"
[input.keyboard]
# Physical keyboard XKB settings. Virtual keyboards provide their own keymaps.
layout = "" # Example: "us,de"; empty uses the system default
variant = "" # Example: ",nodeadkeys" for two layouts
options = "" # Example: "grp:alt_shift_toggle"
repeat_rate = 25 # Key repeats per second, 0-1000
repeat_delay = 600 # Delay before repeating, 0-10000 ms
numlock_toggle = true # Enable on connect; false preserves the current state
track_layout = "global" # global, or window for per-surface layout memory
[input.touchpad]
tap = true # Tap-to-click
natural_scroll = true # Omit to preserve the libinput default
accel_profile = "adaptive" # flat, adaptive, or custom <step> <points...>
# sensitivity = 0.5 # Pointer speed, -1.0 to 1.0
# scroll_factor = 1.5 # Two-finger scroll multiplier, 0.1-10.0
disable_while_typing = true # Omit to preserve the libinput default
disable_on_external_mouse = true # Native sessions only
[input.mouse]
natural_scroll = false # Omit to preserve the libinput default
# accel_profile = "flat" # Omit to preserve the libinput default
sensitivity = 0.0 # Pointer speed, -1.0 to 1.0
scroll_wheel_step = 60 # Logical pixels per layout-scroll action, 1-1000
[input.tablet]
enabled = true # False disables tablet tools and pads
# map_to_output = "DP-1" # Connector or monitor Config name
# map_to_focused_output = false
# map_to_focused_window = false # Focused-window mapping has highest priority
# left_handed = false
# calibration_matrix = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0]
[input.cursor]
theme = "" # Empty uses environment or default Xcursor theme
size = 24 # Logical size, 1-512
hardware_cursor = true # False forces cursor composition
follows_focus = false # Warp to windows selected by focus, output, move, or other activations
hide_when_typing = false # Keep visible while typing
hide_timeout_ms = 0 # Idle hide timeout, 0 disables; maximum is 3600000
[input.focus]
follows_mouse = true # Focus the pointer target after pointer motion
# Refuse hover focus when revealing a window would scroll farther than this
# many viewport widths. Omit the key for no limit.
# follows_mouse_max_scroll = 0.5
# Exact, case-sensitive per-device overrides inherit their device-kind table.
# Find names with `libinput list-devices`. Uncomment each complete block needed.
# Documentation: https://docs.noctalia.dev/umbriel/input/#per-device-overrides
# [[input.device]]
# name = "Acme Split Keyboard"
# layout = "us"
# variant = "colemak_dh"
# repeat_rate = 40
# repeat_delay = 250
# [[input.device]]
# name = "Acme Precision Touchpad"
# tap = true
# natural_scroll = false
# accel_profile = "flat"
# sensitivity = 0.0
# disable_while_typing = false
# [[input.device]]
# name = "Acme Gaming Mouse"
# accel_profile = "flat"
# sensitivity = 0.0
# ─────────────────────────────── Keybinds ───────────────────────────────────
# Bind chords to compositor actions. Configured chords replace matching
# built-ins; built-in chords not mentioned here remain active.
# Syntax: https://docs.noctalia.dev/umbriel/keybinds/
# Actions: https://docs.noctalia.dev/umbriel/actions/
# ────────────────────────────────────────────────────────────────────────────
[keybinds]
# Applications and session
"Mod+Return" = "spawn:alacritty"
"Mod" = "spawn:noctalia msg panel-toggle launcher"
"Mod+Q" = "window-close"
# Focus navigation. In overview, Mod+Up/Down retain normal layout focus, so they
# traverse stacks in the default horizontal layout. Bare Up/Down move between
# workspace rows.
"Mod+Left" = "window-focus-left"
"Mod+Down" = "window-focus-down"
"Mod+Up" = "window-focus-up"
"Mod+Right" = "window-focus-right"
# Window state and layout
"Mod+T" = "window-toggle-floating"
"Mod+Shift+T" = "window-focus-switch-floating"
"Mod+P" = "window-toggle-pinned"
"Mod+M" = "window-toggle-maximize-to-edges"
# Overview
"Mod+O" = { action = "overview-toggle", repeat = false }
# These useful bindings are built in already. They stay commented here so an
# included keybind file can override them without this main file winning again.
# Uncomment a chord only when this file should own that override.
# "Mod+Escape" = "session-quit"
# "Mod+F1" = "window-focus-next"
"Mod+H" = "window-focus-left"
"Mod+J" = "window-focus-down"
"Mod+K" = "window-focus-up"
"Mod+L" = "window-focus-right"
"Mod+Shift+Left" = "column-move-left"
"Mod+Shift+Down" = "window-move-down"
"Mod+Shift+Up" = "window-move-up"
"Mod+Shift+Right" = "column-move-right"
# "Mod+F" = "window-toggle-fullscreen"
# "Mod+Ctrl+F" = "window-toggle-maximize"
"Mod+R" = "window-cycle-width"
"Mod+Shift+R" = "window-cycle-width-back"
# "Mod+Comma" = "window-consume-left"
# "Mod+Period" = "window-consume-right"
"Mod+WheelUp" = "window-focus-left"
"Mod+WheelDown" = "window-focus-right"
#Mod+1 through Mod+9 switch workspaces. Adding Shift moves the focused window;
# keypad digits provide the same built-in actions.
# Scratchpads
# Each output owns a separate scratchpad. Bare actions target the output under
# the pointer; append `:DP-1` or a monitor Config name to target one explicitly.
# Documentation: https://docs.noctalia.dev/umbriel/scratchpads/
"Mod+Shift+Space" = "window-move-to-scratchpad"
"Mod+Space" = "scratchpad-toggle"
"Mod+Ctrl+Space" = "window-restore-from-scratchpad"
"Mod+Tab" = "scratchpad-focus-next"
# Optional navigation and sizing recipes. These chords do not replace active
# bindings above when uncommented.
# "Mod+Page_Up" = "workspace-previous"
# "Mod+Page_Down" = "workspace-next"
# "Mod+Shift+Page_Up" = "window-move-to-workspace-previous"
# "Mod+Shift+Page_Down" = "window-move-to-workspace-next"
# "Mod+Home" = "column-focus-first"
# "Mod+End" = "column-focus-last"
# "Mod+Shift+Home" = "column-move-to-first"
# "Mod+Shift+End" = "column-move-to-last"
# "Mod+Bracketright" = "window-focus-next"
# "Mod+Bracketleft" = "window-focus-previous"
# "Mod+Shift+Bracketright" = "window-swap-next"
# "Mod+Shift+Bracketleft" = "window-swap-previous"
# "Mod+Minus" = "window-modify-width:-0.1"
# "Mod+Equal" = "window-modify-width:0.1"
# "Mod+Alt+Minus" = "window-modify-height:-0.1"
# "Mod+Alt+Equal" = "window-modify-height:0.1"
# "Mod+Alt+R" = "window-cycle-height"
# "Mod+Alt+Shift+R" = "window-cycle-height-back"
# "Mod+Grave" = "window-focus-last"
# "Mod+BackSpace" = "window-consume-or-expel-left"
# "Mod+C" = "column-center"
# "Mod+Shift+C" = "window-center"
# "Mod+Ctrl+T" = "workspace-set-layout:toggle"
# "Mod+MouseMiddle" = "layout-scroll-drag"
# "Mod+Alt+K" = "keyboard-layout-next"
# "Mod+WheelUp" = { action = "workspace-previous", cooldown_ms = 150 }
# "Mod+WheelDown" = { action = "workspace-next", cooldown_ms = 150 }
# Submaps temporarily replace the active keybind layer and can nest. Entry
# binds must not repeat. A table-form bind can run an action and then reset one
# level, while a global reset provides an emergency exit from any layer.
# Submaps: https://docs.noctalia.dev/umbriel/keybinds/#submaps
# "Mod+S" = { action = "submap:resize", repeat = false }
# "submap[resize],1" = { action = "window-set-width:0.5", submap = "reset" }
# "submap[resize],N" = { action = "submap:nudge", repeat = false }
# "submap[resize],Escape" = "submap:reset"
# "submap[nudge],Left" = "window-modify-width:-0.1"
# "submap[nudge],Right" = "window-modify-width:0.1"
# "submap[nudge],Escape" = "submap:reset"
# "Escape" = "submap:reset"
# Media and brightness
# Documentation: https://docs.noctalia.dev/umbriel/keybinds/#example-media-and-brightness-keys
"XF86AudioRaiseVolume" = "spawn:wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
"XF86AudioLowerVolume" = "spawn:wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
"XF86AudioMute" = "spawn:wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
"XF86AudioPlay" = "spawn:playerctl play-pause"
"XF86AudioNext" = "spawn:playerctl next"
"XF86AudioPrev" = "spawn:playerctl previous"
# Binds intended to work while locked use the table form.
"XF86MonBrightnessDown" = { action = "spawn:noctalia msg brightness-down 10", allow_when_locked = true }
"XF86MonBrightnessUp" = { action = "spawn:noctalia msg brightness-up 10", allow_when_locked = true }
# ─────────────────────────────── Layout ─────────────────────────────────────
# Configure the default tiling mode and shared sizing behavior. Workspace rules
# above can override these values for individual workspaces.
# Documentation: https://docs.noctalia.dev/umbriel/layout/
# ────────────────────────────────────────────────────────────────────────────
[layout]
mode = "scrolling" # scrolling, dwindle, or master
gap = 8 # Logical pixels between tiles, 0-500
width_presets = [0.33, 0.5, 0.67, 1.0] # Width and height cycling fractions
[layout.struts]
# Signed logical pixels reserved after panel exclusive zones. Negative values
# expand the tiled area beyond that edge.
left = 0 # -65535 to 65535
right = 0
top = 0
bottom = 0
[layout.scrolling]
default_width_fraction = 0.5 # Initial width for new columns, 0.1-1.0
center_underfull_strip = true # Center a strip narrower than the viewport
center_focused = "never" # Always center the focused column
[layout.dwindle]
# preserve_split = false # Keep every split direction fixed after creation
[layout.master]
position = "left" # left or right master area
default_width_fraction = 0.55 # Initial master area fraction, 0.1-0.9
new_on_top = true # Put new windows at the top of the stack
# ───────────────────────────── Window Rules ─────────────────────────────────
# Match windows by application ID, title, XDG tag, content type, or focus state.
# Opening settings apply once; effects and output policies update while mapped.
# Documentation: https://docs.noctalia.dev/umbriel/window-rules/
# ────────────────────────────────────────────────────────────────────────────
# Blur every window. Keep this selectorless rule first so later matching rules
# can override individual blur settings.
[[window_rule]]
blur = true
blur_optimized = false
# Noctalia settings
[[window_rule]]
match.app_id = "^dev.noctalia.Noctalia$"
default_floating = true
default_size = [1020, 900]
# Noctalia share picker
[[window_rule]]
match.app_id = "^dev.noctalia.UmbrielSharePicker$"
default_floating = true
default_size = [800, 600]
# Browsers expose no semantic PiP role or global position control.
[[window_rule]]
match.title = "^(Picture-in-Picture|Picture in picture)$"
default_floating = true
default_maximize = false
default_position = { x = 20, y = 20, anchor = "bottom_right" }
# Keep Steam notification toasts in the bottom-right corner without stealing
# focus, and pin them so workspace switches do not hide them.
[[window_rule]]
match.title = "^notificationtoasts_.+_desktop"
default_position = { x = 0, y = 0, anchor = "top_right" }
default_focused = false
default_pinned = true
# Optional placement recipe. Output names follow the same rules as [output.*].
# [[window_rule]]
# match.app_id = "^org[.]example[.]Chat$"
# default_output = "DP-1"
# default_workspace = 2
# default_focused = false
# Open an application maximized while keeping its parented dialogs natural-sized.
# [[window_rule]]
# match.app_id = "^example-app$"
# default_maximize = true
# Open an application maximized to usable-area edges, without gaps or borders.
# [[window_rule]]
# match.app_id = "^discord$"
# default_maximize_to_edges = true
# Match a standardized surface content hint.
# [[window_rule]]
# match.content_type = "game"
# vrr = "always"
# Match a client-defined XDG toplevel tag, such as Proton-EM's game tag.
# [[window_rule]]
# match.xdg_tag = "^proton-game$"
# default_fullscreen = true
# Seed a new horizontal scrolling column with a pixel width. The layout controls
# its tiled height, and existing named columns keep their established width.
# [[window_rule]]
# match.app_id = "^org[.]example[.]Wide$"
# default_size = [1200, 600]
# Size a floating window as fractions of the usable area. `default_size` wins
# on both axes if it is also present.
# [[window_rule]]
# match.app_id = "^org[.]example[.]Utility$"
# default_floating = true
# default_width = 0.5
# default_height = 0.6
# Dynamic effects and output policies can be combined in one matching rule.
# [[window_rule]]
# match.app_id = "^firefox$"
# match.title = "^Library$"
# default_floating = true
# default_focused = false
# focus_on_activate = true
# opacity = 0.95
# blur_popups = true
# blur_ignore_alpha = 0.1
# vrr = "always"
# tearing = true
# hdr = "fullscreen"
# Keep related tiled windows in one named scrolling column. Lower orders appear
# higher in horizontal scrolling and farther left in vertical scrolling.
# [[window_rule]]
# match.app_id = "^firefox$"
# default_scrolling_column = "browsers"
# default_scrolling_column_order = 10
# Focus-aware rules update as focus changes.
# [[window_rule]]
# match.is_focused = false
# opacity = 0.85
# [[window_rule]]
# match.is_focused = true
# opacity = 1.0
# ────────────────────────────── Layer Rules ─────────────────────────────────
# Match layer-shell surfaces such as panels, launchers, notifications, and
# desktop widgets by namespace. Run `umbriel layers` to inspect live names.
# Documentation: https://docs.noctalia.dev/umbriel/layer-rules/
# ────────────────────────────────────────────────────────────────────────────
[[layer_rule]]
match.namespace = "^noctalia-(bar-[^\"]+|notification|dock|panel|attached-panel|osd|desktop-widget-[^\"]*)$"
blur = true
blur_ignore_alpha = 0.5
blur_popups = true
blur_optimized = false
# ────────────────────────────── Animation ───────────────────────────────────
# Parent values provide defaults for every event table. Nested values override
# only that event. Disable one event to make just that transition instant.
# Documentation: https://docs.noctalia.dev/umbriel/animation/
# Every event accepts shader = "path/to/effect.glsl". Inline GLSL is not supported.
# File paths are relative to this config, including configs loaded via include.
# Bundled reveal.glsl and squash.glsl can be referenced by their installed absolute paths.
# Copy examples/shaders beside your config only if you want editable local versions.
# ────────────────────────────────────────────────────────────────────────────
[animation]
enabled = true # Master animation switch
duration_ms = 250 # Shared duration, 1-10000 ms
curve = "easeout" # Built-in or registered bezier/spring curve name
# Window opening
[animation.windows_in]
enabled = true
duration_ms = 150
curve = "easeout"
style = "popin" # popin, zoom, slide, fade, or none
scale = 0.85 # Popin start scale, 0.1-1.0
# shader = "shaders/reveal.glsl" # Replaces the built-in opening style
# Window closing
[animation.windows_out]
enabled = true
duration_ms = 150
curve = "easeout"
style = "fade" # fade or slide
# shader = "shaders/reveal.glsl"
# Window movement, resizing, and floating maximize
[animation.windows_move]
enabled = true
duration_ms = 250
curve = "snappy"
# shader = "shaders/squash.glsl" # Subtle compression and settle during move/resize
# Workspace switching
[animation.workspaces]
enabled = true
duration_ms = 250
curve = "easeout"
# Overview opening, closing, and row settling
[animation.overview]
enabled = true
duration_ms = 250
curve = "easeout"
# Scratchpad show, hide, and backdrop
[animation.scratchpad]
enabled = false
duration_ms = 250
curve = "easeout"
dim = 0.5 # Backdrop dim amount, 0.0-1.0
blur = false # Requires appearance.blur.enabled
scale = 0.0 # 0 keeps geometry; 0.1-1.0 centers and scales
maximize = false # Maximize to usable-area edges while shown
fullscreen = false # Make the scratchpad window fullscreen while shown
# Focus border color
[animation.border]
enabled = false
duration_ms = 250
curve = "easeout"
# Unfocused window opacity
[animation.dim_unfocused]
enabled = false
duration_ms = 250
curve = "easeout"
dim = 0.0 # 0 disables dimming; maximum is 1.0
# Layer-shell surface mapping and unmapping
[animation.layers]
enabled = false
duration_ms = 250
curve = "easeout"
# Register reusable curves by adding or uncommenting entries below.
# Documentation: https://docs.noctalia.dev/umbriel/animation/#curves
[animation.beziers]
# myBezier = [0.05, 0.9, 0.1, 1.0]
[animation.springs]
# myBounce = { damping = 0.5, stiffness = 200 }
# ─────────────────────── Overview and Hot Corners ───────────────────────────
# Configure the all-workspaces overview and pointer-triggered corner actions.
# Overview: https://docs.noctalia.dev/umbriel/workspaces-overview/
# Hot corners: https://docs.noctalia.dev/umbriel/keybinds/#hot-corners
# ────────────────────────────────────────────────────────────────────────────
[overview]
zoom = 0.5 # Workspace scale in overview, 0.1-0.75
# Pinned windows stay hidden until overview closes; visible scratchpads are dismissed.
# background_blur = true # Blur the wallpaper behind overview rows
# workspace_wallpaper = true # Mirror wallpapers inside workspace previews
# shortcuts = true # Show keyboard shortcut badges on windows
# shortcut_keys = "1234567890" # Badge keys in preference order
[hot_corners.top_left]
enabled = true # Open the overview after resting here
delay_ms = 500 # 0 activates immediately; maximum is 10000
action = "overview-toggle" # Any normal Umbriel action is accepted
[hot_corners.top_right]
enabled = false
delay_ms = 500
action = "spawn:notify-send 'Top right'"
[hot_corners.bottom_left]
enabled = false
delay_ms = 500
action = "spawn:notify-send 'Bottom Left'"
[hot_corners.bottom_right]
enabled = false
delay_ms = 500
action = "spawn:notify-send 'Bottom right'"
# ─────────────────────── Security Context Rules ─────────────────────────────
# Sandboxed clients receive a restricted Wayland global set. Grant extra
# globals only to a narrowly matched application that genuinely needs them.
# Documentation: https://docs.noctalia.dev/umbriel/security/#per-application-grants
# ────────────────────────────────────────────────────────────────────────────
# Grant a sandboxed clipboard manager both data-control protocol variants.
# Uncomment the complete block and replace the example application ID.
# [[security_context_rule]]
# match.sandbox_engine = 'org\.flatpak'
# match.app_id = 'org\.example\.ClipboardManager'
# allow_globals = ["ext_data_control_manager_v1", "zwlr_data_control_manager_v1"]