diff --git a/Xresources b/Xresources new file mode 100644 index 0000000..d752566 --- /dev/null +++ b/Xresources @@ -0,0 +1,86 @@ +! ----------------------------------------------------------------------------- +! Based on: gruvbox-dark.xresources +! Description: Retro groove colorscheme generalized +! Source: https://github.com/morhetz/gruvbox-generalized +! ----------------------------------------------------------------------------- + +! Laptop screen DPI +Xft.dpi: 216 + +Xft.autohint: 0 +Xft.lcdfilter: lcddefault +Xft.hintstyle: hintfull +Xft.hinting: 1 +Xft.antialias: 1 +Xft.rgba: rgb + +! hard contrast: *background: #1d2021 +! medium contrast: *background: #282828 +! soft contrast: *background: #32302f +*background: #1d2021 +*foreground: #ebdbb2 +! Black + DarkGrey +*color0: #282828 +*color8: #928374 +! DarkRed + Red +*color1: #cc241d +*color9: #fb4934 +! DarkGreen + Green +*color2: #98971a +*color10: #b8bb26 +! DarkYellow + Yellow +*color3: #d79921 +*color11: #fabd2f +! DarkBlue + Blue +*color4: #458588 +*color12: #83a598 +! DarkMagenta + Magenta +*color5: #b16286 +*color13: #d3869b +! DarkCyan + Cyan +*color6: #689d6a +*color14: #8ec07c +! LightGrey + White +*color7: #a89984 +*color15: #ebdbb2 + +!!! urxvt +URxvt.perl-ext-common: default,matcher +URxvt*buffered: true +URxvt*saveLines: 5000 +URxvt*cursorBlink: true +URxvt*borderless: 1 +URxvt*internalBorder: 20 +URxvt*scrollBar: false +URxvt.url-launcher: /usr/bin/xdg-open +URxvt.matcher.button: 1 +URxvt.clipboard.autocopy: true + +! do not scroll with output +URxvt*scrollTtyOutput: false +! scroll in relation to buffer (with mouse scroll or Shift+Page Up) +URxvt*scrollWithBuffer: true +! scroll back to the bottom on keypress +URxvt*scrollTtyKeypress: true +! disable scrollback buffer in secondary screen (allows scrolling pager when using 'less' etc) +URxvt.secondaryScreen: 1 +URxvt.secondaryScroll: 0 +! Disable printing the terminal contents when pressing PrintScreen. +URxvt.print-pipe: "cat > /dev/null" +!! copy/paste +! disable default ctrl-shift binding +URxvt.iso14755: false +URxvt.iso14755_52: false +! disable default copy/paste bindings +URxvt.keysym.Control-Meta-c: builtin-string: +URxvt.keysym.Control-Meta-v: builtin-string: +! new copy/paste bindings +URxvt.keysym.Shift-Control-V: eval:paste_clipboard +URxvt.keysym.Shift-Control-C: eval:selection_to_clipboard +!! font +!URxvt.letterSpace: -1 +URxvt.font: xft:Hack:regular:size=12, \ + xft:Font Awesome 5 Brands:Regular:size=10, \ + xft:Font Awesome 5 Free:Solid:size=10, \ + xft:Font Awesome 5 Free:Regular:size=10 + diff --git a/bin/mirror-outputs b/bin/mirror-outputs new file mode 100755 index 0000000..09d794a --- /dev/null +++ b/bin/mirror-outputs @@ -0,0 +1,6 @@ +#!/bin/bash +## Simple script to mirror all connected displays for presentations + +RESOLUTION=3840x2160 + +xrandr --listmonitors | sed -n '1!p' | sed -e 's/\s[0-9].*\s\([a-zA-Z0-9\-]*\)$/\1/g' | xargs -n 1 -- bash -xc 'xrandr --output $0 --mode '$RESOLUTION' --pos 0x0 --rotate normal' diff --git a/config/bspwm/bspwmrc b/config/bspwm/bspwmrc new file mode 100755 index 0000000..81036e9 --- /dev/null +++ b/config/bspwm/bspwmrc @@ -0,0 +1,54 @@ +#!/bin/bash + +bspc monitor eDP-1 -d 1 2 3 4 5 6 7 8 9 10 + +bspc config border_width 2 +bspc config window_gap 10 +bspc config top_padding 74 +bspc config bottom_padding 0 +bspc config split_ratio 0.50 +bspc config borderless_monocle true +bspc config gapless_monocle true + +bspc rule -a Galculator state=floating +bspc rule -a vlc state=floating +bspc rule -a Blueman-manager state=floating +bspc rule -a Bitwarden state=floating +bspc rule -a Leafpad state=floating + +bspc rule -a firefox desktop='^1' follow=on +bspc rule -a Brave-browser desktop='^2' follow=on +bspc rule -a Chromium desktop='^2' follow=on +bspc rule -a Evince desktop='4' follow=on +bspc rule -a Soffice desktop='^4' follow=on +bspc rule -a Xsane desktop='^4' follow=on state=floating +bspc rule -a kitty desktop='^6' follow=on +bspc rule -a Konsole desktop='^6' follow=on +bspc rule -a URxvt desktop='^6' follow=on +bspc rule -a Eclipse desktop='^6' follow=on +bspc rule -a Ranger desktop='^3' follow=on +bspc rule -a Thunar desktop='3' follow=on +bspc rule -a Steam desktop='^5' follow=on state=floating +bspc rule -a Lutris desktop='^5' follow=on state=floating +bspc rule -a origin.exe desktop='^5' state=floating +bspc rule -a Emacs desktop='^7' follow=on state=tiled +bspc rule -a jetbrains-pycharm-ce desktop='^7' follow=on +bspc rule -a Clementine desktop='^8' follow=on +bspc rule -a Spotify desktop='^8' follow=on +bspc rule -a Element desktop='^9' +bspc rule -a Mattermost desktop='9' +bspc rule -a Slack desktop='^9' +bspc rule -a tutanota-desktop desktop='^10' + +### Focus on 1st workspace by default +bspc desktop -f 1 + +### Autostart +grep -x sxhkd > /dev/null || sxhkd & +/usr/bin/dunst & +/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & +xss-lock -n /usr/lib/xsecurelock/dimmer -l -- xsecurelock & +xidlehook --not-when-audio --not-when-fullscreen --timer 120 "xrandr --output eDP-1 --brightness .1" "xrandr --output eDP-1 --brightness 1" --timer 480 "xset s activate" "xrandr --output eDP-1 --brightness 1" & +$HOME/.local/bin/single-polybar-launcher & +sh ~/.fehbg & +dex -ae bspwm & diff --git a/config/polybar/config.ini b/config/polybar/config.ini new file mode 100644 index 0000000..1947fb7 --- /dev/null +++ b/config/polybar/config.ini @@ -0,0 +1,134 @@ +[global/wm] +include-file = ~/.config/polybar/colors.ini +include-file = ~/.config/polybar/modules.ini +include-file = ~/.config/polybar/custom_modules.ini + +margin-bottom = 0 +margin-top = 0 + +[bar/one] +monitor = eDP-1 +monitor-fallback = +monitor-strict = false +enable-ipc = true +override-redirect = true +bottom = false +fixed-center = true +width = 100% +height = 72 +offset-x = 0% +offset-y = 0% +dpi-x = 216 +dpi-y = 216 +background = ${color.background} +foreground = ${color.foreground} +radius-top = 0.0 +radius-bottom = 0.0 +line-size = 0 +line-color = ${color.background} +border-bottom-size = 0 +border-bottom-color = ${color.foreground} +padding = 1 +module-margin-left = 1 +module-margin-right = 0 +seperator = +dim-value = 1.0 +locale = en_US.UTF-8 + +font-0 = Hack:size=10;3 +font-1 = Font Awesome 5 Free:style=Solid:size=12;3 +font-2 = Font Awesome 5 Free:style=Regular:size=12;3 +font-3 = Font Awesome 5 Brands:style=Regular:size=12;3 + +modules-left = workspaces sep title +modules-center = spotify +modules-right = keyboard sep pulseaudio-control sep battery0 sep date sep powermenu + +tray-position = right +tray-detached = false +tray-maxsize = 40 +tray-background = ${color.background} +tray-offset-x = 0 +tray-offset-y = 0 +tray-padding = 0 +tray-scale = 1.0 + +wm-name = bspwm +wm-restack = bspwm +scroll-up = bspwm-desknext +scroll-down = bspwm-deskprev +click-left = +click-middle = +click-right = +;scroll-up = bspc desktop -f prev.local +;scroll-down = bspc desktop -f next.local +double-click-left = +double-click-middle = +double-click-right = +cursor-click = +cursor-scroll = + +[bar/two] +monitor = eDP-1 +monitor-fallback = +monitor-strict = false +enable-ipc = true +override-redirect = true +bottom = true +fixed-center = true +width = 100% +height = 32 +offset-x = 0% +offset-y = 0% +background = ${color.background} +foreground = ${color.foreground} +radius-top = 0.0 +radius-bottom = 0.0 +line-size = 0 +line-color = ${color.background} +border-bottom-size = 0 +border-bottom-color = ${color.foreground} +padding = 1 +module-margin-left = 1 +module-margin-right = 1 +seperator = +dim-value = 1.0 +locale = en_US.UTF-8 + +font-0 = Hack:size=10;3 +font-1 = Font Awesome 5 Free:style=Solid:size=12;3 +font-2 = Font Awesome 5 Free:style=Regular:size=12;3 +font-3 = Font Awesome 5 Brands:style=Regular:size=12;3 + +modules-left = workspaces sep title +modules-center = spotify +modules-right = cpu sep memory sep filesystem + +tray-position = none +tray-detached = false +tray-maxsize = 16 +tray-background = ${color.background} +tray-offset-x = 0 +tray-offset-y = 0 +tray-padding = 0 +tray-scale = 1.0 + +wm-name = bspwm +wm-restack = bspwm +scroll-up = bspwm-desknext +scroll-down = bspwm-deskprev +click-left = +click-middle = +click-right = +;scroll-up = bspc desktop -f prev.local +;scroll-down = bspc desktop -f next.local +double-click-left = +double-click-middle = +double-click-right = +cursor-click = +cursor-scroll = + +[settings] +throttle-output = 5 +throttle-output-for = 10 +screenchange-reload = false diff --git a/config/sxhkd/sxhkdrc b/config/sxhkd/sxhkdrc new file mode 100644 index 0000000..a34c65a --- /dev/null +++ b/config/sxhkd/sxhkdrc @@ -0,0 +1,180 @@ +# +# wm independent hotkeys +# + +# terminal emulator +super + Return + kitty + +# program launcher +super + @space + rofi -dpi 240 -modi drun, run -show drun + +# power menu +super + @End + rofi -dpi 240 -show power-menu -modi power-menu:/usr/bin/rofi-power-menu + +# make sxhkd reload its configuration files: +super + Escape + pkill -USR1 -x sxhkd + +# Show list of open windows +alt + @Tab + rofi -show window + +# Lock the screen +ctrl + alt + l + xset s activate + +# Screenshot +Print + maim | xclip -selection clipboard -t image/png + +alt + Print + maim -s | xclip -selection clipboard -t image/png + +shift + Print + maim -i $(xdotool getactivewindow) | xclip -selection clipboard -t image/png + +# 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,s,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 + }{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 +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}' + +# +# preselect +# + +# preselect the direction +super + 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 + ctrl + 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} + +### Function Keys + +XF86AudioMute + pactl set-sink-mute @DEFAULT_SINK@ toggle + +XF86AudioLowerVolume + pactl set-sink-volume @DEFAULT_SINK@ -5% + +XF86AudioRaiseVolume + pactl set-sink-volume @DEFAULT_SINK@ +5% + +XF86AudioMicMute + pactl set-source-mute @DEFAULT_SOURCE@ toggle + +XF86MonBrightnessDown + xbacklight -dec 5 + +XF86MonBrightnessUp + xbacklight -inc 5 + +XF86Display + mirror-outputs + +XF86WLAN + toggle-wifi + +XF86Tools + lxappearance + +XF86Search + pamac-manager + +XF86LaunchA + rofi -show window + +XF86Explorer + thunar diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..3895745 --- /dev/null +++ b/install.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +backup=~/dotfiles_backup +log_file=~/dotfiles_install.log +dotfiles_dir=~/.dotfiles +config_dir=~/.config +bin_dir=~/.local/bin + + +## Logging +exec 3>&1 4>&2 +trap 'exec 2>&4 1>&3' 0 1 2 3 +exec 1>$log_file 2>&1 + +## Backup current files and folders +mkdir -p $backup +cp -a ~/.bash_profile $backup/ +cp -a ~/.bashrc $backup/ +cp -a ~/.profile $backup/ +cp -a ~/.emacs $backup/ +cp -a ~/.emacs.d $backup/ +cp -a ~/.Xresources $backup/ +cp -a $config_dir/bspwm $backup/ +cp -a $config_dir/dunst $backup/ +cp -a $config_dir/kitty $backup/ +cp -a $config_dir/nvim $backup/ +cp -a $config_dir/polybar $backup/ +cp -a $config_dir/ranger $backup/ +cp -a $bin_dir $backup/ + +# Delete current files and folders +rm -rf ~/.bash_profile +rm -rf ~/.bashrc +rm -rf ~/.profile +rm -rf ~/.emacs +rm -rf ~/.emacs.d +rm -rf ~/.Xresources +rm -rf $config_dir/bspwm +rm -rf $config_dir/dunst +rm -rf $config_dir/kitty +rm -rf $config_dir/nvim +rm -rf $config_dir/polybar +rm -rf $config_dir/ranger/ +rm -rf $bin_dir + +# Create HOME symlinks +ln -sf $dotfiles_dir/bashrc ~/.bashrc +ln -sf $dotfiles_dir/bash_profile ~/.bash_profile +ln -sf $dotfiles_dir/profile ~/.profile +ln -sf $dotfiles_dir/emacs.d ~/.emacs.d +ln -sf $dotfiles_dir/xinitrc ~/.xinitrc +ln -sf $dotfiles_dir/vimrc ~/.vimrc +ln -sf $dotfiles_dir/Xresources ~/.Xresources + +# Create $config_dir, sub-directories, and symlinks +mkdir -p $config_dir/{bspwm,dunst,kitty,nvim,polybar,ranger,rofi,sxhkd} +ln -sf $dotfiles_dir/config/bspwm/bspwmrc $config_dir/bspwm/bspwmrc +ln -sf $dotfiles_dir/config/dunst/dunstrc $config_dir/dunst/dunstrc +ln -sf $dotfiles_dir/config/kitty/kitty.conf $config_dir/kitty/kitty.conf +ln -sf $dotfiles_dir/config/kitty/gruvbox.conf $config_dir/kitty/gruvbox.conf +ln -sf $dotfiles_dir/config/nvim/init.vim $config_dir/nvim/init.vim +ln -sf $dotfiles_dir/config/polybar/config.ini $config_dir/polybar/config.ini +ln -sf $dotfiles_dir/config/polybar/colors.ini $config_dir/polybar/colors.ini +ln -sf $dotfiles_dir/config/polybar/modules.ini $config_dir/polybar/modules.ini +ln -sf $dotfiles_dir/config/polybar/custom_modules.ini $config_dir/polybar/custom_modules.ini +ln -sf $dotfiles_dir/config/ranger/commands_full.py $config_dir/ranger/commands_full.py +ln -sf $dotfiles_dir/config/ranger/commands.py $config_dir/ranger/commands.py +ln -sf $dotfiles_dir/config/ranger/rc.conf $config_dir/ranger/rc.conf +ln -sf $dotfiles_dir/config/ranger/rifle.conf $config_dir/ranger/rifle.conf +ln -sf $dotfiles_dir/config/ranger/scope.sh $config_dir/ranger/scope.sh +ln -sf $dotfiles_dir/config/rofi/config.rasi $config_dir/rofi/config.rasi +ln -sf $dotfiles_dir/config/sxhkd/sxhkdrc $config_dir/sxhkd/sxhkdrc + +# Create $bin_dir and symlinks +mkdir -p $bin_dir +ln -sf $dotfiles_dir/bin/mirror-outputs $bin_dir +ln -sf $dotfiles_dir/bin/single-polybar-launcher $bin_dir +ln -sf $dotfiles_dir/bin/toggle-wifi $bin_dir + +# Finishing up +source ~/.bashrc +source ~/.bash_profile +xrdb ~/.Xresources