A lightweight, external sidebar manager for the Niri window manager.
niri-sidebar allows you to toggle any window into a "floating sidebar" stack on the right side of your screen. It automatically handles resizing, positioning, and stacking, keeping your main workspace clean while keeping utility apps (terminals, music players, chats) accessible.
https://github.com/user-attachments/assets/46f51b18-d85b-4d79-9c44-63e63649707a
niri-sidebar-linux-x86_64).niri-sidebar, make it executable, and move it to your path:# Example for x86_64
mv niri-sidebar-linux-x86_64 niri-sidebar
chmod +x niri-sidebar
# Move to a directory in your PATH
sudo mv niri-sidebar /usr/local/bin/
# OR for a local installation:
mkdir -p ~/.local/bin
mv niri-sidebar ~/.local/bin/
git clone https://github.com/Vigintillionn/niri-sidebar
cd niri-sidebar
cargo build --release
cp target/release/niri-sidebar ~/.local/bin/
An unofficial AUR package is available:
yay -S niri-sidebar-git
Note: This package is community-maintained on the AUR and is not officially maintained by the niri-sidebar project. Please review the PKGBUILD before installing.
xbps-src)A Void Linux package is available as a template in the official void-packages repository.
void-packages repository (if you haven’t already):git clone https://github.com/void-linux/void-packages.git
cd void-packages
./xbps-src binary-bootstrap
niri-sidebar package./xbps-src pkg niri-sidebar
niri-sidebar packagesudo xbps-install --repository=hostdir/binpkgs niri-sidebar
Note: This package is community-maintained in the Void Linux community repository and is not officially maintained by the niri-sidebar project. Please review the template before installing.
Add the following bindings to your niri config.kdl file.
Important: These examples assume you installed the tool to ~/.local/bin. If you installed it elsewhere, update the paths accordingly.
binds {
// Toggle the focused window into/out of the sidebar
Mod+S { spawn-sh "~/.local/bin/niri-sidebar toggle-window"; }
// Toggle sidebar visibility (hide/show)
Mod+Shift+S { spawn-sh "~/.local/bin/niri-sidebar toggle-visibility"; }
// Flip the order of the sidebar
Mod+Ctrl+S { spawn-sh "~/.local/bin/niri-sidebar flip"; }
// Force reorder (useful if something gets misaligned manually)
Mod+Alt+R { spawn-sh "~/.local/bin/niri-sidebar reorder"; }
}
In order for your sidebar to stay consistent and gap free, you want to add the following to your startup scripts
spawn-at-startup "~/.local/bin/niri-sidebar" "listen"
This will spawn a daemon to listen for window close events and reorder the sidebar if the closed window was part of it.
Some applications enforce a minimum window size that is larger than your sidebar configuration, which can cause windows to overlap or look broken. Add this rule to force them to respect the sidebar size:
window-rule {
match is-floating=true
min-width 100
min-height 100
}
Run niri-sidebar init to generate a config.toml file located at ~/.config/niri-sidebar.
# niri-sidebar configuration
[geometry]
# Width of the sidebar in pixels
width = 400
# Height of the sidebar windows
height = 335
# Gap between windows in the stack
gap = 10
[margins]
# Margins are default to 0 if left out
# Space from the top of the screen
top = 50
# Space from the right edge of the screen
right = 10
# Space from the left edge of the screen
left = 10
# Space from the bottom of the screen
bottom = 10
[interaction]
# Where to put the sidebar, can be "left", "right", "top" or "bottom"
# Defaults to "right"
position = "right"
# Width of windows when sidebar is hidden in pixels
peek = 10
# Width of window when sidebar is hidden but window is focused in pixels
# set this equal to peek to disable this feature
# set this equal to sidebar_width + offset_right to make focused windows "unhide"
# Optional and defaults to peek if ommitted
focus_peek = 50
# Whether the sidebar should follow if you switch workspaces
sticky = false
Window rules allow you to customize behavior for specific windows based on their app_id or title. Rules are evaluated in order, and the first matching rule is applied. If a field is omitted in a rule, the global default configuration is used.
# Example window rule
# all fields are optional if not given a default from other configs will be used
[[window_rule]]
app_id = "firefox" # regex, if not set will match all app_id's
title = "^Picture-in-Picture$" # regex, if not set will match no matter the title
width = 700
height = 400
focus_peek = 710
peek = 10
auto_add = true # defaults to false
Mod+S on any window to snap it into the sidebar. Press it again to return it to your normal tiling layout.Mod+Shift+S to tuck the sidebar away. It will stick out slightly (configured by peek) so you know it's there.This project is licensed under the MIT License - see the LICENSE file for details.
$ claude mcp add niri-sidebar \
-- python -m otcore.mcp_server <graph>