diff --git a/niri/.config/niri/config.kdl b/niri/.config/niri/config.kdl new file mode 100644 index 0000000..983fdc9 --- /dev/null +++ b/niri/.config/niri/config.kdl @@ -0,0 +1,233 @@ +input { + keyboard { + xkb { + layout "us,us" + variant "colemak_dh," + } + + repeat-delay 300 + repeat-rate 50 + numlock + } + + touchpad { + tap + natural-scroll + } + + focus-follows-mouse max-scroll-amount="50%" +} + +hotkey-overlay { + skip-at-startup +} + +cursor { + hide-when-typing + hide-after-inactive-ms 3000 +} + +overview { + backdrop-color "#1e1e2e" +} + +output "eDP-1" { + mode "2240x1400@60.001" + scale 1.5 +} + +layout { + gaps 12 + + center-focused-column "never" + + preset-column-widths { + proportion 0.33333 + proportion 0.5 + proportion 0.66667 + } + + default-column-width { proportion 0.5; } + + focus-ring { + width 2 + active-gradient from="#f9e2af" to="#fab387" angle=45 + } +} + +environment { + DISPLAY ":0" +} + +spawn-at-startup "waybar" +spawn-at-startup "sh" "-c" "~/.config/niri/swayidle.sh" +spawn-at-startup "xwayland-satellite" +spawn-at-startup "sh" "-c" "swaybg -i $HOME/.config/niri/wallpaper.jpg" +spawn-at-startup "foot" "--server" +spawn-at-startup "emacs" "--daemon" +spawn-at-startup "sh" "-c" "~/.config/niri/setup_wob.sh" + +prefer-no-csd +screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" + +window-rule { + match app-id=r#"^org\.wezfurlong\.wezterm$"# + default-column-width {} +} + +window-rule { + match app-id=r#"firefox$"# title="^Picture-in-Picture$" + open-floating true +} + + +window-rule { + geometry-corner-radius 8 + clip-to-geometry true +} + +binds { + Mod+Shift+Slash { show-hotkey-overlay; } + + Mod+Return hotkey-overlay-title="Open a Terminal: foot" { spawn "footclient"; } + Mod+Shift+Return { spawn "foot"; } + // Mod+Semicolon hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; } + Mod+Semicolon hotkey-overlay-title="Run an Application: bemenu" { spawn "bemenu-run"; } + Mod+Ctrl+O hotkey-overlay-title="Lock the Screen: swaylock" { spawn "swaylock"; } + + Mod+E { spawn "emacsclient" "--create-frame" "-a" "emacs"; } + + XF86AudioRaiseVolume allow-when-locked=true { spawn "sh" "-c" "~/.config/niri/volume.sh up"; } + XF86AudioLowerVolume allow-when-locked=true { spawn "sh" "-c" "~/.config/niri/volume.sh down"; } + 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"; } + + XF86MonBrightnessUp { spawn "sh" "-c" "brightnessctl set +5% | sed -En 's/.*\\(([0-9]+)%\\).*/\\1/p' > ~/.cache/wob.sock"; } + XF86MonBrightnessDown { spawn "sh" "-c" "brightnessctl set 5%- | sed -En 's/.*\\(([0-9]+)%\\).*/\\1/p' > ~/.cache/wob.sock"; } + + Mod+D { spawn "makoctl" "dismiss"; } + Mod+Shift+D { spawn "makoctl" "dismiss" "--all"; } + + Mod+Z { spawn "books.sh"; } + Mod+Y { spawn "papers.sh"; } + + Mod+P { spawn "sh" "-c" "echo 'p' > ~/.config/pianobar/ctl"; } + Mod+N { spawn "sh" "-c" "echo 'n' > ~/.config/pianobar/ctl"; } + Mod+C { spawn "sh" "-c" "~/.config/pianobar/display_info.sh"; } + Mod+S { spawn "sh" "-c" "~/.config/pianobar/change_station.sh"; } + + Mod+O repeat=false { toggle-overview; } + + Mod+Shift+C { close-window; } + Mod+Ctrl+C { spawn "sh" "-c" "~/.config/niri/toggle_caffeine.sh"; } + + Mod+H { focus-column-left; } + Mod+J { focus-window-or-workspace-down; } + Mod+K { focus-window-or-workspace-up; } + Mod+L { focus-column-right; } + + Mod+Ctrl+H { move-column-left; } + Mod+Ctrl+J { move-window-down-or-to-workspace-down; } + Mod+Ctrl+K { move-window-up-or-to-workspace-up; } + Mod+Ctrl+L { move-column-right; } + + Mod+Shift+Comma { focus-column-first; } + Mod+Shift+Period { focus-column-last; } + Mod+Shift+Ctrl+Comma { move-column-to-first; } + Mod+Shift+Ctrl+Period { move-column-to-last; } + + 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+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+U { focus-workspace-down; } + Mod+I { focus-workspace-up; } + Mod+Ctrl+U { move-column-to-workspace-down; } + Mod+Ctrl+I { move-column-to-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+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; } + Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; } + + 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; } + + Mod+Tab { focus-workspace-previous; } + + Mod+BracketLeft { consume-or-expel-window-left; } + Mod+BracketRight { consume-or-expel-window-right; } + + Mod+Comma { consume-window-into-column; } + Mod+Period { expel-window-from-column; } + + Mod+R { switch-preset-column-width; } + Mod+Shift+R { switch-preset-window-height; } + Mod+Ctrl+R { reset-window-height; } + Mod+F { maximize-column; } + Mod+Shift+F { fullscreen-window; } + Mod+Ctrl+F { expand-column-to-available-width; } + + 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%"; } + + Mod+V { toggle-window-floating; } + Mod+Shift+V { switch-focus-between-floating-and-tiling; } + + Mod+W { toggle-column-tabbed-display; } + + Mod+Space { switch-layout "next"; } + Mod+Shift+Space { switch-layout "prev"; } + + Print { screenshot; } + Ctrl+Print { screenshot-screen; } + Alt+Print { screenshot-window; } + + Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } + + Mod+Shift+Q { quit; } + Ctrl+Alt+Delete { quit; } + + Mod+Shift+P { power-off-monitors; } +} diff --git a/niri/.config/niri/setup_wob.sh b/niri/.config/niri/setup_wob.sh new file mode 100755 index 0000000..b19fb50 --- /dev/null +++ b/niri/.config/niri/setup_wob.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +rm -f ~/.cache/wob.sock && mkfifo ~/.cache/wob.sock && tail -f ~/.cache/wob.sock | wob & diff --git a/niri/.config/niri/swayidle.sh b/niri/.config/niri/swayidle.sh new file mode 100755 index 0000000..bcf6264 --- /dev/null +++ b/niri/.config/niri/swayidle.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +killall swayidle + +swayidle -w \ + timeout 300 '~/.config/niri/timeout.sh' \ + before-sleep 'swaylock -f -c 000000' diff --git a/niri/.config/niri/timeout.sh b/niri/.config/niri/timeout.sh new file mode 100755 index 0000000..647af41 --- /dev/null +++ b/niri/.config/niri/timeout.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +caffeine_file=$HOME/.cache/idle + +if [[ ! -f $caffeine_file ]] then + echo 0 > $caffeine_file +fi + +caffeine=$(<$HOME/.cache/idle) + +if [[ $caffeine -eq 0 ]] then + swaylock -f -c 000000 +else + notify-send 'Caffeine' 'Not sleeping' +fi diff --git a/niri/.config/niri/toggle_caffeine.sh b/niri/.config/niri/toggle_caffeine.sh new file mode 100755 index 0000000..e7fcb13 --- /dev/null +++ b/niri/.config/niri/toggle_caffeine.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +caffeine_file=$HOME/.cache/idle + +if [[ ! -f $caffeine_file ]] then + echo 0 > $caffeine_file +fi + +caffeine=$(<$HOME/.cache/idle) + +if [[ $caffeine -eq 0 ]] then + echo 1 > $caffeine_file + notify-send 'Caffeine' 'Caffeine Enabled' +else + echo 0 > $caffeine_file + notify-send 'Caffeine' 'Caffeine Disabled' +fi diff --git a/niri/.config/niri/volume.sh b/niri/.config/niri/volume.sh new file mode 100755 index 0000000..80216b0 --- /dev/null +++ b/niri/.config/niri/volume.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +if [ $1 = "up" ]; then + wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+ +else + wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02- +fi + +wpctl get-volume @DEFAULT_AUDIO_SINK@ | sed 's/Volume: 0.//' > ~/.cache/wob.sock diff --git a/niri/.config/niri/wallpaper.jpg b/niri/.config/niri/wallpaper.jpg new file mode 100644 index 0000000..9ca0c04 Binary files /dev/null and b/niri/.config/niri/wallpaper.jpg differ diff --git a/waybar/.config/waybar/config b/waybar/.config/waybar/config index c0df4ad..9cbcc5d 100644 --- a/waybar/.config/waybar/config +++ b/waybar/.config/waybar/config @@ -6,7 +6,7 @@ "height" : 36, "modules-left": [ - "river/tags", + "niri/workspaces", ], "modules-center": [ "clock", @@ -87,5 +87,13 @@ "tray": { "icon-size": 20 + }, + + "niri/workspaces": { + "format": "{icon}", + "format-icons": { + "active": "", + "default": "" + } } } diff --git a/waybar/.config/waybar/style.css b/waybar/.config/waybar/style.css index 0db7150..02df39a 100644 --- a/waybar/.config/waybar/style.css +++ b/waybar/.config/waybar/style.css @@ -11,6 +11,14 @@ window#waybar { color: @text; } +#workspaces button { + color: @text; +} + +#workspaces button.focused { + color: @pink; +} + #clock, #pulseaudio, #battery, @@ -22,26 +30,6 @@ window#waybar { color: @yellow; } -#tags button { - padding: 0 8px; - color: @text; -} - -#tags button.focused { - color: @base; - background: @pink; -} - -#tags button.occupied { - color: @text; - background: @surface1; -} - -#tags button.occupied.focused { - color: @base; - background: @pink; -} - #pulseaudio { color: @red; }