maomaowm/README.md

15 KiB

DO NOT USE! THIS IS JUST A LEARNING REPO AND NOT SUPPORTED IN ANY WAY!

Mango Wayland Compositor

MangoWC Logo

This project's development is based on 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

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.

Our discord

mangowm

Supported layouts

  • tile
  • scroller
  • monocle
  • grid
  • deck
  • center_tile
  • vertical_tile
  • vertical_grid
  • vertical_scroller
  • tgmix

Installation

Packaging status

Dependencies

  • 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 from the AUR package page or through a AUR helper like yay:

yay -S mangowm-git

Gentoo Linux

The package is in the community-maintained repository called GURU. First, add GURU repository:

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.

Finally, install the package:

emerge --ask --verbose gui-wm/mangowm

Fedora Linux

The package is in the third-party Terra repository. First, add the Terra Repository.

Then, install the package:

dnf install mangowm

Guix System

The package definition is described in the source repository. First, add mangowm channel to channels.scm file:

;; 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 guix install mangowm or add it to your configuration via:

(use-modules (mangowm)) ;; Add mangowm module

;; Add mangowm to packages list
(packages (cons*
            mangowm-git
            ... ;; Other packages you specified
            %base-packages))

And then rebuild your system.

Other

git clone -b 0.19.2 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 mangowm
meson build -Dprefix=/usr
sudo ninja -C build install

Suggested Tools

Hybrid component

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)

Default Keybindings Reference

Note

: All keybindings can be customized in ~/.config/mango/config.conf

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

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)

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

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

Special Features

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

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

Tip: Press Super + R after editing your config to reload without restarting!

My Dotfiles

Daily

  • Dependencies
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
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
git clone -b dms https://github.com/DreamMaoMao/mango-config.git ~/.config/mango
  • use my daily config
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:

📚 Documentation Files

  • 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
  • COMMANDS.md - Complete command reference

    • All available commands with descriptions
    • Parameter documentation
    • Keybinding examples
    • IPC/mmsg usage and scripting examples
  • config.conf - Annotated configuration file

    • All settings explained with inline comments
    • Example configurations
    • Default keybindings

🌐 Online Resources

  • Wiki - Comprehensive online documentation
  • Website - Web-based documentation
  • Discord - Community support and discussions

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:

{
  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:

You might need to package scenefx for your distribution, check availability at the scenefx repository.

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

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.

image

Thanks to the following friends for their sponsorship of this project

@tonybanters