Stable

gar

Tiling Window Manager

An event-driven X11 tiling window manager with a binary tree layout engine. gar gives you full control over your windows with intuitive keyboard-driven navigation and a powerful Lua configuration system.

Features

  • Binary tree layout with smart splits
  • Full Lua 5.4 scripting for configuration
  • Multi-monitor support with per-monitor workspaces
  • EWMH compliant for compatibility with bars and tools
  • Unix socket IPC for runtime control via garctl
  • Customizable gaps, borders, and colors
  • Window rules for automatic placement
  • Keyboard and mouse input handling
  • Integration with picom compositor
  • Session management with systemd

Quick Start Guide

Get up and running with gar in just a few steps. This guide covers installation, basic configuration, and essential keybindings.

1. Installation

Install gar using the unified installer or build from source:

terminal
$ curl -fsSL https://gar.dev/install.sh | bash -s -- --component=gar # Install via script
$ cd ~/.local/src/gardesk/gar && cargo build --release # Or build from source

2. First Launch

Start gar from your display manager or directly from a TTY:

terminal
$ startx /usr/local/share/gar/gar-session.sh # Start from TTY

Or select "gar" from your display manager's session menu.

3. Essential Keybindings

The default configuration uses Super (Windows key) as the modifier:

Keybinding Action
Super + ReturnOpen terminal
Super + qClose focused window
Super + h/j/k/lFocus left/down/up/right
Super + Shift + h/lSwap window left/right
Super + 1-9Switch to workspace
Super + Shift + 1-9Move window to workspace
Super + Shift + rReload configuration
Super + Shift + EscapeExit gar

4. Configuration File

Edit your config at ~/.config/gar/init.lua. Changes apply after reload (Super + Shift + r).

terminal
$ mkdir -p ~/.config/gar # Create config directory
$ $EDITOR ~/.config/gar/init.lua # Edit configuration

5. Control with garctl

Use garctl to control gar from scripts or the command line:

terminal
$ garctl workspace 3 # Switch to workspace 3
$ garctl focus left # Focus window to the left
$ garctl reload # Reload configuration
$ garctl get_workspaces # Query workspace info (JSON)