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).
Discord community: https://discord.gg/vPCumzeqqa
See the progress of development in the local Kanban Board
- Screenshots
- Installation
- Config File
- Command Line Arguments
- Command Line Client
- Status Bar
- Issues with Java Applications
- Roadmap
- Testing Locally
- Ensure you have
nim(version 1.2.0 or higher) andnimbleinstalled. My preferred method is to usechoosenimto install these. - Clone this repo
- Execute
nimble installfrom the package directory to install dependencies - Execute
nimble releasefrom 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.
If you are on an Arch Linux based system, use nimdow-bin in the AUR to install a pre-built binary.
Default config is stored at /usr/share/nimdow/config.default.toml
If you are on Nixos, you can set services.xserver.windowManager.nimdow.enable=true; to install and
enable nimdow in your login manager. (in nixos-unstable or in stable from 2023-05 release).
Nimdow searches for a config file in 3 locations in this order:
${XDG_CONFIG_HOME}/nimdow/config.toml${HOME}/.config/nimdow/config.toml/usr/share/nimdow/config.default.toml
If no config file is found, Nimdow will not launch.
See the wiki for information about the specifics of the config file.
- Providing an alternative config file, e.g.
nimdow --config ./some-config.toml - Version information:
nimdow -vornimdow --version
Nimdow controls can be executed via the cli client.
See the wiki page for a list of commands, or read the man page.
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
See the wiki page about statuses.
In short, there's a bug in the xft library most distros use.
This fork of xft has a fix for emojis and other font issues.
If using an Arch Linux based distro, there is libxft-bgra-git in the AUR.
There are multiple fixes, per the arch wiki.
Fix #1:
For jre7-openjdk or jre8-openjdk, append the line export _JAVA_AWT_WM_NONREPARENTING=1 in /etc/profile.d/jre.sh.
Then, source the file /etc/profile.d/jre.sh or log out and log back in.
Fix #2:
For last version of JDK append line export AWT_TOOLKIT=MToolkit in ~/.xinitrc before exec nimdow.
Fix #3:
Try to use wmname with line wmname compiz in your ~/.xinitrc.
Fix #4:
For Oracle's JRE/JDK, use SetWMName.
However,
its effect may be canceled when also using XMonad.Hooks.EwmhDesktops.
In this case,
appending >> setWMName "LG3D" to the LogHook may help.
The standard Java GUI toolkit has a hard-coded list of "non-reparenting" window managers. Nimdow is not (yet) included in this list.
See the 1.0 release project board
- 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


