Skip to content

Instantly share code, notes, and snippets.

@rodafr
Last active July 14, 2024 13:37
Show Gist options
  • Save rodafr/06c7e6c74bd8887271d5f0a5faef74ff to your computer and use it in GitHub Desktop.
Save rodafr/06c7e6c74bd8887271d5f0a5faef74ff to your computer and use it in GitHub Desktop.
Niri WM + Waybar dotfiles
input {
keyboard {
xkb {
layout "no,us"
options "caps:escape,grp:win_space_toggle"
}
}
touchpad {
tap
}
mouse {
// accel-speed 0.2
// accel-profile "flat"
}
warp-mouse-to-focus
}
output "eDP-1" {
mode "[email protected]"
scale 1.0
transform "normal"
position x=0 y=0
}
layout {
gaps 2
center-focused-column "always"
preset-column-widths {
proportion 0.33333
proportion 0.5
proportion 0.66667
}
default-column-width { proportion 0.5; }
focus-ring {
off
}
border {
width 1
inactive-color "#505050"
active-gradient from="black" to="red" angle=0 relative-to="workspace-view"
}
}
spawn-at-startup "alacritty"
spawn-at-startup "~/.config/waybar/niri-launch.sh"
spawn-at-startup "sh" "-c" "swaybg -i ~/bg/2001_2.jpg"
prefer-no-csd
screenshot-path "~/pics/sshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
binds {
Mod+Shift+Plus { show-hotkey-overlay; }
Mod+T { spawn "alacritty"; }
Mod+D { spawn "fuzzel"; }
Super+Shift+L { spawn "swaylock" "--screenshot" "--effect-blur" "5x5" "--effect-vignette" "0.5:0.5"; }
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
XF86Bluetooth { spawn "~/.config/waybar/bt-toggle.sh"; }
XF86MonBrightnessUp { spawn "brightnessctl" "set" "+5%"; }
XF86MonBrightnessDown { spawn "brightnessctl" "set" "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+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+L { move-column-right; }
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; }
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; }
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+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
Mod+1 { spawn "~/.config/waybar/modules/niri-workspaces.sh" "focus-workspace" "1"; }
Mod+2 { spawn "~/.config/waybar/modules/niri-workspaces.sh" "focus-workspace" "2"; }
Mod+3 { spawn "~/.config/waybar/modules/niri-workspaces.sh" "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; }
Mod+Comma { consume-window-into-column; }
Mod+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
Mod+C { center-column; }
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
Mod+Shift+E { quit; }
Mod+Shift+P { power-off-monitors; }
}
{
"position": "top",
"layer": "top",
"margin-top": 0,
"margin-bottom": 0,
"margin-left": 0,
"margin-right": 0,
"width": 0,
"height": 0,
"spacing": 0,
"include": ["~/.config/waybar/modules/niri-modules.jsonc"],
"modules-left": [
"custom/workspaces"
],
"modules-center": [
"custom/window"
],
"modules-right": [
"custom/updates",
"backlight",
"wireplumber",
"bluetooth",
"battery",
"group/hardware",
"network",
"clock"
],
"group/hardware": {
"orientation": "horizontal",
"modules": [
"disk",
"cpu",
"memory"
]
}
}
#!/bin/sh
killall waybar 2>/dev/null
waybar -c "$HOME/.config/waybar/niri-config" -s "$HOME/.config/waybar/style.css"
{
"custom/workspaces": {
"exec": "$HOME/.config/waybar/modules/niri-workspaces.sh \"$WAYBAR_OUTPUT_NAME\"",
"interval": 1,
"signal": 8
},
"custom/window": {
"exec": "$HOME/.config/waybar/modules/niri-windowtitle.sh",
"interval": 1
},
"custom/updates": {
"format": "󰮯 {}",
"tooltip-format": "{}",
"escape": true,
"return-type": "json",
"exec": "~/.config/waybar/updates.sh",
"restart-interval": 60,
"tooltip": false
},
"clock": {
"tooltip-format": "<big>{:%F}</big>\n<tt><small>{calendar}</small></tt>",
"format-alt": "{:%Y-%m-%d}"
},
"cpu": {
"format": "/ C {usage}% ",
"on-click": "alacritty -e htop"
},
"memory": {
"format": "/ M {}% ",
"on-click": "alacritty -e htop"
},
"disk": {
"interval": 30,
"format": " {percentage_used}% ",
"path": "/",
"on-click": "alacritty -e htop"
},
"network": {
"format": "{ifname}",
"format-wifi": " ",
"format-ethernet": " {ipaddr}",
"format-disconnected": "",
"tooltip-format": " {ifname} via {gwaddri}",
"tooltip-format-wifi": " {essid} ({signalStrength}%)",
"tooltip-format-ethernet": " {ifname} ({ipaddr}/{cidr})",
"tooltip-format-disconnected": "Disconnected",
"max-length": 50
},
"battery": {
"states": {
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}%",
"format-charging": "󰂈 {capacity}%",
"format-plugged": " {capacity}%",
"format-alt": "{icon} {time}",
"format-full": "",
"format-icons": [
" ",
" ",
" ",
" ",
" "
]
},
"wireplumber": {
"format": "{icon} {volume}%",
"format-muted": "󰖁 {format_source}",
"format-source": "{volume}% ",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"default": [
"",
" ",
" "
]
}
},
"bluetooth": {
"format-disabled": "",
"format-off": "",
"interval": 30,
"on-click": "blueman-manager"
},
"backlight": {
"device": "intel_backlight",
"format": "{icon} {percent}%",
"format-icons": [
"",
""
]
}
}
#!/usr/bin/env bash
title=$(niri msg --json focused-window | jq -r 'if .title != null then .title | if length > 60 then .[0:57] + "..." else . end else "..." end')
printf "$title"
#!/usr/bin/env bash
case "$1" in
focus-workspace)
niri msg action "$@" && pkill -SIGRTMIN+8 waybar
;;
*)
set -e
monitor=$1
active=""
inactive=""
workspace_str=""
msg_out="$(niri msg -j workspaces | jq ".[] | select(.output == \"$monitor\") | .is_active")"
for ws in $msg_out; do
if "$ws"; then
workspace_str="${workspace_str}${active} "
else
workspace_str="${workspace_str}${inactive} "
fi
done
printf "%s" "$workspace_str"
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment