GithubHelp home page GithubHelp logo

jluttine / nide Goto Github PK

View Code? Open in Web Editor NEW
32.0 3.0 0.0 90 KB

Niche i3 Desktop Environment: Keyboard-driven DE installed in the home directory

License: MIT License

Nix 70.26% Shell 29.74%
i3 desktop-environment keyboard-interface nixos

nide's Introduction

NiDE - Niche i3 Desktop Environment

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.

Overview

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.

Installation

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

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.

Nix/NixOS

There are two ways to install the dependencies on NixOS as described below:

Home-directory installation of dependencies

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.

System-wide installation of dependencies

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.

Ubuntu and others

TODO

Usage

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.

TODO

Contributions

Contributions are most welcome. Just open an issue or a pull request. Feel free to suggest better default applications or configurations.

Copyright

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.

nide's People

Contributors

jluttine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

nide's Issues

After login, only seeing xterm

Hey folks, noob question here: Using nixos, I've struggled to get DM's like this to work. When I login, I just get a xterm screen.

My setup:

I'm new to NixOS, so I'm struggling to with where to find the logs to see what went wrong. The only thing in my ~/.xsesssion-error is:

/nix/store/x89cwymkbkl8hfnqb60zqnw4n07yi14x-lesspipe-2.08/bin/.lesspipe.sh-wrapped: line 199: strings: command not found

I'm sure this is something simple/stupid, but could somebody help me pull this together and get it working? I could use the education.

Autorandr failing

After waking up from from suspend and if attaching/detaching monitors while in the lock screen, autorandr fails and won't anymore work even after opening the lock screen.

TODO: Add more details.

Udiskie can't find file browser

Udiskie shows the following in the logs:

udiskie[1705]: Can't find file browser: 'xdg-open'. You may want to change the value for the '-f' option.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.