Table of Contents

Layout Engines

A "layout engine" or ILayoutEngine in Whim is responsible for arranging windows in a workspace. Each workspace has a single active layout engine, and can cycle through different layout engines.

Available layout engines

Engine TL;DR
focus One window at a time
slice Awesome/dwm-style dynamic tiling (primary/stack, multi-column, etc.)
tree i3-style dynamic tiling (arbitrary grids)
floating All windows are free-floating

Example Usage

layout_engines:
  entries:
    - type: tree
      initial_direction: right

    - type: slice
      variant:
        type: row

    - type: slice
      variant:
        type: column

    - type: slice
      variant:
        type: primary_stack

    - type: slice
      variant:
        type: secondary_primary_stack

    - type: slice
      variant:
        type: multi_column_stack
        columns: [2, 1, 0]

    - type: slice
      variant:
        type: secondary_primary_stack
        primary_capacity: 1
        secondary_capacity: 2

    - type: focus
      maximize: false

focus

The focus layout engine displays one window at a time.

layout_engines:
  entries:
    - type: focus
      maximize: false

To show the window in the specified direction, call the whim.core.focus_window_in_direction.(left|right|up|down) command - see the Commands page for more information.

To reorder windows, calling whim.core.swap_window_in_direction.(left|right|up|down) will swap the current window with the window in the specified direction. This will not change the focused window.

Windows which are not focused are minimized to the taskbar.

Focus demo

slice

The slice layout engine, inspired by Awesome and dwm, arranges windows in a configurable grid according to deterministic algorithm.

The YAML/JSON configuration supports built-in layouts, such as primary/stack, multi-column, and secondary primary stack. Arbitrary layouts can be created by nesting areas in the C# configuration - see Defining different SliceLayouts

Commands for the slice layout engine can be found on the Slice Layout plugin page.

Layout Variants

Column Layout

  • Description: Creates a column layout, where windows are stacked vertically.

  • Example:

    layout_engines:
      entries:
        - type: slice
          variant: column
    

Column layout demo

Row Layout

  • Description: Creates a row layout, where windows are stacked horizontally.

  • Example:

    layout_engines:
      entries:
        - type: slice
          variant: row
    

Row layout demo

Primary Stack Layout

  • Description: Creates a primary stack layout, where the first window takes up half the screen, and the remaining windows are stacked vertically on the other half.

  • Example:

    layout_engines:
      entries:
        - type: slice
          variant: primary_stack
    

Primary stack layout demo

Multi-Column Stack Layout

  • Description: Creates a multi-column layout with the given number of windows in each column. [2, 1, 0] will create a layout with 3 columns, where the first column has 2 windows, the second column has 1 window, and the third column has infinite windows.

  • Properties:

    • columns: An array of integers specifying the number of windows in each column.
  • Example:

    layout_engines:
      entries:
        - type: slice
          variant: multi_column_stack
          columns: [2, 1, 0]
    

Multi-column stack layout demo

Secondary Primary Stack Layout

  • Description: Creates a three-column layout, where the primary column is in the middle, the secondary column is on the left, and the overflow column is on the right. The middle column takes up 50% of the screen, and the left and right columns take up 25%.

  • Properties:

    • primary_capacity: The number of rows in the primary column. This must be a non-negative integer. Default is 1.
    • secondary_capacity: The number of rows in the secondary column. This must be a non-negative integer. Default is 2.
  • Example:

    layout_engines:
      entries:
        - type: slice
          variant: secondary_primary_stack
          primary_capacity: 1
          secondary_capacity: 2
    

Secondary primary stack demo

tree

The tree layout engine is a layout that allows users to create arbitrary grid layouts, similar to i3. Unlike the slice layout engine, windows can can be added in any location at runtime.

The tree supports an initial_direction property, which specifies the direction of the first split. The available directions are left, right, up, and down.

layout_engines:
  entries:
    - type: tree
      initial_direction: right

Tree demo

Commands for the tree layout engine can be found on the Tree Layout plugin page.

floating

The floating layout engine is a layout that has all windows being free-floating. To have specific windows float within a different layout, see the Floating Window Plugin.

layout_engines:
  entries:
    - type: floating

Floating layout demo