Skip to main content

Syntax and config generator for tiling window managers

Project description

tile

forthebadge forthebadge

Syntax and config generator for tiling window managers.

TL;DR

If you are using i3 or Sway check out the example below.

Installation

pip install tile

Usage

  1. Create input_file using Concepts below.
  2. Try it with tile input_file
  3. Write it to i3 config using tile --write input_file
  4. Write it to Sway config using tile --write --sway input_file

Check out tile --help for more options.

Concepts

Mapping types

tile supports two types of mappings:

  1. Command bindings for WM built-in commands:
INPUT:
$mod+f -> fullscreen toggle

OUTPUT:
bindsym $mod+f fullscreen toggle
  1. Exec bindings, which are self-explanatory
INPUT:
$mod+Return => xterm

OUTPUT:
bindsym $mod+Return exec --no-startup-id xterm

Alternatives

Alternatives express the idea that the same action should be bound to multiple key-bindings.

For example:

INPUT:
$mod+h/Left -> focus left

OUTPUT:
bindsym $mod+h focus left
bindsym $mod+Left focus left

Variables

Variables are shorter way to write bindings that have a similar structure.

E.g.:

INPUT:
$mod+{f,s} -> {fullscreen,split} toggle

OUTPUT:
bindsym $mod+f fullscreen toggle
bindsym $mod+s split toggle

Range expansion

Inside variables you can write 1-10 and it will be expanded to 1,2,3....

INPUT:
$mod+{1-4} -> workspace {100-103}

OUTPUT:
bindsym $mod+1 workspace 100
bindsym $mod+2 workspace 101
bindsym $mod+3 workspace 102
bindsym $mod+4 workspace 103

Variable reference

You can reference current value of the variable using @n syntax, where n is the variable index. Every variable is numbered (starting from 0) from left to right. E.g.:

foo {bar,{foo,bar}} {0-1} ...
    ^    ^          ^
    0    1          2

Use it like this:

INPUT:
$mod+Control+Shift {8-9,0} -> move container to workspace {8-10}; workspace @1

OUTPUT:
bindsym $mod+Control+Shift 8 move container to workspace 8; workspace 8
bindsym $mod+Control+Shift 9 move container to workspace 9; workspace 9
bindsym $mod+Control+Shift 0 move container to workspace 10; workspace 10

Or to avoid repeating long sequences:

INPUT:
$mod+x -> {[instance="calculator"]} scratchpad show; @0 move position center

OUTPUT:
bindsym $mod+x [instance="calculator"] scratchpad show; [instance="calculator"] move position center

Empty value

You can use empty value inside Variable, denoted by _. E.g.

INPUT:
$mod+{_,Shift+}h/Left -> {focus,move} left

OUTPUT:
bindsym $mod+h focus left
bindsym $mod+Left focus left
bindsym $mod+Shift+h move left
bindsym $mod+Shift+Left move left

Nesting

You can use Alternatives and Variables inside Variable to create many bindings at once.

INPUT:
the {{quick,brown},{fox,dog/beast}} => {xterm,kitty} -e echo {jumps,over}

OUTPUT:
bindsym the quick exec --no-startup-id xterm -e echo jumps
bindsym the brown exec --no-startup-id xterm -e echo over
bindsym the fox exec --no-startup-id kitty -e echo jumps
bindsym the dog exec --no-startup-id kitty -e echo over
bindsym the beast exec --no-startup-id kitty -e echo over

Additional syntax

Parenthesis

By default, special characters like space, plus sign, etc. are token separators.

INPUT:
$mod+p/Print => scrot

OUTPUT:
bindsym $mod+p exec --no-startup-id scrot
bindsym $mod+Print exec --no-startup-id scrot

You can use parenthesis to modify the behavior:

INPUT:
($mod+p/Print) => scrot

OUTPUT:
bindsym $mod+p exec --no-startup-id scrot
bindsym Print exec --no-startup-id scrot

Comments

Empty lines or lines starting with # will be ignored.

INPUT:
# This is a comment

