initial commit

This commit is contained in:
Cynthia Foxwell 2022-02-15 14:07:11 -07:00
commit 2564138cff
22 changed files with 2642 additions and 0 deletions

32
linux/.Xresources Normal file
View file

@ -0,0 +1,32 @@
! special
*.foreground: #dedbeb
*.background: #2a2331
*.cursorColor: #dedbeb
*.cursorColor2: #634e75
! colors
*.color0: #231d29
*.color1: #e83f80
*.color2: #a2baa8
*.color3: #eacac0
*.color4: #9985d1
*.color5: #e68ac1
*.color6: #aabae7
*.color7: #dedbeb
*.color8: #302838
*.color9: #f55d8f
*.color10: #bfd1c3
*.color11: #f0ddd8
*.color12: #b4a4de
*.color13: #edabd2
*.color14: #c4d1f5
*.color15: #edebf7
! urxvt
URxvt.font: xft:Terminus:size=9
URxvt.perl-ext-common: clipboard
URxvt.clipboard.autocopy: false
URxvt.keysym.C-S-c: perl:clipboard:copy
URxvt.keysym.C-S-v: perl:clipboard:paste

View file

@ -0,0 +1,23 @@
#! /bin/sh
picom &
vmware-user-suid-wrapper &
pgrep -f xmousepasteblock > /dev/null || xmousepasteblock &
~/.fehbg &
~/.local/bin/polybar.sh &
pgrep -x sxhkd > /dev/null || sxhkd &
bspc monitor -d I II III IV V VI VII VIII
bspc config border_width 2
bspc config window_gap 8
bspc config top_padding 16
bspc config normal_border_color $(xrdb -query | awk '/*.background:/ { print substr($2,1) }')
bspc config focused_border_color $(xrdb -query | awk '/*.color5:/ { print substr($2,1) }')
bspc config presel_feedback_color $(xrdb -query | awk '/*.color1:/ { print substr($2,1) }')
bspc config split_ratio 0.52
bspc config borderless_monocle true
bspc config gapless_monocle true

View file

