Skip to content

Add tiling window management powers to your mjolnir

Notifications You must be signed in to change notification settings

amrav/mjolnir.tiling

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mjolnir.tiling

Add tiling window management powers to your mjolnir.

Features

  • Different layouts per space (with this magic)
  • Multi-monitor supported
  • Custom layouts

Quick start

First up, install Mjolnir if you haven't already.

Then install mjolnir.tiling using luarocks: luarocks install mjolnir.tiling

In your ~/.mjolnir/init.lua:

local tiling = require "mjolnir.tiling"
local mash = {"ctrl", "cmd"}

hotkey.bind(mash, "c", function() tiling.cyclelayout() end)
hotkey.bind(mash, "j", function() tiling.cycle(1) end)
hotkey.bind(mash, "k", function() tiling.cycle(-1) end)
hotkey.bind(mash, "space", function() tiling.promote() end)

-- If you want to set the layouts that are enabled
tiling.set('layouts', {
  'fullscreen', 'main-vertical'
})

Updating

To update to the latest mjolnir.tiling, just run: luarocks install mjolnir.tiling

Using custom layouts

You can define your own layouts like so (please see layouts.lua for definition examples:)

tiling.addlayout('custom', function(windows)
  fnutils.each(windows, function(window)
    window:maximize()
  end)
end)

Floating Windows

Using tiling.togglefloat you can toggle whether or not a window that is on your desktop will be included in your tiling calculations. You can optionally pass in a function as a callback to process the window if it was tiled.

-- Push the window into the exact center of the screen
local function center(window)
  frame = window:screen():frame()
  frame.x = (frame.w / 2) - (frame.w / 4)
  frame.y = (frame.h / 2) - (frame.h / 4)
  frame.w = frame.w / 2
  frame.h = frame.h / 2
  window:setframe(frame)
end

hotkey.bind(mash, "f", function() tiling.togglefloat(center) end)

Layouts

These are the layouts that come with mjolnir.tiling:

Name Screenshot
fullscreen fullscreen
main-vertical main-vertical
main-horizontal main-horizontal
rows rows
columns columns
gp-vertical gp-vertical
gp-horizontal gp-horizontal

Contributing

Yes! Please :)

git clone https://github.com/nathankot/mjolnir.tiling.git
cd mjolnir.tiling
luarocks make <latest .rockspec name>

Contributors

Thanks <3

To-do

  • Better documentation
  • More layouts
  • Allow globally enabling/disabling layouts
  • Functions to move windows across spaces
  • Event-based tiling, although requires sdegutis/mjolnir#72

About

Add tiling window management powers to your mjolnir

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Lua 100.0%