| @ -0,0 +1,27 @@ | |||||
| # Triple monitor setup (2 external + laptop) | |||||
| profile docked { | |||||
| output "ASUSTek COMPUTER INC VY249HGR SALMRS003158" mode 1920x1080@60Hz position 2880,0 | |||||
| output "ASUSTek COMPUTER INC VY249HGR SALMRS003212" mode 1920x1080@60Hz position 4800,0 | |||||
| output "Samsung Display Corp. 0x419F" mode 2880x1800@120Hz position 3979,1080 scale 1.648438 | |||||
| } | |||||
| # Laptop only | |||||
| profile laptop { | |||||
| output "Samsung Display Corp. 0x419F" mode 2880x1800@120Hz position 0,0 scale 1.648438 | |||||
| } | |||||
| # Left external only | |||||
| profile left-external { | |||||
| output "ASUSTek COMPUTER INC VY249HGR SALMRS003158" mode 1920x1080@60Hz position 0,0 | |||||
| } | |||||
| # Right external only | |||||
| profile right-external { | |||||
| output "ASUSTek COMPUTER INC VY249HGR SALMRS003212" mode 1920x1080@60Hz position 0,0 | |||||
| } | |||||
| # Both externals, no laptop | |||||
| profile dual-external { | |||||
| output "ASUSTek COMPUTER INC VY249HGR SALMRS003158" mode 1920x1080@60Hz position 0,0 | |||||
| output "ASUSTek COMPUTER INC VY249HGR SALMRS003212" mode 1920x1080@60Hz position 1920,0 | |||||
| } | |||||
| @ -0,0 +1,7 @@ | |||||
| [ids] | |||||
| * | |||||
| [main] | |||||
| # Swap capslock and escape by default | |||||
| capslock = esc | |||||
| esc = capslock | |||||
| @ -0,0 +1,5 @@ | |||||
| [ids] | |||||
| * | |||||
| [main] | |||||
| # Nothing remapped | |||||
| @ -0,0 +1,6 @@ | |||||
| [ids] | |||||
| * | |||||
| [main] | |||||
| capslock = esc | |||||
| esc = capslock | |||||
| @ -0,0 +1,4 @@ | |||||
| return { | |||||
| "sindrets/diffview.nvim", | |||||
| opts = {}, | |||||
| } | |||||
| @ -0,0 +1,158 @@ | |||||
| #!/bin/sh | |||||
| riverctl map normal Super+Shift Return spawn alacritty | |||||
| riverctl map normal Super P spawn "wofi --show drun" | |||||
| riverctl map normal Super T spawn ~/.config/river/scripts/toggle-caps-esc.sh | |||||
| # Super+Q to close the focused view | |||||
| riverctl map normal Super Q close | |||||
| # Super+Shift+E to exit river | |||||
| riverctl map normal Super+Shift E exit | |||||
| # Super+J and Super+K to focus the next/previous view in the layout stack | |||||
| riverctl map normal Super J focus-view next | |||||
| riverctl map normal Super K focus-view previous | |||||
| # Super+Shift+J and Super+Shift+K to swap the focused view with the next/previous | |||||
| # view in the layout stack | |||||
| riverctl map normal Super+Shift J swap next | |||||
| riverctl map normal Super+Shift K swap previous | |||||
| # Super+Period and Super+Comma to focus the next/previous output | |||||
| riverctl map normal Super Period focus-output next | |||||
| riverctl map normal Super Comma focus-output previous | |||||
| # Super+Shift+{Period,Comma} to send the focused view to the next/previous output | |||||
| riverctl map normal Super+Shift Period send-to-output next | |||||
| riverctl map normal Super+Shift Comma send-to-output previous | |||||
| # Super+Return to bump the focused view to the top of the layout stack | |||||
| riverctl map normal Super Return zoom | |||||
| # Super+H and Super+L to decrease/increase the main ratio of rivertile(1) | |||||
| riverctl map normal Super H send-layout-cmd rivertile "main-ratio -0.05" | |||||
| riverctl map normal Super L send-layout-cmd rivertile "main-ratio +0.05" | |||||
| # Super+Shift+H and Super+Shift+L to increment/decrement the main count of rivertile(1) | |||||
| riverctl map normal Super+Shift H send-layout-cmd rivertile "main-count +1" | |||||
| riverctl map normal Super+Shift L send-layout-cmd rivertile "main-count -1" | |||||
| # Super+Alt+{H,J,K,L} to move views | |||||
| riverctl map normal Super+Alt H move left 100 | |||||
| riverctl map normal Super+Alt J move down 100 | |||||
| riverctl map normal Super+Alt K move up 100 | |||||
| riverctl map normal Super+Alt L move right 100 | |||||
| # Super+Alt+Control+{H,J,K,L} to snap views to screen edges | |||||
| riverctl map normal Super+Alt+Control H snap left | |||||
| riverctl map normal Super+Alt+Control J snap down | |||||
| riverctl map normal Super+Alt+Control K snap up | |||||
| riverctl map normal Super+Alt+Control L snap right | |||||
| # Super+Alt+Shift+{H,J,K,L} to resize views | |||||
| riverctl map normal Super+Alt+Shift H resize horizontal -100 | |||||
| riverctl map normal Super+Alt+Shift J resize vertical 100 | |||||
| riverctl map normal Super+Alt+Shift K resize vertical -100 | |||||
| riverctl map normal Super+Alt+Shift L resize horizontal 100 | |||||
| # Super + Left Mouse Button to move views | |||||
| riverctl map-pointer normal Super BTN_LEFT move-view | |||||
| # Super + Right Mouse Button to resize views | |||||
| riverctl map-pointer normal Super BTN_RIGHT resize-view | |||||
| # Super + Middle Mouse Button to toggle float | |||||
| riverctl map-pointer normal Super BTN_MIDDLE toggle-float | |||||
| for i in $(seq 1 9) | |||||
| do | |||||
| tags=$((1 << ($i - 1))) | |||||
| # Super+[1-9] to focus tag [0-8] | |||||
| riverctl map normal Super $i set-focused-tags $tags | |||||
| # Super+Shift+[1-9] to tag focused view with tag [0-8] | |||||
| riverctl map normal Super+Shift $i set-view-tags $tags | |||||
| # Super+Control+[1-9] to toggle focus of tag [0-8] | |||||
| riverctl map normal Super+Control $i toggle-focused-tags $tags | |||||
| # Super+Shift+Control+[1-9] to toggle tag [0-8] of focused view | |||||
| riverctl map normal Super+Shift+Control $i toggle-view-tags $tags | |||||
| done | |||||
| # Super+0 to focus all tags | |||||
| # Super+Shift+0 to tag focused view with all tags | |||||
| all_tags=$(((1 << 32) - 1)) | |||||
| riverctl map normal Super 0 set-focused-tags $all_tags | |||||
| riverctl map normal Super+Shift 0 set-view-tags $all_tags | |||||
| # Super+Space to toggle float | |||||
| riverctl map normal Super Space toggle-float | |||||
| # Super+F to toggle fullscreen | |||||
| riverctl map normal Super F toggle-fullscreen | |||||
| # Super+{Up,Right,Down,Left} to change layout orientation | |||||
| riverctl map normal Super Up send-layout-cmd rivertile "main-location top" | |||||
| riverctl map normal Super Right send-layout-cmd rivertile "main-location right" | |||||
| riverctl map normal Super Down send-layout-cmd rivertile "main-location bottom" | |||||
| riverctl map normal Super Left send-layout-cmd rivertile "main-location left" | |||||
| # Declare a passthrough mode. This mode has only a single mapping to return to | |||||
| # normal mode. This makes it useful for testing a nested wayland compositor | |||||
| riverctl declare-mode passthrough | |||||
| # Super+F11 to enter passthrough mode | |||||
| riverctl map normal Super F11 enter-mode passthrough | |||||
| # Super+F11 to return to normal mode | |||||
| riverctl map passthrough Super F11 enter-mode normal | |||||
| # Various media key mapping examples for both normal and locked mode which do | |||||
| # not have a modifier | |||||
| for mode in normal locked | |||||
| do | |||||
| # Eject the optical drive (well if you still have one that is) | |||||
| riverctl map $mode None XF86Eject spawn 'eject -T' | |||||
| # Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer) | |||||
| riverctl map $mode None XF86AudioRaiseVolume spawn 'pamixer -i 5' | |||||
| riverctl map $mode None XF86AudioLowerVolume spawn 'pamixer -d 5' | |||||
| riverctl map $mode None XF86AudioMute spawn 'pamixer --toggle-mute' | |||||
| # Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl) | |||||
| riverctl map $mode None XF86AudioMedia spawn 'playerctl play-pause' | |||||
| riverctl map $mode None XF86AudioPlay spawn 'playerctl play-pause' | |||||
| riverctl map $mode None XF86AudioPrev spawn 'playerctl previous' | |||||
| riverctl map $mode None XF86AudioNext spawn 'playerctl next' | |||||
| # Control screen backlight brightness with brightnessctl (https://github.com/Hummer12007/brightnessctl) | |||||
| riverctl map $mode None XF86MonBrightnessUp spawn 'brightnessctl set +5%' | |||||
| riverctl map $mode None XF86MonBrightnessDown spawn 'brightnessctl set 5%-' | |||||
| done | |||||
| # Set background and border color | |||||
| riverctl background-color 0x000000 | |||||
| riverctl border-color-focused 0x5ea1ff | |||||
| riverctl border-color-unfocused 0x3c4048 | |||||
| # Set keyboard repeat rate | |||||
| riverctl set-repeat 50 300 | |||||
| # Make all views with an app-id that starts with "float" and title "foo" start floating. | |||||
| riverctl rule-add -app-id 'float*' -title 'foo' float | |||||
| # Make all views with app-id "bar" and any title use client-side decorations | |||||
| riverctl rule-add -app-id "bar" csd | |||||
| # Set the default layout generator to be rivertile and start it. | |||||
| # River will send the process group of the init executable SIGTERM on exit. | |||||
| riverctl default-layout rivertile | |||||
| rivertile -view-padding 6 -outer-padding 6 & | |||||
| waybar & | |||||
| kanshi & | |||||
| @ -0,0 +1,14 @@ | |||||
| #!/bin/bash | |||||
| # Check if keyd is using the swapped config | |||||
| if pgrep -f "keyd.*default.conf" > /dev/null && keyd list | grep -q "capslock = esc"; then | |||||
| # Currently swapped, switch to normal config | |||||
| sudo cp ~/.config/keyd/normal.conf ~/.config/keyd/default.conf | |||||
| sudo keyd reload | |||||
| notify-send "Keyboard Layout" "Caps Lock and Escape returned to normal" -i input-keyboard | |||||
| else | |||||
| # Not swapped, switch to swapped config | |||||
| sudo cp ~/.config/keyd/swapped.conf ~/.config/keyd/default.conf | |||||
| sudo keyd reload | |||||
| notify-send "Keyboard Layout" "Caps Lock and Escape swapped" -i input-keyboard | |||||
| fi | |||||
| @ -1,144 +1,13 @@ | |||||
| // -*- mode: jsonc -*- | |||||
| { | { | ||||
| "layer": "top", | "layer": "top", | ||||
| "mode": "dock", | |||||
| "position": "top", // (top|bottom|left|right) | |||||
| "height": 40, // (to be removed for auto height) | |||||
| "width": "auto", | |||||
| "spacing": 3, // Gaps between modules | |||||
| "margin": 0, | |||||
| "fixed-center": true, | |||||
| "reload_style_on_change": true, | |||||
| "modules-left": [ | |||||
| "hyprland/workspaces", | |||||
| "hyprland/submap", | |||||
| ], | |||||
| "modules-center": [ | |||||
| "clock" | |||||
| ], | |||||
| "modules-right": [ | |||||
| "pulseaudio", | |||||
| "temperature", | |||||
| "network", | |||||
| "backlight", | |||||
| "battery", | |||||
| "tray" | |||||
| ], | |||||
| "keyboard-state": { | |||||
| "numlock": true, | |||||
| "capslock": true, | |||||
| "format": "{icon} {name}", | |||||
| "format-icons": { | |||||
| "locked": "", | |||||
| "unlocked": "" | |||||
| } | |||||
| }, | |||||
| "tray": { | |||||
| "icon-size": 24, | |||||
| "show-passive-items": true, | |||||
| "spacing": 10 | |||||
| "modules-left": ["river/tags"], | |||||
| "modules-center": ["clock"], | |||||
| "modules-right": ["battery", "network", "pulseaudio"], | |||||
| "river/tags": { | |||||
| "num-tags": 9 | |||||
| }, | }, | ||||
| "clock": { | "clock": { | ||||
| "interval": 1, | |||||
| "format": "{:%A %d. %b %T}", | |||||
| "tooltip-format": "<tt><small>{calendar}</small></tt>", | |||||
| "calendar": { | |||||
| "format": { | |||||
| "today": "<span color='#ff5555'><b><u>{}</u></b></span>" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "temperature": { | |||||
| "interval": 1000, | |||||
| "critical-threshold": 80, | |||||
| "format": "{temperatureC}°C" | |||||
| }, | |||||
| "backlight": { | |||||
| "format": "{icon}", | |||||
| "tooltip-format": "{icon} {percent}", | |||||
| "format-icons": [ | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "" | |||||
| ] | |||||
| }, | |||||
| "battery": { | |||||
| "states": { | |||||
| // "good": 95, | |||||
| "warning": 30, | |||||
| "critical": 15 | |||||
| }, | |||||
| "format": "{icon}", | |||||
| "format-full": "{icon}", | |||||
| "format-charging": "{icon} ", | |||||
| "format-plugged": "{icon} ", | |||||
| "format-alt": "{icon}", | |||||
| "format-icons": [ | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "" | |||||
| ] | |||||
| }, | |||||
| "power-profiles-daemon": { | |||||
| "format": "{icon}", | |||||
| "tooltip-format": "Power profile: {profile}\nDriver: {driver}", | |||||
| "tooltip": true, | |||||
| "format-icons": { | |||||
| "default": "", | |||||
| "performance": "", | |||||
| "balanced": "", | |||||
| "power-saver": "" | |||||
| } | |||||
| }, | |||||
| "network": { | |||||
| "interval": 1000, | |||||
| "format-wifi": "{icon}", | |||||
| "format-ethernet": "{ipaddr}/{cidr} ", | |||||
| "tooltip-format": "{essid}\n{ifname} via {gwaddr}\n{ipaddr}/{cidr}", | |||||
| "format-linked": "{ifname} (No IP) ", | |||||
| "format-disconnected": "", | |||||
| "format-alt": "{essid}", | |||||
| "format-icons": [ | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "", | |||||
| "" | |||||
| ] | |||||
| }, | |||||
| "pulseaudio": { | |||||
| "format": "{icon} {format_source}", | |||||
| "format-muted": " {format_source}", | |||||
| "format-source": "", | |||||
| "format-source-muted": " ", | |||||
| "format-bluetooth": "{icon} {format_source}", | |||||
| "format-bluetooth-muted": "{icon} {format_source}", | |||||
| "format-icons": { | |||||
| "headphone": "", | |||||
| "hands-free": "", | |||||
| "headset": "", | |||||
| "phone": " ", | |||||
| "portable": " ", | |||||
| "car": "", | |||||
| "default": [ | |||||
| "", | |||||
| "", | |||||
| "" | |||||
| ] | |||||
| }, | |||||
| "tooltip-format": "{icon} {volume}%\n{format_source}", | |||||
| "ignored-sinks": [ | |||||
| "Easy Effects Sink" | |||||
| ] | |||||
| "format": "{:%a %d %b %H:%M}" | |||||
| } | } | ||||
| } | } | ||||
| @ -1,130 +1,54 @@ | |||||
| * { | * { | ||||
| border: none; | |||||
| border-radius: 0; | |||||
| font-family: JetBrainsMono NerdFont, Roboto, Helvetica, Arial, sans-serif; | |||||
| font-size: 14px; | |||||
| min-height: 0; | |||||
| font-family: "JetBrainsMono NerdFont"; | |||||
| font-size: 13px; | |||||
| border: none; | |||||
| border-radius: 0; | |||||
| } | } | ||||
| window#waybar { | window#waybar { | ||||
| background: rgba(0, 0, 0, 0.6); | |||||
| color: white; | |||||
| background: #000000; | |||||
| color: #ffffff; | |||||
| } | } | ||||
| button { | |||||
| margin: 3px; | |||||
| padding: 3px; | |||||
| #tags button { | |||||
| padding: 0 5px; | |||||
| color: #ffffff; | |||||
| background: transparent; | |||||
| border-bottom: 2px solid transparent; | |||||
| } | } | ||||
| tooltip { | |||||
| background: rgba(0, 0, 0, 0.202);/*rgba(43, 48, 59, 0.5);*/ | |||||
| border: 4px solid white; | |||||
| border-radius: 10px; | |||||
| #tags button.occupied { | |||||
| color: #8c9098; | |||||
| border-bottom: 2px solid #8c9098; | |||||
| } | } | ||||
| tooltip label { | |||||
| color: white; | |||||
| #tags button.focused { | |||||
| color: #000000; | |||||
| background: #5ea1ff; | |||||
| } | } | ||||
| #workspaces button { | |||||
| margin: 0; | |||||
| padding: 0; | |||||
| background: transparent; | |||||
| color: #888888; | |||||
| } | |||||
| #workspaces button.active { | |||||
| color: white; | |||||
| } | |||||
| #mode, | |||||
| #clock, | |||||
| #battery, | |||||
| #pulseaudio, | |||||
| #temperature, | |||||
| #language, | |||||
| #backlight, | |||||
| #network, | |||||
| #tray, | |||||
| #custom-weather { | |||||
| padding: 0 10px; | |||||
| } | |||||
| #scratchpad, | |||||
| #window { | |||||
| margin-left: 6px; | |||||
| margin-right: 6px; | |||||
| } | |||||
| #custom-weather.sunny { | |||||
| color: rgb(215, 215, 0); | |||||
| } | |||||
| #custom-weather.lightrain { | |||||
| color: lightblue; | |||||
| } | |||||
| #custom-weather.rain, | |||||
| #custom-weather.heavyrain { | |||||
| color: blue; | |||||
| } | |||||
| #custom-weather.cloudy, | |||||
| #custom-weather.fog { | |||||
| color: gray; | |||||
| } | |||||
| #window { | |||||
| color: darkred; | |||||
| } | |||||
| #language { | |||||
| color: cadetblue; | |||||
| } | |||||
| #pulseaudio { | |||||
| color: darkcyan; | |||||
| } | |||||
| #network { | |||||
| color: coral; | |||||
| } | |||||
| #temperature { | |||||
| color: rgb(91, 191, 225); | |||||
| } | |||||
| #backlight { | |||||
| color: rgb(255, 255, 61); | |||||
| #tags button:hover { | |||||
| background: #1a1a1a; | |||||
| } | } | ||||
| #clock { | #clock { | ||||
| color: aqua; | |||||
| padding: 0 10px; | |||||
| color: #ffffff; | |||||
| } | } | ||||
| #battery { | |||||
| color: rgb(147, 63, 225); | |||||
| #battery, #network, #pulseaudio { | |||||
| padding: 0 10px; | |||||
| color: #ffffff; | |||||
| } | } | ||||
| #battery.charging { | #battery.charging { | ||||
| color: #26A65B; | |||||
| color: #5ea1ff; | |||||
| } | } | ||||
| @keyframes blink { | |||||
| to { | |||||
| color: white; | |||||
| } | |||||
| #battery.warning { | |||||
| color: #ffaa00; | |||||
| } | } | ||||
| #battery.warning:not(.charging), | |||||
| #temperature.critical, | |||||
| #workspaces button.urgent, | |||||
| #mode { | |||||
| color: #ff0000; | |||||
| animation-name: blink; | |||||
| animation-duration: 0.5s; | |||||
| animation-timing-function: steps(2); | |||||
| animation-iteration-count: infinite; | |||||
| animation-direction: alternate; | |||||
| #battery.critical { | |||||
| color: #ff5555; | |||||
| } | } | ||||