# ============================================================================== # mangowc config.conf # ============================================================================== # For more detailed information and additional config options visit: # https://mangowc.vercel.app/ # https://github.com/DreamMaoMao/mangowc/wiki # The default config path is: ~/.config/mango/config.conf # The default fallback path is: /etc/mango/config.conf # You can make your config modular by sourcing other files: # An example of using an absolute path # source = ~/.config/mango/bind.conf # An example of using a relative path # source = ./bind.conf # You can also start mango using a custom configuration path: # $ mango -c /path/to/config # ------------------------------------------------------------------------------ # Startup Apps & Environment Variables # ------------------------------------------------------------------------------ # exec-once = discord # Only run when first starting mango exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP = wlroots # Runs every time the config is reloaded # exec = bash reloadsomething.sh # exec-once = waybar # You can set system environment variables that reset on each config reload. # For example: # env = LANG, en_US.UTF-8 # env = XDG_SCREENSHOTS_DIR, ~/Pictures/Screenshots # ------------------------------------------------------------------------------ # Monitor Rules # ------------------------------------------------------------------------------ # Warning: If using xwayland do not set any display to negative coordinates. # It will cause the click event to be abnormal. Refer to: https://gitlab.freedesktop.org/xorg/xserver/-/issues/899 # The layout set in `tagrule` has a higher priority than the layout set in `monitorrule` and will override it. # Example format: # monitorrule = , , , , , , , , , , # Example dual monitor setup: # monitorrule = DP-1, 0.50, 1, tgmix, 0, 1, 1920, 0, 1920, 1080, 60 # monitorrule = DP-3, 0.50, 1, scroller, 0, 1, 0, 0, 1920, 1080, 144 # The transform values are: # 0: no transform # 1: 90 degrees counter-clockwise # 2: 180 degrees counter-clockwise # 3: 270 degrees counter-clockwise # 4: 180 degrees vertical flip # 5: Vertical flip + 90 degrees counter-clockwise # 6: Vertical flip + 180 degrees counter-clockwise # 7: Vertical flip + 270 counter-clockwise # ------------------------------------------------------------------------------ # Window Effects (Blur & Shadows)(Requires SceneFX version) # ------------------------------------------------------------------------------ # Enable/disable window background blur blur = 0 # Enable/disable blur on shell layers (like panels/menus) blur_layer = 0 # Use optimized blur shader for better performance blur_optimized = 1 # Quality of blur (higher = smoother but heavier) blur_params_num_passes = 2 # Strength of the blur effect blur_params_radius = 5 # Dithering/noise to prevent color banding in blur blur_params_noise = 0.02 # Adjust brightness of the blurred area blur_params_brightness = 0.9 # Adjust contrast of the blurred area blur_params_contrast = 0.9 # Adjust color intensity of the blurred area blur_params_saturation = 1.2 # Enable/disable window shadows shadows = 0 # Enable/disable shadows on shell layers layer_shadows = 0 # Only draw shadows on floating (non-tiled) windows shadow_only_floating = 1 # The spread/size of the shadow shadows_size = 10 # The softness of the shadow edges shadows_blur = 15 # Horizontal offset of the shadow shadows_position_x = 0 # Vertical offset of the shadow shadows_position_y = 0 # Shadow color in HEX (RGBA) shadowscolor = 0x000000ff # ------------------------------------------------------------------------------ # Animations (Open, Close, Move, Tag Switch) # ------------------------------------------------------------------------------ # Master toggle for window animations animations = 1 # Toggle animations for layers (menus/popups) layer_animations = 1 # Animation style for opening (zoom or slide) animation_type_open = slide # Animation style for closing (zoom or slide) animation_type_close = slide # Enable fade-in effect during open animation_fade_in = 1 # Enable fade-out effect during close animation_fade_out = 1 # 1 for horizontal sliding, 0 for vertical sliding tag_animation_direction = 1 # Ratios & Opacity # Starting size multiplier for zoom animation zoom_initial_ratio = 0.3 # Ending size multiplier for zoom animation zoom_end_ratio = 0.8 # Starting opacity for fade-in fadein_begin_opacity = 0.5 # Starting opacity for fade-out fadeout_begin_opacity = 0.8 # Durations (in milliseconds) # Time taken to move/resize a window animation_duration_move = 500 # Time taken to open a window animation_duration_open = 400 # Time taken to switch between tags (workspaces) animation_duration_tag = 350 # Time taken to close a window animation_duration_close = 800 # Time taken to animate focus changes animation_duration_focus = 0 # Animation Curves (Cubic Bezier: x1, y1, x2, y2) animation_curve_open = 0.46, 1.0, 0.29, 1 animation_curve_move = 0.46, 1.0, 0.29, 1 animation_curve_tag = 0.46, 1.0, 0.29, 1 animation_curve_close = 0.08, 0.92, 0, 1 animation_curve_focus = 0.46, 1.0, 0.29, 1 animation_curve_opafadeout = 0.5, 0.5, 0.5, 0.5 animation_curve_opafadein = 0.46, 1.0, 0.29, 1 # ------------------------------------------------------------------------------ # Layout Settings (Scroller, Master-Stack, Gaps) # ------------------------------------------------------------------------------ # Scroller Layout # Maximum internal structures for scroller scroller_structs = 20 # Default window width in scroller mode scroller_default_proportion = 0.8 # Keep focused window centered scroller_focus_center = 0 # Favor center positioning for new windows scroller_prefer_center = 0 # Focus window under pointer at screen edges edge_scroller_pointer_focus = 1 # Width proportion when only one window exists scroller_default_proportion_single = 1.0 # Cycling presets for window sizing scroller_proportion_preset = 0.5, 0.8, 1.0 # Master-Stack Layout # New windows become the master (left side) new_is_master = 1 # Default master area width percentage default_mfact = 0.55 # Default number of windows in the master area default_nmaster = 1 # Hide gaps if only one window is visible smartgaps = 0 # Appearance & Gaps # Horizontal inner gap (between windows) gappih = 5 # Vertical inner gap (between windows) gappiv = 5 # Horizontal outer gap (window to screen edge) gappoh = 10 # Vertical outer gap (window to screen edge) gappov = 10 # Window border thickness in pixels borderpx = 4 # Rounding of window corners border_radius = 6 # Disable corner rounding for single windows no_radius_when_single = 0 # Disable borders for single windows no_border_when_single = 0 # ------------------------------------------------------------------------------ # Workspace (Tag) Rules # ------------------------------------------------------------------------------ # Default layout for each tag # (tile, scroller, monocle, grid, deck, center_tile, vertical_tile, vertical_grid, vertical_scroller, tgmix) # tagrule = id:1, layout_name:tgmix # tagrule = id:2, layout_name:tgmix tagrule = id:3, layout_name:tgmix tagrule = id:4, layout_name:tgmix tagrule = id:5, layout_name:tgmix tagrule = id:6, layout_name:tgmix tagrule = id:7, layout_name:tgmix tagrule = id:8, layout_name:tgmix tagrule = id:9, layout_name:tgmix # ------------------------------------------------------------------------------ # Colors (Hex RGBA) # ------------------------------------------------------------------------------ # Desktop background color rootcolor = 0x201b14ff # Inactive window border color bordercolor = 0x444444ff # Focused window border color focuscolor = 0xc9b890ff # Color hint when a window is maximized maximizescreencolor = 0x89aa61ff # Border color for windows requesting attention urgentcolor = 0xad401fff # Border color for scratchpad windows scratchpadcolor = 0x516c93ff # Border color for global windows globalcolor = 0xb153a7ff # Border color for overlay windows overlaycolor = 0x14a57cff # ------------------------------------------------------------------------------ # Input Configuration (Keyboard, Mouse, Trackpad) # ------------------------------------------------------------------------------ # Keyboard # Keys per second when held down repeat_rate = 25 # Delay before key repeat starts (ms) repeat_delay = 600 # Enable NumLock on startup numlockon = 0 # Keyboard layout xkb_rules_layout = us # Trackpad # Set to 1 to disable trackpad disable_trackpad = 0 # Enable tapping to click tap_to_click = 1 # Tap and then immediately drag tap_and_drag = 1 # Keep dragging after finger lift drag_lock = 1 # Reverse scroll direction trackpad_natural_scrolling = 0 # Prevent accidental trackpad input disable_while_typing = 1 # Swap left/right buttons left_handed = 0 # Tap both buttons for middle click middle_button_emulation = 0 # Minimum distance for swipe gestures swipe_min_threshold = 1 # Mouse # Reverse scroll direction for mouse wheel mouse_natural_scrolling = 0 # ------------------------------------------------------------------------------ # Miscellaneous System Settings # ------------------------------------------------------------------------------ # Size of the screen corner "hot area" hotarea_size = 10 # Enable triggers when mouse hits screen corners enable_hotarea = 1 # Overview tab behavior mode ov_tab_mode = 0 # Inner gaps in Overview mode overviewgappi = 5 # Outer gaps in Overview mode overviewgappo = 30 # (0 or 1) Enable xwayland persistence (needs a relogin to take effect) xwayland_persistence = 1 # (0 or 1) Enable drm_syncobj (needs a relogin to take effect). Can improve game performance. syncobj_enable = 0 # (0 or 1) Enable variable refresh rate(vrr). Can improve game performance. adaptive_sync = 0 # (0 or 1) Allow shortcuts to be inhibited by clients allow_shortcuts_inhibit = 1 # (0 or 1 or 2) Allow tearing. Can improve game performance. allow_tearing = 0 # (0 or 1) Enable transparent lock screen allow_lock_transparent = 0 # Detect the intervals of consecutive scroll for axisbind axis_bind_apply_timeout = 100 # (0.1-10.0) Scroll factor for axis scroll speed axis_scroll_factor = 1.0 # (0 or 1) Focus window when window send activate event (0-disable, 1-enable) focus_on_activate = 1 # (0 or 1) Invisible clients can also trigger idle inhibit idleinhibit_ignore_visible = 0 # (0 or 1) Focus follow mouse move sloppyfocus = 1 # (0 or 1) Cursor warping when focus change warpcursor = 1 # (0 or 1) Focus across monitors focus_cross_monitor = 0 # (0 or 1) exchange two clients across monitors exchange_cross_monitor = 0 # (0 or 1) all monitors have the same scratchpad scratchpad_cross_monitor = 0 # (0 or 1) Focus across tags focus_cross_tag = 0 # (0 or 1) View current tag will auto back to prev view tag view_current_to_back = 1 # (0 or 1) Enable floating window snap enable_floating_snap = 0 # (0 - 9999) The max distance to trigger floating window snap snap_distance = 30 # (0 - 9999) Set cursor size cursor_size = 24 # Set cursor theme # cursor_theme = - # (0 or 1) Don't render border when the window is alone in the tag no_border_when_single = 0 # (0 - 9999) Time spent idle until cursor hides cursor_hide_timeout = 0 # (0 or 1) If the dragged window is a tiled window, it will retile when the drag ends drag_tile_to_tile = 0 # only show one out of named scratchpads or the normal scratchpad single_scratchpad = 1 # Confine `switch_layout` to a specific group of layouts # circle_layout = - # ------------------------------------------------------------------------------ # Key Bindings # ------------------------------------------------------------------------------ # Refer to `xev` or `wev` to find key names # You can use `spawn_shell` in place of `spawn` to use more advanced shell commands with piping # reload config bind = Super, r, reload_config # menu and terminal bind = Alt, space, spawn, rofi -show drun bind = Alt, Return, spawn, foot # exit bind = Super+Shift+Ctrl, m, quit bind = Alt, q, killclient # switch window focus bind = Super, Tab, focusstack, next bind = Alt, Left, focusdir, left bind = Alt, Right, focusdir, right bind = Alt, Up, focusdir, up bind = Alt, Down, focusdir, down # swap window bind = Super+Shift, Up, exchange_client, up bind = Super+Shift, Down, exchange_client, down bind = Super+Shift, Left, exchange_client, left bind = Super+Shift, Right, exchange_client, right # switch window status bind = Super, g, toggleglobal bind = Alt, Tab, toggleoverview bind = Alt, backslash, togglefloating bind = Alt, a, togglemaximizescreen bind = Alt, f, togglefullscreen bind = Alt+Shift, f, togglefakefullscreen bind = Super, i, minimized bind = Super, o, toggleoverlay bind = Super+Shift, i, restore_minimized bind = Alt, z, toggle_scratchpad # scroller layout bind = Alt, e, set_proportion, 1.0 bind = Alt, x, switch_proportion_preset bind = Alt+Ctrl+Shift, left, scroller_stack, left bind = Alt+Ctrl+Shift, h, scroller_stack, left bind = Alt+Ctrl+Shift, right, scroller_stack, right bind = Alt+Ctrl+Shift, l, scroller_stack, right bind = Alt+Ctrl+Shift, up, scroller_stack, up bind = Alt+Ctrl+Shift, k, scroller_stack, up bind = Alt+Ctrl+Shift, down, scroller_stack, down bind = Alt+Ctrl+Shift, j, scroller_stack, down # switch layout bind = Super, n, switch_layout # tag switch bind = Super, Left, viewtoleft, 0 bind = Ctrl, Left, viewtoleft_have_client, 0 bind = Super, Right, viewtoright, 0 bind = Ctrl, Right, viewtoright_have_client, 0 bind = Ctrl+Super, Left, tagtoleft, 0 bind = Ctrl+Super, Right, tagtoright, 0 bind = Ctrl, 1, view, 1, 0 bind = Ctrl, 2, view, 2, 0 bind = Ctrl, 3, view, 3, 0 bind = Ctrl, 4, view, 4, 0 bind = Ctrl, 5, view, 5, 0 bind = Ctrl, 6, view, 6, 0 bind = Ctrl, 7, view, 7, 0 bind = Ctrl, 8, view, 8, 0 bind = Ctrl, 9, view, 9, 0 # tag: move client to the tag and focus it # tagsilent: move client to the tag and not focus it bind = Alt, 1, tag, 1, 0 bind = Alt, 1, tag, 1, 0 bind = Alt, 2, tag, 2, 0 bind = Alt, 3, tag, 3, 0 bind = Alt, 4, tag, 4, 0 bind = Alt, 5, tag, 5, 0 bind = Alt, 6, tag, 6, 0 bind = Alt, 7, tag, 7, 0 bind = Alt, 8, tag, 8, 0 bind = Alt, 9, tag, 9, 0 # monitor switch bind = Alt+Shift, Left, focusmon, left bind = Alt+Shift, Right, focusmon, right bind = Super+Alt, Left, tagmon, left bind = Super+Alt, Right, tagmon, right # gaps bind = Alt+Shift, X, incgaps, 1 bind = Alt+Shift, Z, incgaps, -1 bind = Alt+Shift, R, togglegaps # movewin bind = Ctrl+Shift, Up, movewin, +0, -50 bind = Ctrl+Shift, Down, movewin, +0, +50 bind = Ctrl+Shift, Left, movewin, -50, +0 bind = Ctrl+Shift, Right, movewin, +50, +0 # resizewin bind = Ctrl+Alt, Up, resizewin, +0, -50 bind = Ctrl+Alt, Down, resizewin, +0, +50 bind = Ctrl+Alt, Left, resizewin, -50, +0 bind = Ctrl+Alt, Right, resizewin, +50, +0 # Audio control bind = none, XF86AudioRaiseVolume, spawn, wpctl set-volume @DEFAULT_SINK@ 5%+ bind = none, XF86AudioLowerVolume, spawn, wpctl set-volume @DEFAULT_SINK@ 5%- bind = none, XF86AudioMute, spawn, wpctl set-mute @DEFAULT_SINK@ toggle bind = none, XF86AudioMicMute, spawn, wpctl set-mute @DEFAULT_SOURCE@ toggle # `bind[flag]` can also be used in the following combinations: # `bindl`: apply bind while screen is locked # `binds`: use keysym instead of keycode for bind # `bindr`: use bind on keyrelease instead of keypress # `bindp`: pass key event to client # Example: # bindl = Super, l, quit # Flags can also be combined: # bindls = Super, s, quit # Binds can also use keycodes directly, such as `code:24`, etc. # ------------------------------------------------------------------------------ # Mouse & Layer Rules # ------------------------------------------------------------------------------ mousebind = Super, btn_left, moveresize, curmove mousebind = Super, btn_right, moveresize, curresize mousebind = NONE, btn_middle, toggleoverview, 1 # You can also use axis bindings for the mouse wheel: # axisbind = , , , axisbind = Super, UP, viewtoleft_have_client axisbind = Super, DOWN, viewtoright_have_client # Specialized animation rules for specific apps (e.g., Rofi) # You can use `mmsg -e` to get the last open layer name layerrule = animation_type_open:zoom, layer_name:rofi layerrule = animation_type_close:zoom, layer_name:rofi # ------------------------------------------------------------------------------ # Switch Bindings (For laptop lid open/close toggles) # ------------------------------------------------------------------------------ # To utilize switch bindings you need to disable `lidhandle` in /etc/systemd/logind.conf # HandleLidSwitch = ignore # HandleLidSwitchExternalPower = ignore # HandleLidSwitchDocked = ignore # Format: switchbind = , , # Examples: # switchbind = fold, spawn, swaylock -f -c 000000 # switchbind = unfold, spawn, wlr-dpms on # ------------------------------------------------------------------------------ # Gesture Bindings (For laptop/touchpad gestures) # ------------------------------------------------------------------------------ # Format: gesturebind = , , , , # Examples: # gesturebind = none, left, 3, focusdir, left # gesturebind = none, right, 3, focusdir, right # gesturebind = none, up, 3, focusdir, up # gesturebind = none, down, 3, focusdir, down # gesturebind = none, left, 4, viewtoleft_have_client # gesturebind = none, right, 4, viewtoright_have_client # gesturebind = none, up, 4, toggleoverview # gesturebind = none, down, 4, toggleoverview # ------------------------------------------------------------------------------ # Window Rules # ------------------------------------------------------------------------------ # https://github.com/DreamMaoMao/mangowc/wiki#window-rules # All parameters can be set in one line # If you set both `appid` and `title` the window will only follow the rules when they match each other # Examples: # windowrule = Parameter:Values, title:Values # windowrule = Parameter:Values, Parameter:Values, appid:Values, title:Values # windowrule = force_tearing:1, title:vkcube # Enable window tearing for specific application # ------------------------------------------------------------------------------ # Keymodes Example # ------------------------------------------------------------------------------ # Keymodes allow you to enter a "state" where keys perform different actions. # Useful for a "Resize Mode" or "Launcher Mode." # Set the keymode before the bind, then the bind will apply to the keymode. # If no keymode is explicitly set before a bind, then the default keymode is `keymode = default`. # Binds under `keymode = common` will be usable in ALL keymodes. # keymode = common # bind = Super, r, reload_config # Bind works in all keymodes # keymode = default # bind = Alt, Return, spawn, st # bind = Super, f, setkeymode, test # keymode = test # bind = Alt, Return, spawn, foot # bind = Super, f, setkeymode, default # ------------------------------------------------------------------------------ # MMSG IPC Examples # ------------------------------------------------------------------------------ # mangowc supports IPC via the `mmsg` command to control the compositor from # external scripts or the terminal. # Example Shell Commands: # mmsg -g: get message from mango # mmsg -d reload_config: hot reload the configuration file # mmsg -d quit: exit mango to tty or login screen. # For more information about mmsg visit: https://github.com/DreamMaoMao/mangowc/wiki/mango-ipc-(mmsg)