@ -0,0 +1,160 @@
[colors]
bg = ${xrdb:background:#2a2331}
fg = ${xrdb:foreground:#dedbeb}
hi = ${xrdb:cursorColor2:#634e75}
tr = #00000000
0 = ${xrdb:color0:#231d29}
1 = ${xrdb:color1:#e83f80}
2 = ${xrdb:color2:#a2baa8}
3 = ${xrdb:color3:#eacac0}
4 = ${xrdb:color4:#9985d1}
5 = ${xrdb:color5:#e68ac1}
6 = ${xrdb:color6:#aabae7}
7 = ${xrdb:color7:#dedbeb}
8 = ${xrdb:color8:#302838}
9 = ${xrdb:color9:#f55d8f}
10 = ${xrdb:color10:#bfd1c3}
11 = ${xrdb:color11:#f0ddd8}
12 = ${xrdb:color12:#b4a4de}
13 = ${xrdb:color13:#edabd2}
14 = ${xrdb:color14:#c4d1f5}
15 = ${xrdb:color15:#edebf7}
[bar/bar]
width = 100%
height = 16
bottom = false
background = ${colors.bg}
foreground = ${colors.fg}
line-size = 0
border-size = 0
border-color = ${colors.tr}
font-0 = terminus:pixelsize=8;1
font-1 = siji:pixelsize=8;1
font-2 = unifont:size=8;1
modules-left = workspace
modules-center = polywins
modules-right = music cpu ram volume bclock
tray-position = right
tray-padding = 1
tray-background = ${colors.bg}
override-redirect = true
[global/wm]
margin-top = 16
[settings]
format-background = ${colors.bg}
format-foreground = ${colors.fg}
format-padding = 1
[module/date]
type = internal/date
interval = 1.0
time =  %H:%M:%S
time-alt =  %a, %m/%d/%Y
label = %time%
label-foreground = ${colors.6}
[module/bclock]
type = custom/script
exec = ~/.config/polybar/scripts/binaryclock-polybar.sh
tail = true
click-left = "kill -USR1 $(pgrep --oldest --parent %pid%)"
label-foreground = ${colors.6}
[module/volume]
type = internal/alsa
format-volume = <ramp-volume> <label-volume>
label-volume = %percentage%%
format-volume-foreground = ${colors.4}
label-muted =  0%
label-muted-foreground = ${colors.1}
ramp-volume-0 = 
ramp-volume-1 = 
ramp-volume-2 = 
[module/ram]
type = internal/memory
format = <label>
label =  %mb_used%  %mb_swap_used%
label-foreground = ${colors.2}
[module/cpu]
type = internal/cpu
interval = 0.5
format = <label>
label =  %percentage-cores%
label-foreground = ${colors.3}
[module/music]
type = custom/script
exec = ~/.config/polybar/scripts/cmus-polybar.sh
exec-if = pgrep -x cmus
tail = true
interval = 0.5
label-foreground = ${colors.5}
[module/window]
type = internal/xwindow
label =  %title%
label-empty =
[module/workspace]
type = internal/bspwm
enable-click = true
enable-scroll = true
reverse-scroll = false
format = <label-state>
format-padding = 0
label-focused = %name%
label-focused-foreground = ${colors.5}
label-focused-padding = 1
label-occupied = %name%
label-occupied-foreground = ${colors.hi}
label-occupied-padding = 1
label-urgent = %name%
label-urgent-foreground = ${colors.1}
label-urgent-padding = 1
label-empty = %name%
label-empty-foreground = ${colors.fg}
label-empty-padding = 1
[module/polywins]
type = custom/script
exec = ~/.config/polybar/scripts/polywins.sh 2>/dev/null
format = <label>
label = %output%
tail = true
; vim: ft=dosini

View file

@ -0,0 +1,46 @@
#!/bin/bash
state=0
sleep_pid=0
function toggle() {
state=$(((state+1)%3))
if [ "$sleep_pid" -ne 0 ]; then
kill $sleep_pid >/dev/null 2>&1
fi
}
trap "toggle" USR1
function bclock() {
local row0=("" "⠈" "⠐" "⠘" "⠠" "⠨" "⠰" "⠸" "⢀" "⢈")
local row1=("⠁" "⠉" "⠑" "⠙" "⠡" "⠩" "⠱" "⠹" "⢁" "⢉")
local row2=("⠂" "⠊" "⠒" "⠚" "⠢" "⠪" "⠲" "⠺" "⢂" "⢊")
local row3=("⠃" "⠋" "⠓" "⠛" "⠣" "⠫" "⠳" "⠻" "⢃" "⢋")
local row4=("⠄" "⠌" "⠔" "⠜" "⠤" "⠬" "⠴" "⠼" "⢄" "⢌")
local row5=("⠅" "⠍" "⠕" "⠝" "⠥" "⠭" "⠵" "⠽" "⢅" "⢍")
local chars=("${row0[@]}" "${row1[@]}" "${row2[@]}" "${row3[@]}" "${row4[@]}" "${row5[@]}")
local hour=$(date +"%H")
local minute=$(date +"%M")
local second=$(date +"%S")
[[ $hour = 0* ]] && hour=${hour:1:1}
[[ $minute = 0* ]] && minute=${minute:1:1}
[[ $second = 0* ]] && second=${second:1:1}
echo "${chars[$hour]} ${chars[$minute]} ${chars[$second]}"
}
while true; do
if [ $state -eq 0 ]; then
bclock
elif [ $state -eq 1 ]; then
echo "$(date +'%H:%M:%S')"
else
echo "$(date +'%a, %m/%d/%Y')"
fi
sleep 1 &
sleep_pid=$!
wait
done

View file

@ -0,0 +1,47 @@
#!/bin/bash
status=$(cmus-remote -Q | awk '/status / {print $2}')
albumartist=$(cmus-remote -Q | awk '/tag albumartist / {$1="";$2="";print substr($0,3)}')
artist=$(cmus-remote -Q | awk '/tag artist / {$1="";$2="";print substr($0,3)}')
title=$(cmus-remote -Q | awk '/tag title / {$1="";$2="";print substr($0,3)}')
duration=$(cmus-remote -Q | awk '/duration/ {print $2}')
position=$(cmus-remote -Q | awk '/position/ {print $2}')
nowplaying=""
if [ "$status" == "paused" ]; then
nowplaying+="$(printf '\ue09b')"
elif [ "$status" == "stopped" ]; then
nowplaying+="$(printf '\ue099')"
else
nowplaying+="$(printf '\ue0fe')"
fi
nowplaying+=" "
if [ "$albumartist" != "" ]; then
nowplaying+="$albumartist"
else
nowplaying+="$artist"
fi
nowplaying+=" - $title"
if [ "$albumartist" != "" && "$albumartist" != "$artist" ]; then
nowplaying+=" // $artist"
fi
position_formatted=""
duration_formatted=""
if [ $position -ge 3600 ]; then
position_formatted+=$(printf '%02d:' $(($position/3600)))
fi
position_formatted+=$(printf '%02d:%02d' $(($position%3600/60)) $(($position%60)))
if [ $duration -ge 3600 ]; then
duration_formatted+=$(printf '%02d:' $(($duration/3600)))
fi
duration_formatted+=$(printf '%02d:%02d' $(($duration%3600/60)) $(($duration%60)))
nowplaying+=" [$position_formatted/$duration_formatted]"
echo $nowplaying

View file

@ -0,0 +1,242 @@
#!/bin/sh
# POLYWINS
# SETTINGS {{{ ---
active_text_color="$(xrdb -query | awk '/*.color7:/ { print substr($2,1) }')"
active_bg=
active_underline=
inactive_text_color="$(xrdb -query | awk '/*.cursorColor2:/ { print substr($2,1) }')"
inactive_bg=
inactive_underline=
separator=""
show="window_title" # options: window_title, window_class, window_classname
forbidden_classes="Polybar Conky Gmrun"
empty_desktop_message=""
char_limit=10
max_windows=15
char_case="normal" # normal, upper, lower
add_spaces="true"
resize_increment=16
wm_border_width=1 # setting this might be required for accurate resize position
# --- }}}
main() {
# If no argument passed...
if [ -z "$2" ]; then
# ...print new window list every time
# the active window changes or
# a window is opened or closed
xprop -root -spy _NET_CLIENT_LIST _NET_ACTIVE_WINDOW |
while IFS= read -r _; do
generate_window_list
done
# If arguments are passed, run requested on-click function
else
"$@"
fi
}
# ON-CLICK FUNCTIONS {{{ ---
raise_or_minimize() {
if [ "$(get_active_wid)" = "$1" ]; then
wmctrl -ir "$1" -b toggle,hidden
else
wmctrl -ir "$1" -b remove,hidden; wmctrl -ia "$1"
fi
}
close() {
wmctrl -ic "$1"
}
slop_resize() {
wmctrl -ia "$1"
wmctrl -ir "$1" -e "$(slop -f 0,%x,%y,%w,%h)"
}
increment_size() {
while IFS="[ .]" read -r wid ws wx wy ww wh _; do
test "$wid" != "$1" && continue
x=$(( wx - wm_border_width * 2 - resize_increment / 2 ))
y=$(( wy - wm_border_width * 2 - resize_increment / 2 ))
w=$(( ww + resize_increment ))
h=$(( wh + resize_increment ))
done <<-EOF
$(wmctrl -lG)
EOF
wmctrl -ir "$1" -e "0,$x,$y,$w,$h"
}
decrement_size() {
while IFS="[ .]" read -r wid ws wx wy ww wh _; do
test "$wid" != "$1" && continue
x=$(( wx - wm_border_width * 2 + resize_increment / 2 ))
y=$(( wy - wm_border_width * 2 + resize_increment / 2 ))
w=$(( ww - resize_increment ))
h=$(( wh - resize_increment ))
done <<-EOF
$(wmctrl -lG)
EOF
wmctrl -ir "$1" -e "0,$x,$y,$w,$h"
}
# --- }}}
# WINDOW LIST SETUP {{{ ---
active_left="%{F$active_text_color}"
active_right="%{F-}"
inactive_left="%{F$inactive_text_color}"
inactive_right="%{F-}"
separator="%{F$inactive_text_color}$separator%{F-}"
if [ -n "$active_underline" ]; then
active_left="${active_left}%{+u}%{u$active_underline}"
active_right="%{-u}${active_right}"
fi
if [ -n "$active_bg" ]; then
active_left="${active_left}%{B$active_bg}"
active_right="%{B-}${active_right}"
fi
if [ -n "$inactive_underline" ]; then
inactive_left="${inactive_left}%{+u}%{u$inactive_underline}"
inactive_right="%{-u}${inactive_right}"
fi
if [ -n "$inactive_bg" ]; then
inactive_left="${inactive_left}%{B$inactive_bg}"
inactive_right="%{B-}${inactive_right}"
fi
get_active_wid() {
active_wid=$(xprop -root _NET_ACTIVE_WINDOW)
active_wid="${active_wid#*\# }"
active_wid="${active_wid%,*}" # Necessary for XFCE
while [ ${#active_wid} -lt 10 ]; do
active_wid="0x0${active_wid#*x}"
done
echo "$active_wid"
}
get_active_workspace() {
wmctrl -d |
while IFS="[ .]" read -r number active_status _; do
test "$active_status" = "*" && echo "$number" && break
done
}
generate_window_list() {
active_workspace=$(get_active_workspace)
active_wid=$(get_active_wid)
window_count=0
on_click="$0"
# Format each window name one by one
# Space and . are both used as IFS,
# because classname and class are separated by '.'
while IFS="[ .\.]" read -r wid ws cname cls host title; do
# Don't show the window if on another workspace (-1 = sticky)
if [ "$ws" != "$active_workspace" ] && [ "$ws" != "-1" ]; then
continue
fi
# Don't show the window if its class is forbidden
case "$forbidden_classes" in
*$cls*) continue ;;
esac
# If max number of windows reached, just increment
# the windows counter
if [ "$window_count" -ge "$max_windows" ]; then
window_count=$(( window_count + 1 ))
continue
fi
# Show the user-selected window property
case "$show" in
"window_class") w_name="$cls" ;;
"window_classname") w_name="$cname" ;;
"window_title") w_name="$title" ;;
esac
# Use user-selected character case
case "$char_case" in
"lower") w_name=$(
echo "$w_name" | tr '[:upper:]' '[:lower:]'
) ;;
"upper") w_name=$(
echo "$w_name" | tr '[:lower:]' '[:upper:]'
) ;;
esac
# Truncate displayed name to user-selected limit
if [ "${#w_name}" -gt "$char_limit" ]; then
w_name="$(echo "$w_name" | cut -c1-$((char_limit-1)))"
fi
# Apply add-spaces setting
if [ "$add_spaces" = "true" ]; then
w_name=" $w_name "
fi
# Add left and right formatting to displayed name
if [ "$wid" = "$active_wid" ]; then
w_name="${active_left}${w_name}${active_right}"
else
w_name="${inactive_left}${w_name}${inactive_right}"
fi
# Add separator unless the window is first in list
if [ "$window_count" != 0 ]; then
printf "%s" "$separator"
fi
# Add on-click action Polybar formatting
printf "%s" "%{A1:$on_click raise_or_minimize $wid:}"
printf "%s" "%{A2:$on_click close $wid:}"
printf "%s" "%{A3:$on_click slop_resize $wid:}"
printf "%s" "%{A4:$on_click increment_size $wid:}"
printf "%s" "%{A5:$on_click decrement_size $wid:}"
# Print the final window name
printf "%s" "$w_name"
printf "%s" "%{A}%{A}%{A}%{A}%{A}"
window_count=$(( window_count + 1 ))
done <<-EOF
$(wmctrl -lx)
EOF
# After printing all the windows,
# print number of hidden windows
if [ "$window_count" -gt "$max_windows" ]; then
printf "%s" "+$(( window_count - max_windows ))"
fi
# Print empty desktop message if no windows are open
if [ "$window_count" = 0 ]; then
printf "%s" "$empty_desktop_message"
fi
# Print newline
echo ""
}
# --- }}}
main "$@"

View file

@ -0,0 +1,66 @@
/* ==========================================================================
Rofi color theme
Based on the Gruvbox color scheme for Vim by morhetz
https://github.com/morhetz/gruvbox
File: gruvbox-dark.rasi
Desc: Gruvbox dark color theme for Rofi
Author: bardisty <b@bah.im>
Source: https://github.com/bardisty/gruvbox-rofi
Modified: Mon Feb 12 2018 04:08:43 PST -0800
========================================================================== */
* {
/* Theme settings */
highlight: bold italic;
scrollbar: true;
/* Gruvbox dark colors */
gruvbox-dark-bg0: #2a2331;
gruvbox-dark-bg0-soft: #2a2331;
gruvbox-dark-bg3: #e83f80;
gruvbox-dark-fg0: #dedbeb;
gruvbox-dark-fg1: #dedbeb;
gruvbox-dark-red-dark: #cc241d;
gruvbox-dark-red-light: #fb4934;
gruvbox-dark-yellow-dark: #d79921;
gruvbox-dark-yellow-light: #fabd2f;
gruvbox-dark-gray: #634e75;
/* Theme colors */
background: @gruvbox-dark-bg0;
background-color: @background;
foreground: @gruvbox-dark-fg1;
border-color: @gruvbox-dark-gray;
separatorcolor: @border-color;
scrollbar-handle: @border-color;
normal-background: @background;
normal-foreground: @foreground;
alternate-normal-background: @gruvbox-dark-bg0-soft;
alternate-normal-foreground: @foreground;
selected-normal-background: @gruvbox-dark-bg3;
selected-normal-foreground: @gruvbox-dark-fg0;
active-background: @gruvbox-dark-yellow-dark;
active-foreground: @background;
alternate-active-background: @active-background;
alternate-active-foreground: @active-foreground;
selected-active-background: @gruvbox-dark-yellow-light;
selected-active-foreground: @active-foreground;
urgent-background: @gruvbox-dark-red-dark;
urgent-foreground: @background;
alternate-urgent-background: @urgent-background;
alternate-urgent-foreground: @urgent-foreground;
selected-urgent-background: @gruvbox-dark-red-light;
selected-urgent-foreground: @urgent-foreground;
}
@import "gruvbox-common.rasi"
window {
width: 512px;
height: 384px;
}

View file

@ -0,0 +1,148 @@
configuration {
modi: "drun,run,combi";
font: "Terminus 9";
/* location: 0;*/
/* yoffset: 0;*/
/* xoffset: 0;*/
/* fixed-num-lines: true;*/
show-icons: true;
/* terminal: "rofi-sensible-terminal";*/
/* ssh-client: "ssh";*/
/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/
/* run-command: "{cmd}";*/
/* run-list-command: "";*/
/* run-shell-command: "{terminal} -e {cmd}";*/
/* window-command: "wmctrl -i -R {window}";*/
/* window-match-fields: "all";*/
icon-theme: "Chicago95-tux";
/* drun-match-fields: "name,generic,exec,categories,keywords";*/
/* drun-categories: ;*/
/* drun-show-actions: false;*/
/* drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";*/
/* drun-url-launcher: "xdg-open";*/
/* disable-history: false;*/
/* ignored-prefixes: "";*/
/* sort: false;*/
/* sorting-method: "normal";*/
/* case-sensitive: false;*/
/* cycle: true;*/
/* sidebar-mode: false;*/
/* hover-select: false;*/
/* eh: 1;*/
/* auto-select: false;*/
/* parse-hosts: false;*/
/* parse-known-hosts: true;*/
combi-modi: "drun,run";
/* matching: "normal";*/
/* tokenize: true;*/
/* m: "-5";*/
/* filter: ;*/
/* dpi: -1;*/
/* threads: 0;*/
/* scroll-method: 0;*/
/* window-format: "{w} {c} {t}";*/
/* click-to-exit: true;*/
/* theme: "amora";*/
/* max-history-size: 25;*/
/* combi-hide-mode-prefix: false;*/
/* matching-negate-char: '-' /* unsupported */;*/
/* cache-dir: ;*/
/* window-thumbnail: false;*/
/* drun-use-desktop-cache: false;*/
/* drun-reload-desktop-cache: false;*/
/* normalize-match: false;*/
/* steal-focus: false;*/
application-fallback-icon: "application-default-icon";
/* pid: "/run/user/1000/rofi.pid";*/
/* display-window: ;*/
/* display-windowcd: ;*/
/* display-run: ;*/
/* display-ssh: ;*/
/* display-drun: ;*/
/* display-combi: ;*/
/* display-keys: ;*/
/* display-filebrowser: ;*/
/* kb-primary-paste: "Control+V,Shift+Insert";*/
/* kb-secondary-paste: "Control+v,Insert";*/
/* kb-clear-line: "Control+w";*/
/* kb-move-front: "Control+a";*/
/* kb-move-end: "Control+e";*/
/* kb-move-word-back: "Alt+b,Control+Left";*/
/* kb-move-word-forward: "Alt+f,Control+Right";*/
/* kb-move-char-back: "Left,Control+b";*/
/* kb-move-char-forward: "Right,Control+f";*/
/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
/* kb-remove-word-forward: "Control+Alt+d";*/
/* kb-remove-char-forward: "Delete,Control+d";*/
/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/
/* kb-remove-to-eol: "Control+k";*/
/* kb-remove-to-sol: "Control+u";*/
/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
/* kb-accept-custom: "Control+Return";*/
/* kb-accept-custom-alt: "Control+Shift+Return";*/
/* kb-accept-alt: "Shift+Return";*/
/* kb-delete-entry: "Shift+Delete";*/
/* kb-mode-next: "Shift+Right,Control+Tab";*/
/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
/* kb-mode-complete: "Control+l";*/
/* kb-row-left: "Control+Page_Up";*/
/* kb-row-right: "Control+Page_Down";*/
/* kb-row-up: "Up,Control+p,ISO_Left_Tab";*/
/* kb-row-down: "Down,Control+n";*/
/* kb-row-tab: "Tab";*/
/* kb-page-prev: "Page_Up";*/
/* kb-page-next: "Page_Down";*/
/* kb-row-first: "Home,KP_Home";*/
/* kb-row-last: "End,KP_End";*/
/* kb-row-select: "Control+space";*/
/* kb-screenshot: "Alt+S";*/
/* kb-ellipsize: "Alt+period";*/
/* kb-toggle-case-sensitivity: "grave,dead_grave";*/
/* kb-toggle-sort: "Alt+grave";*/
/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/
/* kb-custom-1: "Alt+1";*/
/* kb-custom-2: "Alt+2";*/
/* kb-custom-3: "Alt+3";*/
/* kb-custom-4: "Alt+4";*/
/* kb-custom-5: "Alt+5";*/
/* kb-custom-6: "Alt+6";*/
/* kb-custom-7: "Alt+7";*/
/* kb-custom-8: "Alt+8";*/
/* kb-custom-9: "Alt+9";*/
/* kb-custom-10: "Alt+0";*/
/* kb-custom-11: "Alt+exclam";*/
/* kb-custom-12: "Alt+at";*/
/* kb-custom-13: "Alt+numbersign";*/
/* kb-custom-14: "Alt+dollar";*/
/* kb-custom-15: "Alt+percent";*/
/* kb-custom-16: "Alt+dead_circumflex";*/
/* kb-custom-17: "Alt+ampersand";*/
/* kb-custom-18: "Alt+asterisk";*/
/* kb-custom-19: "Alt+parenleft";*/
/* kb-select-1: "Super+1";*/
/* kb-select-2: "Super+2";*/
/* kb-select-3: "Super+3";*/
/* kb-select-4: "Super+4";*/
/* kb-select-5: "Super+5";*/
/* kb-select-6: "Super+6";*/
/* kb-select-7: "Super+7";*/
/* kb-select-8: "Super+8";*/
/* kb-select-9: "Super+9";*/
/* kb-select-10: "Super+0";*/
/* ml-row-left: "ScrollLeft";*/
/* ml-row-right: "ScrollRight";*/
/* ml-row-up: "ScrollUp";*/
/* ml-row-down: "ScrollDown";*/
/* me-select-entry: "MousePrimary";*/
/* me-accept-entry: "MouseDPrimary";*/
/* me-accept-custom: "Control+MouseDPrimary";*/
timeout {
action: "kb-cancel";
delay: 0;
}
filebrowser {
directories-first: true;
sorting-method: "name";
}
}
@theme "amora"

108
linux/.config/sxhkd/sxhkdrc Normal file
View file

@ -0,0 +1,108 @@
#
# wm independent hotkeys
#
# terminal emulator
super + Return
alacritty
# program launcher
super + @space
rofi -show combi
# make sxhkd reload its configuration files:
super + Escape
pkill -USR1 -x sxhkd
#
# bspwm hotkeys
#
# quit/restart bspwm
super + alt + {q,r}
bspc {quit,wm -r}
# close and kill
super + {_,shift + }q
bspc node -{c,k}
# alternate between the tiled and monocle layout
super + m
bspc desktop -l next
# send the newest marked node to the newest preselected node
super + y
bspc node newest.marked.local -n newest.!automatic.local
# swap the current node and the biggest window
super + g
bspc node -s biggest.window
#
# state/flags
#
# set the window state
super + {t,shift + t,f,shift + f}
bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
# set the node flags
super + ctrl + {m,x,y,z}
bspc node -g {marked,locked,sticky,private}
#
# focus/swap
#
# focus the node in the given direction
super + {_,shift + }{a,s,w,d}
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
super + {_,shift + }c
bspc node -f {next,prev}.local.!hidden.window
# focus the next/previous desktop in the current monitor
super + bracket{left,right}
bspc desktop -f {prev,next}.local
# focus the last node/desktop
super + {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
super + {_,shift + }{1-9,0}
bspc {desktop -f,node -d} '^{1-9,10}'
#
# move desktops
#
super + ctrl + {a,s,w,d}
bspc {desktop -f prev,node -d prev,node -d next,desktop -f next}
#
# move/resize
#
# expand a window by moving one of its side outward
super + alt + {a,s,w,d}
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 + {a,s,w,d}
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}

View file

@ -0,0 +1,18 @@
#!/bin/bash
row0=("" "⠈" "⠐" "⠘" "⠠" "⠨" "⠰" "⠸" "⢀" "⢈")
row1=("⠁" "⠉" "⠑" "⠙" "⠡" "⠩" "⠱" "⠹" "⢁" "⢉")
row2=("⠂" "⠊" "⠒" "⠚" "⠢" "⠪" "⠲" "⠺" "⢂" "⢊")
row3=("⠃" "⠋" "⠓" "⠛" "⠣" "⠫" "⠳" "⠻" "⢃" "⢋")
row4=("⠄" "⠌" "⠔" "⠜" "⠤" "⠬" "⠴" "⠼" "⢄" "⢌")
row5=("⠅" "⠍" "⠕" "⠝" "⠥" "⠭" "⠵" "⠽" "⢅" "⢍")
chars=("${row0[@]}" "${row1[@]}" "${row2[@]}" "${row3[@]}" "${row4[@]}" "${row5[@]}")
hour=$(date +"%H")
minute=$(date +"%M")
second=$(date +"%S")
[[ $hour = 0* ]] && hour=${hour:1:1}
[[ $minute = 0* ]] && minute=${minute:1:1}
[[ $second = 0* ]] && second=${second:1:1}
echo "${chars[$hour]} ${chars[$minute]} ${chars[$second]}"

View file

@ -0,0 +1,7 @@
#!/usr/bin/env sh
pkill polybar
while pgrep -x polybar > /dev/null; do sleep 1; done
polybar bar >> /dev/null 2>&1 &