Skip to content

avahe-kellenberger/nimdow

Repository files navigation

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

  1. Screenshots
  2. Installation
    1. Building from source
    2. Arch Linux (AUR)
  3. Config File
  4. Command Line Arguments
  5. Command Line Client
  6. Status Bar
  7. Issues with Java Applications
  8. Roadmap
  9. Testing Locally

Screenshots

Installation

Building from source

  1. Ensure you have nim (version 1.2.0 or higher) and nimble installed. My preferred method is to use choosenim to install these.
  2. Clone this repo
  3. Execute nimble install from the package directory to install dependencies
  4. Execute nimble release from the package directory to create a release build (The built binary will be in ./bin/nimdow)
  5. 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:

  1. ${XDG_CONFIG_HOME}/nimdow/config.toml
  2. ${HOME}/.config/nimdow/config.toml
  3. /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 or nimdow --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)

  1. Create a copy or symlink of the config file in $XDG_CONFIG_HOME/nimdow/config.toml
  2. Start up Xephyr: Xephyr -ac -screen 1920x1080 -br -reset -terminate 2> /dev/null :1 &
  3. Execute nimdow on the new display: DISPLAY=:1 ./nimdow