Repository navigation
Making a window sticky makes it un-focusable with "switch-focus-between-floating-and-tiling" action #51
Copy link
Copy link
Open
Labels
bugSomething isn't workingSomething isn't workingtheme: input-bindsBinds, chords and modes, multi-action binds, gestures, runtime device togglesBinds, chords and modes, multi-action binds, gestures, runtime device toggles
Description
What happened
I have action toggle-window-sticky set with the keybind Mod+T.
Making a window sticky results in the floating window & the tiled window under it to have a "focused outline".
In addition to not being focusable with the switch-focus-between-floating-and-tiling keybind, the floating sticky window does not respond to other actions such as center-column.
In order to focus the floating sticky window i found 2 ways:
- Use the Alt+Tab (
next-window) keybind to switch focus to the window. - Move the mouse to the window & change the focus to it.
Theme
Input & binds
Config
input.kdl
// ────────────── Input Configuration ──────────────
// https://niri-wm.github.io/niri/Configuration%3A-Input
input {
keyboard {
xkb {
//If you want to overwrite your keyboard layout,
// uncomment the line below and change the layout accordingly.
//layout "us" // Use the American keyboard layout
}
numlock // Enable numlock on startup
}
touchpad {
tap // Enable tap-to-click
// natural-scroll // Enable natural (macOS-style) scrolling
}
mouse {
// If you want to disable Mouse Acceleration,
// uncomment the lines below.
accel-profile "flat"
//accel-speed 0.0
}
tablet {
// off
map-to-output "DP-2"
// Rotation:
//calibration-matrix 1.0 0.0 0.0 0.0 1.0 0.0
}
focus-follows-mouse // Automatically focus windows under the mouse pointer
workspace-auto-back-and-forth // Enable workspace back & forth switching
}misc.kdl
// Using niri fork: https://github.com/barrulus/biri
// Which merges PR niri/#2997
// https://github.com/argosnothing/niri-scratchpad-rs (hidden-workspaces)
workspace "stash" {
hidden true
}
prefer-no-csd
screenshot-path null
environment {
ELECTRON_OZONE_PLATFORM_HINT "auto"
QT_QPA_PLATFORM "wayland"
QT_QPA_PLATFORMTHEME "gtk3"
QT_WAYLAND_DISABLE_WINDOWDECORATION "1"
XDG_CURRENT_DESKTOP "niri"
XDG_SESSION_TYPE "wayland"
}
cursor {
xcursor-theme "capitaine-cursors"
xcursor-size 24
}
blur {
passes 2 // more passes = stronger blur (default: 3)
offset 3.0 // sample distance per pass (default: 3.0)
noise 0.03 // grain overlay (default: 0.02)
saturation 1.0 // color saturation boost (default: 1.5)
}
debug {
// Allows notification actions and window activation from Noctalia.
honor-xdg-activation-with-invalid-serial
}
hotkey-overlay {
//skip-at-startup
}rules.kdl
window-rule {
geometry-corner-radius 12 // Set every window radius to 12
clip-to-geometry true
background-effect {
blur true
xray false
}
}
// Floating Noctalia settings window.
window-rule {
match app-id="dev.noctalia.Noctalia"
open-floating true
default-column-width { fixed 1060; }
default-window-height { fixed 920; }
}
// if you use steam you will probably like these
window-rule {
match app-id="steam"
exclude title=r#"^[Ss]team$"#
open-floating true
}
window-rule {
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
default-floating-position x=10 y=10 relative-to="bottom-right"
open-focused false
}
layer-rule {
match namespace="^noctalia-wallpaper"
place-within-backdrop true
}
layer-rule {
match namespace="^noctalia-(bar-[^\"]+|notification|dock|panel|attached-panel|osd)$"
background-effect {
xray false
// blur false
}
}
// Open on main display
window-rule {
match app-id=r#"^steam_app_.*$"#
open-on-output "DP-2"
open-fullscreen true
open-floating false
}
// Open on 2nd display
window-rule {
match app-id=r#"^steam$"#
match app-id="com.github.th-ch.youtube-music"
match app-id="vesktop"
open-on-output "DP-3"
}
window-rule {
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
open-floating true
default-column-width { proportion 0.3; }
default-window-height { proportion 0.310; }
}
// Scratchpads (with niri-scratchpad-rs)
window-rule {
match title="Yazi Scratchpad"
open-floating true
default-floating-position x=0 y=20 relative-to="top"
default-column-width { fixed 1060; }
default-window-height { fixed 1000; }
}
window-rule {
match title="Neovim Scratchpad"
open-floating true
default-floating-position x=0 y=30 relative-to="top"
default-column-width { fixed 1060; }
default-window-height { fixed 1000; }
}
window-rule {
match title="Alacritty Scratchpad"
open-floating true
default-floating-position x=0 y=40 relative-to="top"
default-column-width { fixed 1060; }
default-window-height { fixed 1000; }
}
window-rule {
match title="Wiremix Scratchpad"
open-floating true
default-column-width { fixed 870; }
default-window-height { fixed 540; }
}
// Focused floating window
window-rule {
match app-id="com.gabm.satty"
open-floating true
default-column-width { proportion 0.97; }
default-window-height { proportion 0.97; }
}
window-rule {
match title="File chooser"
match title="File view"
open-floating true
default-floating-position x=0 y=20 relative-to="top"
default-column-width { fixed 1060; }
default-window-height { fixed 1000; }
}
// Limit width
window-rule {
// You can assign multiple applications to the same rule
match app-id="wev"
default-column-width { fixed 200; }
}
// Full width
window-rule {
match app-id="com.github.th-ch.youtube-music"
match app-id="^Minecraft"
match app-id="org.kde.kdenlive"
default-column-width { proportion 1.0; }
}keybinds.kdl
// Alt+TAB https://niri-wm.github.io/niri/Configuration%3A-Recent-Windows
recent-windows {
binds {
Alt+Tab { next-window scope="workspace"; }
}
}
binds {
// ────────────── Keybindings ──────────────
// https://niri-wm.github.io/niri/Configuration%3A-Key-Bindings
// noctalia keybinds
// https://docs.noctalia.dev/noctalia/ipc/
Mod+Shift+Escape { show-hotkey-overlay; }
Mod+Shift+Plus hotkey-overlay-title="Show Important Hotkeys" { show-hotkey-overlay; }
// ─── Applications ───
// Scratchpads
// Implementation for similar scratchpad functionality as i3WM:
Mod+Alt+1 hotkey-overlay-title=null { spawn "sh" "-c" "niri-scratchpad target --spawn 'kitty -T \"Yazi Scratchpad\" -e yazi' title \"Yazi Scratchpad\" && niri msg action focus-floating" ; }
Mod+Alt+2 hotkey-overlay-title=null { spawn "sh" "-c" "niri-scratchpad target --spawn 'kitty -T \"Neovim Scratchpad\" -e nvim' title \"Neovim Scratchpad\" && niri msg action focus-floating" ; }
Mod+Alt+3 hotkey-overlay-title=null { spawn "sh" "-c" "niri-scratchpad target --spawn 'alacritty -t \"Alacritty Scratchpad\" --' title \"Alacritty Scratchpad\" && niri msg action focus-floating" ; }
Mod+Alt+4 hotkey-overlay-title="Open Scratchpad 4: Wiremix" { spawn "sh" "-c" "niri-scratchpad target --spawn 'alacritty -t \"Wiremix Scratchpad\" -e wiremix' title \"Wiremix Scratchpad\" && niri msg action focus-floating" ; }
Mod+Q hotkey-overlay-title="Assign as scratchpad" { spawn "sh" "-c" "niri-scratchpad create 1 --as-float && notify-send -t 1100 'Toggle' 'Scratchpad assign/show'" ; }
Mod+Ctrl+Q hotkey-overlay-title="Remove scratchpad space" { spawn "sh" "-c" "niri-scratchpad delete 1 && notify-send -t 1500 'Window unassigned as scratchpad'" ; }
Mod+Return hotkey-overlay-title="Open Terminal: Alacritty" { spawn "alacritty"; }
Mod+Shift+Return hotkey-overlay-title="Open Terminal: Kitty" { spawn "kitty"; }
Mod+Alt+F hotkey-overlay-title="Open Browser: firefox" { spawn "firefox"; }
Mod+Alt+D hotkey-overlay-title="Open Internet Messenger: Vesktop" { spawn "vesktop"; }
Mod+Alt+O hotkey-overlay-title="Open Note taking app: Obsidian" { spawn "obsidian"; }
Mod+Ctrl+Alt+Y hotkey-overlay-title="Open Music Player: Youtube Music" { spawn "pear-desktop"; }
// Noctalia
Mod+Shift+W hotkey-overlay-title="Open Wallpaper Selector: noctalia wallpaper toggle" { spawn-sh "noctalia msg panel-toggle wallpaper"; }
Mod+Ctrl+Shift+W hotkey-overlay-title="Open Wallpaper Selector: noctalia wallhaven toggle" { spawn-sh "noctalia msg panel-toggle noctalia/wallhaven:browser"; }
Mod+S hotkey-overlay-title="Open Control Center: noctalia controlCenter" { spawn-sh "noctalia msg panel-toggle control-center"; }
Mod+A hotkey-overlay-title="Open Audio panel: noctalia audio controlCenter" { spawn-sh "noctalia msg panel-toggle control-center audio"; }
Mod+N hotkey-overlay-title="Open Settings: noctalia settings" { spawn-sh "noctalia msg settings-toggle"; }
Mod+B hotkey-overlay-title="Toggle Bar: noctalia bar" { spawn-sh "noctalia msg bar-toggle"; }
Mod+Shift+B hotkey-overlay-title="Toggle Dock: noctalia dock" { spawn-sh "noctalia msg dock-toggle && notify-send -t 1100 'Toggle' 'Noctalia Dock'"; }
Mod+TAB hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "noctalia msg panel-toggle launcher"; }
Mod+E hotkey-overlay-title="Open Emoji launcher: noctalia launcher" { spawn-sh "noctalia msg panel-open launcher /emo"; }
//Mod+Alt+L hotkey-overlay-title="Lock Screen: noctalia lock" { spawn-sh "noctalia msg session lock"; }
Mod+bar hotkey-overlay-title="Session Menu: noctalia sessionMenu" { spawn-sh "noctalia msg panel-toggle session"; }
Mod+V hotkey-overlay-title="Open Clipboard: Noctalia clipboard" { spawn-sh "noctalia msg panel-toggle clipboard"; }
// Please set the text editor of your choice.
Mod+Alt+N hotkey-overlay-title="Editor: Neovim" { spawn-sh "kitty nvim"; }
// Please choose your own file manager.
Mod+Alt+Y hotkey-overlay-title="File Manager: Yazi" { spawn-sh "kitty yazi"; }
Mod+Ctrl+Alt+N hotkey-overlay-title="GUI File Manager: Nautilus" { spawn "nautilus"; }
// ─── Media Controls ───
// Ducky One 3 Macros: Enter recording mode with Fn+Alt+Tab
// <Recording keys> - Actual keymap
// Fn+Super+B - Fn+PgUP
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "playerctl volume 0.02+"; }
// Fn+Shift+PgUp
Shift+XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "noctalia msg volume-up 1"; }
// Fn+Mod+PgUp
Mod+XF86AudioRaiseVolume hotkey-overlay-title=null allow-when-locked=true { spawn-sh "noctalia msg volume-up 10"; }
// Fn+Super+C - Fn+PgDn
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "playerctl volume 0.02-"; }
// Fn+Shift+PgDn
Shift+XF86AudioLowerVolume allow-when-locked=true { spawn-sh "noctalia msg volume-down 1"; }
// Fn+Mod+PgDn
Mod+XF86AudioLowerVolume hotkey-overlay-title=null allow-when-locked=true { spawn-sh "noctalia msg volume-down 10"; }
// Fn+Super+A - Fn+End
XF86AudioMute allow-when-locked=true { spawn-sh "noctalia msg volume-mute"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "noctalia msg mic-mute"; }
// Fn+Super+F - Fn+Ctrl+PgDn
XF86AudioNext allow-when-locked=true { spawn-sh "noctalia msg media next"; }
// Fn+Super+G - Fn+Ctrl+Del
XF86AudioPrev allow-when-locked=true { spawn-sh "noctalia msg media previous"; }
// Fn+Super+D - Fn+Ctrl+Home
XF86AudioPlay allow-when-locked=true { spawn-sh "noctalia msg media play-pause"; }
// Fn+Super+E - Fn+Ctrl+End
XF86AudioPause allow-when-locked=true { spawn-sh "noctalia msg media stop"; }
// ─── Brightness Controls ───
XF86MonBrightnessUp allow-when-locked=true { spawn-sh "noctalia msg brightness-up"; }
XF86MonBrightnessDown allow-when-locked=true { spawn-sh "noctalia msg brightness-down"; }
// ─── Window Movement and Focus ───
Mod+Shift+Q { close-window; }
Mod+Left hotkey-overlay-title=null { focus-column-left; }
Mod+MouseBack hotkey-overlay-title=null { focus-column-left; }
Mod+H hotkey-overlay-title=null { focus-column-left; }
Mod+Right hotkey-overlay-title=null { focus-column-right; }
Mod+MouseForward hotkey-overlay-title="Focus Column to the Right" { focus-column-right; }
Mod+L hotkey-overlay-title=null { focus-column-right; }
Mod+Up hotkey-overlay-title=null { focus-window-up; }
Mod+Prior hotkey-overlay-title=null { focus-window-up; }
Mod+K hotkey-overlay-title=null { focus-window-up; }
Mod+Down hotkey-overlay-title=null { focus-window-down; }
Mod+Next hotkey-overlay-title=null { focus-window-down; }
Mod+J hotkey-overlay-title=null { focus-window-down; }
Mod+Shift+Left hotkey-overlay-title=null { move-column-left; }
Mod+Shift+MouseBack hotkey-overlay-title=null { move-column-left; }
Mod+Ctrl+Shift+WheelScrollUp hotkey-overlay-title=null { move-column-left; }
Mod+Shift+H hotkey-overlay-title=null { move-column-left; }
Mod+Shift+Right hotkey-overlay-title=null { move-column-right; }
Mod+Shift+MouseForward hotkey-overlay-title=null { move-column-right; }
Mod+Ctrl+Shift+WheelScrollDown hotkey-overlay-title=null { move-column-right; }
Mod+Shift+L hotkey-overlay-title=null { move-column-right; }
Mod+Shift+UP hotkey-overlay-title=null { move-window-up; }
Mod+Shift+Prior hotkey-overlay-title=null { move-window-up; }
Mod+Shift+K hotkey-overlay-title=null { move-window-up; }
Mod+Shift+Down hotkey-overlay-title=null { move-window-down; }
Mod+Shift+Next hotkey-overlay-title=null { move-window-down; }
Mod+Shift+J hotkey-overlay-title=null { move-window-down; }
Mod+Ctrl+Shift+Left hotkey-overlay-title=null { spawn-sh "niri msg action move-floating-window -x -350"; }
Mod+Ctrl+Shift+H hotkey-overlay-title=null { spawn-sh "niri msg action move-floating-window -x -350"; }
Mod+Ctrl+Shift+Right hotkey-overlay-title=null { spawn-sh "niri msg action move-floating-window -x +350"; }
Mod+Ctrl+Shift+L hotkey-overlay-title=null { spawn-sh "niri msg action move-floating-window -x +350"; }
Mod+Ctrl+Shift+UP hotkey-overlay-title=null { spawn-sh "niri msg action move-floating-window -y -350"; }
Mod+Ctrl+Shift+K hotkey-overlay-title=null { spawn-sh "niri msg action move-floating-window -y -350"; }
Mod+Ctrl+Shift+Down hotkey-overlay-title=null { spawn-sh "niri msg action move-floating-window -y +350"; }
Mod+Ctrl+Shift+J hotkey-overlay-title=null { spawn-sh "niri msg action move-floating-window -y +350"; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Shift+Home { move-column-to-first; }
Mod+Shift+End { move-column-to-last; }
Mod+X hotkey-overlay-title="Focus Previous Monitor" { focus-monitor-previous; }
Mod+Shift+X hotkey-overlay-title=null { spawn "sh" "-c" "niri msg action move-column-to-monitor-previous && niri msg action center-column"; }
Mod+Space { switch-focus-between-floating-and-tiling; }
Mod+Ctrl+X hotkey-overlay-title=null { spawn "sh" "-c" "niri msg action move-column-to-monitor-previous && niri msg action center-column && niri msg action focus-monitor-previous"; }
// Respect tiling, move window
Mod+Comma { consume-or-expel-window-right; }
Mod+Period { consume-or-expel-window-left; }
// Merge tiling
Mod+Shift+Comma { consume-window-into-column; }
Mod+Shift+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-column-width-back; }
Mod+Ctrl+Shift+R { switch-preset-window-height; }
// Similar to 'expand-column-to-available-width'
Mod+Ctrl+R { reset-window-height; }
// ─── Workspace Switching ───
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp hotkey-overlay-title=null cooldown-ms=150 { focus-workspace-up; }
Mod+Shift+WheelScrollDown hotkey-overlay-title=null cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Shift+WheelScrollUp hotkey-overlay-title=null cooldown-ms=150 { move-column-to-workspace-up; }
Mod+Ctrl+WheelScrollDown hotkey-overlay-title=null cooldown-ms=150 { move-column-to-workspace-down focus=false; }
Mod+Ctrl+WheelScrollUp hotkey-overlay-title=null cooldown-ms=150 { move-column-to-workspace-up focus=false; }
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+I { focus-workspace 255; }
Mod+P { focus-workspace-previous; }
Mod+Shift+1 { move-column-to-workspace 1; }
Mod+Shift+2 { move-column-to-workspace 2; }
Mod+Shift+3 { move-column-to-workspace 3; }
Mod+Shift+4 { move-column-to-workspace 4; }
Mod+Shift+5 { move-column-to-workspace 5; }
Mod+Shift+6 { move-column-to-workspace 6; }
Mod+Shift+7 { move-column-to-workspace 7; }
Mod+Shift+8 { move-column-to-workspace 8; }
Mod+Shift+9 { move-column-to-workspace 9; }
// Move to next available workspace
Mod+Shift+I hotkey-overlay-title="Move column to next available workspace" { move-column-to-workspace 255; }
Mod+Ctrl+1 { move-column-to-workspace 1 focus=false; }
Mod+Ctrl+2 { move-column-to-workspace 2 focus=false; }
Mod+Ctrl+3 { move-column-to-workspace 3 focus=false; }
Mod+Ctrl+4 { move-column-to-workspace 4 focus=false; }
Mod+Ctrl+5 { move-column-to-workspace 5 focus=false; }
Mod+Ctrl+6 { move-column-to-workspace 6 focus=false; }
Mod+Ctrl+7 { move-column-to-workspace 7 focus=false; }
Mod+Ctrl+8 { move-column-to-workspace 8 focus=false; }
Mod+Ctrl+9 { move-column-to-workspace 9 focus=false; }
// Move to next available workspace, don't follow
Mod+Ctrl+I hotkey-overlay-title="Move column to next available workspace, don't follow" { move-column-to-workspace 255 focus=false; }
// ─── Layout Controls ───
Mod+Ctrl+F { expand-column-to-available-width; }
Mod+Shift+MouseMiddle { center-column; }
Mod+C { center-column; }
Mod+Ctrl+C { center-visible-columns; }
Mod+Minus { set-column-width "-10%"; }
Mod+Ctrl+H { set-column-width "-10%"; }
Mod+Plus { set-column-width "+10%"; }
Mod+Ctrl+L { set-column-width "+10%"; }
Mod+Ctrl+Minus { set-window-height "-10%"; }
Mod+Ctrl+J { set-window-height "-10%"; }
Mod+Ctrl+Plus { set-window-height "+10%"; }
Mod+Ctrl+K { set-window-height "+10%"; }
// ─── Modes ───
Mod+Shift+MouseLeft { toggle-window-floating; }
Mod+Shift+Space { toggle-window-floating; }
Mod+Shift+MouseRight { fullscreen-window; }
Mod+Shift+F { fullscreen-window; }
Mod+F { maximize-column; }
Mod+W { toggle-column-tabbed-display; }
Mod+M { maximize-window-to-edges; }
// biri
Mod+T { toggle-window-sticky; }
// ─── Screenshots ───
Mod+Shift+S hotkey-overlay-title="Screenshot the selected region" { spawn "~/.local/bin/niri-screenshot.sh" "region"; }
Mod+Ctrl+S hotkey-overlay-title="Screenshot the focused window" { spawn "~/.local/bin/niri-screenshot.sh" "window"; }
Mod+Ctrl+Shift+S hotkey-overlay-title="Screenshot the focused screen" { spawn "~/.local/bin/niri-screenshot.sh" "monitor-focused"; }
Print hotkey-overlay-title="Screenshot all screens" { spawn "~/.local/bin/niri-screenshot.sh" "monitor-all"; }
// ─── Tools ───
Mod+Shift+C hotkey-overlay-title="Color picker" { spawn-sh "COLOR=$(hyprpicker) && [ -n \"$COLOR\" ] && echo -n \"$COLOR\" | wl-copy && notify-send \"Color Picker\" \"Copied $COLOR to clipboard\""; }
Mod+Shift+T hotkey-overlay-title="Select text and copy to clipboard" { spawn-sh "TEXT=$(grim -g \"$(slurp)\" - | tesseract - stdout -l eng+nor 2>/dev/null) && [ -n \"$TEXT\" ] && echo -n \"$TEXT\" | wl-copy && notify-send \"Text Copied:\" \"$TEXT\""; }
Mod+Shift+A hotkey-overlay-title="Live annotatation" { spawn-sh "wayscriber --daemon-toggle"; }
// ─── Emergency Escape Key ───
// Use this when a fullscreen app blocks your keybinds.
// It disables any active keyboard shortcut inhibitor, restoring control.
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
// ─── Exit / Power ───
Ctrl+Alt+Delete hotkey-overlay-title=null { quit; } // Also quits Niri
//Mod+Shift+P { power-off-monitors; } // Turn off screens (useful for OLED or privacy)
Mod+Ctrl+MouseMiddle repeat=false { toggle-overview; }
Mod+O repeat=false { toggle-overview; }
}Logs
System information
- biri version:
niri 26.04 (v26.04-526-g2bf66ff8) - Distro: CachyOS Linux 7.2.9-2
- GPU: Nvidia RTX 2060 Super
- CPU: Intel i5-9400f
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingtheme: input-bindsBinds, chords and modes, multi-action binds, gestures, runtime device togglesBinds, chords and modes, multi-action binds, gestures, runtime device toggles
Projects
- StatusShow more project fieldsTodo
Activity