diff --git a/bspwm/bspwmrc b/bspwm/bspwmrc new file mode 100755 index 0000000..682b70b --- /dev/null +++ b/bspwm/bspwmrc @@ -0,0 +1,68 @@ +#! /bin/sh + +pgrep -x sxhkd > /dev/null || sxhkd & + +bspc monitor -d I II III IV V VI VII VIII IX X +# bspc monitor eDP1 -d I II III IV +# bspc monitor DP1 -d V VI VII VIII IX X + +bspc config border_width 6 +bspc config window_gap 15 +bspc config top_padding 60 + +bspc config split_ratio 0.55 +bspc config borderless_monocle true +bspc config gapless_monocle true +bspc config pointer_follows_focus true +bspc config focus_follows_pointer true + +bspc rule -a Gimp desktop='^8' state=floating follow=on +bspc rule -a Chromium desktop='^2' +bspc rule -a firefox desktop='^2' +bspc rule -a mplayer2 state=floating +bspc rule -a Yad state=floating +bspc rule -a Kupfer.py focus=on +bspc rule -a Screenkey manage=off +bspc rule -a gl state=floating +bspc rule -a Gl state=floating +bspc rule -a mpv state=floating + +# Border +# dracula blue +bspc config focused_border_color "#bd93f9" +bspc config normal_border_color "#073642" +bspc config active_border_color "#073642" + +# +# Autostart +# +# Set display from arandr saved script +sh ~/.screenlayout/monitor.sh & +# Notifications +/usr/bin/dunst & +# Polkit +/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & +# Wallpaper +# nitrogen --restore & +# Dex +dex -a -s /etc/xdg/autostart/:~/.config/autostart/ +# Picom +picom --config ~/.config/picom/picom.conf & +# Network Applet +nm-applet --indicator & + +# SmoothVideoProject +SVPManager & + +# screensaver +xss-lock -- xscreensaver-command -lock & + +# Bar +# ~/.config/polybar/launch.sh & +~/SudacodeRice/scripts/launch.sh + +# Cursor +# xsetroot -cursor_name left_ptr & + +# Low battery notifier +# ~/.config/bspwm/scripts/low_bat_notifier.sh diff --git a/bspwm/keybindings b/bspwm/keybindings new file mode 100644 index 0000000..59a2a02 --- /dev/null +++ b/bspwm/keybindings @@ -0,0 +1,104 @@ +For the latest version of Endeavour OS Bspwm Edition configs, visit our GitHub repository +https://github.com/EndeavourOS-Community-Editions/bspwm + +For a quick start guide, read our wiki page +https://discovery.endeavouros.com/window-tiling-managers/bspwm-2/2021/03/ + +To share your suggestions, please visit our forum thread +https://forum.endeavouros.com/t/bspwm-edition/8511 + + + + + +################### + +Utility Keyboard Shortcuts + +################### + +-> Open terminal (xfce4-terminal) +Super + Return + +-> App launcher (Rofi) +Super + d + +-> Window switcher +Super + Ctrl + +-> Show SSH sessions +Super + Shift + d + +-> Power Menu +Super + Shift + e + +-> Reload Sxhkd (you need to do this after you modify sxhkdrc) +Super + Escape + +-> Screen shot full monitor and save in Pictures folder +Print + +-> Show screenshot menu +Super + Print + +-> Launch Firefox +Super + w + +-> Launch Thunar +Super + n + + + + + +################### + +Bspwm Keyboard Shortcuts + +################### + +-> Restart Bspwm +Super + Alt + r + +-> Quit Bspwm +Super + Alt + q + +-> Close focused window +Super + Shift + q + +-> Switch between tiled and monocle layout +Super + m + +-> Swap current and largest window +Super + g + +-> Change focus {west, south, north, east} +Super + {h, j, k, l} +It's like vim keys :) + +-> Switch to different desktop +Super + + +-> Send current node to different desktop +Super + Shift + + +-> Expand a window {left, bottom, top, right} +Super + Alt + {h, j, k l} + +-> Contract a window {left, bottom, top, right} +Super + Alt + Shift + {h, j, k, l} + +-> Move a floating window +Super + {left, down, up, right} + +-> Focus the last node +Super + grave + +-> Focus the last desktop +Super + Tab + +-> Focus older node in focus history +Super + o + +-> Focus newer node in focus history +Super + i diff --git a/bspwm/scripts/i3lock-fancy/circlelock.png b/bspwm/scripts/i3lock-fancy/circlelock.png new file mode 100644 index 0000000..232c4e3 Binary files /dev/null and b/bspwm/scripts/i3lock-fancy/circlelock.png differ diff --git a/bspwm/scripts/i3lock-fancy/circlelockdark.png b/bspwm/scripts/i3lock-fancy/circlelockdark.png new file mode 100644 index 0000000..853fe54 Binary files /dev/null and b/bspwm/scripts/i3lock-fancy/circlelockdark.png differ diff --git a/bspwm/scripts/i3lock-fancy/i3lock-fancy.sh b/bspwm/scripts/i3lock-fancy/i3lock-fancy.sh new file mode 100755 index 0000000..4bdaafb --- /dev/null +++ b/bspwm/scripts/i3lock-fancy/i3lock-fancy.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash +# Author: Dolores Portalatin +# Dependencies: imagemagick, i3lock-color-git, scrot, wmctrl (optional) + +# Aquired from https://github.com/meskarune/i3lock-fancy +# Modified for use + +set -o errexit -o noclobber -o nounset + +hue=(-level "0%,100%,0.6") +effect=(-filter Gaussian -resize 20% -define "filter:sigma=1.5" -resize 500.5%) +# default system sans-serif font +font=$(convert -list font | awk "{ a[NR] = \$2 } /family: $(fc-match sans -f "%{family}\n")/ { print a[NR-1]; exit }") +image=$(mktemp --suffix=.png) +shot=(import -window root) +desktop="" +i3lock_cmd=(i3lock -i "$image") +shot_custom=false + +options="Options: + -h, --help This help menu. + + -d, --desktop Attempt to minimize all windows before locking. + + -g, --greyscale Set background to greyscale instead of color. + + -p, --pixelate Pixelate the background instead of blur, runs faster. + + -f , --font Set a custom font. + + -t , --text Set a custom text prompt. + + -l, --listfonts Display a list of possible fonts for use with -f/--font. + Note: this option will not lock the screen, it displays + the list and exits immediately. + + -n, --nofork Do not fork i3lock after starting. + + -- Must be last option. Set command to use for taking a + screenshot. Default is 'import -window root'. Using 'scrot' + or 'maim' will increase script speed and allow setting + custom flags like having a delay." + +# move pipefail down as for some reason "convert -list font" returns 1 +set -o pipefail +trap 'rm -f "$image"' EXIT +temp="$(getopt -o :hdnpglt:f: -l desktop,help,listfonts,nofork,pixelate,greyscale,text:,font: --name "$0" -- "$@")" +eval set -- "$temp" + +# l10n support +text="Type password to unlock" +case "${LANG:-}" in + af_* ) text="Tik wagwoord om te ontsluit" ;; # Afrikaans + de_* ) text="Bitte Passwort eingeben" ;; # Deutsch + da_* ) text="Indtast adgangskode" ;; # Danish + en_* ) text="Type password to unlock" ;; # English + es_* ) text="Ingrese su contraseña" ;; # Española + fr_* ) text="Entrez votre mot de passe" ;; # Français + he_* ) text="הליענה לטבל המסיס דלקה" ;; # Hebrew עברית (convert doesn't play bidi well) + hi_* ) text="अनलॉक करने के लिए पासवर्ड टाईप करें" ;; #Hindi + id_* ) text="Masukkan kata sandi Anda" ;; # Bahasa Indonesia + it_* ) text="Inserisci la password" ;; # Italian + ja_* ) text="パスワードを入力してください" ;; # Japanese + lv_* ) text="Ievadi paroli" ;; # Latvian + nb_* ) text="Skriv inn passord" ;; # Norwegian + pl_* ) text="Podaj hasło" ;; # Polish + pt_* ) text="Digite a senha para desbloquear" ;; # Português + tr_* ) text="Giriş yapmak için şifrenizi girin" ;; # Turkish + ru_* ) text="Введите пароль" ;; # Russian + * ) text="Type password to unlock" ;; # Default to English +esac + +while true ; do + case "$1" in + -h|--help) + printf "Usage: %s [options]\n\n%s\n\n" "${0##*/}" "$options"; exit 1 ;; + -d|--desktop) desktop=$(command -V wmctrl) ; shift ;; + -g|--greyscale) hue=(-level "0%,100%,0.6" -set colorspace Gray -average) ; shift ;; + -p|--pixelate) effect=(-scale 10% -scale 1000%) ; shift ;; + -f|--font) + case "$2" in + "") shift 2 ;; + *) font=$2 ; shift 2 ;; + esac ;; + -t|--text) text=$2 ; shift 2 ;; + -l|--listfonts) + convert -list font | awk -F: '/Font: / { print $2 }' | sort -du | command -- ${PAGER:-less} + exit 0 ;; +-n|--nofork) i3lock_cmd+=(--nofork) ; shift ;; + --) shift; shot_custom=true; break ;; + *) echo "error" ; exit 1 ;; + esac +done + +if "$shot_custom" && [[ $# -gt 0 ]]; then + shot=("$@"); +fi + +command -- "${shot[@]}" "$image" + +value="60" #brightness value to compare to + +color=$(convert "$image" -gravity center -crop 100x100+0+0 +repage -colorspace hsb \ + -resize 1x1 txt:- | awk -F '[%$]' 'NR==2{gsub(",",""); printf "%.0f\n", $(NF-1)}'); + +if [[ $color -gt $value ]]; then #white background image and black text + bw="black" + icon="/home/$USER/.config/bspwm/scripts/i3lock-fancy/circlelockdark.png" + param=("--insidecolor=0000001c" "--ringcolor=0000003e" \ + "--linecolor=00000000" "--keyhlcolor=ffffff80" "--ringvercolor=ffffff00" \ + "--separatorcolor=22222260" "--insidevercolor=ffffff1c" \ + "--ringwrongcolor=ffffff55" "--insidewrongcolor=ffffff1c" \ + "--verifcolor=ffffff00" "--wrongcolor=ff000000" "--timecolor=ffffff00" \ + "--datecolor=ffffff00" "--layoutcolor=ffffff00") +else #black + bw="white" + icon="/home/$USER/.config/bspwm/scripts/i3lock-fancy/circlelock.png" + param=("--insidecolor=ffffff1c" "--ringcolor=ffffff3e" \ + "--linecolor=ffffff00" "--keyhlcolor=00000080" "--ringvercolor=00000000" \ + "--separatorcolor=22222260" "--insidevercolor=0000001c" \ + "--ringwrongcolor=00000055" "--insidewrongcolor=0000001c" \ + "--verifcolor=00000000" "--wrongcolor=ff000000" "--timecolor=00000000" \ + "--datecolor=00000000" "--layoutcolor=00000000") +fi + +convert "$image" "${hue[@]}" "${effect[@]}" -font "$font" -pointsize 26 -fill "$bw" -gravity center \ + -annotate +0+160 "$text" "$icon" -gravity center -composite "$image" + +# If invoked with -d/--desktop, we'll attempt to minimize all windows (ie. show +# the desktop) before locking. +${desktop} ${desktop:+-k on} + +# try to use i3lock with prepared parameters +if ! "${i3lock_cmd[@]}" "${param[@]}" >/dev/null 2>&1; then + # We have failed, lets get back to stock one + "${i3lock_cmd[@]}" +fi + +# As above, if we were passed -d/--desktop, we'll attempt to restore all windows +# after unlocking. +${desktop} ${desktop:+-k off} diff --git a/bspwm/scripts/keybindings_rofi.sh b/bspwm/scripts/keybindings_rofi.sh new file mode 100755 index 0000000..779a20a --- /dev/null +++ b/bspwm/scripts/keybindings_rofi.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +awk '/^[a-z]/ && last {print "",$0,"\t",last,""} {last=""} /^#/{last=$0}' ~/.config/sxhkd/sxhkdrc | + column -t -s $'\t' | + rofi -dmenu -i -p "keybindings:" -markup-rows -no-show-icons -width 1000 -lines 15 -yoffset 40 diff --git a/bspwm/scripts/low_bat_notifier.sh b/bspwm/scripts/low_bat_notifier.sh new file mode 100755 index 0000000..a438a12 --- /dev/null +++ b/bspwm/scripts/low_bat_notifier.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +### VARIABLES + +POLL_INTERVAL=60 # seconds at which to check battery level +LOW_BAT=33 # lesser than this is considered low battery + +# If BAT0 doesn't work for you, check available devices with command below +# +# $ ls -1 /sys/class/power_supply/ +# +BAT_PATH=/sys/class/power_supply/BAT0 +BAT_STAT=$BAT_PATH/status + +if [[ -f $BAT_PATH/charge_full ]] +then + BAT_FULL=$BAT_PATH/charge_full + BAT_NOW=$BAT_PATH/charge_now +elif [[ -f $BAT_PATH/energy_full ]] +then + BAT_FULL=$BAT_PATH/energy_full + BAT_NOW=$BAT_PATH/energy_now +else + exit +fi + +### END OF VARIABLES + +kill_running() { # stop older instances to not get multiple notifications + local mypid=$$ + + declare pids=($(pgrep -f ${0##*/})) + + for pid in ${pids[@]/$mypid/}; do + kill $pid + sleep 1 + done +} + +# Run only if battery is detected +if ls -1qA /sys/class/power_supply/ | grep -q . +then + + kill_running + + while true + do + bf=$(cat $BAT_FULL) + bn=$(cat $BAT_NOW) + bs=$(cat $BAT_STAT) + + bat_percent=$(( 100 * $bn / $bf )) + + if [[ $bat_percent -lt $LOW_BAT && "$bs" = "Discharging" ]] + then + notify-send --urgency=critical "$bat_percent% : Low Battery!" + fi + sleep $POLL_INTERVAL + done +fi diff --git a/bspwm/scripts/screenshot.sh b/bspwm/scripts/screenshot.sh new file mode 100644 index 0000000..5d81cb1 --- /dev/null +++ b/bspwm/scripts/screenshot.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# options to be displayed +option0="screen" +option1="area" +option2="window" + +# options to be displyed +options="$option0\n$option1\n$option2" + +selected="$(echo -e "$options" | rofi -lines 3 -dmenu -p "scrot")" +case $selected in + $option0) + cd ~/Pictures/ && sleep 1 && scrot;; + $option1) + cd ~/Pictures/ && scrot -s;; + $option2) + cd ~/Pictures/ && sleep 1 && scrot -u;; +esac + diff --git a/sxhkd/sxhkdrc b/sxhkd/sxhkdrc new file mode 100644 index 0000000..0cde10e --- /dev/null +++ b/sxhkd/sxhkdrc @@ -0,0 +1,211 @@ +# +# wm independent hotkeys +# + +# sauce +alt + shift + a + aniwrapper + +control + alt + n + variety -n + +# terminal emulator +alt + Return + alacritty + +# program launcher +alt + d + rofi -modi drun -show drun + +# show open window +alt + ctrl + d + rofi -modi drun -show window -line-padding 4 \ + -columns 2 -padding 50 -hide-scrollbar -terminal alacritty \ + -show-icons -drun-icon-theme "Arc-X-D" \ + -font "Droid Sans Regular 10" -dpi 200 + +# show ssh sesssions +alt + shift + d + rofi -modi drun -show ssh -line-padding 4 \ + -columns 2 -padding 50 -hide-scrollbar -terminal alacritty \ + -show-icons -drun-icon-theme "Arc-X-D" \ + -font "Droid Sans Regular 10" -dpi 200 + +# power-menu +alt + shift + e + ~/.config/rofi/powermenu.sh + +# make sxhkd reload its configuration files: +alt + Escape + pkill -USR1 -x sxhkd + +# +# bspwm hotkeys +# + +# quit/restart bspwm +super + alt + {q,r} + bspc {quit,wm -r} + +# close and kill +alt + {_,shift + }q + bspc node -{c,k} + +# alternate between the tiled and monocle layout +alt + m + bspc desktop -l next + +# send the newest marked node to the newest preselected node +alt + y + bspc node newest.marked.local -n newest.!automatic.local + +# swap the current node and the biggest window +alt + g + bspc node -s biggest.window + +# +# state/flags +# + +# set the window state +alt + {t,shift + t,s,f} + bspc node -t {tiled,pseudo_tiled,floating,fullscreen} + +# set the node flags +alt + ctrl + {m,x,y,z} + bspc node -g {marked,locked,sticky,private} + +# +# focus/swap +# + +# focus the node in the given direction +alt + {_,shift + }{h,j,k,l} + bspc node -{f,s} {west,south,north,east} + +# focus the node for the given path jump +super + {p,b,comma,period} + bspc node -f @{parent,brother,first,second} + +# focus the next/previous window in the current desktop +alt + {_,shift + }c + bspc node -f {next,prev}.local.!hidden.window + +# focus the next/previous desktop in the current monitor +alt + bracket{left,right} + bspc desktop -f {prev,next}.local + +# focus the last node/desktop +alt + {grave,Tab} + bspc {node,desktop} -f last + +# focus the older or newer node in the focus history +super + {o,i} + bspc wm -h off; \ + bspc node {older,newer} -f; \ + bspc wm -h on + +# focus or send to the given desktop +alt + {_,shift + }{1-9,0} + bspc {desktop -f,node -d} '^{1-9,10}' + +# +# preselect +# + +# preselect the direction +alt + ctrl + {h,j,k,l} + bspc node -p {west,south,north,east} + +# preselect the ratio +super + ctrl + {1-9} + bspc node -o 0.{1-9} + +# cancel the preselection for the focused node +super + shift + space + bspc node -p cancel + +# cancel the preselection for the focused desktop +super + ctrl + shift + space + bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel + +# +# move/resize +# + +# expand a window by moving one of its side outward +super + alt + {h,j,k,l} + bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0} + +# contract a window by moving one of its side inward +super + alt + shift + {h,j,k,l} + bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0} + +# move a floating window +super + {Left,Down,Up,Right} + bspc node -v {-20 0,0 20,0 -20,20 0} +# +# Special hotkeys +# + +# Multimedia keys +XF86AudioRaiseVolume + amixer -q set Master 5%+ unmute && ~/SudacodeRice/scripts/dunst_volume/dunst_volume.py increase + +XF86AudioLowerVolume + amixer -q set Master 5%- unmute && ~/SudacodeRice/scripts/dunst_volume/dunst_volume.py decrease + +XF86AudioMute + amixer -D pulse sset Master toggle-mute && ~/SudacodeRice/scripts/dunst_volume/dunst_volume.py mute + +# XF86AudioRaiseVolume @DEFAULT_SINK@ +10%; ~/SudacodeRice/scripts/dunst_volume/dunst_volume.py increase + +# XF86AudioLowerVolume pactl set-sink-volume @DEFAULT_SINK@ -10%; ~/SudacodeRice/scripts/dunst_volume/dunst_volume.py decrease + +# XF86AudioMute @DEFAULT_SINK@ toggle; ~/SudacodeRice/scripts/dunst_volume/dunst_volume.py mute + + +# amixer -q set Master toggle +# Simple amixer command seems to have problems unmuting device + +# Brightness up +XF86MonBrightnessUp + xbacklight -inc 5 + +# And brightness down +XF86MonBrightnessDown + xbacklight -dec 5 + +# Screenshot +Print + scrot ~/Pictures/Screenshot-$(date +%F_%T).png + +alt+Print + ~/.config/bspwm/scripts/screenshot.sh + +# Shortcuts +super + w + firefox + +super + t + thunar + +super + F1 + ~/.config/bspwm/scripts/keybindings_rofi.sh + +# ncmpcpp +alt + n + alacritty -e ncmpcpp + +# bpytop +alt + b + alacritty -e bpytop + + +# Rofi +control + shift + s + ~/Work/rofi/rofi-ssh.sh "$HOME/SudacodeRice/rofi/flat-orange-4k.rasi" +alt + shift + p + ~/Work/rofi/rofi-picom.sh +control + shift + r + ~/Work/rofi/rofi-rdp.sh "$HOME/SudacodeRice/rofi/flat-orange-4k.rasi"