SkillAgentSearch skills...

Mondrian

A tiling window manager for Windows 11, built with Rust.

Install / Use

/learn @policastro/Mondrian
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<img src="./assets/mondrian.ico" width="20" height="20"> Mondrian

Mondrian is a tiling window manager built with Rust for Windows 11.

🌟 Key Features

  • Automatic/manual window placement with different tiling layouts;
  • Keybindings;
  • Multi-monitor support;
  • Mouse movements support (moving/resizing windows);
  • Compatible with Virtual Desktops;
  • Workspaces;
  • System tray application;
  • Multiple animations;
  • Highly customizable.

Getting Started

Usage

To start Mondrian, just download the mondrian.exe executable from the latest release and run it.

The application takes the following arguments (all of them are optional):

./mondrian.exe --log <LOG_TYPE> --loglevel <LOGLEVEL> --dumpstateinfo --healthcheck

Where:

  • <LOG_TYPE> can be 0 (no log file is created), 1 (error log files is created) or 2 (all log files are created). By default, it is set to 1.
  • <LOG_LEVEL> can be 0 (off), 1 (trace), 2 (debug), 3 (info), 4 (warn) or 5 (error). By default, it is set to 3.
  • dumpstateinfo dump the application state into a file (./logs/app_state.txt) at the start of the application;
  • healthcheck enables health checks to detect freezes.

All the log files will be stored in the application directory under the logs subfolder. When a log file reaches 10MB, it will be archived in a .gz file (up to three previous versions).

Moving windows

You can swap two windows in the same monitor just by dragging one of them into the other. While dragging, you can:

  • hold ALT, to swap the windows and to invert the direction of the tiles;

When the window is dragged to another monitor, by default it will be inserted. In this case, you can:

  • hold SHIFT while dragging the window to swap the windows;
  • hold ALT while dragging the window to insert the windows and to invert the direction of the tiles.

By changing the insert_in_monitor configuration option to false, the window will be swapped in the other monitor by default. In this case, you can:

  • hold SHIFT while dragging the window to insert the windows;
  • hold ALT while dragging the window to insert the window and to invert the direction of the tiles.

If you drag a window while holding CTRL, you can place the window freely based on the cursor position relative to an other window. In particular:

  • if the cursor is at the top of an other window (i.e. <=20% of its height), the moving window will be placed above it;
  • if the cursor is at the bottom of an other window (i.e. >=80% of its height), the moving window will be placed below it;
  • if the cursor is to the left of an other window (i.e. <=50% of its width), the moving window will be placed to the left of it;
  • if the cursor is to the right of an other window (i.e. >50% of its width), the moving window will be placed to the right of it.

Holding CTRL has the same effect when dragging the window to another monitor (by default).

You can set the free_move_in_monitor configuration option to true if you want to place the window freely in another monitor without holding CTRL (in this case, holding CTRL will position the window automatically).

Below a table that shows the keybindings for moving/swapping windows in different monitors, depending on the values of the insert_in_monitor and free_move_in_monitor configuration options:

| insert_in_monitor | free_move_in_monitor | No key | CTRL | SHIFT | ALT | | :-----------------: | :--------------------: | :------------: | :------------: | :----------: | :--------------------------: | | false | false/true | swaps | inserts freely | inserts auto | inserts auto + inverts tiles | | true | false | inserts auto | inserts freely | swaps | inserts auto + inverts tiles | | true | true | inserts freely | inserts auto | swaps | inserts auto + inverts tiles |

If more than one modifier is held, the precedence order is as follows: ALT > CTRL > SHIFT.

Resizing windows

Windows can be resized as usual just by dragging their borders.

Configuration

[!WARNING] The application is still evolving and changes between versions may introduce breaking changes. Be sure to check the release notes before updating.

Mondrian can be configured by editing the mondrian.toml file located in the ~/.config/mondrian directory. If the configuration file does not exist, it will be created automatically when the application starts. The configuration generated by the application can be found here.

Configuration options

| Option | Description | Values | Default | | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | | layout.tiling_strategy | Tiling strategy | "golden_ratio", "horizontal", "vertical", "twostep", "squared" | "golden_ratio" | | layout.paddings.tiles | Padding between tiles (in px) | 0 - 100 | 12 | | layout.paddings.borders | Padding between border and tiles (in px) | A number, a 2-tuple ([vertical, horizontal]) or a 4-tuple ([top, right, bottom, left]). All values must be between 0 and 140. | 18 | | layout.half_focalized_paddings.tiles | Padding between tiles for half-focalized windows (in px) | 0 - 100 | 12 | | layout.half_focalized_paddings.borders | Padding between border and tiles for half-focalized windows (in px) | A number, a 2-tuple ([vertical, horizontal]) or a 4-tuple ([top, right, bottom, left]). All values must be between 0 and 140. | 18 | | layout.focalized_padding | Padding between border and focalized window (in px) | A number, a 2-tuple ([vertical, horizontal]) or a 4-tuple ([top, right, bottom, left]). All values must be between 0 and 140. | 8 | | layout.strategy.golden_ratio.ratio | The ratio of the first split | 10 - 90 | 50 | | layout.strategy.golden_ratio.clockwise | Places the windows clockwise or counterclockwise | true, false | true | | layout.strategy.golden_ratio.vertical | If true, the layout will be vertical | true, false | false | | layout.strategy.twostep.first_step | First insertion direction | "right", "left", "up", "down" | "right" | | layout.strategy.twostep.second_step | Second insertion direction | "right", "left", "up", "down" | "down" | | layout.strategy.twostep.ratio | Ratio of the first split | 10 - 90 | 50 | | layout.strategy.horizontal.grow_right | If true, the layout will grow on the right side | true, false | true | | layout.strategy.vertical.grow_down | If true, the layout will grow on the bottom side

Related Skills

View on GitHub
GitHub Stars79
CategoryDevelopment
Updated2d ago
Forks3

Languages

Rust

Security Score

95/100

Audited on Mar 29, 2026

No findings