A window manager written in Nim
NOTE: Nimdow is in Beta but is very usable. Please report any bugs you may find.
I am using this project to learn Nim, x11, and to replace my build of dwm (written in C).
- Ensure you have
nim
andnimble
installed. My preferred method is to usechoosenim
to install these. - Clone this repo
- Execute
nimble release
from the package directory to create a release build (The built binary will be in./bin/nimdow
) - Copy the default config (
config.default.toml
) to${XDG_CONFIG_HOME}/nimdow/config.toml
, OR to${HOME}/.config/nimdow/config.toml
. Nimdow will NOT run if you skip this step.
If you are on an Arch Linux based system, use nimdow-bin
in the AUR to install a pre-built binary.
Currently the only argument that may be provided is a config file path. This was added for testing purposes.
E.g. $ nimdow ./some-config.toml
If no argument is provided, we use the config file mentioned in the Building from source section.
The status bar displays:
- The available tags on the top left
- The focused window's title in the center
- The status (set by the user) on the right
The status is the text read from the root window's name property, which can be set with xsetroot -name "My status"
.
This is the exact same way dwm
manages its status. I recommend reading their page about setting statuses.
- Multiple tags (single tag viewed at one time)
- Fullscreen windows
- Multihead support
- User configuration file loaded from $XDG_CONFIG_HOME (or $HOME/.config)
- Status bar integration
- Floating window support
- Move windows with super + left click
- Resize windows with super + right click drag
- Layouts:
- Master/stack
- Keybindings:
- Close window
- Toggle fullscreen
- Navigate windows
- Navigate tags
- Move windows in stack
- Move windows between tags
- TBA (partial list, still in discussion)
- Layouts
- Monocle
- Keybindings:
- Move window between monitors
- Add/remove window per tag
- View multiple tags
- Assign single window to multiple tags
- Swap tags between monitors
- Reload Nimdow (to apply configuration changes)
- Switch layout to master/stack
- Switch layout to monocle
- Create a copy or symlink of the config file in
$XDG_CONFIG_HOME/nimdow/config.toml
- Start up Xephyr:
Xephyr -ac -screen 1920x1080 -br -reset -terminate 2> /dev/null :1 &
- Execute nimdow on the new display:
DISPLAY=:1 ./nimdow