├── LICENSE ├── README.md ├── bin ├── alert ├── bulknew ├── change-bg ├── eww-open ├── hyprstart ├── hyprwrap ├── import-gsettings ├── layout ├── lock ├── record ├── relink ├── renamer ├── touchsh └── vidshare ├── config ├── btop │ ├── .gitignore │ ├── btop.conf │ └── btop.log ├── dunst │ └── dunstrc ├── eww │ ├── .gitignore │ ├── .stylelintrc.json │ ├── art │ │ ├── dunst │ │ │ ├── active-hover.svg │ │ │ ├── active.svg │ │ │ ├── inactive-hover.svg │ │ │ ├── inactive.svg │ │ │ └── originals │ │ │ │ ├── cellstuff.svg │ │ │ │ ├── cracked.svg │ │ │ │ ├── notification.svg │ │ │ │ └── v1.svg │ │ ├── nosvagor.png │ │ ├── player.png │ │ ├── screenctl │ │ │ ├── brctl-10.svg │ │ │ ├── brctl-2.svg │ │ │ ├── brctl-3.svg │ │ │ ├── brctl-4.svg │ │ │ ├── brctl-5.svg │ │ │ ├── brctl-6.svg │ │ │ ├── brctl-7.svg │ │ │ ├── brctl-8.svg │ │ │ ├── brctl-9.svg │ │ │ ├── brctl.svg │ │ │ └── originals │ │ │ │ ├── brctl.svg │ │ │ │ ├── jellyfish.svg │ │ │ │ ├── lightbulb.svg │ │ │ │ └── sun.svg │ │ ├── signal │ │ │ ├── originals │ │ │ │ ├── network.svg │ │ │ │ ├── neuron.svg │ │ │ │ ├── neuron2.svg │ │ │ │ ├── neuron3.svg │ │ │ │ └── signal.svg │ │ │ ├── signal-hover.svg │ │ │ └── signal.svg │ │ ├── systemctl │ │ │ ├── mitochondria-active.svg │ │ │ ├── mitochondria.svg │ │ │ └── originals │ │ │ │ └── mito.svg │ │ ├── ws-icons │ │ │ ├── dna-active.svg │ │ │ ├── dna-empty.svg │ │ │ ├── dna-hover.svg │ │ │ ├── dna.svg │ │ │ ├── dotfiles-active.svg │ │ │ ├── dotfiles-empty.svg │ │ │ ├── dotfiles-hover.svg │ │ │ ├── dotfiles.svg │ │ │ ├── learn-active.svg │ │ │ ├── learn-empty.svg │ │ │ ├── learn-hover.svg │ │ │ ├── learn.svg │ │ │ ├── music-active.svg │ │ │ ├── music-empty.svg │ │ │ ├── music-hover.svg │ │ │ ├── music.svg │ │ │ ├── network-active.svg │ │ │ ├── network-empty.svg │ │ │ ├── network-hover.svg │ │ │ └── network.svg │ │ └── yuki.png │ ├── bin │ │ ├── brightness │ │ ├── computer_info │ │ ├── create_temp_files │ │ ├── date_info │ │ ├── music_info │ │ ├── ping │ │ ├── pulse_info │ │ ├── timer_info │ │ ├── weather_info │ │ └── workspaces │ ├── eww.scss │ └── eww.yuck ├── fontconfig │ └── fonts.conf ├── git │ └── config ├── glava │ ├── bars │ ├── bars.glsl │ ├── bars_rc.glsl │ ├── radial │ ├── radial.glsl │ ├── radial_rc.glsl │ ├── smooth_parameters.glsl │ └── util ├── gtk-3.0 │ ├── bookmarks │ └── settings.ini ├── gtk-4.0 │ ├── bookmarks │ └── settings.ini ├── guvcview2 │ └── video0 ├── hypr │ └── hyprland.conf ├── inkscape │ ├── .gitignore │ ├── fontcollections │ │ └── recently_used_fonts.log │ ├── palettes │ │ └── vagari.gpl │ ├── preferences.xml │ └── templates │ │ └── default.svg ├── kitty │ ├── kitty.conf │ ├── sessions │ │ ├── LeadPier.conf │ │ ├── acr.conf │ │ ├── cogikyo.conf │ │ ├── cullyn.dev.conf │ │ ├── dabella.conf │ │ ├── dotfiles.conf │ │ ├── eww.conf │ │ ├── firefox.conf │ │ ├── home.conf │ │ ├── nectar.conf │ │ ├── nosvagor.com.conf │ │ ├── nvim.conf │ │ ├── pipes.conf │ │ ├── rust-run.conf │ │ ├── rust.conf │ │ ├── sapais.conf │ │ ├── sonder.conf │ │ ├── term.conf │ │ ├── vagari.conf │ │ └── voice.conf │ └── tab_bar.py ├── lazygit │ ├── .gitignore │ └── config.yml ├── manim │ └── manim.cfg ├── mimeapps.list ├── mpv │ └── mpv.conf ├── nvim │ ├── .gitignore │ ├── init.lua │ ├── lua │ │ └── user │ │ │ ├── alpha.lua │ │ │ ├── autocmds.lua │ │ │ ├── autopairs.lua │ │ │ ├── cmp.lua │ │ │ ├── cursor.lua │ │ │ ├── keymaps.lua │ │ │ ├── lsp.lua │ │ │ ├── lualine.lua │ │ │ ├── nvimtree.lua │ │ │ ├── settings.lua │ │ │ ├── telescope.lua │ │ │ └── treesitter.lua │ └── spell │ │ ├── en.utf-8.add │ │ └── en.utf-8.add.spl ├── paru │ └── paru.conf ├── pipes-rs │ └── config.toml ├── starship.toml ├── swaylock │ └── config.conf ├── user-dirs.dirs ├── xplr │ ├── init.lua │ └── stylua.toml ├── zathura │ └── zathurarc └── zsh │ ├── vagari-highlights.zsh │ └── zshrc ├── etc ├── bluetooth │ └── main.conf ├── caddy.service ├── crkbd.json ├── fonts.tar.gz ├── gifview.desktop ├── loader.conf ├── logid.cfg ├── packages.lst ├── sddm.conf.d │ ├── autologin.conf │ └── hyprland.desktop ├── security │ └── faillock.conf ├── udev │ ├── 81-bluetooth-hci.rules │ └── 92-viia.rules └── vail_keyboard_layout.vil └── share ├── dotfiles-banner.gif ├── example-1.png ├── example-2.png ├── example-3.png ├── favicon.ico ├── newtab.html ├── obscure_shadows ├── ambedo.png ├── anemoia.png ├── anoscetia.png ├── harmonoia.png ├── idewild.png ├── kinspec.png ├── onsim.png ├── ringlorn.png ├── solibra.png ├── trumspringa.png ├── vemodalen.png ├── wangare.png ├── yuyi.png └── zenosyne.png ├── social-preview.jpg ├── sounds ├── discovery.ogg ├── fruit.ogg ├── gems.ogg ├── jackpot.ogg ├── knock.ogg ├── moondrop.ogg └── reward.ogg └── videos ├── blackhole.webm ├── dna-vf-blu.webm ├── dna.mp4 └── record.mp4 /bin/alert: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SOUND_PATH="$HOME/dotfiles/share/sounds" 4 | # dunsitfy arguments ⮯ 5 | app="$1" 6 | # summary="$2" 7 | # body="$3" 8 | # icon_path="$4" 9 | urgency="$5" 10 | 11 | case "$urgency" in 12 | LOW) sound="none" ;; 13 | NORMAL) sound="moondrop" ;; 14 | CRITICAL) sound="gems" ;; 15 | esac 16 | 17 | case "$app" in 18 | timer) sound="jackpot" ;; 19 | attention) sound="discovery" ;; 20 | chat) sound="reward" ;; 21 | work) sound="fruit" ;; 22 | wf-start) sound="discovery" ;; 23 | wf-end) sound="reward" ;; 24 | Spotify) sound="none" ;; 25 | discord) sound="none" ;; 26 | Slack) sound="knock" 27 | ;; esac 28 | 29 | if [ "$sound" == "none" ]; then 30 | exit 0 31 | fi 32 | 33 | paplay "$SOUND_PATH/$sound.ogg" & disown 34 | 35 | exit 0 36 | -------------------------------------------------------------------------------- /bin/bulknew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Description: Allows for creation of multiple files/dirs simultaneously 4 | # Creates a tmp file to write each entry in a separate line 5 | # 6 | # Note: Only relative paths are supported. Absolute paths are ignored 7 | # Leading and trailing whitespace in path names is also ignored 8 | # 9 | # Shell: POSIX compliant 10 | # Author: KlzXS 11 | 12 | EDITOR="${EDITOR:-vi}" 13 | TMPDIR="${TMPDIR:-/tmp}" 14 | 15 | printf "'f'ile / 'd'ir? " 16 | read -r resp 17 | 18 | if [ "$resp" = "f" ]; then 19 | #shellcheck disable=SC2016 20 | cmd='mkdir -p "$(dirname "{}")" && touch "{}"' 21 | elif [ "$resp" = "d" ]; then 22 | cmd='mkdir -p {}' 23 | else 24 | exit 1 25 | fi 26 | 27 | tmpfile=$(mktemp "$TMPDIR/.nnnXXXXXX") 28 | $EDITOR "$tmpfile" 29 | 30 | sed "/^\//d" "$tmpfile" | xargs -n1 -I{} sh -c "$cmd" 31 | 32 | rm "$tmpfile" 33 | -------------------------------------------------------------------------------- /bin/change-bg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | DISPLAY="HDMI-A-1" 4 | VID_PATH="$HOME/dotfiles/share/videos" 5 | 6 | background_choice="" 7 | if [[ $# -eq 0 ]]; then 8 | background_choice="default" 9 | else 10 | background_choice="$1" 11 | fi 12 | 13 | dna () { 14 | mpvpaper -o "--loop --brightness=6 --contrast=9 --saturation=-16 --hue=-24" "$DISPLAY" "$VID_PATH/dna.mp4" & disown 15 | } 16 | 17 | record () { 18 | mpvpaper -o "--loop --brightness=-3 --contrast=10 --saturation=-42 --hue=69" "$DISPLAY" "$VID_PATH/record.mp4" & disown 19 | } 20 | 21 | blackhole () { 22 | mpvpaper -o "--loop --brightness=3 --contrast=6 --saturation=-50 --hue=-8 --gamma=-20" "$DISPLAY" "$VID_PATH/blackhole.webm" & disown 23 | } 24 | 25 | 26 | case "$background_choice" in 27 | "default" ) 28 | ps -ef | rg "record.mp4|blackhole.webm" | rg -v rg | awk '{print $2}' | xargs kill 29 | exit 0 30 | ;; 31 | "code") 32 | dna & disown 33 | sleep 2 34 | ps -ef | rg "mpvpaper" | rg -v rg | awk '{print $2}' | head -n -1 | xargs kill 35 | ;; 36 | "music") 37 | record & disown 38 | ps -ef | rg "blackhole.webm" | rg -v rg | awk '{print $2}' | xargs kill 39 | ;; 40 | "lock") 41 | blackhole & disown 42 | ps -ef | rg "record.mp4" | rg -v rg | awk '{print $2}' | xargs kill 43 | ;; 44 | *) 45 | echo "invalid choice; choices: code | music | lock" 46 | exit 1 47 | ;; 48 | esac 49 | 50 | exit 0 51 | -------------------------------------------------------------------------------- /bin/eww-open: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | killall eww -9 4 | eww daemon 5 | eww open-many \ 6 | today \ 7 | computer user \ 8 | workspaces \ 9 | music albumArt \ 10 | pacman screenctl dunst systemctl \ 11 | assistant 12 | -------------------------------------------------------------------------------- /bin/hyprstart: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sleep 1 4 | change-bg "code" 5 | 6 | layout -n 1 7 | # layout -n 2 8 | # layout -n 3 9 | layout -n 4 10 | 11 | hyprctl dispatch workspace 5 12 | glava -e "bars_rc.glsl" & disown 13 | glava -e "radial_rc.glsl" & disown 14 | spotify-launcher & disown 15 | sleep 2 16 | hyprctl dispatch setfloating 17 | hyprctl dispatch moveactive exact 2361 147 18 | hyprctl dispatch resizeactive exact 1301 1000 19 | 20 | ps -ef | rg weather_info | rg -v rg | awk '{print $2}' | xargs kill 21 | eval "$HOME/dotfiles/config/eww/bin/weather_info" & disown 22 | eval "$HOME/dotfiles/config/eww/bin/date_info" & disown 23 | 24 | dunstify -a "attention" -u low "$USER@$HOSTNAME" "こんにちは" 25 | eww-open 26 | 27 | exit 0 28 | -------------------------------------------------------------------------------- /bin/hyprwrap: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export HYPRLAND_LOG_WLR=1 4 | export XCURSOR_SIZE=24 5 | export GTK_THEME="" 6 | export XCURSOR_THEME="catppuccin-macchiato-pink-standard+default" 7 | export PATH="$HOME/.cargo/bin:$PATH" 8 | export GOPATH="$HOME/.go" 9 | export PATH="$PATH:$HOME/.go/bin" 10 | export PATH="$HOME/.local/bin:$PATH" 11 | export PAGER=nvimpager 12 | export EDITOR="nvim" 13 | export DOTS="$HOME/dotfiles" 14 | 15 | # export PISTOL_CHROMA_STYLE=catppuccin-macchiato 16 | 17 | export FZF_DEFAULT_OPTS="\ 18 | --color=bg+:#222536,bg:#222536,spinner:#b29ae8,hl:#f8b486 \ 19 | --color=fg:#9db2f4,header:#f8b486,info:#6380ec,pointer:#f8b486 \ 20 | --color=marker:#6380ec,fg+:#8aa4f3,prompt:#6380ec,hl+:#f8b486" 21 | 22 | export XDG_CURRENT_DESKTOP=Hyprland 23 | export XDG_SESSION_TYPE=wayland 24 | export XDG_SESSION_DESKTOP=Hyprland 25 | export XDG_DATA_DIRS="/usr/share:/usr/local/share" 26 | 27 | export QT_AUTO_SCREEN_SCALE_FACTOR=1 28 | export QT_QPA_PLATFORM="wayland;xcb" 29 | export QT_WAYLAND_DISABLE_WINDOWDECORATION=1 30 | export QT_QPA_PLATFORMTHEME=qt5ct 31 | 32 | export GDK_BACKEND="wayland,x11" 33 | export CLUTTER_BACKEND=wayland 34 | export SDL_VIDEODRIVER=wayland 35 | 36 | exec Hyprland 37 | -------------------------------------------------------------------------------- /bin/import-gsettings: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini" 4 | GNOME_SCHEMA="org.gnome.desktop.interface" 5 | 6 | if [ ! -f "$CONFIG" ]; then 7 | echo "gtk-settings not found" 8 | exit 1 9 | fi 10 | 11 | gtk_theme="$(grep 'gtk-theme-name' "$CONFIG" | sed 's/.*\s*=\s*//')" 12 | icon_theme="$(grep 'gtk-icon-theme-name' "$CONFIG" | sed 's/.*\s*=\s*//')" 13 | cursor_theme="$(grep 'gtk-cursor-theme-name' "$CONFIG" | sed 's/.*\s*=\s*//')" 14 | font_name="$(grep 'gtk-font-name' "$CONFIG" | sed 's/.*\s*=\s*//')" 15 | 16 | gsettings set "$GNOME_SCHEMA" gtk-theme "$gtk_theme" 17 | gsettings set "$GNOME_SCHEMA" icon-theme "$icon_theme" 18 | gsettings set "$GNOME_SCHEMA" cursor-theme "$cursor_theme" 19 | gsettings set "$GNOME_SCHEMA" font-name "$font_name" 20 | -------------------------------------------------------------------------------- /bin/layout: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | inprog=$(ps -ef | rg layout | rg -v rg | wc -l) 4 | if [[ "$inprog" -gt 2 ]]; then 5 | notify-send -u critical -t 2000 "ERROR: layout already in progress." 6 | exit 0 7 | fi 8 | 9 | a_flag="" # [a]plication 10 | n_flag="" # [w]orkspace 11 | # s_flag="" # [s]ession (kitty) 12 | # w_flag="" # [w]ebsite 13 | 14 | while getopts 'a:d:n:w:s:' flag; do 15 | case "$flag" in 16 | a) a_flag="$OPTARG" ;; 17 | # s) s_flag="$OPTARG" ;; 18 | n) n_flag="$OPTARG" ;; 19 | # w) w_flag="$OPTARG" ;; 20 | *) exit 1 ;; 21 | esac 22 | done 23 | 24 | if [[ "$#" == 0 ]]; then 25 | exit 1 26 | fi 27 | 28 | hyprctl dispatch workspace 6 29 | 30 | windows=$(hyprctl workspaces | grep -A 2 "ID $n_flag" | grep -oP '\windows:\s+\K[0-9]+') 31 | if [[ -n "$windows" && "$windows" -ne 0 ]]; then 32 | dunstify -u critical -t 2000 "ERROR" "a layout is already open" 33 | hyprctl dispatch workspace previous 34 | exit 1 35 | fi 36 | 37 | browser() { 38 | if [[ "$2" == "tab" ]]; then 39 | firefox-developer-edition "$1" & 40 | sleep 1.5 41 | else 42 | firefox-developer-edition --new-window "$1" & 43 | sleep 1.5 44 | fi 45 | } 46 | 47 | terminal() { 48 | if [[ -n "$1" ]]; then 49 | kitty --session ~/.config/kitty/sessions/"$1".conf & 50 | sleep 1 51 | else 52 | kitty --session ~/.config/kitty/sessions/pipes.conf & 53 | sleep 1 54 | fi 55 | } 56 | 57 | resize() { 58 | hyprctl dispatch resizeactive exact 1870 1186 59 | hyprctl dispatch movefocus l 60 | hyprctl disptch resizeactive exact 1866 1955 61 | for ((i = 0; i < 5; i++)); do 62 | hyprctl dispatch resizeactive exact 1012 1955 63 | done # have resize master several times (bug?) ⮭ 64 | } 65 | 66 | dispatch() { 67 | local medium_size="660 563" 68 | local medium_pos="3153 209" 69 | # Use the same values as defined in your hyprland.conf float commands 70 | hyprctl dispatch setfloating 71 | hyprctl dispatch moveactive exact "$medium_pos" 72 | hyprctl dispatch resizeactive exact "$medium_size" 73 | } 74 | 75 | acr() { 76 | cursor & sleep 0.5 77 | terminal "acr" 78 | dispatch 79 | browser "grok.com" 80 | browser "localhost:3002" "tab" 81 | browser "https://github.com/nosvagor/acr" "tab" 82 | browser "https://wangare.com/project/csksoc4w0s8c4k8ok8g0cos8/production" "tab" 83 | browser "https://databasetagger.acrecruitergroup.com" "tab" 84 | } 85 | 86 | nosvagor() { 87 | cursor & sleep 0.5 88 | terminal "nosvagor.com" 89 | dispatch 90 | browser "grok.com" 91 | browser "localhost:3000" "tab" 92 | browser "https://wangare.com/project/vssk4cg8kwwgk8cgc08w44ow/production" "tab" 93 | browser "https://nosvagor.com" "tab" 94 | hyprctl dispatch movewindow l 95 | } 96 | 97 | leadPier () { 98 | cursor & sleep 2 99 | terminal "LeadPier" 100 | dispatch 101 | browser "grok.com" 102 | browser "http://localhost:4000" "tab" 103 | } 104 | 105 | # ============================================================================ 106 | # hyprctl keyword input:follow_mouse 0 107 | 108 | hyprctl dispatch workspace "$n_flag" 109 | 110 | case "$n_flag" in 111 | 1) 112 | slack & sleep 0.5 113 | browser "https://app.hey.com/calendar/days/now" 114 | ;; 115 | 2) 116 | ;; 117 | 3) 118 | case "$a_flag" in 119 | "a") acr ;; 120 | "n") nosvagor ;; 121 | "l") leadPier ;; 122 | esac 123 | ;; 124 | 4) 125 | terminal "dotfiles" 126 | browser "https://github.com/nosvagor/dotfiles" 127 | resize 128 | ;; 129 | *) exit 1 ;; 130 | esac 131 | 132 | # if [[ ""$n_flag == 3 ]]; then 133 | # hyprctl dispatch movefocus r 134 | # hyprctl dispatch movefocus u 135 | # hyprctl dispatch resizeactive exact 1870 1186 136 | # hyprctl dispatch movefocus d 137 | # hyprctl dispatch movefocus l 138 | # fi 139 | # hyprctl keyword input:follow_mouse 1 140 | # ============================================================================ 141 | 142 | exit 0 143 | -------------------------------------------------------------------------------- /bin/lock: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ws=$(tail -n 1 /tmp/eww/workspace) 4 | hyprctl dispatch workspace 6 5 | 6 | killall eww -9 7 | killall glava 8 | playerctl pause 9 | # change-bg "lock" 2>&1 /dev/null 10 | sleep 0.5 11 | 12 | swaylock -C "$HOME/.config/swaylock/config.conf" 13 | 14 | glava -e "bars_rc.glsl" & disown 15 | glava -e "radial_rc.glsl" & disown 16 | change-bg "music" 17 | hyprctl dispatch workspace "$ws" 18 | 19 | ps -ef | rg weather_info | rg -v rg | awk '{print $2}' | xargs kill 20 | eval "$HOME/dotfiles/config/eww/bin/weather_info" & disown 21 | eval "$HOME/dotfiles/config/eww/bin/date_info" & disown 22 | 23 | dunstify -a "attention" -u low "$USER@$HOSTNAME" "こんにちは" 24 | eww-open 25 | 26 | exit 0 27 | -------------------------------------------------------------------------------- /bin/record: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | C="--codec=h264_vaapi" 4 | D="--device=/dev/dri/renderD128" 5 | 6 | dir="$HOME/media/recordings" 7 | a_flag="combined_audio.monitor" # audio sources 8 | a_label="fullaudio" 9 | s_flag="" 10 | s_label="fullscreen" 11 | 12 | while getopts 'a:s:d:' flag; do 13 | case "$flag" in 14 | a) a_flag="$OPTARG" ;; 15 | s) s_flag="$OPTARG" ;; 16 | d) dir="$OPTARG" ;; 17 | *) exit 1 ;; 18 | esac 19 | done 20 | 21 | if [[ "$s_flag" == "slurp" ]]; then 22 | slurp="$(slurp)" 23 | g="-g $slurp" 24 | s_label=$(echo "$slurp" | awk -F ' ' '{print $2}') 25 | else 26 | g="" 27 | fi 28 | 29 | if [[ "$s_label" == "" ]]; then 30 | dunstify "no region selected, aborting" -a "wf-end" -u critical -t 1000 31 | exit 1 32 | fi 33 | 34 | case "$a_flag" in 35 | source) a="--audio=$input_source"; a_label="source" ;; 36 | sink) a="--audio=$output_source"; a_label="sink" ;; 37 | none) a=""; a_label="muted" ;; 38 | *) a="--audio=$a_flag" ;; 39 | esac 40 | 41 | label="($s_label-$a_label)" 42 | 43 | if [[ "$label" == "(fullscreen-fullaudio)" ]]; then 44 | label="(all)" 45 | fi 46 | 47 | output="$dir/$(date "+%m-%d-%y %H:%M $label").mp4" 48 | 49 | if [[ -s "$output" ]]; then 50 | rm "$output" 51 | fi 52 | 53 | f="-f$output" 54 | 55 | if [[ $a_flag == "combined_audio.monitor" ]]; then 56 | 57 | # sources 58 | input_source="alsa_output.usb-Focusrite_Scarlett_Solo_USB_Y70ZEU921E21FF-00.analog-stereo" 59 | output_source="bluez_output.14_3F_A6_10_A1_B5.1.monitor" 60 | 61 | # create a null sink (virtual audio device) 62 | combined=$(pactl load-module module-null-sink sink_name=combined_audio) 63 | 64 | # scarlette needs to be remapped to mono audio 65 | remapped_input=$(pactl load-module module-remap-source master="$input_source" source_name=remapped_input channels=1 channel_map=mono) 66 | 67 | # create two audio loopbacks, one for each audio source 68 | input=$(pactl load-module module-loopback source=remapped_input sink=combined_audio) 69 | output=$(pactl load-module module-loopback source="$output_source" sink=combined_audio) 70 | 71 | # lower sink volume (volume control on sink does not affect it in the combined input) 72 | output_loopback_id=$(pactl list short sink-inputs | rg "PipeWire" | tail -n 1 | awk '{print $1}') 73 | pactl set-sink-input-volume "$output_loopback_id" 150% 74 | fi 75 | 76 | cleanup() { 77 | if [[ $a_flag == "combined_audio.monitor" ]]; then 78 | pactl unload-module "$combined" 79 | pactl unload-module "$input" 80 | pactl unload-module "$output" 81 | pactl unload-module "$remapped_input" 82 | fi 83 | 84 | dunstify "🎬 screen recording ended" -a "wf-end" -u low -t 1000 85 | } 86 | 87 | # ============================================================================= 88 | 89 | dunstify "📽️ recording $label" -a "wf-start" -u low -t 2000 && sleep 2.1 90 | 91 | wf-recorder "$C" "$D" "$a" "$f" "$g" 92 | 93 | # catch Ctrl+C and call the cleanup function 94 | trap cleanup EXIT 95 | -------------------------------------------------------------------------------- /bin/relink: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ln -sfnv "$HOME"/dotfiles/config/* "$HOME"/.config/ 4 | -------------------------------------------------------------------------------- /bin/renamer: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} 4 | 5 | if type qmv >/dev/null 2>&1; then 6 | batchrenamesel="qmv -fdo -da" 7 | batchrename="qmv -fdo -a" 8 | elif type vidir >/dev/null 2>&1; then 9 | batchrenamesel="vidir" 10 | batchrename="vidir" 11 | else 12 | printf "there is not batchrename program installed." 13 | exit 14 | fi 15 | 16 | if [ -s "$selection" ]; then 17 | printf "rename selection? " 18 | read -r resp 19 | fi 20 | 21 | if [ "$resp" = "y" ]; then 22 | # -o flag is necessary for interactive editors 23 | xargs -o -0 $batchrenamesel < "$selection" 24 | 25 | # Clear selection 26 | if [ -p "$NNN_PIPE" ]; then 27 | printf "-" > "$NNN_PIPE" 28 | fi 29 | elif [ ! "$(LC_ALL=C ls -a)" = ". 30 | .." ]; then 31 | # On older systems that don't have ls -A 32 | $batchrename 33 | fi 34 | -------------------------------------------------------------------------------- /bin/touchsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | file="$1" 4 | 5 | touch "$file" 6 | chmod +x "$file" 7 | echo "#!/usr/bin/env $2" >> "$file" 8 | -------------------------------------------------------------------------------- /bin/vidshare: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ffmpeg -i "$1" -c:v libx264 -preset veryslow -crf 20 -vf "scale=1920:-1" -b:v 2M -maxrate 2M -bufsize 4M "$2" 4 | -------------------------------------------------------------------------------- /config/btop/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/config/btop/.gitignore -------------------------------------------------------------------------------- /config/btop/btop.log: -------------------------------------------------------------------------------- 1 | 2 | 2025/03/05 (13:34:52) | ===> btop++ v.1.4.0 3 | 2025/03/05 (13:34:52) | WARNING: Failed to join _runner thread on exit! 4 | 5 | 2025/03/05 (14:16:26) | ===> btop++ v.1.4.0 6 | 2025/03/05 (14:16:26) | WARNING: Failed to join _runner thread on exit! 7 | 8 | 2025/03/05 (16:00:16) | ===> btop++ v.1.4.0 9 | 2025/03/05 (16:00:16) | WARNING: Failed to join _runner thread on exit! 10 | 11 | 2025/03/05 (17:26:06) | ===> btop++ v.1.4.0 12 | 2025/03/05 (17:26:06) | WARNING: Failed to join _runner thread on exit! 13 | -------------------------------------------------------------------------------- /config/dunst/dunstrc: -------------------------------------------------------------------------------- 1 | [global] 2 | follow = "keyboard" 3 | enable_posix_regex = true 4 | origin = "bottom-right" 5 | width = 600 6 | offset = "90x118" 7 | notification_limit = 1 8 | progress_bar = true 9 | progress_bar_height = 10 10 | progress_bar_frame_width = 1 11 | progress_bar_min_width = 600 12 | progress_bar_max_width = 600 13 | indicate_hidden = false 14 | padding = 16 15 | horizontal_padding = 16 16 | text_icon_padding = 16 17 | frame_width = 2 18 | gap_size = 0 19 | separator_color = "frame" 20 | sort = "yes" 21 | layer = "top" 22 | font = "Albert Sans 16" 23 | line_height = 2 24 | markup = "full" 25 | format = "⽱ %s %a\n%b" 26 | fullscreen = "pushback" 27 | alignment = "left" 28 | vertical_alignment = "center" 29 | show_age_threshold = 60 30 | word_wrap = false 31 | ellipsize = "middle" 32 | ignore_newline = "no" 33 | stack_duplicates = true 34 | hide_duplicate_count = false 35 | show_indicators = false 36 | enable_recursive_icon_lookup = true 37 | icon_position = "left" 38 | min_icon_size = 64 39 | max_icon_size = 64 40 | icon_theme = "Nordzy" 41 | icon_path = "/usr/share/icons/Nordzy/" 42 | sticky_history = "yes" 43 | history_length = 20 44 | dmenu = "/usr/bin/bmenu -p dunst:" 45 | browser = "/usr/bin/xdg-open" 46 | always_run_script = true 47 | script = "/usr/bin/alert" 48 | title = "Dunst" 49 | class = "Dunst" 50 | corner_radius = 16 51 | ignore_dbusclose = false 52 | force_xwayland = false 53 | force_xinerama = false 54 | mouse_left_click = "close_current" 55 | mouse_middle_click = "do_action" 56 | mouse_right_click = "close_all" 57 | 58 | [urgency_low] 59 | background = "#25284180" 60 | foreground = "#7492ef" 61 | frame_color = "#4a6be380" 62 | timeout = 4 63 | 64 | [urgency_normal] 65 | background = "#49353130" 66 | foreground = "#f2a170" 67 | frame_color = "#ea834b" 68 | timeout = 8 69 | 70 | [urgency_critical] 71 | background = "#82414120" 72 | foreground = "#f7768e" 73 | frame_color = "#f34658" 74 | script = "/usr/bin/alert critical" 75 | timeout = 0 76 | -------------------------------------------------------------------------------- /config/eww/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | package-lock.json 3 | package.json 4 | -------------------------------------------------------------------------------- /config/eww/.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["stylelint-config-standard-scss"], 3 | "rules": { 4 | "selector-type-no-unknown": [ 5 | true, 6 | { 7 | "ignoreTypes": [ 8 | "window", 9 | "tooltip" 10 | ] 11 | } 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /config/eww/art/nosvagor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/config/eww/art/nosvagor.png -------------------------------------------------------------------------------- /config/eww/art/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/config/eww/art/player.png -------------------------------------------------------------------------------- /config/eww/art/ws-icons/dna-active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 47 | 48 | 51 | 53 | 57 | 58 | 59 | 61 | 62 | 64 | 65 | 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/dna-empty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 47 | 48 | 51 | 53 | 57 | 58 | 59 | 61 | 62 | 64 | 65 | 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/dna-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 47 | 48 | 51 | 53 | 57 | 58 | 59 | 61 | 62 | 64 | 65 | 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/dna.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 47 | 48 | 51 | 53 | 57 | 58 | 59 | 61 | 62 | 64 | 65 | 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/dotfiles-active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 50 | 54 | 55 | 56 | 58 | 59 | 61 | 62 | 64 | 65 | 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/dotfiles-empty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 50 | 54 | 55 | 56 | 58 | 59 | 61 | 62 | 64 | 65 | 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/dotfiles-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 50 | 54 | 55 | 56 | 58 | 59 | 61 | 62 | 64 | 65 | 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/dotfiles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 50 | 54 | 55 | 56 | 58 | 59 | 61 | 62 | 64 | 65 | 67 | 68 | 70 | 71 | 73 | 74 | 76 | 77 | 79 | 80 | 82 | 83 | 85 | 86 | 88 | 89 | 91 | 92 | 94 | 95 | 97 | 98 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/learn-active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 38 | 39 | 41 | 42 | 44 | 45 | 47 | 48 | 50 | 51 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 89 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/learn-empty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 38 | 39 | 41 | 42 | 44 | 45 | 47 | 48 | 50 | 51 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 89 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/learn-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 38 | 39 | 41 | 42 | 44 | 45 | 47 | 48 | 50 | 51 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 89 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/learn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 38 | 39 | 41 | 42 | 44 | 45 | 47 | 48 | 50 | 51 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 89 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/music-active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 52 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 86 | 87 | 89 | 90 | 92 | 93 | 95 | 96 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/music-empty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 52 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 86 | 87 | 89 | 90 | 92 | 93 | 95 | 96 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/music-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 52 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 86 | 87 | 89 | 90 | 92 | 93 | 95 | 96 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/music.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 40 | 42 | 46 | 52 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 86 | 87 | 89 | 90 | 92 | 93 | 95 | 96 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/network-active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 38 | 42 | 44 | 45 | 47 | 48 | 50 | 51 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/network-empty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 38 | 42 | 44 | 45 | 47 | 48 | 50 | 51 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/network-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 38 | 42 | 44 | 45 | 47 | 48 | 50 | 51 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /config/eww/art/ws-icons/network.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 38 | 42 | 44 | 45 | 47 | 48 | 50 | 51 | 53 | 54 | 56 | 57 | 59 | 60 | 62 | 63 | 65 | 66 | 68 | 69 | 71 | 72 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /config/eww/art/yuki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/config/eww/art/yuki.png -------------------------------------------------------------------------------- /config/eww/bin/brightness: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | inprog=$(ps -ef | rg adjust | rg -v rg | wc -l) 4 | if [[ "$inprog" -gt 2 ]]; then 5 | exit 1 6 | fi 7 | 8 | reset () { 9 | echo "10" > "/tmp/eww/brightness" 10 | pkill wlr-brightness 11 | wlr-brightness & disown 12 | notify-send -h int:value:100 "normal brightness (100%)" -u low -t 1000 -i display-brightness-full 13 | gdbus call -e -d de.mherzberg -o /de/mherzberg/wlrbrightness -m de.mherzberg.wlrbrightness.set 1 14 | } 15 | 16 | night () { 17 | echo "4" >> "/tmp/eww/brightness" 18 | dunstify -h int:value:40 "low brightness (40%)" -u low -t 1000 -i display-brightness-low -a "wlr-brightness" 19 | gdbus call -e -d de.mherzberg -o /de/mherzberg/wlrbrightness -m de.mherzberg.wlrbrightness.set 0.4 20 | } 21 | 22 | adjust () { 23 | br="$2" 24 | if [[ "$br" -ge 2 ]] && [[ "$br" -le 10 ]]; then 25 | if [[ "$1" == "down" ]]; then 26 | if [[ "$br" -gt 2 ]]; then 27 | gdbus call -e -d de.mherzberg -o /de/mherzberg/wlrbrightness -m de.mherzberg.wlrbrightness.decrease 0.1 28 | br=$((br - 1)) 29 | else 30 | reset 31 | br=10 32 | fi 33 | else 34 | if [[ "$br" -lt 10 ]]; then 35 | gdbus call -e -d de.mherzberg -o /de/mherzberg/wlrbrightness -m de.mherzberg.wlrbrightness.increase 0.1 36 | br=$((br + 1)) 37 | fi 38 | fi 39 | echo "$br" >> "/tmp/eww/brightness" 40 | dunstify -h int:value:"$br"0 "brightness ""${br}0%" -u low -t 500 -i display-brightness-medium -a "wlr-brightness" 41 | else 42 | exit 0 43 | fi 44 | } 45 | 46 | "$@" 47 | -------------------------------------------------------------------------------- /config/eww/bin/computer_info: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | path="/sys/class/drm/card0/device" 4 | 5 | gpu_busy=$(<"$path/gpu_busy_percent") 6 | mem_busy=$(<"$path/mem_busy_percent") 7 | 8 | mclk=$(rg "\*" "$path/pp_dpm_mclk" | rg -o "[0-9]{3}") 9 | mclk_level=$(rg "\*" "$path/pp_dpm_mclk" | rg -o "^[0-9]{1}") 10 | 11 | total=$(cat "$path/mem_info_vram_total") 12 | used=$(cat "$path/mem_info_vram_used") 13 | vram=$(bc -l <<< "$used/$total * 100" | awk '{print int($1+0.5)}' ) 14 | 15 | echo "{\ 16 | \"mem_busy\":\"$mem_busy\", \ 17 | \"gpu_busy\":\"$gpu_busy\", \ 18 | \"mclk\":\"$mclk\", \ 19 | \"mclk_level\":\"$mclk_level\", \ 20 | \"vram\":\"$vram\", \ 21 | \"used\":\"$used\" \ 22 | }" 23 | 24 | exit 0 25 | -------------------------------------------------------------------------------- /config/eww/bin/create_temp_files: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | dir=/tmp/eww 4 | rm -rf "$dir" 5 | mkdir "$dir" 6 | 7 | file_names="workspace sink source clockface-minute clockface-hour date_abd weeks_alive" 8 | read -ra names_arr <<< "$file_names" 9 | 10 | for name in "${names_arr[@]}"; do 11 | touch "$dir/$name" 12 | done 13 | 14 | echo "14:00" > "$dir/alarm" 15 | echo "01:30" > "$dir/timer" 16 | echo "10" > "$dir/brightness" 17 | 18 | exit 0 19 | -------------------------------------------------------------------------------- /config/eww/bin/date_info: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | day () { 4 | date +'{"weekday":"%A", "month":"%B", "day":"%d"}' >> "/tmp/eww/date" 5 | } 6 | 7 | week () { 8 | greg_brith="1996-02-26 PST" 9 | weeks_alive=$(( ($(date -d "$greg_brith" +%s) - $(date +%s))/86400/-7 )) 10 | echo "$weeks_alive" >> "/tmp/eww/weeks_alive" 11 | } 12 | 13 | clockface-hour () { 14 | while true; do 15 | hour=$(date "+%I") 16 | 17 | case "$hour" in 18 | 01) res="";; 19 | 02) res="";; 20 | 03) res="";; 21 | 04) res="";; 22 | 05) res="";; 23 | 06) res="";; 24 | 07) res="";; 25 | 08) res="";; 26 | 09) res="";; 27 | 10) res="";; 28 | 11) res="";; 29 | 12) res="";; 30 | *) res="";; 31 | esac 32 | echo "$res" >> "/tmp/eww/clockface-hour" 33 | next_hour=$(date -d "+ 1hour" "+%H:00") 34 | until_next_hour=$(( $(date -d "$next_hour" +%s) - $(date +%s) )) 35 | sleep "$until_next_hour" 36 | done; 37 | } 38 | 39 | clockface-minute () { 40 | while true; do 41 | minute=$(date "+%M / 5" | bc) 42 | minute=${minute%.*} 43 | 44 | case "$minute" in 45 | 1) res="";; 46 | 2) res="";; 47 | 3) res="";; 48 | 4) res="";; 49 | 5) res="";; 50 | 6) res="";; 51 | 7) res="";; 52 | 8) res="";; 53 | 9) res="";; 54 | 10) res="";; 55 | 11) res="";; 56 | 12) res="";; 57 | *) res="";; 58 | esac 59 | echo "$res" >> "/tmp/eww/clockface-minute" 60 | until_next_min=$(( 60 - $(date +%-S) )) 61 | sleep "$until_next_min" 62 | done 63 | } 64 | 65 | day 66 | week 67 | clockface-hour & clockface-minute 68 | -------------------------------------------------------------------------------- /config/eww/bin/music_info: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | player="--player=spotify" 4 | 5 | volume () { 6 | direction="+" 7 | if [[ "$1" == "down" ]]; then 8 | direction="-" 9 | fi 10 | playerctl "$player" volume "$2""$direction" 11 | } 12 | 13 | seek () { 14 | direction="+" 15 | if [[ "$1" == "down" ]]; then 16 | direction="-" 17 | fi 18 | playerctl "$player" position 10"$direction" 19 | } 20 | 21 | progress() { 22 | status=$(playerctl status) 23 | if [[ $status == "Playing" ]] || [[ $status == "Paused" ]]; then 24 | 25 | length=$(playerctl "$player" metadata --format '{{ mpris:length }}' | bc) 26 | position=$(playerctl "$player" metadata --format '{{ position }}' | bc) 27 | progress=$(echo "scale=3; $position / $length * 100 + 0.1" | bc) 28 | 29 | artUrl=$(playerctl "$player" metadata --format '{{ mpris:artUrl }}') 30 | tempfile="/tmp/eww/album_art.png" 31 | wget --output-document="$tempfile" "$artUrl" 32 | eww update album-art-path="$tempfile" 33 | 34 | echo "$progress" 35 | else 36 | echo "0" 37 | fi 38 | } 39 | 40 | check_status () { 41 | status=$(playerctl status) 42 | while ! [[ $status == "Playing" ]]; do 43 | echo "{\ 44 | \"status\":\"Paused\",\ 45 | \"volume\":\"0\",\ 46 | \"artist\":\"Spotify\",\ 47 | \"album\":\"Waiting for player to start...\",\ 48 | \"title\":\"Waiting for player to start...\"\ 49 | }" > '/tmp/eww/music.json' 50 | sleep 1 51 | status=$(playerctl status) 52 | done 53 | } 54 | 55 | get_json () { 56 | while true; do 57 | check_status 58 | playerctl -F "$player" metadata -f "{\ 59 | \"status\":\"{{ status }}\",\ 60 | \"volume\":\"{{ volume }}\",\ 61 | \"artist\":\"{{ artist }}\",\ 62 | \"album\":\"{{ album }}\",\ 63 | \"title\":\"{{ title }}\"\ 64 | }" > '/tmp/eww/music.json' 65 | sleep 1 66 | notify-send "playerctl died, restarting" 67 | done 68 | } 69 | 70 | "$@" 71 | -------------------------------------------------------------------------------- /config/eww/bin/ping: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | res="$(ping -c 3 "google.com" | rg -oP 'rtt min/avg/max/mdev = \K[\d.]+(?=/)' | awk '{print int($1+0.5)}')" 4 | 5 | echo "$res" 6 | -------------------------------------------------------------------------------- /config/eww/bin/pulse_info: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | inprog=$(ps -ef | rg change_volume | rg -v rg | wc -l) 4 | if [[ "$inprog" -gt 2 ]]; then 5 | exit 1 6 | fi 7 | 8 | get_id () { 9 | id=$(pulsemixer --list-"$1" \ 10 | | grep "Default" \ 11 | | gawk "{print \$1}" FPAT="[0-9]+") 12 | echo "$id" 13 | } 14 | 15 | get_name () { 16 | device_name=$(pulsemixer --list-"$1" \ 17 | | grep "Default" \ 18 | | grep -oP "Name:\s+\K.[A-Za-z0-9-]+" 19 | ) 20 | 21 | if [[ $device_name == "cullyn" ]]; then 22 | device_name="pixel buds" 23 | fi 24 | 25 | echo "$device_name" 26 | } 27 | 28 | get_volume () { 29 | id=$(get_id "$1") 30 | volume=$(pulsemixer --get-volume --id "$1-$id" \ 31 | | gawk "{print \$1}" FPAT="[0-9]+") 32 | echo "$volume" 33 | } 34 | 35 | set_default () { 36 | sink_val=69 37 | source_val=150 38 | source_id="$(get_id "source")" 39 | sink_id="$(get_id "sink")" 40 | 41 | if [[ "$1" == "sink" ]] || [[ "$1" == "both" ]]; then 42 | pulsemixer --id "sink-$sink_id" --set-volume "$sink_val" 43 | echo "$sink_val" >> "/tmp/eww/sink" 44 | fi 45 | 46 | if [[ "$1" == "source" ]] || [[ "$1" == "both" ]]; then 47 | pulsemixer --id "source-$source_id" --set-volume "$source_val" 48 | echo "$source_val - 20" | bc >> "/tmp/eww/source" 49 | fi 50 | exit 0 51 | } 52 | 53 | mute () { 54 | id=$(get_id "$1") 55 | pulsemixer --id "$1-$id" --set-volume 0 56 | echo "0" >> "/tmp/eww/$1" 57 | } 58 | 59 | change_volume () { 60 | incremment="10" 61 | sink_offset="50" 62 | current_volume=$(get_volume "$1") 63 | 64 | direction="+" 65 | if [[ "$2" == "down" ]]; then 66 | direction="-" 67 | fi 68 | 69 | id="$(get_id "$1")" 70 | 71 | max="100" 72 | 73 | if [[ "$1" == "source" ]]; then 74 | max="150" 75 | fi 76 | 77 | if [[ "$1" == "source" && current_volume -le $sink_offset ]]; then 78 | pulsemixer --id "$1-$id" --set-volume "20" 79 | current_volume=$sink_offset 80 | fi 81 | 82 | if [[ current_volume -ge $max ]] && [[ $direction == "+" ]]; then 83 | pulsemixer --id "$1-$id" --set-volume "$max" 84 | else 85 | pulsemixer --id "$1-$id" --change-volume "$direction$incremment" 86 | fi 87 | 88 | current_volume=$(get_volume "$1") 89 | 90 | if [[ "$1" == "source" && current_volume -le $sink_offset ]]; then 91 | pulsemixer --id "$1-$id" --set-volume "0" 92 | fi 93 | 94 | if [[ "$1" == "source" ]]; then 95 | ((current_volume-=sink_offset)) 96 | fi 97 | 98 | echo "$current_volume" >> "/tmp/eww/$1" 99 | } 100 | 101 | "$@" 102 | -------------------------------------------------------------------------------- /config/eww/bin/workspaces: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | handle() { 4 | if [[ "$1" == "workspace" ]]; then 5 | echo "$2" >> "/tmp/eww/workspace" 6 | fi 7 | } 8 | 9 | 10 | occupied () { 11 | mapfile -t occupied_ws < <( hyprctl workspaces | rg -oP "(?<=ID\s)\d" ) 12 | echo "${occupied_ws[@]}" >> "/tmp/eww/occupied" 13 | } 14 | 15 | 16 | if [[ -n "$1" ]]; then 17 | "$@" 18 | else 19 | socat - UNIX-CONNECT:/"$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock \ 20 | | while read -r line; do 21 | line=${line/>>/ } 22 | read -ra hyprland_event <<< "$line" 23 | handle "${hyprland_event[@]}" 24 | occupied 25 | done 26 | fi 27 | -------------------------------------------------------------------------------- /config/fontconfig/fonts.conf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | sans-serif 6 | 7 | Albert Sans 8 | Symbols Nerd Font 9 | Noto Color Emoji 10 | 11 | 12 | 13 | serif 14 | 15 | Lora 16 | Symbols Nerd Font 17 | Noto Color Emoji 18 | 19 | 20 | 21 | monospace 22 | 23 | Fira Code 24 | Symbols Nerd Font 25 | Noto Color Emoji 26 | 27 | 28 | 29 | display 30 | 31 | Archivo 32 | Symbols Nerd Font 33 | Noto Color Emoji 34 | 35 | 36 | 37 | handwritten 38 | 39 | Architects Daughter 40 | Symbols Nerd Font 41 | Noto Color Emoji 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /config/git/config: -------------------------------------------------------------------------------- 1 | [user] 2 | name = cullyn 3 | email = cullyn@nosvagor.com 4 | signingkey = /home/cullyn/.ssh/id_ed25519.pub 5 | [core] 6 | editor = nvim 7 | [gpg] 8 | format = ssh 9 | [commit] 10 | gpgsign = true 11 | [pull] 12 | rebase = true 13 | [init] 14 | defaultBranch = master 15 | [url "git@git.linecode.net:"] 16 | insteadOf = https://git.linecode.net/ 17 | -------------------------------------------------------------------------------- /config/glava/bars: -------------------------------------------------------------------------------- 1 | /etc/xdg/glava//bars -------------------------------------------------------------------------------- /config/glava/bars.glsl: -------------------------------------------------------------------------------- 1 | /* Center line thickness (pixels) */ 2 | #define C_LINE 1 3 | /* Width (in pixels) of each bar */ 4 | #define BAR_WIDTH 4 5 | /* Width (in pixels) of each bar gap */ 6 | #define BAR_GAP 2 7 | /* Outline color */ 8 | #define BAR_OUTLINE #262626 9 | /* Outline width (in pixels, set to 0 to disable outline drawing) */ 10 | #define BAR_OUTLINE_WIDTH 0 11 | /* Amplify magnitude of the results each bar displays */ 12 | #define AMPLIFY 256 13 | /* Whether the current settings use the alpha channel; 14 | enabling this is required for alpha to function 15 | correctly on X11 with `"native"` transparency. */ 16 | #define USE_ALPHA 0 17 | /* How strong the gradient changes */ 18 | #define GRADIENT_POWER 69 19 | /* Bar color changes with height */ 20 | #define GRADIENT (d / GRADIENT_POWER + 0.69) 21 | /* Bar color */ 22 | #define COLOR (#6380ec * GRADIENT) 23 | /* Direction that the bars are facing, 0 for inward, 1 for outward */ 24 | #define DIRECTION 0 25 | /* Whether to switch left/right audio buffers */ 26 | #define INVERT 0 27 | /* Whether to flip the output vertically */ 28 | #define FLIP 0 29 | /* Whether to mirror output along `Y = X`, causing output to render on the left side of the window */ 30 | /* Use with `FLIP 1` to render on the right side */ 31 | #define MIRROR_YX 0 32 | -------------------------------------------------------------------------------- /config/glava/radial: -------------------------------------------------------------------------------- 1 | /etc/xdg/glava//radial -------------------------------------------------------------------------------- /config/glava/radial.glsl: -------------------------------------------------------------------------------- 1 | /* center radius (pixels) */ 2 | #define C_RADIUS 100 3 | /* center line thickness (pixels) */ 4 | #define C_LINE 2 5 | /* outline color */ 6 | #define OUTLINE #6380ec 7 | /* number of bars (use even values for best results) */ 8 | #define NBARS 180 9 | /* width (in pixels) of each bar*/ 10 | #define BAR_WIDTH 3.5 11 | /* outline color */ 12 | #define BAR_OUTLINE OUTLINE 13 | /* outline width (in pixels, set to 0 to disable outline drawing) */ 14 | #define BAR_OUTLINE_WIDTH 0 15 | /* Amplify magnitude of the results each bar displays */ 16 | #define AMPLIFY 512 17 | /* Bar color */ 18 | #define COLOR (#6380ec * ((d / 180) + 0.69)) 19 | /* Angle (in radians) for how much to rotate the visualizer */ 20 | #define ROTATE (PI / 2) 21 | /* Whether to switch left/right audio buffers */ 22 | #define INVERT 0 23 | /* Aliasing factors. Higher values mean more defined and jagged lines. 24 | Note: aliasing does not have a notable impact on performance, but requires 25 | `xroot` transparency to be enabled since it relies on alpha blending with 26 | the background. */ 27 | #define BAR_ALIAS_FACTOR 1.2 28 | #define C_ALIAS_FACTOR 1.8 29 | /* Offset (Y) of the visualization */ 30 | #define CENTER_OFFSET_Y 0 31 | /* Offset (X) of the visualization */ 32 | #define CENTER_OFFSET_X 0 33 | 34 | /* Gravity step, override from `smooth_parameters.glsl` */ 35 | #request setgravitystep 11.0 36 | 37 | /* Smoothing factor, override from `smooth_parameters.glsl` */ 38 | #request setsmoothfactor 0.027 39 | -------------------------------------------------------------------------------- /config/glava/smooth_parameters.glsl: -------------------------------------------------------------------------------- 1 | /* Settings for smoothing functions and transformations commonly 2 | used to display FFT output. 3 | 4 | IMPORTANT: THESE VALUES CAN BE OVERRIDDEN IN MODULE CONFIG 5 | FILES, IF CHANGING VALUES HERE DOES NOT WORK, CHECK 6 | TO MAKE SURE THEY ARE NOT BEING SET ELSEWHERE. 7 | */ 8 | 9 | /* The type of formula to use for weighting values when smoothing. 10 | Possible values: 11 | 12 | - circular heavily rounded points 13 | - sinusoidal rounded at both low and high weighted values 14 | like a sine wave 15 | - linear not rounded at all; linear distance 16 | */ 17 | #define ROUND_FORMULA sinusoidal 18 | 19 | /* The sampling mode for processing raw FFT input: 20 | 21 | - average averages all the inputs in the sample range for 22 | a given point. Produces smooth output, but peaks 23 | are not well represented 24 | - maximum obtains the best value from the closest peak in 25 | the sample range. Very accurate peaks, but 26 | output is jagged and sporadic. 27 | - hybrid uses the results from both `average` and `maximum` 28 | with the weight provided in `SAMPLE_HYBRID_WEIGHT` */ 29 | #define SAMPLE_MODE average 30 | /* Weight should be provided in the range (0, 1). Higher values favour 31 | averaged results. `hybrid` mode only. */ 32 | #define SAMPLE_HYBRID_WEIGHT 0.65 33 | 34 | /* Factor used to scale frequencies. Lower values allows lower 35 | frequencies to occupy more space. */ 36 | #define SAMPLE_SCALE 8 37 | 38 | /* The frequency range to sample. 1.0 would be the entire FFT output, 39 | and lower values reduce the displayed frequencies in a log-like 40 | scale. */ 41 | #define SAMPLE_RANGE 0.9 42 | 43 | /* Factor for how to scale higher frequencies. Used in a linear equation 44 | which is multiplied by the result of the fft transformation. */ 45 | #request setfftscale 10.2 46 | 47 | /* Cutoff for the bass end of the audio data when scaling frequencies. 48 | Higher values cause more of the bass frequencies to be skipped when 49 | scaling. */ 50 | #request setfftcutoff 0.3 51 | 52 | /* How many frames to queue and run through the average function. 53 | Increasing this value will create latency between the audio and the 54 | animation, but will make for much smoother results. */ 55 | #request setavgframes 6 56 | 57 | /* Whether to window frames ran through the average function (new & old 58 | frames are weighted less). This massively helps smoothing out 59 | spontaneous values in the animation. */ 60 | #request setavgwindow true 61 | 62 | /* Gravity step, higher values means faster drops. The step is applied 63 | in a rate independent method like so: 64 | 65 | val -= (gravitystep) * (seconds per update) */ 66 | #request setgravitystep 7 67 | 68 | /* Smoothing factor. Larger values mean more smoothing in the output, 69 | however high values can be expensive to compute. Values are in 70 | normalized width: [0.0, 1.0) */ 71 | 72 | #request setsmoothfactor 0.027 73 | 74 | /* Whether to use a separate pass for audio data while smoothing. On 75 | most hardware, this will improve performance, but involves doing a 76 | separate render step for each audio texture and will add some driver 77 | (CPU) overhead. */ 78 | #request setsmoothpass true 79 | -------------------------------------------------------------------------------- /config/glava/util: -------------------------------------------------------------------------------- 1 | /etc/xdg/glava//util -------------------------------------------------------------------------------- /config/gtk-3.0/bookmarks: -------------------------------------------------------------------------------- 1 | file:///home/cullyn/LeadPier 2 | file:///home/cullyn/acr 3 | file:///home/cullyn/cullyn.dev 4 | file:///home/cullyn/nosvagor.com 5 | file:///home/cullyn/wangare 6 | file:///home/cullyn/vagari 7 | file:///home/cullyn/media/screenshots 8 | file:///home/cullyn/media/recordings 9 | file:///home/cullyn/dotfiles 10 | file:///home/cullyn/dotfiles/resources 11 | file:///home/cullyn/LeadPier/services/voice 12 | file:///home/cullyn/LeadPier/staging-backend 13 | -------------------------------------------------------------------------------- /config/gtk-3.0/settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-theme-name=catppuccin-macchiato-peach-standard+default 3 | gtk-icon-theme-name=Nordzy-dark 4 | gtk-font-name=Albert Sans 12 5 | gtk-cursor-theme-name=Nordzy-cursors-white 6 | -------------------------------------------------------------------------------- /config/gtk-4.0/bookmarks: -------------------------------------------------------------------------------- 1 | /home/cullyn/dotfiles/config/gtk-3.0/bookmarks -------------------------------------------------------------------------------- /config/gtk-4.0/settings.ini: -------------------------------------------------------------------------------- 1 | /home/cullyn/dotfiles/config/gtk-3.0/settings.ini -------------------------------------------------------------------------------- /config/guvcview2/video0: -------------------------------------------------------------------------------- 1 | #Guvcview 2.2.1 config file 2 | 3 | #video input width 4 | width=1920 5 | #video input height 6 | height=1080 7 | #video input format 8 | v4l2_format=1196444237 9 | #video input capture method 10 | capture=mmap 11 | #audio api 12 | audio=none 13 | #gui api 14 | gui=none 15 | #render api 16 | render=sdl 17 | #render window width 18 | render_width=800 19 | #render window height 20 | render_height=600 21 | #video codec [raw mjpg mpeg flv1 wmv1 mpg2 mp43 dx50 h264 vp80 theo] 22 | video_codec=dx50 23 | #audio codec [pcm mp2 mp3 aac ac3 vorb] 24 | audio_codec=mp2 25 | #profile name 26 | profile_name=default.gpfl 27 | #profile path 28 | profile_path=/home/cullyn 29 | #video name 30 | video_name=my_video.mkv 31 | #video path 32 | video_path=/home/cullyn/media/recordings 33 | #video sufix flag 34 | video_sufix=1 35 | #photo name 36 | photo_name=my_p.jpg 37 | #photo path 38 | photo_path=/home/cullyn 39 | #photo sufix flag 40 | photo_sufix=1 41 | #fps numerator (def. 1) 42 | fps_num=1 43 | #fps denominator (def. 25) 44 | fps_denom=30 45 | #audio device index (-1 - api default) 46 | audio_device=0 47 | #video fx mask 48 | video_fx=0x1 49 | #fx binary filter treshold (0x0 to 0xff): default=0x7f (50%) 50 | fx_bin_treshold=0x7f 51 | #audio fx mask 52 | audio_fx=0x0 53 | #OSD mask 54 | osd_mask=0x0 55 | crosshair_color=0xff00 56 | crosshair_size=24 57 | -------------------------------------------------------------------------------- /config/inkscape/.gitignore: -------------------------------------------------------------------------------- 1 | cphistory.xml 2 | dialogs-state-ex.ini 3 | extension-errors.log 4 | pages.csv 5 | -------------------------------------------------------------------------------- /config/inkscape/fontcollections/recently_used_fonts.log: -------------------------------------------------------------------------------- 1 | Archivo 2 | Architects Daughter 3 | sans-serif 4 | -------------------------------------------------------------------------------- /config/inkscape/palettes/vagari.gpl: -------------------------------------------------------------------------------- 1 | GIMP Palette 2 | Name: --- vagari --- 3 | # 4 | 44 44 46 #2C2C2E - visual divider hack 5 | 215 219 238 #d7dbee - br1 6 | 197 201 226 #c5c9e2 - br 7 | 182 187 216 #b6bbd8 - fg 8 | 167 171 206 #a7abce - fg1 9 | 140 146 186 #8c92ba - fg2 10 | 44 44 46 #2C2C2E - visual divider hack 11 | 34 37 54 #222536 - bg 12 | 024 026 042 #181a2a - bg1 13 | 014 016 027 #0e101b - bg2 14 | 008 008 013 #08080d - bg3 15 | 44 44 46 #2C2C2E - visual divider hack 16 | 026 026 036 #1a1a24 - dr1 17 | 016 016 020 #101014 - dr1 18 | 009 009 011 #09090b - dr2 19 | 44 44 46 #2C2C2E - visual divider hack 20 | 255 153 177 #ff99b1 - red1 21 | 237 095 111 #ed5f6f - red 22 | 208 037 058 #d0253a - red0 23 | 44 44 46 #2C2C2E - visual divider hack 24 | 255 158 122 #ff9e7a - orn1 25 | 236 144 085 #ec9055 - ornange 26 | 213 092 030 #d55c1e - orn0 27 | 44 44 46 #2C2C2E - visual divider hack 28 | 255 241 158 #fff19e - yel1 29 | 236 196 093 #ecc45d - yellow 30 | 215 156 004 #d79c04 - yel0 31 | 44 44 46 #2C2C2E - visual divider hack 32 | 183 230 163 #b7e6a3 - grn1 33 | 134 185 111 #86b96f - green 34 | 094 146 073 #5e9249 - grn0 35 | 44 44 46 #2C2C2E - visual divider hack 36 | 158 234 171 #9eeaab - ivy1 37 | 101 190 117 #65be75 - ivy 38 | 064 150 078 #40964e - ivy0 39 | 44 44 46 #2C2C2E - visual divider hack 40 | 168 255 249 #a8fff9 - cyn1 41 | 074 222 205 #4adecd - cyan 42 | 002 187 165 #02bba5 - cyn0 43 | 44 44 46 #2C2C2E - visual divider hack 44 | 158 219 255 #9edbff - azr1 45 | 089 181 229 #59b5e5 - azure 46 | 042 135 199 #2a87c7 - azr0 47 | 44 44 46 #2C2C2E - visual divider hack 48 | 162 180 250 #a2b4fa - blu1 49 | 108 136 244 #6c88f4 - blue 50 | 061 096 230 #3d60e6 - blu0 51 | 44 44 46 #2C2C2E - visual divider hack 52 | 194 170 252 #c2aafc - prp1 53 | 157 122 240 #9d7af0 - purple 54 | 143 064 227 #8f40e3 - puprle0 55 | 44 44 46 #2C2C2E - visual divider hack 56 | 255 148 212 #ff94d4 - pnk1 57 | 220 096 191 #dc60bf - pink 58 | 183 052 159 #b7349f - pnk0 59 | 44 44 46 #2C2C2E - visual divider hack 60 | 207 149 144 #cf9590 - leu1 61 | 174 097 095 #ae615f - leu 62 | 136 063 065 #883f41 - leu0 63 | 44 44 46 #2C2C2E - visual divider hack 64 | 194 207 144 #c2cf90 -met1 65 | 155 171 087 #9bab57 - met 66 | 112 125 058 #707d3a - met0 67 | 44 44 46 #2C2C2E - visual divider hack 68 | 157 212 194 #9dd4c2 - val1 69 | 092 179 151 #5cb397 - val 70 | 068 130 110 #44826e - val0 71 | 44 44 46 #2C2C2E - visual divider hack 72 | 139 165 203 #8ba5cb - his1 73 | 086 120 172 #5678ac - his 74 | 0062 85 132 #3e5584 - his0 75 | 44 44 46 #2C2C2E - visual divider hack 76 | 194 147 205 #c293cd - trp1 77 | 158 094 176 #9e5eb0 - trp 78 | 117 064 135 #754087 - trp0 79 | 44 44 46 #2C2C2E - visual divider hack 80 | 100 108 160 #646ca0 - slt0 81 | 089 096 145 #596091 - slate 82 | 081 088 133 #515885 - slt1 83 | 076 082 123 #4c527b - slt2 84 | 068 074 111 #444a6f - slt3 85 | 060 065 098 #3c4162 - slt4 86 | 44 44 46 #2C2C2E - visual divider hack 87 | 143 101 087 #8f6557 - rst0 88 | 126 090 078 #7e5a4e - rust 89 | 117 084 072 #755448 - rst1 90 | 108 077 066 #6c4d42 - rst2 91 | 098 070 060 #62463c - rst3 92 | 085 060 052 #553c34 - rst4 93 | 44 44 46 #2C2C2E - visual divider hack 94 | 105 109 134 #696d86 - gry0 95 | 094 097 120 #5e6178 - grey 96 | 088 091 111 #585b6f - gry1 97 | 081 084 103 #515467 - gry2 98 | 072 075 091 #484b5b - gry3 99 | 063 065 080 #3f4150 - gry4 100 | 44 44 46 #2C2C2E - visual divider hack 101 | 129 102 129 #816681 - plm0 102 | 114 090 114 #725a72 - plum 103 | 106 083 106 #6a536a - plm1 104 | 097 076 097 #614c61 - plm2 105 | 089 070 089 #594659 - plm3 106 | 077 061 077 #4d3d4d - plm4 107 | 44 44 46 #2C2C2E - visual divider hack 108 | 106 113 106 #6a716a - olv0 109 | 094 100 094 #5e645e - olive 110 | 086 092 086 #565c56 - olv1 111 | 079 084 079 #4f544f - olv2 112 | 072 076 072 #484c48 - olv3 113 | 062 066 062 #3e423e - olv4 114 | -------------------------------------------------------------------------------- /config/inkscape/templates/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 30 | 32 | 36 | 37 | default 38 | 2023-04-12 39 | 40 | 41 | -------------------------------------------------------------------------------- /config/kitty/sessions/LeadPier.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜ 󰖷 ⊸ 2 | cd ~/LeadPier 3 | # launch zsh -c "trap 'echo \"Air stopped. Press Enter to exit.\"; read' INT; air -c ./.config/air.toml; zsh" 4 | launch zsh 5 | # launch --location=hsplit zsh -c "make tw; zsh" 6 | 7 | new_tab ⟜  ⊸ 8 | cd ~/LeadPier 9 | launch zsh 10 | -------------------------------------------------------------------------------- /config/kitty/sessions/acr.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜ 󰖷 ⊸ 2 | cd ~/acr/ 3 | launch zsh -c "trap 'echo \"Air stopped. Press Enter to exit.\"; read' INT; air -c ./config/air.toml; zsh" 4 | launch --location=hsplit zsh -c "make tw; zsh" 5 | 6 | new_tab ⟜  ⊸ 7 | cd ~/acr/ 8 | launch zsh 9 | -------------------------------------------------------------------------------- /config/kitty/sessions/cogikyo.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/cogikyo/diatomi 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/cogikyo/diatomi 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/cogikyo/diatomi 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/cullyn.dev.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/cullyn.dev/ 3 | launch zsh -c "source ~/.zshrc && nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/cullyn.dev/ 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/cullyn.dev/ 11 | launch zsh -c "source ~/.zshrc && xplr; zsh" 12 | 13 | new_tab ⟜ 󰖷 ⊸ 14 | cd ~/cullyn.dev/ 15 | launch zsh -c "trap 'echo \"Air stopped. Press Enter to exit.\"; read' INT; air -c ./config/air.toml; zsh" 16 | -------------------------------------------------------------------------------- /config/kitty/sessions/dabella.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/dabella/ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/dabella/ 7 | launch zsh -c "nvim config.ini; zsh" 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/dabella/archive/ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/dotfiles.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/dotfiles/ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/dotfiles/ 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/dotfiles/ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/eww.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/dotfiles/config/eww/ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/dotfiles/config/eww/ 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/dotfiles/config/eww/ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/firefox.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/vagari.firefox/ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/vagari.firefox/ 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/vagari.firefox/ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/home.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~ 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/nectar.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/nectar/ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/nectar/ 7 | launch zsh -c "nvim; zsh" 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/nectar/ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/nosvagor.com.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜ 󰖷 ⊸ 2 | cd ~/nosvagor.com/ 3 | launch zsh -c "trap 'echo \"Air stopped. Press Enter to exit.\"; read' INT; air -c ./.config/air.toml; zsh" 4 | launch --location=hsplit zsh -c "make tw; zsh" 5 | 6 | new_tab ⟜  ⊸ 7 | cd ~/nosvagor.com/ 8 | launch zsh 9 | -------------------------------------------------------------------------------- /config/kitty/sessions/nvim.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~ 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/pipes.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | launch zsh -c 'pipes-rs; zsh' 3 | -------------------------------------------------------------------------------- /config/kitty/sessions/rust-run.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/rust/kata/ 3 | launch zsh -c "cargo watch -x 'test kyu7'" 4 | -------------------------------------------------------------------------------- /config/kitty/sessions/rust.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/rust/kata/src/kyu7 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/rust/kata/src 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/rust/kata/src 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/sapais.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/saipias/ 3 | launch zsh -c "source ~/.zshrc && nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/saipias/ 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/saipias/ 11 | launch zsh -c "source ~/.zshrc && xplr; zsh" 12 | 13 | new_tab ⟜ 󰖷 ⊸ 14 | cd ~/saipias/ 15 | launch zsh -c "trap 'echo \"Air stopped. Press Enter to exit.\"; read' INT; air -c ./config/air.toml; zsh" 16 | -------------------------------------------------------------------------------- /config/kitty/sessions/sonder.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/sonder/ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/sonder/ 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/sonder/ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/term.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | # cd ~/nosvagor.com/ 3 | # cd ~/acr/ 4 | launch zsh 5 | -------------------------------------------------------------------------------- /config/kitty/sessions/vagari.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/vagari/ 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/vagari.nvim/ 7 | launch zsh -c "nvim; zsh" 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/vagari/ 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/kitty/sessions/voice.conf: -------------------------------------------------------------------------------- 1 | new_tab ⟜  ⊸ 2 | cd ~/voice 3 | launch zsh -c "nvim; zsh" 4 | 5 | new_tab ⟜  ⊸ 6 | cd ~/voice 7 | launch zsh 8 | 9 | new_tab ⟜ 󰭎 ⊸ 10 | cd ~/voice 11 | launch zsh -c "xplr; zsh" 12 | -------------------------------------------------------------------------------- /config/lazygit/.gitignore: -------------------------------------------------------------------------------- 1 | state.yml 2 | -------------------------------------------------------------------------------- /config/manim/manim.cfg: -------------------------------------------------------------------------------- 1 | [CLI] 2 | background_color = #1e2133 3 | output_file = manim 4 | quality = m 5 | -------------------------------------------------------------------------------- /config/mimeapps.list: -------------------------------------------------------------------------------- 1 | [Default Applications] 2 | x-scheme-handler/http=firefoxdeveloperedition.desktop 3 | x-scheme-handler/https=firefoxdeveloperedition.desktop 4 | x-scheme-handler/chrome=firefoxdeveloperedition.desktop 5 | x-scheme-handler/ftp=firefoxdeveloperedition.desktop; 6 | application/x-extension-htm=firefoxdeveloperedition.desktop 7 | application/x-extension-html=firefoxdeveloperedition.desktop 8 | application/x-extension-shtml=firefoxdeveloperedition.desktop 9 | application/xhtml+xml=firefoxdeveloperedition.desktop 10 | application/x-extension-xhtml=firefoxdeveloperedition.desktop 11 | application/x-extension-xht=firefoxdeveloperedition.desktop 12 | application/pdf=org.pwmt.zathura.desktop; 13 | application/json=nvim.desktop 14 | video/x-matroska=mpv.desktop; 15 | video/mp4=mpv.desktop; 16 | image/gif=gifview.desktop 17 | image/png=imv.desktop; 18 | image/svg+xml=imv.desktop; 19 | image/svg=imv.desktop; 20 | image/jpeg=imv.desktop; 21 | text/plain=nvim.desktop 22 | text/html=nvim.desktop; 23 | text/xml=nvim.desktop; 24 | -------------------------------------------------------------------------------- /config/mpv/mpv.conf: -------------------------------------------------------------------------------- 1 | # loop-playlist=inf 2 | # loop-file=inf 3 | -------------------------------------------------------------------------------- /config/nvim/.gitignore: -------------------------------------------------------------------------------- 1 | lazy-lock.json 2 | -------------------------------------------------------------------------------- /config/nvim/lua/user/alpha.lua: -------------------------------------------------------------------------------- 1 | -- ============================================================================ 2 | -- 🧰 Setup {{{ 3 | local ok, alpha = pcall(require, "alpha") 4 | if not ok then 5 | vim.api.nvim_echo({ 6 | { 7 | "Error: alpha plugin not found... skipping relevant setup()", 8 | "Error", 9 | }, 10 | }, true, {}) 11 | return 12 | end 13 | -- }}} 14 | -- ============================================================================ 15 | 16 | local dashboard = require("alpha.themes.dashboard") 17 | local header = { 18 | type = "text", 19 | val = { 20 | [[ __ ]], 21 | [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], 22 | [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], 23 | [[ /\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], 24 | [[ \ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\ ]], 25 | [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/ ]], 26 | [[ ]], 27 | [[ _.--'"`'--._ _.--'"`'--._ _.--'"`'--._ ]], 28 | [[ :`.'|`|"':-. '-:`.'|`|"':-. '-:`.'|`|"':-. '- ]], 29 | [[ '. | | | |'. '. | | | |'. '. | | | |'. ]], 30 | [[ . '.| | | | '. '.| | | | '. '.| | | | '. ]], 31 | [[ `. `.:_ | :_.' '. `.:_ | :_.' '. `.:_ | :_.' ]], 32 | [[ `-..,..-' `-..,..-' `-..,..-' ]], 33 | }, 34 | opts = { 35 | hl = "@function.builtin", 36 | shrink_margin = false, 37 | position = "center", 38 | }, 39 | } 40 | 41 | local buttons = { 42 | type = "group", 43 | val = { 44 | { 45 | type = "text", 46 | val = "Quick Actions", 47 | opts = { 48 | hl = "Type", 49 | position = "center", 50 | }, 51 | }, 52 | { type = "padding", val = 2 }, 53 | dashboard.button("o", " Recent Files", ":Telescope oldfiles "), 54 | dashboard.button("t", "󰈞 Find file", ":Telescope find_files "), 55 | dashboard.button("s", "󰭎 Live grep", ":Telescope live_grep "), 56 | { type = "padding", val = 2 }, 57 | dashboard.button("q", "󰗼 Quit", ":qa"), 58 | }, 59 | } 60 | 61 | alpha.setup({ 62 | layout = { 63 | { type = "padding", val = 2 }, 64 | header, 65 | { type = "padding", val = 3 }, 66 | buttons, 67 | }, 68 | opts = { 69 | margin = 5, 70 | }, 71 | }) 72 | -------------------------------------------------------------------------------- /config/nvim/lua/user/autocmds.lua: -------------------------------------------------------------------------------- 1 | local function global_autocmd(event, command) 2 | vim.api.nvim_create_autocmd(event, { 3 | group = vim.api.nvim_create_augroup(event, { clear = true }), 4 | command = command, 5 | pattern = "*", 6 | }) 7 | end 8 | 9 | local function scoped_autocmd(event, group, pattern, command) 10 | vim.api.nvim_create_autocmd(event, { 11 | group = vim.api.nvim_create_augroup(group, { clear = true }), 12 | command = command, 13 | pattern = pattern, 14 | }) 15 | end 16 | 17 | -- 'formatoptions' keeps getting overwritten by other plugins (I think) 18 | global_autocmd("InsertEnter", "silent! set formatoptions=tcqnpj1") 19 | 20 | -- Why is highlighting text yanking not an default feature? 21 | global_autocmd("TextYankPost", "silent! lua vim.highlight.on_yank({ timeout = 69})") 22 | 23 | -- Remove color column 24 | scoped_autocmd("FileType", "NoColorColumn", { "help", "trouble", "Avante", "AvanteInput" }, "silent! setlocal cc=") 25 | 26 | scoped_autocmd("BufWritePost", "EwwRestart", "eww.yuck,eww.scss", ":! eww-open & disown && exit") 27 | 28 | scoped_autocmd("FileType", "Rust", "rust", "silent! set textwidth=80") 29 | 30 | scoped_autocmd( 31 | "BufWritePost", 32 | "DunstRestart", 33 | "dunstrc", 34 | ":! pkill dunst && dunst & notify-send -u low dunst restarted" 35 | ) 36 | -------------------------------------------------------------------------------- /config/nvim/lua/user/autopairs.lua: -------------------------------------------------------------------------------- 1 | -- ============================================================================ 2 | -- 🧰 Setup {{{ 3 | local ok, npairs = pcall(require, "nvim-autopairs") 4 | if not ok then 5 | vim.api.nvim_echo({ 6 | { 7 | "Error: nvim-autopairs plugin not found... skipping relevant setup()", 8 | "Error", 9 | }, 10 | }, true, {}) 11 | return 12 | end 13 | -- }}} 14 | -- ============================================================================ 15 | 16 | npairs.setup({ 17 | enable_check_bracket_line = false, 18 | ignored_next_char = "[%w%.]", -- will ignore alphanumeric and `.` symbol 19 | fast_wrap = { 20 | map = "", 21 | chars = { "{", "[", "(", '"', "'", "`", "<" }, 22 | pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""), 23 | offset = -1, 24 | end_key = "$", 25 | keys = "asetniol", 26 | check_comma = true, 27 | highlight = "Search", 28 | highlight_grey = "Comment", 29 | }, 30 | check_ts = true, 31 | ts_config = { 32 | lua = { "string" }, -- it will not add a pair on that treesitter node 33 | }, 34 | }) 35 | 36 | -- https://github.com/windwp/nvim-autopairs/wiki/Custom-rules 37 | 38 | local cond = require("nvim-autopairs.conds") 39 | local ts_conds = require("nvim-autopairs.ts-conds") 40 | local Rule = require("nvim-autopairs.rule") 41 | 42 | npairs.add_rules({ 43 | Rule("%", "%", "lua"):with_pair(ts_conds.is_ts_node({ "string", "comment" })), 44 | Rule("$", "$", "lua"):with_pair(ts_conds.is_not_ts_node({ "function" })), 45 | }) 46 | 47 | local brackets = { { "(", ")" }, { "[", "]" }, { "{", "}" } } 48 | npairs.add_rules({ 49 | Rule(" ", " ") 50 | :with_pair(function(opts) 51 | local pair = opts.line:sub(opts.col - 1, opts.col) 52 | return vim.tbl_contains({ 53 | brackets[1][1] .. brackets[1][2], 54 | brackets[2][1] .. brackets[2][2], 55 | brackets[3][1] .. brackets[3][2], 56 | }, pair) 57 | end) 58 | :with_move(cond.none()) 59 | :with_cr(cond.none()) 60 | :with_del(function(opts) 61 | local col = vim.api.nvim_win_get_cursor(0)[2] 62 | local context = opts.line:sub(col - 1, col + 2) 63 | return vim.tbl_contains({ 64 | brackets[1][1] .. " " .. brackets[1][2], 65 | brackets[2][1] .. " " .. brackets[2][2], 66 | brackets[3][1] .. " " .. brackets[3][2], 67 | }, context) 68 | end), 69 | }) 70 | 71 | for _, bracket in pairs(brackets) do 72 | Rule("", " " .. bracket[2]) 73 | :with_pair(cond.none()) 74 | :with_move(function(opts) 75 | return opts.char == bracket[2] 76 | end) 77 | :with_cr(cond.none()) 78 | :with_del(cond.none()) 79 | :use_key(bracket[2]) 80 | end 81 | 82 | for _, punct in pairs({ ",", ";" }) do 83 | npairs.add_rules({ 84 | Rule("", punct) 85 | :with_move(function(opts) 86 | return opts.char == punct 87 | end) 88 | :with_pair(function() 89 | return false 90 | end) 91 | :with_del(function() 92 | return false 93 | end) 94 | :with_cr(function() 95 | return false 96 | end) 97 | :use_key(punct), 98 | }) 99 | end 100 | 101 | Rule("%(.*%)%s*%=>$", " { }", { "typescript", "typescriptreact", "javascript" }):use_regex(true):set_end_pair_length(2) 102 | -------------------------------------------------------------------------------- /config/nvim/lua/user/cmp.lua: -------------------------------------------------------------------------------- 1 | -- ============================================================================ 2 | -- 🧰 setup {{{ 3 | local cmp_ok, cmp = pcall(require, "cmp") 4 | if not cmp_ok then 5 | vim.api.nvim_echo({ 6 | { 7 | "Error: cmp plugin not found... skipping relevant setup()", 8 | "Error", 9 | }, 10 | }, true, {}) 11 | return 12 | end 13 | 14 | local luasnip_ok, luasnip = pcall(require, "luasnip") 15 | if not luasnip_ok then 16 | vim.api.nvim_echo({ 17 | { 18 | "Error: cmp uses luasnip, but luasnip is not found, skipping relevant setup()", 19 | "Error", 20 | }, 21 | }, true, {}) 22 | return 23 | end 24 | 25 | -- local copilot_ok, copilot = pcall(require, "copilot") 26 | -- if not copilot_ok then 27 | -- vim.api.nvim_echo({ 28 | -- { 29 | -- "Error: cmp is integrated with copilot, but copilot is not found, skipping relevant setup", 30 | -- "Error", 31 | -- }, 32 | -- }, true, {}) 33 | -- return 34 | -- end 35 | -- 36 | -- local copilot_cmp_ok, copilot_cmp = pcall(require, "copilot_cmp") 37 | -- if not copilot_cmp_ok then 38 | -- vim.api.nvim_echo({ 39 | -- { 40 | -- "Error: copilt needs copilt_cmp to work well, but copilot_cmp is not found, skipping relevant setup", 41 | -- "Error", 42 | -- }, 43 | -- }, true, {}) 44 | -- return 45 | -- end 46 | 47 | -- }}} 48 | -- ============================================================================ 49 | 50 | require("luasnip/loaders/from_vscode").lazy_load() 51 | 52 | local kind_icons = { 53 | Text = "⼠", 54 | Method = "⟜", 55 | Function = "➠", 56 | Constructor = "", 57 | Field = "", 58 | Variable = "λ", 59 | Class = "", 60 | Interface = "", 61 | Module = "", 62 | Property = "", 63 | Unit = "", 64 | Value = "󱁦", 65 | Enum = "", 66 | Keyword = "", 67 | Snippet = "", 68 | Color = "", 69 | File = "", 70 | Reference = "", 71 | Folder = "", 72 | EnumMember = "", 73 | Constant = "ℎ", 74 | Struct = "", 75 | Event = "", 76 | Operator = "", 77 | TypeParameter = "", 78 | Copilot = "", 79 | } 80 | 81 | cmp.setup({ 82 | snippet = { 83 | expand = function(args) 84 | luasnip.lsp_expand(args.body) -- For `luasnip` users. 85 | end, 86 | }, 87 | mapping = cmp.mapping.preset.insert({ 88 | [""] = cmp.mapping.scroll_docs(-4), 89 | [""] = cmp.mapping.scroll_docs(4), 90 | [""] = cmp.mapping.complete(), 91 | [""] = cmp.mapping.abort(), 92 | -- [""] = cmp.mapping.confirm({ 93 | -- behavior = cmp.ConfirmBehavior.Replace, 94 | -- select = true, 95 | -- }), 96 | [""] = cmp.mapping.confirm({ 97 | behavior = cmp.ConfirmBehavior.Replace, 98 | select = false, 99 | }), 100 | [""] = cmp.mapping(function(fallback) 101 | if cmp.visible() then 102 | cmp.select_next_item() 103 | elseif luasnip.expandable() then 104 | luasnip.expand() 105 | elseif luasnip.expand_or_jumpable() then 106 | luasnip.expand_or_jump() 107 | else 108 | fallback() 109 | end 110 | end, { "i", "s" }), 111 | [""] = cmp.mapping(function(fallback) 112 | if cmp.visible() then 113 | cmp.select_prev_item() 114 | elseif luasnip.jumpable(-1) then 115 | luasnip.jump(-1) 116 | else 117 | fallback() 118 | end 119 | end, { "i", "s" }), 120 | }), 121 | formatting = { 122 | fields = { "kind", "abbr", "menu" }, 123 | format = function(entry, vim_item) 124 | vim_item.kind = string.format("%s ", kind_icons[vim_item.kind]) 125 | vim_item.menu = ({ 126 | -- copilot = " copilot", 127 | nvim_lua = " nvim_lua", 128 | nvim_lsp = " lsp", 129 | luasnip = " luasnip", 130 | buffer = "⼞buffer", 131 | path = "⨒ path", 132 | emoji = "ﲃ emoji", 133 | nerdfont = "󰊪 nerdfont", 134 | })[entry.source.name] 135 | return vim_item 136 | end, 137 | }, 138 | sources = { 139 | { name = "nvim_lsp", group_index = 2 }, 140 | -- { name = "copilot", group_index = 2 }, 141 | { name = "path", group_index = 2 }, 142 | { name = "nvim_lua", group_index = 2 }, 143 | { name = "luasnip", group_index = 2 }, 144 | { name = "buffer", group_index = 2 }, 145 | { name = "emoji", group_index = 2 }, 146 | { name = "nerdfont", group_index = 2 }, 147 | }, 148 | sorting = { 149 | priority_weight = 2, 150 | comparators = { 151 | -- require("copilot_cmp.comparators").prioritize, 152 | 153 | -- Below is the default comparator list and order for nvim-cmp 154 | cmp.config.compare.offset, 155 | -- cmp.config.compare.scopes, --this is commented in nvim-cmp too 156 | cmp.config.compare.exact, 157 | cmp.config.compare.score, 158 | cmp.config.compare.recently_used, 159 | cmp.config.compare.locality, 160 | cmp.config.compare.kind, 161 | cmp.config.compare.sort_text, 162 | cmp.config.compare.length, 163 | cmp.config.compare.order, 164 | }, 165 | }, 166 | }) 167 | 168 | -- copilot.setup({ 169 | -- panel = { enabled = false }, 170 | -- suggestion = { 171 | -- enabled = true, 172 | -- auto_trigger = true, 173 | -- debounce = 75, 174 | -- keymap = { 175 | -- accept = "", 176 | -- accept_word = false, 177 | -- accept_line = false, 178 | -- next = "", 179 | -- prev = "", 180 | -- dismiss = "", 181 | -- }, 182 | -- }, 183 | -- filetypes = { 184 | -- markdown = false, 185 | -- help = false, 186 | -- gitcommit = false, 187 | -- gitrebase = false, 188 | -- hgcommit = false, 189 | -- svn = false, 190 | -- cvs = false, 191 | -- ["."] = false, 192 | -- }, 193 | -- copilot_node_command = "node", -- Node.js version must be > 16.x 194 | -- server_opts_overrides = {}, 195 | -- }) 196 | 197 | -- local cmp_format = require("copilot_cmp.format") 198 | -- copilot_cmp.setup({ 199 | -- suggestion = { enabled = true }, 200 | -- formatters = { 201 | -- label = cmp_format.format_label_text, 202 | -- insert_text = cmp_format.remove_existing, 203 | -- preview = cmp_format.deindent, 204 | -- }, 205 | -- }) 206 | 207 | cmp.setup.filetype({ "sql" }, { 208 | sources = { 209 | { name = "vim-dadbod-completion" }, 210 | -- { name = "copilot" }, 211 | { name = "buffer" }, 212 | }, 213 | }) 214 | -------------------------------------------------------------------------------- /config/nvim/lua/user/cursor.lua: -------------------------------------------------------------------------------- 1 | -- 🧰 setup {{{ 2 | local cusor_ok, cursor = pcall(require, "smoothcursor") 3 | if not cusor_ok then 4 | vim.api.nvim_echo({ 5 | { 6 | "Error: cursor plugin not found... skipping relevant setup()", 7 | "Error", 8 | }, 9 | }, true, {}) 10 | return 11 | end 12 | 13 | local additional_colors_ok, p = pcall(require, "vagari.palette") 14 | if not additional_colors_ok then 15 | vim.api.nvim_echo({ 16 | { 17 | "Error: cursor config has impored vagari.nvim that are not found, skipping setup", 18 | "Error", 19 | }, 20 | }, true, {}) 21 | return 22 | end 23 | -- }}} 24 | 25 | local autocmd = vim.api.nvim_create_autocmd 26 | 27 | autocmd({ "ModeChanged" }, { 28 | callback = function() 29 | local current_mode = vim.fn.mode() 30 | if current_mode == "n" then 31 | vim.api.nvim_set_hl(0, "SmoothCursor", { fg = p.blu_3 }) 32 | elseif current_mode == "c" then 33 | vim.api.nvim_set_hl(0, "SmoothCursor", { fg = p.orn_3 }) 34 | elseif current_mode == "v" then 35 | vim.api.nvim_set_hl(0, "SmoothCursor", { fg = p.prp_3 }) 36 | elseif current_mode == "V" then 37 | vim.api.nvim_set_hl(0, "SmoothCursor", { fg = p.prp_3 }) 38 | elseif current_mode == "�" then 39 | vim.api.nvim_set_hl(0, "SmoothCursor", { fg = p.prp_3 }) 40 | elseif current_mode == "i" then 41 | vim.api.nvim_set_hl(0, "SmoothCursor", { fg = p.grn_3 }) 42 | elseif current_mode == "R" then 43 | vim.api.nvim_set_hl(0, "SmoothCursor", { fg = p.emr_3 }) 44 | end 45 | end, 46 | }) 47 | 48 | local chars = function() 49 | -- stylua: ignore 50 | return { 51 | 'ア', 'イ', 'ウ', 'エ', 'オ', 52 | 'カ', 'キ', 'ク', 'ケ', 'コ', 53 | 'サ', 'シ', 'ス', 'セ', 'ソ', 54 | 'タ', 'チ', 'ツ', 'テ', 'ト', 55 | 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 56 | 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 57 | 'マ', 'ミ', 'ム', 'メ', 'モ', 58 | 'ヤ', 'ユ', 'ヨ', 59 | 'ラ', 'リ', 'ル', 'レ', 'ロ', 60 | 'ワ', 'ヲ', 'ン', '-', 61 | 'Γ', 'Δ', 'Λ', 'Ξ', 'Π', 62 | 'Σ', 'Φ', 'Χ', 'Ψ', 'Ω', 63 | 'α', 'β', 'γ', 'δ', 'ε', 64 | 'ζ', 'η', 'θ', 'ι', 'κ', 65 | 'λ', 'μ', 'ν', 'ξ', 'ο', 66 | 'π', 'ρ', 'σ', 'τ', 'υ', 67 | 'φ', 'ψ', 'ω' 68 | } 69 | end 70 | 71 | cursor.setup({ 72 | type = "matrix", 73 | cursor = "", 74 | texthl = "SmoothCursor", 75 | linehl = nil, 76 | 77 | fancy = { 78 | enable = false, -- enable fancy mode 79 | head = { cursor = "▷", texthl = "SmoothCursor", linehl = nil }, -- false to disable fancy head 80 | body = { 81 | { cursor = "󰝥", texthl = "SmoothCursorRed" }, 82 | { cursor = "󰝥", texthl = "SmoothCursorOrange" }, 83 | { cursor = "●", texthl = "SmoothCursorYellow" }, 84 | { cursor = "●", texthl = "SmoothCursorGreen" }, 85 | { cursor = "•", texthl = "SmoothCursorAqua" }, 86 | { cursor = ".", texthl = "SmoothCursorBlue" }, 87 | { cursor = ".", texthl = "SmoothCursorPurple" }, 88 | }, 89 | tail = { cursor = nil, texthl = "SmoothCursor" }, -- false to disable fancy tail 90 | }, 91 | 92 | matrix = { 93 | head = { 94 | cursor = { "λ" }, 95 | texthl = { "SmoothCursor" }, 96 | linehl = nil, 97 | }, 98 | body = { 99 | length = 9, 100 | cursor = chars(), 101 | texthl = { "Comment" }, 102 | }, 103 | tail = { 104 | cursor = chars(), 105 | texthl = { "SmoothCursor" }, 106 | }, 107 | unstop = false, -- Determines if the cursor should stop or not (false means it will stop) 108 | }, 109 | 110 | autostart = true, -- Automatically start SmoothCursor 111 | always_redraw = true, -- Redraw the screen on each update 112 | flyin_effect = nil, -- Choose "bottom" or "top" for flying effect 113 | speed = 25, -- Max speed is 100 to stick with your current position 114 | intervals = 35, -- Update intervals in milliseconds 115 | priority = 10, -- Set marker priority 116 | timeout = 3000, -- Timeout for animations in milliseconds 117 | threshold = 3, -- Animate only if cursor moves more than this many lines 118 | max_threshold = 1000, -- If you move more than this many lines, don't animate (if `nil`, deactivate check) 119 | disable_float_win = false, -- Disable in floating windows 120 | enabled_filetypes = nil, -- Enable only for specific file types, e.g., { "lua", "vim" } 121 | disabled_filetypes = nil, -- Disable for these file types, ignored if enabled_filetypes is set. e.g., { "TelescopePrompt", "NvimTree" } 122 | -- Show the position of the latest input mode positions. 123 | -- A value of "enter" means the position will be updated when entering the mode. 124 | -- A value of "leave" means the position will be updated when leaving the mode. 125 | -- `nil` = disabled 126 | show_last_positions = "leave", 127 | }) 128 | -------------------------------------------------------------------------------- /config/nvim/lua/user/lsp.lua: -------------------------------------------------------------------------------- 1 | -- ============================================================================ 2 | -- 🧰 Setup {{{ 3 | local cmp_capabilities_ok, cmp = pcall(require, "cmp_nvim_lsp") 4 | if not cmp_capabilities_ok then 5 | vim.api.nvim_echo({ 6 | { 7 | "Error: nvim-cmp uses lsp completions, but cmp-nvim-lsp is not found... skipping lsp setup()", 8 | "Error", 9 | }, 10 | }, true, {}) 11 | return 12 | end 13 | 14 | local mason_ok, mason = pcall(require, "mason") 15 | if not mason_ok then 16 | vim.api.nvim_echo({ 17 | { 18 | "Error: lsp uses mason to configure various settings, but mason is not found... skipping lsp setup()", 19 | "Error", 20 | }, 21 | }, true, {}) 22 | return 23 | end 24 | -- }}} 25 | -- ============================================================================ 26 | 27 | -- Formatting with conform.nvim 28 | require("conform").setup({ 29 | formatters_by_ft = { 30 | bash = { "shellharden" }, 31 | sh = { "shellharden" }, 32 | zsh = { "beautysh" }, 33 | python = { "black" }, 34 | css = { "stylelint", "prettier" }, 35 | scss = { "stylelint", "prettier" }, 36 | json = { "jq" }, 37 | rust = { "rustfmt" }, 38 | lua = { "stylua" }, 39 | toml = { "taplo" }, 40 | javascript = { "prettier" }, 41 | typescript = { "prettier" }, 42 | html = { "prettier" }, 43 | go = { "gofmt", "goimports", "golines" }, 44 | }, 45 | format_on_save = { 46 | timeout_ms = 500, 47 | lsp_fallback = true, -- Use LSP formatting if no formatter is available 48 | }, 49 | }) 50 | 51 | -- Linting with nvim-lint 52 | require("lint").linters_by_ft = { 53 | css = { "stylelint" }, 54 | scss = { "stylelint" }, 55 | go = { "gospel" }, 56 | zsh = { "zsh" }, 57 | } 58 | 59 | -- Run linting on write or read 60 | vim.api.nvim_create_autocmd({ "BufWritePost", "BufReadPost" }, { 61 | callback = function() 62 | require("lint").try_lint() 63 | end, 64 | }) 65 | 66 | local on_attach = function(client, bufnr) 67 | local nmap = function(keys, func) 68 | vim.keymap.set("n", keys, func, { buffer = bufnr }) 69 | end 70 | 71 | if client.name == "rust_analyzer" then 72 | client.server_capabilities.semanticTokensProvider = nil 73 | end 74 | 75 | nmap("rn", vim.lsp.buf.rename) 76 | nmap("ca", vim.lsp.buf.code_action) 77 | nmap("gr", vim.lsp.buf.references) 78 | nmap("gd", vim.lsp.buf.type_definition) 79 | nmap("gg", ":LspRestart") 80 | nmap("gd", vim.lsp.buf.definition) 81 | nmap("gi", vim.lsp.buf.implementation) 82 | nmap("K", vim.lsp.buf.hover) 83 | nmap("", vim.lsp.buf.signature_help) 84 | nmap("k", vim.diagnostic.open_float) 85 | nmap("[d", vim.diagnostic.goto_prev) 86 | nmap("]d", vim.diagnostic.goto_next) 87 | end 88 | 89 | -- ♦️ Vim Diagnostic Settings: 90 | local signs = { 91 | { name = "DiagnosticSignError", text = "" }, 92 | { name = "DiagnosticSignWarn", text = "" }, 93 | { name = "DiagnosticSignHint", text = "" }, 94 | { name = "DiagnosticSignInfo", text = "" }, 95 | } 96 | 97 | for _, sign in ipairs(signs) do 98 | vim.fn.sign_define(sign.name, { 99 | texthl = sign.name, 100 | text = sign.text, 101 | numhl = sign.name, 102 | }) 103 | end 104 | 105 | local diagnostic_config = { 106 | underline = false, 107 | virtual_text = true, 108 | signs = true, 109 | update_in_insert = false, 110 | float = { 111 | focusable = false, 112 | style = "minimal", 113 | border = "rounded", 114 | source = "always", 115 | header = "", 116 | prefix = "", 117 | }, 118 | } 119 | 120 | vim.diagnostic.config(diagnostic_config) 121 | 122 | vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { 123 | border = "rounded", 124 | }) 125 | 126 | vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { 127 | border = "rounded", 128 | }) 129 | 130 | -- 🎾 Automatic Server Setup: 131 | -- https://github.com/williamboman/mason-lspconfig.nvim#default-configuration 132 | local servers = { 133 | bashls = {}, 134 | gopls = {}, 135 | cssls = {}, 136 | stylelint_lsp = {}, 137 | css_variables = {}, 138 | templ = {}, 139 | marksman = {}, 140 | pyright = {}, 141 | taplo = {}, 142 | lua_ls = { 143 | Lua = { 144 | workspace = { checkThirdParty = false }, 145 | telemetry = { enable = false }, 146 | diagnostics = { globals = { "vim" } }, 147 | format = { enable = false }, 148 | }, 149 | }, 150 | } 151 | 152 | -- ============================================================================ 153 | -- 🧱 MASON, DO THE THING! {{{ 154 | mason.setup({ 155 | ui = { border = "rounded" }, 156 | }) 157 | 158 | local mason_lspconfig = require("mason-lspconfig") 159 | local capabilities = vim.lsp.protocol.make_client_capabilities() 160 | 161 | capabilities = cmp.default_capabilities(capabilities) 162 | 163 | mason_lspconfig.setup({ 164 | ensure_installed = vim.tbl_keys(servers), 165 | }) 166 | 167 | mason_lspconfig.setup_handlers({ 168 | function(server_name) 169 | require("lspconfig")[server_name].setup({ 170 | capabilities = capabilities, 171 | on_attach = on_attach, 172 | settings = servers[server_name], 173 | }) 174 | end, 175 | }) 176 | -- }}} 177 | -- ============================================================================ 178 | -------------------------------------------------------------------------------- /config/nvim/lua/user/lualine.lua: -------------------------------------------------------------------------------- 1 | -- ============================================================================ 2 | -- 🧰 setup {{{ 3 | local lualine_ok, lualine = pcall(require, "lualine") 4 | if not lualine_ok then 5 | vim.api.nvim_echo({ 6 | { 7 | "Error: lualine plugin not found... skipping relevant setup()", 8 | "Error", 9 | }, 10 | }, true, {}) 11 | return 12 | end 13 | 14 | local additional_colors_ok, p = pcall(require, "vagari.palette") 15 | if not additional_colors_ok then 16 | vim.api.nvim_echo({ 17 | { 18 | "Error: lualine config has impored vagari.nvim that are not found, skipping setup", 19 | "Error", 20 | }, 21 | }, true, {}) 22 | return 23 | end 24 | -- }}} 25 | -- ============================================================================ 26 | 27 | local hide_in_width = function() 28 | return vim.fn.winwidth(0) > 80 29 | end 30 | 31 | local branch = { 32 | "branch", 33 | icon = "", 34 | } 35 | 36 | -- see lualine.nvim/lua/lualine/utils/mode.lua for mode names 37 | local modes = { 38 | ["NORMAL"] = "", 39 | ["O-PENDING"] = "", 40 | ["INSERT"] = "", 41 | ["VISUAL"] = "", 42 | ["SELECT"] = "", 43 | ["V-LINE"] = "", 44 | ["V-BLOCK"] = "", 45 | ["COMMAND"] = "", 46 | ["REPLACE"] = "", 47 | } 48 | 49 | local mode = { 50 | "mode", 51 | fmt = function(str) 52 | if modes[str] then 53 | return modes[str] 54 | end 55 | return str 56 | end, 57 | } 58 | 59 | local lsp_diagnostics = { 60 | "diagnostics", 61 | 62 | sources = { "nvim_diagnostic" }, 63 | sections = { "error", "warn", "hint", "info" }, 64 | symbols = { error = " ", warn = " ", hint = " ", info = " " }, 65 | colored = false, 66 | update_in_insert = false, 67 | padding = { left = 1, right = 1 }, 68 | cond = hide_in_width, 69 | } 70 | 71 | local diff = { 72 | "diff", 73 | colored = true, 74 | symbols = { 75 | added = " ", 76 | modified = "🞊 ", 77 | removed = " ", 78 | }, 79 | cond = hide_in_width, 80 | } 81 | 82 | local filetype = { 83 | "filetype", 84 | colored = false, 85 | icon_only = false, 86 | padding = { left = 0, right = 1 }, 87 | } 88 | 89 | local filename = { 90 | "filename", 91 | file_status = true, 92 | newfile_status = true, 93 | path = 1, 94 | shorting_target = 80, 95 | icon = nil, 96 | symbols = { 97 | modified = "🞊", 98 | readonly = "󰍁", 99 | unnamed = "…", 100 | newfile = "", 101 | }, 102 | color = function() 103 | local mode_color = { 104 | n = p.blu_4, 105 | i = p.grn_4, 106 | v = p.prp_4, 107 | V = p.prp_4, 108 | c = p.orn_4, 109 | R = p.emr_4, 110 | s = p.cyn_4, 111 | S = p.cyn_4, 112 | [""] = p.prp_4, 113 | } 114 | return { fg = mode_color[vim.fn.mode()] } 115 | end, 116 | } 117 | 118 | local lsp_progress = { 119 | "lsp_progress", 120 | display_components = { 121 | "lsp_client_name", 122 | "spinner", 123 | }, 124 | timer = { 125 | progress_enddelay = 100, 126 | spinner = 100, 127 | lsp_client_name_enddelay = 3000, 128 | }, 129 | message = { 130 | commenced = "󱞇 ", 131 | completed = "󱞈 ", 132 | }, 133 | separators = { 134 | component = " ", 135 | progress = "", 136 | message = { pre = "", post = " " }, 137 | percentage = { pre = "", post = "%% " }, 138 | title = { pre = "", post = "" }, 139 | lsp_client_name = { pre = " ", post = "" }, 140 | spinner = { pre = "", post = " " }, 141 | }, 142 | spinner_symbols = { "󰇊", "󰇋", "󰇌", "󰇍", "󰇎", "󰇏" }, 143 | } 144 | 145 | local search = { 146 | function() 147 | local last_search = vim.fn.getreg("/") 148 | if not last_search or last_search == "" then 149 | return "" 150 | end 151 | local searchcount = vim.fn.searchcount({ maxcount = 9999 }) 152 | if searchcount.total == 0 then 153 | vim.cmd([[ :call setreg("/", ['']) ]]) 154 | end 155 | return " " .. last_search .. "(" .. searchcount.current .. "/" .. searchcount.total .. ")" 156 | end, 157 | color = { fg = p.orn_2 }, 158 | } 159 | 160 | local function icon() 161 | return [[ ]] 162 | end 163 | 164 | local lazy = { 165 | require("lazy.status").updates, 166 | cond = require("lazy.status").has_updates, 167 | color = { fg = p.glc_4 }, 168 | } 169 | 170 | local minimal = { 171 | sections = { 172 | lualine_a = { mode }, 173 | lualine_b = {}, 174 | lualine_c = {}, 175 | lualine_x = { search }, 176 | lualine_y = { filetype }, 177 | lualine_z = { icon() }, 178 | }, 179 | inactive_sections = { 180 | lualine_a = {}, 181 | lualine_b = {}, 182 | lualine_c = {}, 183 | lualine_x = {}, 184 | lualine_y = { filetype }, 185 | luailne_z = {}, 186 | }, 187 | filetypes = { 188 | "Avante", 189 | "AvanteInput", 190 | "tsplayground", 191 | "undotree", 192 | "diff", 193 | }, 194 | } 195 | 196 | lualine.setup({ 197 | options = { 198 | theme = "vagari", 199 | section_separators = { left = "", right = "" }, 200 | component_separators = { left = "⊸", right = "⟜" }, 201 | }, 202 | sections = { 203 | lualine_a = { mode }, 204 | lualine_b = { branch, filename }, 205 | lualine_c = { diff, lsp_diagnostics }, 206 | lualine_x = { lazy, lsp_progress, search }, 207 | lualine_y = { filetype }, 208 | lualine_z = { icon }, 209 | }, 210 | inactive_sections = { 211 | lualine_a = {}, 212 | lualine_b = {}, 213 | lualine_c = {}, 214 | lualine_x = {}, 215 | lualine_y = { filetype }, 216 | luailne_z = {}, 217 | }, 218 | tabline = {}, 219 | extensions = { minimal }, 220 | }) 221 | -------------------------------------------------------------------------------- /config/nvim/lua/user/nvimtree.lua: -------------------------------------------------------------------------------- 1 | local ok, nvim_tree = pcall(require, "nvim-tree") 2 | 3 | if not ok then 4 | vim.api.nvim_echo({ 5 | { 6 | "Error: nvim-tree plugin not found... skipping relevant setup()", 7 | "Error", 8 | }, 9 | }, true, {}) 10 | return 11 | end 12 | 13 | local function on_attach(bufnr) 14 | local api = require("nvim-tree.api") 15 | 16 | local function opts(desc) 17 | return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } 18 | end 19 | 20 | vim.keymap.set("n", "", api.node.open.edit, opts("Open")) 21 | vim.keymap.set("n", "o", api.node.open.edit, opts("Open")) 22 | vim.keymap.set("n", "", api.node.open.edit, opts("Open")) 23 | vim.keymap.set("n", "zz", api.tree.change_root_to_node, opts("CD")) 24 | vim.keymap.set("n", "", api.node.navigate.sibling.prev, opts("Previous Sibling")) 25 | vim.keymap.set("n", "", api.node.navigate.sibling.next, opts("Next Sibling")) 26 | vim.keymap.set("n", "", api.node.navigate.parent, opts("Parent Directory")) 27 | vim.keymap.set("n", "", api.node.open.vertical, opts("Open: Vertical Split")) 28 | vim.keymap.set("n", "", api.node.open.horizontal, opts("Open: Horizontal Split")) 29 | vim.keymap.set("n", "", api.node.open.tab, opts("Open: New Tab")) 30 | vim.keymap.set("n", "zc", api.node.navigate.parent_close, opts("Close Directory")) 31 | vim.keymap.set("n", "I", api.tree.toggle_gitignore_filter, opts("Toggle Git Ignore")) 32 | vim.keymap.set("n", ".", api.tree.toggle_hidden_filter, opts("Toggle Dotfiles")) 33 | vim.keymap.set("n", "n", api.fs.create, opts("Create")) 34 | vim.keymap.set("n", "d", api.fs.trash, opts("Trash")) 35 | vim.keymap.set("n", "X", api.fs.remove, opts("Delete")) 36 | vim.keymap.set("n", "r", api.fs.rename, opts("Rename")) 37 | vim.keymap.set("n", "", api.fs.rename_sub, opts("Rename: Omit Filename")) 38 | vim.keymap.set("n", "R", api.tree.reload, opts("Refresh")) 39 | vim.keymap.set("n", "", api.fs.cut, opts("Cut")) 40 | vim.keymap.set("n", "yy", api.fs.copy.node, opts("Copy")) 41 | vim.keymap.set("n", "p", api.fs.paste, opts("Paste")) 42 | vim.keymap.set("n", "yp", api.fs.copy.relative_path, opts("Copy Relative Path")) 43 | vim.keymap.set("n", "yP", api.fs.copy.absolute_path, opts("Copy Absolute Path")) 44 | vim.keymap.set("n", "[", api.node.navigate.git.prev, opts("Prev Git")) 45 | vim.keymap.set("n", "]", api.node.navigate.git.next, opts("Next Git")) 46 | vim.keymap.set("n", "O", api.node.run.system, opts("Run System")) 47 | vim.keymap.set("n", "q", api.tree.close, opts("Close")) 48 | vim.keymap.set("n", "", api.tree.close, opts("Close")) 49 | vim.keymap.set("n", "?", api.tree.toggle_help, opts("Help")) 50 | vim.keymap.set("n", "zm", api.tree.collapse_all, opts("Collapse")) 51 | vim.keymap.set("n", "zr", api.tree.expand_all, opts("Expand All")) 52 | vim.keymap.set("n", "S", api.tree.search_node, opts("Search")) 53 | vim.keymap.set("n", "", api.node.show_info_popup, opts("Info")) 54 | end 55 | 56 | nvim_tree.setup({ 57 | on_attach = on_attach, 58 | disable_netrw = false, 59 | hijack_cursor = true, 60 | update_focused_file = { enable = true }, 61 | diagnostics = { enable = true }, 62 | modified = { enable = true }, 63 | view = { 64 | number = true, 65 | cursorline = false, 66 | relativenumber = true, 67 | signcolumn = "yes", 68 | float = { 69 | enable = true, 70 | open_win_config = function() 71 | local screen_w = vim.opt.columns:get() 72 | local screen_h = vim.opt.lines:get() - vim.opt.cmdheight:get() 73 | local window_w = screen_w * 0.66 74 | local window_h = screen_h * 0.66 75 | local window_w_int = math.floor(window_w) 76 | local window_h_int = math.floor(window_h) 77 | local center_x = (screen_w - window_w) / 2 78 | local center_y = ((vim.opt.lines:get() - window_h) / 2) - vim.opt.cmdheight:get() 79 | return { 80 | border = "rounded", 81 | relative = "editor", 82 | row = center_y, 83 | col = center_x, 84 | width = window_w_int, 85 | height = window_h_int, 86 | } 87 | end, 88 | }, 89 | }, 90 | renderer = { 91 | highlight_git = true, 92 | indent_markers = { 93 | enable = true, 94 | inline_arrows = true, 95 | icons = { 96 | corner = "└╾", 97 | edge = "│ ", 98 | item = "├", 99 | none = " ", 100 | }, 101 | }, 102 | icons = { 103 | glyphs = { 104 | default = "", 105 | symlink = "", 106 | git = { 107 | unstaged = "🞊", 108 | staged = "", 109 | unmerged = "", 110 | renamed = "", 111 | deleted = "", 112 | untracked = "", 113 | ignored = "", 114 | }, 115 | }, 116 | }, 117 | }, 118 | trash = { 119 | cmd = "trash-put", 120 | require_confirm = true, 121 | }, 122 | actions = { 123 | open_file = { 124 | quit_on_open = true, 125 | window_picker = { 126 | chars = "asetniol", 127 | }, 128 | }, 129 | }, 130 | }) 131 | -------------------------------------------------------------------------------- /config/nvim/lua/user/settings.lua: -------------------------------------------------------------------------------- 1 | -- see :help '{option}' for more details ⮯ 2 | 3 | local options = { 4 | -- 👉 Indentation ========================================================= 5 | tabstop = 4, -- preferred tabstop length. 6 | shiftwidth = 4, -- set to same as tabstop ⮭ 7 | expandtab = true, -- as per option 2 in :help 'tabstop' 8 | shiftround = true, -- ensures indent is a multiple of shiftwidth 9 | smartindent = true, -- an extension of 'autoindent' 10 | -- ======================================================================== 11 | 12 | -- 📃 Text ================================================================ 13 | wrap = false, -- disable text wrapping by default 14 | breakindent = true, -- continue to indent text (if wrapped line) 15 | linebreak = true, -- smarter (more control) over line breaking; see 'breakat' 16 | scrolloff = 22, -- minimum lines above/below cursor 17 | sidescrolloff = 6, -- minimum lines left/right of cursor 18 | spell = false, -- turn spell check off by default 19 | spelllang = { "en_us", "en_gb" }, -- easily add/remove dictionaries 20 | -- textwidth = 80, 21 | formatoptions = "cqnpj1", -- see :help fo-table 22 | -- ======================================================================== 23 | 24 | -- 👀 UI ================================================================== 25 | -- hlsearch = false, -- turn off persistent highlights when searching 26 | shortmess = "filnxtToOFcsS", -- control some status line message settings 27 | number = true, -- show line numbers 28 | relativenumber = true, -- makes using {number}{motion} easier 29 | termguicolors = true, -- more colors, good; needs terminal support. 30 | signcolumn = "yes", -- allays display sign-column 31 | colorcolumn = "80", -- reminder for the ideal line-length maximum 32 | foldmethod = "marker", -- atomically fold on {{{ }}} 33 | updatetime = 420, -- timer until events execute when cursors stops (ms) 34 | timeoutlen = 690, -- timeout for mapped sequence to complete 35 | fillchars = "vert: ,horiz: ,fold:⋅,eob: ,msgsep:‾", 36 | -- ======================================================================== 37 | 38 | -- ⌨️ UX ================================================================== 39 | mouse = "a", -- mouse can be useful, sometimes... it doesn't hurt. 40 | splitbelow = true, -- split below by default 41 | splitright = true, -- split right by default 42 | showmode = false, -- redundant if using lualine 43 | completeopt = { "menu", "menuone", "noselect" }, -- insert complete options 44 | iskeyword = "@,48-57,_,-,192-255,#", -- define what a ends a "word" 45 | swapfile = false, -- swapfiles are useless to me 46 | undofile = true, -- persistent undo, very useful with 'mbbill/undotree' plugin 47 | wildignore = ".back,~,.o,.h,.info,.swp,.obj,.pyc", -- don't check these files for "*" pattern matching 48 | -- ======================================================================== 49 | } 50 | 51 | for k, v in pairs(options) do 52 | vim.opt[k] = v 53 | end 54 | -------------------------------------------------------------------------------- /config/nvim/lua/user/telescope.lua: -------------------------------------------------------------------------------- 1 | local ok, telescope = pcall(require, "telescope") 2 | 3 | if not ok then 4 | vim.api.nvim_echo({ 5 | { 6 | "Error: telescope plugin not found... skipping relevant setup()", 7 | "Error", 8 | }, 9 | }, true, {}) 10 | return 11 | end 12 | 13 | telescope.load_extension("zf-native") 14 | 15 | local actions = require("telescope.actions") 16 | 17 | -- local open_with_trouble = require("troubile.sources.telescope").open 18 | -- local add_to_trouble = require("trouble.sources.telescope").add 19 | 20 | telescope.setup({ 21 | defaults = { 22 | layout_strategy = "vertical", 23 | layout_config = { 24 | vertical = { 25 | prompt_position = "top", 26 | }, 27 | }, 28 | sorting_strategy = "ascending", 29 | prompt_prefix = " 󰭎 ", 30 | selection_caret = " ", 31 | path_display = { "smart" }, 32 | mappings = { 33 | i = { 34 | [""] = actions.cycle_history_next, 35 | [""] = actions.cycle_history_prev, 36 | [""] = actions.close, 37 | [""] = actions.close, 38 | [""] = actions.move_selection_next, 39 | [""] = actions.move_selection_previous, 40 | [""] = actions.results_scrolling_up, 41 | [""] = actions.results_scrolling_down, 42 | [""] = actions.preview_scrolling_up, 43 | [""] = actions.preview_scrolling_down, 44 | [""] = actions.select_default, 45 | [""] = actions.select_horizontal, 46 | [""] = actions.select_vertical, 47 | [""] = actions.select_tab, 48 | [""] = actions.toggle_selection + actions.move_selection_worse, 49 | [""] = actions.toggle_selection + actions.move_selection_better, 50 | [""] = actions.send_to_qflist + actions.open_qflist, 51 | [""] = actions.send_selected_to_qflist + actions.open_qflist, 52 | [""] = actions.complete_tag, 53 | -- [""] = open_with_trouble, 54 | [""] = actions.which_key, 55 | }, 56 | }, 57 | }, 58 | extensions = { 59 | ["zf-native"] = { 60 | file = { 61 | enable = true, 62 | highlight_results = true, 63 | match_filename = true, 64 | }, 65 | generic = { 66 | enable = true, 67 | highlight_results = true, 68 | match_filename = false, 69 | }, 70 | }, 71 | }, 72 | }) 73 | 74 | telescope.load_extension("refactoring") 75 | vim.api.nvim_set_keymap( 76 | "v", 77 | "tr", 78 | "lua require('telescope').extensions.refactoring.refactors()", 79 | { noremap = true } 80 | ) 81 | 82 | local builtin = require("telescope.builtin") 83 | local tmap = function(key, cmd) 84 | vim.keymap.set("n", key, cmd, {}) 85 | end 86 | 87 | tmap("t", builtin.find_files) 88 | tmap("s", builtin.live_grep) 89 | tmap("g", builtin.grep_string) 90 | tmap("tg", builtin.git_files) 91 | tmap("tr", builtin.oldfiles) 92 | tmap("tb", builtin.buffers) 93 | tmap("th", builtin.help_tags) 94 | tmap("tH", builtin.highlights) 95 | tmap("td", builtin.diagnostics) 96 | tmap("tp", builtin.builtin) 97 | tmap("tc", builtin.commands) 98 | tmap("tl", builtin.loclist) 99 | tmap("tq", builtin.quickfix) 100 | tmap("tm", builtin.man_pages) 101 | tmap("tst", builtin.treesitter) 102 | 103 | -- only works if lsp sevrer is attached: 104 | tmap("tsr", builtin.lsp_references) 105 | tmap("tss", builtin.lsp_document_symbols) 106 | tmap("tsw", builtin.lsp_dynamic_workspace_symbols) 107 | -------------------------------------------------------------------------------- /config/nvim/lua/user/treesitter.lua: -------------------------------------------------------------------------------- 1 | -- ============================================================================ 2 | -- 🧰 Setup {{{ 3 | local ok, treesitter = pcall(require, "nvim-treesitter.configs") 4 | if not ok then 5 | vim.api.nvim_echo({ 6 | { 7 | "Error: nvim-treesitter plugin not found... skipping relevant setup()", 8 | "Error", 9 | }, 10 | }, true, {}) 11 | return 12 | end 13 | -- }}} 14 | -- ============================================================================ 15 | 16 | treesitter.setup({ 17 | ensure_installed = { 18 | "c", 19 | "lua", 20 | "python", 21 | "bash", 22 | "vim", 23 | "yaml", 24 | "query", 25 | "comment", 26 | "vimdoc", 27 | "query", 28 | "typescript", 29 | "javascript", 30 | "json", 31 | "html", 32 | "css", 33 | "scss", 34 | "templ", 35 | "rust", 36 | "toml", 37 | "go", 38 | "java", 39 | }, 40 | sync_install = true, 41 | auto_install = true, 42 | ignore_install = {}, 43 | highlight = { 44 | enable = true, 45 | additional_vim_regex_highlighting = false, 46 | }, 47 | indent = { 48 | enable = true, 49 | disable = { "python" }, 50 | }, 51 | incremental_selection = { 52 | enable = true, 53 | keymaps = { 54 | init_selection = "gn", -- normal: start incremental selection. 55 | node_incremental = "gn", -- visual: increment to the upper named parent. 56 | scope_incremental = "gy", -- visual: increment to the upper scope 57 | node_decremental = "gp", -- visual: decrement to the previous named node. 58 | }, 59 | }, 60 | textobjects = { 61 | select = { 62 | enable = true, 63 | lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim 64 | keymaps = { 65 | -- You can use the capture groups defined in textobjects.scm 66 | ["aa"] = "@parameter.outer", 67 | ["ia"] = "@parameter.inner", 68 | ["af"] = "@function.outer", 69 | ["if"] = "@function.inner", 70 | ["ac"] = "@class.outer", 71 | ["ic"] = "@class.inner", 72 | ["at"] = "@tag.outer", 73 | ["it"] = "@tag.inner", 74 | ["ab"] = "@block.outer", 75 | ["ib"] = "@block.inner", 76 | ["al"] = "@loop.outer", 77 | ["il"] = "@loop.inner", 78 | }, 79 | }, 80 | }, 81 | move = { 82 | enable = true, 83 | set_jumps = true, -- whether to set jumps in the jumplist 84 | goto_next_start = { 85 | ["]m"] = "@function.outer", 86 | ["]]"] = "@class.outer", 87 | }, 88 | goto_next_end = { 89 | ["]M"] = "@function.outer", 90 | ["]["] = "@class.outer", 91 | }, 92 | goto_previous_start = { 93 | ["[m"] = "@function.outer", 94 | ["[["] = "@class.outer", 95 | }, 96 | goto_previous_end = { 97 | ["[M"] = "@function.outer", 98 | ["[]"] = "@class.outer", 99 | }, 100 | }, 101 | playground = { 102 | enable = true, 103 | disable = {}, 104 | updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code 105 | persist_queries = false, -- Whether the query persists across vim sessions 106 | keybindings = { 107 | toggle_query_editor = "o", 108 | toggle_hl_groups = "i", 109 | toggle_injected_languages = "t", 110 | toggle_anonymous_nodes = "a", 111 | toggle_language_display = "I", 112 | focus_language = "f", 113 | unfocus_language = "F", 114 | update = "R", 115 | goto_node = "", 116 | show_help = "?", 117 | }, 118 | }, 119 | autopairs = { enable = true }, 120 | autotag = { enable = true }, 121 | modules = {}, 122 | }) 123 | -------------------------------------------------------------------------------- /config/nvim/spell/en.utf-8.add: -------------------------------------------------------------------------------- 1 | vagari's 2 | vagari 3 | bulbasaur 4 | tbd 5 | undercurl 6 | ui 7 | lsp 8 | treesitter 9 | neovim 10 | sonder 11 | Dennett 12 | Dennett's 13 | Boghossian 14 | Vervaeke 15 | mdash 16 | rarr 17 | harr 18 | asymp 19 | overanalyzing 20 | -------------------------------------------------------------------------------- /config/nvim/spell/en.utf-8.add.spl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/config/nvim/spell/en.utf-8.add.spl -------------------------------------------------------------------------------- /config/paru/paru.conf: -------------------------------------------------------------------------------- 1 | [options] 2 | PgpFetch 3 | Devel 4 | Provides 5 | DevelSuffixes = -git -cvs -svn -bzr -darcs -always -hg -fossil 6 | BottomUp 7 | Limit = 20 8 | SkipReview 9 | -------------------------------------------------------------------------------- /config/pipes-rs/config.toml: -------------------------------------------------------------------------------- 1 | bold = false 2 | color_mode = "ansi" # ansi, rgb or none 3 | palette = "default" # default, darker, pastel or matrix 4 | rainbow = 0 # 0-255 5 | delay_ms = 16 6 | inherit_style = false 7 | kinds = ["curved"] # heavy, light, curved, knobby, emoji, outline, dots, blocks, sus 8 | num_pipes = 2 9 | reset_threshold = 0.42 # 0.0–1.0 10 | turn_chance = 0.15 # 0.0–1.0 11 | -------------------------------------------------------------------------------- /config/swaylock/config.conf: -------------------------------------------------------------------------------- 1 | color=22253600 2 | ignore-empty-password 3 | indicator-radius=100 4 | indicator-y-position=400 5 | indicator-thickness=1 6 | 7 | inside-color=22253600 8 | inside-clear-color=22253650 9 | inside-wrong-color=f3697808 10 | inside-ver-color=76d78b08 11 | 12 | separator-color=22256300 13 | text-color=22253600 14 | text-clear-color=22253600 15 | text-ver-color=22253600 16 | text-wrong-color=22253600 17 | 18 | bs-hl-color=f36978 19 | key-hl-color=f2a170 20 | 21 | ring-color=22253600 22 | ring-clear-color=90d1f5 23 | ring-ver-color=76d78b 24 | ring-wrong-color=f36978 25 | line-uses-ring 26 | -------------------------------------------------------------------------------- /config/user-dirs.dirs: -------------------------------------------------------------------------------- 1 | XDG_DESKTOP_DIR="$HOME/" 2 | XDG_DOCUMENTS_DIR="$HOME/docs" 3 | XDG_DOWNLOAD_DIR="$HOME/downloads" 4 | XDG_MUSIC_DIR="$HOME/media/music" 5 | XDG_PICTURES_DIR="$HOME/media/images" 6 | XDG_VIDEOS_DIR="$HOME/media/videos" 7 | XDG_PUBLICSHARE_DIR="$HOME/docs/share" 8 | XDG_TEMPLATES_DIR="$HOME/docs/templates" 9 | -------------------------------------------------------------------------------- /config/xplr/stylua.toml: -------------------------------------------------------------------------------- 1 | column_width = 80 2 | line_endings = "Unix" 3 | indent_type = "Tabs" 4 | indent_width = 4 5 | quote_style = "AutoPreferDouble" 6 | call_parentheses = "Always" 7 | collapse_simple_statement = "Never" 8 | -------------------------------------------------------------------------------- /config/zathura/zathurarc: -------------------------------------------------------------------------------- 1 | set default-fg "#aeb9f8" 2 | set default-bg "#222536" 3 | 4 | set completion-bg "#1e2133" 5 | set completion-fg "#aeb9f8" 6 | set completion-highlight-bg "#30345a" 7 | set completion-highlight-fg "#aeb9f8" 8 | set completion-group-bg "#1e2133" 9 | set completion-group-fg "#7492ef" 10 | 11 | set statusbar-fg "#aeb9f8" 12 | set statusbar-bg "#1e2133" 13 | 14 | set notification-bg "#1e2133" 15 | set notification-fg "#aeb9f8" 16 | set notification-error-bg "#1e2133" 17 | set notification-error-fg "#f08898" 18 | set notification-warning-bg "#1e2133" 19 | set notification-warning-fg "#f4ce88" 20 | 21 | set inputbar-fg "#5a61aa" 22 | set inputbar-bg "#1e2133" 23 | 24 | set recolor-lightcolor "#222536" 25 | set recolor-darkcolor "#aeb9f8" 26 | 27 | set index-fg "#aeb9f8" 28 | set index-bg "#222536" 29 | set index-active-fg "#aeb9f8" 30 | set index-active-bg "#1e2133" 31 | 32 | set render-loading-bg "#222536" 33 | set render-loading-fg "#aeb9f8" 34 | 35 | set highlight-color "#30345a" 36 | set highlight-active-color "#f2a170" 37 | 38 | map t navigate next 39 | map e navigate previous 40 | 41 | set selection-clipboard "clipboard" 42 | set guioptions "" 43 | set window-title-basename true 44 | set link-hadjust false 45 | set search-hadjust false 46 | set scroll-page-aware true 47 | set scroll-step 200 48 | set zoom-step 6 49 | set recolor true 50 | -------------------------------------------------------------------------------- /config/zsh/vagari-highlights.zsh: -------------------------------------------------------------------------------- 1 | typeset -gA ZSH_HIGHLIGHT_STYLES 2 | 3 | ZSH_HIGHLIGHT_HIGHLIGHTERS+=(regexp) 4 | 5 | # https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters/main.md 6 | 7 | # Other Plugins 8 | ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#4e5492" 9 | 10 | # Regex 11 | ZSH_HIGHLIGHT_REGEXP+=('^trash .*' fg=#824141) 12 | ZSH_HIGHLIGHT_REGEXP+=('^rm .*' fg=#f36978) 13 | ZSH_HIGHLIGHT_REGEXP+=('^rm -rf.*' fg=#f34658,bold) 14 | ZSH_HIGHLIGHT_REGEXP+=('^touch' fg=#f5d599) 15 | ZSH_HIGHLIGHT_REGEXP+=('^mkdir' fg=#f4ce88) 16 | ZSH_HIGHLIGHT_REGEXP+=('^mv' fg=#75e6d5) 17 | ZSH_HIGHLIGHT_REGEXP+=('^ln' fg=#38d2ba) 18 | ZSH_HIGHLIGHT_REGEXP+=('^cp' fg=#2bb198) 19 | 20 | # Main 21 | ZSH_HIGHLIGHT_STYLES[default]='fg=#aeb9f8' 22 | ZSH_HIGHLIGHT_STYLES[comment]='fg=#484e75' 23 | ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=#343852' 24 | 25 | ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=#a188df,bold' 26 | ZSH_HIGHLIGHT_STYLES[commandseparator]='fg=#9376d8,bold' 27 | 28 | ZSH_HIGHLIGHT_STYLES[function]='fg=#f2a170' 29 | ZSH_HIGHLIGHT_STYLES[command]='fg=#f8b486' 30 | ZSH_HIGHLIGHT_STYLES[arg0]='fg=#f8b486' 31 | ZSH_HIGHLIGHT_STYLES[hashed-command]='fg=#f8b486' 32 | ZSH_HIGHLIGHT_STYLES[precommand]='fg=#eb905d,bold' 33 | 34 | ZSH_HIGHLIGHT_STYLES[alias]='fg=#ed9acd' 35 | ZSH_HIGHLIGHT_STYLES[suffix-alias]='fg=#e887c3' 36 | ZSH_HIGHLIGHT_STYLES[global-alias]='fg=#ea76c0,bold' 37 | 38 | ZSH_HIGHLIGHT_STYLES[autodirectory]='fg=#8aa4f3,bold' 39 | ZSH_HIGHLIGHT_STYLES[path]='fg=#7492ef' 40 | ZSH_HIGHLIGHT_STYLES[path_pathseparator]='fg=#4a6be3' 41 | ZSH_HIGHLIGHT_STYLES[path_prefix]='fg=#4a6be3,bold' 42 | 43 | ZSH_HIGHLIGHT_STYLES[globbing]='fg=#5a61aa' 44 | ZSH_HIGHLIGHT_STYLES[history-expansion]='fg=#5a61aa,bold' 45 | 46 | ZSH_HIGHLIGHT_STYLES[command-substitution]='fg=#ea834b' 47 | ZSH_HIGHLIGHT_STYLES[command-substitution-unquoted]='fg=#ea834b' 48 | ZSH_HIGHLIGHT_STYLES[command-substitution-quoted]='fg=#ea834b,bold' 49 | ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]='fg=#ea834b' 50 | ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter-unquoted]='fg=#ea834b' 51 | ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter-quoted]='fg=#ea834b,bold' 52 | 53 | ZSH_HIGHLIGHT_STYLES[process-substitution]='fg=#54b0e2,bold' 54 | ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]='fg=#54b0e2,bold' 55 | 56 | ZSH_HIGHLIGHT_STYLES[arithmetic-expansion]='fg=#6bbdec,bold' 57 | 58 | ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=#75e6d5' 59 | ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=#38d2ba' 60 | 61 | ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=#9fd883' 62 | ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=#95cb79' 63 | ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]='fg=#85ba6d' 64 | ZSH_HIGHLIGHT_STYLES[back-quoted-argument]='fg=#73ad5a,bold' 65 | ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]='fg=#73ad5a,bold' 66 | 67 | ZSH_HIGHLIGHT_STYLES[single-quoted-argument-unclosed]='fg=#505831' 68 | ZSH_HIGHLIGHT_STYLES[double-quoted-argument-unclosed]='fg=#505831' 69 | ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument-unclosed]='fg=#505831' 70 | ZSH_HIGHLIGHT_STYLES[back-quoted-argument-unclosed]='fg=#505831' 71 | 72 | ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]='fg=#f5d599,bold' 73 | ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]='fg=#375c47' 74 | ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]='fg=#375c47' 75 | 76 | ZSH_HIGHLIGHT_STYLES[assign]='fg=#6380ec' 77 | ZSH_HIGHLIGHT_STYLES[redirection]='fg=#6380ec,bold' 78 | 79 | ZSH_HIGHLIGHT_STYLES[named-fd]='fg=#4a6be3' 80 | ZSH_HIGHLIGHT_STYLES[numeric-fd]='fg=#4a6be3' 81 | -------------------------------------------------------------------------------- /config/zsh/zshrc: -------------------------------------------------------------------------------- 1 | eval "$(starship init zsh)" 2 | eval "$(zoxide init zsh)" 3 | 4 | function command_not_found_handler { 5 | return 127 6 | } 7 | 8 | export TERM=xterm-256color 9 | 10 | if [ -f "$HOME/.anthropic_api_key" ]; then 11 | export ANTHROPIC_API_KEY=$(cat "$HOME/.anthropic_api_key") 12 | fi 13 | 14 | # history 15 | HISTFILE=~/.histfile 16 | HISTSIZE=1000 17 | SAVEHIST=800 18 | setopt INC_APPEND_HISTORY 19 | setopt HIST_IGNORE_ALL_DUPS 20 | setopt HIST_IGNORE_DUPS 21 | setopt AUTO_CD 22 | 23 | # aliases 24 | alias niol='clear && source ~/.zshrc' 25 | alias ls='echo; lsd' 26 | alias n='nvim' 27 | alias c='calc' 28 | alias zz='cd ~' 29 | alias m="make" 30 | alias j="just" 31 | alias jt="just test" 32 | alias jr="just req" 33 | alias jw="just watch" 34 | alias g='cd "$(xplr --print-pwd-as-result)"' 35 | alias d='cd ~/dotfiles' 36 | alias D='cd ~/downloads' 37 | alias v='cd ~/vagari' 38 | alias e='cd ~/dotfiles/config/nvim' 39 | alias x='exit' 40 | alias p='paru' 41 | alias lg='lazygit' 42 | alias uvpn='nmcli connection up "TrendCapitalVPN"' 43 | alias dvpn='nmcli connection down "TrendCapitalVPN"' 44 | alias update='paru -Syu && paru -Qqe > ~/dotfiles/etc/packages.lst' 45 | alias oc='ouch compress' 46 | alias od='ouch decompress' 47 | alias ol='ouch list --tree' 48 | alias man='man --pager=$PAGER' 49 | alias zoomfix='env XDG_CURRENT_DESKTOP=GNOME GDK_BACKEND=x11 QT_QPA_PLATFORM=xcb XDG_SESSION_TYPE=x11 zoom & disown' 50 | alias af='GDK_BACKEND=x11 QT_QPA_PLATFORM=xcb audacity & disown' 51 | function etree () { 52 | echo 53 | if [[ -z $1 ]]; then 54 | L=2 55 | else 56 | L=$1 57 | fi 58 | erd -L "$L" --suppress-size --threads 16 --layout inverted 59 | } 60 | 61 | alias ew='eww-open' 62 | alias ews='eww inspector & disown && exit' 63 | alias el='eww logs' 64 | 65 | # plugins 66 | if [[ ! -f ${ZDOTDIR:-${HOME}}/.zcomet/bin/zcomet.zsh ]]; then 67 | command git clone https://github.com/agkozak/zcomet.git ${ZDOTDIR:-${HOME}}/.zcomet/bin 68 | fi 69 | source ${ZDOTDIR:-${HOME}}/.zcomet/bin/zcomet.zsh 70 | 71 | zcomet load zsh-users/zsh-completions 72 | zcomet load zsh-users/zsh-autosuggestions 73 | zcomet load marlonrichert/zsh-autocomplete 74 | zcomet load zsh-users/zsh-syntax-highlighting 75 | 76 | autoload -U compinit; compinit 77 | 78 | ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20 79 | 80 | # fix keys 81 | bindkey -v 82 | export KEYTIMEOUT=01 83 | bindkey '^[[H' vi-beginning-of-line 84 | bindkey '^[[F' vi-end-of-line 85 | bindkey '^[[3~' delete-char 86 | bindkey '^[[1;5C' forward-word # C-left 87 | bindkey '^[[1;5D' backward-word # C-right 88 | bindkey '^[[1;5A' history-incremental-search-backward # C-up 89 | bindkey '^[[1;5B' history-incremental-search-forward # C-down 90 | 91 | source $HOME/.config/zsh/vagari-highlights.zsh 92 | -------------------------------------------------------------------------------- /etc/caddy.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Caddy File Server 3 | After=network.target 4 | 5 | [Service] 6 | User=cullyn 7 | ExecStart=/usr/bin/caddy file-server --listen :42069 --browse 8 | Restart=always 9 | 10 | [Install] 11 | WantedBy=multi-user.target 12 | -------------------------------------------------------------------------------- /etc/crkbd.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Crkbd", 3 | "vendorProductId": 1179844609, 4 | "macros": ["=> ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], 5 | "layers": [ 6 | [ 7 | "KC_TAB", "KC_Q", "KC_W", "KC_R", "KC_F", "KC_X", 8 | "KC_ESC", "KC_A", "KC_S", "KC_E", "KC_T", "KC_G", 9 | "C(KC_LSFT)", "KC_LGUI", "KC_B", "KC_C", "KC_D", "KC_COMM", 10 | "KC_NO", 11 | "KC_NO", 12 | "KC_NO", 13 | "KC_LCTL", "FN_MO13", "KC_LSFT", 14 | "KC_DEL", "RCTL(KC_RSFT)", "KC_V", "KC_U", "KC_P", "KC_J", 15 | "KC_BSPC", "KC_L", "KC_O", "KC_I", "KC_N", "KC_Y", 16 | "KC_RALT", "KC_Z", "KC_K", "KC_M", "KC_H", "KC_DOT", 17 | "KC_NO", 18 | "KC_NO", 19 | "KC_NO", 20 | "KC_ENT", "FN_MO23", "KC_SPC" 21 | ], 22 | [ 23 | "C(KC_BSPC)", "KC_TRNS", "KC_AT", "KC_HASH", "KC_DLR", 24 | "KC_ENT", "KC_BSPC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", 25 | "C(KC_Y)", "C(KC_Z)", "C(KC_X)", "C(KC_C)", "C(S(KC_V))", "C(KC_V)", 26 | "KC_NO", 27 | "KC_NO", 28 | "KC_NO", 29 | "KC_TRNS", 30 | "FN_MO13", 31 | "KC_TRNS", 32 | "KC_TRNS", 33 | "KC_TRNS", 34 | "KC_PIPE", 35 | "KC_PERC", 36 | "KC_AMPR", 37 | "KC_TRNS", 38 | "KC_TRNS", 39 | "KC_0", 40 | "KC_9", 41 | "KC_8", 42 | "KC_7", 43 | "KC_6", 44 | "KC_TRNS", 45 | "KC_TRNS", 46 | "KC_TRNS", 47 | "KC_DQUO", 48 | "KC_QUOT", 49 | "KC_TRNS", 50 | "KC_NO", 51 | "KC_NO", 52 | "KC_NO", 53 | "KC_TRNS", 54 | "FN_MO23", 55 | "KC_TRNS" 56 | ], 57 | [ 58 | "KC_TRNS", 59 | "KC_TRNS", 60 | "KC_EXLM", 61 | "KC_UNDS", 62 | "KC_QUES", 63 | "KC_TRNS", 64 | "KC_TRNS", 65 | "KC_LPRN", 66 | "KC_LCBR", 67 | "KC_LBRC", 68 | "KC_MINS", 69 | "KC_SLSH", 70 | "KC_TRNS", 71 | "KC_TRNS", 72 | "KC_TRNS", 73 | "KC_LT", 74 | "KC_GT", 75 | "KC_SCLN", 76 | "KC_NO", 77 | "KC_NO", 78 | "KC_NO", 79 | "KC_TRNS", 80 | "FN_MO13", 81 | "KC_TILD", 82 | "KC_TRNS", 83 | "KC_TRNS", 84 | "KC_CIRC", 85 | "KC_ASTR", 86 | "KC_PLUS", 87 | "KC_TRNS", 88 | "KC_TRNS", 89 | "KC_RPRN", 90 | "KC_RCBR", 91 | "KC_RBRC", 92 | "KC_EQL", 93 | "KC_BSLS", 94 | "KC_TRNS", 95 | "KC_TRNS", 96 | "KC_TRNS", 97 | "KC_DQUO", 98 | "KC_GRV", 99 | "KC_COLN", 100 | "KC_NO", 101 | "KC_NO", 102 | "KC_NO", 103 | "KC_TRNS", 104 | "FN_MO23", 105 | "KC_TRNS" 106 | ], 107 | [ 108 | "KC_TRNS", 109 | "KC_TRNS", 110 | "KC_PGDN", 111 | "KC_UP", 112 | "KC_PGUP", 113 | "KC_TRNS", 114 | "KC_TRNS", 115 | "KC_HOME", 116 | "KC_LEFT", 117 | "KC_DOWN", 118 | "KC_RGHT", 119 | "C(KC_PGDN)", 120 | "KC_TRNS", 121 | "KC_F1", 122 | "KC_F2", 123 | "KC_F3", 124 | "KC_F4", 125 | "KC_F5", 126 | "KC_NO", 127 | "KC_NO", 128 | "KC_NO", 129 | "KC_TRNS", 130 | "KC_TRNS", 131 | "KC_TRNS", 132 | "KC_TRNS", 133 | "KC_TRNS", 134 | "KC_F12", 135 | "KC_F11", 136 | "KC_F10", 137 | "KC_TRNS", 138 | "KC_TRNS", 139 | "KC_END", 140 | "A(KC_LGUI)", 141 | "KC_LSFT", 142 | "KC_LCTL", 143 | "KC_LGUI", 144 | "KC_TRNS", 145 | "KC_TRNS", 146 | "KC_F9", 147 | "KC_F8", 148 | "KC_F7", 149 | "KC_F6", 150 | "KC_NO", 151 | "KC_NO", 152 | "KC_NO", 153 | "KC_TRNS", 154 | "KC_TRNS", 155 | "KC_TRNS" 156 | ] 157 | ], 158 | "encoders": [] 159 | } 160 | -------------------------------------------------------------------------------- /etc/fonts.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/etc/fonts.tar.gz -------------------------------------------------------------------------------- /etc/gifview.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Version=1.0 4 | Name=gifview 5 | Comment=A command-line command of gifsicle for viewing gifs 6 | Path=/usrs/bin/gifview 7 | Exec=gifview -a 8 | Icon=mpv 9 | Terminal=true 10 | MimeType=image/gif 11 | -------------------------------------------------------------------------------- /etc/loader.conf: -------------------------------------------------------------------------------- 1 | timeout 0 2 | -------------------------------------------------------------------------------- /etc/logid.cfg: -------------------------------------------------------------------------------- 1 | devices: ({ 2 | name: "MX Master 3S"; 3 | dpi: 2000; 4 | 5 | smartshift: { 6 | on: true; 7 | threshold: 255; 8 | default_threshold: 255; 9 | }; 10 | 11 | hiresscroll: { 12 | hires: false; 13 | }; 14 | 15 | buttons: ( 16 | 17 | // Gesture Button 18 | { 19 | cid: 0xc3; 20 | action = { 21 | type: "Gestures"; 22 | gestures: ({ 23 | direction: "Up"; 24 | action = { 25 | type: "Keypress"; 26 | keys: ["KEY_F5"]; 27 | }; 28 | }, 29 | { 30 | direction: "Down"; 31 | action = { 32 | type: "Keypress"; 33 | keys: ["KEY_DELETE"]; 34 | }; 35 | }, 36 | { 37 | direction: "Left"; 38 | action = { 39 | type: "Keypress"; 40 | keys: ["KEY_LEFTCTRL", "KEY_PAGEUP"]; 41 | }; 42 | }, 43 | { 44 | direction: "Right"; 45 | action = { 46 | type: "Keypress"; 47 | keys: ["KEY_LEFTCTRL", "KEY_PAGEDOWN"]; 48 | } 49 | }, 50 | { 51 | direction: "None" 52 | action = { 53 | type: "Keypress"; 54 | keys: ["KEY_LEFTCTRL", "KEY_LEFTALT", "KEY_V"]; 55 | }; 56 | } 57 | ); 58 | }; 59 | }, 60 | 61 | // Top Button 62 | { 63 | cid: 0xc4; 64 | action = { 65 | type: "Keypress"; 66 | keys: ["KEY_ENTER"]; 67 | }; 68 | } 69 | ); 70 | }) 71 | -------------------------------------------------------------------------------- /etc/packages.lst: -------------------------------------------------------------------------------- 1 | adobe-source-code-pro-fonts 2 | alsa-utils 3 | amd-ucode 4 | aquamarine 5 | audacity 6 | base 7 | base-devel 8 | bat 9 | bc 10 | beautysh 11 | blender 12 | bluez 13 | bluez-utils 14 | brave-bin 15 | btop 16 | btrfs-progs 17 | caddy 18 | calc 19 | calibre 20 | catppuccin-gtk-theme-macchiato 21 | chromium 22 | clickhouse-client-bin 23 | codespell 24 | cursor-bin 25 | dart-sass 26 | discord 27 | docker 28 | docker-compose 29 | dunst-git 30 | efibootmgr 31 | electron 32 | erdtree 33 | eslint_d 34 | fd 35 | ffmpegthumbnailer 36 | firefox 37 | firefox-developer-edition 38 | fontpreview 39 | fswatch 40 | fuse-overlayfs 41 | fzf 42 | geckodriver 43 | gifsicle 44 | gimp 45 | git 46 | glava 47 | gnu-netcat 48 | go 49 | gputest 50 | grim 51 | gst-plugin-pipewire 52 | gtk-layer-shell 53 | gtk3-demos 54 | guvcview 55 | hunspell 56 | hyprcursor 57 | hyprgraphics 58 | hyprland 59 | hyprland-protocols 60 | hyprland-qt-support 61 | hyprland-qtutils 62 | hyprlang 63 | hyprpicker 64 | hyprutils 65 | hyprwayland-scanner 66 | imagemagick 67 | imv 68 | inkscape 69 | inotify-tools 70 | just 71 | kitty 72 | lazygit 73 | libcanberra 74 | libpulse 75 | libreoffice-still 76 | lightningcss-cli-bin 77 | linux 78 | linux-firmware 79 | linux-headers 80 | logiops 81 | lsd 82 | lsof 83 | lua-format 84 | lua51 85 | luacheck 86 | luarocks 87 | lxappearance 88 | man-db 89 | md5 90 | mediainfo 91 | microsoft-edge-dev-bin 92 | microsoft-edge-stable-bin 93 | mplayer 94 | mpv 95 | mpvpaper-git 96 | ncdu 97 | neofetch 98 | neovim 99 | networkmanager 100 | networkmanager-l2tp 101 | nodejs-live-server 102 | nordic-bluish-accent-standard-buttons-theme 103 | noto-fonts-cjk 104 | noto-fonts-emoji 105 | noto-fonts-extra 106 | npm 107 | nvimpager 108 | nvtop 109 | obs-studio 110 | onetbb 111 | openssh 112 | ouch 113 | pacman-contrib 114 | pandoc-bin 115 | paru 116 | pavucontrol 117 | pipes-rs-bin 118 | pipewire 119 | pipewire-alsa 120 | pipewire-jack 121 | pipewire-pulse 122 | playerctl 123 | polkit-kde-agent 124 | postgresql 125 | prettier 126 | pulsemixer 127 | python-pip 128 | python-pynvim 129 | qbittorrent 130 | rabbitmq 131 | redis 132 | ripgrep 133 | rocm-opencl-runtime 134 | rustup 135 | sd 136 | sddm 137 | shellcheck-bin 138 | shellharden 139 | slack-desktop-wayland 140 | slurp 141 | socat 142 | spotify-launcher 143 | spotifywm-git 144 | sqlc 145 | sqlfluff 146 | starship 147 | strongswan 148 | stylelint-config-recommended 149 | stylua 150 | swaylock 151 | tableplus-bin 152 | tailwindcss-bin 153 | tailwindcss-language-server 154 | taplo-cli 155 | teams 156 | texlive-basic 157 | texlive-bibtexextra 158 | texlive-binextra 159 | texlive-fontsextra 160 | texlive-formatsextra 161 | texlive-games 162 | texlive-humanities 163 | texlive-latexextra 164 | texlive-mathscience 165 | texlive-music 166 | texlive-pictures 167 | texlive-pstricks 168 | texlive-publishers 169 | thunar 170 | tldr 171 | trash-cli 172 | tree 173 | tree-sitter-cli 174 | ttf-fira-code 175 | ttf-hack 176 | ttf-jetbrains-mono 177 | ttf-nerd-fonts-symbols 178 | ttf-nerd-fonts-symbols-common 179 | ttfautohint-cli 180 | unrtf 181 | unzip 182 | usbutils 183 | v4l2loopback-dkms 184 | vial-appimage 185 | vidir 186 | vlc 187 | watchman-bin 188 | webcord-bin 189 | wev 190 | wf-recorder 191 | wget 192 | wireplumber 193 | wl-clipboard 194 | wofi 195 | wofi-emoji 196 | xdg-desktop-portal-gtk 197 | xdg-desktop-portal-hyprland 198 | xdg-desktop-portal-wlr 199 | xplr 200 | yarn 201 | yay-bin 202 | zathura 203 | zathura-pdf-mupdf 204 | zoom 205 | zoxide 206 | zram-generator 207 | zsh 208 | -------------------------------------------------------------------------------- /etc/sddm.conf.d/autologin.conf: -------------------------------------------------------------------------------- 1 | [Autologin] 2 | User=cullyn 3 | Session=hyprland 4 | -------------------------------------------------------------------------------- /etc/sddm.conf.d/hyprland.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Hyprland 3 | Comment=An intelligent dynamic tiling Wayland compositor 4 | Exec=hyprwrap 5 | Type=Application 6 | -------------------------------------------------------------------------------- /etc/security/faillock.conf: -------------------------------------------------------------------------------- 1 | # Configuration for locking the user after multiple failed 2 | # authentication attempts. 3 | # 4 | # The directory where the user files with the failure records are kept. 5 | # The default is /var/run/faillock. 6 | # dir = /var/run/faillock 7 | # 8 | # Will log the user name into the system log if the user is not found. 9 | # Enabled if option is present. 10 | # audit 11 | # 12 | # Don't print informative messages. 13 | # Enabled if option is present. 14 | # silent 15 | # 16 | # Don't log informative messages via syslog. 17 | # Enabled if option is present. 18 | # no_log_info 19 | # 20 | # Only track failed user authentications attempts for local users 21 | # in /etc/passwd and ignore centralized (AD, IdM, LDAP, etc.) users. 22 | # The `faillock` command will also no longer track user failed 23 | # authentication attempts. Enabling this option will prevent a 24 | # double-lockout scenario where a user is locked out locally and 25 | # in the centralized mechanism. 26 | # Enabled if option is present. 27 | # local_users_only 28 | # 29 | # Deny access if the number of consecutive authentication failures 30 | # for this user during the recent interval exceeds n tries. 31 | # The default is 3. 32 | deny = 6 33 | # 34 | # The length of the interval during which the consecutive 35 | # authentication failures must happen for the user account 36 | # lock out is n seconds. 37 | # The default is 900 (15 minutes). 38 | fail_interval = 60 39 | # 40 | # The access will be re-enabled after n seconds after the lock out. 41 | # The value 0 has the same meaning as value `never` - the access 42 | # will not be re-enabled without resetting the faillock 43 | # entries by the `faillock` command. 44 | # The default is 600 (10 minutes). 45 | # unlock_time = 600 46 | # 47 | # Root account can become locked as well as regular accounts. 48 | # Enabled if option is present. 49 | # even_deny_root 50 | # 51 | # This option implies the `even_deny_root` option. 52 | # Allow access after n seconds to root account after the 53 | # account is locked. In case the option is not specified 54 | # the value is the same as of the `unlock_time` option. 55 | # root_unlock_time = 900 56 | # 57 | # If a group name is specified with this option, members 58 | # of the group will be handled by this module the same as 59 | # the root account (the options `even_deny_root>` and 60 | # `root_unlock_time` will apply to them. 61 | # By default, the option is not set. 62 | # admin_group = 63 | -------------------------------------------------------------------------------- /etc/udev/81-bluetooth-hci.rules: -------------------------------------------------------------------------------- 1 | SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="18ea", ATTR{authorized}="0" 2 | -------------------------------------------------------------------------------- /etc/udev/92-viia.rules: -------------------------------------------------------------------------------- 1 | KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl" -------------------------------------------------------------------------------- /etc/vail_keyboard_layout.vil: -------------------------------------------------------------------------------- 1 | {"version": 1, "uid": -1, "layout": [[["KC_TAB", "KC_Q", "KC_W", "KC_R", "KC_F", "KC_X"], ["KC_ESCAPE", "KC_A", "KC_S", "KC_E", "KC_T", "KC_G"], ["LCTL(KC_LSHIFT)", "KC_LGUI", "KC_B", "KC_C", "KC_D", "KC_COMMA"], [-1, -1, -1, "KC_LCTRL", "FN_MO13", "KC_LSHIFT"], ["KC_DELETE", "RCTL(KC_RSHIFT)", "KC_V", "KC_U", "KC_P", "KC_J"], ["KC_BSPACE", "KC_L", "KC_O", "KC_I", "KC_N", "KC_Y"], ["KC_RALT", "KC_Z", "KC_K", "KC_M", "KC_H", "KC_DOT"], [-1, -1, -1, "KC_ENTER", "FN_MO23", "KC_SPACE"]], [["LCTL(KC_BSPACE)", "KC_SPACE", "LSFT(KC_2)", "LSFT(KC_3)", "LSFT(KC_4)", "KC_F6"], ["KC_BSPACE", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5"], ["LCTL(KC_Y)", "LCTL(KC_Z)", "LCTL(KC_X)", "LCTL(KC_C)", "C_S(KC_V)", "LCTL(KC_V)"], [-1, -1, -1, "KC_TRNS", "FN_MO13", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "LSFT(KC_BSLASH)", "LSFT(KC_5)", "LSFT(KC_7)", "KC_TRNS"], ["KC_TRNS", "KC_0", "KC_9", "KC_8", "KC_7", "KC_6"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "LSFT(KC_QUOTE)", "KC_QUOTE", "KC_TRNS"], [-1, -1, -1, "LSFT(KC_ENTER)", "FN_MO23", "KC_TRNS"]], [["KC_TRNS", "KC_TRNS", "LSFT(KC_1)", "LSFT(KC_MINUS)", "LSFT(KC_SLASH)", "KC_TRNS"], ["KC_TRNS", "LSFT(KC_9)", "LSFT(KC_LBRACKET)", "KC_LBRACKET", "KC_MINUS", "KC_SLASH"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "LSFT(KC_COMMA)", "LSFT(KC_DOT)", "KC_SCOLON"], [-1, -1, -1, "KC_TRNS", "FN_MO13", "LSFT(KC_GRAVE)"], ["KC_TRNS", "KC_TRNS", "LSFT(KC_6)", "LSFT(KC_8)", "LSFT(KC_EQUAL)", "KC_TRNS"], ["KC_TRNS", "LSFT(KC_0)", "LSFT(KC_RBRACKET)", "KC_RBRACKET", "KC_EQUAL", "KC_BSLASH"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "LSFT(KC_QUOTE)", "KC_GRAVE", "LSFT(KC_SCOLON)"], [-1, -1, -1, "KC_TRNS", "FN_MO23", "KC_TRNS"]], [["KC_TRNS", "KC_TRNS", "KC_PGDOWN", "KC_UP", "KC_PGUP", "KC_TRNS"], ["KC_TRNS", "KC_HOME", "KC_LEFT", "KC_DOWN", "KC_RIGHT", "LCTL(KC_PGDOWN)"], ["KC_TRNS", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5"], [-1, -1, -1, "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_F12", "KC_F11", "KC_F10", "KC_TRNS"], ["KC_TRNS", "KC_END", "LALT(KC_LGUI)", "KC_LSHIFT", "KC_LCTRL", "KC_LGUI"], ["KC_TRNS", "KC_TRNS", "KC_F9", "KC_F8", "KC_F7", "KC_F6"], [-1, -1, -1, "KC_TRNS", "KC_TRNS", "KC_TRNS"]]], "encoder_layout": [[], [], [], []], "layout_options": -1, "macro": [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []], "vial_protocol": -1, "via_protocol": 9, "tap_dance": [], "combo": [], "key_override": [], "settings": {}} -------------------------------------------------------------------------------- /share/dotfiles-banner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/dotfiles-banner.gif -------------------------------------------------------------------------------- /share/example-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/example-1.png -------------------------------------------------------------------------------- /share/example-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/example-2.png -------------------------------------------------------------------------------- /share/example-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/example-3.png -------------------------------------------------------------------------------- /share/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/favicon.ico -------------------------------------------------------------------------------- /share/newtab.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 行こう 10 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /share/obscure_shadows/ambedo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/ambedo.png -------------------------------------------------------------------------------- /share/obscure_shadows/anemoia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/anemoia.png -------------------------------------------------------------------------------- /share/obscure_shadows/anoscetia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/anoscetia.png -------------------------------------------------------------------------------- /share/obscure_shadows/harmonoia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/harmonoia.png -------------------------------------------------------------------------------- /share/obscure_shadows/idewild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/idewild.png -------------------------------------------------------------------------------- /share/obscure_shadows/kinspec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/kinspec.png -------------------------------------------------------------------------------- /share/obscure_shadows/onsim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/onsim.png -------------------------------------------------------------------------------- /share/obscure_shadows/ringlorn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/ringlorn.png -------------------------------------------------------------------------------- /share/obscure_shadows/solibra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/solibra.png -------------------------------------------------------------------------------- /share/obscure_shadows/trumspringa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/trumspringa.png -------------------------------------------------------------------------------- /share/obscure_shadows/vemodalen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/vemodalen.png -------------------------------------------------------------------------------- /share/obscure_shadows/wangare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/wangare.png -------------------------------------------------------------------------------- /share/obscure_shadows/yuyi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/yuyi.png -------------------------------------------------------------------------------- /share/obscure_shadows/zenosyne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/obscure_shadows/zenosyne.png -------------------------------------------------------------------------------- /share/social-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/social-preview.jpg -------------------------------------------------------------------------------- /share/sounds/discovery.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/sounds/discovery.ogg -------------------------------------------------------------------------------- /share/sounds/fruit.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/sounds/fruit.ogg -------------------------------------------------------------------------------- /share/sounds/gems.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/sounds/gems.ogg -------------------------------------------------------------------------------- /share/sounds/jackpot.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/sounds/jackpot.ogg -------------------------------------------------------------------------------- /share/sounds/knock.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/sounds/knock.ogg -------------------------------------------------------------------------------- /share/sounds/moondrop.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/sounds/moondrop.ogg -------------------------------------------------------------------------------- /share/sounds/reward.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/sounds/reward.ogg -------------------------------------------------------------------------------- /share/videos/blackhole.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/videos/blackhole.webm -------------------------------------------------------------------------------- /share/videos/dna-vf-blu.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/videos/dna-vf-blu.webm -------------------------------------------------------------------------------- /share/videos/dna.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/videos/dna.mp4 -------------------------------------------------------------------------------- /share/videos/record.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nosvagor/dotfiles/aa0ff1df1157c27b5b3de75c1fb5b1d5d502bc17/share/videos/record.mp4 --------------------------------------------------------------------------------