nimdow
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
Table of Contents
- Screenshots
- Installation
- Config File
- Command Line Arguments
- Command Line Client
- Status Bar
- Issues with Java Applications
- Roadmap
- Testing Locally
Screenshots
Installation
Building from source
- Ensure you have
nim
(version 1.2.0 or higher) andnimble
installed. My preferred method is to usechoosenim
to install these. - Clone this repo
- Execute
nimble install
from the package directory to install dependencies - 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
.
AUR
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
Nixos
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).
Config File
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.
Command Line Arguments
- Providing an alternative config file, e.g.
nimdow --config ./some-config.toml
- Version information:
nimdow -v
ornimdow --version
Command Line Client
Nimdow controls can be executed via the cli client.
See the wiki page for a list of commands, or read the man page.
Status Bar
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
Setting the status
See the wiki page about statuses.
Emojis Not showing up / some characters invisible
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.
Issues with Java Applications
The fix
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.
Why is this happening?
The standard Java GUI toolkit has a hard-coded list of "non-reparenting" window managers. Nimdow is not (yet) included in this list.
Roadmap
See the 1.0 release project board
Testing locally (for development)
- 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