commit 968449de49972631d0213e117acd1fe1cfd60a46 Author: Lucas Sta Maria Date: Sun Mar 20 03:19:38 2022 -0400 add base dotfiles diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc new file mode 100755 index 0000000..56c9e09 --- /dev/null +++ b/.config/bspwm/bspwmrc @@ -0,0 +1,21 @@ +#! /bin/sh + +pgrep -x sxhkd > /dev/null || sxhkd & + +bspc monitor -d 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + +bspc config border_width 3 +bspc config normal_border_color "#919191" +bspc config focused_border_color "#FF6054" +bspc config presel_feedback_color "#CCCCCC" +bspc config window_gap 25 + +bspc config split_ratio 0.5 +bspc config borderless_monocle true +bspc config gapless_monocle true + +bspc config pointer_follows_monitor true +bspc config pointer_follows_focus false +bspc config focus_follows_pointer true + +exec .local/bin/startup diff --git a/.config/eww/eww.scss b/.config/eww/eww.scss new file mode 100644 index 0000000..6dfa55f --- /dev/null +++ b/.config/eww/eww.scss @@ -0,0 +1,146 @@ +// General styling + +* { + all: unset; +} + +scale trough { + all: unset; + background-color: #22242b; + box-shadow: 0 2px 3px 2px #06060b; + border-radius: 16px; + min-height: 10px; + min-width: 70px; + margin: 0px 10px 0px 0px; +} + +// Main bar styling + +.main { + background-color: #0e1419; + color: #e5e1cf; + font-family: "Noto Sans"; + font-size: 12px; +} + +.leftwidgets { + margin-left: 5px; + margin-right: 50px; + + button { + margin: 0px 5px; + border-color: #0e1419; + border-width: 0px; + padding-left: 0em; + padding-right: 0em; + } + + .occupied { + color: #919191; + } + + .focused { + color: #ff6054; + } + + .empty { + color: #444444; + } +} + +.rightwidgets { + margin: 0px 10px 0px 5px; +} + +.icon-module__icon { + margin: 0px 5px 0px 0px; + font-size: 15px; +} + +.player { + color: #e5e1cf; +} + +.player__container { + padding-left: 7px; + padding-right: 7px; + border-radius: 10px; +} + +.player__container:hover { + background-color: hsla(210, 25%, 25%, 0.3); +} + +.power__text { + margin-top: 3px; +} + +.brightness__label { + margin-top: 1px; +} + +.brightness__bar { + margin-left: 10px; +} + +.brightness__bar trough highlight { + background-image: linear-gradient(to right, #e4c9af 30%, #f2cdcd 50%, #e0b089 100% *50); + border-radius: 10px; + min-width: 20px; +} + +.volume__bar { + margin-left: 10px; +} + +.volume__bar trough highlight { + background-image: linear-gradient(to right, #f2525d 30%, #cc5a61 50%, #c93640 100% *50); + border-radius: 10px; + min-width: 20px; +} + +.volume__label { + margin-top: 3px; +} + +.timedate__button { + padding: 3px 9px; + border-radius: 5px; +} + +.timedate__button:hover { + background-color: hsla(210, 25%, 25%, 0.3); +} + +// Song card styling + +.songcard { + background-color: #0e1419; + color: #e5e1cf; + font-family: "Noto Sans"; + font-size: 12px; +} + +.songcard__title { + font-weight: 700; + font-size: 20px; + margin-top: 10px; + margin-bottom: 0px; +} + +.songcard__artist { + font-weight: 500; + font-size: 14px; + margin-top: 0px; + margin-bottom: 0px; + color: #919191; +} + +.songcard__controls { + margin-top: 0px; + margin-bottom: 10px; +} + +.songcard__button { + margin: 0px 3px; +} diff --git a/.config/eww/eww.yuck b/.config/eww/eww.yuck new file mode 100644 index 0000000..a9de0dd --- /dev/null +++ b/.config/eww/eww.yuck @@ -0,0 +1,223 @@ +;; Global variables +(deflisten w1 "scripts/workspaces 1") +(deflisten w2 "scripts/workspaces 2") +(deflisten w3 "scripts/workspaces 3") +(deflisten w4 "scripts/workspaces 4") +(deflisten w5 "scripts/workspaces 5") +(deflisten w6 "scripts/workspaces 6") +(deflisten w7 "scripts/workspaces 7") +(deflisten w8 "scripts/workspaces 8") +(deflisten w9 "scripts/workspaces 9") +(deflisten w10 "scripts/workspaces 10") +(deflisten w11 "scripts/workspaces 11") +(deflisten w12 "scripts/workspaces 12") +(deflisten w13 "scripts/workspaces 13") +(deflisten w14 "scripts/workspaces 14") +(deflisten w15 "scripts/workspaces 15") +(deflisten w16 "scripts/workspaces 16") +(deflisten w17 "scripts/workspaces 17") +(deflisten w18 "scripts/workspaces 18") +(deflisten w19 "scripts/workspaces 19") +(deflisten w20 "scripts/workspaces 20") + +(deflisten player_listen :initial '{"show": "no", "content": ""}' "scripts/player") +(deflisten player :initial '{"content": "TEST"}' "scripts/player") + +(deflisten songcardtitle :initial '(label :class "songcard__title" :text "None Playing")' + "scripts/songcardtitle") +(deflisten songcardartist :initial '(label :class "songcard__artist" :text ".")' + "scripts/songcardartist") + +(defpoll songcard_button :interval "1s" "scripts/songcardplayrender") +(defpoll wifi_label :interval "1s" "scripts/wifi") +(defpoll volume_level :interval "1s" "scripts/volume") +(defpoll volume_label :initial '{"icon": "", content: "0"}' + :interval "1s" + "scripts/volumelabel") +(defpoll brightness_level :interval "1s" "scripts/brightness") +(defpoll brightness_label :interval "1s" "scripts/brightnesslabel") +(defpoll battery_level :interval "15s" "scripts/battery") +(defpoll currtime :interval "1s" "scripts/currtime") + +(defvar songcard_reveal false) +(defvar brightness_reveal false) +(defvar volume_reveal false) +(defvar timedate_reveal false) + +;; Main widget +(defwindow main + :monitor 0 + :geometry (geometry :x "-2px" + :y "15px" + :width "98%" + :height "30px" + :anchor "top center") + :stacking "bg" + :reserve (struts :distance "50px" :side "top") + :windowtype "dialog" + :wm-ignore false + (container)) + +;; The main container for all the widgets +(defwidget container [] + (centerbox :orientation "horizontal" + :space-evenly true + (leftwidgets) + (middlewidgets) + (rightwidgets))) + +;; Left widgets +(defwidget leftwidgets [] + (box :spacing 4 + :orientation "horizontal" + :halign "start" + :valign "center" + :class "leftwidgets" + (literal :content w1) + (literal :content w2) + (literal :content w3) + (literal :content w4) + (literal :content w5) + (literal :content w6) + (literal :content w7) + (literal :content w8) + (literal :content w9) + (literal :content w10) + (literal :content w11) + (literal :content w12) + (literal :content w13) + (literal :content w14) + (literal :content w15) + (literal :content w16) + (literal :content w17) + (literal :content w18) + (literal :content w19) + (literal :content w20))) + +;; Middle widgets +(defwidget middlewidgets [] + (player)) + +;; Spotify widget +(defwidget player [] + (button :onclick "scripts/songcardshow" + :class "player__container" + (icon-module :class "player" + :icon "" + :visible {player_listen.show == "yes"} + (literal :content {player_listen.content})))) + +;; Right widgets +(defwidget rightwidgets [] + (box :class "rightwidgets" + :orientation "horizontal" + :halign "end" + :valign "center" + :space-evenly "false" + :spacing 10 + (wifi) + (brightness) + (volume) + (power) + (timedate))) + +;; A widget that displays the current wifi SSID +(defwidget wifi [] + (icon-module :icon "↑" + (literal :content {wifi_label}))) + +;; A widget for tracking brightness +(defwidget brightness [] + (eventbox :onhover "eww update brightness_reveal=true" + :onhoverlost "eww update brightness_reveal=false" + (icon-module :icon "☼" + (literal :content {brightness_label}) + (revealer :transition "slideleft" + :reveal brightness_reveal + :duration "350ms" + (scale :class "brightness__bar" + :orientation "horizontal" + :value brightness_level + :min 0 + :max 100 + :onchange "brightnessctl set {}%"))))) + +;; A widget for tracking volume +(defwidget volume [] + (eventbox :onhover "eww update volume_reveal=true" + :onhoverlost "eww update volume_reveal=false" + (icon-module :icon {volume_label.icon} + (literal :content {volume_label.content}) + (revealer :transition "slideleft" + :reveal volume_reveal + :duration "350ms" + (scale :class "volume__bar" + :orientation "horizontal" + :value volume_level + :min 0 + :max 100 + :onchange "pamixer --set-volume $(printf \"%.0f\" \"{}\")"))))) + +;; A widget for tracking battery +(defwidget power [] + (icon-module :class "power" + :icon "⏻" + :visible true + (literal :content {battery_level}))) + +;; A widget for tracking time and date +(defwidget timedate [] + (box :class "timedate" + :orientation "horizontal" + :space-evenly false + :valign "center" + :halign "end" + (button :class "timedate__button" + :onclick "scripts/boolflip timedate_reveal" + (literal :content {currtime})))) + + +;; A module with an icon attached +(defwidget icon-module [icon ?class ?visible] + (box :class "${class} icon-module" + :orientation "horizontal" + :halign "end" + :valign "center" + :space-evenly false + :visible {visible ?: true} + (label :class "icon-module__icon" :text "${icon}") + (children))) + +; The song card widget +(defwindow songcard + :monitor 0 + :geometry (geometry :x "0px" + :y "70px" + :width "350px" + :height "50px" + :anchor "top center") + :stacking "fg" + :reserve (struts :distance "50px" :side "top") + :windowtype "dialog" + :wm-ignore false + (box :orientation "vertical" + ;; song metadata + (box :orientation "vertical" + :halign "center" + :valign "top" + (literal :content {songcardtitle}) + (literal :content {songcardartist}) + ;; song controls + (centerbox :class "songcard__controls" + :orientation "horizontal" + :valign "center" + :halign "center" + (button :onclick "scripts/songback" + :class "songcard__button" + (image :path "img/musicback.png" :image-width 20 :image-height 20)) + (button :onclick "scripts/songplay" + :class "songcard__button" + (literal :content {songcard_button})) + (button :onclick "scripts/songnext" + :class "songcard__button" + (image :path "img/musicnext.png" :image-width 20 :image-height 20)))))) diff --git a/.config/eww/scripts/battery b/.config/eww/scripts/battery new file mode 100755 index 0000000..d0c66b2 --- /dev/null +++ b/.config/eww/scripts/battery @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +echo "(label :class \"power__text\" :text \"$(cat /sys/class/power_supply/BAT0/capacity)%\")" diff --git a/.config/eww/scripts/boolflip b/.config/eww/scripts/boolflip new file mode 100755 index 0000000..fb1bed0 --- /dev/null +++ b/.config/eww/scripts/boolflip @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +var="$1" +val=`eww get ${var}` + +if [ "$val" == "true" ]; then + eww update "$var"=false +else + eww update "$var"=true +fi diff --git a/.config/eww/scripts/brightness b/.config/eww/scripts/brightness new file mode 100755 index 0000000..9f48c36 --- /dev/null +++ b/.config/eww/scripts/brightness @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +level=$(brightnessctl get) +max=$(brightnessctl max) + +raw_percent=$(echo "scale=2 ; $level / $max" | bc) +percent=$(echo "$raw_percent*100" | bc) +final_percent=${percent%.*} +echo "$final_percent" diff --git a/.config/eww/scripts/brightnesslabel b/.config/eww/scripts/brightnesslabel new file mode 100755 index 0000000..a438676 --- /dev/null +++ b/.config/eww/scripts/brightnesslabel @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +level=$(brightnessctl get) +max=$(brightnessctl max) + +raw_percent=$(echo "scale=2 ; $level / $max" | bc) +percent=$(echo "$raw_percent*100" | bc) +final_percent=${percent%.*} +echo "(label :class \"brightness__label\" :text \"$final_percent%\")" diff --git a/.config/eww/scripts/currtime b/.config/eww/scripts/currtime new file mode 100755 index 0000000..c88485e --- /dev/null +++ b/.config/eww/scripts/currtime @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +var="timedate_reveal" +val=`eww get ${var}` + +if [ "$val" == true ]; then + time=`date +"%F %T"` + echo "(label :text \"$time\")" +else + time=`date +"%R"` + echo "(label :text \"$time\")" +fi diff --git a/.config/eww/scripts/player b/.config/eww/scripts/player new file mode 100755 index 0000000..6750317 --- /dev/null +++ b/.config/eww/scripts/player @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +echo "{\"show\": \"no\", \"content\": \"\"}" +while true +do + line=$(spt playback --status -f "%s:%a - %t" 2> /dev/null) + IFS=':' read -ra ELS <<< "$line" + button=${ELS[0]} + content=${ELS[1]} + if [ "$button" == "▶" ]; then + echo "{\"show\": \"yes\", \"content\": \"(label :text \\\"$content\\\")\"}" + else + echo "{\"show\": \"no\", \"content\": \"\"}" + fi + + sleep 1 +done diff --git a/.config/eww/scripts/songback b/.config/eww/scripts/songback new file mode 100755 index 0000000..54dd250 --- /dev/null +++ b/.config/eww/scripts/songback @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +spt playback --previous diff --git a/.config/eww/scripts/songcardartist b/.config/eww/scripts/songcardartist new file mode 100755 index 0000000..9057a1e --- /dev/null +++ b/.config/eww/scripts/songcardartist @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +echo "(label :class \"songcard__artist\" :text \".\")" +while true +do + content=$(spt playback --status -f "%a" 2> /dev/null) + echo "(label :class \"songcard__artist\" :text \"${content}\")" + sleep 1 +done diff --git a/.config/eww/scripts/songcardplayrender b/.config/eww/scripts/songcardplayrender new file mode 100755 index 0000000..4606aa3 --- /dev/null +++ b/.config/eww/scripts/songcardplayrender @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +button=$(spt playback --status -f "%s" 2>/dev/null) +if [ "$button" == "▶" ]; then + echo "(image :path \"img/musicpause.png\" :image-width 40 :image-height 40)" +else + echo "(image :path \"img/musicplay.png\" :image-width 40 :image-height 40)" +fi diff --git a/.config/eww/scripts/songcardshow b/.config/eww/scripts/songcardshow new file mode 100755 index 0000000..70057d7 --- /dev/null +++ b/.config/eww/scripts/songcardshow @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +show=$(eww get songcard_reveal) + +if [ "$show" == "false" ]; then + eww open songcard && eww update songcard_reveal=true +else + eww close songcard && eww update songcard_reveal=false +fi + +./boolflip songcard_reveal diff --git a/.config/eww/scripts/songcardtitle b/.config/eww/scripts/songcardtitle new file mode 100755 index 0000000..a593d7e --- /dev/null +++ b/.config/eww/scripts/songcardtitle @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +echo "(label :class \"songcard__title\" :text \"None Playing\")" +while true +do + content=$(spt playback --status -f "%t" 2> /dev/null) + echo "(label :class \"songcard__title\" :text \"${content}\")" + sleep 1 +done diff --git a/.config/eww/scripts/songnext b/.config/eww/scripts/songnext new file mode 100755 index 0000000..7642fbd --- /dev/null +++ b/.config/eww/scripts/songnext @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +spt playback --next diff --git a/.config/eww/scripts/songplay b/.config/eww/scripts/songplay new file mode 100755 index 0000000..60b73ab --- /dev/null +++ b/.config/eww/scripts/songplay @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +spt playback --toggle diff --git a/.config/eww/scripts/volume b/.config/eww/scripts/volume new file mode 100755 index 0000000..96d4b0f --- /dev/null +++ b/.config/eww/scripts/volume @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +raw_percent=$(pamixer --get-volume-human) +if [ "$raw_percent" == "muted" ]; then + echo "0" +else + percent=$(echo "$raw_percent" | sed 's/[^0-9]*//g') + echo "$percent" +fi diff --git a/.config/eww/scripts/volumelabel b/.config/eww/scripts/volumelabel new file mode 100755 index 0000000..b0f3347 --- /dev/null +++ b/.config/eww/scripts/volumelabel @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +raw_percent=$(pamixer --get-volume-human) +if [ "$raw_percent" == "muted" ]; then + echo "{\"icon\": \"\", \"content\": \"(label :class \\\"volume__label\\\" :text \\\"muted\\\")\"}" +else + percent=$(echo "$raw_percent" | sed 's/[^0-9]*//g') + #if [ "$percent" -gt 66 ]; then + # icon="" + #elif [ "$percent" -gt 33 ]; then + # icon="" + #elif [ "$percent" -gt 0 ]; then + # icon="" + #else + # icon="" + #fi + icon="" + volume="$percent%" + echo "{\"icon\": \"${icon}\", \"content\": \"(label :class \\\"volume__label\\\" :text \\\"${volume}\\\")\"}" +fi diff --git a/.config/eww/scripts/wifi b/.config/eww/scripts/wifi new file mode 100755 index 0000000..73e398a --- /dev/null +++ b/.config/eww/scripts/wifi @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +wifi=`nmcli c show --active | tail -n 1 | sed 's/ .*//g'` +if [ ${#wifi} -gt 0 ]; then + echo "(label :text \"${wifi}\")" +else + echo "" +fi diff --git a/.config/eww/scripts/workspaces b/.config/eww/scripts/workspaces new file mode 100755 index 0000000..1305b9c --- /dev/null +++ b/.config/eww/scripts/workspaces @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# Checks if a list ($1) contains an element ($2) +contains() { + for e in $1; do + [ "$e" == "$2" ] && echo 1 && return + done + echo 0 +} + +workspaces() { + icon="" + isfocused=$(bspc query -D -d focused --names | grep -w "$1") + isoccupied=$(bspc query -D -d .occupied --names | grep -w "$1") + if [ ${#isfocused} -ge 1 ]; then + class="focused" + elif [ ${#isoccupied} -ge 1 ]; then + class="occupied" + else + class="empty" + fi + + echo "(button :onclick \"bspc desktop -f '^$1'\" :class \"$class\" \"$icon\")" +} + +workspaces $1 +bspc subscribe desktop node_transfer | while read -r _ ; do + workspaces $1 +done diff --git a/.config/nvim/UltiSnips/cpp.snippets b/.config/nvim/UltiSnips/cpp.snippets new file mode 100644 index 0000000..06811ba --- /dev/null +++ b/.config/nvim/UltiSnips/cpp.snippets @@ -0,0 +1,301 @@ +snippet template "template for comp prog" +#include +using namespace std; +int MOD = 1000000007; + +int main() { + ios::sync_with_stdio(); + cin.tie(0); + + $0 +} +endsnippet + +snippet if "if statement" +if ($1) { + $0 +} +endsnippet + +snippet while "while loop" +while ($1) { + $0 +} +endsnippet + +snippet fori "for i" w +for (int i = 0; i < $1; i++) { + $0 +} +endsnippet + +snippet forj "for j" w +for (int j = 0; j < $1; j++) { + $0 +} +endsnippet + +snippet fork "for k" w +for (int k = 0; k < $1; k++) { + $0 +} +endsnippet + +snippet fora "for auto" w +for (&auto i : $1) { + $0 +} +endsnippet + +snippet print "print" w +cout << $1 << '\n'; +$0 +endsnippet + +snippet printv "print vector" w +for (int i = 0; i < $1.size(); i++) { + cout << $1[i] << '\n'; +} +$0 +endsnippet + +snippet ins "input string" w +string $1; +cin >> $1; +$0 +endsnippet + +snippet ini "input int" w +int $1; +cin >> $1; +$0 +endsnippet + +snippet viin "input vector int" w +int n; +cin >> n; +vector $1; +for (int i = 0; i < n; i++) { + int a; + cin >> a; + $1.push_back(a); +} +$0 +endsnippet + +snippet vsin "input vector string" w +int n; +cin >> n; +vector $1; +for (int i = 0; i < n; i++) { + string s; + cin >> s; + $1.push_back(s); +} +$0 +endsnippet + +snippet sort "sort iterator" w +sort($1.begin(), $1.end()); +$0 +endsnippet + +snippet sortr "sort reverse iterator" w +sort($1.rbegin(), $1.rend()); +$0 +endsnippet + +snippet sortp "sort iterator pains" w +sort($1.begin(), $1.end(), [](auto &left, auto& right) { + $0 +}); +endsnippet + +snippet rev "reverse iterator" w +reverse($1.begin(), $1.end()); +$0 +endsnippet + +snippet sum "sum vector" w +accumulate($1.begin(), $1.end(), 0); +$0 +endsnippet + +snippet vec "vector" w +vector<$1> $2; +$0 +endsnippet + +snippet vvec "vector vector" w +vector> $2; +$0 +endsnippet + +snippet vi "vector int" w +vector $1; +$0 +endsnippet + +snippet vvi "vector vector int" w +vector> $1; +$0 +endsnippet + +snippet vii "vector pair int" w +vector> $1; +$0 +endsnippet + +snippet vs "vector string" w +vector $1; +$0 +endsnippet + +snippet vvs "vector vector string" w +vector> $1; +$0 +endsnippet + +snippet vss "vector pair int" w +vector> $1; +$0 +endsnippet + +snippet vsi "vector pair string int" w +vector> $1; +$0 +endsnippet + +snippet vis "vector pair int string" w +vector> $1; +$0 +endsnippet + +snippet .pb "vector push back" i +.push_back($1)$0 +endsnippet + +snippet os "ordered set" w +set<$1> $2; +$0 +endsnippet + +snippet osi "ordered set int" w +set $1; +$0 +endsnippet + +snippet oss "ordered set string" w +set $1; +$0 +endsnippet + +snippet us "unordered set" w +unordered_set<$1> $2; +$0 +endsnippet + +snippet usi "unordered set int" w +unordered_set $1; +$0 +endsnippet + +snippet uss "unordered set string" w +unordered_set $1; +$0 +endsnippet + +snippet om "ordered map" w +map<$1, $2> $3; +$0 +endsnippet + +snippet omii "ordered map int int" w +map $1; +$0 +endsnippet + +snippet omss "ordered map int int" w +map $1; +$0 +endsnippet + +snippet omsi "ordered map string int" w +map $1; +$0 +endsnippet + +snippet omis "ordered map int string" w +map $1; +$0 +endsnippet + +snippet um "unordered map" w +unordered_map<$1, $2> $3; +$0 +endsnippet + +snippet umii "unordered map int int" w +unordered_map $1; +$0 +endsnippet + +snippet umss "unordered map int int" w +unordered_map $1; +$0 +endsnippet + +snippet umsi "unordered map string int" w +unordered_map $1; +$0 +endsnippet + +snippet umis "unordered map int string" w +unordered_map $1; +$0 +endsnippet + +snippet que "queue" w +queue<$1> $2; +$0 +endsnippet + +snippet qi "queue integer" w +queue $1; +$0 +endsnippet + +snippet qs "queue string" w +queue $1; +$0 +endsnippet + +snippet sta "stack" w +stack<$1> $2; +$0 +endsnippet + +snippet si "stack int" w +stack $1; +$0 +endsnippet + +snippet ss "stack string" w +stack $1; +$0 +endsnippet + +snippet pq "priority queue" w +priority_queue<$1> $2; +$0 +endsnippet + +snippet pqi "priority queue int" w +priority_queue $1; +$0 +endsnippet + +snippet pqs "priority queue string" w +priority_queue $1; +$0 +endsnippet diff --git a/.config/nvim/UltiSnips/markdown.snippets b/.config/nvim/UltiSnips/markdown.snippets new file mode 100644 index 0000000..3f86366 --- /dev/null +++ b/.config/nvim/UltiSnips/markdown.snippets @@ -0,0 +1,96 @@ +snippet h1 "h1 header" bA +# $0 +endsnippet + +snippet h2 "h2 header" bA +## $0 +endsnippet + +snippet h3 "h3 header" bA +### $0 +endsnippet + +snippet h4 "h4 header" bA +#### $0 +endsnippet + +snippet h5 "h5 header" bA +##### $0 +endsnippet + +snippet h6 "h6 header" bA +###### $0 +endsnippet + +snippet link "link" +[$1]($2)$0 +endsnippet + +snippet img "image" +![$2]($1)$0 +endsnippet + +snippet im "inline math" +\$$0\$ +endsnippet + +snippet am "display math" +\$\$ +$0 +\$\$ +endsnippet + +snippet cb "code block" bA +\`\`\`$1 +$0 +\`\`\` +endsnippet + +global !p +# A overkill(dirty) table with automatic alignment feature +def create_table(snip): + # retrieving single line from current string and treat it like tabstops count + placeholders_string = snip.buffer[snip.line].strip() + rows_amount = int(placeholders_string[0]) + columns_amount = int(placeholders_string[1]) + prefix_str = "from vimsnippets import display_width;" + # erase current line + snip.buffer[snip.line] = "" + # create anonymous snippet with expected content and number of tabstops + anon_snippet_title = "| " + anon_snippet_delimiter = "|" + for col in range(1, columns_amount+1): + sync_rows = [x*columns_amount+col for x in range(rows_amount+1)] + sync_str = ",".join(["t[{0}]".format(x) for x in sync_rows]) + max_width_str = "max(list(map(display_width, [" + sync_str + "])))" + cur_width_str = "display_width(t[" + str(col) + "])" + rv_val = "(" + max_width_str + "-" + cur_width_str + ")*' '" + anon_snippet_title += "${" + str(col) + ":head" + str(col)\ + + "}`!p " + prefix_str + "snip.rv=" + rv_val + "` | " + anon_snippet_delimiter += ":`!p " + prefix_str + "snip.rv = "\ + + max_width_str + "*'-'" + "`-|" + anon_snippet_title += "\n" + anon_snippet_delimiter += "\n" + anon_snippet_body = "" + for row in range(1, rows_amount+1): + body_row = "| " + for col in range(1, columns_amount+1): + sync_rows = [x*columns_amount+col for x in range(rows_amount+1)] + sync_str = ",".join(["t[{0}]".format(x) for x in sync_rows]) + max_width_str = "max(list(map(display_width, [" + sync_str + "])))" + cur_width_str = "display_width(t[" + str(row*columns_amount+col) + "])" + rv_val = "(" + max_width_str + "-" + cur_width_str + ")*' '" + placeholder = "R{0}C{1}".format(row, col) + body_row += "${" + str(row*columns_amount+col) + ":" + placeholder\ + + "}`!p " + prefix_str + "snip.rv=" + rv_val + "` | " + body_row += "\n" + anon_snippet_body += body_row + anon_snippet_table = anon_snippet_title + anon_snippet_delimiter + anon_snippet_body + # expand anonymous snippet + snip.expand_anon(anon_snippet_table) +endglobal + +post_jump "create_table(snip)" +snippet "tb([1-9][1-9])" "Fancy table" br +`!p snip.rv = match.group(1)` +endsnippet diff --git a/.config/nvim/UltiSnips/tex.snippets b/.config/nvim/UltiSnips/tex.snippets new file mode 100644 index 0000000..23a763e --- /dev/null +++ b/.config/nvim/UltiSnips/tex.snippets @@ -0,0 +1,262 @@ +# Document +snippet importmath "amsmath amssymb" +\usepackage{amsmath} +\usepackage{amssymb} +endsnippet + +snippet importgeo "geometry" +\usepackage[left=2cm,top=2cm]{geometry} +endsnippet + +snippet importenum "enum item" +\usepackage{enumitem} +endsnippet + +snippet setlist "set list" +\setlist[enumerate,$1]{label={\roman*.}} +endsnippet + +snippet titleneu "Lucas NEU Author Title" +\title{$1} +\author { + Sta. Maria, Lucas \\\\ + \texttt{stamaria.l@northeastern.edu} +} +\date{`date +"%B %d, %Y"`} +$0 +endsnippet + +snippet titlenor "Lucas Normal Author Title" +\title{$1} +\author { + Sta. Maria, Lucas \\\\ + \texttt{stamaria.l@northeastern.edu} +} +\date{`date +"%B %d, %Y"`} +$0 +endsnippet + +snippet worddoc "Word document" +\documentclass{article} +\usepackage{wordlike} +\PassOptionsToPackage{margin=1in}{geometry} +\usepackage[hang,flushmargin]{footmisc} +\usepackage[parfill]{parskip} +$0 +endsnippet + +# Text Formatting +snippet bold "bold font" +\textbf{$1}$0 +endsnippet + +snippet ita "italic font" +\textit{$1}$0 +endsnippet + +snippet boi "bold italic font" +\textbf{\textit{$1}}$0 +endsnippet + +snippet ul "underline font" +\underline{$1}$0 +endsnippet + +snippet ... "ldots" +\ldots +endsnippet + +snippet fn "footnote" i +\footnote{$0} +endsnippet + +# General Shortcuts +snippet beg "\begin{} / end{}" +\begin{$1} + $0 +\end{$1} +endsnippet + +snippet olist "ordered list" +\begin{enumerate} + \item $0 +\end{enumerate} +endsnippet + +snippet ulist "unordered list" +\begin{itemize} + \item $0 +\end{itemize} +endsnippet + +# Math Shortcuts +snippet * "cdot" iA +\cdot +endsnippet + +snippet im "inline math" +\$$0\$ +endsnippet + +snippet dm "display math" +\$\$ +$0 +\$\$ +endsnippet + +snippet am "align math" +\begin{align} + $0 +\end{align} +endsnippet + +snippet nonum "no number" +\nonumber $0 +endsnippet + +# Math Symbols Shortcuts +snippet mbb "\mathbb" iA +$1\mathbb{$2}$0 +endsnippet + +snippet rarr "right arrow" iA +\rightarrow +endsnippet + +snippet larr "left arrow" iA +\leftarrow +endsnippet + +snippet set "math set" w +\\\{$1\\\}$0 +endsnippet + +snippet tf "therefore" w +\therefore$1$0 +endsnippet + +snippet frac "\frac" w +$1\frac{$2}{$3}$0 +endsnippet + +snippet sqq "square" iA +^2 +endsnippet + +snippet cbb "cube" iA +^3 +endsnippet + +snippet sss "superscript" iA +^{$0} +endsnippet + +snippet ssb "subscript" iA +_{$0} +endsnippet + +snippet land "logical and" iA +\wedge$0 +endsnippet + +snippet lor "logical or" iA +\vee$0 +endsnippet + +snippet lnot "logical not" iA +\neg$0 +endsnippet + +snippet lxor "logical xor" iA +\veebar$0 +endsnippet + +snippet sand "set and" i +\cap$0 +endsnippet + +snippet sor "set or" i +\cup$0 +endsnippet + +snippet snot "set not" i +\bar{$1}$0 +endsnippet + +snippet cong "logical congruent" i +\cong $0 +endsnippet + +snippet ncong "logical not congruent" i +\ncong $0 +endsnippet + +snippet cap "set cap" i +\cap $0 +endsnippet + +snippet cup "set cup" i +\cup $0 +endsnippet + +# Boxes +snippet importcbox "import colored boxes" +\usepackage[most]{tcolorbox} +endsnippet + +snippet boxr "red box" wA +\begin{tcolorbox}[colback=red!30!white,colframe=red!30!white, sharp corners] + $0 +\end{tcolorbox} +endsnippet + +snippet boxb "blue box" wA +\begin{tcolorbox}[colback=blue!30!white,colframe=blue!30!white, sharp corners] + $0 +\end{tcolorbox} +endsnippet + +snippet boxg "green box" wA +\begin{tcolorbox}[colback=green!30!white,colframe=green!30!white, sharp corners] + $0 +\end{tcolorbox} +endsnippet + +snippet boxtr "red title box" wA +\begin{tcolorbox}[colback=red!5!white,colframe=red!75!black,title=$1] + $0 +\end{tcolorbox} +endsnippet + +snippet boxtb "blue title box" wA +\begin{tcolorbox}[colback=blue!5!white,colframe=blue!75!black,title=$1] + $0 +\end{tcolorbox} +endsnippet + +snippet boxtg "green title box" wA +\begin{tcolorbox}[colback=green!5!white, colframe=green!75!black,title=$1] + $0 +\end{tcolorbox} +endsnippet + +snippet proposition "red box" w +\begin{tcolorbox}[colback=red!30!white,colframe=red!30!white, sharp corners] + \textbf{Proposition} \\\\ + $0 +\end{tcolorbox} +endsnippet + +snippet theorem "blue box" w +\begin{tcolorbox}[colback=blue!30!white,colframe=blue!30!white, sharp corners] + \textbf{Theorem} \\\\ + $0 +\end{tcolorbox} +endsnippet + +snippet definition "green box" w +\begin{tcolorbox}[colback=green!30!white,colframe=green!30!white, sharp corners] + \textbf{Definition} \\\\ + $0 +\end{tcolorbox} +endsnippet diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim new file mode 100644 index 0000000..7c9f4c8 --- /dev/null +++ b/.config/nvim/init.vim @@ -0,0 +1,245 @@ +filetype plugin indent on +set tabstop=4 +set shiftwidth=4 +set scrolloff=1 +set expandtab +set smartindent +set autoindent +set cursorline +set number +set rnu +set nowrap +set inccommand=split +set updatetime=100 +set mouse+=a + +" File settings +au BufReadPost,BufNewFile *.md setlocal tw=80 | PencilHard | nnoremap :MarkdownPreview +au BufReadPost,BufNewFile *.tex nnoremap :w:!pdflatex main.tex +au BufReadPost,BufNewFile *.md,*.tex setlocal spell | set spelllang=en_US | inoremap u[s1z=`]au +au BufReadPost,BufNewFile *.js,*.ts set sw=2 | set ts=2 + +" nnoremap : ; +" nnoremap ; : +nnoremap : +tnoremap +nmap z :Goyo 80 +nmap q :Goyo! +nnoremap :RainbowToggle +nnoremap sj:resize 20:terminal + +" Telescope +nnoremap :Telescope find_files +nnoremap d :Telescope live_grep +nnoremap u :Telescope lsp_definitions +nnoremap e :Telescopegit_ +nnoremap h :Telescope + +" lsp +nnoremap s :lua vim.lsp.diagnostic.show_line_diagnostics() +nnoremap h :lua vim.lsp.buf.hover() +nnoremap c :lua vim.lsp.buf.code_action() +nnoremap r :lua vim.lsp.buf.rename() + +" Tree +nnoremap :NvimTreeToggle + +" Barbar +nnoremap J :BufferPrevious +nnoremap K :BufferNext +nnoremap :BufferMovePrevious +nnoremap :BufferMoveNext +nnoremap q :BufferClose + +" Git Signs +nnoremap b :lua require"gitsigns".blame_line() + +call plug#begin('~/.config/nvim/plugged') + +Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} +Plug 'ayu-theme/ayu-vim' +Plug 'lewis6991/gitsigns.nvim', {'branch': 'main'} +Plug 'vim-airline/vim-airline' +Plug 'mattn/emmet-vim' +Plug 'reedes/vim-pencil' +Plug 'nvim-lua/popup.nvim' +Plug 'nvim-lua/plenary.nvim' +Plug 'nvim-telescope/telescope.nvim' +Plug 'neovim/nvim-lspconfig' +Plug 'hrsh7th/nvim-compe' +Plug 'junegunn/goyo.vim' +Plug 'junegunn/limelight.vim' +Plug 'camspiers/animate.vim' +Plug 'Yggdroot/indentLine' +Plug 'frazrepo/vim-rainbow' +Plug 'kyazdani42/nvim-web-devicons' +Plug 'kyazdani42/nvim-tree.lua' +Plug 'romgrk/barbar.nvim' +Plug 'elkowar/yuck.vim' + +Plug 'SirVer/ultisnips' +Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install' } + +call plug#end() + +" VimTex +let g:tex_flavor='latex' +let g:vimtex_view_method='zathura' +let g:vimtex_quickfix_mode=0 +set conceallevel=0 + +" Ultisnips +let g:UltiSnipsExpandTrigger = '' +let g:UltiSnipsJumpForwardTrigger = '' +let g:UltiSnipsJumpBackwardTrigger = '' +let g:UltiSnipsSnippetDirectories=[$HOME.'/.config/nvim/UltiSnips'] + +" Markdown Preview +let g:mkdp_auto_close = 0 +let g:mkdp_browser = 'surf' + +" Compe +let g:compe = {} +let g:compe.enabled = v:true +let g:compe.autocomplete = v:true +let g:compe.debug = v:false +let g:compe.min_length = 1 +let g:compe.preselect = 'enable' +let g:compe.throttle_time = 80 +let g:compe.source_timeout = 200 +let g:compe.incomplete_delay = 400 +let g:compe.max_abbr_width = 100 +let g:compe.max_kind_width = 100 +let g:compe.max_menu_width = 100 +let g:compe.documentation = v:true + +let g:compe.source = {} +let g:compe.source.path = v:true +let g:compe.source.buffer = v:true +let g:compe.source.calc = v:true +let g:compe.source.nvim_lsp = v:true +let g:compe.source.nvim_lua = v:true +let g:compe.source.vsnip = v:true +let g:compe.source.ultisnips = v:true + +" gitsigns +lua << EOF +require('gitsigns').setup { + signs = { + add = {hl = 'GitSignsAdd', text = '+', numhl='GitSignsAddNr', linehl='GitSignsAddLn' }, + change = {hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn' }, + delete = {hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' }, + topdelete = {hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' }, + changedelete = {hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn' }, + } +} +EOF + +" indentLine +let g:indentLine_char = '⎸' +let g:indentLine_setConceal = 0 + +" Tree +let g:nvim_tree_width = 35 + +lua << EOF +require'lspconfig'.rust_analyzer.setup{} +EOF + +lua << EOF +require'lspconfig'.ccls.setup{ + init_options = { + cache = { + directory = "/home/priime/.cache/ccls/"; + } + } +} +EOF + +lua << EOF +require'lspconfig'.pyls.setup{} +EOF + +lua << EOF +require'lspconfig'.tsserver.setup{} +EOF + +lua << EOF +require'lspconfig'.java_language_server.setup{ + cmd = { "/usr/share/java/java-language-server/lang_server_linux.sh" } +} +EOF + +lua << EOF +require 'nvim-treesitter.configs'.setup { + highlight = { + enable = true, + }, +} +EOF + +lua << EOF +require'lspconfig'.vuels.setup{ + on_attach = function(client) + client.resolved_capabilities.document_formatting = true + end; +} +EOF + +lua << EOF +require'lspconfig'.racket_langserver.setup{} +EOF + +fun! Start() + " Don't run if: we have commandline arguments, we don't have an empty + " buffer, if we've not invoked as vim or gvim, or if we'e start in insert mode + if argc() || line2byte('$') != -1 || v:progname !~? '^[-gmnq]\=vim\=x\=\%[\.exe]$' || &insertmode + return + endif + + " Start a new buffer ... + enew + + " ... and set some options for it + setlocal + \ bufhidden=wipe + \ buftype=nofile + \ nobuflisted + \ nocursorcolumn + \ nocursorline + \ nolist + \ nonumber + \ noswapfile + \ norelativenumber + + " Now we can just write to the buffer, whatever you want. + call append('$', "") + for line in split(system('cat /home/priime/.config/nvim/startscreen.vimstart'), '\n') + call append('$', '' . l:line) + endfor + + " No modifications to this buffer + setlocal nomodifiable nomodified + + " When we go to insert mode start a new buffer, and start insert + nnoremap e :enew + nnoremap i :enew startinsert + nnoremap o :enew startinsert + + " simple + " set syntax=erlang + " red leaves + " set syntax=html + " blue leaves + set syntax=yaml +endfun + +" Run after "doing all the startup stuff" +autocmd VimEnter * call Start() + + +syntax on +set termguicolors +set t_Co=256 +let ayucolor="dark" +colorscheme ayu diff --git a/.config/nvim/startscreen.vimstart b/.config/nvim/startscreen.vimstart new file mode 100644 index 0000000..14bdde3 --- /dev/null +++ b/.config/nvim/startscreen.vimstart @@ -0,0 +1,48 @@ + & &&&~ + &&&&\ //~&&& + &&& &/|& /| /|&&/~ + & & & &&&&//~|&&\ \//~ + &&&& & & && /\/~&&&/ \//~ + & ////~| /|&\/| & + \&&&/|&/&/&\&&&&&& + & & & & & &/|~/~/|/|/~\&&&&&&&& + &&& &&&&& && ///~ \&/&&&//~ &&&& + &&&&& &&&&&&&&&\ &\&&/|&&\&/~& + & &__&\_\__&\&&/~||////~&& & & & + &&&&&&&&&&\&|\_&\/|/~&/&/ && && &&& & + && &&&&/\_& &&&\_/\_&\~/~/|/|&&&&&&&&&&&& + & &&&& &&&&&&& &&&&&&&///~/||/~/~&_&&&&&&&&&& & + &&&&&&&_ && &&&&&& &&&&\///~/|~//&__&&&&&&&&&& & + &&&& \___&&&&&&& &_&\/|\&\/~//~/ &&&&/ && & + \_ &&&&/ \& &//|/\ _/ && & + \_\__ \_ /\ /|/~/~\ _/_/& & & + \_ \__ \///~&& \&/&& &&&&&&& &&& + \_\_ \//|~& & &&&&& &/&&&&&&&&&&& + /~| /~&&&& & _&&&&&&& &&& & + //|/|/&_&&&&& & &&& + /~\ /~ \& &&&&_&&& & + &&& & & &&& \__/~/~ &&&&&&&& + &&&&&&&&&&&&&&\& & / / & + && &&&&\_& \_&___| & / //~ + && \_/ \_\_ / //~ + & \_ /~ + /~ + ╓───────────╭╱⎨⏆╲╮───────────╖ + ║ ║ + ╟────────────────────────────╢ + ╟────────────────────────────╢ + ╚════════════════════════════╝ + ' _ _ ' + '_ __ _ __(_|_)_ __ ___ ___' + | '_ \| '__| | | '_ ` _ \ / _ \ + | |_) | | | | | | | | | | __/ + | .__/|_| |_|_|_| |_| |_|\___| + |_| + + + [ https://priime.dev ] + + Find File + New Buffer v + Open Terminal + Focus Mode z diff --git a/.config/picom.conf b/.config/picom.conf new file mode 100644 index 0000000..3d12c5f --- /dev/null +++ b/.config/picom.conf @@ -0,0 +1,69 @@ +################################# +# Corners # +################################# + +corner-radius = 10.0; +round-borders = 1; +rounded-corners-exclude = [ + "window_type = 'dock'", + "class_g ?= 'Dmenu'", +]; + +################################# +# Shadows # +################################# + +shadow = true; +shadow-radius = 25; +shadow-opacity = 1; +shadow-offset-x = -25; +shadow-offset-y = -25; +shadow-exclude = [ + "window_type = 'dock'", + "class_g ?= 'Dunst'", +]; + +################################# +# Transparency / Opacity # +################################# + + +active-opacity = 1.0; +inactive-opacity = 1.0; +inactive-dim-fixed = true; +frame-opacity = 1; +focus-exclude = [ + "class_g ?= 'i3lock'", + "class_g ?= 'Dmenu'", +]; +opacity-rule = [ +]; + + +################################# +# Background-Blurring # +################################# + +blur-kern = "3x3box"; +blur: { + method = "dual_kawase"; + strength = 10; + background = true; + background-frame = false; + background-fixed = false; +} +blur-background-exclude = [ + "class_g ?= 'peek'", + "class_g ?= 'Peek'" +# "window_type = 'dock'", +# +]; + +################################# +# General Settings # +################################# + +#experimental-backends = true; +backend = "glx"; +glx-no-stencil = true; +vsync = true; diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc new file mode 100644 index 0000000..fce9346 --- /dev/null +++ b/.config/sxhkd/sxhkdrc @@ -0,0 +1,206 @@ +# +# wm independent hotkeys +# + +# terminal emulator +super + Return + kitty + +# program launcher +super + r + /home/priime/.config/rofi/scripts/rofi-apps + +# 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 + }c + 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 + {e,u} + 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 + } ampersand + bspc {desktop -f, node -d} '^1' + +super + {_, shift + } bracketleft + bspc {desktop -f, node -d} '^2' + +super + {_, shift + } braceleft + bspc {desktop -f, node -d} '^3' + +super + {_, shift + } braceright + bspc {desktop -f, node -d} '^4' + +super + {_, shift + } parenleft + bspc {desktop -f, node -d} '^5' + +super + {_, shift + } equal + bspc {desktop -f, node -d} '^6' + +super + {_, shift + } asterisk + bspc {desktop -f, node -d} '^7' + +super + {_, shift + } parenright + bspc {desktop -f, node -d} '^8' + +super + {_, shift + } plus + bspc {desktop -f, node -d} '^9' + +super + {_, shift + } bracketright + bspc {desktop -f, node -d} '^10' + +super + control + {_, shift + } ampersand + bspc {desktop -f, node -d} '^11' + +super + control + {_, shift + } bracketleft + bspc {desktop -f, node -d} '^12' + +super + control + {_, shift + } braceleft + bspc {desktop -f, node -d} '^13' + +super + control + {_, shift + } braceright + bspc {desktop -f, node -d} '^14' + +super + control + {_, shift + } parenleft + bspc {desktop -f, node -d} '^15' + +super + control + {_, shift + } equal + bspc {desktop -f, node -d} '^16' + +super + control + {_, shift + } asterisk + bspc {desktop -f, node -d} '^17' + +super + control + {_, shift + } parenright + bspc {desktop -f, node -d} '^18' + +super + control + {_, shift + } plus + bspc {desktop -f, node -d} '^19' + +super + control + {_, shift + } bracketright + bspc {desktop -f, node -d} '^20' + +# +# 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} + +# +# misc keybinds +# + +# screenshot +super + shift + s + flameshot gui + +Print + flameshot full -c + +# brightness +XF86MonBrightness{Up,Down} + brightnessctl set {+5%,5%-} + +super + shift + {a,o} + brightnessctl set {+5%,5%-} + +# volume +XF86Audio{Raise,Lower}Volume + pactl set-sink-volume @DEFAULT_SINK@ {+,-}2% + +XF86AudioMute + pamixer --toggle-mute + +super + {a,o} + pactl set-sink-volume @DEFAULT_SINK@ {+,-}2% diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc new file mode 100644 index 0000000..0e4bb4e --- /dev/null +++ b/.config/zathura/zathurarc @@ -0,0 +1,13 @@ +set recolor-lightcolor "#0e1419" +set default-bg "#0e1419" +set inputbar-bg "#0e1419" +set inputbar-fg "#ffffff" +set notification-bg "#0e1419" +set notification-fg "#ffffff" +set statusbar-bg "#0e1419" +set statusbar-fg "#ffffff" +set tabbar-bg "#0e1419" +set tabbar-fg "#ffffff" +set tabbar-focus-bg "#ffffff" +set tabbar-focus-fg "#0e1419" +set selection-clipboard clipboard diff --git a/.doom.d/config.el b/.doom.d/config.el new file mode 100644 index 0000000..5223787 --- /dev/null +++ b/.doom.d/config.el @@ -0,0 +1,73 @@ +;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- + +;; Place your private configuration here! Remember, you do not need to run 'doom +;; sync' after modifying this file! + + +;; Some functionality uses this to identify you, e.g. GPG configuration, email +;; clients, file templates and snippets. +(setq user-full-name "Lucas Sta Maria" + user-mail-address "lucas.stamaria@gmail.com") + +;; Doom exposes five (optional) variables for controlling fonts in Doom. Here +;; are the three important ones: +;; +;; + `doom-font' +;; + `doom-variable-pitch-font' +;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for +;; presentations or streaming. +;; +;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd +;; font string. You generally only need these two: +;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light) +;; doom-variable-pitch-font (font-spec :family "sans" :size 13)) + +;; There are two ways to load a theme. Both assume the theme is installed and +;; available. You can either set `doom-theme' or manually load a theme with the +;; `load-theme' function. This is the default: +(setq doom-theme 'doom-one) + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/org/") + +;; This determines the style of line numbers in effect. If set to `nil', line +;; numbers are disabled. For relative line numbers, set this to `relative'. +(setq display-line-numbers-type 'relative) + + +;; Here are some additional functions/macros that could help you configure Doom: +;; +;; - `load!' for loading external *.el files relative to this one +;; - `use-package!' for configuring packages +;; - `after!' for running code after a package has loaded +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; they are implemented. + +(setq doom-font (font-spec :family "Roboto Mono Medium" :size 12 :weight 'medium)) + +(editorconfig-mode 1) + +;; (require 'elcord) +;; (elcord-mode) + +;; Centaur Tabs keybindings +(map! :n "C-j" #'centaur-tabs-backward-tab) +(map! :n "C-k" #'centaur-tabs-forward-tab) +(map! :n "C-S-j" #'centaur-tabs-move-current-tab-to-left) +(map! :n "C-S-k" #'centaur-tabs-move-current-tab-to-right) + +;; Disable automatic smart parens +;; (remove-hook 'doom-first-buffer-hook #'smartparens-global-mode) + +(require 'just-mode) +(just-mode) diff --git a/.doom.d/init.el b/.doom.d/init.el new file mode 100644 index 0000000..e6a6e7f --- /dev/null +++ b/.doom.d/init.el @@ -0,0 +1,193 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a "Module Index" link where you'll find +;; a comprehensive list of Doom's modules and what flags they support. + +;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on +;; flags as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + +(doom! :input + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + company ; the ultimate code completion backend + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + doom-dashboard ; a nifty splash screen for Emacs + doom-quit ; DOOM quit-message prompts when you quit Emacs + (emoji +unicode) ; 🙂 + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + ;;hydra + ;;indent-guides ; highlighted indent columns + ;;ligatures ; ligatures and symbols to make your code pretty again + minimap ; show a map of the code on the side + (modeline +light) ; snazzy, Atom-inspired modeline, plus API + nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + tabs ; a tab bar for Emacs + treemacs ; a project drawer, like neotree but cooler + unicode ; extended unicode support for various languages + vc-gutter ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + ;;window-select ; visually switch windows + workspaces ; tab emulation, persistence & separate workspaces + ;;zen ; distraction-free coding or writing + + :editor + (evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + (format ) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + ;;multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + ;;snippets ; my elves. They type so I don't have to + ;;word-wrap ; soft wrapping with language-aware indent + + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;ibuffer ; interactive buffer management + ;;undo ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + ;;eshell ; the elisp shell that works everywhere + ;;shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + vterm ; the best terminal emulation in Emacs + + :checkers + syntax ; tasing you for every semicolon you forget + ;;(spell +flyspell) ; tasing you for misspelling mispelling + ;;grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;debugger ; FIXME stepping through code, to help you add bugs + ;;direnv + ;;docker + editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + ;;(eval +overlay) ; run code, run (also, repls) + ;;gist ; interacting with github gists + lookup ; navigate your code and its documentation + lsp ; M-x vscode + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + ;;pdf ; pdf enhancements + ;;prodigy ; FIXME managing external services & code builders + ;;rgb ; creating color strings + ;;taskrunner ; taskrunner for all your projects + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if IS-MAC macos) ; improve compatibility with macOS + ;;tty ; improve the terminal Emacs experience + + :lang + ;;agda ; types of types of types of types... + ;;beancount ; mind the GAAP + ;;cc ; C > C++ == 1 + ;;clojure ; java with a lisp + ;;common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + ;;data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + ;;gdscript ; the language you waited for + ;;(go +lsp) ; the hipster dialect + ;;(haskell +lsp) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + json ; At least it ain't XML + (java +lsp) ; the poster child for carpal tunnel syndrome + javascript ; all(hope(abandon(ye(who(enter(here)))))) + ;;julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + latex ; writing papers in Emacs has never been so fun + lean ; for folks with too much to prove + ;;ledger ; be audit you can be + ;;lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + ;;nix ; I hereby declare "nix geht mehr!" + ocaml ; an objective camel + ;; org ; organize your plain life in plain text + ;;php ; perl's insecure younger brother + ;;plantuml ; diagrams for confusing people more + ;;purescript ; javascript, but functional + ;;python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + racket ; a DSL for DSLs + ;;raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + (web +html + +css + +lsp) ; the tubes + yaml ; JSON, but readable + ;;zig ; C, but simpler + + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + ;;calendar + ;;emms + ;;everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + ;;(rss +org) ; emacs as an RSS reader + ;;twitter ; twitter client https://twitter.com/vnought + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/.doom.d/packages.el b/.doom.d/packages.el new file mode 100644 index 0000000..1ed80b8 --- /dev/null +++ b/.doom.d/packages.el @@ -0,0 +1,53 @@ +;; -*- no-byte-compile: t; -*- +;;; $DOOMDIR/packages.el + +;; To install a package with Doom you must declare them here and run 'doom sync' +;; on the command line, then restart Emacs for the changes to take effect -- or +;; use 'M-x doom/reload'. + + +;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: +;(package! some-package) + +;; To install a package directly from a remote git repo, you must specify a +;; `:recipe'. You'll find documentation on what `:recipe' accepts here: +;; https://github.com/raxod502/straight.el#the-recipe-format +;(package! another-package +; :recipe (:host github :repo "username/repo")) + +;; If the package you are trying to install does not contain a PACKAGENAME.el +;; file, or is located in a subdirectory of the repo, you'll need to specify +;; `:files' in the `:recipe': +;(package! this-package +; :recipe (:host github :repo "username/repo" +; :files ("some-file.el" "src/lisp/*.el"))) + +;; If you'd like to disable a package included with Doom, you can do so here +;; with the `:disable' property: +;(package! builtin-package :disable t) + +;; You can override the recipe of a built in package without having to specify +;; all the properties for `:recipe'. These will inherit the rest of its recipe +;; from Doom or MELPA/ELPA/Emacsmirror: +;(package! builtin-package :recipe (:nonrecursive t)) +;(package! builtin-package-2 :recipe (:repo "myfork/package")) + +;; Specify a `:branch' to install a package from a particular branch or tag. +;; This is required for some packages whose default branch isn't 'master' (which +;; our package manager can't deal with; see raxod502/straight.el#279) +;(package! builtin-package :recipe (:branch "develop")) + +;; Use `:pin' to specify a particular commit to install. +;(package! builtin-package :pin "1a2b3c4d5e") + + +;; Doom's packages are pinned to a specific commit and updated from release to +;; release. The `unpin!' macro allows you to unpin single packages... +;(unpin! pinned-package) +;; ...or multiple packages +;(unpin! pinned-package another-pinned-package) +;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) +;(unpin! t) + +;; (package! elcord) +(package! just-mode)