eng.md

July 30, 2026 · View on GitHub

GitHub last commit Repository size Repository size

Just Enough Shell

Built for everyday use, not for screenshots.


System Info
Component Value
OS NixOS 26.05
WM SwayFX / Hyprland / niri / DriftWM
Shell bash
Terminal Foot
Interface QuickShell
Screen Locker Hyprlock
Monitoring Btop
Audio PipeWire
Browser Zen browser
File Manager ranger / yazi / dolphin
Editor micro / helix
Theme zenburn
Icons Tela Gray
Bootloader Grub
Optimization Go binaries
theme changer matugen

-- About the project -- :

JES uses QuickShell for rendering the interface.

JES supports:

  • SwayFX
  • Hyprland
  • Niri
  • DriftWM
  • Any other WM via 3 scripts and one QML file
Niri has no transparency support and has a bug with workspaces on the bar due to its architecture.

The project has some optimization, but it hasn't been tested on weak hardware.
Go binaries are used for scripts where fast processing of large data streams matters — this keeps CPU usage at 5–10% (only JES - 1-2% CPU and ~400 MB RAM) idle instead of 35–45%.

The project has a simple plugin system, making it extensible.

JES was designed for desktop PCs, allowing it to be better tailored to those machines.
The author's monitor is UWQHD (3440×1440); tested resolutions: FHD (1920×1080) and above. (FHD is supported natively, but with minibar enabled there may be bugs, since the size doesn't change but the display model does.)
On those resolutions the bar has no issues with module placement.
Project supports multi-monitor setups.

The project uses bash with custom output, and updates faster for SwayFX and DriftWM, since it's oriented toward the author's everyday use.
This also gives the project longevity — as long as the author goes about his business, the project will keep evolving and improving.

For faster loading, the author chose not to bundle live wallpapers from the screenshots, leaving a link to them instead.

The zenburn theme does not apply to JES itself — only to external apps, tty (NixOS only), and similar. JES has a built-in generated theme + base16 theme support via base16.json.

JES is oriented not toward trends, but toward practicality and convenience in everyday use.

-- acknowledgements -- :

Thanks to Blxshell and its author for help with learning Quickshell and hosting the website.
Thanks to f026 for the first plugin for JES.
Thanks to DriftWM for help with DriftWM IPC, adding new features to the WM for JES, and in general for being supportive of the project.
Thanks to frosti-4 for the script for Arch Linux.

-- Roadmap -- :

[c] Add Hyprland support
[c] Add Niri support
[c] Add DriftWM support
[c] base16 theme support in JES
[c] Soft Material You
[c] Display info for devices connected via KDE Connect
[c] Nice screen picker
[c] Animated album art in the player when no cover is available
[c] Protection against static wallpapers with wrong format in the wallpaper picker
[c] Calendar widget
[c] Multi-monitor support
[c] Settings installer
[c] Neutral / vibrant style toggle
[c] Popup minimap for driftwm
[c] Add waypoints to map
[c] Add full map
[c] Add normal ui in full map
[c] Development of API for working with launcher
[c] Development of API for working with plugin center
[c] Weather widget
[c] Creating a full-fledged API
[c] Installing JES via flake
[c] Refactoring the underlying architecture
[i] Migrate Hyprland config to Lua
[i] Fix Niri
[p] Development of API for working with bar
[n] Dark / light theme toggle
c = completed; n = not completed; i = in progress; p = planned.

