mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-03-14 05:34:21 -04:00
feat: add docs and sync with wiki & website
This commit is contained in:
parent
1fc89d01eb
commit
5906d9621e
28 changed files with 2594 additions and 0 deletions
99
docs/window-management/layouts.md
Normal file
99
docs/window-management/layouts.md
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
---
|
||||
title: Layouts
|
||||
description: Configure and switch between different window layouts.
|
||||
---
|
||||
|
||||
## Supported Layouts
|
||||
|
||||
mangowm supports a variety of layouts that can be assigned per tag.
|
||||
|
||||
- `tile`
|
||||
- `scroller`
|
||||
- `monocle`
|
||||
- `grid`
|
||||
- `deck`
|
||||
- `center_tile`
|
||||
- `vertical_tile`
|
||||
- `right_tile`
|
||||
- `vertical_scroller`
|
||||
- `vertical_grid`
|
||||
- `vertical_deck`
|
||||
- `tgmix`
|
||||
|
||||
---
|
||||
|
||||
## Scroller Layout
|
||||
|
||||
The Scroller layout positions windows in a scrollable strip, similar to PaperWM.
|
||||
|
||||
### Configuration
|
||||
|
||||
| Setting | Default | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `scroller_structs` | `20` | Width reserved on sides when window ratio is 1. |
|
||||
| `scroller_default_proportion` | `0.9` | Default width proportion for new windows. |
|
||||
| `scroller_focus_center` | `0` | Always center the focused window (1 = enable). |
|
||||
| `scroller_prefer_center` | `0` | Center focused window only if it was outside the view. |
|
||||
| `scroller_prefer_overspread` | `1` | Allow windows to overspread when there's extra space. |
|
||||
| `edge_scroller_pointer_focus` | `1` | Focus windows even if partially off-screen. |
|
||||
| `scroller_proportion_preset` | `0.5,0.8,1.0` | Presets for cycling window widths. |
|
||||
| `scroller_ignore_proportion_single` | `1` | Ignore proportion adjustments for single windows. |
|
||||
| `scroller_default_proportion_single` | `1.0` | Default proportion for single windows in scroller. **Requires `scroller_ignore_proportion_single=0` to take effect.** |
|
||||
|
||||
> **Warning:** `scroller_prefer_overspread`, `scroller_focus_center`, and `scroller_prefer_center` interact with each other. Their priority order is:
|
||||
>
|
||||
> **scroller_prefer_overspread > scroller_focus_center > scroller_prefer_center**
|
||||
>
|
||||
> To ensure a lower-priority setting takes effect, you must set all higher-priority options to `0`.
|
||||
|
||||
```ini
|
||||
# Example scroller configuration
|
||||
scroller_structs=20
|
||||
scroller_default_proportion=0.9
|
||||
scroller_focus_center=0
|
||||
scroller_prefer_center=0
|
||||
scroller_prefer_overspread=1
|
||||
edge_scroller_pointer_focus=1
|
||||
scroller_default_proportion_single=1.0
|
||||
scroller_proportion_preset=0.5,0.8,1.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Master-Stack Layouts
|
||||
|
||||
These settings apply to layouts like `tile` and `center_tile`.
|
||||
|
||||
| Setting | Default | Description |
|
||||
| :--- | :--- | :--- |
|
||||
| `new_is_master` | `1` | New windows become the master window. |
|
||||
| `default_mfact` | `0.55` | The split ratio between master and stack areas. |
|
||||
| `default_nmaster` | `1` | Number of allowed master windows. |
|
||||
| `smartgaps` | `0` | Disable gaps when only one window is present. |
|
||||
| `center_master_overspread` | `0` | (Center Tile) Master spreads across screen if no stack exists. |
|
||||
| `center_when_single_stack` | `1` | (Center Tile) Center master when only one stack window exists. |
|
||||
|
||||
```ini
|
||||
# Example master-stack configuration
|
||||
new_is_master=1
|
||||
smartgaps=0
|
||||
default_mfact=0.55
|
||||
default_nmaster=1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Switching Layouts
|
||||
|
||||
You can switch layouts dynamically or set a default for specific tags using [Tag Rules](/docs/window-management/rules#tag-rules).
|
||||
|
||||
**Keybinding Examples:**
|
||||
|
||||
```ini
|
||||
# Cycle through layouts
|
||||
bind=SUPER,n,switch_layout
|
||||
|
||||
# Set specific layout
|
||||
bind=SUPER,t,setlayout,tile
|
||||
bind=SUPER,s,setlayout,scroller
|
||||
```
|
||||
4
docs/window-management/meta.json
Normal file
4
docs/window-management/meta.json
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"title": "Window Management",
|
||||
"pages": ["layouts", "rules", "overview", "scratchpad"]
|
||||
}
|
||||
36
docs/window-management/overview.md
Normal file
36
docs/window-management/overview.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
title: Overview
|
||||
description: Configure the overview mode for window navigation.
|
||||
---
|
||||
|
||||
## Overview Settings
|
||||
|
||||
| Setting | Type | Default | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `hotarea_size` | integer | `10` | Hot area size in pixels. |
|
||||
| `enable_hotarea` | integer | `1` | Enable hot areas (0: disable, 1: enable). |
|
||||
| `hotarea_corner` | integer | `2` | Hot area corner (0: top-left, 1: top-right, 2: bottom-left, 3: bottom-right). |
|
||||
| `ov_tab_mode` | integer | `0` | Overview tab mode (0: disable, 1: enable). |
|
||||
| `overviewgappi` | integer | `5` | Inner gap in overview mode. |
|
||||
| `overviewgappo` | integer | `30` | Outer gap in overview mode. |
|
||||
|
||||
### Setting Descriptions
|
||||
|
||||
- `enable_hotarea` — Toggles overview when the cursor enters the configured corner.
|
||||
- `hotarea_size` — Size of the hot area trigger zone in pixels.
|
||||
- `hotarea_corner` — Corner that triggers the hot area (0: top-left, 1: top-right, 2: bottom-left, 3: bottom-right).
|
||||
- `ov_tab_mode` — Circles focus through windows in overview; releasing the mod key exits overview.
|
||||
|
||||
### Mouse Interaction in Overview
|
||||
|
||||
When in overview mode:
|
||||
|
||||
- **Left mouse button** — Jump to (focus) a window.
|
||||
- **Right mouse button** — Close a window.
|
||||
|
||||
To enable this behavior, add the following mouse bindings to your config:
|
||||
|
||||
```ini
|
||||
mousebind=NONE,btn_left,toggleoverview,1
|
||||
mousebind=NONE,btn_right,killclient,0
|
||||
```
|
||||
249
docs/window-management/rules.md
Normal file
249
docs/window-management/rules.md
Normal file
|
|
@ -0,0 +1,249 @@
|
|||
---
|
||||
title: Rules
|
||||
description: Define behavior for specific windows, tags, and layers.
|
||||
---
|
||||
|
||||
## Window Rules
|
||||
|
||||
Window rules allow you to set specific properties (floating, opacity, size, animations, etc.) for applications based on their `appid` or `title`. You can set all parameters in one line, and if you both set appid and title, the window will only follow the rules when appid and title both match.
|
||||
|
||||
**Format:**
|
||||
|
||||
```ini
|
||||
windowrule=Parameter:Values,title:Values
|
||||
windowrule=Parameter:Values,Parameter:Values,appid:Values,title:Values
|
||||
```
|
||||
|
||||
### State & Behavior Parameters
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `appid` | string | Any | Match by application ID, supports regex |
|
||||
| `title` | string | Any | Match by window title, supports regex |
|
||||
| `isfloating` | integer | `0` / `1` | Force floating state |
|
||||
| `isfullscreen` | integer | `0` / `1` | Force fullscreen state |
|
||||
| `isfakefullscreen` | integer | `0` / `1` | Force fake-fullscreen state (window stays constrained) |
|
||||
| `isglobal` | integer | `0` / `1` | Open as global window (sticky across tags) |
|
||||
| `isoverlay` | integer | `0` / `1` | Make it always in top layer |
|
||||
| `isopensilent` | integer | `0` / `1` | Open without focus |
|
||||
| `istagsilent` | integer | `0` / `1` | Don't focus if client is not in current view tag |
|
||||
| `force_maximize` | integer | `0` / `1` (default 1) | The state of client default to maximized |
|
||||
| `ignore_maximize` | integer | `0` / `1` (default 1) | Don't handle maximize request from client |
|
||||
| `ignore_minimize` | integer | `0` / `1` (default 1) | Don't handle minimize request from client |
|
||||
| `force_tiled_state` | integer | `0` / `1` | Deceive the window into thinking it is tiling, so it better adheres to assigned dimensions |
|
||||
| `noopenmaximized` | integer | `0` / `1` | Window does not open as maximized mode |
|
||||
| `single_scratchpad` | integer | `0` / `1` (default 1) | Only show one out of named scratchpads or the normal scratchpad |
|
||||
| `allow_shortcuts_inhibit` | integer | `0` / `1` (default 1) | Allow shortcuts to be inhibited by clients |
|
||||
| `indleinhibit_when_focus` | integer | `0` / `1` (default 0) | Automatically keep idle inhibit active when this window is focused |
|
||||
|
||||
### Geometry & Position
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `width` | integer | 0-9999 | Window width when it becomes a floating window |
|
||||
| `height` | integer | 0-9999 | Window height when it becomes a floating window |
|
||||
| `offsetx` | integer | -999-999 | X offset from center (%), 100 is the edge of screen with outer gap |
|
||||
| `offsety` | integer | -999-999 | Y offset from center (%), 100 is the edge of screen with outer gap |
|
||||
| `monitor` | string | Any | Assign to monitor by [monitor spec](/docs/configuration/monitors#monitor-spec-format) (name, make, model, or serial) |
|
||||
| `tags` | integer | 1-9 | Assign to specific tag |
|
||||
| `no_force_center` | integer | `0` / `1` | Window does not force center |
|
||||
| `isnosizehint` | integer | `0` / `1` | Don't use min size and max size for size hints |
|
||||
|
||||
### Visuals & Decoration
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `noblur` | integer | `0` / `1` | Window does not have blur effect |
|
||||
| `isnoborder` | integer | `0` / `1` | Remove window border |
|
||||
| `isnoshadow` | integer | `0` / `1` | Not apply shadow |
|
||||
| `isnoradius` | integer | `0` / `1` | Not apply corner radius |
|
||||
| `isnoanimation` | integer | `0` / `1` | Not apply animation |
|
||||
| `focused_opacity` | integer | `0` / `1` | Window focused opacity |
|
||||
| `unfocused_opacity` | integer | `0` / `1` | Window unfocused opacity |
|
||||
| `allow_csd` | integer | `0` / `1` | Allow client side decoration |
|
||||
|
||||
> **Tip:** For detailed visual effects configuration, see the [Window Effects](/docs/visuals/effects) page for blur, shadows, and opacity settings.
|
||||
|
||||
### Layout & Scroller
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `scroller_proportion` | float | 0.1-1.0 | Set scroller proportion |
|
||||
| `scroller_proportion_single` | float | 0.1-1.0 | Set scroller auto adjust proportion when it is single window |
|
||||
|
||||
> **Tip:** For comprehensive layout configuration, see the [Layouts](/docs/window-management/layouts) page for all layout options and detailed settings.
|
||||
|
||||
### Animation
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `animation_type_open` | string | zoom, slide, fade, none | Set open animation |
|
||||
| `animation_type_close` | string | zoom, slide, fade, none | Set close animation |
|
||||
| `nofadein` | integer | `0` / `1` | Window ignores fade-in animation |
|
||||
| `nofadeout` | integer | `0` / `1` | Window ignores fade-out animation |
|
||||
|
||||
> **Tip:** For detailed animation configuration, see the [Animations](/docs/visuals/animations) page for available types and settings.
|
||||
|
||||
### Terminal & Swallowing
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `isterm` | integer | `0` / `1` | A new GUI window will replace the isterm window when it is opened |
|
||||
| `noswallow` | integer | `0` / `1` | The window will not replace the isterm window |
|
||||
|
||||
### Global & Special Windows
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `globalkeybinding` | string | `[mod combination][-][key]` | Global keybinding (only works for Wayland apps) |
|
||||
| `isunglobal` | integer | `0` / `1` | Open as unmanaged global window (for desktop pets or camera windows) |
|
||||
| `isnamedscratchpad` | integer | `0` / `1` | 0: disable, 1: named scratchpad |
|
||||
|
||||
> **Tip:** For scratchpad usage, see the [Scratchpad](/docs/window-management/scratchpad) page for detailed configuration examples.
|
||||
|
||||
### Performance & Tearing
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `force_tearing` | integer | `0` / `1` | Set window to tearing state, refer to [Tearing](/docs/configuration/monitors#tearing-game-mode) |
|
||||
|
||||
### Examples
|
||||
|
||||
```ini
|
||||
# Set specific window size and position
|
||||
windowrule=width:1000,height:900,appid:yesplaymusic,title:Demons
|
||||
|
||||
# Global keybindings for OBS Studio
|
||||
windowrule=globalkeybinding:ctrl+alt-o,appid:com.obsproject.Studio
|
||||
windowrule=globalkeybinding:ctrl+alt+n,appid:com.obsproject.Studio
|
||||
windowrule=isopensilent:1,appid:com.obsproject.Studio
|
||||
|
||||
# Force tearing for games
|
||||
windowrule=force_tearing:1,title:vkcube
|
||||
windowrule=force_tearing:1,title:Counter-Strike 2
|
||||
|
||||
# Named scratchpad for file manager
|
||||
windowrule=isnamedscratchpad:1,width:1280,height:800,appid:st-yazi
|
||||
|
||||
# Custom opacity for specific apps
|
||||
windowrule=focused_opacity:0.8,appid:firefox
|
||||
windowrule=unfocused_opacity:0.6,appid:foot
|
||||
|
||||
# Disable blur for selection tools
|
||||
windowrule=noblur:1,appid:slurp
|
||||
|
||||
# Position windows relative to screen center
|
||||
windowrule=offsetx:20,offsety:-30,width:800,height:600,appid:alacritty
|
||||
|
||||
# Send to specific tag and monitor
|
||||
windowrule=tags:9,monitor:HDMI-A-1,appid:discord
|
||||
|
||||
# Terminal swallowing setup
|
||||
windowrule=isterm:1,appid:st
|
||||
windowrule=noswallow:1,appid:foot
|
||||
|
||||
# Disable client-side decorations
|
||||
windowrule=allow_csd:1,appid:firefox
|
||||
|
||||
# Unmanaged global window (desktop pets, camera)
|
||||
windowrule=isunglobal:1,appid:cheese
|
||||
|
||||
# Named scratchpad toggle
|
||||
bind=alt,h,toggle_named_scratchpad,st-yazi,none,st -c st-yazi -e yazi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Tag Rules
|
||||
|
||||
You can set all parameters in one line. If only `id` is set, the rule is followed when the id matches. If any of `monitor_name`, `monitor_make`, `monitor_model`, or `monitor_serial` are set, the rule is followed only if **all** of the set monitor fields match.
|
||||
|
||||
> **Warning:** Layouts set in tag rules have a higher priority than monitor rule layouts.
|
||||
|
||||
**Format:**
|
||||
|
||||
```ini
|
||||
tagrule=id:Values,Parameter:Values,Parameter:Values
|
||||
tagrule=id:Values,monitor_name:eDP-1,Parameter:Values,Parameter:Values
|
||||
tagrule=id:Values,monitor_make:xxx,monitor_model:xxx,Parameter:Values
|
||||
```
|
||||
|
||||
> **Tip:** See [Layouts](/docs/window-management/layouts#supported-layouts) for detailed descriptions of each layout type.
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `id` | integer | 0-9 | Match by tag id, 0 means the ~0 tag |
|
||||
| `monitor_name` | string | monitor name | Match by monitor name |
|
||||
| `monitor_make` | string | monitor make | Match by monitor manufacturer |
|
||||
| `monitor_model` | string | monitor model | Match by monitor model |
|
||||
| `monitor_serial` | string | monitor serial | Match by monitor serial number |
|
||||
| `layout_name` | string | layout name | Layout name to set |
|
||||
| `no_render_border` | integer | `0` / `1` | Disable render border |
|
||||
| `no_hide` | integer | `0` / `1` | Not hide even if the tag is empty |
|
||||
| `nmaster` | integer | 0, 99 | Number of master windows |
|
||||
| `mfact` | float | 0.1–0.9 | Master area factor |
|
||||
|
||||
### Examples
|
||||
|
||||
```ini
|
||||
# Set layout for specific tags
|
||||
tagrule=id:1,layout_name:scroller
|
||||
tagrule=id:2,layout_name:scroller
|
||||
|
||||
# Limit to specific monitor
|
||||
tagrule=id:1,monitor_name:eDP-1,layout_name:scroller
|
||||
tagrule=id:2,monitor_name:eDP-1,layout_name:scroller
|
||||
|
||||
# Persistent tags (1-4) with layout assignment
|
||||
tagrule=id:1,no_hide:1,layout_name:scroller
|
||||
tagrule=id:2,no_hide:1,layout_name:scroller
|
||||
tagrule=id:3,monitor_name:eDP-1,no_hide:1,layout_name:scroller
|
||||
tagrule=id:4,monitor_name:eDP-1,no_hide:1,layout_name:scroller
|
||||
|
||||
# Advanced tag configuration with master layout settings
|
||||
tagrule=id:5,layout_name:tile,nmaster:2,mfact:0.6
|
||||
tagrule=id:6,monitor_name:HDMI-A-1,layout_name:monocle,no_render_border:1
|
||||
```
|
||||
|
||||
> **Tip:** For Waybar configuration with persistent tags, see [Status Bar](/docs/visuals/status-bar) documentation.
|
||||
|
||||
---
|
||||
|
||||
## Layer Rules
|
||||
|
||||
You can set all parameters in one line. Target "layer shell" surfaces like status bars (`waybar`), launchers (`rofi`), or notification daemons.
|
||||
|
||||
**Format:**
|
||||
|
||||
```ini
|
||||
layerrule=layer_name:Values,Parameter:Values,Parameter:Values
|
||||
```
|
||||
|
||||
> **Tip:** You can use `mmsg -e` to get the last open layer name for debugging.
|
||||
|
||||
| Parameter | Type | Values | Description |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `layer_name` | string | layer name | Match name of layer, supports regex |
|
||||
| `animation_type_open` | string | slide, zoom, fade, none | Set open animation |
|
||||
| `animation_type_close` | string | slide, zoom, fade, none | Set close animation |
|
||||
| `noblur` | integer | `0` / `1` | Disable blur |
|
||||
| `noanim` | integer | `0` / `1` | Disable layer animation |
|
||||
| `noshadow` | integer | `0` / `1` | Disable layer shadow |
|
||||
|
||||
> **Tip:** For animation types, see [Animations](/docs/visuals/animations#animation-types). For visual effects, see [Window Effects](/docs/visuals/effects).
|
||||
|
||||
### Examples
|
||||
|
||||
```ini
|
||||
# No blur or animation for slurp selection layer (avoids occlusion and ghosting in screenshots)
|
||||
layerrule=noanim:1,noblur:1,layer_name:selection
|
||||
|
||||
# Zoom animation for Rofi with multiple parameters
|
||||
layerrule=animation_type_open:zoom,noanim:0,layer_name:rofi
|
||||
|
||||
# Disable animations and shadows for notification daemon
|
||||
layerrule=noanim:1,noshadow:1,layer_name:swaync
|
||||
|
||||
# Multiple effects for launcher
|
||||
layerrule=animation_type_open:slide,animation_type_close:fade,noblur:1,layer_name:wofi
|
||||
```
|
||||
73
docs/window-management/scratchpad.md
Normal file
73
docs/window-management/scratchpad.md
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
---
|
||||
title: Scratchpad
|
||||
description: Manage hidden "scratchpad" windows for quick access.
|
||||
---
|
||||
|
||||
mangowm supports two types of scratchpads: the standard pool (Sway-like) and named scratchpads.
|
||||
|
||||
## Standard Scratchpad
|
||||
|
||||
Any window can be sent to the "scratchpad" pile, which hides it. You can then cycle through them.
|
||||
|
||||
**Keybindings:**
|
||||
|
||||
```ini
|
||||
# Send current window to scratchpad
|
||||
bind=SUPER,i,minimized
|
||||
|
||||
# Toggle (show/hide) the scratchpad
|
||||
bind=ALT,z,toggle_scratchpad
|
||||
|
||||
# Retrieve window from scratchpad (restore)
|
||||
bind=SUPER+SHIFT,i,restore_minimized
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Named Scratchpad
|
||||
|
||||
Named scratchpads are bound to specific keys and applications. When triggered, mangowm will either launch the app (if not running) or toggle its visibility.
|
||||
|
||||
**1. Define the Window Rule**
|
||||
|
||||
You must identify the app using a unique `appid` or `title` and mark it as a named scratchpad. The application must support setting a custom appid or title at launch. Common examples:
|
||||
|
||||
- `st -c my-appid` — sets the appid
|
||||
- `kitty -T my-title` — sets the window title
|
||||
- `foot --app-id my-appid` — sets the appid
|
||||
|
||||
Use `none` as a placeholder when you only want to match by one field.
|
||||
|
||||
```ini
|
||||
# Match by appid
|
||||
windowrule=isnamedscratchpad:1,width:1280,height:800,appid:st-yazi
|
||||
|
||||
# Match by title
|
||||
windowrule=isnamedscratchpad:1,width:1000,height:700,title:kitty-scratch
|
||||
```
|
||||
|
||||
**2. Bind the Toggle Key**
|
||||
|
||||
Format: `bind=MOD,KEY,toggle_named_scratchpad,appid,title,command`
|
||||
|
||||
Use `none` for whichever field you are not matching on.
|
||||
|
||||
```ini
|
||||
# Match by appid: launch 'st' with class 'st-yazi' running 'yazi'
|
||||
bind=alt,h,toggle_named_scratchpad,st-yazi,none,st -c st-yazi -e yazi
|
||||
|
||||
# Match by title: launch 'kitty' with window title 'kitty-scratch'
|
||||
bind=alt,k,toggle_named_scratchpad,none,kitty-scratch,kitty -T kitty-scratch
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Appearance
|
||||
|
||||
You can customize the size of scratchpad windows relative to the screen.
|
||||
|
||||
```ini
|
||||
scratchpad_width_ratio=0.8
|
||||
scratchpad_height_ratio=0.9
|
||||
scratchpadcolor=0x516c93ff
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue