In Finnish, "nide" means a book or a volume and refers to the binding that ties the pages together. In English, "nide" means a group of pheasants. Similarly, NiDE ties a collection of amazing software packages together to form a desktop environment.
NiDE is a light keyboard-driven Linux desktop environment installed in the home directory. NiDE is constructed from a collection of amazing software packages to provide a full desktop-environment experience similar to GNOME, KDE, XFCE and many other desktop environments. NiDE aims to provide a simplistic and light but powerful desktop environment with good support for keyboard interface and tiling windows. It can be easily installed and configured in the home directory without system administrator. NiDE is installed in a separate directory so it won't mess up your other desktop environments and existing configurations.
NOTE: Previously NiDE was called "NixOS i3 Desktop Environment" and it was a
configuration just for NixOS. That is deprecated but still available in
nixos-nide
branch. Currently, NiDE works on any Linux operating system and it
can be installed in the user home directory without root. But there is still
good support for NixOS similar to what it used to be.
NOTE: NiDE is currently very much work in progress and it's mainly configured for my personal needs at the moment. There are still many things that are missing or aren't working properly. Also, no effort has yet been put to the visual appearance.
NiDE is constructed by putting together numerous amazing open-source software packages. The point of NiDE is to select these great packages and put them together with a decent default configuration. When selecting the software packages, the following guidelines are taken into account if there are multiple options. The software package should preferably:
- not be bloated nor overly complex but still do well what it's supposed to do
- have good keyboard user interface
- be configurable with text files
- use standards for things it does
- work well with a tiling window manager
- not fill the window with graphical garbage (e.g., large menu/icon bars) but rather try to maximize the space for the actual content
The following non-exhaustive list mentions some of the awesome software packages used to form NiDE:
- i3 for window management
- Polybar as the status bar
- Rofi as a generic menu and launcher
- Pulseaudio for sound management
- NetworkManager for network connection management
- pass for storing passwords and passphrases
- pass-secret-service for integrating pass with the standard secret service D-Bus interface.
- Dunst for showing desktop notifications
- Dex for autostarting desktop applications when logging in
- Alacritty as the default terminal
- Simple X Image Viewer (sxiv) as the default image viewer
- Luakit as the default browser with vim-like keybindings and minimal visual garbage
- udiskie for automounting removable media
- kbdd for managing keyboard layouts per window
- light for controlling the screen backlight
- actkbd for keybindings that work also in virtual terminals
- XSecureLock as a lock screen
- autorandr for managing monitor configurations automatically
- .. and many other amazing open-source software packages
Some small possibly interesting details:
- Keyboard layouts are window-specific.
- Computer locking with
Ctrl+Alt+L
works also in virtual terminals if the user has logged in. - Brightness and volume control keybindings work also in virtual terminals.
Copy this repository under ~/.nide
. You can use git
to clone:
git clone https://github.com/jluttine/NiDE ~/.nide
Alternatively, you can download a tarball of your choice
- Releases: https://github.com/jluttine/NiDE/releases
- Latest development snapshot: https://github.com/jluttine/NiDE/archive/master.zip
Unpack the tarball to ~/.nide
.
Now you just need to run ~/.nide/bin/nide
as your X session startup script.
For instance, use it as your ~/.xsession
script and at log-in time choose a
session that will run that script (at least in NixOS xterm
session does that):
ln -s ~/.nide/bin/nide ~/.xsession
Other (and better) ideas of how to launch NiDE are welcome!
The packages NiDE uses need to be installed for NiDE to work. How to install those packages depends on the Linux distro, see below for some examples.
There are two ways to install the dependencies on NixOS as described below:
In ~/.nide
directory, run:
nix-build
Now, there should be ~/.nide/result
directory (or, more precisely, a symlink
to a directory) that contains the dependencies. When NiDE is launched, it'll add
those paths to relevant environment variables, so they are available (only) when
running NiDE without affecting your entire system or other desktop environments.
This also makes it possible to update the environment while running it without
needing to restart NiDE because only the target of the symlink changes.
Note that with this approach, you need to take care of updating the packages
manually (i.e., running nix-build
) because they won't be updated automatically
when the system is updated. This can have its pros and cons but it's something
to be aware of.
In your configuration.nix
, import NiDE configuration and add the packages:
{ pkgs, ...}:
let
nide = builtins.fetchTarball "https://github.com/jluttine/NiDE/archive/master.tar.gz";
in {
imports = [
...
"${nide}/nix/configuration.nix"
];
config = {
...
services.xserver.desktopManager.nide = {
enable = true;
installPackages = true;
};
nix.extraOptions = ''
tarball-ttl = 0
'';
};
}
The nix extra option sets tarball cache to zero seconds, so the tarball isn't
cached but always downloaded. However, it's recommended to pin the tarball to a
specific commit or tag and then set sha256
:
nide = builtins.fetchTarball {
url = "https://github.com/jluttine/NiDE/archive/SOME_REV_HERE.tar.gz";
sha256 = "SHA256 HASH HERE";
};
That isn't done here because it's difficult to maintain in this README file. Of course, you can also use your local check-out of the repository and import from that path instead of GitHub.
Note that it is not mandatory to install the packages system wide: set
installPackages = false;
to disable. Personally, I import configuration.nix
to enable configurations that cannot be done by the user in the home directory,
but I disable installPackages
because I want to maintain those packages in the
home directory as described in the previous section.
TODO
The user is assumed to be familiar with basic i3 usage. Here are some important keybindings that are configured in NiDE:
Super
is the i3 modifier key.Super+Space
opens the Rofi application launcher.Super+Esc
closes the current window.Super+Enter
opens a terminal.Ctrl+Alt+L
locks the computer.Ctrl+Alt+Del
opens a system power menu.Super+Shift+Space
switches the keyboard layout.Super+h/j/k/l
move focus to another window.Super+Shift+h/j/k/l
move the focused window.Super+w/e/s
switch to tabbed/split/stacked mode.Super+1/2/3/...
move to workspace 1/2/3/...Super+Shift+1/2/3/...
move window to workspace 1/2/3/...
Also, Caps Lock
key is used as Esc
.
- Use Dhall to provide a high-level configuration syntax for NiDE and then compile these to the actual dotfiles that the various software package read. Similarly as nix is used to configure NixOS.
- Make keybindings configurable. Almost everything is now hard-coded.
- Configure solarized dark and light color themes for the desktop environment.
- Allow other keyboard layouts than
fi
andus
. - Find a decent graphical email client.
- Add X11 lock screen and dimmer.
- Define XDG default applications.
- Define user XDG directories.
- Run/source correct dotfiles from the user home directory (e.g.,
.profile
). - Add icons
- Customize rofi-file-browser appearance after marvinkreis/rofi-file-browser-extended#24
- Overlay notifications for brightness and volume:
- https://www.reddit.com/r/unixporn/comments/9i5seg/brightness_and_volume_notifications_with_dunst_oc/
- https://askubuntu.com/questions/670602/event-handler-even-more-low-level-than-acpid
- https://stackoverflow.com/questions/34936783/watch-for-volume-changes-in-alsa-pulseaudio#comment119780742_57722672
- https://wiki.archlinux.org/title/Dunst#Using_dunstify_as_volume/brightness_level_indicator
Contributions are most welcome. Just open an issue or a pull request. Feel free to suggest better default applications or configurations.
The following copyright information holds for the files in this git repository. NixOS and all the packages that are used by NiDE have their own licenses.
Copyright (C) 2019-2020 Jaakko Luttinen
NiDE is licensed under the MIT License.