howm

command module
v0.0.0-...-95e5f11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 20, 2020 License: MIT Imports: 13 Imported by: 0

README

rowm

rowm is a hybrid tiling/floating window manager, aiming to replicate the ergonamics of terminator terminal emulator, but applied to all windows.

A short video of what it looks like here.

Installation

While I use rowm in my day to day, there is no guarantee of stability so use at your own risk!

To install, you have two options:

  • If you have docker installed, you can run sudo ./docker-install.sh.
  • If you have go and go get installed, you can run sudo ./go-install.sh.

After installing, restart your computer (logging out may not be enough), and the option to use rowm as your window manager should show up as a setting in your login screen.

It's generally not wise to run random shell scripts with sudo but these should be pretty easy to inspect.

Default Configuration

All key combinations described here are easily editable in config.go. Mod4 is used a lot, which is commonly assigned to the Windows key.

Logging out

Press Mod4-Backspace

Builtin Commands

Some commands have builtin keyboard shortcuts, namely:

Mod4-t: x-terminal-emulator

Mod4-w: google-chrome

Mod4-p: XDG_CURRENT_DESKTOP=GNOME gnome-control-center

Mod4-o: xdg-open .

More commands can be added to the builtin commands in config.go.

Mod4-f brings up a dialog to run an arbitrary command.

Window controls

Mod4-up/left/right/down will move the window to anchor points around the screen, as well as keep moving them across other screens if they are available.

Mod4-d will close a frame.

Mod4-x will toogle a frame as expanded, making it the same size as its container.

Mod4-h will hide the container decorations.

Mod4-q will pop out a frame into its own container.

Alt-Tab/Alt-Shift-Tab works like you'd expect.

Mod-Shift-[0-9] assigns a goto hotkey to the selected frame, so that when you press the equivalent Mod4-[0-9] it will minimize/unminimize that window.

Mod4-Tab and Mod4-asciitilde will cycle the focus in the frames inside of a window.

If an internal video is being fullscreened, sometimes you may need to resize or move the window a little to have the internal video fill the screen.

Taskbar

The taskbar can be toggled with Mod4-s. Mod4-Shift-down will minimize the focused container to the taskbar. Mod4-Shift-left/right will scroll the taskbar if lots of windows are open.

The display time format can be changed in config.go, but things may be a bit funky if the time format does not have constant size.

Background image

Any photo named $USER/.config/rowm/bg.png will be used as a background image. You can change the path in config.go.

Splitting

To subdivide a window, press Mod4-e for a horizontal split or Mod4-r for a vertical split. A command window will pop up to take in a command to launch, but you can use the keyboard shortcuts to launch a builtin command, bypassing the command prompt.

To split for existing frames or containers:

Mod4-c selects a frame for yanking.

Mod4-Shift-c selects a container for yanking.

Mod4-v on a different frame will add the selection as a horizontal child. Mod4-b on a different frame will add the selection as a vertical child.

Volume

Can be controlled with mute button to mute, and volume up/down to raise/lower volume. If you do not have these buttons you can change the mapping in config.go

Brightness

If brightness controls are not working, check what folder exists in /sys/class/backlight/ and change the Backlight value in config.go to match.

Switching the scroll direction

Edit the following file /usr/share/X11/xorg.conf.d/40-libinput.conf. Find the section with the touchpad identifier and add the following line.

Section "InputClass"
        Identifier "libinput touchpad catchall"
        ...
        Option "NaturalScrolling" "True"
EndSection

You can also switch it for mice by changing the pointer catchall.

Monitor hotplugging

If you are planning on hotplugging monitors, it is recommended you install arandr and autorandr.

arandr is a graphical utility to help you configure your screens. Once you have them configured how you like, use autorandr --save <profile> to save the configuration and autorandr --default <profile> to make it default. Once this is done the monitor setup should stay sticky through disconnects and reconnects.

Logging

To tail the logs run journalctl -f /usr/lib/gdm3/gdm-x-session.

Documentation

Overview

rowm is a hybrid tiling manager aiming to replicate the ergonomics of terminator and tmux. For more information on the usage, please read the README instead.

main.go - entrypoint, initializes connection to X and connects root callbacks root/ - callbacks for the root window are defined here frame/ - the majority of the logic is in this folder, defines the tree window structure and wrapping decorations sideloop/ - utilities for running code in line with the X event loop from xgbutil resources/ - non compiled data resources cmd/rowmbright/ - a utility for changing backlight brightness without root privileges ext/ - misc bits and bobs missing in either the standard library or xgbutil

dev.sh - starts up a container for developing in (required for running compile.sh or test.sh) compile.sh - go gets/builds rowm in container clean.sh - gets rid of container created by dev.sh exec.sh - execs into container created by dev.sh install.sh - (requires root) builds rowm and installs files to the system (only tested on ubuntu18.04) test.sh - (requires xephyr to be installed and dev.sh to have been run) opens a nested x server with rowm loaded for trying out

Directories

Path Synopsis
cmd
rowmbright
rowmbright is a utility to modify the backlight power.
rowmbright is a utility to modify the backlight power.
frame is the package that contains the definition of the tree window structure and decoration handling that drives rowm.
frame is the package that contains the definition of the tree window structure and decoration handling that drives rowm.
root contains the files that define the callbacks on the root window base.go - minimal callbacks such as locking the screen, focusing, shutting down the window manager, and creating a window brightness.go - callbacks for raising/lowering the backlight choose.go - callbacks implementing an alt-tab like interface launchers.go - callbacks for prompts that launch new windows (including the paritioning launch) monitor.go - a side event loop that monitors for changes of the screen configuration volume.go - callbacks for raising/lowering/muting volume taskbar.go - callbacks for interacting with the taskbar
root contains the files that define the callbacks on the root window base.go - minimal callbacks such as locking the screen, focusing, shutting down the window manager, and creating a window brightness.go - callbacks for raising/lowering the backlight choose.go - callbacks implementing an alt-tab like interface launchers.go - callbacks for prompts that launch new windows (including the paritioning launch) monitor.go - a side event loop that monitors for changes of the screen configuration volume.go - callbacks for raising/lowering/muting volume taskbar.go - callbacks for interacting with the taskbar
sideloop provides utilities for inserting either one-time or repeating work into the X event loop.
sideloop provides utilities for inserting either one-time or repeating work into the X event loop.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL