Merge remote-tracking branch 'origin/main' into copilot/create-simple-build-workflow

This commit is contained in:
copilot-swe-agent[bot] 2026-02-18 10:33:10 +00:00
commit e21ae7e013
4 changed files with 481 additions and 158 deletions

View file

@ -18,11 +18,15 @@ mango version:
wlroots version:
## Crash track
1.you need to build mango by enable asan flag.
```bash
meson build -Dprefix=/usr -Dasan=true
``
```
2.run mango in tty.
```bash
export ASAN_OPTIONS="detect_leaks=1:halt_on_error=0:log_path=/home/xxx/asan.log"
mango

File diff suppressed because it is too large Load diff

272
README.md
View file

@ -1,23 +1,29 @@
# Mango Wayland Compositor
<div>
<img src="https://github.com/DreamMaoMao/mangowc/blob/main/assets/mango-transparency-256.png" alt="MangoWC Logo" width="120"/>
</div>
This project's development is based on [dwl](https://codeberg.org/dwl/dwl/).
1. **Lightweight & Fast Build**
- _Mango_ is as lightweight as _dwl_, and can be built completely within a few seconds. Despite this, _Mango_ does not compromise on functionality.
- _Mango_ is as lightweight as _dwl_, and can be built completely within
a few seconds. Despite this, _Mango_ does not compromise on
functionality.
2. **Feature Highlights**
- In addition to basic WM functionality, Mango provides:
- Excellent xwayland support.
- Base tags not workspaces (supports separate window layouts for each tag)
- Smooth and customizable complete animations (window open/move/close, tag enter/leave,layer open/close/move)
- Base tags not workspaces (supports separate window layouts for each
tag)
- Smooth and customizable complete animations (window
open/move/close, tag enter/leave,layer open/close/move)
- Excellent input method support (text input v2/v3)
- Flexible window layouts with easy switching (scroller, master-stack, monocle,center-master, etc.)
- Rich window states (swallow, minimize, maximize, unglobal, global, fakefullscreen, overlay, etc.)
- Flexible window layouts with easy switching (scroller,
master-stack, monocle,center-master, etc.)
- Rich window states (swallow, minimize, maximize, unglobal, global,
fakefullscreen, overlay, etc.)
- Simple yet powerful external configuration(support shortcuts hot-reload)
- Sway-like scratchpad and named scratchpad
- Ipc support(get/send message from/to compositor by external program)
@ -25,17 +31,22 @@ This project's development is based on [dwl](https://codeberg.org/dwl/dwl/).
- Window effects from scenefx (blur, shadow, corner radius, opacity)
- Zero flickering - every frame is perfect.
https://github.com/user-attachments/assets/bb83004a-0563-4b48-ad89-6461a9b78b1f
<https://github.com/user-attachments/assets/bb83004a-0563-4b48-ad89-6461a9b78b1f>
# Quick Start Guide
## Quick Start Guide
## What is MangoWC?
MangoWC is a **Wayland compositor** - a program that manages windows and displays on modern Linux systems using the Wayland protocol. If you're familiar with window managers like i3, dwm, or awesome, MangoWC provides similar tiling window management functionality but for Wayland instead of X11.
MangoWC is a **Wayland compositor** - a program that manages windows and
displays on modern Linux systems using the Wayland protocol. If you're
familiar with window managers like i3, dwm, or awesome, MangoWC provides
similar tiling window management functionality but for Wayland instead of
X11.
## First Steps After Installation
1. **Copy the default configuration:**
```bash
mkdir -p ~/.config/mango
cp /usr/share/mango/config.conf ~/.config/mango/config.conf
@ -53,6 +64,7 @@ MangoWC is a **Wayland compositor** - a program that manages windows and display
- `Super + R` - Reload configuration (after making changes)
4. **Create an autostart script** (optional):
```bash
# Create ~/.config/mango/autostart.sh
#!/bin/bash
@ -66,6 +78,7 @@ MangoWC is a **Wayland compositor** - a program that manages windows and display
# Start notification daemon
swaync &
```
Make it executable: `chmod +x ~/.config/mango/autostart.sh`
## Key Concepts
@ -74,12 +87,16 @@ MangoWC is a **Wayland compositor** - a program that manages windows and display
Unlike traditional workspaces, **tags** are more flexible:
- **Workspaces**: A window belongs to one workspace. Switching workspaces shows a different set of windows.
- **Tags**: A window can have multiple tags. You can view multiple tags at once or filter to specific tags.
- **Workspaces**: A window belongs to one workspace. Switching workspaces
shows a different set of windows.
- **Tags**: A window can have multiple tags. You can view multiple tags at
once or filter to specific tags.
Think of tags as labels you can attach to windows. You can view windows with tag 1, or tag 2, or both tags 1 and 2 simultaneously.
Think of tags as labels you can attach to windows. You can view windows with
tag 1, or tag 2, or both tags 1 and 2 simultaneously.
**Default behavior:**
- `Ctrl + 1-9` - View tag 1-9
- `Alt + 1-9` - Move current window to tag 1-9
- Each tag can have its own layout (tile, scroller, grid, etc.)
@ -88,19 +105,23 @@ Think of tags as labels you can attach to windows. You can view windows with tag
MangoWC supports 9 different layouts:
| Layout | Description | Best For |
|--------|-------------|----------|
| **tile** | Master-stack tiling (left master, right stack) | General multitasking |
| **scroller** | Horizontal scrolling columns | Wide content, terminals |
| **monocle** | One window fullscreen at a time | Focus, presentations |
| **grid** | Windows arranged in grid | Many small windows |
| **deck** | Stack of windows, one visible | Cycling through tasks |
| **center_tile** | Master centered, stack on sides | Symmetrical layout |
| **vertical_tile** | Master top, stack bottom | Wide monitors |
| **vertical_scroller** | Vertical scrolling rows | Document review |
| **vertical_grid** | Vertical grid arrangement | Vertical content |
| Layout | Description | Best For |
|-----------------------|---------------------------------|-----------------------|
| **tile** | Master-stack tiling | General multitasking |
| | (left master, right stack) | |
| **scroller** | Horizontal scrolling columns | Wide content, |
| | | terminals |
| **monocle** | One window fullscreen at a time | Focus, |
| | | presentations |
| **grid** | Windows arranged in grid | Many small windows |
| **deck** | Stack of windows, one visible | Cycling through tasks |
| **center_tile** | Master centered, stack on sides | Symmetrical layout |
| **vertical_tile** | Master top, stack bottom | Wide monitors |
| **vertical_scroller** | Vertical scrolling rows | Document review |
| **vertical_grid** | Vertical grid arrangement | Vertical content |
**Switch layouts:**
- `Super + N` - Cycle through layouts for current tag
- Each tag can have its own default layout (set in `config.conf`)
@ -114,6 +135,7 @@ The **scratchpad** is a hidden workspace for temporary windows:
- Scratchpad windows float centered on screen
**Usage example:**
1. Open a terminal (`Alt + Return`)
2. Move it to scratchpad (`Alt + Z`)
3. It disappears
@ -161,32 +183,37 @@ Windows can have multiple states:
### Typical Workflow
1. **Open applications:**
```
```text
Alt + Space → Application launcher
Alt + Return → Terminal
```
2. **Navigate windows:**
```
```text
Alt + Arrow Keys → Focus window in direction
Super + Tab → Focus next window in stack
```
3. **Organize windows:**
```
```text
Super + Shift + Arrows → Swap window positions
Alt + \ → Toggle floating
Alt + 1-9 → Move to specific tag
```
4. **Adjust layout:**
```
```text
Super + N → Change layout
Alt + Shift + X/Z → Increase/decrease gaps
```
5. **Multi-monitor:**
```
```text
Alt + Shift + Left/Right → Focus other monitor
Super + Alt + Left/Right → Move window to other monitor
```
@ -194,16 +221,19 @@ Windows can have multiple states:
### Common Use Cases
**Web browsing + Terminal:**
- Open browser on tag 1, terminal on tag 2
- Use `Ctrl + 1` and `Ctrl + 2` to switch between them
**Development workflow:**
- Tag 1: Code editor (center_tile layout)
- Tag 2: Browser (monocle layout)
- Tag 3: Terminals (tile or scroller layout)
- Scratchpad: Calculator, notes
**Keeping a window visible everywhere:**
- Open music player or chat app
- Press `Super + G` to make it global
- It now appears on all tags
@ -250,6 +280,7 @@ mmsg -d spawn firefox
### Scripting Examples
**Auto-save workspace state:**
```bash
#!/bin/bash
# Save current tags to file
@ -257,6 +288,7 @@ mmsg -t > ~/mango-state.txt
```
**Tag-specific wallpapers:**
```bash
#!/bin/bash
# In a loop, change wallpaper based on active tag
@ -268,6 +300,7 @@ done
```
**Quick window layout toggle:**
```bash
#!/bin/bash
# Toggle between tile and monocle layouts
@ -284,18 +317,21 @@ fi
### MangoWC won't start
1. **Check dependencies:**
```bash
# Verify wlroots and scenefx are installed
pkg-config --modversion wlroots scenefx
```
2. **Check logs:**
```bash
# Run from terminal to see error messages
mango
```
3. **XWayland issues:**
```bash
# If X11 apps won't start, rebuild with XWayland
meson configure build -Dxwayland=enabled
@ -311,6 +347,7 @@ fi
### Keybindings not working
1. **Find correct key name:**
```bash
# Install wev to see key names
wev
@ -324,12 +361,14 @@ fi
### Applications not starting
1. **Missing required tools:**
```bash
# Install suggested applications
sudo pacman -S rofi foot waybar swaybg
```
2. **Check autostart script:**
```bash
# Test autostart manually
bash ~/.config/mango/autostart.sh
@ -338,6 +377,7 @@ fi
### Performance issues
1. **Disable effects:**
```conf
# In config.conf
animations=0
@ -346,6 +386,7 @@ fi
```
2. **Check GPU drivers:**
```bash
# Ensure proper graphics drivers are installed
glxinfo | grep "OpenGL"
@ -354,6 +395,7 @@ fi
### Screen sharing not working
Install portal packages:
```bash
sudo pacman -S xdg-desktop-portal xdg-desktop-portal-wlr
```
@ -365,12 +407,13 @@ sudo pacman -S xdg-desktop-portal xdg-desktop-portal-wlr
- **Website**: [mangowc.vercel.app/docs](https://mangowc.vercel.app/docs)
- **Issues**: [GitHub Issues](https://github.com/DreamMaoMao/mangowc/issues)
# Our discord
## Our discord
[mangowc](https://discord.gg/CPjbDxesh5)
---
# Installation
## Installation
## Dependencies
@ -393,13 +436,19 @@ sudo pacman -S xdg-desktop-portal xdg-desktop-portal-wlr
- libxcb
## Arch Linux
The package is in the Arch User Repository and is available for manual download [here](https://aur.archlinux.org/packages/mangowc-git) or through a AUR helper like yay:
The package is in the Arch User Repository and is available for manual
download from the
[AUR package page](https://aur.archlinux.org/packages/mangowc-git) or
through a AUR helper like yay:
```bash
yay -S mangowc-git
```
## Gentoo Linux
The package is in the community-maintained repository called GURU.
First, add GURU repository:
@ -418,6 +467,7 @@ emerge --ask --verbose gui-wm/mangowc
```
## Fedora Linux
The package is in the third-party Terra repository.
First, add the [Terra Repository](https://terra.fyralabs.com/).
@ -428,6 +478,7 @@ dnf install mangowc
```
## GuixSD
The package definition is described in the source repository.
First, add `mangowc` channel to `channels.scm` file:
@ -477,9 +528,11 @@ sudo ninja -C build install
## Suggested Tools
### Hybrid component
- [dms-shell](https://github.com/AvengeMedia/DankMaterialShell)
### Independent component
- Application launcher (rofi, bemenu, wmenu, fuzzel)
- Terminal emulator (foot, wezterm, alacritty, kitty, ghostty)
- Status bar (waybar, eww, quickshell, ags), waybar is preferred
@ -496,80 +549,84 @@ sudo ninja -C build install
### Essential Shortcuts
| Keybinding | Action | Description |
|------------|--------|-------------|
| `Alt + Return` | Open terminal | Launches foot terminal emulator |
| `Alt + Space` | Open launcher | Launches rofi application launcher |
| `Alt + Q` | Close window | Kill focused window |
| `Super + M` | Exit | Quit MangoWC |
| `Super + R` | Reload config | Apply config changes without restart |
| Keybinding | Action | Description |
|----------------|---------------|----------------------------------|
| `Alt + Return` | Open terminal | Launches foot terminal emulator |
| `Alt + Space` | Open launcher | Launches rofi application |
| | | launcher |
| `Alt + Q` | Close window | Kill focused window |
| `Super + M` | Exit | Quit MangoWC |
| `Super + R` | Reload config | Apply config changes without |
| | | restart |
### Window Management
| Keybinding | Action |
|------------|--------|
| `Alt + ←/→/↑/↓` | Focus window in direction |
| `Super + Tab` | Focus next window |
| `Super + Shift + ←/→/↑/↓` | Swap window with neighbor |
| `Alt + \` | Toggle floating/tiling |
| `Alt + F` | Toggle fullscreen |
| `Alt + Shift + F` | Toggle fake fullscreen |
| `Alt + A` | Toggle maximize |
| `Super + I` | Minimize window |
| `Super + Shift + I` | Restore minimized window |
| `Super + G` | Toggle global (visible all tags) |
| `Super + O` | Toggle overlay (always on top) |
| Keybinding | Action |
|---------------------------|-------------------------------------|
| `Alt + ←/→/↑/↓` | Focus window in direction |
| `Super + Tab` | Focus next window |
| `Super + Shift + ←/→/↑/↓` | Swap window with neighbor |
| `Alt + \` | Toggle floating/tiling |
| `Alt + F` | Toggle fullscreen |
| `Alt + Shift + F` | Toggle fake fullscreen |
| `Alt + A` | Toggle maximize |
| `Super + I` | Minimize window |
| `Super + Shift + I` | Restore minimized window |
| `Super + G` | Toggle global (visible all tags) |
| `Super + O` | Toggle overlay (always on top) |
### Tag (Workspace) Management
| Keybinding | Action |
|------------|--------|
| `Ctrl + 1-9` | Switch to tag 1-9 |
| `Alt + 1-9` | Move window to tag 1-9 (and follow) |
| `Super + ←/→` | Previous/next tag |
| `Ctrl + ←/→` | Previous/next tag with windows |
| `Ctrl + Super + ←/→` | Move window to previous/next tag |
| Keybinding | Action |
|---------------------|--------------------------------------|
| `Ctrl + 1-9` | Switch to tag 1-9 |
| `Alt + 1-9` | Move window to tag 1-9 (and follow) |
| `Super + ←/→` | Previous/next tag |
| `Ctrl + ←/→` | Previous/next tag with windows |
| `Ctrl + Super + ←/→`| Move window to previous/next tag |
### Layout Control
| Keybinding | Action |
|------------|--------|
| `Super + N` | Cycle through layouts |
| `Alt + E` | Set window to full width (scroller) |
| `Alt + X` | Cycle width presets (scroller) |
| `Alt + Shift + X/Z` | Increase/decrease gaps |
| `Alt + Shift + R` | Toggle gaps on/off |
| Keybinding | Action |
|---------------------|--------------------------------------|
| `Super + N` | Cycle through layouts |
| `Alt + E` | Set window to full width (scroller) |
| `Alt + X` | Cycle width presets (scroller) |
| `Alt + Shift + X/Z` | Increase/decrease gaps |
| `Alt + Shift + R` | Toggle gaps on/off |
### Special Features
| Keybinding | Action |
|------------|--------|
| `Alt + Tab` | Toggle overview mode |
| `Alt + Z` | Toggle scratchpad |
| `Super + Scroll Up/Down` | Switch tags with scroll wheel |
| Keybinding | Action |
|-------------------------|--------------------------|
| `Alt + Tab` | Toggle overview mode |
| `Alt + Z` | Toggle scratchpad |
| `Super + Scroll Up/Down`| Switch tags with scroll |
| | wheel |
### Multi-Monitor
| Keybinding | Action |
|------------|--------|
| `Alt + Shift + ←/→` | Focus adjacent monitor |
| `Super + Alt + ←/→` | Move window to adjacent monitor |
| Keybinding | Action |
|---------------------|----------------------------------|
| `Alt + Shift + ←/→` | Focus adjacent monitor |
| `Super + Alt + ←/→` | Move window to adjacent monitor |
### Floating Window Adjustment
| Keybinding | Action |
|------------|--------|
| `Ctrl + Shift + ←/→/↑/↓` | Move floating window by pixels |
| `Ctrl + Alt + ←/→/↑/↓` | Resize floating window by pixels |
| `Super + Left-drag` | Move floating window with mouse |
| `Super + Right-drag` | Resize floating window with mouse |
| `Middle-click` | Maximize window |
| Keybinding | Action |
|---------------------------|------------------------------------|
| `Ctrl + Shift + ←/→/↑/↓` | Move floating window by pixels |
| `Ctrl + Alt + ←/→/↑/↓` | Resize floating window by pixels |
| `Super + Left-drag` | Move floating window with mouse |
| `Super + Right-drag` | Resize floating window with mouse |
| `Middle-click` | Maximize window |
> **Tip**: Press `Super + R` after editing your config to reload without restarting!
## My Dotfiles
### Daily
- Dependencies
```bash
@ -577,26 +634,30 @@ yay -S rofi foot xdg-desktop-portal-wlr swaybg waybar wl-clip-persist cliphist w
```
### Dms
- Dependencies
```bash
yay -S foot xdg-desktop-portal-wlr swaybg wl-clip-persist cliphist wl-clipboard sway-audio-idle-inhibit-git brightnessctl grim slurp satty matugen-bin dms-shell-git
```
- use my dms config
```bash
git clone -b dms https://github.com/DreamMaoMao/mango-config.git ~/.config/mango
```
- use my daily config
```bash
git clone https://github.com/DreamMaoMao/mango-config.git ~/.config/mango
```
## Documentation
MangoWC comes with comprehensive documentation to help you get started and master the compositor:
MangoWC comes with comprehensive documentation to help you get started and
master the compositor:
### 📚 Documentation Files
@ -620,7 +681,8 @@ MangoWC comes with comprehensive documentation to help you get started and maste
### 🌐 Online Resources
- **[Wiki](https://github.com/DreamMaoMao/mango/wiki/)** - Comprehensive online documentation
- **[Wiki](https://github.com/DreamMaoMao/mango/wiki/)** - Comprehensive
online documentation
- **[Website](https://mangowc.vercel.app/docs)** - Web-based documentation
- **[Discord](https://discord.gg/CPjbDxesh5)** - Community support and discussions
@ -636,11 +698,14 @@ MangoWC comes with comprehensive documentation to help you get started and maste
---
# NixOS + Home-manager
## NixOS + Home-manager
The repo contains a flake that provides a NixOS module and a home-manager module for mango.
Use the NixOS module to install mango with other necessary components of a working Wayland environment.
Use the home-manager module to declare configuration and autostart for mango.
The repo contains a flake that provides a NixOS module and a home-manager
module for mango.
Use the NixOS module to install mango with other necessary components of a
working Wayland environment.
Use the home-manager module to declare configuration and autostart for
mango.
Here's an example of using the modules in a flake:
@ -712,39 +777,42 @@ Here's an example of using the modules in a flake:
}
```
# Packaging mango
## Packaging mango
To package mango for other distributions, you can check the reference setup for:
To package mango for other distributions, you can check the reference setup
for:
- [nix](https://github.com/DreamMaoMao/mangowc/blob/main/nix/default.nix)
- [arch](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mangowc-git).
- [gentoo](https://data.gpo.zugaina.org/guru/gui-wm/mangowc)
You might need to package `scenefx` for your distribution, check availability [here](https://github.com/wlrfx/scenefx.git).
You might need to package `scenefx` for your distribution, check availability
at the [scenefx repository](https://github.com/wlrfx/scenefx.git).
If you encounter build errors when packaging `mango`, feel free to create an issue and ask a question, but
Read The Friendly Manual on packaging software in your distribution first.
If you encounter build errors when packaging `mango`, feel free to create an
issue and ask a question, but Read The Friendly Manual on packaging software
in your distribution first.
# Thanks to These Reference Repositories
## Thanks to These Reference Repositories
- https://gitlab.freedesktop.org/wlroots/wlroots - Implementation of Wayland protocol
- <https://gitlab.freedesktop.org/wlroots/wlroots> - Implementation of Wayland protocol
- https://github.com/dqrk0jeste/owl - Basal window animation
- <https://github.com/dqrk0jeste/owl> - Basal window animation
- https://codeberg.org/dwl/dwl - Basal dwl feature
- <https://codeberg.org/dwl/dwl> - Basal dwl feature
- https://github.com/swaywm/sway - Sample of Wayland protocol
- <https://github.com/swaywm/sway> - Sample of Wayland protocol
- https://github.com/wlrfx/scenefx - Make it simple to add window effect.
- <https://github.com/wlrfx/scenefx> - Make it simple to add window effect.
## Sponsor
# Sponsor
At present, I can only accept sponsorship through an encrypted connection.
If you find this project helpful to you, you can offer sponsorship in the following ways.
If you find this project helpful to you, you can offer sponsorship in the
following ways.
<img width="650" height="870" alt="image" src="https://github.com/user-attachments/assets/8c860317-90d2-4071-971d-f1a92b674469" />
Thanks to the following friends for their sponsorship of this project
[@tonybanters](https://github.com/tonybanters)

176
USAGE.md
View file

@ -30,7 +30,7 @@ A practical guide to using MangoWC in your daily workflow.
These are the absolute minimum you need to be productive:
```
```text
Alt + Return → Terminal
Alt + Space → App launcher
Alt + Q → Close window
@ -47,9 +47,11 @@ Super + M → Exit MangoWC
### What Are Tags?
Tags are like workspaces, but more flexible. Think of them as labels you can apply to windows.
Tags are like workspaces, but more flexible. Think of them as labels you can
apply to windows.
**Key differences from workspaces:**
- A window can have multiple tags
- You can view multiple tags at once
- Each tag can have its own layout
@ -57,20 +59,23 @@ Tags are like workspaces, but more flexible. Think of them as labels you can app
### Basic Tag Usage
**Switch to a tag:**
```
```text
Ctrl + 1 → View tag 1
Ctrl + 2 → View tag 2
... and so on
```
**Move window to a tag:**
```
```text
Alt + 1 → Move current window to tag 1 (and switch to it)
Alt + 2 → Move current window to tag 2 (and switch to it)
```
**Navigate through tags:**
```
```text
Super + Left/Right → Previous/next tag
Ctrl + Left/Right → Previous/next tag that has windows
```
@ -78,11 +83,13 @@ Ctrl + Left/Right → Previous/next tag that has windows
### Advanced Tag Techniques
**View multiple tags simultaneously:**
1. Switch to tag 1: `Ctrl + 1`
2. Toggle tag 2 visibility: `Super + 2` (if configured)
3. Now you see windows from both tags
**Silent tag movement** (move window without following):
```conf
# In config.conf
bind=Alt+Shift,1,tagsilent,1
@ -91,7 +98,8 @@ bind=Alt+Shift,1,tagsilent,1
### Organizing Your Workflow with Tags
**Example organization:**
```
```text
Tag 1: Browsers (monocle layout)
Tag 2: Code editors (tile or center_tile layout)
Tag 3: Terminals (scroller layout)
@ -101,6 +109,7 @@ Tag 6-9: Project-specific
```
**Setting layouts per tag in config.conf:**
```conf
tagrule=id:1,layout_name:monocle
tagrule=id:2,layout_name:center_tile
@ -118,95 +127,113 @@ tagrule=id:5,layout_name:monocle
MangoWC includes 9 built-in layouts:
#### 1. Tile (Master-Stack)
```
```text
┌────────┬────┐
│ │ 1 │
│ Master ├────┤
│ │ 2 │
└────────┴────┘
```
**Best for:** General multitasking, coding with docs
**Switch to:** Cycle with `Super + N` (or add `bind=Super,t,setlayout,tile` to config)
#### 2. Scroller (Horizontal)
```
```text
┌───┬────┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │...
└───┴────┴───┴───┘
```
**Best for:** Terminals, wide content, many windows
**Switch to:** Cycle with `Super + N` (or add `bind=Super,s,setlayout,scroller` to config)
**Switch to:** Cycle with `Super + N` (or add
`bind=Super,s,setlayout,scroller` to config)
**Scroller-specific controls:**
- `Alt + E` - Set current window to full width
- `Alt + X` - Cycle through width presets (0.5, 0.8, 1.0)
#### 3. Monocle (Fullscreen Stack)
```
```text
┌──────────────┐
│ │
│ Window 1 │
│ (fullscrn) │
└──────────────┘
```
**Best for:** Focus work, browsing, media
**Switch to:** Cycle with `Super + N`
**Navigate:** Use `Super + Tab` to cycle through windows
#### 4. Grid
```
```text
┌─────┬─────┐
│ 1 │ 2 │
├─────┼─────┤
│ 3 │ 4 │
└─────┴─────┘
```
**Best for:** Viewing many windows simultaneously
**Switch to:** Cycle with `Super + N`
#### 5. Deck (Card Stack)
```
```text
┌──────────────┐
│ Window 1 │ ← Visible
│ (2, 3 hidden)│
└──────────────┘
```
**Best for:** Cycling through options
**Switch to:** Cycle with `Super + N`
#### 6. Center Tile
```
```text
┌──┬──────┬──┐
│1 │ │2 │
│ │Master│ │
│3 │ │4 │
└──┴──────┴──┘
```
**Best for:** Symmetrical workflow, coding
**Switch to:** Cycle with `Super + N`
#### 7. Vertical Tile
```
```text
┌──────────────┐
│ Master │
├──┬───┬───┬───┤
│1 │ 2 │ 3 │ 4 │
└──┴───┴───┴───┘
```
**Best for:** Ultra-wide monitors
**Switch to:** Cycle with `Super + N`
### Layout Controls
**Cycle through all layouts:**
```
```text
Super + N → Next layout
```
**Adjust layout parameters:**
For **tile/center_tile** layouts:
```
```text
Super + H → Decrease master size (add to config)
Super + L → Increase master size (add to config)
Super + Equal → More windows in master (add to config)
@ -214,6 +241,7 @@ Super + Minus → Fewer windows in master (add to config)
```
Add to config.conf:
```conf
bind=Super,h,setmfact,-0.05
bind=Super,l,setmfact,+0.05
@ -222,7 +250,8 @@ bind=Super,minus,incnmaster,-1
```
For **scroller** layout:
```
```text
Alt + E → Set window to full width
Alt + X → Cycle width presets
```
@ -234,40 +263,47 @@ Alt + X → Cycle width presets
### Focus Management
**Directional focus:**
```
```text
Alt + ←→↑↓ → Focus window in direction
```
**Stack focus:**
```
```text
Super + Tab → Next window in stack
Super + Shift + Tab → Previous window in stack
```
**Focus last window:**
```
```text
Super + ` → Focus previously focused window (add to config)
```
### Moving Windows
**Swap with neighbors:**
```
```text
Super + Shift + ←→↑↓ → Swap positions
```
**Move to master:**
```
```text
Super + Return → Move focused window to master position (add to config)
```
Add to config:
```conf
bind=Super,Return,zoom,
```
**Move between tags:**
```
```text
Alt + 1-9 → Move to tag (and follow)
Ctrl + Super + ←→ → Move to prev/next tag
```
@ -275,28 +311,33 @@ Ctrl + Super + ←→ → Move to prev/next tag
### Floating Windows
**Toggle floating:**
```
```text
Alt + \ → Toggle floating/tiling
```
**Move floating windows:**
```
```text
Ctrl + Shift + ←→↑↓ → Move by pixels
Super + Left-drag → Move with mouse
```
**Resize floating windows:**
```
```text
Ctrl + Alt + ←→↑↓ → Resize by pixels
Super + Right-drag → Resize with mouse
```
**Center floating window:**
```
```text
Super + C → Center window (add to config)
```
Add to config:
```conf
bind=Super,c,centerwin,
```
@ -304,7 +345,8 @@ bind=Super,c,centerwin,
### Window States
**Common states:**
```
```text
Alt + \ → Floating
Alt + F → Fullscreen
Alt + Shift + F → Fake fullscreen
@ -314,7 +356,8 @@ Super + O → Overlay (always on top)
```
**Minimize/Restore:**
```
```text
Super + I → Minimize window
Super + Shift + I → Restore minimized
```
@ -326,6 +369,7 @@ Super + Shift + I → Restore minimized
### What is the Scratchpad?
The scratchpad is a hidden workspace for temporary windows. It's perfect for:
- Calculator
- Music player
- Notes/Todo list
@ -335,20 +379,23 @@ The scratchpad is a hidden workspace for temporary windows. It's perfect for:
### Basic Scratchpad Usage
1. **Open an application** (e.g., terminal with calculator)
```bash
Alt + Return
# Then run: qalc (or any calculator)
```
2. **Move to scratchpad**
```
```text
Alt + Z
```
3. **Window disappears** - it's now in the scratchpad
4. **Toggle scratchpad** to show/hide
```
```text
Alt + Z → Shows scratchpad over current work
Alt + Z → Hides it again
```
@ -358,6 +405,7 @@ The scratchpad is a hidden workspace for temporary windows. It's perfect for:
You can have multiple named scratchpads:
**Setup in config.conf:**
```conf
bind=Super,p,toggle_named_scratchpad,music
bind=Super,n,toggle_named_scratchpad,notes
@ -365,6 +413,7 @@ bind=Super,c,toggle_named_scratchpad,calc
```
**Usage:**
1. Open application (e.g., spotify)
2. Press `Super + P` - assigns it to "music" scratchpad
3. Press `Super + P` again - shows/hides music scratchpad
@ -387,6 +436,7 @@ mmsg -d toggle_scratchpad
```
Bind it:
```conf
bind=Super,equal,spawn_shell,~/.config/mango/scripts/scratchpad-calc.sh
```
@ -394,6 +444,7 @@ bind=Super,equal,spawn_shell,~/.config/mango/scripts/scratchpad-calc.sh
**Customize scratchpad appearance:**
In config.conf:
```conf
scratchpad_width_ratio=0.8 # 80% of screen width
scratchpad_height_ratio=0.9 # 90% of screen height
@ -406,16 +457,19 @@ scratchpadcolor=0x516c93ff # Border color for scratchpad windows
### What is Overview?
Overview mode shows all windows at once, similar to GNOME's Activities or macOS Mission Control.
Overview mode shows all windows at once, similar to GNOME's Activities or
macOS Mission Control.
### Using Overview
**Toggle overview:**
```
```text
Alt + Tab → Toggle overview mode
```
**In overview mode:**
- Click any window to focus it
- Drag windows to rearrange
- Windows are organized visually
@ -425,6 +479,7 @@ Alt + Tab → Toggle overview mode
Move your mouse cursor to the top edge of the screen to automatically trigger overview.
**Configure hotarea:**
```conf
# In config.conf
hotarea_size=10 # Pixels from edge to trigger
@ -447,28 +502,33 @@ overviewgappo=30 # Gap from screen edges
### Basic Multi-Monitor Commands
**Focus different monitor:**
```
```text
Alt + Shift + ←→ → Focus adjacent monitor
```
**Move window to other monitor:**
```
```text
Super + Alt + ←→ → Move window to adjacent monitor
```
### Multi-Monitor Strategies
**Strategy 1: Dedicated monitors per task**
#### Strategy 1: Dedicated monitors per task
- Monitor 1: Development (Tag 1-3)
- Monitor 2: Communication (Tag 4-6)
- Monitor 3: Media/Reference (Tag 7-9)
**Strategy 2: Mirror similar tags**
#### Strategy 2: Mirror similar tags
- Both monitors show same tags
- Each monitor has different layouts
- Use global windows to span both
**Strategy 3: Independent workspaces**
#### Strategy 3: Independent workspaces
- Each monitor is independent
- Use monitor focus shortcuts frequently
- Keep related work on same monitor
@ -478,16 +538,19 @@ Super + Alt + ←→ → Move window to adjacent monitor
MangoWC auto-detects monitors. For custom setup:
**Disable a monitor:**
```bash
mmsg -d disable_monitor HDMI-A-1
```
**Enable a monitor:**
```bash
mmsg -d enable_monitor HDMI-A-1
```
**Find monitor names:**
```bash
mmsg -o
```
@ -565,7 +628,8 @@ unfocused_opacity=0.95 # Unfocused window opacity
Create `~/.config/mango/scripts/` directory:
**Example: Screenshot script**
#### Example: Screenshot script
```bash
#!/bin/bash
# ~/.config/mango/scripts/screenshot.sh
@ -574,11 +638,13 @@ grim -g "$(slurp)" - | satty --filename - --fullscreen
```
**Bind it:**
```conf
bind=Print,none,spawn_shell,~/.config/mango/scripts/screenshot.sh
```
**Example: Volume control**
#### Example: Volume control
```bash
#!/bin/bash
# ~/.config/mango/scripts/volume.sh
@ -591,6 +657,7 @@ esac
```
**Bind it:**
```conf
bind=NONE,XF86AudioRaiseVolume,spawn_shell,~/.config/mango/scripts/volume.sh up
bind=NONE,XF86AudioLowerVolume,spawn_shell,~/.config/mango/scripts/volume.sh down
@ -604,7 +671,8 @@ bind=NONE,XF86AudioMute,spawn_shell,~/.config/mango/scripts/volume.sh mute
### Workflow 1: Web Development
**Setup:**
```
```text
Tag 1: Browser (monocle) → Testing
Tag 2: Code editor (center_tile) → Development
Tag 3: Terminals (scroller) → Commands
@ -612,6 +680,7 @@ Scratchpad: Documentation, notes
```
**Workflow:**
1. Start on Tag 2, write code
2. `Ctrl + 1` → View in browser
3. `Ctrl + 3` → Run build/dev server
@ -621,7 +690,8 @@ Scratchpad: Documentation, notes
### Workflow 2: Writing and Research
**Setup:**
```
```text
Tag 1: Writing app (monocle)
Tag 2: Research browser (tile)
Tag 3: Reference PDFs (grid)
@ -629,6 +699,7 @@ Scratchpad: Notes, citations
```
**Workflow:**
1. Research on Tags 2-3
2. `Ctrl + 1` → Switch to writing
3. `Super + G` on notes window → Make it global
@ -637,7 +708,8 @@ Scratchpad: Notes, citations
### Workflow 3: Communication and Work
**Setup:**
```
```text
Tag 1: Email (monocle)
Tag 2: Slack/Discord (tile)
Tag 3: Work documents (tile)
@ -646,6 +718,7 @@ Global: Music player
```
**Workflow:**
1. Open music player → `Super + G` (make global)
2. Start each app on its tag
3. Use `Ctrl + Left/Right` to jump between active tags
@ -654,7 +727,8 @@ Global: Music player
### Workflow 4: System Administration
**Setup:**
```
```text
Tag 1: Terminals (scroller) → Multiple SSH sessions
Tag 2: Monitoring (grid) → htop, iotop, etc.
Tag 3: Browser (monocle) → Documentation
@ -662,6 +736,7 @@ Scratchpad: Calculator, quick commands
```
**Workflow:**
1. Open terminals in scroller layout
2. `Alt + X` to adjust column widths
3. `Ctrl + 2` for monitoring overview
@ -670,13 +745,15 @@ Scratchpad: Calculator, quick commands
### Workflow 5: Video/Audio Editing
**Setup:**
```
```text
Tag 1: Editor (monocle) → Full-screen editing
Tag 2: File browser (tile) → Asset management
Tag 3: Preview (monocle) → Testing output
```
**Workflow:**
1. Edit on Tag 1 in monocle (maximum space)
2. `Ctrl + 2` → Grab assets
3. `Ctrl + 3` → Preview output
@ -687,7 +764,8 @@ Tag 3: Preview (monocle) → Testing output
## Quick Reference Card
### Essential Shortcuts
```
```text
Alt + Return Terminal
Alt + Space Launcher
Alt + Q Close window
@ -710,7 +788,8 @@ Super + G Global window
```
### When Things Go Wrong
```
```text
Super + R Reload config (fixes most issues)
Super + M Exit MangoWC
Ctrl + Alt + F2 Switch to TTY (if GUI breaks)
@ -729,6 +808,7 @@ Now that you understand the basics:
5. **Join the community** - [Discord](https://discord.gg/CPjbDxesh5)
**Additional Resources:**
- [COMMANDS.md](COMMANDS.md) - Complete command reference
- [config.conf](config.conf) - Commented configuration file
- [MangoWC Wiki](https://github.com/DreamMaoMao/mango/wiki/) - Comprehensive documentation
@ -736,4 +816,4 @@ Now that you understand the basics:
---
**Happy tiling! 🥭**
Happy tiling! 🥭