Who is JES for?

  • Desktop PCs with FHD+ resolution (the author uses UWQHD)
  • Users of SwayFX / Hyprland / Niri / DriftWM, or enthusiasts willing to invest time in initial setup (the shell itself works on any WM, but keybinds and tiling config won't be included)
  • Those who value performance and architecture over trends
  • Anyone who wants a pleasant, CPU/GPU-lightweight interface

If you fall into this audience — welcome. If not — this project might not be for you, and that's okay.

-- IMPORTANT -- :

  • Nvidia graphics cards work TERRIBLY, everything can freeze instantly for no reason, the author is not going to fix this issue, because it's problems on the driver side!
  • The author has no experience with Arch Linux; installation on Arch may be incorrect. If that's the case, please describe the issue in an Issue and, if possible, suggest a fix.
  • Installation instructions are at the very bottom.
  • The author is open to suggestions and helps with onboarding; for issues, open an Issue.
If you want live video wallpapers, there are both video wallpapers and shaders available
(the latter may work poorly with JES's auto theme generation)

Wallpapers from screenshots: click

JES structure

-- What you can configure in JES -- :

  • wm — auto, but for WMs not in the supported list you need to specify the name with a capital letter
  • wm_type — auto, but for unsupported WMs choose between workspaces or coordinates
  • mainRad — corner radius, default 10, works best in the range 0–25
  • barOnTop — control bar on top along with adjacent widgets, enabled by default
  • minibar — constrains the bar width to 1920px, disabled by default
  • BarHeight — bar height, default 30
  • fontSize — font size, default 17
  • fontFamily — font, default Mononoki Nerd Font Propo
  • custom_wallpaper_engine — disable the built-in wallpaper engine, default false
  • disableGenerate - replace JES matugen theme on base16, default false
  • doNotDisturb — silent mode, default false
  • timezone — the city for the weather widget; it is not present by default, the value is taken from the user-config.toml file of the NixOS configuration.
Note: config.toml lives in the Quickshell folder (~/.config/JES/)
The author left an alias in .bashrc — if you don't want to type the path, just run:
    jes-cli editConf
The alias uses micro; to quit press Ctrl+Q, to save press Ctrl+S

JES for DriftWM

-- Keybindings for SwayFX, Hyprland and Niri -- :

keybindingaction
super + efile manager
super + q | super + enterterminal
super + ppower buttons
super + 1-0 or super + scroll up | scroll downswitch workspaces
super + shift + 1-0 or super + shift + arrowsmove windows between workspaces
super + RMBresize windows
super + shift + arrows or super + LMBmove window
super + arrowsswitch between windows
super + alt + LMBtoggle window type: floating or tiling
super + wrestart the interface
homefullscreen screenshot
shift + homescreenshot of selected area
super + dopen app launcher
super + gcreate group
super + ctrl + gungroup windows
super + tabprevious workspace
capslock or shift + altswitch language
shift + capslocktoggle caps lock
super + spaceraise window above others
ctrl + /play | pause music
ctrl + .next track
ctrl + ,previous track
alt + pgupincrease brightness
alt + pgdndecrease brightness
alt + F9mute
alt + F10volume down
alt + F11volume up
alt + F12open | close player
  • To open the plugin center, right-click on the power button.
  • To open the calendar, right-click on the time; left-click swaps the time and date.

The screenshot key is configurable since not everyone has a convenient Home key — the author's keyboard doesn't have Print Screen either.

Keybindings for DriftWM

-- How JES looks -- :

Desktop

alt_image alt_image

Control bar (DriftWM version differs, see DriftWM_eng.md)

alt_image

Wallpaper picker

alt_image

Player

alt_image alt_image

Power buttons

alt_image

fastfetch

alt_image

Volume / audio popup

alt_image

App launcher

alt_image

Lock screen

alt_image alt_image

bash prompt

1 [02:00 - orflem:~]$  cd gits/just_enough_shell/
2 [02:00 - orflem:~/gits/just_enough_shell main]$  

command number, time, user, directory, git status (when inside a git-tracked project)

-- Plugins -- :

Installation

1. open ~/.config/JES/
2. drop the plugin folder there
3. open config.toml
4. add the following lines:
   [[plugin]]
   name = "plugin name" # data in property name from manifest.json
   active = true

Detailed plugin creation guide

Plugin Repository

Important: the repository is only available in English, as this part is heavily influenced by the project community, and translating all short descriptions into multiple languages is extremely difficult.

-- Installing JES -- :

NixOS clear

  • Install NixOS
  • run the installer:
nix-shell -p git --run "git clone https://github.com/ORFLEM/just_enough_shell.git && cd just_enough_shell && ./install.sh"
  • select full installation
  • reboot with reboot

NixOS develop

  • Install NixOS
  • run the installer:
nix-shell -p git --run "git clone https://github.com/ORFLEM/just_enough_shell.git && cd just_enough_shell && ./install.sh"
  • select installation of JES only
  • add to imports ./JES.nix and in the config
services.jes = {
  enable = true;
  users = [ " your user" ];
};
  • rebuild the system with the desired parameters
  • reboot with reboot

NixOS flake

  • in flake specify the following:
{
	inputs = {
    jes.url = "github:ORFLEM/just_enough_shell";
	}
	outputs = { your inputs, jes, ... }@inputs:
  let
    system = "x86_64-linux";
    hostname = "nixos";

    specialArgs = { inherit inputs system hostname; };

  in {
    nixosConfigurations.${hostname} = nixpkgs.lib.nixosSystem {
      inherit system specialArgs;
      modules = [
				jes.nixosModules.default
			];
		};
	};
}
  • rebuild the flake
  • in configuration.nix specify
services.jes = {
  enable = true;
  users = [ " your user" ];
};
  • rebuild NixOS

Arch Linux or Arch-based (may be incorrect; if so, please open an Issue)

  • Install Arch Linux (EndeavourOS is recommended for simplicity)
  • Start the installer:
git clone https://github.com/ORFLEM/just_enough_shell.git && cd just_enough_shell && ./install_arch.sh
  • In case of errors, install manually:
1. Install Arch Linux (EndeavourOS is recommended for simplicity)
2. Install yay or paru (yay: git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si)
3. Install official packages (sudo pacman -Syu && pacman -S $(cat ./installer/arch_official.txt))
4. Install AUR packages (yay -S $(cat ./installer/arch_aur.txt))
5. Install the zenburn theme for Qt and GTK
6. Optionally configure system themes (GTK/Qt) to zenburn and install the ter-v32n font
7. Back up user configs (cp -r ~/.config/ ~/backups/ && cp ~/.bashrc ~/backups)
8. Copy files from ".config/" to "~/.config" and from ".local/" to "~/.local" (cp -r ./.local/* ~/.local/ && cp -r ./.config/* ~/.config/ && cp ./.bashrc ~/.bashrc)
9. reboot

-- License -- :

Notifications were taken from the blxshell project and improved both visually and partially technically. License: GNU GPL v3. Worth checking out.

These configurations are distributed under the GNU GPL v3 license.

In plain terms:

  • You are free to use, study, and modify this code.
  • If you share your modifications or derivative work with others (e.g. by publishing a fork), you must make your source code open and available to everyone under the same license.

This ensures that all improvements and derivative works remain free and open, just like the original.

Full license text: LICENSE.

boosty

Created by _ORFLEM_