# 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 = [] # 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 # Native GPU exclusions # Changes require a restart. Use a PCI address if the GPU may start bound to vfio-pci. # Device paths must resolve at startup or Umbriel refuses to start. # Documentation: https://docs.noctalia.dev/umbriel/configuration/#drm-devices # [drm] # ignored_devices = ["/dev/dri/by-path/pci-0000:01:00.0-card"] # ignored_pci_addresses = ["0000:01:00.0"] # 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 # workspace_axis = "horizontal" # vertical or horizontal workspace arrangement # 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 = "#141419FF" # Internal panels and banners # text_primary = "#E8E8EAFF" # Primary text # text_muted = "#8A8A92FF" # Secondary help and status text # accent_primary = "#7AA3FFFF" # Titles, key chords, and primary emphasis # accent_secondary = "#F5C96BFF" # Group headings and secondary emphasis # warning = "#F5C96BFF" # Warning text and warning-only diagnostics # error = "#FF6B6BFF" # Error text, confirmations, and diagnostics # insert_hint = "#7FC8FF80" # Drag-and-drop target preview # backdrop = "#000000FF" # Fullscreen gaps and lock screen # shadow = "#0000007F" # Window shadow [colors.border] # focused = "#7AA3FFFF" # 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 # 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 # click_method = "clickfinger" # button_areas or clickfinger; omit for the device default [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 # scroll_button = "MouseBack" # Hold to scroll with pointer motion; omit to leave the device alone # scroll_button_lock = false # One press latches scrolling instead of holding [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 = false # 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 # click_method = "clickfinger" # [[input.device]] # name = "Acme Gaming Mouse" # accel_profile = "flat" # sensitivity = 0.0 # scroll_button = "MouseBack" # scroll_button_lock = false # ────────────────────────────── Scratchpads ───────────────────────────────── # With no entries below, Umbriel creates one implicit scratchpad named # `default`, and bare scratchpad actions select it. Defining any named # scratchpad disables that implicit default and requires a name suffix on every # scratchpad action. Names must be unique, and `default` is reserved. # Documentation: https://docs.noctalia.dev/umbriel/scratchpads/ # ──────────────────────────────────────────────────────────────────────────── # [[scratchpad]] # name = "terminal" # [[scratchpad]] # name = "music" # ─────────────────────────────── 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:kitty" "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" # Exit restores the previous layout size immediately # "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 # These bare actions use the implicit `default` scratchpad because no named # definitions are active above. A scratchpad is global: toggling it summons all # its windows to the output under the pointer. Only outputs with a visible # scratchpad receive its dim and blur backdrop. # Resize, maximize, fullscreen, and close actions target a scratchpad that owns # keyboard focus. Layout-relative window actions leave the workspace behind it # unchanged. # 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" # Named mode recipe: uncomment the definitions above, then replace the four # action values with named forms such as these. Every scratchpad action needs a # configured name once named mode is active. # "Mod+Shift+Space" = "window-move-to-scratchpad:terminal" # "Mod+Space" = "scratchpad-toggle:terminal" # "Mod+Ctrl+Space" = "window-restore-from-scratchpad:terminal" # "Mod+Tab" = "scratchpad-focus-next:terminal" # "Mod+Ctrl+Shift+M" = "window-toggle-scratchpad:music" # "Mod+Ctrl+M" = "scratchpad-toggle:music" # 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.333, 0.5, 0.667] # 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] # The strip axis is perpendicular to the output's workspace_axis. 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 = false # Always center the focused column expand_single_column = true # Let a lone column fill the viewport [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 = "bottom_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. Visible scratchpad keybind # resizing uses this event too. [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-open" # Any normal Umbriel action is accepted [hot_corners.top_right] enabled = false delay_ms = 500 action = "overview-close" [hot_corners.bottom_left] enabled = false delay_ms = 500 action = "overview-toggle" [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"]