OUTPUT:

Example

INPUT:
$mod+{_,Shift+}{h/Left,j/Down,k/Up,l/Right}         -> {focus,move} {left,down,up,right}
$mod+Control+Shift+{{h/Left,k/Up},{l/Right,j/Down}} -> resize {shrink,grow} {width,height} 5px or 5ppt
$mod+{_,Shift+}{1-9,0}                              -> {_,move container to }workspace {1-10}
$mod+Control+Shift {1-9,0}                          -> move container to workspace {1-10}; workspace @1

OUTPUT:
bindsym $mod+h focus left
bindsym $mod+Left focus left
bindsym $mod+j focus down
bindsym $mod+Down focus down
bindsym $mod+k focus up
bindsym $mod+Up focus up
bindsym $mod+l focus right
bindsym $mod+Right focus right
bindsym $mod+Shift+h move left
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+l move right
bindsym $mod+Shift+Right move right
bindsym $mod+Control+Shift+h resize shrink width 5px or 5ppt
bindsym $mod+Control+Shift+Left resize shrink width 5px or 5ppt
bindsym $mod+Control+Shift+k resize shrink height 5px or 5ppt
bindsym $mod+Control+Shift+Up resize shrink height 5px or 5ppt
bindsym $mod+Control+Shift+l resize grow width 5px or 5ppt
bindsym $mod+Control+Shift+Right resize grow width 5px or 5ppt
bindsym $mod+Control+Shift+j resize grow height 5px or 5ppt
bindsym $mod+Control+Shift+Down resize grow height 5px or 5ppt
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3
bindsym $mod+Shift+4 move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10
bindsym $mod+Control+Shift 1 move container to workspace 1; workspace 1
bindsym $mod+Control+Shift 2 move container to workspace 2; workspace 2
bindsym $mod+Control+Shift 3 move container to workspace 3; workspace 3
bindsym $mod+Control+Shift 4 move container to workspace 4; workspace 4
bindsym $mod+Control+Shift 5 move container to workspace 5; workspace 5
bindsym $mod+Control+Shift 6 move container to workspace 6; workspace 6
bindsym $mod+Control+Shift 7 move container to workspace 7; workspace 7
bindsym $mod+Control+Shift 8 move container to workspace 8; workspace 8
bindsym $mod+Control+Shift 9 move container to workspace 9; workspace 9
bindsym $mod+Control+Shift 0 move container to workspace 10; workspace 10

Background

i3 is a great windows manager but its config is pretty verbose. I tried bspwm with its hotkey daemon sxhkd and I much prefer that syntax. That's why I wrote tile.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tile-1.0.0a9.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

tile-1.0.0a9-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file tile-1.0.0a9.tar.gz.

File metadata

  • Download URL: tile-1.0.0a9.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.0b8 CPython/3.8.0 Linux/4.19.86-1-lts

File hashes

Hashes for tile-1.0.0a9.tar.gz
Algorithm Hash digest
SHA256 ce1eb7bde5ea35e7f7f141dfb827b63a4349e039a75aeea494953d3cb912bfea
MD5 89a899c009a6d6cf260c3abd1f18648e
BLAKE2b-256 bcee29f151ea905095b40bf7e0221651ab76ae65da55ce373b07b5d5e7ca1117

See more details on using hashes here.

File details

Details for the file tile-1.0.0a9-py3-none-any.whl.

File metadata

  • Download URL: tile-1.0.0a9-py3-none-any.whl
  • Upload date:
  • Size: 11.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.0b8 CPython/3.8.0 Linux/4.19.86-1-lts

File hashes

Hashes for tile-1.0.0a9-py3-none-any.whl
Algorithm Hash digest
SHA256 d00d34d15fbff2e9e9d826eff975115b302ddadf060e4de7eb1a5a427737827d
MD5 a9fbf76c7844e2c5deb08fd52e7e2d37
BLAKE2b-256 93ee7090a88c2ccb1890fc9cbc3f8b0780ed445572fd957c4a0ff44b951682c7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page