Skip to content

leftwm/leftwm-layouts

Repository files navigation

LeftWM Layouts

Library providing fixed but parameterized window layout calculations

Libraries.io dependency status for GitHub repo Crates.io Crates.io

Description

This library encapsulates layout calculations from external dependencies and display servers, so that it can be used by window managers for X.Org, Wayland, or whatever else. It's all about splitting up rectangles, the library has no concept of "windows".

Some default layouts are provided, but custom layouts can be defined. Custom layout definitions allow some flexibility but are still fairly limited by design, as the target audience of this library are list-based / dynamic-tiling window managers (the likes of leftwm, dwm, ...) as opposed to manual tilers like i3.

Features

  • Already provides widely known default layouts
  • Custom layouts can be defined
  • Supports multiple main windows
  • Ultrawide monitor friendly
  • Zero dependencies (if you ignore serde 👀)

Pre-defined Layouts

The following layouts are already provided by the library.

Stack / Single-Column

Those layouts have only a single stack and no main column.

Monocle

+-----------+
|           |   only ever displays
|           |   one window at
|           |   maximum
+-----------+

EvenHorizontal

+--+--+--+--+
|  |  |  |  |
|  |  |  |  |
|  |  |  |  |
+--+--+--+--+

EvenVertical

+-----------+
|-----------|
|-----------|
|-----------|
+-----------+

Grid

+-----+-----+   +---+---+---+   +---+---+---+   +---+---+---+
|     |     |   |   |   |   |   |   |   |   |   |   |   |   |
|     |     |   |   |   |   |   |   |   |   |   |   |   +---+
+-----+-----+   |   +---+---+   +---+---+---+   +---+---|   |
|     |     |   |   |   |   |   |   |   |   |   |   |   +---+
|     |     |   |   |   |   |   |   |   |   |   |   |   |   |
+-----+-----+   +---+---+---+   +---+---+---+   +---+---+---+
  4 windows       5 windows       6 windows       7 windows

Main and Stack / Two-Column

Those layouts have a main and one stack column

MainAndDeck

+-------+-----+
|       |     |   only ever displays
|       |     |   two windows at
|       |     |   maximum
+-------+-----+
  main   stack

MainAndVertStack

+-------+-----+
|       |     |
|       +-----+
|       |     |
+-------+-----+
  main   stack

MainAndHorizontalStack

+-------+--+--+
|       |  |  |
|       |  |  |
|       |  |  |
+-------+--+--+
  main   stack

RightMainAndVertStack

+-----+-------+
|     |       |
+-----+       |
|     |       |
+-----+-------+
 stack   main

Fibonacci

+-------+-----+
|       |     |
|       +--+--+
|       |--|  |
+-------+--+--+
  main   stack

Dwindle

+-------+-----+
|       |     |
|       +--+--+
|       |  |--|
+-------+--+--+
  main   stack

Center Main / Three-Column

Those layouts have the main column in the center and two stack columns surrounding it.

CenterMain

+-----+-----------+-----+
|     |           |     |
|     |           +-----+
|     |           |     |
|     |           +-----+
|     |           |     |
+-----+-----------+-----+
  1st      main     2nd
 stack             stack

+-----------+-----------+
|           |           |
|           |           |  unoccupied
|           |           |  space is
|           |           |  taken over
|           |           |
+-----------+-----------+
  1st stack      main

+-----------------------+
|                       |
|                       |  unoccupied
|                       |  space is
|                       |  taken over
|                       |
+-----------------------+
           main

CenterMainBalanced

+-----+-----------+-----+
|     |           |     |
|     |           |     |
+-----+           +--+--+
|  |__|           |  |__|
|  |  |           |  |  |
+-----+-----------+--+--+
  1st      main     2nd
 stack             stack

+-----------+-----------+
|           |           |
|           |           |  unoccupied
|           |           |  space is
|           |           |  taken over
|           |           |
+-----------+-----------+
  1st stack      main

+-----------------------+
|                       |
|                       |  unoccupied
|                       |  space is
|                       |  taken over
|                       |
+-----------------------+
           main

CenterMainFluid

 1st               2nd
 stack     main    stack
+-----+-----------+-----+
|     |           |     |
|     |           +-----+
|     |           |     |
|     |           +-----+
|     |           |     |
+-----+-----------+-----+
  1st      main     2nd
 stack             stack

+-----+-----------+-----+
|     |           |.....|
|     |           |.....|  unoccupied
|     |           |.....|  space is
|     |           |.....|  reserved
|     |           |.....|
+-----+-----------+-----+
  1st      main
 stack

+-----+-----------+-----+
|.....|           |.....|
|.....|           |.....|  unoccupied
|.....|           |.....|  space is
|.....|           |.....|  reserved
|.....|           |.....|
+-----+-----------+-----+
           main

Build

Build and test the project

Note Requires Rust >= 1.56.0

make

Run the demo application

Note Running the demo requires you to have GTK (gtk3) and pango (?) installed

make dev