Skip to content

Instantly share code, notes, and snippets.

@zkat
Last active February 13, 2024 06:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zkat/beefc09ad8191dc7077290feceb19582 to your computer and use it in GitHub Desktop.
Save zkat/beefc09ad8191dc7077290feceb19582 to your computer and use it in GitHub Desktop.
Example Niri config using KDL v2
input {
touchpad {
tap
natural-scroll
}
mouse {
// natural-scroll
// accel-speed 0.2
// accel-profile "flat"
}
tablet {
// Set the name of the output (see below) which the tablet will map to.
// If this is unset or the output doesn't exist, the tablet maps to one of the
// existing outputs.
map-to-output eDP-1
}
}
output eDP-1 {
scale 2.0
transform normal
}
layout {
focus-ring {
width 2
active-color 127 200 255 255
inactive-color 80 80 80 255
}
border off {
width 4
active-color 255 200 127 255
inactive-color 80 80 80 255
}
preset-column-widths {
proportion 0.33333
proportion 0.5
proportion 0.66667
}
default-column-width { proportion 0.5 }
gaps 16
center-focused-column never
}
spawn-at-startup waybar
spawn-at-startup swaync
spawn-at-startup /usr/lib/polkit-kde-authentication-agent-1
spawn-at-startup wl-paste --type text --watch cliphist store
spawn-at-startup wl-paste --type image --watch cliphist store
spawn-at-startup swayidle timeout 300 "swaylock -f --clock --fade-in 1 --grace 30 --indicator-idle-visible &&\
systemctl suspend" \
lock "swaylock -f --clock --fade-in 1" \
before-sleep "swaylock -f --clock --fade-in 1"
spawn-at-startup blueman-applet
spawn-at-startup trayscale --hide-window
spawn-at-startup rclone mount OneDrive: OneDrive
spawn-at-startup rclone mount isabelle:data isabelle --allow-non-empty
spawn-at-startup hyprpaper
spawn-at-startup wluma
spawn-at-startup udiskie --tray
spawn-at-startup 1password
spawn-at-startup firefox
spawn-at-startup code
spawn-at-startup discord
spawn-at-startup slack
spawn-at-startup element-desktop
spawn-at-startup signal-desktop
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
// If the client will specifically ask for CSD, the request will be honored.
// Additionally, clients will be informed that they are tiled, removing some rounded corners.
// prefer-no-csd
// You can change the path where screenshots are saved.
// A ~ at the front will be expanded to the home directory.
// The path is formatted with strftime(3) to give you the screenshot date and time.
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
// You can also set this to null to disable saving screenshots to disk.
// screenshot-path null
// Settings for the "Important Hotkeys" overlay.
hotkey-overlay {
// Uncomment this line if you don't want to see the hotkey help at niri startup.
// skip-at-startup
}
binds {
// Keys consist of modifiers separated by + signs, followed by an XKB key name
// in the end. To find an XKB name for a particular key, you may use a program
// like wev.
//
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
// when running as a winit window.
//
// Most actions that you can bind here can also be invoked programmatically with
// `niri msg action do-something`.
// Mod-Shift-/, which is usually the same as Mod-?,
// shows a list of important hotkeys.
Mod Shift Slash { show-hotkey-overlay }
// Suggested binds for running programs: terminal, app launcher, screen locker.
Mod T { spawn kitty" }
Mod Space { spawn tofi-drun "--drun-launch=true" }
Mod L { spawn swaylock }
Mod Shift Space { spawn bash -c "tofi-run --prompt-text=exec: --require-match=false | xargs hyprctl dispatch exec --" }
Mod Shift Period { spawn emojimart }
Mod A { spawn swaync-client -t -sw }
Mod V { spawn bash -c "cliphist list | tofi | cliphist-decode | wl-copy" }
// You can also use a shell:
// Mod T { spawn bash -c "notify-send hello && exec alacritty" }
// Example volume keys mappings for PipeWire & WirePlumber.
XF86AudioRaiseVolume { spawn wpctl set-volume @DEFAULT_AUDIO_SINK@ "0.1+" }
XF86AudioLowerVolume { spawn wpctl set-volume @DEFAULT_AUDIO_SINK@ "0.1-" }
XF86AudioMute { spawn wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle }
Shift XF86AudioRaiseVolume { spawn wpctl set-volume @DEFAULT_AUDIO_SOURCE@ "0.1+" }
Shift XF86AudioLowerVolume { spawn wpctl set-volume @DEFAULT_AUDIO_SOURCE@ "0.1-" }
Shift XF86AudioMute { spawn wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle }
XF86AudioPlay { spawn playerctl play-pause }
XF86MonBrightnessDown { spawn brillo -q -U "5" }
XF86MonBrightnessUp { spawn brillo -q -A "5" }
Mod Q { close-window }
Mod Left { focus-column-left }
Mod Down { focus-window-down }
Mod Up { focus-window-up }
Mod Right { focus-column-right }
Mod H { focus-column-left }
Mod J { focus-window-down }
Mod K { focus-window-up }
Mod L { focus-column-right }
Mod Ctrl Left { move-column-left }
Mod Ctrl Down { move-window-down }
Mod Ctrl Up { move-window-up }
Mod Ctrl Right { move-column-right }
Mod Ctrl H { move-column-left }
Mod Ctrl J { move-window-down }
Mod Ctrl K { move-window-up }
Mod Ctrl L { move-column-right }
// Alternative commands that move across workspaces when reaching
// the first or last window in a column.
// Mod J { focus-window-or-workspace-down }
// Mod K { focus-window-or-workspace-up }
// Mod Ctrl J { move-window-down-or-to-workspace-down }
// Mod Ctrl K { move-window-up-or-to-workspace-up }
Mod Home { focus-column-first }
Mod End { focus-column-last }
Mod Ctrl Home { move-column-to-first }
Mod Ctrl End { move-column-to-last }
Mod Shift Left { focus-monitor-left }
Mod Shift Down { focus-monitor-down }
Mod Shift Up { focus-monitor-up }
Mod Shift Right { focus-monitor-right }
Mod Shift H { focus-monitor-left }
Mod Shift J { focus-monitor-down }
Mod Shift K { focus-monitor-up }
Mod Shift L { focus-monitor-right }
Mod Shift Ctrl Left { move-column-to-monitor-left }
Mod Shift Ctrl Down { move-column-to-monitor-down }
Mod Shift Ctrl Up { move-column-to-monitor-up }
Mod Shift Ctrl Right { move-column-to-monitor-right }
Mod Shift Ctrl H { move-column-to-monitor-left }
Mod Shift Ctrl J { move-column-to-monitor-down }
Mod Shift Ctrl K { move-column-to-monitor-up }
Mod Shift Ctrl L { move-column-to-monitor-right }
// Alternatively, there are commands to move just a single window:
// Mod Shift Ctrl Left { move-window-to-monitor-left }
// ...
// And you can also move a whole workspace to another monitor:
// Mod Shift Ctrl Left { move-workspace-to-monitor-left }
// ...
Mod Page_Down { focus-workspace-down }
Mod Page_Up { focus-workspace-up }
Mod U { focus-workspace-down }
Mod I { focus-workspace-up }
Mod Ctrl Page_Down { move-column-to-workspace-down }
Mod Ctrl Page_Up { move-column-to-workspace-up }
Mod Ctrl U { move-column-to-workspace-down }
Mod Ctrl I { move-column-to-workspace-up }
// Alternatively, there are commands to move just a single window:
// Mod Ctrl Page_Down { move-window-to-workspace-down }
// ...
Mod Shift Page_Down { move-workspace-down }
Mod Shift Page_Up { move-workspace-up }
Mod Shift U { move-workspace-down }
Mod Shift I { move-workspace-up }
Mod 1 { focus-workspace 1 }
Mod 2 { focus-workspace 2 }
Mod 3 { focus-workspace 3 }
Mod 4 { focus-workspace 4 }
Mod 5 { focus-workspace 5 }
Mod 6 { focus-workspace 6 }
Mod 7 { focus-workspace 7 }
Mod 8 { focus-workspace 8 }
Mod 9 { focus-workspace 9 }
Mod Ctrl 1 { move-column-to-workspace 1 }
Mod Ctrl 2 { move-column-to-workspace 2 }
Mod Ctrl 3 { move-column-to-workspace 3 }
Mod Ctrl 4 { move-column-to-workspace 4 }
Mod Ctrl 5 { move-column-to-workspace 5 }
Mod Ctrl 6 { move-column-to-workspace 6 }
Mod Ctrl 7 { move-column-to-workspace 7 }
Mod Ctrl 8 { move-column-to-workspace 8 }
Mod Ctrl 9 { move-column-to-workspace 9 }
// Alternatively, there are commands to move just a single window:
// Mod Ctrl 1 { move-window-to-workspace 1 }
Mod Comma { consume-window-into-column }
Mod Period { expel-window-from-column }
// There are also commands that consume or expel a single window to the side.
// Mod BracketLeft { consume-or-expel-window-left }
// Mod BracketRight { consume-or-expel-window-right }
Mod R { switch-preset-column-width }
Mod F { maximize-column }
Mod Shift F { fullscreen-window }
Mod C { center-column }
// Finer width adjustments.
// This command can also:
// * set width in pixels: "1000"
// * adjust width in pixels: "-5" or " 5"
// * set width as a percentage of screen width: "25%"
// * adjust width as a percentage of screen width: "-10%" or " 10%"
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
// set-column-width "100" will make the column occupy 200 physical screen pixels.
Mod Minus { set-column-width "-10%" }
Mod Equal { set-column-width "+10%" }
// Finer height adjustments when in column with other windows.
Mod Shift Minus { set-window-height "-10%" }
Mod Shift Equal { set-window-height "+10%" }
// Actions to switch layouts.
// Note: if you uncomment these, make sure you do NOT have
// a matching layout switch hotkey configured in xkb options above.
// Having both at once on the same hotkey will break the switching,
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
// Mod Space { switch-layout "next" }
// Mod Shift Space { switch-layout "prev" }
Print { screenshot }
Ctrl Print { screenshot-screen }
Alt Print { screenshot-window }
// The quit action will show a confirmation dialog to avoid accidental exits.
// If you want to skip the confirmation dialog, set the flag like so:
// Mod Shift E { quit skip-confirmation=true }
Mod Shift E { quit }
Mod Shift P { power-off-monitors }
Mod Shift Ctrl T { toggle-debug-tint }
}
// Settings for debugging. Not meant for normal use.
// These can change or stop working at any point with little notice.
debug {
// Make niri take over its DBus services even if it's not running as a session.
// Useful for testing screen recording changes without having to relogin.
// The main niri instance will *not* currently take back the services; so you will
// need to relogin in the end.
// dbus-interfaces-in-non-session-instances
// Wait until every frame is done rendering before handing it over to DRM.
// wait-for-frame-completion-before-queueing
// Enable direct scanout into overlay planes.
// May cause frame drops during some animations on some hardware.
// enable-overlay-planes
// Disable the use of the cursor plane.
// The cursor will be rendered together with the rest of the frame.
// disable-cursor-plane
// Override the DRM device that niri will use for all rendering.
// render-drm-device "/dev/dri/renderD129"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment