187 lines
6.7 KiB
Bash
Executable File
187 lines
6.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Dublin lat/long
|
|
latitude="53.2"
|
|
longitude="-6.2"
|
|
|
|
# Startup
|
|
function execs() {
|
|
host=$1
|
|
|
|
systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &
|
|
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river && systemctl --user restart xdg-desktop-portal xdg-desktop-portal-wlr &
|
|
rivertile -view-padding 1 -outer-padding 2 &
|
|
swaync &
|
|
emacs --daemon &
|
|
wl-clipboard-history -t &
|
|
wl-paste -p --watch wl-copy -p '' &
|
|
wlsunset -l "$longitude" -L "$latitude" &
|
|
swww-daemon &
|
|
|
|
if [ $host == "lmdesktop" ]; then
|
|
# TODO: find alternative screenlocker/idle manager
|
|
quickshell &
|
|
elif [ $host == "darp8" ]; then
|
|
waybar &
|
|
hypridle &
|
|
hyprlock &
|
|
fi
|
|
}
|
|
|
|
# Monitors
|
|
function monitors() {
|
|
host=$1
|
|
|
|
if [ $host == "lmdesktop" ]
|
|
then
|
|
wlr-randr --output DP-1 --mode 2560x1440@143.973007Hz --pos 0,0 --scale 1 &&
|
|
wlr-randr --output HDMI-A-1 --mode 1920x1080@60Hz --pos 2560,180 --scale 1
|
|
elif [ $host == "darp8" ]
|
|
then
|
|
wlr-randr --output eDP-1 --mode 1920x1080@59.999001Hz --pos 0,0 --scale 1
|
|
fi
|
|
}
|
|
|
|
# Inputs
|
|
|
|
# Inputs :: Touchpad Settings
|
|
function touchpad_apply_rules() {
|
|
touchpad=$1
|
|
|
|
riverctl input "$touchpad" drag-lock disabled
|
|
riverctl input "$touchpad" drag enabled
|
|
riverctl input "$touchpad" tap enabled
|
|
riverctl input "$touchpad" natural-scroll enabled
|
|
riverctl input "$touchpad" middle-emulation enabled
|
|
riverctl input "$touchpad" scroll-method two-finger
|
|
riverctl input "$touchpad" tap-button-map left-right-middle
|
|
riverctl input "$touchpad" click-method click-finger
|
|
riverctl input "$touchpad" accel-profile flat
|
|
riverctl input "$touchpad" disable-while-typing disabled
|
|
riverctl input "$touchpad" scroll-factor 0.6
|
|
riverctl input "$touchpad" pointer-accel 0.3
|
|
riverctl input "$touchpad" scroll-method two-finger
|
|
}
|
|
|
|
# Inputs :: General
|
|
function inputs() {
|
|
riverctl keyboard-layout us
|
|
riverctl focus-follows-cursor normal
|
|
|
|
touchpads=$(riverctl list-inputs | grep '^pointer-.*Touchpad' | awk '{print $1}')
|
|
for touchpad in $touchpads
|
|
do
|
|
touchpad_apply_rules $touchpad
|
|
done
|
|
}
|
|
|
|
# Layout
|
|
function layout() {
|
|
riverctl default-layout rivertile
|
|
}
|
|
|
|
# Binds
|
|
function binds() {
|
|
mod="Super"
|
|
lock="hyprlock"
|
|
|
|
# Binds :: Modes
|
|
mode_reset="riverctl enter-mode normal"
|
|
riverctl declare-mode browser_select
|
|
riverctl map normal $mod B enter-mode browser_select
|
|
riverctl map browser_select None B spawn "$mode_reset && brave"
|
|
riverctl map browser_select None Escape spawn "$mode_reset"
|
|
|
|
# Binds :: Progams
|
|
discord="discord --enable-blink-features=MiddleClickAutoscroll"
|
|
emacs="emacsclient -c -a 'emacs'"
|
|
hyprpicker="hyprpicker -a"
|
|
screenshot="grim - | wl-copy"
|
|
screenshotarea="grim -g \"\$(slurp)\" - | wl-copy"
|
|
riverctl map normal Alt Return spawn ghostty
|
|
riverctl map normal $mod+Shift D spawn "$discord"
|
|
riverctl map normal $mod+Shift E spawn "$emacs"
|
|
riverctl map normal $mod Space spawn wofi
|
|
riverctl map normal $mod P spawn "$hyprpicker"
|
|
riverctl map normal None Print spawn "$screenshotarea"
|
|
riverctl map normal Shift Print spawn "$screenshot"
|
|
|
|
# Binds :: Controls
|
|
reload="$NIX_CONFIG_DIR/configs/river/init no_execs"
|
|
riverctl map normal $mod C close
|
|
riverctl map normal $mod+Control Q spawn "$lock"
|
|
riverctl map normal $mod+Shift R spawn "$reload"
|
|
riverctl map normal $mod F4 exit
|
|
|
|
# Binds :: Controls :: Floating Windows
|
|
riverctl map normal $mod F toggle-float # Toggle floating mode
|
|
riverctl map normal $mod+Shift Space zoom # Focus the main window
|
|
riverctl map-pointer normal $mod BTN_LEFT move-view # Move floating windows
|
|
riverctl map-pointer normal $mod BTN_RIGHT resize-view # Resize floating windows
|
|
|
|
# Binds :: Controls :: rivertile :: Layout Adjustments
|
|
riverctl map normal $mod H send-layout-cmd rivertile "main-ratio -0.05" # Decrease main window size
|
|
riverctl map normal $mod L send-layout-cmd rivertile "main-ratio +0.05" # Increase main window size
|
|
riverctl map normal $mod+Shift H send-layout-cmd rivertile "main-count +1" # Increase number of main windows
|
|
riverctl map normal $mod+Shift L send-layout-cmd rivertile "main-count -1" # Decrease number of main windows
|
|
|
|
# Binds :: Controls :: Multimedia
|
|
# Binds :: Controls :: Multimedia :: Commands
|
|
brightness="$NIX_CONFIG_DIR/scripts/progress-notify.sh brightness"
|
|
brightness_up="brightnessctl set 10%+ && $brightness"
|
|
brightness_down="brightnessctl set 10%- && $brightness"
|
|
audio="$NIX_CONFIG_DIR/scripts/progress-notify.sh audio"
|
|
volume_up="pamixer -i 5 && $audio"
|
|
volume_down="pamixer -d 5 && $audio"
|
|
mute="$NIX_CONFIG_DIR/scripts/progress-notify.sh mute"
|
|
mute_toggle="pamixer -t && $mute"
|
|
|
|
riverctl map -repeat normal None XF86MonBrightnessUp spawn "sh -c '$brightness_up'"
|
|
riverctl map -repeat normal None XF86MonBrightnessDown spawn "sh -c '$brightness_down'"
|
|
riverctl map -repeat normal None XF86AudioRaiseVolume spawn "sh -c '$volume_up'"
|
|
riverctl map -repeat normal None XF86AudioLowerVolume spawn "sh -c '$volume_down'"
|
|
riverctl map normal None XF86AudioMute spawn "sh -c '$mute_toggle'"
|
|
|
|
# Binds :: Controls :: Navigation
|
|
riverctl map normal $mod J focus-view next
|
|
riverctl map normal $mod K focus-view previous
|
|
riverctl map normal $mod+Shift J swap next
|
|
riverctl map normal $mod+Shift K swap previous
|
|
|
|
# Binds :: Controls :: Displays
|
|
riverctl map normal $mod Comma focus-output previous
|
|
riverctl map normal $mod Period focus-output next
|
|
riverctl map normal $mod+Shift Comma spawn "sh -c 'riverctl send-to-output previous && riverctl focus-output previous'"
|
|
riverctl map normal $mod+Shift Period spawn "sh -c 'riverctl send-to-output next && riverctl focus-output next'"
|
|
|
|
# Binds :: Controls :: Tags
|
|
for i in $(seq 1 9)
|
|
do
|
|
tags=$((1 << ($i - 1)))
|
|
# Focus tag
|
|
riverctl map normal $mod $i set-focused-tags $tags
|
|
|
|
# Assign tag to window and focus
|
|
riverctl map normal $mod+Shift $i spawn "sh -c 'riverctl set-view-tags $tags && riverctl set-focused-tags $tags'"
|
|
done
|
|
}
|
|
|
|
function colors() {
|
|
# Set border colors (focused and unfocused windows)
|
|
riverctl border-color-focused 0x93C863 # Green for focused windows
|
|
riverctl border-color-unfocused 0x333333 # Gray for unfocused windows
|
|
}
|
|
|
|
# Process Script Args
|
|
for arg in "$@"; do declare $arg='1'; done
|
|
|
|
# Run Sections
|
|
binds
|
|
colors
|
|
inputs
|
|
layout
|
|
monitors $HOSTNAME
|
|
|
|
# Don't run execs on reload
|
|
if ! [ -v no_execs ]; then execs ; fi
|