2026-02-20 21:20:04 -03:00
# DO NOT USE! THIS IS JUST A LEARNING REPO AND NOT SUPPORTED IN ANY WAY!
2025-12-27 12:07:41 +08:00
# Mango Wayland Compositor
2026-02-18 10:17:34 +00:00
2026-02-18 12:53:56 +00:00

2025-07-30 21:01:09 +08:00
2025-06-22 03:53:43 -07:00
This project's development is based on [dwl ](https://codeberg.org/dwl/dwl/ ).
2025-05-07 11:12:20 +08:00
2025-06-25 18:17:44 +03:00
1. **Lightweight & Fast Build**
2025-05-07 11:12:20 +08:00
2026-02-18 10:27:10 +00:00
- _Mango_ is as lightweight as _dwl_ , and can be built completely within
a few seconds. Despite this, _Mango_ does not compromise on
functionality.
2025-06-25 18:17:44 +03:00
2. **Feature Highlights**
2025-07-30 14:54:59 +08:00
- In addition to basic WM functionality, Mango provides:
2025-06-29 16:09:48 +08:00
- Excellent xwayland support.
2026-02-18 10:27:10 +00:00
- 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)
2025-06-22 03:53:43 -07:00
- Excellent input method support (text input v2/v3)
2026-02-18 10:27:10 +00:00
- Flexible window layouts with easy switching (scroller,
master-stack, monocle,center-master, etc.)
- Rich window states (swallow, minimize, maximize, unglobal, global,
fakefullscreen, overlay, etc.)
2025-09-22 22:12:55 +08:00
- Simple yet powerful external configuration(support shortcuts hot-reload)
2025-06-22 03:53:43 -07:00
- Sway-like scratchpad and named scratchpad
2025-09-06 18:49:00 +08:00
- Ipc support(get/send message from/to compositor by external program)
2025-06-22 03:53:43 -07:00
- Hycov-like overview
2025-07-01 04:05:36 -04:00
- Window effects from scenefx (blur, shadow, corner radius, opacity)
2026-02-15 16:43:02 +08:00
- Zero flickering - every frame is perfect.
2025-05-07 11:12:20 +08:00
2026-02-08 18:17:55 +08:00
https://github.com/user-attachments/assets/bb83004a-0563-4b48-ad89-6461a9b78b1f
2025-07-12 21:01:29 +08:00
2026-02-22 11:11:07 +08:00
# Mango's Vision
**Mango's primary goal is stability**: After months of testing and development—and aside from a few lingering GPU compatibility issues—it should now be stable enough. I don't plan on making many breaking changes.
**Mango's preference is practicality**: I tend to add features that genuinely help with daily workflows—things that make our work more convenient.
**Mango won't cater to every user preference**: For niche feature requests, I'll take a wait-and-see approach. I'll only consider adding them if they get a significant number of upvotes.
2025-10-26 18:10:48 +08:00
# Our discord
2026-03-01 11:21:24 +08:00
[mangowm ](https://discord.gg/CPjbDxesh5 )
2025-10-26 18:10:48 +08:00
2025-06-20 10:52:41 +08:00
# Supported layouts
2025-08-15 13:26:21 +08:00
- tile
- scroller
- monocle
- grid
- deck
2025-09-26 21:30:45 +08:00
- center_tile
2025-08-15 13:26:21 +08:00
- vertical_tile
2025-10-11 16:27:54 +08:00
- vertical_grid
2025-08-15 13:26:21 +08:00
- vertical_scroller
2026-02-22 11:11:07 +08:00
- tgmix
2025-06-22 03:53:43 -07:00
# Installation
2025-03-24 12:34:17 +08:00
2026-03-01 11:21:24 +08:00
[](https://repology.org/project/mangowm/versions)
2026-02-19 15:02:03 +01:00
2025-06-22 03:53:43 -07:00
## Dependencies
2025-03-15 10:26:11 +08:00
2025-06-25 18:17:44 +03:00
- wayland
- wayland-protocols
- libinput
- libdrm
- libxkbcommon
- pixman
- libdisplay-info
- libliftoff
- hwdata
- seatd
- pcre2
2025-12-03 23:19:58 +08:00
- xorg-xwayland
- libxcb
2025-03-24 12:34:17 +08:00
2025-06-22 03:53:43 -07:00
## Arch Linux
2026-02-18 10:17:34 +00:00
2026-02-18 10:27:10 +00:00
The package is in the Arch User Repository and is available for manual
download from the
2026-03-01 07:30:29 -03:00
[AUR package page ](https://aur.archlinux.org/packages/mangowm-git ) or
2026-02-18 10:27:10 +00:00
through a AUR helper like yay:
2026-02-18 10:17:34 +00:00
2025-04-13 09:05:09 +08:00
```bash
2026-03-01 11:21:24 +08:00
yay -S mangowm-git
2025-03-24 12:34:17 +08:00
2025-02-03 23:18:47 +08:00
```
2025-07-08 07:49:50 +03:00
## Gentoo Linux
2026-02-18 10:17:34 +00:00
2025-07-08 07:49:50 +03:00
The package is in the community-maintained repository called GURU.
First, add GURU repository:
```bash
emerge --ask --verbose eselect-repository
eselect repository enable guru
emerge --sync guru
```
2026-03-01 11:21:24 +08:00
Then, add `gui-libs/scenefx` and `gui-wm/mangowm` to the `package.accept_keywords` .
2025-07-08 07:49:50 +03:00
Finally, install the package:
```bash
2026-03-01 11:21:24 +08:00
emerge --ask --verbose gui-wm/mangowm
2025-07-08 07:49:50 +03:00
```
2025-12-06 14:50:54 -06:00
## Fedora Linux
2026-02-18 10:17:34 +00:00
2025-12-06 14:50:54 -06:00
The package is in the third-party Terra repository.
First, add the [Terra Repository ](https://terra.fyralabs.com/ ).
Then, install the package:
```bash
2026-03-01 11:21:24 +08:00
dnf install mangowm
2025-12-06 14:50:54 -06:00
```
2026-02-20 19:56:26 +01:00
## Guix System
2026-02-15 16:50:07 +03:00
The package definition is described in the source repository.
2026-03-01 11:21:24 +08:00
First, add `mangowm` channel to `channels.scm` file:
2026-02-15 16:50:07 +03:00
```scheme
;; In $HOME/.config/guix/channels.scm
(cons (channel
2026-03-01 11:21:24 +08:00
(name 'mangowm)
(url "https://github.com/mangowm/mango.git")
2026-02-20 19:56:26 +01:00
(branch "main"))
2026-02-15 16:50:07 +03:00
... ;; Your other channels
%default-channels)
```
Then, run `guix pull` and after update you can either run
2026-03-01 11:21:24 +08:00
`guix install mangowm` or add it to your configuration via:
2026-02-15 16:50:07 +03:00
```scheme
2026-03-01 11:21:24 +08:00
(use-modules (mangowm)) ;; Add mangowm module
2026-02-15 16:50:07 +03:00
2026-03-01 11:21:24 +08:00
;; Add mangowm to packages list
2026-02-20 19:56:26 +01:00
(packages (cons*
2026-03-01 11:21:24 +08:00
mangowm-git
2026-02-15 16:50:07 +03:00
... ;; Other packages you specified
%base-packages))
```
And then rebuild your system.
2025-06-22 03:53:43 -07:00
## Other
2025-06-25 18:17:44 +03:00
2025-04-13 09:05:09 +08:00
```bash
2025-11-10 14:30:20 +08:00
git clone -b 0.19.2 https://gitlab.freedesktop.org/wlroots/wlroots.git
2025-06-08 10:38:51 +08:00
cd wlroots
meson build -Dprefix=/usr
sudo ninja -C build install
2025-11-19 12:45:04 +08:00
git clone -b 0.4.1 https://github.com/wlrfx/scenefx.git
2025-06-24 14:55:18 +08:00
cd scenefx
meson build -Dprefix=/usr
sudo ninja -C build install
2026-03-01 11:21:24 +08:00
git clone https://github.com/mangowm/mango.git
cd mangowm
2025-02-03 23:18:47 +08:00
meson build -Dprefix=/usr
sudo ninja -C build install
2025-03-03 08:33:19 +08:00
```
2025-02-20 08:47:56 +08:00
2025-06-22 03:53:43 -07:00
## Suggested Tools
2025-03-24 12:34:17 +08:00
2025-11-10 14:30:20 +08:00
### Hybrid component
2026-02-18 10:17:34 +00:00
2025-10-31 10:42:38 +08:00
- [dms-shell ](https://github.com/AvengeMedia/DankMaterialShell )
### Independent component
2026-02-18 10:17:34 +00:00
2025-09-08 10:20:30 +08:00
- Application launcher (rofi, bemenu, wmenu, fuzzel)
2025-06-25 18:17:44 +03:00
- Terminal emulator (foot, wezterm, alacritty, kitty, ghostty)
- Status bar (waybar, eww, quickshell, ags), waybar is preferred
- Wallpaper setup (swww, swaybg)
2025-07-12 21:01:29 +08:00
- Notification daemon (swaync, dunst,mako)
2025-06-25 18:17:44 +03:00
- Desktop portal (xdg-desktop-portal, xdg-desktop-portal-wlr, xdg-desktop-portal-gtk)
- Clipboard (wl-clipboard, wl-clip-persist, cliphist)
- Gamma control/night light (wlsunset, gammastep)
- Miscellaneous (xfce-polkit, wlogout)
2025-03-11 09:44:00 +08:00
2026-02-18 09:01:16 +00:00
## Default Keybindings Reference
2025-06-25 18:17:44 +03:00
2026-02-18 09:01:16 +00:00
> **Note**: All keybindings can be customized in `~/.config/mango/config.conf`
### Essential Shortcuts
2026-02-18 10:27:10 +00:00
| 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 |
2026-02-18 09:01:16 +00:00
### Window Management
2026-02-18 10:27:10 +00:00
| 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) |
2026-02-18 09:01:16 +00:00
### Tag (Workspace) Management
2026-02-18 10:27:10 +00:00
| 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 |
2026-02-18 09:01:16 +00:00
### Layout Control
2026-02-18 10:27:10 +00:00
| 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 |
2026-02-18 09:01:16 +00:00
### Special Features
2026-02-18 10:27:10 +00:00
| Keybinding | Action |
|-------------------------|--------------------------|
| `Alt + Tab` | Toggle overview mode |
| `Alt + Z` | Toggle scratchpad |
| `Super + Scroll Up/Down` | Switch tags with scroll |
| | wheel |
2026-02-18 09:01:16 +00:00
### Multi-Monitor
2026-02-18 10:27:10 +00:00
| Keybinding | Action |
|---------------------|----------------------------------|
| `Alt + Shift + ←/→` | Focus adjacent monitor |
| `Super + Alt + ←/→` | Move window to adjacent monitor |
2026-02-18 09:01:16 +00:00
### Floating Window Adjustment
2026-02-18 10:27:10 +00:00
| 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 |
2026-02-18 09:01:16 +00:00
> **Tip**: Press `Super + R` after editing your config to reload without restarting!
2025-03-24 12:34:17 +08:00
2025-06-22 03:53:43 -07:00
## My Dotfiles
2025-06-25 18:17:44 +03:00
2025-10-31 10:42:38 +08:00
### Daily
2026-02-18 10:17:34 +00:00
2025-06-22 03:53:43 -07:00
- Dependencies
2025-06-25 18:17:44 +03:00
2025-06-24 16:22:25 +08:00
```bash
2026-02-18 12:53:56 +00:00
yay -S rofi foot xdg-desktop-portal-wlr swaybg waybar wl-clip-persist \
cliphist wl-clipboard wlsunset xfce-polkit swaync pamixer wlr-dpms \
sway-audio-idle-inhibit-git swayidle dimland-git brightnessctl swayosd \
wlr-randr grim slurp satty swaylock-effects-git wlogout sox
2025-04-29 21:20:37 +08:00
```
2025-06-25 18:17:44 +03:00
2025-10-31 10:42:38 +08:00
### Dms
2026-02-18 10:17:34 +00:00
2025-10-31 10:42:38 +08:00
- Dependencies
2026-02-18 10:17:34 +00:00
2025-10-31 10:42:38 +08:00
```bash
2026-02-18 12:53:56 +00:00
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
2025-10-31 10:42:38 +08:00
```
2026-02-18 10:17:34 +00:00
2025-10-31 10:42:38 +08:00
- use my dms config
```bash
git clone -b dms https://github.com/DreamMaoMao/mango-config.git ~/.config/mango
```
2026-02-18 10:17:34 +00:00
2025-10-31 10:42:38 +08:00
- use my daily config
2025-06-25 18:17:44 +03:00
2025-06-24 16:22:25 +08:00
```bash
2025-07-30 14:54:59 +08:00
git clone https://github.com/DreamMaoMao/mango-config.git ~/.config/mango
2025-04-29 21:20:37 +08:00
```
2025-06-25 18:17:44 +03:00
2026-02-18 09:01:48 +00:00
## Documentation
2025-02-23 19:55:42 +08:00
2026-02-18 10:27:10 +00:00
MangoWC comes with comprehensive documentation to help you get started and
master the compositor:
2025-02-23 19:55:42 +08:00
2026-02-18 09:01:48 +00:00
### 📚 Documentation Files
2025-12-08 09:42:18 +08:00
2026-02-18 09:01:48 +00:00
- **[USAGE.md ](USAGE.md )** - Practical guide for day-to-day usage
- Common workflows and usage patterns
- Layout explanations with diagrams
- Scratchpad and overview mode guides
- Multi-monitor workflows
- Customization tips and examples
2025-03-07 20:57:34 +08:00
2026-02-18 09:01:48 +00:00
- **[COMMANDS.md ](COMMANDS.md )** - Complete command reference
- All available commands with descriptions
- Parameter documentation
- Keybinding examples
- IPC/mmsg usage and scripting examples
2025-03-24 12:34:17 +08:00
2026-02-18 09:01:48 +00:00
- **[config.conf ](config.conf )** - Annotated configuration file
- All settings explained with inline comments
- Example configurations
- Default keybindings
### 🌐 Online Resources
2026-02-18 10:27:10 +00:00
- **[Wiki ](https://github.com/DreamMaoMao/mango/wiki/ )** - Comprehensive
online documentation
2026-02-18 09:01:48 +00:00
- **[Website ](https://mangowc.vercel.app/docs )** - Web-based documentation
- **[Discord ](https://discord.gg/CPjbDxesh5 )** - Community support and discussions
### 📖 Quick Links by Topic
- **Getting Started:** See [Quick Start Guide ](#quick-start-guide ) above
- **Understanding Concepts:** [Key Concepts ](#key-concepts ) section above
- **Daily Usage:** [USAGE.md ](USAGE.md ) for workflows and patterns
- **Command Reference:** [COMMANDS.md ](COMMANDS.md ) for all commands
- **Configuration:** [config.conf ](config.conf ) with inline documentation
- **Troubleshooting:** [Troubleshooting ](#troubleshooting ) section above
- **IPC/Scripting:** [IPC Control with mmsg ](#ipc-control-with-mmsg ) section above
---
2025-03-07 20:57:34 +08:00
2026-02-18 10:27:10 +00:00
## NixOS + Home-manager
2025-03-24 12:34:17 +08:00
2026-02-18 10:27:10 +00:00
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.
2025-03-24 12:50:27 +08:00
Here's an example of using the modules in a flake:
2025-02-25 22:05:29 +08:00
```nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-parts.url = "github:hercules-ci/flake-parts";
2025-11-11 17:03:43 +01:00
mango = {
2026-03-01 11:21:24 +08:00
url = "github:mangowm/mango";
2025-11-11 17:03:43 +01:00
inputs.nixpkgs.follows = "nixpkgs";
};
2025-02-25 22:05:29 +08:00
};
outputs =
inputs@{ self, flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
debug = true;
systems = [ "x86_64-linux" ];
flake = {
nixosConfigurations = {
hostname = inputs.nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
inputs.home-manager.nixosModules.home-manager
2025-03-24 12:50:27 +08:00
2025-07-30 14:54:59 +08:00
# Add mango nixos module
inputs.mango.nixosModules.mango
2025-03-24 12:50:27 +08:00
{
2025-07-30 14:54:59 +08:00
programs.mango.enable = true;
2025-03-24 12:50:27 +08:00
}
2025-02-25 22:05:29 +08:00
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "backup";
users."username".imports =
[
(
{ ... }:
{
2025-07-30 14:54:59 +08:00
wayland.windowManager.mango = {
2025-02-25 22:05:29 +08:00
enable = true;
settings = ''
# see config.conf
'';
autostart_sh = ''
# see autostart.sh
2025-02-25 22:37:34 +08:00
# Note: here no need to add shebang
2025-02-25 22:05:29 +08:00
'';
};
}
)
]
++ [
2025-07-30 14:54:59 +08:00
# Add mango hm module
inputs.mango.hmModules.mango
2025-02-25 22:05:29 +08:00
];
};
}
];
};
};
};
};
}
```
2026-02-18 10:27:10 +00:00
## Packaging mango
2025-06-25 18:17:44 +03:00
2026-02-18 10:27:10 +00:00
To package mango for other distributions, you can check the reference setup
for:
2025-06-25 18:17:44 +03:00
2026-03-01 11:21:24 +08:00
- [nix ](https://github.com/mangowm/mango/blob/main/nix/default.nix )
- [arch ](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mangowm-git ).
- [gentoo ](https://data.gpo.zugaina.org/guru/gui-wm/mangowm )
2025-06-25 18:17:44 +03:00
2026-02-18 10:27:10 +00:00
You might need to package `scenefx` for your distribution, check availability
at the [scenefx repository ](https://github.com/wlrfx/scenefx.git ).
2025-06-25 18:17:44 +03:00
2026-02-18 10:27:10 +00:00
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.
2025-06-25 18:17:44 +03:00
2026-02-18 10:27:10 +00:00
## Thanks to These Reference Repositories
2025-02-14 14:32:20 +08:00
2026-02-18 10:17:34 +00:00
- < https: // gitlab . freedesktop . org / wlroots / wlroots > - Implementation of Wayland protocol
2025-02-14 14:32:20 +08:00
2026-02-18 10:17:34 +00:00
- < https: // github . com / dqrk0jeste / owl > - Basal window animation
2025-02-14 14:32:20 +08:00
2026-02-18 10:17:34 +00:00
- < https: // codeberg . org / dwl / dwl > - Basal dwl feature
2025-03-01 21:34:05 +08:00
2026-02-18 10:17:34 +00:00
- < https: // github . com / swaywm / sway > - Sample of Wayland protocol
2025-06-24 14:55:18 +08:00
2026-02-18 10:17:34 +00:00
- < https: // github . com / wlrfx / scenefx > - Make it simple to add window effect.
2026-01-13 20:25:19 +08:00
2026-02-18 10:27:10 +00:00
## Sponsor
2026-01-13 20:25:19 +08:00
At present, I can only accept sponsorship through an encrypted connection.
2026-02-18 10:27:10 +00:00
If you find this project helpful to you, you can offer sponsorship in the
following ways.
2026-01-13 20:25:19 +08:00
2026-02-18 12:53:56 +00:00

2026-01-13 20:25:19 +08:00
Thanks to the following friends for their sponsorship of this project
[@tonybanters ](https://github.com/tonybanters )