mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-05-20 21:38:15 -04:00
refactor: README
This commit is contained in:
parent
4967fd49ba
commit
374392a7ec
1 changed files with 70 additions and 300 deletions
370
README.md
370
README.md
|
|
@ -1,332 +1,102 @@
|
||||||
# Mango Wayland Compositor
|
<div align="center">
|
||||||
<div>
|
<img src="https://github.com/mangowm/mango/blob/main/assets/mango-transparency-256.png" alt="Mango Logo" width="120"/>
|
||||||
<img src="https://github.com/mangowm/mango/blob/main/assets/mango-transparency-256.png" alt="MangoWM Logo" width="120"/>
|
|
||||||
|
<h1>Mango Wayland Compositor</h1>
|
||||||
|
|
||||||
|
<p>A fast, feature-rich Wayland compositor built on <a href="https://codeberg.org/dwl/dwl">dwl</a></p>
|
||||||
|
|
||||||
|
<a href="https://github.com/mangowm/mango/stargazers"><img src="https://img.shields.io/github/stars/mangowm/mango?style=flat&color=orange" alt="Stars"/></a>
|
||||||
|
<a href="https://github.com/mangowm/mango/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-GPL--3.0-blue?style=flat" alt="License"/></a>
|
||||||
|
<a href="https://repology.org/project/mangowm/versions"><img src="https://repology.org/badge/tiny-repos/mangowm.svg" alt="Packaged in"/></a>
|
||||||
|
<a href="https://discord.gg/CPjbDxesh5"><img src="https://img.shields.io/discord/1430889676264177687?style=flat&logo=discord&label=discord" alt="Discord"/></a>
|
||||||
|
|
||||||
</div>
|
</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.
|
|
||||||
|
|
||||||
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)
|
|
||||||
- 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.)
|
|
||||||
- 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)
|
|
||||||
- Hycov-like overview
|
|
||||||
- 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
|
||||||
|
|
||||||
# Mango's Vision
|
> See all layouts in action at [mangowm.github.io](https://mangowm.github.io/)
|
||||||
|
|
||||||
**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.
|
## Why Mango?
|
||||||
|
|
||||||
**Mango's preference is practicality**: I tend to add features that genuinely help with daily workflows—things that make our work more convenient.
|
Mango starts where dwl ends. It keeps the lightweight, fast-build philosophy while adding the features that make a compositor actually usable day-to-day — without the bloat.
|
||||||
|
|
||||||
**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.
|
- **Lightweight & fast** — as lean as dwl, builds in seconds, no functionality compromised
|
||||||
|
- **Excellent xwayland support** — run X11 apps without friction
|
||||||
|
- **Tags, not workspaces** — each tag maintains its own independent window layout
|
||||||
|
- **Smooth animations** — window open/move/close, tag transitions, layer surfaces
|
||||||
|
- **Flexible layouts** — scroller, master-stack, monocle, dwindle, grid, and more
|
||||||
|
- **Rich window states** — swallow, minimize, maximize, global, overlay, fakefullscreen
|
||||||
|
- **Window effects** — blur, shadow, corner radius, opacity (via scenefx)
|
||||||
|
- **Excellent input method support** — text-input v2/v3
|
||||||
|
- **Sway-like scratchpad** — named scratchpad support included
|
||||||
|
- **Hycov-style overview** — see all windows at a glance
|
||||||
|
- **IPC** — send/receive messages from external programs
|
||||||
|
- **Hot-reload config** — no restart needed for keybinding changes
|
||||||
|
- **Zero flickering** — every frame is correct
|
||||||
|
|
||||||
# Our discord
|
## Vision
|
||||||
[mangowm](https://discord.gg/CPjbDxesh5)
|
|
||||||
|
|
||||||
# Supported layouts
|
**Stability first.** After months of testing, Mango is solid enough for daily use. Breaking changes will be minimal.
|
||||||
- tile
|
|
||||||
- scroller
|
|
||||||
- monocle
|
|
||||||
- grid
|
|
||||||
- deck
|
|
||||||
- center_tile
|
|
||||||
- vertical_tile
|
|
||||||
- vertical_grid
|
|
||||||
- vertical_scroller
|
|
||||||
- dwindle
|
|
||||||
|
|
||||||
# Installation
|
**Practicality over novelty.** Features get added when they genuinely improve daily workflows — not for the sake of completeness.
|
||||||
|
|
||||||
|
**Focused scope.** Niche requests are evaluated by community interest. Significant upvotes move things forward.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
[](https://repology.org/project/mangowm/versions)
|
[](https://repology.org/project/mangowm/versions)
|
||||||
|
|
||||||
## Dependencies
|
### Arch Linux
|
||||||
|
|
||||||
- wayland
|
|
||||||
- wayland-protocols
|
|
||||||
- libinput
|
|
||||||
- libdrm
|
|
||||||
- libxkbcommon
|
|
||||||
- pixman
|
|
||||||
- libdisplay-info
|
|
||||||
- libliftoff
|
|
||||||
- hwdata
|
|
||||||
- seatd
|
|
||||||
- pcre2
|
|
||||||
- xorg-xwayland
|
|
||||||
- libxcb
|
|
||||||
|
|
||||||
## Arch Linux
|
|
||||||
The package is in the Arch User Repository and is available for manual download [here](https://aur.archlinux.org/packages/mangowm-git) or through a AUR helper like yay:
|
|
||||||
```bash
|
```bash
|
||||||
yay -S mangowm-git
|
yay -S mangowm-git
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Gentoo Linux
|
### Other distributions
|
||||||
The package is in the community-maintained repository called GURU.
|
|
||||||
First, add GURU repository:
|
|
||||||
|
|
||||||
```bash
|
See the [Installation Guide](https://mangowm.github.io/docs/installation) for Fedora, Gentoo, Guix, NixOS, openSUSE, PikaOS, AerynOS, and building from source.
|
||||||
emerge --ask --verbose eselect-repository
|
|
||||||
eselect repository enable guru
|
|
||||||
emerge --sync guru
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, add `gui-libs/scenefx` and `gui-wm/mangowm` to the `package.accept_keywords`.
|
## Documentation
|
||||||
|
|
||||||
Finally, install the package:
|
- **[mangowm.github.io](https://mangowm.github.io/)** — website docs with configuration reference, keybindings, layouts, IPC, and more
|
||||||
|
- **[GitHub Wiki](https://github.com/mangowm/mango/wiki/)** — community-maintained wiki
|
||||||
|
|
||||||
```bash
|
## Community
|
||||||
emerge --ask --verbose gui-wm/mangowm
|
|
||||||
```
|
|
||||||
|
|
||||||
## openSUSE
|
Join us on **[Discord](https://discord.gg/CPjbDxesh5)**
|
||||||
The package is in the community-maintained repository called obs.
|
|
||||||
|
|
||||||
```bash
|
## Acknowledgements
|
||||||
sudo opi in mangowm
|
|
||||||
```
|
|
||||||
## Fedora Linux
|
|
||||||
The package is in the third-party Terra repository.
|
|
||||||
First, add the [Terra Repository](https://terra.fyralabs.com/).
|
|
||||||
|
|
||||||
Then, install the package:
|
- [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots) — Wayland protocol implementation
|
||||||
|
- [dwl](https://codeberg.org/dwl/dwl) — the foundation Mango builds on
|
||||||
|
- [scenefx](https://github.com/wlrfx/scenefx) — window effects library
|
||||||
|
- [owl](https://github.com/dqrk0jeste/owl) — animation groundwork
|
||||||
|
- [sway](https://github.com/swaywm/sway) — protocol reference
|
||||||
|
|
||||||
```bash
|
## Sponsor
|
||||||
dnf install mangowm
|
|
||||||
```
|
|
||||||
|
|
||||||
## Guix System
|
If Mango makes your desktop better, consider supporting its development.
|
||||||
The package definition is described in the source repository.
|
|
||||||
First, add `mangowm` channel to `channels.scm` file:
|
|
||||||
|
|
||||||
```scheme
|
Thanks to everyone who has sponsored this project:
|
||||||
;; In $HOME/.config/guix/channels.scm
|
|
||||||
(cons (channel
|
|
||||||
(name 'mangowm)
|
|
||||||
(url "https://github.com/mangowm/mango.git")
|
|
||||||
(branch "main"))
|
|
||||||
... ;; Your other channels
|
|
||||||
%default-channels)
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, run `guix pull` and after update you can either run
|
<table>
|
||||||
`guix install mangowm` or add it to your configuration via:
|
<tr>
|
||||||
|
<!-- add new sponsors here: copy the <td>...</td> block below -->
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/tonybanters">
|
||||||
|
<img src="https://unavatar.io/github/tonybanters" width="48" style="border-radius:50%"/><br/>
|
||||||
|
<sub>tonybanters</sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
```scheme
|
Crypto donations accepted — scan the QR code or send to the address shown:
|
||||||
(use-modules (mangowm)) ;; Add mangowm module
|
|
||||||
|
|
||||||
;; Add mangowm to packages list
|
<details>
|
||||||
(packages (cons*
|
<summary>Show QR code</summary>
|
||||||
mangowm-git
|
<br/>
|
||||||
... ;; Other packages you specified
|
<img width="300" alt="sponsor QR" src="https://github.com/user-attachments/assets/8c860317-90d2-4071-971d-f1a92b674469" />
|
||||||
%base-packages))
|
</details>
|
||||||
```
|
|
||||||
|
|
||||||
And then rebuild your system.
|
|
||||||
|
|
||||||
## Other
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone -b 0.19.3 https://gitlab.freedesktop.org/wlroots/wlroots.git
|
|
||||||
cd wlroots
|
|
||||||
meson build -Dprefix=/usr
|
|
||||||
sudo ninja -C build install
|
|
||||||
|
|
||||||
git clone -b 0.4.1 https://github.com/wlrfx/scenefx.git
|
|
||||||
cd scenefx
|
|
||||||
meson build -Dprefix=/usr
|
|
||||||
sudo ninja -C build install
|
|
||||||
|
|
||||||
git clone https://github.com/mangowm/mango.git
|
|
||||||
cd mango
|
|
||||||
meson build -Dprefix=/usr
|
|
||||||
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
|
|
||||||
- Wallpaper setup (swww, swaybg)
|
|
||||||
- Notification daemon (swaync, dunst,mako)
|
|
||||||
- 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)
|
|
||||||
|
|
||||||
## Some Common Default Keybindings
|
|
||||||
|
|
||||||
- alt+return: open foot terminal
|
|
||||||
- alt+space: open rofi launcher
|
|
||||||
- alt+q: kill client
|
|
||||||
- alt+left/right/up/down: focus direction
|
|
||||||
- super+m: quit mango
|
|
||||||
|
|
||||||
## My Dotfiles
|
|
||||||
|
|
||||||
### Daily
|
|
||||||
- Dependencies
|
|
||||||
|
|
||||||
```bash
|
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
### 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
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Config Documentation
|
|
||||||
|
|
||||||
Refer to the repo wiki [wiki](https://github.com/mangowm/mango/wiki/)
|
|
||||||
|
|
||||||
or the website docs [docs](https://mangowm.github.io/)
|
|
||||||
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
Here's an example of using the modules in a flake:
|
|
||||||
|
|
||||||
```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";
|
|
||||||
mango = {
|
|
||||||
url = "github:mangowm/mango";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
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
|
|
||||||
|
|
||||||
# Add mango nixos module
|
|
||||||
inputs.mango.nixosModules.mango
|
|
||||||
{
|
|
||||||
programs.mango.enable = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
home-manager = {
|
|
||||||
useGlobalPkgs = true;
|
|
||||||
useUserPackages = true;
|
|
||||||
backupFileExtension = "backup";
|
|
||||||
users."username".imports =
|
|
||||||
[
|
|
||||||
(
|
|
||||||
{ ... }:
|
|
||||||
{
|
|
||||||
wayland.windowManager.mango = {
|
|
||||||
enable = true;
|
|
||||||
settings = ''
|
|
||||||
# see config.conf
|
|
||||||
'';
|
|
||||||
autostart_sh = ''
|
|
||||||
# see autostart.sh
|
|
||||||
# Note: here no need to add shebang
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]
|
|
||||||
++ [
|
|
||||||
# Add mango hm module
|
|
||||||
inputs.mango.hmModules.mango
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
# Packaging mango
|
|
||||||
|
|
||||||
To package mango for other distributions, you can check the reference setup for:
|
|
||||||
|
|
||||||
- [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)
|
|
||||||
|
|
||||||
You might need to package `scenefx` for your distribution, check availability [here](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.
|
|
||||||
|
|
||||||
# Thanks to These Reference Repositories
|
|
||||||
|
|
||||||
- https://gitlab.freedesktop.org/wlroots/wlroots - Implementation of Wayland protocol
|
|
||||||
|
|
||||||
- https://github.com/dqrk0jeste/owl - Basal window animation
|
|
||||||
|
|
||||||
- https://codeberg.org/dwl/dwl - Basal dwl feature
|
|
||||||
|
|
||||||
- https://github.com/swaywm/sway - Sample of Wayland protocol
|
|
||||||
|
|
||||||
- https://github.com/wlrfx/scenefx - Make it simple to add window effect.
|
|
||||||
|
|
||||||
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
<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:
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://github.com/tonybanters"><img src="https://unavatar.io/github/tonybanters" width="50" /></a>
|
|
||||||
</p>
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue