|
|
||
|---|---|---|
| .github/ISSUE_TEMPLATE | ||
| nix | ||
| protocols | ||
| src | ||
| .gitignore | ||
| config.conf | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| LICENSE.dwl | ||
| LICENSE.dwm | ||
| LICENSE.sway | ||
| LICENSE.tinywl | ||
| maomao.desktop | ||
| meson.build | ||
| meson_options.txt | ||
| README.md | ||
| treefmt.nix | ||
Maomaowm
This project is developed based on dwl,
"Since many people have asked about the meaning of this compositor's name, 'Maomao' is an online alias I've been using for years - it comes from the first two characters of the Chinese word for 'caterpillar' (毛毛虫). You can basically think of it as meaning 'caterpillar'.
-
Lightweight & Fast Build
- Maomao is as lightweight as dwl, and its build can be completed within few seconds. Despite this, maomao does not compromise on functionality.
-
Feature Integration
- In addition to inheriting dwl's core features and common functions found in other compositors, maomao also supports unique functionalities from other projects. These include:
- Hyprland’s animations,
- Sway’s additional protocols,
- Labwc’s text input method,
- Niri’s scrolling layout.
- However, these are implemented in a deliberately lightweight and simplistic manner to avoid bloated code.
- In addition to inheriting dwl's core features and common functions found in other compositors, maomao also supports unique functionalities from other projects. These include:
-
Philosophy
- Maomao has no rigid design ideology—you could call it an eclectic hybrid of various compositors.
Master-Stack Layout
https://github.com/user-attachments/assets/a9d4776e-b50b-48fb-94ce-651d8a749b8a
Scroller Layout
https://github.com/user-attachments/assets/c9bf9415-fad1-4400-bcdc-3ad2d76de85a
maomao based on tags instead of workspace, so it support separate window layout for each tags, with separate tags parameters
support layout
- tile
- scroller
- monocle
- grid
- dwindle
- spiral
some special feature
- hycov like overview
- foreign-toplevel protocol(dunst,waybar wlr taskbar)
- minimize window to waybar(like hych)
- sway scratchpad (minimize window to scratchpad)
- window pin mode/ maximize mode
- text-input-v2/v3 protocol for fcitx5
- window move/open/close animaition
- workspaces(tags) switch animaition
- fade/fadeout animation
- alt-tab switch window like gnome
- niri like scroller layout
install
depend
yay -S glibc wayland libinput libdrm pixman libxkbcommon git meson ninja wayland-protocols libdisplay-info libliftoff hwdata seatd
arch
yay -S maomaowm-git
other
yay -S wlroots-git
git clone https://github.com/DreamMaoMao/maomaowm.git
cd maomaowm
meson build -Dprefix=/usr
sudo ninja -C build install
suggest tools
yay -S rofi foot xdg-desktop-portal-wlr swaybg waybar wl-clip-persist cliphist wl-clipboard wlsunset polkit-gnome swaync
Some common default key bindings
- alt+return: open foot terminal
- alt+q: kill client
- alt+left/right/up/down: focus direction
- super+m: quit maomao
My dotfile
- depend
yay -S lavalauncher-mao-git wlr-dpms sway-audio-idle-inhibit-git swayidle dimland-git brightnessctl swayosd wlr-randr grim slurp satty swaylock-effects-git wlogout eww
maomao config
other
foot swaylock wlogout swaync eww
Config document
refer to wiki
NixOS+Home-manager
The repo contains a flake that provides a NixOS module and a home-manager module for maomaowm. Use the NixOS module to install maomaowm with other necessary components of a working wayland environment. Use the home-manager module to declare configuration and autostart for maomaowm.
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";
maomaowm.url = "github:DreamMaoMao/maomaowm";
};
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 maomaowm nixos module
inputs.maomaowm.nixosModules.maomaowm
{
programs.maomaowm.enable = true;
}
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "backup";
users."username".imports =
[
(
{ ... }:
{
wayland.windowManager.maomaowm = {
enable = true;
settings = ''
# see config.conf
'';
autostart_sh = ''
# see autostart.sh
# Note: here no need to add shebang
'';
};
}
)
]
++ [
# Add maomaowm hm module
inputs.maomaowm.hmModules.maomaowm
];
};
}
];
};
};
};
};
}
thanks for some refer repo
-
https://gitlab.freedesktop.org/wlroots/wlroots - implementation of wayland protocol
-
https://github.com/dqrk0jeste/owl - basal window animaition
-
https://codeberg.org/dwl/dwl - basal dwl feature
-
https://github.com/labwc/labwc - sample of text-input protocol
-
https://github.com/swaywm/sway - sample of wayland protocol