summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/alacritty/alacritty.toml16
-rwxr-xr-xconfig/bspwm/bspwmrc82
-rwxr-xr-xconfig/btop/btop.conf254
-rwxr-xr-xconfig/btop/themes/coasteen.theme89
-rwxr-xr-xconfig/btop/themes/dracula.theme89
-rwxr-xr-xconfig/btop/themes/gruvbox.theme92
-rwxr-xr-xconfig/btop/themes/kyli0x.theme92
-rwxr-xr-xconfig/dunst/dunst/dunstrc48
-rwxr-xr-xconfig/dunst/dunstrc48
-rwxr-xr-xconfig/dunst/dunstrc~48
-rwxr-xr-xconfig/eww/eww.scss63
-rwxr-xr-xconfig/eww/eww.yuck58
-rwxr-xr-xconfig/eww/eww_vars.yuck4
-rwxr-xr-xconfig/eww/eww_widgets.yuck21
-rwxr-xr-xconfig/eww/images/gif1.gifbin0 -> 169253 bytes
-rwxr-xr-xconfig/eww/images/gif2.gifbin0 -> 36996 bytes
-rwxr-xr-xconfig/eww/scripts/calendar.sh2
-rwxr-xr-xconfig/eww/scripts/day_format.sh14
-rwxr-xr-xconfig/eww/scripts/daytype.sh3
-rwxr-xr-xconfig/eww/scripts/month_format.sh3
-rwxr-xr-xconfig/eww/scripts/start.sh9
-rwxr-xr-xconfig/eww/scripts/year_format.sh3
l---------config/foot/foot.ini1
-rwxr-xr-xconfig/foot/foot.ini.home-backup40
-rwxr-xr-xconfig/home-manager/README.md4
-rwxr-xr-xconfig/home-manager/flake.lock47
-rwxr-xr-xconfig/home-manager/flake.nix26
-rwxr-xr-xconfig/home-manager/home.nix195
-rw-r--r--config/hypr/hypridle.conf14
-rwxr-xr-xconfig/hypr/hyprland.conf217
-rw-r--r--config/hypr/hyprlock.conf35
-rwxr-xr-xconfig/hypr/hyprpaper.conf3
l---------config/kitty/.#kitty.conf1
-rwxr-xr-xconfig/kitty/kitty.conf52
-rwxr-xr-xconfig/mako/.github/issue_template.md1
-rwxr-xr-xconfig/mako/.github/pull_request_template.md1
-rwxr-xr-xconfig/mako/config12
-rwxr-xr-xconfig/micro/bindings.json35
-rwxr-xr-xconfig/micro/buffers/historybin0 -> 52 bytes
-rwxr-xr-xconfig/micro/settings.json3
-rwxr-xr-xconfig/mksymlink.conf16
-rwxr-xr-xconfig/mutt/color.muttrc68
-rwxr-xr-xconfig/mutt/muttrc18
-rwxr-xr-xconfig/neofetch/config.conf864
-rw-r--r--config/niri-2/config.kdl269
-rwxr-xr-xconfig/niri/config.kdl265
-rwxr-xr-xconfig/nushell/config.nu99
-rwxr-xr-xconfig/nushell/starship.nu35
-rwxr-xr-xconfig/nvim-1/init.lua11
-rwxr-xr-xconfig/nvim-1/lazy-lock.json40
-rwxr-xr-xconfig/nvim-1/lua/config.lua86
-rwxr-xr-xconfig/nvim-1/lua/plugins/catppuccin/init.lua84
-rwxr-xr-xconfig/nvim-1/lua/plugins/lazy/init.lua17
-rwxr-xr-xconfig/nvim-1/lua/plugins/lazy/plugins.lua128
-rwxr-xr-xconfig/nvim-1/lua/plugins/lsp/init.lua120
-rwxr-xr-xconfig/nvim-1/lua/plugins/lualine/init.lua42
-rwxr-xr-xconfig/nvim-1/lua/plugins/nvim-tree/init.lua2
-rwxr-xr-xconfig/nvim-1/lua/plugins/render-markdown/init.lua139
-rwxr-xr-xconfig/nvim-1/lua/plugins/telescope/init.lua3
-rwxr-xr-xconfig/nvim-1/lua/plugins/treesitter/init.lua10
-rwxr-xr-xconfig/nvim-1/lua/plugins/whichkey/init.lua2
-rwxr-xr-xconfig/nvim-1/lua/status_line/init.lua102
-rw-r--r--config/nvim-1/undo/%home%coast%.Xdefaultsbin0 -> 759 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%Element%electron-config.jsonbin0 -> 1274 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%alacritty%alacritty.tomlbin0 -> 16787 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%dunst%dunstrcbin0 -> 5122 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%eww%_colors.scssbin0 -> 673 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%eww%eww.scssbin0 -> 7618 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%eww%eww.yuckbin0 -> 7041 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%eww%scripts%get-active-workspace.shbin0 -> 4312 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%eww%scripts%get-workspaces.shbin0 -> 2727 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%fht%compositor.tomlbin0 -> 26843 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%foot%foot.inibin0 -> 4112 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%hypr%hypridle.confbin0 -> 1643 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%hypr%hyprland.confbin0 -> 249399 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%hypr%hyprlock.confbin0 -> 2702 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%kwm%config.zonbin0 -> 62767 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%mako%configbin0 -> 7057 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%mozilla%firefox%8kysq72s.default-release%chrome%userChrome.cssbin0 -> 597 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%neofetch%config.confbin0 -> 82882 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%nvim%lua%plugins%catppuccin%init.luabin0 -> 83907 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%nvim%lua%plugins%lazy%plugins.luabin0 -> 1620 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%picom%picom-animations.confbin0 -> 16678 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%picom%picom.confbin0 -> 39955 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%piss%pissrcbin0 -> 23848 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%quickshell%clock.qmlbin0 -> 597 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%quickshell%currentsong.qmlbin0 -> 597 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%quickshell%separator.qmlbin0 -> 639 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%quickshell%shell.qmlbin0 -> 401330 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%quickshell%workspaces.qmlbin0 -> 639 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%river%initbin0 -> 1243 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%rofi%config.rasibin0 -> 13071 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%scrobbler%config.inibin0 -> 2630 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%sway%configbin0 -> 36011 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%tym%config.luabin0 -> 13438 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%tym%theme.luabin0 -> 1256 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%waybar%config.jsoncbin0 -> 77709 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.config%waybar%style.cssbin0 -> 125219 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.curlrcbin0 -> 669 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%share%American Truck Simulator%config.cfgbin0 -> 17100 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%share%applications%element-desktop.desktopbin0 -> 1083 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%share%applications%firefox-bin.desktopbin0 -> 631 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%share%applications%im.riot.Riot.desktopbin0 -> 2761 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%share%flatpak%app%im.riot.Riot%x86_64%stable%42f010911a82616b14d9f36a8341652b349552a67ba14b8e67fd432e18c37561%export%share%applications%im.riot.Riot.desktopbin0 -> 825 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%.git%COMMIT_EDITMSGbin0 -> 579 bytes
-rwxr-xr-xconfig/nvim-1/undo/%home%coast%.local%src%config%nvim%lua%config.luabin0 -> 75458 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%config%sway%configbin0 -> 1065 bytes
-rwxr-xr-xconfig/nvim-1/undo/%home%coast%.local%src%config%waybar%config.jsoncbin0 -> 122714 bytes
-rwxr-xr-xconfig/nvim-1/undo/%home%coast%.local%src%config%waybar%style.cssbin0 -> 203469 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%dmenu%config.hbin0 -> 3785 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%dmenu%config.mkbin0 -> 3914 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%dmenu%dmenu.cbin0 -> 85514 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%dmenu%drw.cbin0 -> 19034 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%dwm%config.hbin0 -> 45698 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%dwm%config.mkbin0 -> 8711 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%dwm%patches.hbin0 -> 6749 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%local%bin%mpc-shuf.shbin0 -> 137909 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%local%bin%screenie-wlrbin0 -> 4808 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%local%bin%soberbin0 -> 2783 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%local%bin%swap.startbin0 -> 3996 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%local%bin%swap.stopbin0 -> 2435 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%local%bin%updateriverbin0 -> 16783 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%local%bin%updateriver.shbin0 -> 11196 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%local%bin%uplbin0 -> 12725 bytes
-rwxr-xr-xconfig/nvim-1/undo/%home%coast%.local%src%local%bin%uwuify.awkbin0 -> 28108 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%slstatus%config.hbin0 -> 15831 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%slstatus%config.mkbin0 -> 2230 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%st%config.hbin0 -> 3487 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.local%src%st%config.mkbin0 -> 599 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.mpdconfbin0 -> 2438 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.rtorrent.rcbin0 -> 2008 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.var%app%org.vinegarhq.Sober%config%sober%config.jsonbin0 -> 4597 bytes
-rwxr-xr-xconfig/nvim-1/undo/%home%coast%.wezterm.luabin0 -> 14460 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.xinitrcbin0 -> 45032 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.zprofilebin0 -> 31474 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%.zshrcbin0 -> 707 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Games%Red Dead Redemption 2%launch.shbin0 -> 28213 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%NOTESbin0 -> 2029 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%X%term%termbin0 -> 5968 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%X%term%xterm.cbin0 -> 75232 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%abcl%main.clbin0 -> 33977 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%gtk%main.cbin0 -> 8793 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%py%ashscrobblebin0 -> 52479 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%.git%COMMIT_EDITMSGbin0 -> 579 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%LICENSEbin0 -> 3517 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%ashscrobble.pybin0 -> 2182 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%py%dmenu.luabin0 -> 32913 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%py%dmenu.pybin0 -> 23716 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%pylua%dmenu.luabin0 -> 10292 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%river%kwm%config.def.zonbin0 -> 20522 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%river%river%build.zig.zonbin0 -> 2669 bytes
-rwxr-xr-xconfig/nvim-1/undo/%home%coast%Projects%rs%guessing_game%.gitignorebin0 -> 1116 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%config.hbin0 -> 12548 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%main.pybin0 -> 56288 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%window.cbin0 -> 145974 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wlbar%main.cbin0 -> 6042 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%.git%COMMIT_EDITMSGbin0 -> 579 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%.gitignorebin0 -> 2753 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%config.hbin0 -> 12291 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%main.cbin0 -> 43975 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%makefilebin0 -> 10669 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wlclock.cbin0 -> 579319 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wled%.git%COMMIT_EDITMSGbin0 -> 687 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wled%.gitignorebin0 -> 2769 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wled%LICENSEbin0 -> 2735 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wled%READMEbin0 -> 9610 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wled%build.shbin0 -> 79779 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wled%client.cbin0 -> 258378 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wled%config.hbin0 -> 26398 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%wlindow%client.cbin0 -> 2146 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%Projects%wayland%x11alt.cbin0 -> 25803 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%ashos%linux%.configbin0 -> 1626 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%ashos%syslinux.cfgbin0 -> 6204 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%conduwuitbin0 -> 15428 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%driver%driver.cbin0 -> 6721 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%.git%COMMIT_EDITMSGbin0 -> 579 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%.gitignorebin0 -> 1677 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%Makefilebin0 -> 2410 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%build.shbin0 -> 1667 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%makefilebin0 -> 14145 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%compositor.cbin0 -> 259361 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%config.hbin0 -> 27929 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%include%compositor.hbin0 -> 16690 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%include%keybinds.hbin0 -> 1712 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%include%screenshot.hbin0 -> 5210 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%keybinds.cbin0 -> 3599 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%keybinds.hbin0 -> 4422 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%screenshot.cbin0 -> 17605 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%compositor%src%util.cbin0 -> 2861 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%hst%config.hbin0 -> 60894 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%neuswc%config.mkbin0 -> 2849 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%neuswc%libswc%compositor.hbin0 -> 671 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%neuswc%libswc%output.hbin0 -> 671 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%neuswc%libswc%pointer.hbin0 -> 1736 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%neuswc%libswc%util.hbin0 -> 617 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%neuwld%config.mkbin0 -> 629 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%swc%config.mkbin0 -> 2305 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%swcshot%main.cbin0 -> 14583 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%terminal%Makefilebin0 -> 1489 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%terminal%main.cbin0 -> 60353 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%wld%config.mkbin0 -> 649 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%wsxwm%Makefilebin0 -> 5006 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%wsxwm%source%include%wsxwm.hbin0 -> 1770 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%wsxwm%source%test.diffbin0 -> 1223 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%git%wsxwm%source%wsxwm.cbin0 -> 70249 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%hwfetchbin0 -> 27128 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%main.bashbin0 -> 4076 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%main.cbin0 -> 5019 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%main.luabin0 -> 3328 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%royalbin0 -> 1348 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%shared%loader.cbin0 -> 7191 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%shared%shared.cbin0 -> 7551 bytes
-rw-r--r--config/nvim-1/undo/%home%coast%test.pybin0 -> 597 bytes
m---------config/nvim-2/graft0
-rw-r--r--config/nvim-2/init.vim12
-rw-r--r--config/nvim-2/nvim/init.vim12
m---------config/nvim-2/nvim/pack-bak/graft/start/LuaSnip0
m---------config/nvim-2/nvim/pack-bak/graft/start/cmp-buffer0
m---------config/nvim-2/nvim/pack-bak/graft/start/cmp-nvim-lsp0
m---------config/nvim-2/nvim/pack-bak/graft/start/nvim-autopairs0
m---------config/nvim-2/nvim/pack-bak/graft/start/nvim-cmp0
m---------config/nvim-2/nvim/pack-bak/graft/start/nvim-lspconfig0
m---------config/nvim-2/nvim/pack-bak/graft/start/vim-closetag0
m---------config/nvim-2/nvim/pack-bak/graft/start/vim-commentary0
m---------config/nvim-2/nvim/pack-bak/graft/start/vim-endwise0
m---------config/nvim-2/nvim/pack-bak/graft/start/vim-fugitive0
m---------config/nvim-2/nvim/pack-bak/graft/start/vim-polyglot0
m---------config/nvim-2/nvim/pack-bak/graft/start/vim-sensible0
m---------config/nvim-2/nvim/pack-bak/graft/start/vim-surround0
m---------config/nvim-2/nvim/pack-bak/graft/start/vim-vinegar0
m---------config/nvim-2/nvim/pack/scion/start/LuaSnip0
m---------config/nvim-2/nvim/pack/scion/start/cmp-buffer0
m---------config/nvim-2/nvim/pack/scion/start/cmp-nvim-lsp0
m---------config/nvim-2/nvim/pack/scion/start/nvim-autopairs0
m---------config/nvim-2/nvim/pack/scion/start/nvim-cmp0
m---------config/nvim-2/nvim/pack/scion/start/nvim-colorizer.lua0
m---------config/nvim-2/nvim/pack/scion/start/nvim-lspconfig0
m---------config/nvim-2/nvim/pack/scion/start/nvim-treesitter0
m---------config/nvim-2/nvim/pack/scion/start/vim-closetag0
m---------config/nvim-2/nvim/pack/scion/start/vim-commentary0
m---------config/nvim-2/nvim/pack/scion/start/vim-endwise0
m---------config/nvim-2/nvim/pack/scion/start/vim-fugitive0
m---------config/nvim-2/nvim/pack/scion/start/vim-polyglot0
m---------config/nvim-2/nvim/pack/scion/start/vim-sensible0
m---------config/nvim-2/nvim/pack/scion/start/vim-surround0
m---------config/nvim-2/nvim/pack/scion/start/vim-vinegar0
m---------config/nvim-2/nvim/scion0
-rw-r--r--config/nvim-2/nvim/scion_state.json21
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%alacritty%alacritty.tomlbin0 -> 44499 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%fastfetch%config.jsoncbin0 -> 20002 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%niri%config.kdlbin0 -> 16110 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%graft%config.rbbin0 -> 18913 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%init.vimbin0 -> 103754 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%key.vimbin0 -> 5683 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%scion%config.rbbin0 -> 4430 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%scion%scion.rbbin0 -> 58552 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%test.shbin0 -> 3475 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%lsp.vimbin0 -> 5713 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%lua.vimbin0 -> 50636 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%scp.vimbin0 -> 30059 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%theme.vimbin0 -> 22051 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%rofi%config.rasibin0 -> 19085 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%starship.tomlbin0 -> 10728 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%systemd%user%.#plasma-polkit-agent.servicec252b1882abfd1a3bin0 -> 2796 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%waybar%config.jsoncbin0 -> 171458 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%waybar%style.cssbin0 -> 101843 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%waybar%window.shbin0 -> 597 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.config%xdg-desktop-portal%portals.confbin0 -> 2165 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.local%share%applications%prismlauncher.desktopbin0 -> 5079 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.local%share%applications%throne.desktopbin0 -> 5299 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.zsh.d%zsh-syntaxhighlighting.zshbin0 -> 1309 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%.zshrcbin0 -> 5619 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%DEVLISTbin0 -> 7935 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%Downloads%snispoof%config.jsonbin0 -> 1169 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%PRISMLAUNCHER%instances%26.1.2%minecraft%config%DistantHorizons.tomlbin0 -> 35630 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%Xray%config.jsonbin0 -> 2583 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%bash.shbin0 -> 6749 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%copyparty-setup.pybin0 -> 695 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%dlhub%goodlinks.txtbin0 -> 1238 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%dlhub%script.pybin0 -> 19927 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%main.cbin0 -> 17686 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%mhr-cfw%config.jsonbin0 -> 4736 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%pertreebin0 -> 5517 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%piss%.git%COMMIT_EDITMSGbin0 -> 579 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%piss%LICENSEbin0 -> 1614 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%piss%README.mdbin0 -> 6650 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%piss%makefilebin0 -> 2156 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%piss%pissrc.example.luabin0 -> 1013 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%piss%src%chd.1bin0 -> 1185 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%piss%src%daemon.cbin0 -> 9783 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%piss%src%piss.1bin0 -> 3604 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%.git%COMMIT_EDITMSGbin0 -> 633 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%.gitignorebin0 -> 2099 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%READMEbin0 -> 2145 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%main.cbin0 -> 733 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%makefilebin0 -> 7122 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%src%main.cbin0 -> 10220 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%.git%COMMIT_EDITMSGbin0 -> 1333 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%.gitignorebin0 -> 849 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%LICENSEbin0 -> 14067 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%READMEbin0 -> 3124 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%src%main.cbin0 -> 104815 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%main.cbin0 -> 77446 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%makefilebin0 -> 597 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%randbin0 -> 7854 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%src%input.cbin0 -> 13032 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%src%main.cbin0 -> 20231 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%cterm%cterm.cbin0 -> 137301 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%.git%COMMIT_EDITMSGbin0 -> 1116 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%.gitignorebin0 -> 1611 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%build.shbin0 -> 943 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%main.cbin0 -> 100477 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%makefilebin0 -> 1084 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%makefile-optbin0 -> 21347 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%template-opt.cbin0 -> 8003 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%main.cbin0 -> 30066 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%makefilebin0 -> 2525 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%shader.fragbin0 -> 6075 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%shader.vertbin0 -> 4684 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%eul-license%v1bin0 -> 2183 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-asifaiusf%.git%COMMIT_EDITMSGbin0 -> 579 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-asifaiusf%README.mdbin0 -> 2694 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%.git%COMMIT_EDITMSGbin0 -> 579 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%READMEbin0 -> 8145 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%README.mdbin0 -> 19866 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%Rakefilebin0 -> 2638 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%config.rbbin0 -> 4470 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%scion.rbbin0 -> 7612 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%wayland-rec%config.rbbin0 -> 1796 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%projects%ruby%wayland-rec%main.rbbin0 -> 16216 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%home%coast%shit.shbin0 -> 1676 bytes
-rw-r--r--config/nvim-2/nvim/undodir/%mnt%Home%dotfiles%.gitignorebin0 -> 921 bytes
-rw-r--r--config/nvim-2/nvim/vscript/key.vim2
-rw-r--r--config/nvim-2/nvim/vscript/lua.vim87
-rw-r--r--config/nvim-2/nvim/vscript/scp.vim29
-rw-r--r--config/nvim-2/nvim/vscript/theme.vim61
m---------config/nvim-2/pack-bak/graft/start/LuaSnip0
m---------config/nvim-2/pack-bak/graft/start/cmp-buffer0
m---------config/nvim-2/pack-bak/graft/start/cmp-nvim-lsp0
m---------config/nvim-2/pack-bak/graft/start/nvim-autopairs0
m---------config/nvim-2/pack-bak/graft/start/nvim-cmp0
m---------config/nvim-2/pack-bak/graft/start/nvim-lspconfig0
m---------config/nvim-2/pack-bak/graft/start/vim-closetag0
m---------config/nvim-2/pack-bak/graft/start/vim-commentary0
m---------config/nvim-2/pack-bak/graft/start/vim-endwise0
m---------config/nvim-2/pack-bak/graft/start/vim-fugitive0
m---------config/nvim-2/pack-bak/graft/start/vim-polyglot0
m---------config/nvim-2/pack-bak/graft/start/vim-sensible0
m---------config/nvim-2/pack-bak/graft/start/vim-surround0
m---------config/nvim-2/pack-bak/graft/start/vim-vinegar0
m---------config/nvim-2/scion0
-rw-r--r--config/nvim-2/scion_state.json19
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%alacritty%alacritty.tomlbin0 -> 6436 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%fastfetch%config.jsoncbin0 -> 7709 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%niri%config.kdlbin0 -> 1409 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%nvim%graft%config.rbbin0 -> 18913 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%nvim%init.vimbin0 -> 100132 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%nvim%key.vimbin0 -> 5683 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%nvim%test.shbin0 -> 3475 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%nvim%vscript%lsp.vimbin0 -> 5713 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%nvim%vscript%lua.vimbin0 -> 17917 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%nvim%vscript%scp.vimbin0 -> 30059 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%waybar%config.jsoncbin0 -> 1630 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.config%xdg-desktop-portal%portals.confbin0 -> 2165 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%.zshrcbin0 -> 1821 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%DEVLISTbin0 -> 4767 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%main.cbin0 -> 42611 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%pertreebin0 -> 5517 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%c%catter%.git%COMMIT_EDITMSGbin0 -> 633 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%c%catter%.gitignorebin0 -> 2099 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%c%catter%READMEbin0 -> 2145 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%c%catter%main.cbin0 -> 733 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%c%catter%makefilebin0 -> 7122 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%c%catter%src%main.cbin0 -> 10220 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%c%makefile-optbin0 -> 21347 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%c%template-opt.cbin0 -> 8003 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%.git%COMMIT_EDITMSGbin0 -> 579 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%READMEbin0 -> 8145 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%README.mdbin0 -> 19866 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%Rakefilebin0 -> 2638 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%config.rbbin0 -> 4470 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%scion.rbbin0 -> 7612 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%ruby%wayland-rec%config.rbbin0 -> 1796 bytes
-rw-r--r--config/nvim-2/undodir/%home%coast%projects%ruby%wayland-rec%main.rbbin0 -> 16216 bytes
-rw-r--r--config/nvim-2/vscript/key.vim2
-rw-r--r--config/nvim-2/vscript/lua.vim122
-rw-r--r--config/nvim-2/vscript/scp.vim29
-rwxr-xr-xconfig/nvim-root/init.lua168
-rwxr-xr-xconfig/picom/picom-animations.conf310
-rwxr-xr-xconfig/picom/picom.conf151
-rwxr-xr-xconfig/piss/pissrc4
-rwxr-xr-xconfig/plugged/plug.vim2877
-rwxr-xr-xconfig/plugin/config.vim1
-rwxr-xr-xconfig/qtile/config.py154
-rwxr-xr-xconfig/qutebrowser/autoconfig.yml10
-rwxr-xr-xconfig/qutebrowser/bookmarks/urls0
-rwxr-xr-xconfig/qutebrowser/config.py47
-rwxr-xr-xconfig/qutebrowser/greasemonkey/yt-ads.js19
-rwxr-xr-xconfig/qutebrowser/quickmarks0
-rwxr-xr-xconfig/rofi/config.rasi64
-rwxr-xr-xconfig/rofi/gruvbox.rasi61
-rwxr-xr-xconfig/rofi/rofi/config.rasi61
-rwxr-xr-xconfig/shell/aliases45
-rwxr-xr-xconfig/shell/exports7
-rwxr-xr-xconfig/shell/shell/aliases53
-rwxr-xr-xconfig/shell/shell/aliases.backup27
-rwxr-xr-xconfig/shell/shell/exports8
-rwxr-xr-xconfig/shell/shell/exports.backup4
-rwxr-xr-xconfig/starship.toml36
-rwxr-xr-xconfig/sway/config131
-rwxr-xr-xconfig/sxhkd/sxhkdrc18
-rwxr-xr-xconfig/systemd/emacsd.service11
-rwxr-xr-xconfig/tmux/tmux.conf67
-rw-r--r--config/waybar-2/config.jsonc27
-rw-r--r--config/waybar-2/style.css42
-rwxr-xr-xconfig/waybar-2/waybar/config.jsonc154
-rwxr-xr-xconfig/waybar-2/waybar/style.css207
-rwxr-xr-xconfig/waybar-2/waybar/window.sh77
-rwxr-xr-xconfig/waybar/config.jsonc107
-rwxr-xr-xconfig/waybar/style.css82
-rwxr-xr-xconfig/wofi/config32
-rwxr-xr-xconfig/wofi/style.css59
-rwxr-xr-xconfig/xmobar/xmobarrc13
-rwxr-xr-xconfig/xmonad/xmonad.hs51
424 files changed, 9726 insertions, 0 deletions
diff --git a/config/alacritty/alacritty.toml b/config/alacritty/alacritty.toml
new file mode 100644
index 0000000..41959d2
--- /dev/null
+++ b/config/alacritty/alacritty.toml
@@ -0,0 +1,16 @@
+[window]
+dimensions = { columns = 100, lines = 25 }
+dynamic_title = true
+[terminal.shell]
+program = "/usr/bin/zsh"
+[font]
+normal = { family = "JetBrains Mono Nerd Font", style = "Regular" }
+size = 13.0
+[cursor]
+style = { shape = "Underline", blinking = "Off" }
+[colors]
+primary = { background = "#121212", foreground = "#e0e0e0" }
+cursor = { cursor = "#e0e0e0", text = "#121212" }
+selection = { background = "#e0e0e0", text = "#121212" }
+normal = { black = "#121212", red = "#d32f2f", green = "#4caf50", yellow = "#ffeb3b", blue = "#2196f3", magenta = "#9c27b0", cyan = "#00bcd4", white = "#e0e0e0" }
+bright = { black = "#757575", red = "#f44336", green = "#8bc34a", yellow = "#ffc107", blue = "#3f51b5", magenta = "#673ab7", cyan = "#009688", white = "#ffffff" }
diff --git a/config/bspwm/bspwmrc b/config/bspwm/bspwmrc
new file mode 100755
index 0000000..e4a1ca9
--- /dev/null
+++ b/config/bspwm/bspwmrc
@@ -0,0 +1,82 @@
+#!/bin/sh
+# my bspwmrc
+
+# desktops
+bspc monitor -d I II III IV V VI VII VIII IX X
+
+# borders
+bspc config focused_border_color "#383838"
+bspc config normal_border_color "#282828"
+bspc config border_width 2
+
+# layout
+bspc config window_gap 10
+bspc config split_ratio 0.5
+bspc config smart_gap true
+
+# focus behavior
+bspc config focus_follows_pointer true
+bspc config click_to_focus false
+bspc config pointer_follows_monitor true
+
+# monitor / window behavior
+bspc config remove_disabled_monitors true
+bspc config auto_cancel true
+bspc config auto_alternate true
+
+# padding
+bspc config bottom_padding 0
+
+
+### {{{ find and stop processes
+
+pidb() {
+ pgrep -x "$1" >/dev/null 2>&1
+}
+
+run() {
+ proc="$1"
+ cmd="$2"
+
+ if ! pidb "$proc"; then
+ sh -c "$cmd" &
+ fi
+}
+
+### }}}
+
+
+### {{{ rerun/start processes
+
+# piss
+run "piss" "piss"
+
+# picom
+run "picom" "picom --backend glx"
+
+# dunst
+run "dunst" "dunst"
+
+# bspbar
+run "bspbar" "bspbar"
+
+# polkit gnome
+run "polkit-gnome-authentication-agent-1" \
+ "/usr/libexec/polkit-gnome-authentication-agent-1"
+
+# xsettingsd
+run "xsettingsd" "xsettingsd"
+
+# pulseaudio
+run "pulseaudio" "pulseaudio --start"
+
+# pipewire
+run "pipewire" "pipewire"
+
+# xtkhd
+run "xtkhd" "xtkhd"
+
+xrandr --output eDP-1 --off
+hsetroot -center "$HOME/Downloads/wall4.png"
+
+### }}}
diff --git a/config/btop/btop.conf b/config/btop/btop.conf
new file mode 100755
index 0000000..43cd05d
--- /dev/null
+++ b/config/btop/btop.conf
@@ -0,0 +1,254 @@
+#? Config file for btop v. 1.4.3
+
+#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
+#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
+color_theme = "dracula"
+
+#* If the theme set background should be shown, set to False if you want terminal background transparency.
+theme_background = False
+
+#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
+truecolor = True
+
+#* Set to true to force tty mode regardless if a real tty has been detected or not.
+#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
+force_tty = False
+
+#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
+#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
+#* Use whitespace " " as separator between different presets.
+#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
+presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
+
+#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
+#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
+vim_keys = True
+
+#* Rounded corners on boxes, is ignored if TTY mode is ON.
+rounded_corners = False
+
+#* Default symbols to use for graph creation, "braille", "block" or "tty".
+#* "braille" offers the highest resolution but might not be included in all fonts.
+#* "block" has half the resolution of braille but uses more common characters.
+#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
+#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
+graph_symbol = "braille"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_cpu = "default"
+
+# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
+graph_symbol_gpu = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_mem = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_net = "default"
+
+# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
+graph_symbol_proc = "default"
+
+#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
+shown_boxes = "cpu mem net proc"
+
+#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
+update_ms = 2000
+
+#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
+#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
+proc_sorting = "cpu lazy"
+
+#* Reverse sorting order, True or False.
+proc_reversed = False
+
+#* Show processes as a tree.
+proc_tree = False
+
+#* Use the cpu graph colors in the process list.
+proc_colors = True
+
+#* Use a darkening gradient in the process list.
+proc_gradient = True
+
+#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
+proc_per_core = False
+
+#* Show process memory as bytes instead of percent.
+proc_mem_bytes = True
+
+#* Show cpu graph for each process.
+proc_cpu_graphs = True
+
+#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
+proc_info_smaps = False
+
+#* Show proc box on left side of screen instead of right.
+proc_left = False
+
+#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
+proc_filter_kernel = False
+
+#* In tree-view, always accumulate child process resources in the parent process.
+proc_aggregate = False
+
+#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
+#* Select from a list of detected attributes from the options menu.
+cpu_graph_upper = "Auto"
+
+#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
+#* Select from a list of detected attributes from the options menu.
+cpu_graph_lower = "Auto"
+
+#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
+show_gpu_info = "Auto"
+
+#* Toggles if the lower CPU graph should be inverted.
+cpu_invert_lower = True
+
+#* Set to True to completely disable the lower CPU graph.
+cpu_single_graph = False
+
+#* Show cpu box at bottom of screen instead of top.
+cpu_bottom = False
+
+#* Shows the system uptime in the CPU box.
+show_uptime = True
+
+#* Show cpu temperature.
+check_temp = True
+
+#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
+cpu_sensor = "Auto"
+
+#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
+show_coretemp = True
+
+#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
+#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
+#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
+#* Example: "4:0 5:1 6:3"
+cpu_core_map = ""
+
+#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
+temp_scale = "celsius"
+
+#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
+base_10_sizes = False
+
+#* Show CPU frequency.
+show_cpu_freq = True
+
+#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
+#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
+clock_format = "%X"
+
+#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
+background_update = True
+
+#* Custom cpu model name, empty string to disable.
+custom_cpu_name = ""
+
+#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
+#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
+disks_filter = ""
+
+#* Show graphs instead of meters for memory values.
+mem_graphs = True
+
+#* Show mem box below net box instead of above.
+mem_below_net = False
+
+#* Count ZFS ARC in cached and available memory.
+zfs_arc_cached = True
+
+#* If swap memory should be shown in memory box.
+show_swap = True
+
+#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
+swap_disk = True
+
+#* If mem box should be split to also show disks info.
+show_disks = True
+
+#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
+only_physical = True
+
+#* Read disks list from /etc/fstab. This also disables only_physical.
+use_fstab = True
+
+#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
+zfs_hide_datasets = False
+
+#* Set to true to show available disk space for privileged users.
+disk_free_priv = False
+
+#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
+show_io_stat = True
+
+#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
+io_mode = False
+
+#* Set to True to show combined read/write io graphs in io mode.
+io_graph_combined = False
+
+#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
+#* Example: "/mnt/media:100 /:20 /boot:1".
+io_graph_speeds = ""
+
+#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
+net_download = 100
+
+net_upload = 100
+
+#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
+net_auto = True
+
+#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
+net_sync = True
+
+#* Starts with the Network Interface specified here.
+net_iface = ""
+
+#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
+base_10_bitrate = "Auto"
+
+#* Show battery stats in top right if battery is present.
+show_battery = True
+
+#* Which battery to use if multiple are present. "Auto" for auto detection.
+selected_battery = "Auto"
+
+#* Show power stats of battery next to charge indicator.
+show_battery_watts = True
+
+#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
+#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
+log_level = "WARNING"
+
+#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
+nvml_measure_pcie_speeds = True
+
+#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
+rsmi_measure_pcie_speeds = True
+
+#* Horizontally mirror the GPU graph.
+gpu_mirror_graph = True
+
+#* Custom gpu0 model name, empty string to disable.
+custom_gpu_name0 = ""
+
+#* Custom gpu1 model name, empty string to disable.
+custom_gpu_name1 = ""
+
+#* Custom gpu2 model name, empty string to disable.
+custom_gpu_name2 = ""
+
+#* Custom gpu3 model name, empty string to disable.
+custom_gpu_name3 = ""
+
+#* Custom gpu4 model name, empty string to disable.
+custom_gpu_name4 = ""
+
+#* Custom gpu5 model name, empty string to disable.
+custom_gpu_name5 = ""
diff --git a/config/btop/themes/coasteen.theme b/config/btop/themes/coasteen.theme
new file mode 100755
index 0000000..52e4152
--- /dev/null
+++ b/config/btop/themes/coasteen.theme
@@ -0,0 +1,89 @@
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]=""
+
+# Main text color
+theme[main_fg]="#f8e8ec"
+
+# Title color for boxes
+theme[title]="#f8e8ec"
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#ff8aa0"
+
+# Background color of selected item in processes box
+theme[selected_bg]="#7b3949"
+
+# Foreground color of selected item in processes box
+theme[selected_fg]="#f8e8ec"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#a56a79"
+
+# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
+theme[graph_text]="#c67090"
+
+# Background color of the percentage meters
+theme[meter_bg]="#a65c6c"
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#ff8aa0"
+
+# Cpu box outline color
+theme[cpu_box]="#d77189"
+
+# Memory/disks box outline color
+theme[mem_box]="#d77189"
+
+# Net up/down box outline color
+theme[net_box]="#d77189"
+
+# Processes box outline color
+theme[proc_box]="#d77189"
+
+# Box divider line and small boxes line color
+theme[div_line]="#6f3b4a"
+
+# Temperature graph colors
+theme[temp_start]="#ff8aa0"
+theme[temp_mid]="#d77189"
+theme[temp_end]="#a65c6c"
+
+# CPU graph colors
+theme[cpu_start]="#ff8aa0"
+theme[cpu_mid]="#d77189"
+theme[cpu_end]="#a65c6c"
+
+# Mem/Disk free meter
+theme[free_start]="#ff8aa0"
+theme[free_mid]="#d77189"
+theme[free_end]="#a65c6c"
+
+# Mem/Disk cached meter
+theme[cached_start]="#ff8aa0"
+theme[cached_mid]="#d77189"
+theme[cached_end]="#a65c6c"
+
+# Mem/Disk available meter
+theme[available_start]="#ff8aa0"
+theme[available_mid]="#d77189"
+theme[available_end]="#a65c6c"
+
+# Mem/Disk used meter
+theme[used_start]="#ff8aa0"
+theme[used_mid]="#d77189"
+theme[used_end]="#a65c6c"
+
+# Download graph colors
+theme[download_start]="#ff8aa0"
+theme[download_mid]="#d77189"
+theme[download_end]="#a65c6c"
+
+# Upload graph colors
+theme[upload_start]="#f19bb4"
+theme[upload_mid]="#d77189"
+theme[upload_end]="#a65c6c"
+
+# Process box color gradient for threads, mem and cpu usage
+theme[process_start]="#ff8aa0"
+theme[process_mid]="#d77189"
+theme[process_end]="#c67090"
diff --git a/config/btop/themes/dracula.theme b/config/btop/themes/dracula.theme
new file mode 100755
index 0000000..5768e5f
--- /dev/null
+++ b/config/btop/themes/dracula.theme
@@ -0,0 +1,89 @@
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]="#282a36"
+
+# Main text color
+theme[main_fg]="#f8f8f2"
+
+# Title color for boxes
+theme[title]="#f8f8f2"
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#6272a4"
+
+# Background color of selected item in processes box
+theme[selected_bg]="#ff79c6"
+
+# Foreground color of selected item in processes box
+theme[selected_fg]="#f8f8f2"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#44475a"
+
+# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
+theme[graph_text]="#f8f8f2"
+
+# Background color of the percentage meters
+theme[meter_bg]="#44475a"
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#bd93f9"
+
+# Cpu box outline color
+theme[cpu_box]="#bd93f9"
+
+# Memory/disks box outline color
+theme[mem_box]="#50fa7b"
+
+# Net up/down box outline color
+theme[net_box]="#ff5555"
+
+# Processes box outline color
+theme[proc_box]="#8be9fd"
+
+# Box divider line and small boxes line color
+theme[div_line]="#44475a"
+
+# Temperature graph colors
+theme[temp_start]="#bd93f9"
+theme[temp_mid]="#ff79c6"
+theme[temp_end]="#ff33a8"
+
+# CPU graph colors
+theme[cpu_start]="#bd93f9"
+theme[cpu_mid]="#8be9fd"
+theme[cpu_end]="#50fa7b"
+
+# Mem/Disk free meter
+theme[free_start]="#ffa6d9"
+theme[free_mid]="#ff79c6"
+theme[free_end]="#ff33a8"
+
+# Mem/Disk cached meter
+theme[cached_start]="#b1f0fd"
+theme[cached_mid]="#8be9fd"
+theme[cached_end]="#26d7fd"
+
+# Mem/Disk available meter
+theme[available_start]="#ffd4a6"
+theme[available_mid]="#ffb86c"
+theme[available_end]="#ff9c33"
+
+# Mem/Disk used meter
+theme[used_start]="#96faaf"
+theme[used_mid]="#50fa7b"
+theme[used_end]="#0dfa49"
+
+# Download graph colors
+theme[download_start]="#bd93f9"
+theme[download_mid]="#50fa7b"
+theme[download_end]="#8be9fd"
+
+# Upload graph colors
+theme[upload_start]="#8c42ab"
+theme[upload_mid]="#ff79c6"
+theme[upload_end]="#ff33a8"
+
+# Process box color gradient for threads, mem and cpu usage
+theme[process_start]="#50fa7b"
+theme[process_mid]="#59b690"
+theme[process_end]="#6272a4"
diff --git a/config/btop/themes/gruvbox.theme b/config/btop/themes/gruvbox.theme
new file mode 100755
index 0000000..8cd9d37
--- /dev/null
+++ b/config/btop/themes/gruvbox.theme
@@ -0,0 +1,92 @@
+#Bashtop gruvbox (https://github.com/morhetz/gruvbox) theme
+#by BachoSeven
+
+# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255"
+# example for white: "#FFFFFF", "#ff" or "255 255 255".
+
+# All graphs and meters can be gradients
+# For single color graphs leave "mid" and "end" variable empty.
+# Use "start" and "end" variables for two color gradient
+# Use "start", "mid" and "end" for three color gradient
+
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]="#1d2021"
+
+# Main text color
+theme[main_fg]="#a89984"
+
+# Title color for boxes
+theme[title]="#ebdbb2"
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#d79921"
+
+# Background color of selected items
+theme[selected_bg]="#282828"
+
+# Foreground color of selected items
+theme[selected_fg]="#fabd2f"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#282828"
+
+# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
+theme[graph_text]="#585858"
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#98971a"
+
+# Cpu box outline color
+theme[cpu_box]="#a89984"
+
+# Memory/disks box outline color
+theme[mem_box]="#a89984"
+
+# Net up/down box outline color
+theme[net_box]="#a89984"
+
+# Processes box outline color
+theme[proc_box]="#a89984"
+
+# Box divider line and small boxes line color
+theme[div_line]="#a89984"
+
+# Temperature graph colors
+theme[temp_start]="#458588"
+theme[temp_mid]="#d3869b"
+theme[temp_end]="#fb4394"
+
+# CPU graph colors
+theme[cpu_start]="#b8bb26"
+theme[cpu_mid]="#d79921"
+theme[cpu_end]="#fb4934"
+
+# Mem/Disk free meter
+theme[free_start]="#4e5900"
+theme[free_mid]=""
+theme[free_end]="#98971a"
+
+# Mem/Disk cached meter
+theme[cached_start]="#458588"
+theme[cached_mid]=""
+theme[cached_end]="#83a598"
+
+# Mem/Disk available meter
+theme[available_start]="#d79921"
+theme[available_mid]=""
+theme[available_end]="#fabd2f"
+
+# Mem/Disk used meter
+theme[used_start]="#cc241d"
+theme[used_mid]=""
+theme[used_end]="#fb4934"
+
+# Download graph colors
+theme[download_start]="#3d4070"
+theme[download_mid]="#6c71c4"
+theme[download_end]="#a3a8f7"
+
+# Upload graph colors
+theme[upload_start]="#701c45"
+theme[upload_mid]="#b16286"
+theme[upload_end]="#d3869b"
diff --git a/config/btop/themes/kyli0x.theme b/config/btop/themes/kyli0x.theme
new file mode 100755
index 0000000..c955287
--- /dev/null
+++ b/config/btop/themes/kyli0x.theme
@@ -0,0 +1,92 @@
+#Bashtop Kyli0x Theme
+#by Kyli0x <kyli0x@protonmail.ch>
+
+# Main background, empty for terminal default, need to be empty if you want transparent background
+theme[main_bg]="#222222"
+
+# Main text color
+theme[main_fg]="#e8f6f5"
+
+# Title color for boxes
+theme[title]="#e8f6f5"
+
+# Highlight color for keyboard shortcuts
+theme[hi_fg]="#21d6c9"
+
+# Background color of selected item in processes box
+theme[selected_bg]="#1aaba0"
+
+# Foreground color of selected item in processes box
+theme[selected_fg]="#e8f6f5"
+
+# Color of inactive/disabled text
+theme[inactive_fg]="#5ec4bc"
+
+# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
+theme[graph_text]="#ba1a84"
+
+# Background color of the percentage meters
+theme[meter_bg]="#5ec4bc"
+
+# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
+theme[proc_misc]="#21d6c9"
+
+# Cpu box outline color
+theme[cpu_box]="#d486d4"
+
+# Memory/disks box outline color
+theme[mem_box]="#d486d4"
+
+# Net up/down box outline color
+theme[net_box]="#d486d4"
+
+# Processes box outline color
+theme[proc_box]="#d486d4"
+
+# Box divider line and small boxes line color
+theme[div_line]="#80638e"
+
+# Temperature graph colors
+theme[temp_start]="#21d6c9"
+theme[temp_mid]="#1aaba0"
+theme[temp_end]="#5ec4bc"
+
+# CPU graph colors
+theme[cpu_start]="#21d6c9"
+theme[cpu_mid]="#1aaba0"
+theme[cpu_end]="#5ec4bc"
+
+# Mem/Disk free meter
+theme[free_start]="#21d6c9"
+theme[free_mid]="#1aaba0"
+theme[free_end]="#5ec4bc"
+
+# Mem/Disk cached meter
+theme[cached_start]="#21d6c9"
+theme[cached_mid]="#1aaba0"
+theme[cached_end]="#5ec4bc"
+
+# Mem/Disk available meter
+theme[available_start]="#21d6c9"
+theme[available_mid]="#1aaba0"
+theme[available_end]="#5ec4bc"
+
+# Mem/Disk used meter
+theme[used_start]="#21d6c9"
+theme[used_mid]="#1aaba0"
+theme[used_end]="#5ec4bc"
+
+# Download graph colors
+theme[download_start]="#21d6c9"
+theme[download_mid]="#1aaba0"
+theme[download_end]="#5ec4bc"
+
+# Upload graph colors
+theme[upload_start]="#ec95ec"
+theme[upload_mid]="#1aaba0"
+theme[upload_end]="#5ec4bc"
+
+# Process box color gradient for threads, mem and cpu usage
+theme[process_start]="#21d6c9"
+theme[process_mid]="#1aaba0"
+theme[process_end]="#ba1a84"
diff --git a/config/dunst/dunst/dunstrc b/config/dunst/dunst/dunstrc
new file mode 100755
index 0000000..768ba77
--- /dev/null
+++ b/config/dunst/dunst/dunstrc
@@ -0,0 +1,48 @@
+[global]
+# Basic settings
+font = Fira Code 10
+geometry = "300x100-10+55" # 10px from right edge, 55px from top
+separator_height = 2
+frame_width = 4
+#corner_radius = 8
+grow_direction = up
+
+[urgency_low]
+background = "#222222" # normbgcolor
+foreground = "#bbbbbb" # normfgcolor
+frame_color = "#444444" # normbordercolor
+timeout = 5
+icon_position = left
+
+[urgency_normal]
+background = "#722F37" # selbgcolor wine red yay!
+foreground = "#eeeeee" # selfgcolor bright text
+frame_color = "#722F37" # selbordercolor same wine red frame
+timeout = 8
+icon_position = left
+
+[urgency_critical]
+background = "#7B2D33" # slightly brighter wine red for critical
+foreground = "#eeeeee"
+frame_color = "#7B2D33"
+timeout = 0 # stays until dismissed
+icon_position = left
+
+[frame]
+# subtle shadow for modern look
+shadow = false
+shadow_offset_x = -5
+shadow_offset_y = -5
+#shadow_radius = 12
+shadow_opacity = 0.7
+shadow_color = "#000000"
+
+[format]
+# tweak layout to be modern and clean
+title = "%s"
+body = "%s"
+
+[mouse]
+# allow click to close
+close_on_click = true
+
diff --git a/config/dunst/dunstrc b/config/dunst/dunstrc
new file mode 100755
index 0000000..84722cc
--- /dev/null
+++ b/config/dunst/dunstrc
@@ -0,0 +1,48 @@
+[global]
+# Basic settings
+font = Fira Code 10
+geometry = "300x100-10+55" # 10px from right edge, 55px from top
+separator_height = 2
+frame_width = 4
+#corner_radius = 8
+grow_direction = up
+
+[urgency_low]
+background = "#222222" # normbgcolor
+foreground = "#bbbbbb" # normfgcolor
+frame_color = "#444444" # normbordercolor
+timeout = 5
+icon_position = left
+
+[urgency_normal]
+background = "#DB940A" # selbgcolor wine red yay!
+foreground = "#222222" # selfgcolor bright text
+frame_color = "#DB940A" # selbordercolor same wine red frame
+timeout = 8
+icon_position = left
+
+[urgency_critical]
+background = "#DB940A" # slightly brighter wine red for critical
+foreground = "#eeeeee"
+frame_color = "#DB940A"
+timeout = 0 # stays until dismissed
+icon_position = left
+
+[frame]
+# subtle shadow for modern look
+shadow = false
+shadow_offset_x = -5
+shadow_offset_y = -5
+#shadow_radius = 12
+shadow_opacity = 0.7
+shadow_color = "#000000"
+
+[format]
+# tweak layout to be modern and clean
+title = "%s"
+body = "%s"
+
+[mouse]
+# allow click to close
+close_on_click = true
+
diff --git a/config/dunst/dunstrc~ b/config/dunst/dunstrc~
new file mode 100755
index 0000000..3c92181
--- /dev/null
+++ b/config/dunst/dunstrc~
@@ -0,0 +1,48 @@
+[global]
+# Basic settings
+font = Fira Code 10
+geometry = "300x100-10+55" # 10px from right edge, 55px from top
+separator_height = 2
+frame_width = 4
+#corner_radius = 8
+grow_direction = up
+
+[urgency_low]
+background = "#222222" # normbgcolor
+foreground = "#bbbbbb" # normfgcolor
+frame_color = "#444444" # normbordercolor
+timeout = 5
+icon_position = left
+
+[urgency_normal]
+background = "#DB940A" # selbgcolor wine red yay!
+foreground = "#eeeeee" # selfgcolor bright text
+frame_color = "#DB940A" # selbordercolor same wine red frame
+timeout = 8
+icon_position = left
+
+[urgency_critical]
+background = "#DB940A" # slightly brighter wine red for critical
+foreground = "#eeeeee"
+frame_color = "#DB940A"
+timeout = 0 # stays until dismissed
+icon_position = left
+
+[frame]
+# subtle shadow for modern look
+shadow = false
+shadow_offset_x = -5
+shadow_offset_y = -5
+#shadow_radius = 12
+shadow_opacity = 0.7
+shadow_color = "#000000"
+
+[format]
+# tweak layout to be modern and clean
+title = "%s"
+body = "%s"
+
+[mouse]
+# allow click to close
+close_on_click = true
+
diff --git a/config/eww/eww.scss b/config/eww/eww.scss
new file mode 100755
index 0000000..3975a93
--- /dev/null
+++ b/config/eww/eww.scss
@@ -0,0 +1,63 @@
+* {
+ all: unset;
+ background: transparent;
+ font-family: "JetBrainsMono Nerd Font";
+ border-radius: 10px;
+}
+
+$bg: #111111;
+$bg1: #111111;
+$bg2: #26233a;
+$fg: #ebbcba;
+$fgdim: #6e6a86;
+$accent: #9ccfd8;
+$border: #ebbcba;
+
+.container {
+ background-color: $bg1;
+ border: 1px solid $border;
+ color: $fg;
+ border-radius: 10px;
+ padding: 6px;
+ opacity: 0.9;
+}
+
+.button-label, .label {
+ font-size: 24px;
+ font-weight: bold;
+ color: $fg;
+}
+
+.completelytrans {
+ background: none;
+}
+
+.calendar-label {
+ font-size: 16px;
+ font-weight: bold;
+ color: $fg;
+}
+
+window {
+ all: unset;
+ background: transparent;
+}
+
+calendar, calendar.view, calendar.header {
+ all: unset;
+ background-color: $bg;
+ color: $fgdim;
+ font-size: 18px;
+ border-radius: 10px;
+}
+
+calendar:indeterminate {
+ color: #665c54;
+}
+
+calendar:selected {
+ background-color: $bg2;
+ border: 1px solid $accent;
+ color: $fg;
+ border-radius: 4px;
+}
diff --git a/config/eww/eww.yuck b/config/eww/eww.yuck
new file mode 100755
index 0000000..1ab7c4e
--- /dev/null
+++ b/config/eww/eww.yuck
@@ -0,0 +1,58 @@
+(include "eww_widgets.yuck")
+
+(defwindow calendar
+ :monitor 'HDMI-A-1'
+ :stacking "fg"
+ :geometry (geometry :x "1600" :y "810" :width "320" :height "250" :anchor "top right")
+ (calendar))
+
+(defwindow year
+ :monitor 'HDMI-A-1'
+ :stacking "bg"
+ :geometry (geometry :x "15" :y "15" :width "100" :height "100" :anchor "top right")
+ (year))
+
+(defwindow month
+ :monitor 'HDMI-A-1'
+ :stacking "bg"
+ :geometry (geometry :x "15" :y "125" :width "100" :height "100" :anchor "top right")
+ (month))
+
+(defwindow day
+ :monitor 'HDMI-A-1'
+ :stacking "bg"
+ :geometry (geometry :x "15" :y "235" :width "100" :height "100" :anchor "top right")
+ (day))
+
+(defwindow daytype
+ :monitor 'HDMI-A-1'
+ :stacking "bg"
+ :geometry (geometry :x "1805" :y "345" :width "100" :height "100" :achor "top right")
+ (daytype))
+
+(defwindow gif1
+ :monitor 'HDMI-A-1'
+ :windowtype "dock"
+ :stacking "bg"
+ :namespace "eww"
+ :geometry (geometry
+ :x "30px"
+ :y "30px"
+ :width "70px"
+ :height "70px"
+ :anchor "bottom right")
+ (gif1))
+
+(defwindow gif2
+ :monitor 'HDMI-A-1'
+ :windowtype "dock"
+ :stacking "bg"
+ :namespace "eww"
+ :geometry (geometry
+ :x "30px"
+ :y "250px"
+ :width "70px"
+ :height "70px"
+ :anchor "bottom right")
+ (gif2))
+
diff --git a/config/eww/eww_vars.yuck b/config/eww/eww_vars.yuck
new file mode 100755
index 0000000..35d807b
--- /dev/null
+++ b/config/eww/eww_vars.yuck
@@ -0,0 +1,4 @@
+(defpoll DAY :interval "1s" '~/.config/eww/scripts/day_format.sh')
+(defpoll MONTH :interval "1s" '~/.config/eww/scripts/month_format.sh')
+(defpoll YEAR :interval "1s" '~/.config/eww/scripts/year_format.sh')
+(defpoll DAYTYPE :interval "1s" '~/.config/eww/scripts/daytype.sh')
diff --git a/config/eww/eww_widgets.yuck b/config/eww/eww_widgets.yuck
new file mode 100755
index 0000000..d3fb0a0
--- /dev/null
+++ b/config/eww/eww_widgets.yuck
@@ -0,0 +1,21 @@
+(include "eww_vars.yuck")
+
+(defwidget day []
+ (box :height "100" :width "100" :halign "center" :valign "center" :class "container"
+ (label :class "label" :text DAY)))
+(defwidget month []
+ (box :height "100" :width "100" :halign "center" :valign "center" :class "container"
+ (label :class "label" :text MONTH)))
+(defwidget year []
+ (box :height "100" :width "100" :halign "center" :valign "center" :class "container"
+ (label :class "label" :text YEAR)))
+(defwidget daytype []
+ (box :height "100" :width "100" :halign "center" :valign "center" :class "container"
+ (label :class "label" :text DAYTYPE)))
+(defwidget gif1 []
+ (box :halign "center" :valign "center" :class "container"
+ (image :path 'images/gif1.gif')))
+
+(defwidget gif2 []
+ (box :halign "center" :valign "center" :class "container"
+ (image :path 'images/gif2.gif')))
diff --git a/config/eww/images/gif1.gif b/config/eww/images/gif1.gif
new file mode 100755
index 0000000..013df71
--- /dev/null
+++ b/config/eww/images/gif1.gif
Binary files differ
diff --git a/config/eww/images/gif2.gif b/config/eww/images/gif2.gif
new file mode 100755
index 0000000..f728b4f
--- /dev/null
+++ b/config/eww/images/gif2.gif
Binary files differ
diff --git a/config/eww/scripts/calendar.sh b/config/eww/scripts/calendar.sh
new file mode 100755
index 0000000..ada469a
--- /dev/null
+++ b/config/eww/scripts/calendar.sh
@@ -0,0 +1,2 @@
+#!bash
+cal -m
diff --git a/config/eww/scripts/day_format.sh b/config/eww/scripts/day_format.sh
new file mode 100755
index 0000000..a3e715a
--- /dev/null
+++ b/config/eww/scripts/day_format.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+day_of_month=$(date +"%d")
+day_of_month=$(echo $day_of_month | sed 's/^0*//')
+if [[ $day_of_month -ge 11 && $day_of_month -le 13 ]]; then
+ suffix="th"
+else
+ case $((day_of_month % 10)) in
+ 1) suffix="st" ;;
+ 2) suffix="nd" ;;
+ 3) suffix="rd" ;;
+ *) suffix="th" ;;
+ esac
+fi
+echo "${day_of_month}${suffix}"
diff --git a/config/eww/scripts/daytype.sh b/config/eww/scripts/daytype.sh
new file mode 100755
index 0000000..aad1cdc
--- /dev/null
+++ b/config/eww/scripts/daytype.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+day_type=$(date +"%a")
+echo "$day_type"
diff --git a/config/eww/scripts/month_format.sh b/config/eww/scripts/month_format.sh
new file mode 100755
index 0000000..2eecb3f
--- /dev/null
+++ b/config/eww/scripts/month_format.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+month=$(date +"%b")
+echo "$month"
diff --git a/config/eww/scripts/start.sh b/config/eww/scripts/start.sh
new file mode 100755
index 0000000..e032918
--- /dev/null
+++ b/config/eww/scripts/start.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Reload/Open eww
+eww kill
+eww daemon
+
+eww open year
+eww open month
+eww open day
diff --git a/config/eww/scripts/year_format.sh b/config/eww/scripts/year_format.sh
new file mode 100755
index 0000000..d8016be
--- /dev/null
+++ b/config/eww/scripts/year_format.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+year=$(date +"%Y")
+echo "$year"
diff --git a/config/foot/foot.ini b/config/foot/foot.ini
new file mode 120000
index 0000000..875ed93
--- /dev/null
+++ b/config/foot/foot.ini
@@ -0,0 +1 @@
+/nix/store/ya9248ng717qf0ncbn6sbs9bai66g5xn-home-manager-files/.config/foot/foot.ini \ No newline at end of file
diff --git a/config/foot/foot.ini.home-backup b/config/foot/foot.ini.home-backup
new file mode 100755
index 0000000..351c040
--- /dev/null
+++ b/config/foot/foot.ini.home-backup
@@ -0,0 +1,40 @@
+font=Maple Mono:size=14
+pad=4x4
+
+[colors]
+alpha=1.0
+background=111111
+
+[colors]
+foreground=cdd6f4
+background=1e1e2e
+
+regular0=45475a
+regular1=f38ba8
+regular2=a6e3a1
+regular3=f9e2af
+regular4=89b4fa
+regular5=f5c2e7
+regular6=94e2d5
+regular7=bac2de
+
+bright0=585b70
+bright1=f38ba8
+bright2=a6e3a1
+bright3=f9e2af
+bright4=89b4fa
+bright5=f5c2e7
+bright6=94e2d5
+bright7=a6adc8
+
+16=fab387
+17=f5e0dc
+
+selection-foreground=cdd6f4
+selection-background=414356
+
+search-box-no-match=11111b f38ba8
+search-box-match=cdd6f4 313244
+
+jump-labels=11111b fab387
+urls=89b4fa
diff --git a/config/home-manager/README.md b/config/home-manager/README.md
new file mode 100755
index 0000000..edd92b3
--- /dev/null
+++ b/config/home-manager/README.md
@@ -0,0 +1,4 @@
+flakes are auto-generated by nix
+
+
+by the way; these are for my machine :3 they're poorly written i just wanted to save them somewhere
diff --git a/config/home-manager/flake.lock b/config/home-manager/flake.lock
new file mode 100755
index 0000000..0935d23
--- /dev/null
+++ b/config/home-manager/flake.lock
@@ -0,0 +1,47 @@
+{
+ "nodes": {
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1748227609,
+ "narHash": "sha256-SaSdslyo6UGDpPUlmrPA4dWOEuxCy2ihRN9K6BnqYsA=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "d23d20f55d49d8818ac1f1b2783671e8a6725022",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1748190013,
+ "narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "62b852f6c6742134ade1abdd2a21685fd617a291",
+ "type": "github"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "ref": "nixos-unstable",
+ "type": "indirect"
+ }
+ },
+ "root": {
+ "inputs": {
+ "home-manager": "home-manager",
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/config/home-manager/flake.nix b/config/home-manager/flake.nix
new file mode 100755
index 0000000..2030861
--- /dev/null
+++ b/config/home-manager/flake.nix
@@ -0,0 +1,26 @@
+{
+ description = "Home Manager configuration of avery";
+
+ inputs = {
+ nixpkgs.url = "nixpkgs/nixos-unstable";
+ home-manager = {
+ url = "github:nix-community/home-manager";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs =
+ { nixpkgs, home-manager, ... }:
+ let
+ system = "x86_64-linux";
+ pkgs = nixpkgs.legacyPackages.${system};
+ in
+ {
+ homeConfigurations."avery" = home-manager.lib.homeManagerConfiguration {
+ inherit pkgs;
+
+ modules = [ ./home.nix ];
+
+ };
+ };
+}
diff --git a/config/home-manager/home.nix b/config/home-manager/home.nix
new file mode 100755
index 0000000..08a103c
--- /dev/null
+++ b/config/home-manager/home.nix
@@ -0,0 +1,195 @@
+# _ _
+#| |__ ___ _ __ ___ ___ _ __ (_)_ __
+#| '_ \ / _ \| '_ ` _ \ / _ \ | '_ \| \ \/ /
+#| | | | (_) | | | | | | __/_| | | | |> <
+#|_| |_|\___/|_| |_| |_|\___(_)_| |_|_/_/\_\
+#Coast's ~/.config/home-manager/home.nix
+{ config, pkgs, ... }:
+{
+ home.username = "avery";
+ home.homeDirectory = "/home/avery";
+ home.stateVersion = "25.05";
+ home.packages = with pkgs; [
+ bat cowsay bat cmatrix bat cava cbonsai bat ksh bat tree hyfetch qutebrowser xonsh elvish openjdk btop htop cpufetch lm_sensors dysk dogdns ];
+ home.file = {
+ };
+ home.sessionVariables = {
+ EDITOR = "emacs";
+ BROWSER = "brave";
+ };
+ programs.eza = {
+ enable = true;
+};
+ programs.bash = {
+ enable = true;
+ initExtra = ''
+ if [ "$(id -u)" = 0 ]; then PS1ICON='#'; else PS1ICON='$'; fi
+PS1='\[\e[38;2;254;128;25m\][\[\e[38;2;235;219;178m\]\u\[\e[38;2;200;200;200m\]@\[\e[38;2;131;165;152m\]coast \[\e[38;2;235;219;178m\]\w\[\e[38;2;254;128;25m\]]'"$PS1ICON"'\[\e[0m\] '
+ source "$HOME/.config/shell/aliases"
+ source "$HOME/.config/shell/exports"
+ '';
+};
+ home.file.".config/bat/config".text = ''
+ --theme="Nord"
+ --style="numbers,changes,grid"
+ --paging=auto
+ '';
+#vim conf
+ home.file.".vimrc".text = ''
+ set number
+ set shiftwidth=4
+ set tabstop=4
+ set wrap
+ set cursorline
+ set linebreak
+ set termguicolors
+ syntax on
+ filetype plugin indent on
+ set ignorecase
+ set smartcase
+ set hlsearch
+ set incsearch
+ set autoindent
+ set expandtab
+ map <F^> :setlocal spell! spelllang=en_us<CR>
+ nnoremap <C-n> :NERDTreeToggle<CR>
+ call plug#begin('~/.vim/plugged')
+ Plug 'tpope/vim-sensible'
+ Plug 'preservim/nerdtree'
+ Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
+ Plug 'junegunn/fzf.vim'
+ Plug 'vim-airline/vim-airline'
+ Plug 'vim-airline/vim-airline-themes'
+ call plug#end()
+ set background=dark
+ '';
+ home.file.".config/shell/exports".text = ''
+ export PATH=$HOME/.local/bin:$PATH
+ export PATH=$HOME/.luarocks/bin:$PATH
+ if [ -n "$ZSH_VERSION" ]; then
+ export ZSH="/home/avery/.oh-my-zsh"
+ fi
+ export NIXPKGS_ALLOW_UNFREE=1
+ export EDITOR="emacs"
+ '';
+ home.file.".config/shell/aliases".text = ''
+ #!/bin/sh
+ #general aliases
+ alias xi="doas xbps-install -S $1"
+ alias nf="clear && fastfetch"
+ alias ascdis="fastfetch --logo $1"
+ alias forge="su forgejo"
+ alias emoji="cat ~/.local/share/emoji | grep $1"
+ alias cst="emacs ~/.suckless/st/config.h"
+ alias las="ls"
+ alias lasa="ls -a"
+ alias lasal="ls -al"
+ alias anal="ls -ahl"
+ alias resmacs="systemctl --user restart emacsd"
+ alias smi="nvidia-smi"
+ alias src="source ~/.zshrc"
+ alias bat="sb-battery"
+ alias battery="sb-battery"
+ alias vimrc="vim .vimrc"
+ alias ri="ranger"
+ alias rim="ranger"
+ alias quit="exit"
+ alias :q="exit"
+ alias :q!="exit"
+ alias :Q="exit"
+ alias :Q!="exit"
+ alias :quit="exit"
+ alias :quit!="exit"
+ alias :QUIT="exit"
+ alias :QUIT!="exit"
+ alias q="exit"
+ alias fnl="fennel"
+ alias "push"="git push -u origin main"
+ alias irc="irssi"
+ alias hsw="home-manager switch --flake ~/.config/home-manager"
+ alias hsc="emacs ~/.config/home-manager/home.nix"
+ alias yell="echo"
+ alias chm="ecop cat ~/.config/home-manager/home.nix"
+ if [ -n "$ZSH_VERSION" ]; then
+ alias ed="ed -p '%: '"
+ else
+ alias ed="ed -p '$: '"
+ fi
+ alias weather="curl wttr.in/masjedsoleyman"
+ #typo/shortcut
+ alias c="clear"
+ alias cear="clear"
+ alias "cd.."="cd .."
+ alias claer="clear"
+ alias claer="clear"
+ alias clare="clear"
+ alias cleae="clear"
+ alias clera="clear"
+ alias hotp="htop"
+ '';
+ home.file.".zshrc".text = ''
+ #!/usr/bin/zsh
+ HISTFILE=$HOME/.cache/zsh/history
+ SAVEHIST=100000000
+ HISTSIZE=$SAVEHIST
+ setopt appendhistory
+ #tab completion
+ autoload -U compinit
+ zstyle ':completion:*' menu select
+ zmodload zsh/complist
+ compinit
+ _comp_options+=(globdots)
+ #oh my zsh
+ ZSH_THEME="gentoo"
+ plugins=(git)
+ export ZSH="$HOME/.oh-my-zsh"
+ source $ZSH/oh-my-zsh.sh
+ #eval
+ eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
+ #source
+ source "$HOME/.config/shell/aliases"
+ source "$HOME/.config/shell/exports"
+ source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
+ fpath=(/usr/share/zsh/site-functions $fpath)
+ source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+ #colors
+ autoload -U colors && colors
+ setopt prompt_subst
+ #prompt
+ [ "$(id -u)" = 0 ] && PS1ICON="#" || PS1ICON='%'
+ PROMPT='%{$(echo -e "\e[38;2;254;128;25m")%}[%{$(echo -e "\e[38;2;235;219;178m")%}%n%{$(echo -e "\e[38;2;200;200;200m")%}@%{$(echo -e "\e[38;2;131;165;152m")%}coast %{$(echo -e "\e[38;2;235;219;178m")%}%~%{$(echo -e "\e[38;2;254;128;25m")%}]%$PS1ICON%{$(echo -e "\e[0m")%} '
+ '';
+
+ programs.alacritty = {
+ enable = true;
+ settings = {
+ window = {
+ padding = {
+ x = 4;
+ y = 4;
+ };
+ decorations = "transparent";
+ blur = true;
+ opacity = 0.9;
+ };
+ font = {
+ normal = {
+ family = "monospace";
+ };
+ size = 9;
+ };
+ colors = {
+# primary = {
+# background = "0x1e1e2e";
+# foreground = "0xcdd6f4";
+# };
+ cursor = {
+ text = "0x1e1e2e";
+ cursor = "0xcdd6f4";
+ };
+ };
+ };
+ };
+
+ programs.home-manager.enable = true;
+}
diff --git a/config/hypr/hypridle.conf b/config/hypr/hypridle.conf
new file mode 100644
index 0000000..8874a43
--- /dev/null
+++ b/config/hypr/hypridle.conf
@@ -0,0 +1,14 @@
+general {
+ lock_cmd = pidof hyprlock || hyprlock
+}
+
+listener {
+ timeout = 300
+ on-timeout = hyprlock
+}
+
+listener {
+ timeout = 600
+ on-timeout = hyprctl dispatch dpms off
+ on-resume = hyprctl dispatch dpms on
+}
diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf
new file mode 100755
index 0000000..8efd6ad
--- /dev/null
+++ b/config/hypr/hyprland.conf
@@ -0,0 +1,217 @@
+#monitor=DP-1,1920x1080@75,auto,1
+monitor=HDMI-A-1,1920x1080@100.00,auto,1
+
+hide_on_fullscreen = true
+
+$terminal = footclient
+$menu = rofi -show drun -config /home/coast/.config/rofi/config.rasi
+$webBrowser = firefox-bin
+$discordApp = vesktop-bin --proxy-server="socks5://127.0.0.1:65000"
+$restartWaybar = pkill waybar; waybar&disown
+$fileManager = pcmanfm
+
+exec-once = hyprctl setcursor Adwaita 24 &
+exec-once = wbg /home/coast/Pictures/walls/wallhaven-yq5dmg_1920x1080.png &
+exec-once = hypridle &
+exec-once = hyprpm reload -n;
+exec-once = dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=Hyprland
+exec-once = gnome-keyring-daemon --start --components=secrets
+exec-once = waybar &
+exec-once = mpd ~/.mpdconf &
+exec-once = mpc add /;
+
+exec-once = foot --server;
+
+exec-once = flatpak override --env=GTK_THEME=Catppuccin-B-MB-Dark --user;
+
+env = XCURSOR_SIZE,24
+env = HYPRCURSOR_SIZE,24
+
+general {
+ gaps_in = 5
+ gaps_out = 15
+ border_size = 2
+ col.active_border = rgba(6c6c9dee) rgba(1e1e2eee) 45deg
+ col.inactive_border = rgba(1e1e2eaa)
+ resize_on_border = false
+ allow_tearing = false
+ layout = master
+}
+
+decoration {
+ rounding = 10
+ active_opacity = 1.0
+ inactive_opacity = 1.0
+ shadow {
+ enabled = true
+ range = 4
+ render_power = 3
+ color = rgba(1a1a1aee)
+ }
+ blur {
+ enabled = true
+ size = 3
+ passes = 1
+ vibrancy = 0.1696
+ new_optimizations = true
+ }
+}
+
+animations {
+ enabled = yes
+ bezier = shot, 0.2, 1, 0.3, 1
+ bezier = swipe, 0.6, 0, 0.4, 1
+ bezier = bounce, 0.1, 1.1, 0.3, 1
+ animation = windows, 1, 3, bounce, popin 80%
+ animation = windowsIn, 1, 3, bounce, popin 80%
+ animation = windowsOut, 1, 2, shot, popin 80%
+ animation = border, 1, 2, default
+ animation = fade, 1, 2, default
+ animation = layers, 1, 4, swipe, slide top
+ animation = layersIn, 1, 4, swipe, slide top
+ animation = layersOut, 1, 2, swipe, slide top
+ animation = workspaces, 1, 3, swipe, slide
+}
+
+master {
+ new_status = slave
+}
+
+misc {
+ force_default_wallpaper = 0
+ disable_hyprland_logo = true
+}
+
+input {
+ kb_layout = us
+ follow_mouse = 1
+ sensitivity = 0
+}
+
+$mainMod = SUPER
+
+bind = $mainMod, Return, exec, $terminal
+bind = $mainMod, S, killactive,
+bind = $mainMod, M, exec, killall eww; eww daemon && eww open bar
+bind = $mainMod SHIFT, Q, exit
+bind = $mainMod, Space, togglefloating
+bind = $mainMod, Space, resizeactive, exact 1000 800
+bind = $mainMod, Space, centerwindow
+bind = $mainMod, R, exec, $menu
+
+bind = $mainMod, H, movefocus, l
+bind = $mainMod, L, movefocus, r
+bind = $mainMod, K, movefocus, u
+bind = $mainMod, J, movefocus, d
+
+bind = $mainMod SHIFT, H, movewindow, l
+bind = $mainMod SHIFT, L, movewindow, r
+bind = $mainMod SHIFT, K, movewindow, u
+bind = $mainMod SHIFT, J, movewindow, d
+
+binde = $mainMod ALT, H, resizeactive, -30 0
+binde = $mainMod ALT, L, resizeactive, 30 0
+binde = $mainMod ALT, K, resizeactive, 0 -30
+binde = $mainMod ALT, J, resizeactive, 0 30
+
+binde = $mainMod, left, moveactive, -40 0
+binde = $mainMod, right, moveactive, 40 0
+binde = $mainMod, up, moveactive, 0 -40
+binde = $mainMod, down, moveactive, 0 40
+
+binde = $mainMod SHIFT, left, resizeactive, -40 0
+binde = $mainMod SHIFT, right, resizeactive, 40 0
+binde = $mainMod SHIFT, up, resizeactive, 0 -40
+binde = $mainMod SHIFT, down, resizeactive, 0 40
+
+bind = $mainMod, Backslash, centerwindow,
+
+workspace = 2, monitor:HDMI-A-1
+
+bind = $mainMod, 1, workspace, 1
+bind = $mainMod, 2, workspace, 2
+bind = $mainMod, 3, workspace, 3
+bind = $mainMod, 4, workspace, 4
+bind = $mainMod, 5, workspace, 5
+bind = $mainMod, 6, workspace, 6
+bind = $mainMod, 7, workspace, 7
+bind = $mainMod, 8, workspace, 8
+bind = $mainMod, 9, workspace, 9
+
+bind = $mainMod SHIFT, 1, movetoworkspace, 1
+bind = $mainMod SHIFT, 2, movetoworkspace, 2
+bind = $mainMod SHIFT, 3, movetoworkspace, 3
+bind = $mainMod SHIFT, 4, movetoworkspace, 4
+bind = $mainMod SHIFT, 5, movetoworkspace, 5
+bind = $mainMod SHIFT, 6, movetoworkspace, 6
+bind = $mainMod SHIFT, 7, movetoworkspace, 7
+bind = $mainMod SHIFT, 8, movetoworkspace, 8
+bind = $mainMod SHIFT, 9, movetoworkspace, 9
+
+bind = $mainMod, C, togglespecialworkspace, magic
+bind = $mainMod SHIFT, S, exec, grim -g "$(slurp)" - | wl-copy
+
+bind = $mainMod CONTROL, L, exec, hyprlock
+
+bind = $mainMod SHIFT, B, exec, $webBrowser
+bind = $mainMod SHIFT, V, exec, $discordApp
+bind = $mainMod, F, exec, $fileManager
+
+bindm = $mainMod, mouse:272, movewindow
+bindm = $mainMod, mouse:273, resizewindow
+
+bind = $mainMod SHIFT, P, exec, $restartWaybar
+
+plugin {
+ hyprbars {
+ enabled = true
+
+ bar_height = 25
+ bar_color = rgba(1e1e2eaa)
+ bar_blur = true
+
+ bar_title_enabled = true
+ bar_text_font = "JetBrainsMono Nerd Font"
+ bar_text_size = 12
+ bar_text_align = center
+ col.text = rgba(ffffffdd)
+
+ bar_buttons_alignment = left
+ bar_padding = 10
+ bar_button_padding = 6
+ icon_on_hover = false
+
+ hyprbars-button = rgb(ff5f57), 14, , hyprctl dispatch killactive
+ hyprbars-button = rgb(febb2e), 14, , hyprctl dispatch togglefloating
+ hyprbars-button = rgb(28c840), 14, , hyprctl dispatch fullscreen 1
+
+ on_double_click = hyprctl dispatch fullscreen 1
+ }
+
+ hyprexpo {
+ columns = 3
+ gap_size = 5
+ bg_col = rgba(1e1e2eaa)
+ workspace_method = center current
+ gesture_distance = 300
+ }
+}
+
+bind = $mainMod, e, hyprexpo:expo, toggle
+
+bind = $mainMod ALT, up, exec, /home/coast/.local/bin/mpc-shuf.sh shuf
+bind = $mainMod ALT, down, exec, /home/coast/.local/bin/mpc-shuf.sh shufno
+bind = $mainMod ALT, right, exec, /home/coast/.local/bin/mpc-shuf.sh next
+bind = $mainMod ALT, left, exec, /home/coast/.local/bin/mpc-shuf.sh prev
+bind = $mainMod SHIFT, R, exec, /home/coast/.local/bin/mpc-shuf.sh search
+bind = $mainMod CONTROL, R, exec, /home/coast/.local/bin/mpc-shuf.sh album
+bind = $mainMod ALT, R, exec, /home/coast/.local/bin/mpc-shuf.sh artist
+bind = $mainMod, slash, exec, /home/coast/.local/bin/mpc-shuf.sh info
+bind = $mainMod, comma, exec, mpc volume -5
+bind = $mainMod, period, exec, mpc volume +5
+bind = $mainMod, bracketright, exec, /home/coast/.local/bin/mpc-shuf.sh toggle
+bind = $mainMod CONTROL, up, exec, mpc stop; mpc add /; notify-send "Reset MPC!"
+
+xwayland {
+ enabled = true
+}
diff --git a/config/hypr/hyprlock.conf b/config/hypr/hyprlock.conf
new file mode 100644
index 0000000..43216c4
--- /dev/null
+++ b/config/hypr/hyprlock.conf
@@ -0,0 +1,35 @@
+background {
+ monitor =
+ path = screenshot
+ blur_passes = 3
+ blur_size = 12
+ dim = 0.4
+}
+
+input-field {
+ monitor =
+ size = 350, 60
+ position = 0, -100
+ rounding = 0
+ border_width = 2
+
+ font = "JetBrainsMono Nerd Font"
+ font_size = 22
+ font_color = rgb(245, 224, 220)
+
+ inner_color = rgb(30, 24, 36)
+ outer_color = rgb(58, 52, 70)
+ border_color = rgb(252, 205, 205)
+ placeholder_text = "Password..."
+ fade_on_empty = true
+}
+
+label {
+ monitor =
+ text = $TIME
+ font = "JetBrainsMono Nerd Font"
+ font_size = 64
+ position = 0, 100
+ color = rgb(245, 224, 220)
+}
+
diff --git a/config/hypr/hyprpaper.conf b/config/hypr/hyprpaper.conf
new file mode 100755
index 0000000..9018554
--- /dev/null
+++ b/config/hypr/hyprpaper.conf
@@ -0,0 +1,3 @@
+preload = ~/Pictures/Wallpapers/flowers.png
+wallpaper = HDMI-A-1,~/Pictures/Wallpapers/flowers.png
+wallpaper = eDP-1,~/Pictures/Wallpapers/flowers.png
diff --git a/config/kitty/.#kitty.conf b/config/kitty/.#kitty.conf
new file mode 120000
index 0000000..7f737a3
--- /dev/null
+++ b/config/kitty/.#kitty.conf
@@ -0,0 +1 @@
+coast@core.1143:1751344825 \ No newline at end of file
diff --git a/config/kitty/kitty.conf b/config/kitty/kitty.conf
new file mode 100755
index 0000000..a147494
--- /dev/null
+++ b/config/kitty/kitty.conf
@@ -0,0 +1,52 @@
+font_family family="Ubuntu Mono"
+font_size 15
+bold_font auto
+italic_font auto
+bold_italic_font auto
+background_opacity 0.9
+window_padding_width 8
+confirm_os_window_close 0
+
+background #1d1d1d
+foreground #deddda
+
+selection_background #303030
+selection_foreground #c0bfbc
+
+url_color #1a5fb4
+
+wayland_titlebar_color system
+macos_titlebar_color system
+
+cursor #deddda
+cursor_text_color #1d1d1d
+
+active_border_color #4f4f4f
+inactive_border_color #282828
+bell_border_color #ed333b
+visual_bell_color none
+
+active_tab_background #242424
+active_tab_foreground #fcfcfc
+inactive_tab_background #303030
+inactive_tab_foreground #b0afac
+tab_bar_background none
+tab_bar_margin_color none
+
+color0 #1d1d1d
+color1 #ed333b
+color2 #57e389
+color3 #ff7800
+color4 #62a0ea
+color5 #9141ac
+color6 #5bc8af
+color7 #deddda
+
+color8 #9a9996
+color9 #f66151
+color10 #8ff0a4
+color11 #ffa348
+color12 #99c1f1
+color13 #dc8add
+color14 #93ddc2
+color15 #f6f5f4
diff --git a/config/mako/.github/issue_template.md b/config/mako/.github/issue_template.md
new file mode 100755
index 0000000..45a7be3
--- /dev/null
+++ b/config/mako/.github/issue_template.md
@@ -0,0 +1 @@
+> If you're reporting an UI issue, make sure you take a screenshot that shows the actual bug. \ No newline at end of file
diff --git a/config/mako/.github/pull_request_template.md b/config/mako/.github/pull_request_template.md
new file mode 100755
index 0000000..622089f
--- /dev/null
+++ b/config/mako/.github/pull_request_template.md
@@ -0,0 +1 @@
+> If you're fixing a UI issue, make sure you take two screenshots. One that shows the actual bug and another that shows how you fixed it. \ No newline at end of file
diff --git a/config/mako/config b/config/mako/config
new file mode 100755
index 0000000..8fd99fd
--- /dev/null
+++ b/config/mako/config
@@ -0,0 +1,12 @@
+default-timeout=5000
+ignore-timeout=1
+background-color=#1e1e2e
+text-color=#cdd6f4
+border-color=#cdd6f4
+progress-color=over #313244
+border-radius=0
+
+[urgency=low]
+border-color=#a6e3a1
+[urgency=high]
+border-color=#f38ba8
diff --git a/config/micro/bindings.json b/config/micro/bindings.json
new file mode 100755
index 0000000..58313ff
--- /dev/null
+++ b/config/micro/bindings.json
@@ -0,0 +1,35 @@
+{
+ "\u001b\u003c": "CursorStart",
+ "\u001b\u003e": "CursorEnd",
+ "\u003cCtrl-x\u003e\u003c0\u003e": "Unsplit",
+ "\u003cCtrl-x\u003e\u003c2\u003e": "HSplit",
+ "\u003cCtrl-x\u003e\u003c3\u003e": "VSplit",
+ "\u003cCtrl-x\u003e\u003cCtrl-c\u003e": "Quit",
+ "\u003cCtrl-x\u003e\u003cCtrl-f\u003e": "OpenFile",
+ "\u003cCtrl-x\u003e\u003cCtrl-s\u003e": "Save",
+ "\u003cCtrl-x\u003e\u003ch\u003e": "SelectAll",
+ "Alt-/": "lua:comment.comment",
+ "Alt-[": "PreviousTab",
+ "Alt-]": "NextTab",
+ "Alt-b": "WordLeft",
+ "Alt-f": "WordRight",
+ "Alt-k": "command:hover",
+ "Alt-r": "command:references",
+ "Alt-v": "CursorPageUp",
+ "Alt-w": "Copy",
+ "Alt-x": "CommandMode",
+ "Ctrl-a": "StartOfLine",
+ "Ctrl-e": "EndOfLine",
+ "Ctrl-g": "Escape",
+ "Ctrl-k": "CutLine",
+ "Ctrl-r": "FindPrevious",
+ "Ctrl-s": "Find",
+ "Ctrl-v": "CursorPageDown",
+ "Ctrl-y": "Paste",
+ "Ctrl-z": "Undo",
+ "Ctrl-b": "CursorLeft",
+ "Ctrl-f": "CursorRight",
+ "Ctrl-p": "CursorUp",
+ "Ctrl-n": "CursorDown",
+ "CtrlUnderscore": "Undo"
+}
diff --git a/config/micro/buffers/history b/config/micro/buffers/history
new file mode 100755
index 0000000..449014c
--- /dev/null
+++ b/config/micro/buffers/history
Binary files differ
diff --git a/config/micro/settings.json b/config/micro/settings.json
new file mode 100755
index 0000000..2b6fe8a
--- /dev/null
+++ b/config/micro/settings.json
@@ -0,0 +1,3 @@
+{
+ "colorscheme": "geany"
+}
diff --git a/config/mksymlink.conf b/config/mksymlink.conf
new file mode 100755
index 0000000..f3b5f56
--- /dev/null
+++ b/config/mksymlink.conf
@@ -0,0 +1,16 @@
+MAIN="$HOME/.local/src/config"
+
+list="\
+nvim=nvim
+qtile=qtile
+sway=sway
+mutt=mutt
+qutebrowser=qutebrowser
+wofi=wofi
+fastfetch=fastfetch
+btop=btop
+foot=foot
+mako=mako
+neofetch=neofetch
+mksymlink.conf=mksymlink.conf
+"
diff --git a/config/mutt/color.muttrc b/config/mutt/color.muttrc
new file mode 100755
index 0000000..c964d03
--- /dev/null
+++ b/config/mutt/color.muttrc
@@ -0,0 +1,68 @@
+# vim: filetype=neomuttrc
+# Default index colors:
+color index yellow default '.*'
+color index_author red default '.*'
+color index_number blue default
+color index_subject cyan default '.*'
+
+# For new mail:
+color index brightyellow black "~N"
+color index_author brightred black "~N"
+color index_subject brightcyan black "~N"
+
+# Header colors:
+color header blue default ".*"
+color header brightmagenta default "^(From)"
+color header brightcyan default "^(Subject)"
+color header brightwhite default "^(CC|BCC)"
+
+mono bold bold
+mono underline underline
+mono indicator reverse
+mono error bold
+color normal default default
+color indicator brightblack white
+color sidebar_highlight red default
+color sidebar_divider brightblack black
+color sidebar_flagged red black
+color sidebar_new green black
+color normal brightyellow default
+color error red default
+color tilde black default
+color message cyan default
+color markers red white
+color attachment white default
+color search brightmagenta default
+color status brightyellow black
+color hdrdefault brightgreen default
+color quoted green default
+color quoted1 blue default
+color quoted2 cyan default
+color quoted3 yellow default
+color quoted4 red default
+color quoted5 brightred default
+color signature brightgreen default
+color bold black default
+color underline black default
+color normal default default
+
+color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses
+color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL
+color body green default "\`[^\`]*\`" # Green text between ` and `
+color body brightblue default "^# \.*" # Headings as bold blue
+color body brightcyan default "^## \.*" # Subheadings as bold cyan
+color body brightgreen default "^### \.*" # Subsubheadings as bold green
+color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow
+color body brightcyan default "[;:][-o][)/(|]" # emoticons
+color body brightcyan default "[;:][)(|]" # emoticons
+color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon?
+color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon?
+color body red default "(BAD signature)"
+color body cyan default "(Good signature)"
+color body brightblack default "^gpg: Good signature .*"
+color body brightyellow default "^gpg: "
+color body brightyellow red "^gpg: BAD signature from.*"
+mono body bold "^gpg: Good signature"
+mono body bold "^gpg: BAD signature from.*"
+color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
+
diff --git a/config/mutt/muttrc b/config/mutt/muttrc
new file mode 100755
index 0000000..9ef2c54
--- /dev/null
+++ b/config/mutt/muttrc
@@ -0,0 +1,18 @@
+set folder = "imaps://coast@cock.email@mail.cock.li:993"
+set smtp_url = "smtps://coast@cock.email@mail.cock.li:587"
+
+set imap_pass = `cat /home/coast/.local/keys/imap.muttrc`
+set smtp_pass = `cat /home/coast/.local/keys/smtp.muttrc`
+
+set from = "coast@cock.email"
+set realname = "Coasteen"
+
+set spoolfile = "+INBOX"
+
+set editor = "nvim"
+set edit_headers = yes
+set include = yes
+set indent_str = "> "
+set reply_regexp = "^([rR][eE]:[ \t]*)*"
+
+source color.muttrc
diff --git a/config/neofetch/config.conf b/config/neofetch/config.conf
new file mode 100755
index 0000000..cdba4c6
--- /dev/null
+++ b/config/neofetch/config.conf
@@ -0,0 +1,864 @@
+# See this wiki page for more info:
+# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
+print_info() {
+ info title
+ info underline
+
+ info "OS" distro
+ info "Host" model
+ info "Kernel" kernel
+ info "Uptime" uptime
+ info "Packages" packages
+ info "Shell" shell
+ info "Resolution" resolution
+ info "DE" de
+ info "WM" wm
+ info "WM Theme" wm_theme
+ info "Theme" theme
+ info "Icons" icons
+ info "Terminal" term
+ info "Terminal Font" term_font
+ info "CPU" cpu
+ info "GPU" gpu
+ info "Memory" memory
+
+ # info "GPU Driver" gpu_driver # Linux/macOS only
+ # info "CPU Usage" cpu_usage
+ # info "Disk" disk
+ # info "Battery" battery
+ # info "Font" font
+ # info "Song" song
+ # [[ "$player" ]] && prin "Music Player" "$player"
+ # info "Local IP" local_ip
+ # info "Public IP" public_ip
+ # info "Users" users
+ # info "Locale" locale # This only works on glibc systems.
+
+ info cols
+}
+
+# Title
+
+
+# Hide/Show Fully qualified domain name.
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --title_fqdn
+title_fqdn="off"
+
+
+# Kernel
+
+
+# Shorten the output of the kernel function.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --kernel_shorthand
+# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
+#
+# Example:
+# on: '4.8.9-1-ARCH'
+# off: 'Linux 4.8.9-1-ARCH'
+kernel_shorthand="on"
+
+
+# Distro
+
+
+# Shorten the output of the distro function
+#
+# Default: 'off'
+# Values: 'on', 'tiny', 'off'
+# Flag: --distro_shorthand
+# Supports: Everything except Windows and Haiku
+distro_shorthand="off"
+
+# Show/Hide OS Architecture.
+# Show 'x86_64', 'x86' and etc in 'Distro:' output.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --os_arch
+#
+# Example:
+# on: 'Arch Linux x86_64'
+# off: 'Arch Linux'
+os_arch="on"
+
+
+# Uptime
+
+
+# Shorten the output of the uptime function
+#
+# Default: 'on'
+# Values: 'on', 'tiny', 'off'
+# Flag: --uptime_shorthand
+#
+# Example:
+# on: '2 days, 10 hours, 3 mins'
+# tiny: '2d 10h 3m'
+# off: '2 days, 10 hours, 3 minutes'
+uptime_shorthand="on"
+
+
+# Memory
+
+
+# Show memory pecentage in output.
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --memory_percent
+#
+# Example:
+# on: '1801MiB / 7881MiB (22%)'
+# off: '1801MiB / 7881MiB'
+memory_percent="off"
+
+# Change memory output unit.
+#
+# Default: 'mib'
+# Values: 'kib', 'mib', 'gib'
+# Flag: --memory_unit
+#
+# Example:
+# kib '1020928KiB / 7117824KiB'
+# mib '1042MiB / 6951MiB'
+# gib: ' 0.98GiB / 6.79GiB'
+memory_unit="mib"
+
+
+# Packages
+
+
+# Show/Hide Package Manager names.
+#
+# Default: 'tiny'
+# Values: 'on', 'tiny' 'off'
+# Flag: --package_managers
+#
+# Example:
+# on: '998 (pacman), 8 (flatpak), 4 (snap)'
+# tiny: '908 (pacman, flatpak, snap)'
+# off: '908'
+package_managers="on"
+
+
+# Shell
+
+
+# Show the path to $SHELL
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --shell_path
+#
+# Example:
+# on: '/bin/bash'
+# off: 'bash'
+shell_path="off"
+
+# Show $SHELL version
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --shell_version
+#
+# Example:
+# on: 'bash 4.4.5'
+# off: 'bash'
+shell_version="on"
+
+
+# CPU
+
+
+# CPU speed type
+#
+# Default: 'bios_limit'
+# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
+# Flag: --speed_type
+# Supports: Linux with 'cpufreq'
+# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
+speed_type="bios_limit"
+
+# CPU speed shorthand
+#
+# Default: 'off'
+# Values: 'on', 'off'.
+# Flag: --speed_shorthand
+# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
+#
+# Example:
+# on: 'i7-6500U (4) @ 3.1GHz'
+# off: 'i7-6500U (4) @ 3.100GHz'
+speed_shorthand="off"
+
+# Enable/Disable CPU brand in output.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --cpu_brand
+#
+# Example:
+# on: 'Intel i7-6500U'
+# off: 'i7-6500U (4)'
+cpu_brand="on"
+
+# CPU Speed
+# Hide/Show CPU speed.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --cpu_speed
+#
+# Example:
+# on: 'Intel i7-6500U (4) @ 3.1GHz'
+# off: 'Intel i7-6500U (4)'
+cpu_speed="on"
+
+# CPU Cores
+# Display CPU cores in output
+#
+# Default: 'logical'
+# Values: 'logical', 'physical', 'off'
+# Flag: --cpu_cores
+# Support: 'physical' doesn't work on BSD.
+#
+# Example:
+# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
+# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
+# off: 'Intel i7-6500U @ 3.1GHz'
+cpu_cores="logical"
+
+# CPU Temperature
+# Hide/Show CPU temperature.
+# Note the temperature is added to the regular CPU function.
+#
+# Default: 'off'
+# Values: 'C', 'F', 'off'
+# Flag: --cpu_temp
+# Supports: Linux, BSD
+# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
+# coretemp kernel module. This only supports newer Intel processors.
+#
+# Example:
+# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
+# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
+# off: 'Intel i7-6500U (4) @ 3.1GHz'
+cpu_temp="off"
+
+
+# GPU
+
+
+# Enable/Disable GPU Brand
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gpu_brand
+#
+# Example:
+# on: 'AMD HD 7950'
+# off: 'HD 7950'
+gpu_brand="on"
+
+# Which GPU to display
+#
+# Default: 'all'
+# Values: 'all', 'dedicated', 'integrated'
+# Flag: --gpu_type
+# Supports: Linux
+#
+# Example:
+# all:
+# GPU1: AMD HD 7950
+# GPU2: Intel Integrated Graphics
+#
+# dedicated:
+# GPU1: AMD HD 7950
+#
+# integrated:
+# GPU1: Intel Integrated Graphics
+gpu_type="all"
+
+
+# Resolution
+
+
+# Display refresh rate next to each monitor
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --refresh_rate
+# Supports: Doesn't work on Windows.
+#
+# Example:
+# on: '1920x1080 @ 60Hz'
+# off: '1920x1080'
+refresh_rate="off"
+
+
+# Gtk Theme / Icons / Font
+
+
+# Shorten output of GTK Theme / Icons / Font
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --gtk_shorthand
+#
+# Example:
+# on: 'Numix, Adwaita'
+# off: 'Numix [GTK2], Adwaita [GTK3]'
+gtk_shorthand="off"
+
+
+# Enable/Disable gtk2 Theme / Icons / Font
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gtk2
+#
+# Example:
+# on: 'Numix [GTK2], Adwaita [GTK3]'
+# off: 'Adwaita [GTK3]'
+gtk2="on"
+
+# Enable/Disable gtk3 Theme / Icons / Font
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gtk3
+#
+# Example:
+# on: 'Numix [GTK2], Adwaita [GTK3]'
+# off: 'Numix [GTK2]'
+gtk3="on"
+
+
+# IP Address
+
+
+# Website to ping for the public IP
+#
+# Default: 'http://ident.me'
+# Values: 'url'
+# Flag: --ip_host
+public_ip_host="http://ident.me"
+
+# Public IP timeout.
+#
+# Default: '2'
+# Values: 'int'
+# Flag: --ip_timeout
+public_ip_timeout=2
+
+
+# Desktop Environment
+
+
+# Show Desktop Environment version
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --de_version
+de_version="on"
+
+
+# Disk
+
+
+# Which disks to display.
+# The values can be any /dev/sdXX, mount point or directory.
+# NOTE: By default we only show the disk info for '/'.
+#
+# Default: '/'
+# Values: '/', '/dev/sdXX', '/path/to/drive'.
+# Flag: --disk_show
+#
+# Example:
+# disk_show=('/' '/dev/sdb1'):
+# 'Disk (/): 74G / 118G (66%)'
+# 'Disk (/mnt/Videos): 823G / 893G (93%)'
+#
+# disk_show=('/'):
+# 'Disk (/): 74G / 118G (66%)'
+#
+disk_show=('/')
+
+# Disk subtitle.
+# What to append to the Disk subtitle.
+#
+# Default: 'mount'
+# Values: 'mount', 'name', 'dir', 'none'
+# Flag: --disk_subtitle
+#
+# Example:
+# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
+# 'Disk (/dev/sdb2): 74G / 118G (66%)'
+#
+# mount: 'Disk (/): 74G / 118G (66%)'
+# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
+# 'Disk (/mnt/Videos): 74G / 118G (66%)'
+#
+# dir: 'Disk (/): 74G / 118G (66%)'
+# 'Disk (Local Disk): 74G / 118G (66%)'
+# 'Disk (Videos): 74G / 118G (66%)'
+#
+# none: 'Disk: 74G / 118G (66%)'
+# 'Disk: 74G / 118G (66%)'
+# 'Disk: 74G / 118G (66%)'
+disk_subtitle="mount"
+
+# Disk percent.
+# Show/Hide disk percent.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --disk_percent
+#
+# Example:
+# on: 'Disk (/): 74G / 118G (66%)'
+# off: 'Disk (/): 74G / 118G'
+disk_percent="on"
+
+
+# Song
+
+
+# Manually specify a music player.
+#
+# Default: 'auto'
+# Values: 'auto', 'player-name'
+# Flag: --music_player
+#
+# Available values for 'player-name':
+#
+# amarok
+# audacious
+# banshee
+# bluemindo
+# clementine
+# cmus
+# deadbeef
+# deepin-music
+# dragon
+# elisa
+# exaile
+# gnome-music
+# gmusicbrowser
+# gogglesmm
+# guayadeque
+# io.elementary.music
+# iTunes
+# juk
+# lollypop
+# mocp
+# mopidy
+# mpd
+# muine
+# netease-cloud-music
+# olivia
+# playerctl
+# pogo
+# pragha
+# qmmp
+# quodlibet
+# rhythmbox
+# sayonara
+# smplayer
+# spotify
+# strawberry
+# tauonmb
+# tomahawk
+# vlc
+# xmms2d
+# xnoise
+# yarock
+music_player="auto"
+
+# Format to display song information.
+#
+# Default: '%artist% - %album% - %title%'
+# Values: '%artist%', '%album%', '%title%'
+# Flag: --song_format
+#
+# Example:
+# default: 'Song: Jet - Get Born - Sgt Major'
+song_format="%artist% - %album% - %title%"
+
+# Print the Artist, Album and Title on separate lines
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --song_shorthand
+#
+# Example:
+# on: 'Artist: The Fratellis'
+# 'Album: Costello Music'
+# 'Song: Chelsea Dagger'
+#
+# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
+song_shorthand="off"
+
+# 'mpc' arguments (specify a host, password etc).
+#
+# Default: ''
+# Example: mpc_args=(-h HOST -P PASSWORD)
+mpc_args=()
+
+
+# Text Colors
+
+
+# Text Colors
+#
+# Default: 'distro'
+# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
+# Flag: --colors
+#
+# Each number represents a different part of the text in
+# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
+#
+# Example:
+# colors=(distro) - Text is colored based on Distro colors.
+# colors=(4 6 1 8 8 6) - Text is colored in the order above.
+colors=(distro)
+
+
+# Text Options
+
+
+# Toggle bold text
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --bold
+bold="on"
+
+# Enable/Disable Underline
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --underline
+underline_enabled="on"
+
+# Underline character
+#
+# Default: '-'
+# Values: 'string'
+# Flag: --underline_char
+underline_char="-"
+
+
+# Info Separator
+# Replace the default separator with the specified string.
+#
+# Default: ':'
+# Flag: --separator
+#
+# Example:
+# separator="->": 'Shell-> bash'
+# separator=" =": 'WM = dwm'
+separator=":"
+
+
+# Color Blocks
+
+
+# Color block range
+# The range of colors to print.
+#
+# Default: '0', '15'
+# Values: 'num'
+# Flag: --block_range
+#
+# Example:
+#
+# Display colors 0-7 in the blocks. (8 colors)
+# neofetch --block_range 0 7
+#
+# Display colors 0-15 in the blocks. (16 colors)
+# neofetch --block_range 0 15
+block_range=(0 15)
+
+# Toggle color blocks
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --color_blocks
+color_blocks="on"
+
+# Color block width in spaces
+#
+# Default: '3'
+# Values: 'num'
+# Flag: --block_width
+block_width=3
+
+# Color block height in lines
+#
+# Default: '1'
+# Values: 'num'
+# Flag: --block_height
+block_height=1
+
+# Color Alignment
+#
+# Default: 'auto'
+# Values: 'auto', 'num'
+# Flag: --col_offset
+#
+# Number specifies how far from the left side of the terminal (in spaces) to
+# begin printing the columns, in case you want to e.g. center them under your
+# text.
+# Example:
+# col_offset="auto" - Default behavior of neofetch
+# col_offset=7 - Leave 7 spaces then print the colors
+col_offset="auto"
+
+# Progress Bars
+
+
+# Bar characters
+#
+# Default: '-', '='
+# Values: 'string', 'string'
+# Flag: --bar_char
+#
+# Example:
+# neofetch --bar_char 'elapsed' 'total'
+# neofetch --bar_char '-' '='
+bar_char_elapsed="-"
+bar_char_total="="
+
+# Toggle Bar border
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --bar_border
+bar_border="on"
+
+# Progress bar length in spaces
+# Number of chars long to make the progress bars.
+#
+# Default: '15'
+# Values: 'num'
+# Flag: --bar_length
+bar_length=15
+
+# Progress bar colors
+# When set to distro, uses your distro's logo colors.
+#
+# Default: 'distro', 'distro'
+# Values: 'distro', 'num'
+# Flag: --bar_colors
+#
+# Example:
+# neofetch --bar_colors 3 4
+# neofetch --bar_colors distro 5
+bar_color_elapsed="distro"
+bar_color_total="distro"
+
+
+# Info display
+# Display a bar with the info.
+#
+# Default: 'off'
+# Values: 'bar', 'infobar', 'barinfo', 'off'
+# Flags: --cpu_display
+# --memory_display
+# --battery_display
+# --disk_display
+#
+# Example:
+# bar: '[---=======]'
+# infobar: 'info [---=======]'
+# barinfo: '[---=======] info'
+# off: 'info'
+cpu_display="off"
+memory_display="off"
+battery_display="off"
+disk_display="off"
+
+
+# Backend Settings
+
+
+# Image backend.
+#
+# Default: 'ascii'
+# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
+# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
+# Flag: --backend
+image_backend="ascii"
+
+# Image Source
+#
+# Which image or ascii file to display.
+#
+# Default: 'auto'
+# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
+# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
+# Flag: --source
+#
+# NOTE: 'auto' will pick the best image source for whatever image backend is used.
+# In ascii mode, distro ascii art will be used and in an image mode, your
+# wallpaper will be used.
+image_source="auto"
+
+
+# Ascii Options
+
+
+# Ascii distro
+# Which distro's ascii art to display.
+#
+# Default: 'auto'
+# Values: 'auto', 'distro_name'
+# Flag: --ascii_distro
+# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
+# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
+# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
+# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
+# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
+# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
+# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
+# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
+# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
+# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
+# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
+# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
+# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
+# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
+# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
+# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
+# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
+# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
+# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
+# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
+# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
+# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
+# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
+# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
+# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
+# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
+# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
+# and IRIX have ascii logos
+# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
+# Use '{distro name}_old' to use the old logos.
+# NOTE: Ubuntu has flavor variants.
+# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
+# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
+# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
+# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
+# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
+# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
+# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
+# postmarketOS, and Void have a smaller logo variant.
+# Use '{distro name}_small' to use the small variants.
+ascii_distro="auto"
+
+# Ascii Colors
+#
+# Default: 'distro'
+# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
+# Flag: --ascii_colors
+#
+# Example:
+# ascii_colors=(distro) - Ascii is colored based on Distro colors.
+# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
+ascii_colors=(distro)
+
+# Bold ascii logo
+# Whether or not to bold the ascii logo.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --ascii_bold
+ascii_bold="on"
+
+
+# Image Options
+
+
+# Image loop
+# Setting this to on will make neofetch redraw the image constantly until
+# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --loop
+image_loop="off"
+
+# Thumbnail directory
+#
+# Default: '~/.cache/thumbnails/neofetch'
+# Values: 'dir'
+thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
+
+# Crop mode
+#
+# Default: 'normal'
+# Values: 'normal', 'fit', 'fill'
+# Flag: --crop_mode
+#
+# See this wiki page to learn about the fit and fill options.
+# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
+crop_mode="normal"
+
+# Crop offset
+# Note: Only affects 'normal' crop mode.
+#
+# Default: 'center'
+# Values: 'northwest', 'north', 'northeast', 'west', 'center'
+# 'east', 'southwest', 'south', 'southeast'
+# Flag: --crop_offset
+crop_offset="center"
+
+# Image size
+# The image is half the terminal width by default.
+#
+# Default: 'auto'
+# Values: 'auto', '00px', '00%', 'none'
+# Flags: --image_size
+# --size
+image_size="auto"
+
+# Gap between image and text
+#
+# Default: '3'
+# Values: 'num', '-num'
+# Flag: --gap
+gap=3
+
+# Image offsets
+# Only works with the w3m backend.
+#
+# Default: '0'
+# Values: 'px'
+# Flags: --xoffset
+# --yoffset
+yoffset=0
+xoffset=0
+
+# Image background color
+# Only works with the w3m backend.
+#
+# Default: ''
+# Values: 'color', 'blue'
+# Flag: --bg_color
+background_color=
+
+
+# Misc Options
+
+# Stdout mode
+# Turn off all colors and disables image backend (ASCII/Image).
+# Useful for piping into another command.
+# Default: 'off'
+# Values: 'on', 'off'
+stdout="off"
diff --git a/config/niri-2/config.kdl b/config/niri-2/config.kdl
new file mode 100644
index 0000000..b536336
--- /dev/null
+++ b/config/niri-2/config.kdl
@@ -0,0 +1,269 @@
+spawn-at-startup "waybar"
+spawn-at-startup "awww-daemon"
+spawn-at-startup "awww" "img" "/home/coast/Downloads/wallhaven-3qrol9_1920x1080.png"
+input {
+ mod-key "Super"
+ keyboard {
+ xkb {
+ options "altwin:swap_alt_win"
+ }
+ numlock
+ repeat-delay 600
+ repeat-rate 25
+ }
+
+ touchpad {
+ tap
+ natural-scroll
+ }
+
+ trackpoint {
+ }
+}
+
+gestures {
+ hot-corners {
+ off
+ }
+}
+
+cursor {
+ xcursor-theme "Adwaita"
+ xcursor-size 24
+}
+
+output "HDMI-A-1" {
+ mode "1920x1080@74.973"
+ scale 1
+ transform "normal"
+}
+
+output "eDP-1" {
+ off
+ scale 1
+ transform "normal"
+ position x=1280 y=0
+}
+
+layout {
+ gaps 10
+ center-focused-column "never"
+
+ preset-column-widths {
+ proportion 0.33333
+ proportion 0.5
+ proportion 0.66667
+ }
+
+ default-column-width {
+ proportion 0.5;
+ }
+
+ focus-ring {
+ width 2.5
+ active-color "#0E0F12"
+ inactive-color "#191724"
+ }
+
+ border {
+ off
+ width 4
+ active-color "#0E0F12"
+ inactive-color "#0E0F12"
+ urgent-color "#9b0000"
+ }
+
+ shadow {
+ on
+ softness 30
+ spread 5
+ offset x=0 y=5
+ color "#0007"
+ }
+
+ struts {
+ }
+}
+
+prefer-no-csd
+
+screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
+
+spawn-at-startup "waybar &"
+spawn-at-startup "swww-daemon &"
+spawn-at-startup "swww img --outputs HDMI-A-1 ~/Wallpapers/bay.png &"
+spawn-at-startup "eww daemon &"
+spawn-at-startup "eww open-many year month day daytype &"
+spawn-at-startup "foot --server &"
+
+
+window-rule {
+ match title="Waydroid"
+ open-fullscreen true
+}
+window-rule {
+ match app-id=r#"firefox$"# title="^Picture-in-Picture$"
+ open-floating true
+}
+
+window-rule {
+ match app-id=r#"waydroid$"#
+ open-fullscreen true
+}
+
+window-rule {
+ geometry-corner-radius 7
+ clip-to-geometry true
+}
+
+binds {
+ Mod+Shift+Slash { show-hotkey-overlay; }
+ Mod+Return hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; }
+ Mod+R hotkey-overlay-title="Run an Application: rofi" { spawn-sh "rofi -show drun -config ~/.config/rofi/config.rasi"; }
+ Mod+Shift+Return hotkey-overlay-title="Run an application: rofi (run)" { spawn-sh "rofi -show run -config ~/.config/rofi/config.rasi"; }
+ Super+Alt+L hotkey-overlay-title="Lock the screen" { spawn "hyprlock"; }
+ Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
+
+ XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+"; }
+ XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
+ XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
+ XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
+
+ XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
+ XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
+
+ Mod+O repeat=false { toggle-overview; }
+ Mod+S repeat=false { close-window; }
+
+ Mod+Left { focus-column-left; }
+ Mod+Down { focus-window-down; }
+ Mod+Up { focus-window-up; }
+ Mod+Right { focus-column-right; }
+ Mod+H { focus-column-left; }
+ Mod+J { focus-window-down; }
+ Mod+K { focus-window-up; }
+ Mod+L { focus-column-right; }
+
+ Mod+Ctrl+Left { move-column-left; }
+ Mod+Ctrl+Down { move-window-down; }
+ Mod+Ctrl+Up { move-window-up; }
+ Mod+Ctrl+Right { move-column-right; }
+ Mod+Shift+H { move-column-left; }
+ Mod+Shift+J { move-window-down; }
+ Mod+Shift+K { move-window-up; }
+ Mod+Shift+L { move-column-right; }
+
+ Mod+Home { focus-column-first; }
+ Mod+End { focus-column-last; }
+ Mod+Ctrl+Home { move-column-to-first; }
+ Mod+Ctrl+End { move-column-to-last; }
+
+ Mod+Shift+Left { focus-monitor-left; }
+ Mod+Shift+Down { focus-monitor-down; }
+ Mod+Shift+Up { focus-monitor-up; }
+ Mod+Shift+Right { focus-monitor-right; }
+ Mod+Ctrl+H { focus-monitor-left; }
+ Mod+Ctrl+J { focus-monitor-down; }
+ Mod+Ctrl+K { focus-monitor-up; }
+ Mod+Ctrl+L { focus-monitor-right; }
+
+ Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
+ Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
+ Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
+ Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
+ Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
+ Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
+ Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
+ Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
+
+ Mod+Page_Down { focus-workspace-down; }
+ Mod+Page_Up { focus-workspace-up; }
+ Mod+N { focus-workspace-down; }
+ Mod+M { focus-workspace-up; }
+ Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
+ Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
+ Mod+Ctrl+M { move-column-to-workspace-down; }
+ Mod+Ctrl+N { move-column-to-workspace-up; }
+
+ Mod+Shift+P hotkey-overlay-title="Restart waybar and eww" { spawn-sh "pkill waybar && waybar & disown && eww kill && eww daemon && eww open-many year month day daytype"; }
+
+ Mod+Shift+Page_Down { move-workspace-down; }
+ Mod+Shift+Page_Up { move-workspace-up; }
+ Mod+Shift+M { move-workspace-down; }
+ Mod+Shift+N { move-workspace-up; }
+
+ Mod+1 { focus-workspace 1; }
+ Mod+2 { focus-workspace 2; }
+ Mod+3 { focus-workspace 3; }
+ Mod+4 { focus-workspace 4; }
+ Mod+5 { focus-workspace 5; }
+ Mod+6 { focus-workspace 6; }
+ Mod+7 { focus-workspace 7; }
+ Mod+8 { focus-workspace 8; }
+ Mod+9 { focus-workspace 9; }
+ Mod+Shift+1 { move-column-to-workspace 1; }
+ Mod+Shift+2 { move-column-to-workspace 2; }
+ Mod+Shift+3 { move-column-to-workspace 3; }
+ Mod+Shift+4 { move-column-to-workspace 4; }
+ Mod+Shift+5 { move-column-to-workspace 5; }
+ Mod+Shift+6 { move-column-to-workspace 6; }
+ Mod+Shift+7 { move-column-to-workspace 7; }
+ Mod+Shift+8 { move-column-to-workspace 8; }
+ Mod+Shift+9 { move-column-to-workspace 9; }
+
+ Mod+BracketLeft { consume-or-expel-window-left; }
+ Mod+BracketRight { consume-or-expel-window-right; }
+
+ Mod+Comma { consume-window-into-column; }
+ Mod+Period { expel-window-from-column; }
+
+ Mod+D { switch-preset-column-width; }
+ Mod+Shift+R { switch-preset-window-height; }
+ Mod+Ctrl+R { reset-window-height; }
+ Mod+W { maximize-column; }
+ Mod+Shift+W { fullscreen-window; }
+
+ Mod+Ctrl+F { expand-column-to-available-width; }
+ Mod+C { center-column; }
+ Mod+Ctrl+C { center-visible-columns; }
+
+ Mod+Minus { set-column-width "-10%"; }
+ Mod+Equal { set-column-width "+10%"; }
+
+ Mod+Shift+Minus { set-window-height "-10%"; }
+ Mod+Shift+Equal { set-window-height "+10%"; }
+
+ Mod+Space { toggle-window-floating; }
+ Mod+Shift+V { switch-focus-between-floating-and-tiling; }
+
+ Mod+Shift+F { toggle-column-tabbed-display; }
+ Mod+F hotkey-overlay-title="Spawn file manager (nautilus)" { spawn "nautilus"; }
+
+ Print { screenshot; }
+ Super+Shift+S { screenshot; }
+ Control+Alt+S { screenshot-window; }
+ Ctrl+Print { screenshot-screen; }
+ Alt+Print { screenshot-window; }
+
+ Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
+
+ Mod+Shift+E { quit; }
+ Ctrl+Alt+Delete { quit; }
+
+ Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
+ Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
+ Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
+ Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
+
+ Mod+WheelScrollRight { focus-column-right; }
+ Mod+WheelScrollLeft { focus-column-left; }
+ Mod+Ctrl+WheelScrollRight { move-column-right; }
+ Mod+Ctrl+WheelScrollLeft { move-column-left; }
+
+ Mod+Shift+WheelScrollDown { focus-column-right; }
+ Mod+Shift+WheelScrollUp { focus-column-left; }
+ Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
+ Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
+}
+
+
diff --git a/config/niri/config.kdl b/config/niri/config.kdl
new file mode 100755
index 0000000..56782dd
--- /dev/null
+++ b/config/niri/config.kdl
@@ -0,0 +1,265 @@
+input {
+ mod-key "Super"
+ keyboard {
+ xkb {
+ }
+ numlock
+ repeat-delay 600
+ repeat-rate 25
+ }
+
+ touchpad {
+ tap
+ natural-scroll
+ }
+
+ trackpoint {
+ }
+}
+
+gestures {
+ hot-corners {
+ off
+ }
+}
+
+cursor {
+ xcursor-theme "Adwaita"
+ xcursor-size 24
+}
+
+output "HDMI-A-1" {
+ mode "1920x1080@74.973"
+ scale 1
+ transform "normal"
+}
+
+output "eDP-1" {
+ off
+ scale 1
+ transform "normal"
+ position x=1280 y=0
+}
+
+layout {
+ gaps 5
+ center-focused-column "never"
+
+ preset-column-widths {
+ proportion 0.33333
+ proportion 0.5
+ proportion 0.66667
+ }
+
+ default-column-width {
+ proportion 0.5;
+ }
+
+ focus-ring {
+ width 2.5
+ active-color "#211e1e"
+ inactive-color "#191724"
+ }
+
+ border {
+ off
+ width 4
+ active-color "#191724"
+ inactive-color "#191724"
+ urgent-color "#9b0000"
+ }
+
+ shadow {
+ on
+ softness 30
+ spread 5
+ offset x=0 y=5
+ color "#0007"
+ }
+
+ struts {
+ }
+}
+
+prefer-no-csd
+
+screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
+
+spawn-at-startup "waybar &"
+spawn-at-startup "swww-daemon &"
+spawn-at-startup "swww img --outputs HDMI-A-1 ~/Wallpapers/bay.png &"
+spawn-at-startup "eww daemon &"
+spawn-at-startup "eww open-many year month day daytype &"
+spawn-at-startup "foot --server &"
+
+
+window-rule {
+ match title="Waydroid"
+ open-fullscreen true
+}
+window-rule {
+ match app-id=r#"firefox$"# title="^Picture-in-Picture$"
+ open-floating true
+}
+
+window-rule {
+ match app-id=r#"waydroid$"#
+ open-fullscreen true
+}
+
+window-rule {
+ geometry-corner-radius 7
+ clip-to-geometry true
+}
+
+binds {
+ Mod+Shift+Slash { show-hotkey-overlay; }
+ Mod+Return hotkey-overlay-title="Open a Terminal: footclient" { spawn "footclient"; }
+ Mod+R hotkey-overlay-title="Run an Application: rofi" { spawn-sh "rofi -show drun -config ~/.config/rofi/gruvbox.rasi"; }
+ Mod+Shift+Return hotkey-overlay-title="Run an application: rofi (run)" { spawn-sh "rofi -show run -config ~/.config/rofi/gruvbox.rasi"; }
+ Super+Alt+L hotkey-overlay-title="Lock the screen" { spawn "swaylock"; }
+ Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
+
+ XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+"; }
+ XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
+ XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
+ XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
+
+ XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
+ XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
+
+ Mod+O repeat=false { toggle-overview; }
+ Mod+S repeat=false { close-window; }
+
+ Mod+Left { focus-column-left; }
+ Mod+Down { focus-window-down; }
+ Mod+Up { focus-window-up; }
+ Mod+Right { focus-column-right; }
+ Mod+H { focus-column-left; }
+ Mod+J { focus-window-down; }
+ Mod+K { focus-window-up; }
+ Mod+L { focus-column-right; }
+
+ Mod+Ctrl+Left { move-column-left; }
+ Mod+Ctrl+Down { move-window-down; }
+ Mod+Ctrl+Up { move-window-up; }
+ Mod+Ctrl+Right { move-column-right; }
+ Mod+Shift+H { move-column-left; }
+ Mod+Shift+J { move-window-down; }
+ Mod+Shift+K { move-window-up; }
+ Mod+Shift+L { move-column-right; }
+
+ Mod+Home { focus-column-first; }
+ Mod+End { focus-column-last; }
+ Mod+Ctrl+Home { move-column-to-first; }
+ Mod+Ctrl+End { move-column-to-last; }
+
+ Mod+Shift+Left { focus-monitor-left; }
+ Mod+Shift+Down { focus-monitor-down; }
+ Mod+Shift+Up { focus-monitor-up; }
+ Mod+Shift+Right { focus-monitor-right; }
+ Mod+Ctrl+H { focus-monitor-left; }
+ Mod+Ctrl+J { focus-monitor-down; }
+ Mod+Ctrl+K { focus-monitor-up; }
+ Mod+Ctrl+L { focus-monitor-right; }
+
+ Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
+ Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
+ Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
+ Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
+ Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
+ Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
+ Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
+ Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
+
+ Mod+Page_Down { focus-workspace-down; }
+ Mod+Page_Up { focus-workspace-up; }
+ Mod+N { focus-workspace-down; }
+ Mod+M { focus-workspace-up; }
+ Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
+ Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
+ Mod+Ctrl+M { move-column-to-workspace-down; }
+ Mod+Ctrl+N { move-column-to-workspace-up; }
+
+ Mod+Shift+P hotkey-overlay-title="Restart waybar and eww" { spawn-sh "pkill waybar && waybar & disown && eww kill && eww daemon && eww open-many year month day daytype"; }
+
+ Mod+Shift+Page_Down { move-workspace-down; }
+ Mod+Shift+Page_Up { move-workspace-up; }
+ Mod+Shift+M { move-workspace-down; }
+ Mod+Shift+N { move-workspace-up; }
+
+ Mod+1 { focus-workspace 1; }
+ Mod+2 { focus-workspace 2; }
+ Mod+3 { focus-workspace 3; }
+ Mod+4 { focus-workspace 4; }
+ Mod+5 { focus-workspace 5; }
+ Mod+6 { focus-workspace 6; }
+ Mod+7 { focus-workspace 7; }
+ Mod+8 { focus-workspace 8; }
+ Mod+9 { focus-workspace 9; }
+ Mod+Shift+1 { move-column-to-workspace 1; }
+ Mod+Shift+2 { move-column-to-workspace 2; }
+ Mod+Shift+3 { move-column-to-workspace 3; }
+ Mod+Shift+4 { move-column-to-workspace 4; }
+ Mod+Shift+5 { move-column-to-workspace 5; }
+ Mod+Shift+6 { move-column-to-workspace 6; }
+ Mod+Shift+7 { move-column-to-workspace 7; }
+ Mod+Shift+8 { move-column-to-workspace 8; }
+ Mod+Shift+9 { move-column-to-workspace 9; }
+
+ Mod+BracketLeft { consume-or-expel-window-left; }
+ Mod+BracketRight { consume-or-expel-window-right; }
+
+ Mod+Comma { consume-window-into-column; }
+ Mod+Period { expel-window-from-column; }
+
+ Mod+D { switch-preset-column-width; }
+ Mod+Shift+R { switch-preset-window-height; }
+ Mod+Ctrl+R { reset-window-height; }
+ Mod+W { maximize-column; }
+ Mod+Shift+W { fullscreen-window; }
+
+ Mod+Ctrl+F { expand-column-to-available-width; }
+ Mod+C { center-column; }
+ Mod+Ctrl+C { center-visible-columns; }
+
+ Mod+Minus { set-column-width "-10%"; }
+ Mod+Equal { set-column-width "+10%"; }
+
+ Mod+Shift+Minus { set-window-height "-10%"; }
+ Mod+Shift+Equal { set-window-height "+10%"; }
+
+ Mod+Space { toggle-window-floating; }
+ Mod+Shift+V { switch-focus-between-floating-and-tiling; }
+
+ Mod+Shift+F { toggle-column-tabbed-display; }
+ Mod+F hotkey-overlay-title="Spawn file manager (nautilus)" { spawn "nautilus"; }
+
+ Print { screenshot; }
+ Super+Shift+S { screenshot; }
+ Control+Alt+S { screenshot-window; }
+ Ctrl+Print { screenshot-screen; }
+ Alt+Print { screenshot-window; }
+
+ Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
+
+ Mod+Shift+E { quit; }
+ Ctrl+Alt+Delete { quit; }
+
+ Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
+ Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
+ Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
+ Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
+
+ Mod+WheelScrollRight { focus-column-right; }
+ Mod+WheelScrollLeft { focus-column-left; }
+ Mod+Ctrl+WheelScrollRight { move-column-right; }
+ Mod+Ctrl+WheelScrollLeft { move-column-left; }
+
+ Mod+Shift+WheelScrollDown { focus-column-right; }
+ Mod+Shift+WheelScrollUp { focus-column-left; }
+ Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
+ Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
+}
+
+
diff --git a/config/nushell/config.nu b/config/nushell/config.nu
new file mode 100755
index 0000000..1658d14
--- /dev/null
+++ b/config/nushell/config.nu
@@ -0,0 +1,99 @@
+$env.config.buffer_editor = "vim"
+$env.PROMPT_COMMAND_RIGHT = ""
+$env.path ++= ["~/.local/bin"]
+$env.config.show_banner = false
+$env.config.table.mode = 'none'
+$env.TERM = "xterm"
+$env.USER = "coast"
+
+$env.PROMPT_COMMAND = {
+ let dir = (pwd | path basename)
+ let home_dir = ($dir | str replace "coast" "home")
+ $"(ansi reset)0 ($env.USER) ($home_dir) "
+}
+
+$env.PROMPT_INDICATOR = ""
+
+let carapace_completer = {|spans|
+ carapace $spans.0 nushell ...$spans | from json
+}
+
+$env.config = {
+ show_banner: false
+ completions: {
+ case_sensitive: false
+ quick: true
+ partial: true
+ algorithm: "fuzzy"
+ external: {
+ enable: true
+ max_results: 100
+ completer: $carapace_completer
+ }
+ }
+}
+
+alias sd = sudo
+alias nano = vim
+alias suod = sudo
+alias sduo = sudo
+alias hotp = htop
+alias c = clear
+alias dir = tree -idA
+
+let bg0 = "#0f0f0f"
+let bg1 = "#1a1a1a"
+let bg2 = "#2a2a2a"
+let bg3 = "#3a3a3a"
+let fg0 = "#e0def4"
+let fg1 = "#ebbcba"
+let red = "#eb6f92"
+let green = "#eb6f92"
+let yellow = "#ea9a97"
+let blue = "#d7827e"
+let purple = "#ea9a97"
+let aqua = "#ebbcba"
+let orange = "#ea9a97"
+let gray = "#6e6a86"
+
+let dark = {
+ separator: $gray,
+ leading_trailing_space_bg: $bg1,
+ header: $yellow,
+ datetime: $blue,
+ filesize: $green,
+ row_index: $gray,
+
+ bool: $green,
+ int: $orange,
+ float: $yellow,
+ string: $fg1,
+ nothing: $gray,
+ binary: $red,
+ cell-path: $blue,
+ hints: $gray,
+
+ shape_garbage: { fg: $fg0 bg: $red attr: b },
+ shape_bool: $green,
+ shape_int: { fg: $orange attr: b },
+ shape_float: { fg: $yellow attr: b },
+ shape_range: { fg: $yellow attr: b },
+ shape_internalcall: { fg: $aqua attr: b },
+ shape_external: $blue,
+ shape_externalarg: { fg: $green attr: b },
+ shape_literal: $fg1,
+ shape_operator: $orange,
+ shape_signature: { fg: $yellow attr: b },
+ shape_string: $purple,
+ shape_filepath: $blue,
+ shape_globpattern: { fg: $blue attr: b },
+ shape_variable: $aqua,
+ shape_flag: { fg: $yellow attr: b },
+ shape_custom: { attr: b }
+}
+
+$env.config.color_config = $dark
+$env.config.use_ansi_coloring = true
+
+source ~/.config/nushell/starship.nu
+
diff --git a/config/nushell/starship.nu b/config/nushell/starship.nu
new file mode 100755
index 0000000..8bef494
--- /dev/null
+++ b/config/nushell/starship.nu
@@ -0,0 +1,35 @@
+export-env { $env.STARSHIP_SHELL = "nu"; load-env {
+ STARSHIP_SESSION_KEY: (random chars -l 16)
+ PROMPT_MULTILINE_INDICATOR: (
+ ^/etc/profiles/per-user/coast/bin/starship prompt --continuation
+ )
+
+ # Does not play well with default character module.
+ # TODO: Also Use starship vi mode indicators?
+ PROMPT_INDICATOR: ""
+
+ PROMPT_COMMAND: {||
+ # jobs are not supported
+ (
+ ^/etc/profiles/per-user/coast/bin/starship prompt
+ --cmd-duration $env.CMD_DURATION_MS
+ $"--status=($env.LAST_EXIT_CODE)"
+ --terminal-width (term size).columns
+ )
+ }
+
+ config: ($env.config? | default {} | merge {
+ render_right_prompt_on_last_line: true
+ })
+
+ PROMPT_COMMAND_RIGHT: {||
+ (
+ ^/etc/profiles/per-user/coast/bin/starship prompt
+ --right
+ --cmd-duration $env.CMD_DURATION_MS
+ $"--status=($env.LAST_EXIT_CODE)"
+ --terminal-width (term size).columns
+ )
+ }
+}}
+
diff --git a/config/nvim-1/init.lua b/config/nvim-1/init.lua
new file mode 100755
index 0000000..d9da61e
--- /dev/null
+++ b/config/nvim-1/init.lua
@@ -0,0 +1,11 @@
+require("plugins/lazy")
+require("plugins/lsp")
+require("plugins/nvim-tree")
+require("plugins/telescope")
+require("plugins/treesitter")
+require("config")
+require("plugins/render-markdown")
+--require("status_line").setup()
+require("plugins/lualine")
+require("plugins/catppuccin")
+require("colorizer").setup() -- #ffffff #edb511
diff --git a/config/nvim-1/lazy-lock.json b/config/nvim-1/lazy-lock.json
new file mode 100755
index 0000000..27e4c91
--- /dev/null
+++ b/config/nvim-1/lazy-lock.json
@@ -0,0 +1,40 @@
+{
+ "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
+ "cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" },
+ "cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" },
+ "cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" },
+ "cmp-path": { "branch": "main", "commit": "c6635aae33a50d6010bf1aa756ac2398a2d54c32" },
+ "cmp-spell": { "branch": "master", "commit": "694a4e50809d6d645c1ea29015dad0c293f019d6" },
+ "cmp-vsnip": { "branch": "main", "commit": "989a8a73c44e926199bfd05fa7a516d51f2d2752" },
+ "comfy-line-numbers.nvim": { "branch": "main", "commit": "31e2f9287b4491ad72defb9e0185eb2739983799" },
+ "fterm.nvim": { "branch": "master", "commit": "d1320892cc2ebab472935242d9d992a2c9570180" },
+ "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
+ "lsp_signature.nvim": { "branch": "master", "commit": "d50e40b3bf9324128e71b0b7e589765ce89466d2" },
+ "lualine.nvim": { "branch": "master", "commit": "a94fc68960665e54408fe37dcf573193c4ce82c9" },
+ "mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" },
+ "mini.nvim": { "branch": "main", "commit": "429e5f9dc9cd59bf76cd98b687300f0a384a7f52" },
+ "moonfly": { "branch": "master", "commit": "ef85b89739bee184e204c89bc06280d62bd84039" },
+ "none-ls-extras.nvim": { "branch": "main", "commit": "924fe88a9983c7d90dbb31fc4e3129a583ea0a90" },
+ "none-ls.nvim": { "branch": "main", "commit": "db2a48b79cfcdab8baa5d3f37f21c78b6705c62e" },
+ "nvim": { "branch": "main", "commit": "0a5de4da015a175f416d6ef1eda84661623e0500" },
+ "nvim-autopairs": { "branch": "master", "commit": "4d74e75913832866aa7de35e4202463ddf6efd1b" },
+ "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" },
+ "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
+ "nvim-lspconfig": { "branch": "master", "commit": "77d3fdfb3554632c7a3b101ded643d422de7626f" },
+ "nvim-numbertoggle": { "branch": "main", "commit": "923f9709989605fe2bc4b9de8a3625fa808f5cd6" },
+ "nvim-toggler": { "branch": "main", "commit": "467808600882fd6c9e33b9dbc4889b1b80cfd917" },
+ "nvim-tree.lua": { "branch": "master", "commit": "1c733e8c1957dc67f47580fe9c458a13b5612d5b" },
+ "nvim-treesitter": { "branch": "main", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
+ "nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
+ "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
+ "presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" },
+ "render-markdown.nvim": { "branch": "main", "commit": "10126effbafb74541b69219711dfb2c631e7ebf8" },
+ "telescope-undo.nvim": { "branch": "main", "commit": "928d0c2dc9606e01e2cc547196f48d2eaecf58e5" },
+ "telescope.nvim": { "branch": "master", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" },
+ "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
+ "twilight.nvim": { "branch": "main", "commit": "664e752f4a219801265cc3fc18782b457b58c1e1" },
+ "typst-preview.nvim": { "branch": "master", "commit": "e544812bba84b4f7976590f2b6c0dfbd099e1893" },
+ "vim-closetag": { "branch": "master", "commit": "d0a562f8bdb107a50595aefe53b1a690460c3822" },
+ "vim-vsnip": { "branch": "master", "commit": "0a4b8419e44f47c57eec4c90df17567ad4b1b36e" },
+ "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
+}
diff --git a/config/nvim-1/lua/config.lua b/config/nvim-1/lua/config.lua
new file mode 100755
index 0000000..f37534b
--- /dev/null
+++ b/config/nvim-1/lua/config.lua
@@ -0,0 +1,86 @@
+local opt = vim.opt
+local map = vim.keymap.set
+local g = vim.g
+
+--filetypes
+vim.cmd("autocmd BufRead,BufNewFile *.m set filetype=objc")
+
+g.mapleader = " "
+
+opt.shiftwidth = 4
+opt.tabstop = 4
+opt.softtabstop = 4
+opt.smarttab = true
+opt.smartindent = true
+
+opt.undofile = true
+opt.undodir = vim.fn.stdpath("config") .. "/undo"
+
+opt.number = true
+opt.relativenumber = true
+
+opt.fillchars = "eob: "
+
+g.loaded_netrw = 1
+g.loaded_netrwPlugin = 1
+
+opt.termguicolors = true
+
+opt.spell = false
+opt.spelllang = { "en_us" }
+
+opt.shell = "/usr/bin/zsh"
+
+vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {
+ border = "single",
+})
+vim.diagnostic.config({ float = { border = "single" } })
+
+map("n", "<leader>u", ":Telescope<cr>")
+map("n", "<leader>t", ":tabnew<cr>")
+map("n", "<A-Right>", ":tabn<cr>")
+map("n", "<A-Left>", ":tabp<cr>")
+map("n", "<A-q>", ":bw<cr>")
+
+map("n", "<leader>.", vim.diagnostic.open_float)
+
+map("n", "<leader>=", "=")
+
+map("n", "<leader>x", "<cmd>!chmod +x %<CR>")
+
+vim.api.nvim_create_autocmd("LspAttach", {
+ group = vim.api.nvim_create_augroup("UserLspConfig", {}),
+ callback = function(ev)
+ vim.bo[ev.buf].omnifunc = "v:lua.vim.lsp.omnifunc"
+
+ local opts = { buffer = ev.buf }
+ map("n", "K", function()
+ vim.lsp.buf.hover({ border = "single" })
+ end, opts)
+ map("n", "gi", vim.lsp.buf.implementation, opts)
+ map("n", "<C-k>", vim.lsp.buf.signature_help, opts)
+ map("n", "<space>wa", vim.lsp.buf.add_workspace_folder, opts)
+ map("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, opts)
+ map("n", "<space>wl", function()
+ print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
+ end, opts)
+ map("n", "<space>D", vim.lsp.buf.type_definition, opts)
+ map("n", "<space>rn", vim.lsp.buf.rename, opts)
+ map({ "n", "v" }, "<space>ca", vim.lsp.buf.code_action, opts)
+ map("n", "gr", vim.lsp.buf.references, opts)
+ map("n", "<space>f", function()
+ vim.lsp.buf.format({ async = true })
+ end, opts)
+ end,
+})
+
+local builtin = require("telescope.builtin")
+map("n", "<leader>ff", builtin.find_files, {})
+map("n", "<leader>fg", builtin.live_grep, {})
+map("n", "<leader>fb", builtin.buffers, {})
+map("n", "<leader>fh", builtin.help_tags, {})
+local treeapi = require("nvim-tree.api")
+map("n", "<leader>e", treeapi.tree.toggle, {})
+
+map("n", "<A-i>", '<CMD>lua require("FTerm").toggle()<CR>')
+map("t", "<A-i>", '<C-\\><C-n><CMD>lua require("FTerm").toggle()<CR>')
diff --git a/config/nvim-1/lua/plugins/catppuccin/init.lua b/config/nvim-1/lua/plugins/catppuccin/init.lua
new file mode 100755
index 0000000..29afa04
--- /dev/null
+++ b/config/nvim-1/lua/plugins/catppuccin/init.lua
@@ -0,0 +1,84 @@
+local colors = {
+ black = "#121212",
+ white = "#ffffff",
+ gray = "#7e7e7e",
+ light_gray = "#d0d0d0",
+ dark_gray = "#505050",
+ red = "#ff5c57",
+ green = "#5af78e",
+ yellow = "#f3f99d",
+ blue = "#57c7ff",
+ purple = "#d183e8",
+ cyan = "#9aedfe",
+}
+
+local highlights = {
+ Normal = { fg = colors.light_gray, bg = colors.black },
+ Comment = { fg = colors.gray, italic = true },
+ Constant = { fg = colors.blue },
+ String = { fg = colors.green },
+ Identifier = { fg = colors.blue },
+ Function = { fg = colors.purple },
+ Statement = { fg = colors.yellow },
+ PreProc = { fg = colors.cyan },
+ Type = { fg = colors.blue },
+ Special = { fg = colors.red },
+ Underlined = { fg = colors.white, underline = true },
+ Todo = { fg = colors.black, bg = colors.yellow, bold = true },
+
+ StatusLine = { fg = colors.white, bg = colors.dark_gray },
+ StatusLineNC = { fg = colors.light_gray, bg = colors.black },
+ NvimTreeNormal = { fg = colors.light_gray, bg = colors.black },
+ NvimTreeFolderName = { fg = colors.blue, bold = true },
+ NvimTreeOpenedFolderName = { fg = colors.green, bold = true },
+ NvimTreeRootFolder = { fg = colors.yellow, bold = true, underline = true },
+ NvimTreeFileIcon = { fg = colors.light_gray },
+ NvimTreeGitDirty = { fg = colors.red },
+ NvimTreeGitStaged = { fg = colors.green },
+ NvimTreeGitNew = { fg = colors.blue },
+ NvimTreeGitRenamed = { fg = colors.purple },
+ NvimTreeGitDeleted = { fg = colors.red },
+ CursorLine = { bg = colors.dark_gray },
+}
+
+for group, opts in pairs(highlights) do
+ vim.api.nvim_set_hl(0, group, opts)
+end
+
+require("lualine").setup({
+ options = {
+ theme = {
+ normal = {
+ a = { fg = colors.black, bg = colors.white, gui = "bold" },
+ b = { fg = colors.white, bg = colors.dark_gray },
+ c = { fg = colors.white, bg = colors.black },
+ },
+ inactive = {
+ a = { fg = colors.dark_gray, bg = colors.black, gui = "bold" },
+ b = { fg = colors.dark_gray, bg = colors.black },
+ c = { fg = colors.dark_gray, bg = colors.black },
+ },
+ },
+ },
+})
+
+require("nvim-tree").setup({
+ view = {
+ width = 30,
+ side = "left",
+ },
+ renderer = {
+ highlight_git = true,
+ root_folder_modifier = ":~",
+ icons = {
+ show = {
+ file = true,
+ folder = true,
+ git = true,
+ },
+ },
+ },
+ filters = {
+ dotfiles = false,
+ },
+})
diff --git a/config/nvim-1/lua/plugins/lazy/init.lua b/config/nvim-1/lua/plugins/lazy/init.lua
new file mode 100755
index 0000000..497cf69
--- /dev/null
+++ b/config/nvim-1/lua/plugins/lazy/init.lua
@@ -0,0 +1,17 @@
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not vim.loop.fs_stat(lazypath) then
+ vim.fn.system({
+ "git",
+ "clone",
+ "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable",
+ lazypath,
+ })
+end
+vim.opt.rtp:prepend(lazypath)
+
+local lazy_plugins = require("plugins/lazy/plugins")
+
+require("lazy").setup(lazy_plugins)
+require("mason").setup()
diff --git a/config/nvim-1/lua/plugins/lazy/plugins.lua b/config/nvim-1/lua/plugins/lazy/plugins.lua
new file mode 100755
index 0000000..10da3ea
--- /dev/null
+++ b/config/nvim-1/lua/plugins/lazy/plugins.lua
@@ -0,0 +1,128 @@
+return {
+ {
+ "andweeb/presence.nvim",
+ "catppuccin/nvim",
+ --"morhetz/gruvbox",
+ "neovim/nvim-lspconfig",
+ "williamboman/mason.nvim",
+ {
+ "nvim-telescope/telescope.nvim",
+ tag = "0.1.5",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ },
+ {
+ "nvim-tree/nvim-tree.lua",
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ },
+ {
+ "folke/todo-comments.nvim",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ opts = {},
+ },
+ {
+ "nvim-lualine/lualine.nvim",
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ },
+ {
+ "nvimtools/none-ls.nvim",
+ dependencies = {
+ "nvimtools/none-ls-extras.nvim",
+ },
+ },
+ {
+ "windwp/nvim-autopairs",
+ event = "InsertEnter",
+ },
+ {
+ "hrsh7th/nvim-cmp",
+ dependencies = {
+ "neovim/nvim-lspconfig",
+ "hrsh7th/cmp-nvim-lsp",
+ "hrsh7th/cmp-nvim-lua",
+ "hrsh7th/cmp-buffer",
+ "hrsh7th/cmp-path",
+ "hrsh7th/cmp-cmdline",
+ "hrsh7th/cmp-vsnip",
+ "hrsh7th/vim-vsnip",
+ },
+ },
+ {
+ "ray-x/lsp_signature.nvim",
+ event = "VeryLazy",
+ },
+ "nvim-treesitter/nvim-treesitter",
+ "f3fora/cmp-spell",
+ {
+ "debugloop/telescope-undo.nvim",
+ dependencies = {
+ {
+ "nvim-telescope/telescope.nvim",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ },
+ },
+ },
+ {
+ "chomosuke/typst-preview.nvim",
+ lazy = false,
+ version = "1.*",
+ opts = {},
+ },
+ {
+ "MeanderingProgrammer/render-markdown.nvim",
+ dependencies = {
+ "nvim-treesitter/nvim-treesitter",
+ "nvim-mini/mini.nvim",
+ },
+ opts = {},
+ },
+ "sitiom/nvim-numbertoggle",
+ "mluders/comfy-line-numbers.nvim",
+ {
+ "folke/which-key.nvim",
+ event = "VeryLazy",
+ init = function()
+ vim.o.timeout = true
+ vim.o.timeoutlen = 300
+ end,
+ },
+ {
+ "folke/twilight.nvim",
+ opts = {
+ dimming = {
+ alpha = 0.35,
+ color = { "Normal" },
+ term_bg = "#282828",
+ inactive = false,
+ },
+ context = 15,
+ treesitter = true,
+ expand = {
+ "function",
+ "method",
+ "table",
+ "if_statement",
+ },
+ exclude = {
+ "md",
+ },
+ },
+ },
+ "nguyenvukhang/nvim-toggler",
+ "alvan/vim-closetag",
+ "norcalli/nvim-colorizer.lua",
+ {
+ "numtostr/fterm.nvim",
+ border = "double",
+ dimensions = {
+ height = 0.9,
+ width = 0.9,
+ },
+ },
+ {
+ "bluz71/vim-moonfly-colors",
+ name = "moonfly",
+ lazy = false,
+ priority = 1000,
+ },
+ },
+}
diff --git a/config/nvim-1/lua/plugins/lsp/init.lua b/config/nvim-1/lua/plugins/lsp/init.lua
new file mode 100755
index 0000000..1785d51
--- /dev/null
+++ b/config/nvim-1/lua/plugins/lsp/init.lua
@@ -0,0 +1,120 @@
+local lsp = require("lspconfig")
+local fmt = require("null-ls")
+local cmp = require("cmp")
+
+require("nvim-autopairs").setup({})
+require("lsp_signature").setup({ hint_enable = false })
+
+local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
+fmt.setup({
+ sources = {
+ fmt.builtins.formatting.clang_format,
+ require("none-ls.formatting.rustfmt"),
+ fmt.builtins.formatting.stylua,
+ fmt.builtins.formatting.gofmt,
+ },
+ on_attach = function(client, bufnr)
+ if client.supports_method("textDocument/formatting") then
+ vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
+ vim.api.nvim_create_autocmd("BufWritePre", {
+ group = augroup,
+ buffer = bufnr,
+ callback = function()
+ vim.lsp.buf.format({ async = false })
+ end,
+ })
+ end
+ end,
+})
+
+cmp.setup({
+ snippet = {
+ expand = function(args)
+ vim.fn["vsnip#anonymous"](args.body)
+ end,
+ },
+ mapping = cmp.mapping.preset.insert({
+ ["<C-b>"] = cmp.mapping.scroll_docs(-4),
+ ["<C-f>"] = cmp.mapping.scroll_docs(4),
+ ["<C-Space>"] = cmp.mapping.complete(),
+ ["<C-e>"] = cmp.mapping.abort(),
+ ["<CR>"] = cmp.mapping.confirm({ select = true }),
+ }),
+ window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered() },
+ sources = cmp.config.sources({
+ { name = "nvim_lsp" },
+ { name = "vsnip" },
+ { name = "spell" },
+ }, {
+ { name = "buffer" },
+ { name = "nvim_lua" },
+ }),
+})
+
+local capabilities = require("cmp_nvim_lsp").default_capabilities()
+
+lsp.html.setup({
+ cmd = { "vscode-html-language-server", "--stdio" },
+ capabilities = capabilities,
+ init_options = {
+ configurationSection = { "html", "css", "javascript" },
+ embeddedLanguages = { css = true, javascript = true },
+ provideFormatter = true,
+ },
+ settings = {
+ html = {
+ format = {
+ wrapLineLength = 120,
+ wrapAttributes = "auto",
+ contentUnformatted = "pre,code,textarea",
+ },
+ hover = { documentation = true, references = true },
+ },
+ },
+})
+
+lsp.cssls.setup({
+ capabilities = capabilities,
+ settings = { css = { validate = true }, scss = { validate = true }, less = { validate = true } },
+})
+
+lsp.ts_ls.setup({
+ capabilities = capabilities,
+ on_attach = function(client)
+ client.server_capabilities.documentFormattingProvider = false
+ end,
+})
+
+lsp.rust_analyzer.setup({ capabilities = capabilities })
+
+local clangd_capabilities = vim.deepcopy(capabilities)
+clangd_capabilities["offsetEncoding"] = "utf-8"
+lsp.clangd.setup({
+ cmd = { "clangd", "--background-index", "--function-arg-placeholders=0", "-j=12", "--clang-tidy" },
+ capabilities = clangd_capabilities,
+ init_options = { documentFormatting = true },
+})
+
+lsp.pyright.setup({ capabilities = capabilities })
+lsp.gopls.setup({ capabilities = capabilities })
+lsp.asm_lsp.setup({ capabilities = capabilities })
+lsp.zls.setup({ capabilities = capabilities })
+lsp.jdtls.setup({ capabilities = capabilities })
+lsp.tinymist.setup({ capabilities = capabilities })
+
+lsp.lua_ls.setup({
+ on_init = function(client)
+ local path = client.workspace_folders[1].name
+ if not vim.loop.fs_stat(path .. "/.luarc.json") and not vim.loop.fs_stat(path .. "/.luarc.jsonc") then
+ client.config.settings = vim.tbl_deep_extend("force", client.config.settings, {
+ Lua = {
+ runtime = { version = "LuaJIT" },
+ workspace = { checkThirdParty = false, library = { vim.env.VIMRUNTIME } },
+ },
+ })
+ client.notify("workspace/didChangeConfiguration", { settings = client.config.settings })
+ end
+ return true
+ end,
+ capabilities = capabilities,
+})
diff --git a/config/nvim-1/lua/plugins/lualine/init.lua b/config/nvim-1/lua/plugins/lualine/init.lua
new file mode 100755
index 0000000..8de1ba9
--- /dev/null
+++ b/config/nvim-1/lua/plugins/lualine/init.lua
@@ -0,0 +1,42 @@
+local lualine = require("lualine")
+
+lualine.setup({
+ options = {
+ icons_enabled = true,
+ theme = "auto",
+ component_separators = { left = "|", right = "|" },
+ section_separators = { left = "", right = "" },
+ disabled_filetypes = {
+ statusline = {},
+ winbar = {},
+ },
+ ignore_focus = {},
+ always_divide_middle = true,
+ globalstatus = false,
+ refresh = {
+ statusline = 1000,
+ tabline = 1000,
+ winbar = 1000,
+ },
+ },
+ sections = {
+ lualine_a = { "mode" },
+ lualine_b = { "branch", "diff", "diagnostics" },
+ lualine_c = { "filename" },
+ lualine_x = { "encoding", "fileformat", "filetype" },
+ lualine_y = {},
+ lualine_z = { "location" },
+ },
+ inactive_sections = {
+ lualine_a = {},
+ lualine_b = {},
+ lualine_c = { "filename" },
+ lualine_x = { "location" },
+ lualine_y = {},
+ lualine_z = {},
+ },
+ tabline = {},
+ winbar = {},
+ inactive_winbar = {},
+ extensions = {},
+})
diff --git a/config/nvim-1/lua/plugins/nvim-tree/init.lua b/config/nvim-1/lua/plugins/nvim-tree/init.lua
new file mode 100755
index 0000000..c7174f7
--- /dev/null
+++ b/config/nvim-1/lua/plugins/nvim-tree/init.lua
@@ -0,0 +1,2 @@
+local tree = require("nvim-tree")
+tree.setup() \ No newline at end of file
diff --git a/config/nvim-1/lua/plugins/render-markdown/init.lua b/config/nvim-1/lua/plugins/render-markdown/init.lua
new file mode 100755
index 0000000..ab078ce
--- /dev/null
+++ b/config/nvim-1/lua/plugins/render-markdown/init.lua
@@ -0,0 +1,139 @@
+require("render-markdown").setup({
+ link = {
+ -- Turn on / off inline link icon rendering.
+ enabled = true,
+ -- Additional modes to render links.
+ render_modes = false,
+ -- How to handle footnote links, start with a '^'.
+ footnote = {
+ -- Turn on / off footnote rendering.
+ enabled = true,
+ -- Replace value with superscript equivalent.
+ superscript = true,
+ -- Added before link content.
+ prefix = "",
+ -- Added after link content.
+ suffix = "",
+ },
+ -- Inlined with 'image' elements.
+ image = "󰥶 ",
+ -- Inlined with 'email_autolink' elements.
+ email = "󰀓 ",
+ -- Fallback icon for 'inline_link' and 'uri_autolink' elements.
+ hyperlink = "󰌹 ",
+ -- Applies to the inlined icon as a fallback.
+ highlight = "RenderMarkdownLink",
+ -- Applies to WikiLink elements.
+ wiki = {
+ icon = "󱗖 ",
+ body = function()
+ return nil
+ end,
+ highlight = "RenderMarkdownWikiLink",
+ },
+ -- Define custom destination patterns so icons can quickly inform you of what a link
+ -- contains. Applies to 'inline_link', 'uri_autolink', and wikilink nodes. When multiple
+ -- patterns match a link the one with the longer pattern is used.
+ -- The key is for healthcheck and to allow users to change its values, value type below.
+ -- | pattern | matched against the destination text |
+ -- | icon | gets inlined before the link text |
+ -- | kind | optional determines how pattern is checked |
+ -- | | pattern | @see :h lua-patterns, is the default if not set |
+ -- | | suffix | @see :h vim.endswith() |
+ -- | priority | optional used when multiple match, uses pattern length if empty |
+ -- | highlight | optional highlight for 'icon', uses fallback highlight if empty |
+ custom = {
+ web = { pattern = "^http", icon = "󰖟 " },
+ github = { pattern = "github%.com", icon = "󰊤 " },
+ gitlab = { pattern = "gitlab%.com", icon = "󰮠 " },
+ stackoverflow = { pattern = "stackoverflow%.com", icon = "󰓌 " },
+ wikipedia = { pattern = "wikipedia%.org", icon = "󰖬 " },
+ youtube = { pattern = "youtube%.com", icon = "󰗃 " },
+ },
+ },
+ callout = {
+ -- Callouts are a special instance of a 'block_quote' that start with a 'shortcut_link'.
+ -- The key is for healthcheck and to allow users to change its values, value type below.
+ -- | raw | matched against the raw text of a 'shortcut_link', case insensitive |
+ -- | rendered | replaces the 'raw' value when rendering |
+ -- | highlight | highlight for the 'rendered' text and quote markers |
+ -- | quote_icon | optional override for quote.icon value for individual callout |
+ -- | category | optional metadata useful for filtering |
+
+ note = { raw = "[!NOTE]", rendered = "󰋽 Note", highlight = "RenderMarkdownInfo" },
+ tip = { raw = "[!TIP]", rendered = "󰌶 Tip", highlight = "RenderMarkdownSuccess" },
+ important = { raw = "[!IMPORTANT]", rendered = "󰅾 Important", highlight = "RenderMarkdownHint" },
+ warning = { raw = "[!WARNING]", rendered = "󰀪 Warning", highlight = "RenderMarkdownWarn" },
+ caution = { raw = "[!CAUTION]", rendered = "󰳦 Caution", highlight = "RenderMarkdownError" },
+ abstract = { raw = "[!ABSTRACT]", rendered = "󰨸 Abstract", highlight = "RenderMarkdownInfo" },
+ summary = { raw = "[!SUMMARY]", rendered = "󰨸 Summary", highlight = "RenderMarkdownInfo" },
+ tldr = { raw = "[!TLDR]", rendered = "󰨸 Tldr", highlight = "RenderMarkdownInfo" },
+ info = { raw = "[!INFO]", rendered = "󰋽 Info", highlight = "RenderMarkdownInfo" },
+ todo = { raw = "[!TODO]", rendered = "󰗡 Todo", highlight = "RenderMarkdownInfo" },
+ hint = { raw = "[!HINT]", rendered = "󰌶 Hint", highlight = "RenderMarkdownSuccess" },
+ success = { raw = "[!SUCCESS]", rendered = "󰄬 Success", highlight = "RenderMarkdownSuccess" },
+ check = { raw = "[!CHECK]", rendered = "󰄬 Check", highlight = "RenderMarkdownSuccess" },
+ done = { raw = "[!DONE]", rendered = "󰄬 Done", highlight = "RenderMarkdownSuccess" },
+ question = { raw = "[!QUESTION]", rendered = "󰘥 Question", highlight = "RenderMarkdownWarn" },
+ help = { raw = "[!HELP]", rendered = "󰘥 Help", highlight = "RenderMarkdownWarn" },
+ faq = { raw = "[!FAQ]", rendered = "󰘥 Faq", highlight = "RenderMarkdownWarn" },
+ attention = { raw = "[!ATTENTION]", rendered = "󰀪 Attention", highlight = "RenderMarkdownWarn" },
+ failure = { raw = "[!FAILURE]", rendered = "󰅖 Failure", highlight = "RenderMarkdownError" },
+ fail = { raw = "[!FAIL]", rendered = "󰅖 Fail", highlight = "RenderMarkdownError" },
+ missing = { raw = "[!MISSING]", rendered = "󰅖 Missing", highlight = "RenderMarkdownError" },
+ danger = { raw = "[!DANGER]", rendered = "󱐌 Danger", highlight = "RenderMarkdownError" },
+ error = { raw = "[!ERROR]", rendered = "󱐌 Error", highlight = "RenderMarkdownError" },
+ bug = { raw = "[!BUG]", rendered = "󰨰 Bug", highlight = "RenderMarkdownError" },
+ example = { raw = "[!EXAMPLE]", rendered = "󰉹 Example", highlight = "RenderMarkdownHint" },
+ quote = { raw = "[!QUOTE]", rendered = "󱆨 Quote", highlight = "RenderMarkdownQuote" },
+ cite = { raw = "[!CITE]", rendered = "󱆨 Cite", highlight = "RenderMarkdownQuote" },
+ },
+ checkbox = {
+ enabled = true,
+ render_modes = false,
+ bullet = false,
+ right_pad = 1,
+ unchecked = {
+ icon = "󰄱 ",
+ highlight = "RenderMarkdownUnchecked",
+ scope_highlight = nil,
+ },
+ checked = {
+ icon = "󰱒 ",
+ highlight = "RenderMarkdownChecked",
+ scope_highlight = nil,
+ },
+ custom = {
+ todo = { raw = "[-]", rendered = "󰥔 ", highlight = "RenderMarkdownTodo", scope_highlight = nil },
+ },
+ },
+ bullet = {
+ enabled = true,
+ render_modes = false,
+ icons = { "●", "○", "◆", "◇" },
+ ordered_icons = function(ctx)
+ local value = vim.trim(ctx.value)
+ local index = tonumber(value:sub(1, #value - 1))
+ return ("%d."):format(index > 1 and index or ctx.index)
+ end,
+ left_pad = 0,
+ right_pad = 0,
+ highlight = "RenderMarkdownBullet",
+ scope_highlight = {},
+ },
+ quote = { icon = "▋" },
+ anti_conceal = {
+ enabled = true,
+ -- Which elements to always show, ignoring anti conceal behavior. Values can either be
+ -- booleans to fix the behavior or string lists representing modes where anti conceal
+ -- behavior will be ignored. Valid values are:
+ -- head_icon, head_background, head_border, code_language, code_background, code_border,
+ -- dash, bullet, check_icon, check_scope, quote, table_border, callout, link, sign
+ ignore = {
+ code_background = true,
+ sign = true,
+ },
+ above = 0,
+ below = 0,
+ },
+})
diff --git a/config/nvim-1/lua/plugins/telescope/init.lua b/config/nvim-1/lua/plugins/telescope/init.lua
new file mode 100755
index 0000000..2cb0f77
--- /dev/null
+++ b/config/nvim-1/lua/plugins/telescope/init.lua
@@ -0,0 +1,3 @@
+local tel = require("telescope")
+tel.setup({})
+tel.load_extension("undo")
diff --git a/config/nvim-1/lua/plugins/treesitter/init.lua b/config/nvim-1/lua/plugins/treesitter/init.lua
new file mode 100755
index 0000000..192cab7
--- /dev/null
+++ b/config/nvim-1/lua/plugins/treesitter/init.lua
@@ -0,0 +1,10 @@
+local ts = require("nvim-treesitter.configs")
+
+ts.setup({
+ ensure_installed = { "c", "cpp", "lua", "go", "gomod", "gowork", "gosum", "rust", "python" },
+ auto_install = true,
+ sync_install = true,
+ highlight = {
+ enable = true
+ }
+})
diff --git a/config/nvim-1/lua/plugins/whichkey/init.lua b/config/nvim-1/lua/plugins/whichkey/init.lua
new file mode 100755
index 0000000..e6b9906
--- /dev/null
+++ b/config/nvim-1/lua/plugins/whichkey/init.lua
@@ -0,0 +1,2 @@
+local wk = require("which-key")
+wk.setup({})
diff --git a/config/nvim-1/lua/status_line/init.lua b/config/nvim-1/lua/status_line/init.lua
new file mode 100755
index 0000000..904684b
--- /dev/null
+++ b/config/nvim-1/lua/status_line/init.lua
@@ -0,0 +1,102 @@
+local colors = {
+ foreground = "#ebdbb2",
+ pink = "#b16286",
+ red = "#cc241d",
+ green = "#98971a",
+ yellow = "#d79921",
+ orange = "#d65d0e",
+ magenta = "#b16286",
+ cyan = "#458588",
+ bg_darken = "#1d2021",
+ dark_text = "#1d2021",
+}
+
+local M = {}
+
+function M.setup()
+ vim.cmd("hi StatusBackground guifg=" .. colors.foreground .. " guibg=" .. colors.bg_darken)
+ vim.cmd("hi Moden guifg=" .. colors.dark_text .. " guibg=" .. colors.pink .. " gui=bold")
+ vim.cmd("hi Modei guifg=" .. colors.dark_text .. " guibg=" .. colors.green .. " gui=bold")
+ vim.cmd("hi Modev guifg=" .. colors.dark_text .. " guibg=" .. colors.yellow .. " gui=bold")
+ vim.cmd("hi Modet guifg=" .. colors.dark_text .. " guibg=" .. colors.orange .. " gui=bold")
+ vim.cmd("hi Modec guifg=" .. colors.dark_text .. " guibg=" .. colors.magenta .. " gui=bold")
+ vim.cmd("hi Moder guifg=" .. colors.dark_text .. " guibg=" .. colors.red .. " gui=bold")
+ vim.cmd("hi Filetype guifg=" .. colors.cyan .. " guibg=" .. colors.bg_darken .. " gui=bold")
+ vim.cmd("hi Position guifg=" .. colors.yellow .. " guibg=" .. colors.bg_darken .. " gui=bold")
+ vim.cmd("hi GitBranch guifg=" .. colors.orange .. " guibg=" .. colors.bg_darken .. " gui=bold")
+ vim.cmd("hi GitDiff guifg=" .. colors.green .. " guibg=" .. colors.bg_darken)
+ vim.cmd("hi GitDiffDel guifg=" .. colors.red .. " guibg=" .. colors.bg_darken)
+ vim.cmd("hi Separator guifg=" .. colors.foreground .. " guibg=" .. colors.bg_darken)
+ vim.cmd("hi LSPError guifg=" .. colors.red .. " guibg=" .. colors.bg_darken)
+ vim.cmd("hi LSPWarn guifg=" .. colors.yellow .. " guibg=" .. colors.bg_darken)
+ vim.cmd("hi LSPInfo guifg=" .. colors.cyan .. " guibg=" .. colors.bg_darken)
+ vim.cmd("hi LSPOk guifg=" .. colors.green .. " guibg=" .. colors.bg_darken)
+
+ vim.o.statusline = table.concat({
+ "%{%v:lua.themeStatuslineMode()%} ",
+ "%f ",
+ "%{%v:lua.themeGitBranch()%} ",
+ "%{%v:lua.themeGitDiff()%} ",
+ "%{%v:lua.themeLSP()%} ",
+ "%=",
+ "%{%v:lua.themeStatuslineFiletype()%} ",
+ "%{%v:lua.themeStatuslinePosition()%}",
+ })
+end
+
+function themeStatuslineMode()
+ local mode = vim.fn.mode()
+ local mode_highlight = "Mode" .. mode:sub(1, 1)
+ return string.format("%%#%s# %s %%#StatusBackground#", mode_highlight, mode:upper())
+end
+
+function themeStatuslineFiletype()
+ return string.format("%%#Filetype# %s %%#Separator#│%%#StatusBackground#", vim.bo.filetype)
+end
+
+function themeStatuslinePosition()
+ local row, col = unpack(vim.api.nvim_win_get_cursor(0))
+ return string.format("%%#Position# %03d:%02d ", row, col)
+end
+
+function themeGitBranch()
+ local branch = vim.fn.systemlist("git rev-parse --abbrev-ref HEAD 2>/dev/null")[1] or ""
+ if branch ~= "" then
+ return string.format("%%#GitBranch# %s %%#Separator#│%%#StatusBackground#", branch)
+ end
+ return ""
+end
+
+function themeGitDiff()
+ local diff = vim.fn.systemlist("git diff --shortstat 2>/dev/null")[1] or ""
+ local added, removed = diff:match("(%d+) insertions?"), diff:match("(%d+) deletions?")
+ added = added or "0"
+ removed = removed or "0"
+ if diff ~= "" then
+ return string.format("%%#GitDiff#+%s %%#GitDiffDel#-%s %%#StatusBackground#", added, removed)
+ end
+ return ""
+end
+
+function themeLSP()
+ local errors = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.ERROR })
+ local warns = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN })
+ local info = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.INFO })
+ local hints = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.HINT })
+ local str = ""
+ if errors > 0 then
+ str = str .. string.format("%%#LSPError#E:%d ", errors)
+ end
+ if warns > 0 then
+ str = str .. string.format("%%#LSPWarn#W:%d ", warns)
+ end
+ if info > 0 then
+ str = str .. string.format("%%#LSPInfo#I:%d ", info)
+ end
+ if hints > 0 then
+ str = str .. string.format("%%#LSPOk#H:%d ", hints)
+ end
+ return str
+end
+
+return M
diff --git a/config/nvim-1/undo/%home%coast%.Xdefaults b/config/nvim-1/undo/%home%coast%.Xdefaults
new file mode 100644
index 0000000..ec94686
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.Xdefaults
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%Element%electron-config.json b/config/nvim-1/undo/%home%coast%.config%Element%electron-config.json
new file mode 100644
index 0000000..c97175a
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%Element%electron-config.json
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%alacritty%alacritty.toml b/config/nvim-1/undo/%home%coast%.config%alacritty%alacritty.toml
new file mode 100644
index 0000000..d3c6a07
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%alacritty%alacritty.toml
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%dunst%dunstrc b/config/nvim-1/undo/%home%coast%.config%dunst%dunstrc
new file mode 100644
index 0000000..f79da8c
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%dunst%dunstrc
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%eww%_colors.scss b/config/nvim-1/undo/%home%coast%.config%eww%_colors.scss
new file mode 100644
index 0000000..a081160
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%eww%_colors.scss
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%eww%eww.scss b/config/nvim-1/undo/%home%coast%.config%eww%eww.scss
new file mode 100644
index 0000000..35c5ada
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%eww%eww.scss
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%eww%eww.yuck b/config/nvim-1/undo/%home%coast%.config%eww%eww.yuck
new file mode 100644
index 0000000..ef847ca
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%eww%eww.yuck
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%eww%scripts%get-active-workspace.sh b/config/nvim-1/undo/%home%coast%.config%eww%scripts%get-active-workspace.sh
new file mode 100644
index 0000000..5b8174a
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%eww%scripts%get-active-workspace.sh
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%eww%scripts%get-workspaces.sh b/config/nvim-1/undo/%home%coast%.config%eww%scripts%get-workspaces.sh
new file mode 100644
index 0000000..b51d1e9
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%eww%scripts%get-workspaces.sh
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%fht%compositor.toml b/config/nvim-1/undo/%home%coast%.config%fht%compositor.toml
new file mode 100644
index 0000000..ddc12da
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%fht%compositor.toml
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%foot%foot.ini b/config/nvim-1/undo/%home%coast%.config%foot%foot.ini
new file mode 100644
index 0000000..da3ee23
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%foot%foot.ini
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%hypr%hypridle.conf b/config/nvim-1/undo/%home%coast%.config%hypr%hypridle.conf
new file mode 100644
index 0000000..9added8
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%hypr%hypridle.conf
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%hypr%hyprland.conf b/config/nvim-1/undo/%home%coast%.config%hypr%hyprland.conf
new file mode 100644
index 0000000..ea2a4f8
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%hypr%hyprland.conf
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%hypr%hyprlock.conf b/config/nvim-1/undo/%home%coast%.config%hypr%hyprlock.conf
new file mode 100644
index 0000000..1ca560c
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%hypr%hyprlock.conf
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%kwm%config.zon b/config/nvim-1/undo/%home%coast%.config%kwm%config.zon
new file mode 100644
index 0000000..16be823
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%kwm%config.zon
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%mako%config b/config/nvim-1/undo/%home%coast%.config%mako%config
new file mode 100644
index 0000000..21d4ef3
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%mako%config
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%mozilla%firefox%8kysq72s.default-release%chrome%userChrome.css b/config/nvim-1/undo/%home%coast%.config%mozilla%firefox%8kysq72s.default-release%chrome%userChrome.css
new file mode 100644
index 0000000..19027c2
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%mozilla%firefox%8kysq72s.default-release%chrome%userChrome.css
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%neofetch%config.conf b/config/nvim-1/undo/%home%coast%.config%neofetch%config.conf
new file mode 100644
index 0000000..c006483
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%neofetch%config.conf
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%nvim%lua%plugins%catppuccin%init.lua b/config/nvim-1/undo/%home%coast%.config%nvim%lua%plugins%catppuccin%init.lua
new file mode 100644
index 0000000..6a0cc3b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%nvim%lua%plugins%catppuccin%init.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%nvim%lua%plugins%lazy%plugins.lua b/config/nvim-1/undo/%home%coast%.config%nvim%lua%plugins%lazy%plugins.lua
new file mode 100644
index 0000000..a514179
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%nvim%lua%plugins%lazy%plugins.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%picom%picom-animations.conf b/config/nvim-1/undo/%home%coast%.config%picom%picom-animations.conf
new file mode 100644
index 0000000..a64107e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%picom%picom-animations.conf
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%picom%picom.conf b/config/nvim-1/undo/%home%coast%.config%picom%picom.conf
new file mode 100644
index 0000000..6143380
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%picom%picom.conf
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%piss%pissrc b/config/nvim-1/undo/%home%coast%.config%piss%pissrc
new file mode 100644
index 0000000..8df5476
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%piss%pissrc
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%quickshell%clock.qml b/config/nvim-1/undo/%home%coast%.config%quickshell%clock.qml
new file mode 100644
index 0000000..2947ae6
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%quickshell%clock.qml
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%quickshell%currentsong.qml b/config/nvim-1/undo/%home%coast%.config%quickshell%currentsong.qml
new file mode 100644
index 0000000..63f404b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%quickshell%currentsong.qml
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%quickshell%separator.qml b/config/nvim-1/undo/%home%coast%.config%quickshell%separator.qml
new file mode 100644
index 0000000..d750c37
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%quickshell%separator.qml
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%quickshell%shell.qml b/config/nvim-1/undo/%home%coast%.config%quickshell%shell.qml
new file mode 100644
index 0000000..e445b2d
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%quickshell%shell.qml
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%quickshell%workspaces.qml b/config/nvim-1/undo/%home%coast%.config%quickshell%workspaces.qml
new file mode 100644
index 0000000..a931439
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%quickshell%workspaces.qml
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%river%init b/config/nvim-1/undo/%home%coast%.config%river%init
new file mode 100644
index 0000000..9c07d69
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%river%init
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%rofi%config.rasi b/config/nvim-1/undo/%home%coast%.config%rofi%config.rasi
new file mode 100644
index 0000000..e3999e9
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%rofi%config.rasi
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%scrobbler%config.ini b/config/nvim-1/undo/%home%coast%.config%scrobbler%config.ini
new file mode 100644
index 0000000..a63463d
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%scrobbler%config.ini
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%sway%config b/config/nvim-1/undo/%home%coast%.config%sway%config
new file mode 100644
index 0000000..9ea1a0b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%sway%config
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%tym%config.lua b/config/nvim-1/undo/%home%coast%.config%tym%config.lua
new file mode 100644
index 0000000..f7d5ccb
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%tym%config.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%tym%theme.lua b/config/nvim-1/undo/%home%coast%.config%tym%theme.lua
new file mode 100644
index 0000000..b6e4d63
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%tym%theme.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%waybar%config.jsonc b/config/nvim-1/undo/%home%coast%.config%waybar%config.jsonc
new file mode 100644
index 0000000..51d45d0
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%waybar%config.jsonc
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.config%waybar%style.css b/config/nvim-1/undo/%home%coast%.config%waybar%style.css
new file mode 100644
index 0000000..3467a78
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.config%waybar%style.css
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.curlrc b/config/nvim-1/undo/%home%coast%.curlrc
new file mode 100644
index 0000000..47e0956
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.curlrc
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%share%American Truck Simulator%config.cfg b/config/nvim-1/undo/%home%coast%.local%share%American Truck Simulator%config.cfg
new file mode 100644
index 0000000..5086657
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%share%American Truck Simulator%config.cfg
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%share%applications%element-desktop.desktop b/config/nvim-1/undo/%home%coast%.local%share%applications%element-desktop.desktop
new file mode 100644
index 0000000..8f58e93
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%share%applications%element-desktop.desktop
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%share%applications%firefox-bin.desktop b/config/nvim-1/undo/%home%coast%.local%share%applications%firefox-bin.desktop
new file mode 100644
index 0000000..7ef4b8d
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%share%applications%firefox-bin.desktop
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%share%applications%im.riot.Riot.desktop b/config/nvim-1/undo/%home%coast%.local%share%applications%im.riot.Riot.desktop
new file mode 100644
index 0000000..1535b49
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%share%applications%im.riot.Riot.desktop
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%share%flatpak%app%im.riot.Riot%x86_64%stable%42f010911a82616b14d9f36a8341652b349552a67ba14b8e67fd432e18c37561%export%share%applications%im.riot.Riot.desktop b/config/nvim-1/undo/%home%coast%.local%share%flatpak%app%im.riot.Riot%x86_64%stable%42f010911a82616b14d9f36a8341652b349552a67ba14b8e67fd432e18c37561%export%share%applications%im.riot.Riot.desktop
new file mode 100644
index 0000000..149d27d
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%share%flatpak%app%im.riot.Riot%x86_64%stable%42f010911a82616b14d9f36a8341652b349552a67ba14b8e67fd432e18c37561%export%share%applications%im.riot.Riot.desktop
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%.git%COMMIT_EDITMSG b/config/nvim-1/undo/%home%coast%.local%src%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..07596ad
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%config%nvim%lua%config.lua b/config/nvim-1/undo/%home%coast%.local%src%config%nvim%lua%config.lua
new file mode 100755
index 0000000..8d1e014
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%config%nvim%lua%config.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%config%sway%config b/config/nvim-1/undo/%home%coast%.local%src%config%sway%config
new file mode 100644
index 0000000..bdd8a66
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%config%sway%config
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%config%waybar%config.jsonc b/config/nvim-1/undo/%home%coast%.local%src%config%waybar%config.jsonc
new file mode 100755
index 0000000..cbd3adb
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%config%waybar%config.jsonc
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%config%waybar%style.css b/config/nvim-1/undo/%home%coast%.local%src%config%waybar%style.css
new file mode 100755
index 0000000..3b6fd1e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%config%waybar%style.css
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%dmenu%config.h b/config/nvim-1/undo/%home%coast%.local%src%dmenu%config.h
new file mode 100644
index 0000000..8c2030f
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%dmenu%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%dmenu%config.mk b/config/nvim-1/undo/%home%coast%.local%src%dmenu%config.mk
new file mode 100644
index 0000000..13e2940
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%dmenu%config.mk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%dmenu%dmenu.c b/config/nvim-1/undo/%home%coast%.local%src%dmenu%dmenu.c
new file mode 100644
index 0000000..baea793
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%dmenu%dmenu.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%dmenu%drw.c b/config/nvim-1/undo/%home%coast%.local%src%dmenu%drw.c
new file mode 100644
index 0000000..33c21ac
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%dmenu%drw.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%dwm%config.h b/config/nvim-1/undo/%home%coast%.local%src%dwm%config.h
new file mode 100644
index 0000000..f98efb5
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%dwm%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%dwm%config.mk b/config/nvim-1/undo/%home%coast%.local%src%dwm%config.mk
new file mode 100644
index 0000000..60ae5f6
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%dwm%config.mk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%dwm%patches.h b/config/nvim-1/undo/%home%coast%.local%src%dwm%patches.h
new file mode 100644
index 0000000..f5512c2
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%dwm%patches.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%mpc-shuf.sh b/config/nvim-1/undo/%home%coast%.local%src%local%bin%mpc-shuf.sh
new file mode 100644
index 0000000..3f01d69
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%mpc-shuf.sh
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%screenie-wlr b/config/nvim-1/undo/%home%coast%.local%src%local%bin%screenie-wlr
new file mode 100644
index 0000000..b135c89
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%screenie-wlr
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%sober b/config/nvim-1/undo/%home%coast%.local%src%local%bin%sober
new file mode 100644
index 0000000..d88c112
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%sober
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%swap.start b/config/nvim-1/undo/%home%coast%.local%src%local%bin%swap.start
new file mode 100644
index 0000000..5c6282d
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%swap.start
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%swap.stop b/config/nvim-1/undo/%home%coast%.local%src%local%bin%swap.stop
new file mode 100644
index 0000000..299dbdd
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%swap.stop
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%updateriver b/config/nvim-1/undo/%home%coast%.local%src%local%bin%updateriver
new file mode 100644
index 0000000..b9e1ebf
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%updateriver
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%updateriver.sh b/config/nvim-1/undo/%home%coast%.local%src%local%bin%updateriver.sh
new file mode 100644
index 0000000..65910ef
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%updateriver.sh
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%upl b/config/nvim-1/undo/%home%coast%.local%src%local%bin%upl
new file mode 100644
index 0000000..c5923b9
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%upl
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%local%bin%uwuify.awk b/config/nvim-1/undo/%home%coast%.local%src%local%bin%uwuify.awk
new file mode 100755
index 0000000..8fa3bac
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%local%bin%uwuify.awk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%slstatus%config.h b/config/nvim-1/undo/%home%coast%.local%src%slstatus%config.h
new file mode 100644
index 0000000..ac72597
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%slstatus%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%slstatus%config.mk b/config/nvim-1/undo/%home%coast%.local%src%slstatus%config.mk
new file mode 100644
index 0000000..dcebd8e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%slstatus%config.mk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%st%config.h b/config/nvim-1/undo/%home%coast%.local%src%st%config.h
new file mode 100644
index 0000000..25333d8
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%st%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.local%src%st%config.mk b/config/nvim-1/undo/%home%coast%.local%src%st%config.mk
new file mode 100644
index 0000000..b335397
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.local%src%st%config.mk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.mpdconf b/config/nvim-1/undo/%home%coast%.mpdconf
new file mode 100644
index 0000000..12bbdf7
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.mpdconf
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.rtorrent.rc b/config/nvim-1/undo/%home%coast%.rtorrent.rc
new file mode 100644
index 0000000..7d56ef2
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.rtorrent.rc
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.var%app%org.vinegarhq.Sober%config%sober%config.json b/config/nvim-1/undo/%home%coast%.var%app%org.vinegarhq.Sober%config%sober%config.json
new file mode 100644
index 0000000..e38108f
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.var%app%org.vinegarhq.Sober%config%sober%config.json
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.wezterm.lua b/config/nvim-1/undo/%home%coast%.wezterm.lua
new file mode 100755
index 0000000..5d55e1b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.wezterm.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.xinitrc b/config/nvim-1/undo/%home%coast%.xinitrc
new file mode 100644
index 0000000..47506d2
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.xinitrc
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.zprofile b/config/nvim-1/undo/%home%coast%.zprofile
new file mode 100644
index 0000000..660503b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.zprofile
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%.zshrc b/config/nvim-1/undo/%home%coast%.zshrc
new file mode 100644
index 0000000..97b0d29
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%.zshrc
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Games%Red Dead Redemption 2%launch.sh b/config/nvim-1/undo/%home%coast%Games%Red Dead Redemption 2%launch.sh
new file mode 100644
index 0000000..5ef820a
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Games%Red Dead Redemption 2%launch.sh
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%NOTES b/config/nvim-1/undo/%home%coast%NOTES
new file mode 100644
index 0000000..75ddf7a
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%NOTES
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%X%term%term b/config/nvim-1/undo/%home%coast%Projects%X%term%term
new file mode 100644
index 0000000..029dfce
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%X%term%term
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%X%term%xterm.c b/config/nvim-1/undo/%home%coast%Projects%X%term%xterm.c
new file mode 100644
index 0000000..ea2d63a
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%X%term%xterm.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%abcl%main.cl b/config/nvim-1/undo/%home%coast%Projects%abcl%main.cl
new file mode 100644
index 0000000..11b585d
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%abcl%main.cl
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%gtk%main.c b/config/nvim-1/undo/%home%coast%Projects%gtk%main.c
new file mode 100644
index 0000000..926449f
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%gtk%main.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble b/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble
new file mode 100644
index 0000000..e35c00b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%.git%COMMIT_EDITMSG b/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..a13bcc8
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%LICENSE b/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%LICENSE
new file mode 100644
index 0000000..07f7bc6
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%LICENSE
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%ashscrobble.py b/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%ashscrobble.py
new file mode 100644
index 0000000..9bd5354
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%py%ashscrobble%ashscrobble.py
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%py%dmenu.lua b/config/nvim-1/undo/%home%coast%Projects%py%dmenu.lua
new file mode 100644
index 0000000..226ff18
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%py%dmenu.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%py%dmenu.py b/config/nvim-1/undo/%home%coast%Projects%py%dmenu.py
new file mode 100644
index 0000000..d5ce864
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%py%dmenu.py
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%pylua%dmenu.lua b/config/nvim-1/undo/%home%coast%Projects%pylua%dmenu.lua
new file mode 100644
index 0000000..745ec8d
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%pylua%dmenu.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%river%kwm%config.def.zon b/config/nvim-1/undo/%home%coast%Projects%river%kwm%config.def.zon
new file mode 100644
index 0000000..5e37c03
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%river%kwm%config.def.zon
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%river%river%build.zig.zon b/config/nvim-1/undo/%home%coast%Projects%river%river%build.zig.zon
new file mode 100644
index 0000000..506bb14
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%river%river%build.zig.zon
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%rs%guessing_game%.gitignore b/config/nvim-1/undo/%home%coast%Projects%rs%guessing_game%.gitignore
new file mode 100755
index 0000000..6470d6c
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%rs%guessing_game%.gitignore
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%config.h b/config/nvim-1/undo/%home%coast%Projects%wayland%config.h
new file mode 100644
index 0000000..08706f7
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%main.py b/config/nvim-1/undo/%home%coast%Projects%wayland%main.py
new file mode 100644
index 0000000..2bb2df2
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%main.py
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%window.c b/config/nvim-1/undo/%home%coast%Projects%wayland%window.c
new file mode 100644
index 0000000..bc5fc59
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%window.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wlbar%main.c b/config/nvim-1/undo/%home%coast%Projects%wayland%wlbar%main.c
new file mode 100644
index 0000000..33c973c
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wlbar%main.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%.git%COMMIT_EDITMSG b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..0dfdf76
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%.gitignore b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%.gitignore
new file mode 100644
index 0000000..10af800
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%.gitignore
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%config.h b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%config.h
new file mode 100644
index 0000000..4d208cf
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%main.c b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%main.c
new file mode 100644
index 0000000..ec97d25
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%main.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%makefile b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%makefile
new file mode 100644
index 0000000..b2b8ad9
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock%makefile
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock.c b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock.c
new file mode 100644
index 0000000..ba2e77f
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wlclock.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wled%.git%COMMIT_EDITMSG b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..8082f55
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wled%.gitignore b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%.gitignore
new file mode 100644
index 0000000..9e426c4
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%.gitignore
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wled%LICENSE b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%LICENSE
new file mode 100644
index 0000000..741c79f
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%LICENSE
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wled%README b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%README
new file mode 100644
index 0000000..fd02d46
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%README
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wled%build.sh b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%build.sh
new file mode 100644
index 0000000..8ed7a03
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%build.sh
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wled%client.c b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%client.c
new file mode 100644
index 0000000..3224b29
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%client.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wled%config.h b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%config.h
new file mode 100644
index 0000000..33620cb
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wled%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%wlindow%client.c b/config/nvim-1/undo/%home%coast%Projects%wayland%wlindow%client.c
new file mode 100644
index 0000000..dde5658
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%wlindow%client.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%Projects%wayland%x11alt.c b/config/nvim-1/undo/%home%coast%Projects%wayland%x11alt.c
new file mode 100644
index 0000000..6cd7f53
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%Projects%wayland%x11alt.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%ashos%linux%.config b/config/nvim-1/undo/%home%coast%ashos%linux%.config
new file mode 100644
index 0000000..2adf754
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%ashos%linux%.config
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%ashos%syslinux.cfg b/config/nvim-1/undo/%home%coast%ashos%syslinux.cfg
new file mode 100644
index 0000000..f64a12e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%ashos%syslinux.cfg
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%conduwuit b/config/nvim-1/undo/%home%coast%conduwuit
new file mode 100644
index 0000000..09757fa
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%conduwuit
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%driver%driver.c b/config/nvim-1/undo/%home%coast%driver%driver.c
new file mode 100644
index 0000000..37a7b4b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%driver%driver.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%.git%COMMIT_EDITMSG b/config/nvim-1/undo/%home%coast%git%compositor%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..4e46888
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%.gitignore b/config/nvim-1/undo/%home%coast%git%compositor%.gitignore
new file mode 100644
index 0000000..93d85b0
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%.gitignore
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%Makefile b/config/nvim-1/undo/%home%coast%git%compositor%Makefile
new file mode 100644
index 0000000..3a81de7
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%Makefile
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%build.sh b/config/nvim-1/undo/%home%coast%git%compositor%build.sh
new file mode 100644
index 0000000..4213af1
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%build.sh
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%makefile b/config/nvim-1/undo/%home%coast%git%compositor%makefile
new file mode 100644
index 0000000..863c008
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%makefile
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%compositor.c b/config/nvim-1/undo/%home%coast%git%compositor%src%compositor.c
new file mode 100644
index 0000000..5b64f3e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%compositor.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%config.h b/config/nvim-1/undo/%home%coast%git%compositor%src%config.h
new file mode 100644
index 0000000..6f37cc9
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%include%compositor.h b/config/nvim-1/undo/%home%coast%git%compositor%src%include%compositor.h
new file mode 100644
index 0000000..510b876
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%include%compositor.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%include%keybinds.h b/config/nvim-1/undo/%home%coast%git%compositor%src%include%keybinds.h
new file mode 100644
index 0000000..4e35078
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%include%keybinds.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%include%screenshot.h b/config/nvim-1/undo/%home%coast%git%compositor%src%include%screenshot.h
new file mode 100644
index 0000000..b10e27e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%include%screenshot.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%keybinds.c b/config/nvim-1/undo/%home%coast%git%compositor%src%keybinds.c
new file mode 100644
index 0000000..e36edb7
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%keybinds.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%keybinds.h b/config/nvim-1/undo/%home%coast%git%compositor%src%keybinds.h
new file mode 100644
index 0000000..5412574
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%keybinds.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%screenshot.c b/config/nvim-1/undo/%home%coast%git%compositor%src%screenshot.c
new file mode 100644
index 0000000..d5f9bdb
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%screenshot.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%compositor%src%util.c b/config/nvim-1/undo/%home%coast%git%compositor%src%util.c
new file mode 100644
index 0000000..f4326c1
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%compositor%src%util.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%hst%config.h b/config/nvim-1/undo/%home%coast%git%hst%config.h
new file mode 100644
index 0000000..dd9887b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%hst%config.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%neuswc%config.mk b/config/nvim-1/undo/%home%coast%git%neuswc%config.mk
new file mode 100644
index 0000000..ce38cda
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%neuswc%config.mk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%neuswc%libswc%compositor.h b/config/nvim-1/undo/%home%coast%git%neuswc%libswc%compositor.h
new file mode 100644
index 0000000..6d1077e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%neuswc%libswc%compositor.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%neuswc%libswc%output.h b/config/nvim-1/undo/%home%coast%git%neuswc%libswc%output.h
new file mode 100644
index 0000000..39865f6
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%neuswc%libswc%output.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%neuswc%libswc%pointer.h b/config/nvim-1/undo/%home%coast%git%neuswc%libswc%pointer.h
new file mode 100644
index 0000000..a15ad9f
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%neuswc%libswc%pointer.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%neuswc%libswc%util.h b/config/nvim-1/undo/%home%coast%git%neuswc%libswc%util.h
new file mode 100644
index 0000000..b94bcd4
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%neuswc%libswc%util.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%neuwld%config.mk b/config/nvim-1/undo/%home%coast%git%neuwld%config.mk
new file mode 100644
index 0000000..f609412
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%neuwld%config.mk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%swc%config.mk b/config/nvim-1/undo/%home%coast%git%swc%config.mk
new file mode 100644
index 0000000..f68e27f
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%swc%config.mk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%swcshot%main.c b/config/nvim-1/undo/%home%coast%git%swcshot%main.c
new file mode 100644
index 0000000..8619f34
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%swcshot%main.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%terminal%Makefile b/config/nvim-1/undo/%home%coast%git%terminal%Makefile
new file mode 100644
index 0000000..c6d428e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%terminal%Makefile
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%terminal%main.c b/config/nvim-1/undo/%home%coast%git%terminal%main.c
new file mode 100644
index 0000000..107db70
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%terminal%main.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%wld%config.mk b/config/nvim-1/undo/%home%coast%git%wld%config.mk
new file mode 100644
index 0000000..bce0bba
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%wld%config.mk
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%wsxwm%Makefile b/config/nvim-1/undo/%home%coast%git%wsxwm%Makefile
new file mode 100644
index 0000000..68f3f92
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%wsxwm%Makefile
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%wsxwm%source%include%wsxwm.h b/config/nvim-1/undo/%home%coast%git%wsxwm%source%include%wsxwm.h
new file mode 100644
index 0000000..bc9e7e9
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%wsxwm%source%include%wsxwm.h
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%wsxwm%source%test.diff b/config/nvim-1/undo/%home%coast%git%wsxwm%source%test.diff
new file mode 100644
index 0000000..7b07e18
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%wsxwm%source%test.diff
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%git%wsxwm%source%wsxwm.c b/config/nvim-1/undo/%home%coast%git%wsxwm%source%wsxwm.c
new file mode 100644
index 0000000..86d64e4
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%git%wsxwm%source%wsxwm.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%hwfetch b/config/nvim-1/undo/%home%coast%hwfetch
new file mode 100644
index 0000000..52b9439
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%hwfetch
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%main.bash b/config/nvim-1/undo/%home%coast%main.bash
new file mode 100644
index 0000000..599b67f
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%main.bash
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%main.c b/config/nvim-1/undo/%home%coast%main.c
new file mode 100644
index 0000000..c891d53
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%main.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%main.lua b/config/nvim-1/undo/%home%coast%main.lua
new file mode 100644
index 0000000..3d596cd
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%main.lua
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%royal b/config/nvim-1/undo/%home%coast%royal
new file mode 100644
index 0000000..a198106
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%royal
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%shared%loader.c b/config/nvim-1/undo/%home%coast%shared%loader.c
new file mode 100644
index 0000000..9c7774e
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%shared%loader.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%shared%shared.c b/config/nvim-1/undo/%home%coast%shared%shared.c
new file mode 100644
index 0000000..d87057b
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%shared%shared.c
Binary files differ
diff --git a/config/nvim-1/undo/%home%coast%test.py b/config/nvim-1/undo/%home%coast%test.py
new file mode 100644
index 0000000..43a396d
--- /dev/null
+++ b/config/nvim-1/undo/%home%coast%test.py
Binary files differ
diff --git a/config/nvim-2/graft b/config/nvim-2/graft
new file mode 160000
+Subproject 93af5846dea167f2ea44991ad3448d10b197935
diff --git a/config/nvim-2/init.vim b/config/nvim-2/init.vim
new file mode 100644
index 0000000..522f4e6
--- /dev/null
+++ b/config/nvim-2/init.vim
@@ -0,0 +1,12 @@
+se notgc bg=dark|colo vim|se nu rnu|se ch=0|se ls=0|se fcs=eob:\ |se shm+=I
+
+if !isdirectory(expand("~/.config/nvim/undodir"))|call mkdir(expand("~/.config/nvim/undodir"))|endif
+if !isdirectory(expand("~/.config/nvim/vscript"))|call mkdir(expand("~/.config/nvim/vscript"))|endif
+
+let sciond = expand("~/.config/nvim/scion")
+if !isdirectory(sciond)|execute "!git clone --depth=1 https://git.sr.ht/~coasteen/vim-scion " . shellescape(sciond)|endif
+
+let vscript_dir = expand("~/.config/nvim/vscript")
+if isdirectory(vscript_dir)|for file in split(glob(vscript_dir . "/*.vim"), '\n')|execute "source " . fnameescape(file)|endfor|endif
+
+se udf|se udir=~/.config/nvim/undodir
diff --git a/config/nvim-2/nvim/init.vim b/config/nvim-2/nvim/init.vim
new file mode 100644
index 0000000..17c29f4
--- /dev/null
+++ b/config/nvim-2/nvim/init.vim
@@ -0,0 +1,12 @@
+se notgc bg=dark|colo vim|se nu rnu|se ch=0|se ls=0|se fcs=eob:\ |se shm+=I
+
+if !isdirectory(expand("~/.config/nvim/undodir"))|call mkdir(expand("~/.config/nvim/undodir"))|endif
+if !isdirectory(expand("~/.config/nvim/vscript"))|call mkdir(expand("~/.config/nvim/vscript"))|endif
+
+let sciond = expand("~/.config/nvim/scion")
+if !isdirectory(sciond)|execute "!git clone --depth=1 https://github.com/coasteen/vim-scion.git " . shellescape(sciond)|endif
+
+let vscript_dir = expand("~/.config/nvim/vscript")
+if isdirectory(vscript_dir)|for file in split(glob(vscript_dir . "/*.vim"), '\n')|execute "source " . fnameescape(file)|endfor|endif
+
+se udf|se udir=~/.config/nvim/undodir
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/LuaSnip b/config/nvim-2/nvim/pack-bak/graft/start/LuaSnip
new file mode 160000
+Subproject a62e1083a3cfe8b6b206e7d3d33a51091df2535
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/cmp-buffer b/config/nvim-2/nvim/pack-bak/graft/start/cmp-buffer
new file mode 160000
+Subproject b74fab3656eea9de20a9b8116afa3cfc4ec0965
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/cmp-nvim-lsp b/config/nvim-2/nvim/pack-bak/graft/start/cmp-nvim-lsp
new file mode 160000
+Subproject cbc7b02bb99fae35cb42f514762b89b5126651e
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/nvim-autopairs b/config/nvim-2/nvim/pack-bak/graft/start/nvim-autopairs
new file mode 160000
+Subproject 7b9923abad60b903ece7c52940e1321d39eccc7
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/nvim-cmp b/config/nvim-2/nvim/pack-bak/graft/start/nvim-cmp
new file mode 160000
+Subproject a1d504892f2bc56c2e79b65c6faded2fd21f3ec
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/nvim-lspconfig b/config/nvim-2/nvim/pack-bak/graft/start/nvim-lspconfig
new file mode 160000
+Subproject 451d4ef9abd4f0f08e379ef0d55d1c391b6125a
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/vim-closetag b/config/nvim-2/nvim/pack-bak/graft/start/vim-closetag
new file mode 160000
+Subproject d0a562f8bdb107a50595aefe53b1a690460c382
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/vim-commentary b/config/nvim-2/nvim/pack-bak/graft/start/vim-commentary
new file mode 160000
+Subproject 64a654ef4a20db1727938338310209b6a63f60c
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/vim-endwise b/config/nvim-2/nvim/pack-bak/graft/start/vim-endwise
new file mode 160000
+Subproject 4994afb0cdf956d9a665a14b9c834869e602c39
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/vim-fugitive b/config/nvim-2/nvim/pack-bak/graft/start/vim-fugitive
new file mode 160000
+Subproject 3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/vim-polyglot b/config/nvim-2/nvim/pack-bak/graft/start/vim-polyglot
new file mode 160000
+Subproject f061eddb7cdcc614c8406847b2bfb53099832a4
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/vim-sensible b/config/nvim-2/nvim/pack-bak/graft/start/vim-sensible
new file mode 160000
+Subproject 0ce2d843d6f588bb0c8c7eec6449171615dc56d
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/vim-surround b/config/nvim-2/nvim/pack-bak/graft/start/vim-surround
new file mode 160000
+Subproject 3d188ed2113431cf8dac77be61b842acb64433d
diff --git a/config/nvim-2/nvim/pack-bak/graft/start/vim-vinegar b/config/nvim-2/nvim/pack-bak/graft/start/vim-vinegar
new file mode 160000
+Subproject bb1bcddf43cfebe05eb565a84ab069b357d0b3d
diff --git a/config/nvim-2/nvim/pack/scion/start/LuaSnip b/config/nvim-2/nvim/pack/scion/start/LuaSnip
new file mode 160000
+Subproject a62e1083a3cfe8b6b206e7d3d33a51091df2535
diff --git a/config/nvim-2/nvim/pack/scion/start/cmp-buffer b/config/nvim-2/nvim/pack/scion/start/cmp-buffer
new file mode 160000
+Subproject b74fab3656eea9de20a9b8116afa3cfc4ec0965
diff --git a/config/nvim-2/nvim/pack/scion/start/cmp-nvim-lsp b/config/nvim-2/nvim/pack/scion/start/cmp-nvim-lsp
new file mode 160000
+Subproject cbc7b02bb99fae35cb42f514762b89b5126651e
diff --git a/config/nvim-2/nvim/pack/scion/start/nvim-autopairs b/config/nvim-2/nvim/pack/scion/start/nvim-autopairs
new file mode 160000
+Subproject 7b9923abad60b903ece7c52940e1321d39eccc7
diff --git a/config/nvim-2/nvim/pack/scion/start/nvim-cmp b/config/nvim-2/nvim/pack/scion/start/nvim-cmp
new file mode 160000
+Subproject a1d504892f2bc56c2e79b65c6faded2fd21f3ec
diff --git a/config/nvim-2/nvim/pack/scion/start/nvim-colorizer.lua b/config/nvim-2/nvim/pack/scion/start/nvim-colorizer.lua
new file mode 160000
+Subproject a065833f35a3a7cc3ef137ac88b5381da2ba302
diff --git a/config/nvim-2/nvim/pack/scion/start/nvim-lspconfig b/config/nvim-2/nvim/pack/scion/start/nvim-lspconfig
new file mode 160000
+Subproject 451d4ef9abd4f0f08e379ef0d55d1c391b6125a
diff --git a/config/nvim-2/nvim/pack/scion/start/nvim-treesitter b/config/nvim-2/nvim/pack/scion/start/nvim-treesitter
new file mode 160000
+Subproject 4916d6592ede8c07973490d9322f187e07dfefa
diff --git a/config/nvim-2/nvim/pack/scion/start/vim-closetag b/config/nvim-2/nvim/pack/scion/start/vim-closetag
new file mode 160000
+Subproject d0a562f8bdb107a50595aefe53b1a690460c382
diff --git a/config/nvim-2/nvim/pack/scion/start/vim-commentary b/config/nvim-2/nvim/pack/scion/start/vim-commentary
new file mode 160000
+Subproject 64a654ef4a20db1727938338310209b6a63f60c
diff --git a/config/nvim-2/nvim/pack/scion/start/vim-endwise b/config/nvim-2/nvim/pack/scion/start/vim-endwise
new file mode 160000
+Subproject 4994afb0cdf956d9a665a14b9c834869e602c39
diff --git a/config/nvim-2/nvim/pack/scion/start/vim-fugitive b/config/nvim-2/nvim/pack/scion/start/vim-fugitive
new file mode 160000
+Subproject 3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f
diff --git a/config/nvim-2/nvim/pack/scion/start/vim-polyglot b/config/nvim-2/nvim/pack/scion/start/vim-polyglot
new file mode 160000
+Subproject f061eddb7cdcc614c8406847b2bfb53099832a4
diff --git a/config/nvim-2/nvim/pack/scion/start/vim-sensible b/config/nvim-2/nvim/pack/scion/start/vim-sensible
new file mode 160000
+Subproject 0ce2d843d6f588bb0c8c7eec6449171615dc56d
diff --git a/config/nvim-2/nvim/pack/scion/start/vim-surround b/config/nvim-2/nvim/pack/scion/start/vim-surround
new file mode 160000
+Subproject 3d188ed2113431cf8dac77be61b842acb64433d
diff --git a/config/nvim-2/nvim/pack/scion/start/vim-vinegar b/config/nvim-2/nvim/pack/scion/start/vim-vinegar
new file mode 160000
+Subproject bb1bcddf43cfebe05eb565a84ab069b357d0b3d
diff --git a/config/nvim-2/nvim/scion b/config/nvim-2/nvim/scion
new file mode 160000
+Subproject 0b4ecbd27497c31a23675f93412931801d85c7e
diff --git a/config/nvim-2/nvim/scion_state.json b/config/nvim-2/nvim/scion_state.json
new file mode 100644
index 0000000..9e1f32e
--- /dev/null
+++ b/config/nvim-2/nvim/scion_state.json
@@ -0,0 +1,21 @@
+{
+ "installed": {
+ "vim-endwise": "64a654ef4a20db1727938338310209b6a63f60c9",
+ "vim-vinegar": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca",
+ "nvim-lspconfig": "451d4ef9abd4f0f08e379ef0d55d1c391b6125a7",
+ "nvim-cmp": "3d188ed2113431cf8dac77be61b842acb64433d9",
+ "vim-commentary": "0b4ecbd27497c31a23675f93412931801d85c7e1",
+ "cmp-buffer": "0ce2d843d6f588bb0c8c7eec6449171615dc56d9",
+ "cmp-nvim-lsp": "bb1bcddf43cfebe05eb565a84ab069b357d0b3d6",
+ "nvim-autopairs": "cbc7b02bb99fae35cb42f514762b89b5126651ef",
+ "vim-surround": "3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f0",
+ "LuaSnip": "4994afb0cdf956d9a665a14b9c834869e602c396",
+ "vim-sensible": "d0a562f8bdb107a50595aefe53b1a690460c3822",
+ "vim-fugitive": "b74fab3656eea9de20a9b8116afa3cfc4ec09657",
+ "vim-closetag": "4916d6592ede8c07973490d9322f187e07dfefac",
+ "vim-polyglot": "7b9923abad60b903ece7c52940e1321d39eccc79",
+ "nvim-treesitter": "a62e1083a3cfe8b6b206e7d3d33a51091df25357",
+ "nvim-colorizer.lua": "a065833f35a3a7cc3ef137ac88b5381da2ba302e"
+ },
+ "last_update": null
+} \ No newline at end of file
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%alacritty%alacritty.toml b/config/nvim-2/nvim/undodir/%home%coast%.config%alacritty%alacritty.toml
new file mode 100644
index 0000000..d5a3c87
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%alacritty%alacritty.toml
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%fastfetch%config.jsonc b/config/nvim-2/nvim/undodir/%home%coast%.config%fastfetch%config.jsonc
new file mode 100644
index 0000000..6fe97d1
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%fastfetch%config.jsonc
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%niri%config.kdl b/config/nvim-2/nvim/undodir/%home%coast%.config%niri%config.kdl
new file mode 100644
index 0000000..27acd12
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%niri%config.kdl
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%graft%config.rb b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%graft%config.rb
new file mode 100644
index 0000000..324ab66
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%graft%config.rb
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%init.vim b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%init.vim
new file mode 100644
index 0000000..8e0ffc1
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%init.vim
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%key.vim b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%key.vim
new file mode 100644
index 0000000..ee0be81
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%key.vim
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%scion%config.rb b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%scion%config.rb
new file mode 100644
index 0000000..de63755
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%scion%config.rb
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%scion%scion.rb b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%scion%scion.rb
new file mode 100644
index 0000000..0c9be05
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%scion%scion.rb
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%test.sh b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%test.sh
new file mode 100644
index 0000000..7c1c89c
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%test.sh
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%lsp.vim b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%lsp.vim
new file mode 100644
index 0000000..d2400b6
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%lsp.vim
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%lua.vim b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%lua.vim
new file mode 100644
index 0000000..d2307e3
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%lua.vim
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%scp.vim b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%scp.vim
new file mode 100644
index 0000000..d38c83b
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%scp.vim
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%theme.vim b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%theme.vim
new file mode 100644
index 0000000..9253f7b
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%nvim%vscript%theme.vim
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%rofi%config.rasi b/config/nvim-2/nvim/undodir/%home%coast%.config%rofi%config.rasi
new file mode 100644
index 0000000..c93d30d
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%rofi%config.rasi
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%starship.toml b/config/nvim-2/nvim/undodir/%home%coast%.config%starship.toml
new file mode 100644
index 0000000..dc0fd24
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%starship.toml
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%systemd%user%.#plasma-polkit-agent.servicec252b1882abfd1a3 b/config/nvim-2/nvim/undodir/%home%coast%.config%systemd%user%.#plasma-polkit-agent.servicec252b1882abfd1a3
new file mode 100644
index 0000000..940c0fd
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%systemd%user%.#plasma-polkit-agent.servicec252b1882abfd1a3
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%config.jsonc b/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%config.jsonc
new file mode 100644
index 0000000..065e305
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%config.jsonc
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%style.css b/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%style.css
new file mode 100644
index 0000000..0262f4f
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%style.css
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%window.sh b/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%window.sh
new file mode 100644
index 0000000..8a353d1
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%waybar%window.sh
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.config%xdg-desktop-portal%portals.conf b/config/nvim-2/nvim/undodir/%home%coast%.config%xdg-desktop-portal%portals.conf
new file mode 100644
index 0000000..45ebe8d
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.config%xdg-desktop-portal%portals.conf
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.local%share%applications%prismlauncher.desktop b/config/nvim-2/nvim/undodir/%home%coast%.local%share%applications%prismlauncher.desktop
new file mode 100644
index 0000000..f0e0cde
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.local%share%applications%prismlauncher.desktop
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.local%share%applications%throne.desktop b/config/nvim-2/nvim/undodir/%home%coast%.local%share%applications%throne.desktop
new file mode 100644
index 0000000..0c048ca
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.local%share%applications%throne.desktop
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.zsh.d%zsh-syntaxhighlighting.zsh b/config/nvim-2/nvim/undodir/%home%coast%.zsh.d%zsh-syntaxhighlighting.zsh
new file mode 100644
index 0000000..231d60e
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.zsh.d%zsh-syntaxhighlighting.zsh
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%.zshrc b/config/nvim-2/nvim/undodir/%home%coast%.zshrc
new file mode 100644
index 0000000..a83dcf8
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%.zshrc
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%DEVLIST b/config/nvim-2/nvim/undodir/%home%coast%DEVLIST
new file mode 100644
index 0000000..80369bc
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%DEVLIST
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%Downloads%snispoof%config.json b/config/nvim-2/nvim/undodir/%home%coast%Downloads%snispoof%config.json
new file mode 100644
index 0000000..1fca528
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%Downloads%snispoof%config.json
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%PRISMLAUNCHER%instances%26.1.2%minecraft%config%DistantHorizons.toml b/config/nvim-2/nvim/undodir/%home%coast%PRISMLAUNCHER%instances%26.1.2%minecraft%config%DistantHorizons.toml
new file mode 100644
index 0000000..c436481
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%PRISMLAUNCHER%instances%26.1.2%minecraft%config%DistantHorizons.toml
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%Xray%config.json b/config/nvim-2/nvim/undodir/%home%coast%Xray%config.json
new file mode 100644
index 0000000..9635c25
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%Xray%config.json
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%bash.sh b/config/nvim-2/nvim/undodir/%home%coast%bash.sh
new file mode 100644
index 0000000..d93b76a
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%bash.sh
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%copyparty-setup.py b/config/nvim-2/nvim/undodir/%home%coast%copyparty-setup.py
new file mode 100644
index 0000000..cdf8e2a
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%copyparty-setup.py
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%dlhub%goodlinks.txt b/config/nvim-2/nvim/undodir/%home%coast%dlhub%goodlinks.txt
new file mode 100644
index 0000000..24d0b10
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%dlhub%goodlinks.txt
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%dlhub%script.py b/config/nvim-2/nvim/undodir/%home%coast%dlhub%script.py
new file mode 100644
index 0000000..108eec0
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%dlhub%script.py
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%main.c b/config/nvim-2/nvim/undodir/%home%coast%main.c
new file mode 100644
index 0000000..7ed02b6
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%main.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%mhr-cfw%config.json b/config/nvim-2/nvim/undodir/%home%coast%mhr-cfw%config.json
new file mode 100644
index 0000000..47d857f
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%mhr-cfw%config.json
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%pertree b/config/nvim-2/nvim/undodir/%home%coast%pertree
new file mode 100644
index 0000000..65d3ee6
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%pertree
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%piss%.git%COMMIT_EDITMSG b/config/nvim-2/nvim/undodir/%home%coast%piss%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..4b50e6d
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%piss%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%piss%LICENSE b/config/nvim-2/nvim/undodir/%home%coast%piss%LICENSE
new file mode 100644
index 0000000..adbb88b
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%piss%LICENSE
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%piss%README.md b/config/nvim-2/nvim/undodir/%home%coast%piss%README.md
new file mode 100644
index 0000000..9f5e7ea
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%piss%README.md
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%piss%makefile b/config/nvim-2/nvim/undodir/%home%coast%piss%makefile
new file mode 100644
index 0000000..b5f5f38
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%piss%makefile
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%piss%pissrc.example.lua b/config/nvim-2/nvim/undodir/%home%coast%piss%pissrc.example.lua
new file mode 100644
index 0000000..8812aac
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%piss%pissrc.example.lua
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%piss%src%chd.1 b/config/nvim-2/nvim/undodir/%home%coast%piss%src%chd.1
new file mode 100644
index 0000000..57269c6
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%piss%src%chd.1
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%piss%src%daemon.c b/config/nvim-2/nvim/undodir/%home%coast%piss%src%daemon.c
new file mode 100644
index 0000000..990c7c1
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%piss%src%daemon.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%piss%src%piss.1 b/config/nvim-2/nvim/undodir/%home%coast%piss%src%piss.1
new file mode 100644
index 0000000..8d66e00
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%piss%src%piss.1
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%.git%COMMIT_EDITMSG b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..79d5e94
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%.gitignore b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%.gitignore
new file mode 100644
index 0000000..da38c50
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%.gitignore
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%README b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%README
new file mode 100644
index 0000000..72beb72
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%README
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%main.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%main.c
new file mode 100644
index 0000000..23b4ca9
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%main.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%makefile b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%makefile
new file mode 100644
index 0000000..96e432c
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%makefile
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%src%main.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%src%main.c
new file mode 100644
index 0000000..a5ec018
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%catter%src%main.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%.git%COMMIT_EDITMSG b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..fb2cb6b
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%.gitignore b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%.gitignore
new file mode 100644
index 0000000..589b4da
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%.gitignore
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%LICENSE b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%LICENSE
new file mode 100644
index 0000000..08ed009
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%LICENSE
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%README b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%README
new file mode 100644
index 0000000..3bd3366
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%README
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%src%main.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%src%main.c
new file mode 100644
index 0000000..4e6ff1a
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%compteur%src%main.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%main.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%main.c
new file mode 100644
index 0000000..679ff66
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%main.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%makefile b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%makefile
new file mode 100644
index 0000000..17c6793
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%makefile
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%rand b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%rand
new file mode 100644
index 0000000..56d03ad
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%rand
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%src%input.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%src%input.c
new file mode 100644
index 0000000..45aa5c7
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%src%input.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%src%main.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%src%main.c
new file mode 100644
index 0000000..ed928db
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%ct%src%main.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%cterm%cterm.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%cterm%cterm.c
new file mode 100644
index 0000000..7d07740
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%cterm%cterm.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%.git%COMMIT_EDITMSG b/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..75627d0
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%.gitignore b/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%.gitignore
new file mode 100644
index 0000000..51d07c6
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%.gitignore
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%build.sh b/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%build.sh
new file mode 100644
index 0000000..bf83347
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%build.sh
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%main.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%main.c
new file mode 100644
index 0000000..e373775
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%gl%Valkhaus%main.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%makefile b/config/nvim-2/nvim/undodir/%home%coast%projects%c%makefile
new file mode 100644
index 0000000..4531b80
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%makefile
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%makefile-opt b/config/nvim-2/nvim/undodir/%home%coast%projects%c%makefile-opt
new file mode 100644
index 0000000..c082083
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%makefile-opt
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%template-opt.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%template-opt.c
new file mode 100644
index 0000000..5ddc68f
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%template-opt.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%main.c b/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%main.c
new file mode 100644
index 0000000..dbdcffb
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%main.c
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%makefile b/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%makefile
new file mode 100644
index 0000000..9f8abb3
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%makefile
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%shader.frag b/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%shader.frag
new file mode 100644
index 0000000..6f417f2
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%shader.frag
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%shader.vert b/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%shader.vert
new file mode 100644
index 0000000..3c4b521
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%c%vk%Valk%shader.vert
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%eul-license%v1 b/config/nvim-2/nvim/undodir/%home%coast%projects%eul-license%v1
new file mode 100644
index 0000000..80dd9ed
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%eul-license%v1
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-asifaiusf%.git%COMMIT_EDITMSG b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-asifaiusf%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..29aa774
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-asifaiusf%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-asifaiusf%README.md b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-asifaiusf%README.md
new file mode 100644
index 0000000..0fa47e7
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-asifaiusf%README.md
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%.git%COMMIT_EDITMSG b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..1a80d3c
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%README b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%README
new file mode 100644
index 0000000..17004b3
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%README
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%README.md b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%README.md
new file mode 100644
index 0000000..db08edb
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%README.md
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%Rakefile b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%Rakefile
new file mode 100644
index 0000000..35efbe9
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%Rakefile
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%config.rb b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%config.rb
new file mode 100644
index 0000000..fee7f37
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%config.rb
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%scion.rb b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%scion.rb
new file mode 100644
index 0000000..e994a7a
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%vim-scion%scion.rb
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%wayland-rec%config.rb b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%wayland-rec%config.rb
new file mode 100644
index 0000000..d752ef9
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%wayland-rec%config.rb
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%wayland-rec%main.rb b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%wayland-rec%main.rb
new file mode 100644
index 0000000..6d3af5c
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%projects%ruby%wayland-rec%main.rb
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%home%coast%shit.sh b/config/nvim-2/nvim/undodir/%home%coast%shit.sh
new file mode 100644
index 0000000..6e9aeb6
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%home%coast%shit.sh
Binary files differ
diff --git a/config/nvim-2/nvim/undodir/%mnt%Home%dotfiles%.gitignore b/config/nvim-2/nvim/undodir/%mnt%Home%dotfiles%.gitignore
new file mode 100644
index 0000000..f80e3f4
--- /dev/null
+++ b/config/nvim-2/nvim/undodir/%mnt%Home%dotfiles%.gitignore
Binary files differ
diff --git a/config/nvim-2/nvim/vscript/key.vim b/config/nvim-2/nvim/vscript/key.vim
new file mode 100644
index 0000000..7a1fcf5
--- /dev/null
+++ b/config/nvim-2/nvim/vscript/key.vim
@@ -0,0 +1,2 @@
+let mapleader=","
+nnoremap <Leader>x :!chmod +x %<CR>
diff --git a/config/nvim-2/nvim/vscript/lua.vim b/config/nvim-2/nvim/vscript/lua.vim
new file mode 100644
index 0000000..aa14c46
--- /dev/null
+++ b/config/nvim-2/nvim/vscript/lua.vim
@@ -0,0 +1,87 @@
+lua << EOF
+
+vim.o.termguicolors = true
+
+local on_attach = function(client, bufnr)
+ local opts = { buffer = bufnr, remap = false }
+
+ vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
+ vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
+ vim.keymap.set("n", "gr", vim.lsp.buf.references, opts)
+ vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
+ vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
+ vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
+ vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
+end
+
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = { "lua" },
+ callback = function()
+ vim.lsp.start({
+ name = "lua_ls",
+ cmd = { "lua-language-server" },
+ on_attach = on_attach,
+ })
+ end,
+})
+
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = { "python" },
+ callback = function()
+ vim.lsp.start({
+ name = "pyright",
+ cmd = { "pyright-langserver", "--stdio" },
+ on_attach = on_attach,
+ })
+ end,
+})
+
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = { "c", "cpp" },
+ callback = function()
+ vim.lsp.start({
+ name = "clangd",
+ cmd = { "clangd" },
+ on_attach = on_attach,
+ })
+ end,
+})
+
+local cmp = require("cmp")
+
+cmp.setup({
+ snippet = {
+ expand = function(args)
+ vim.snippet.expand(args.body)
+ end,
+ },
+
+ mapping = cmp.mapping.preset.insert({
+ ["<C-Space>"] = cmp.mapping.complete(),
+ ["<CR>"] = cmp.mapping.confirm({ select = true }),
+ }),
+
+ sources = cmp.config.sources({
+ { name = "nvim_lsp" },
+ { name = "buffer" },
+ }),
+})
+
+vim.diagnostic.config({
+ virtual_text = true,
+ signs = true,
+ underline = true,
+ update_in_insert = false,
+ severity_sort = true,
+
+ float = {
+ border = "rounded",
+ source = true,
+ },
+})
+
+
+--autopairs?
+require("nvim-autopairs").setup()
+
+EOF
diff --git a/config/nvim-2/nvim/vscript/scp.vim b/config/nvim-2/nvim/vscript/scp.vim
new file mode 100644
index 0000000..6824c18
--- /dev/null
+++ b/config/nvim-2/nvim/vscript/scp.vim
@@ -0,0 +1,29 @@
+function! Sc(char)
+ let closing = {'(': ')', '[': ']', '{': '}', '<': '>', '"': '"', "'": "'"}
+
+ if has_key(closing, a:char)
+ let line = getline('.')
+ let col = col('.') - 1
+ let before = col > 0 ? line[col-1] : ''
+ let after = col < len(line) ? line[col] : ''
+ if before =~ '\w' && after =~ '\w'
+ return a:char
+ endif
+ if (a:char == '"' || a:char == "'") && before == a:char
+ return a:char
+ endif
+ if after == closing[a:char]
+ return "\<Right>"
+ endif
+ return a:char . closing[a:char] . "\<Left>"
+ endif
+
+ return a:char
+endfunction
+
+inoremap ( <C-R>=Sc('(')<CR>
+inoremap [ <C-R>=Sc('[')<CR>
+inoremap { <C-R>=Sc('{')<CR>
+inoremap < <C-R>=Sc('<')<CR>
+inoremap " <C-R>=Sc('"')<CR>
+inoremap ' <C-R>=Sc("'")<CR>
diff --git a/config/nvim-2/nvim/vscript/theme.vim b/config/nvim-2/nvim/vscript/theme.vim
new file mode 100644
index 0000000..02993f3
--- /dev/null
+++ b/config/nvim-2/nvim/vscript/theme.vim
@@ -0,0 +1,61 @@
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let g:coastcolors_name = "coastcolors"
+
+hi Normal guifg=#E7E2DB guibg=NONE gui=NONE
+hi NormalNC guifg=#E7E2DB guibg=NONE gui=NONE
+hi NormalFloat guifg=#E7E2DB guibg=#141414 gui=NONE
+
+hi LineNr guifg=#9F6A5E guibg=NONE
+hi CursorLineNr guifg=#C4A08A guibg=NONE gui=bold
+hi CursorLine guibg=#141414
+hi CursorColumn guibg=#141414
+hi ColorColumn guibg=#101010
+
+hi SignColumn guifg=#9F6A5E guibg=NONE
+hi FoldColumn guifg=#9F6A5E guibg=NONE
+hi Folded guifg=#C4A08A guibg=#141414 gui=italic
+
+hi VertSplit guifg=#2A2A2A
+hi WinSeparator guifg=#2A2A2A
+
+hi StatusLine guifg=#E7E2DB guibg=#1A1A1A
+hi StatusLineNC guifg=#9F6A5E guibg=#141414
+
+hi TabLine guifg=#C4A08A guibg=#141414
+hi TabLineSel guifg=#E7E2DB guibg=#9F6A5E gui=bold
+hi TabLineFill guibg=#141414
+
+hi Visual guibg=#2A2A2A
+hi VisualNOS guibg=#2A2A2A
+
+hi Search guifg=#2A1A0E guibg=#D4813A
+hi IncSearch guifg=#E7E2DB guibg=#A0522D
+hi CurSearch guifg=#E7E2DB guibg=#A0522D
+
+hi Pmenu guifg=#E7E2DB guibg=#141414
+hi PmenuSel guifg=#E7E2DB guibg=#9F6A5E
+hi PmenuSbar guibg=#1A1A1A
+hi PmenuThumb guibg=#3A2A22
+
+hi NonText guifg=#2A2A2A
+hi SpecialKey guifg=#2A2A2A
+hi Whitespace guifg=#1A1A1A
+hi EndOfBuffer guifg=#1A1A1A
+
+hi Comment guifg=#B8896E gui=italic
+hi Constant guifg=#2E6DA4
+hi String guifg=#27794A
+hi Number guifg=#2E6DA4
+hi Boolean guifg=#2E6DA4 gui=bold
+
+hi Function guifg=#8B3A62 gui=bold
+hi Statement guifg=#A0522D gui=bold
+hi Keyword guifg=#C0392B gui=bold
+hi Type guifg=#2A7D7D gui=bold
+
+hi Error guifg=#E7E2DB guibg=#C0392B gui=bold
+hi Todo guifg=#2A1A0E guibg=#D4813A gui=bold
diff --git a/config/nvim-2/pack-bak/graft/start/LuaSnip b/config/nvim-2/pack-bak/graft/start/LuaSnip
new file mode 160000
+Subproject a62e1083a3cfe8b6b206e7d3d33a51091df2535
diff --git a/config/nvim-2/pack-bak/graft/start/cmp-buffer b/config/nvim-2/pack-bak/graft/start/cmp-buffer
new file mode 160000
+Subproject b74fab3656eea9de20a9b8116afa3cfc4ec0965
diff --git a/config/nvim-2/pack-bak/graft/start/cmp-nvim-lsp b/config/nvim-2/pack-bak/graft/start/cmp-nvim-lsp
new file mode 160000
+Subproject cbc7b02bb99fae35cb42f514762b89b5126651e
diff --git a/config/nvim-2/pack-bak/graft/start/nvim-autopairs b/config/nvim-2/pack-bak/graft/start/nvim-autopairs
new file mode 160000
+Subproject 7b9923abad60b903ece7c52940e1321d39eccc7
diff --git a/config/nvim-2/pack-bak/graft/start/nvim-cmp b/config/nvim-2/pack-bak/graft/start/nvim-cmp
new file mode 160000
+Subproject a1d504892f2bc56c2e79b65c6faded2fd21f3ec
diff --git a/config/nvim-2/pack-bak/graft/start/nvim-lspconfig b/config/nvim-2/pack-bak/graft/start/nvim-lspconfig
new file mode 160000
+Subproject 451d4ef9abd4f0f08e379ef0d55d1c391b6125a
diff --git a/config/nvim-2/pack-bak/graft/start/vim-closetag b/config/nvim-2/pack-bak/graft/start/vim-closetag
new file mode 160000
+Subproject d0a562f8bdb107a50595aefe53b1a690460c382
diff --git a/config/nvim-2/pack-bak/graft/start/vim-commentary b/config/nvim-2/pack-bak/graft/start/vim-commentary
new file mode 160000
+Subproject 64a654ef4a20db1727938338310209b6a63f60c
diff --git a/config/nvim-2/pack-bak/graft/start/vim-endwise b/config/nvim-2/pack-bak/graft/start/vim-endwise
new file mode 160000
+Subproject 4994afb0cdf956d9a665a14b9c834869e602c39
diff --git a/config/nvim-2/pack-bak/graft/start/vim-fugitive b/config/nvim-2/pack-bak/graft/start/vim-fugitive
new file mode 160000
+Subproject 3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f
diff --git a/config/nvim-2/pack-bak/graft/start/vim-polyglot b/config/nvim-2/pack-bak/graft/start/vim-polyglot
new file mode 160000
+Subproject f061eddb7cdcc614c8406847b2bfb53099832a4
diff --git a/config/nvim-2/pack-bak/graft/start/vim-sensible b/config/nvim-2/pack-bak/graft/start/vim-sensible
new file mode 160000
+Subproject 0ce2d843d6f588bb0c8c7eec6449171615dc56d
diff --git a/config/nvim-2/pack-bak/graft/start/vim-surround b/config/nvim-2/pack-bak/graft/start/vim-surround
new file mode 160000
+Subproject 3d188ed2113431cf8dac77be61b842acb64433d
diff --git a/config/nvim-2/pack-bak/graft/start/vim-vinegar b/config/nvim-2/pack-bak/graft/start/vim-vinegar
new file mode 160000
+Subproject bb1bcddf43cfebe05eb565a84ab069b357d0b3d
diff --git a/config/nvim-2/scion b/config/nvim-2/scion
new file mode 160000
+Subproject 0b4ecbd27497c31a23675f93412931801d85c7e
diff --git a/config/nvim-2/scion_state.json b/config/nvim-2/scion_state.json
new file mode 100644
index 0000000..4ac6706
--- /dev/null
+++ b/config/nvim-2/scion_state.json
@@ -0,0 +1,19 @@
+{
+ "installed": {
+ "vim-endwise": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca",
+ "vim-vinegar": "4994afb0cdf956d9a665a14b9c834869e602c396",
+ "nvim-lspconfig": "64a654ef4a20db1727938338310209b6a63f60c9",
+ "nvim-cmp": "0ce2d843d6f588bb0c8c7eec6449171615dc56d9",
+ "vim-commentary": "0b4ecbd27497c31a23675f93412931801d85c7e1",
+ "cmp-buffer": "d0a562f8bdb107a50595aefe53b1a690460c3822",
+ "cmp-nvim-lsp": "cbc7b02bb99fae35cb42f514762b89b5126651ef",
+ "nvim-autopairs": "3d188ed2113431cf8dac77be61b842acb64433d9",
+ "vim-surround": "451d4ef9abd4f0f08e379ef0d55d1c391b6125a7",
+ "LuaSnip": "cbc7b02bb99fae35cb42f514762b89b5126651ef",
+ "vim-sensible": "7b9923abad60b903ece7c52940e1321d39eccc79",
+ "vim-fugitive": "bb1bcddf43cfebe05eb565a84ab069b357d0b3d6",
+ "vim-closetag": "3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f0",
+ "vim-polyglot": "f061eddb7cdcc614c8406847b2bfb53099832a4e"
+ },
+ "last_update": null
+} \ No newline at end of file
diff --git a/config/nvim-2/undodir/%home%coast%.config%alacritty%alacritty.toml b/config/nvim-2/undodir/%home%coast%.config%alacritty%alacritty.toml
new file mode 100644
index 0000000..9601b32
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%alacritty%alacritty.toml
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%fastfetch%config.jsonc b/config/nvim-2/undodir/%home%coast%.config%fastfetch%config.jsonc
new file mode 100644
index 0000000..3ebc7ee
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%fastfetch%config.jsonc
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%niri%config.kdl b/config/nvim-2/undodir/%home%coast%.config%niri%config.kdl
new file mode 100644
index 0000000..3563a30
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%niri%config.kdl
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%nvim%graft%config.rb b/config/nvim-2/undodir/%home%coast%.config%nvim%graft%config.rb
new file mode 100644
index 0000000..324ab66
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%nvim%graft%config.rb
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%nvim%init.vim b/config/nvim-2/undodir/%home%coast%.config%nvim%init.vim
new file mode 100644
index 0000000..d4e7d89
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%nvim%init.vim
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%nvim%key.vim b/config/nvim-2/undodir/%home%coast%.config%nvim%key.vim
new file mode 100644
index 0000000..ee0be81
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%nvim%key.vim
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%nvim%test.sh b/config/nvim-2/undodir/%home%coast%.config%nvim%test.sh
new file mode 100644
index 0000000..7c1c89c
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%nvim%test.sh
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%lsp.vim b/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%lsp.vim
new file mode 100644
index 0000000..d2400b6
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%lsp.vim
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%lua.vim b/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%lua.vim
new file mode 100644
index 0000000..5e89793
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%lua.vim
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%scp.vim b/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%scp.vim
new file mode 100644
index 0000000..d38c83b
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%nvim%vscript%scp.vim
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%waybar%config.jsonc b/config/nvim-2/undodir/%home%coast%.config%waybar%config.jsonc
new file mode 100644
index 0000000..38e3164
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%waybar%config.jsonc
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.config%xdg-desktop-portal%portals.conf b/config/nvim-2/undodir/%home%coast%.config%xdg-desktop-portal%portals.conf
new file mode 100644
index 0000000..45ebe8d
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.config%xdg-desktop-portal%portals.conf
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%.zshrc b/config/nvim-2/undodir/%home%coast%.zshrc
new file mode 100644
index 0000000..f6f7ae6
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%.zshrc
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%DEVLIST b/config/nvim-2/undodir/%home%coast%DEVLIST
new file mode 100644
index 0000000..ca37bfb
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%DEVLIST
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%main.c b/config/nvim-2/undodir/%home%coast%main.c
new file mode 100644
index 0000000..993c793
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%main.c
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%pertree b/config/nvim-2/undodir/%home%coast%pertree
new file mode 100644
index 0000000..65d3ee6
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%pertree
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%c%catter%.git%COMMIT_EDITMSG b/config/nvim-2/undodir/%home%coast%projects%c%catter%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..79d5e94
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%c%catter%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%c%catter%.gitignore b/config/nvim-2/undodir/%home%coast%projects%c%catter%.gitignore
new file mode 100644
index 0000000..da38c50
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%c%catter%.gitignore
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%c%catter%README b/config/nvim-2/undodir/%home%coast%projects%c%catter%README
new file mode 100644
index 0000000..72beb72
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%c%catter%README
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%c%catter%main.c b/config/nvim-2/undodir/%home%coast%projects%c%catter%main.c
new file mode 100644
index 0000000..23b4ca9
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%c%catter%main.c
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%c%catter%makefile b/config/nvim-2/undodir/%home%coast%projects%c%catter%makefile
new file mode 100644
index 0000000..96e432c
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%c%catter%makefile
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%c%catter%src%main.c b/config/nvim-2/undodir/%home%coast%projects%c%catter%src%main.c
new file mode 100644
index 0000000..a5ec018
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%c%catter%src%main.c
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%c%makefile-opt b/config/nvim-2/undodir/%home%coast%projects%c%makefile-opt
new file mode 100644
index 0000000..c082083
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%c%makefile-opt
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%c%template-opt.c b/config/nvim-2/undodir/%home%coast%projects%c%template-opt.c
new file mode 100644
index 0000000..5ddc68f
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%c%template-opt.c
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%.git%COMMIT_EDITMSG b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%.git%COMMIT_EDITMSG
new file mode 100644
index 0000000..1a80d3c
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%.git%COMMIT_EDITMSG
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%README b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%README
new file mode 100644
index 0000000..17004b3
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%README
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%README.md b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%README.md
new file mode 100644
index 0000000..db08edb
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%README.md
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%Rakefile b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%Rakefile
new file mode 100644
index 0000000..35efbe9
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%Rakefile
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%config.rb b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%config.rb
new file mode 100644
index 0000000..fee7f37
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%config.rb
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%scion.rb b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%scion.rb
new file mode 100644
index 0000000..e994a7a
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%ruby%vim-scion%scion.rb
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%ruby%wayland-rec%config.rb b/config/nvim-2/undodir/%home%coast%projects%ruby%wayland-rec%config.rb
new file mode 100644
index 0000000..d752ef9
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%ruby%wayland-rec%config.rb
Binary files differ
diff --git a/config/nvim-2/undodir/%home%coast%projects%ruby%wayland-rec%main.rb b/config/nvim-2/undodir/%home%coast%projects%ruby%wayland-rec%main.rb
new file mode 100644
index 0000000..6d3af5c
--- /dev/null
+++ b/config/nvim-2/undodir/%home%coast%projects%ruby%wayland-rec%main.rb
Binary files differ
diff --git a/config/nvim-2/vscript/key.vim b/config/nvim-2/vscript/key.vim
new file mode 100644
index 0000000..7a1fcf5
--- /dev/null
+++ b/config/nvim-2/vscript/key.vim
@@ -0,0 +1,2 @@
+let mapleader=","
+nnoremap <Leader>x :!chmod +x %<CR>
diff --git a/config/nvim-2/vscript/lua.vim b/config/nvim-2/vscript/lua.vim
new file mode 100644
index 0000000..8d6eec0
--- /dev/null
+++ b/config/nvim-2/vscript/lua.vim
@@ -0,0 +1,122 @@
+lua << EOF
+
+vim.o.termguicolors = true
+
+local on_attach = function(client, bufnr)
+ local opts = { buffer = bufnr, remap = false }
+
+ vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
+ vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
+ vim.keymap.set("n", "gr", vim.lsp.buf.references, opts)
+ vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
+ vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
+ vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
+ vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
+end
+
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = { "lua" },
+ callback = function()
+ vim.lsp.start({
+ name = "lua_ls",
+ cmd = { "lua-language-server" },
+ on_attach = on_attach,
+ })
+ end,
+})
+
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = { "python" },
+ callback = function()
+ vim.lsp.start({
+ name = "pyright",
+ cmd = { "pyright-langserver", "--stdio" },
+ on_attach = on_attach,
+ })
+ end,
+})
+
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = { "c", "cpp" },
+ callback = function()
+ vim.lsp.start({
+ name = "clangd",
+ cmd = { "clangd" },
+ on_attach = on_attach,
+ })
+ end,
+})
+
+local cmp = require("cmp")
+
+cmp.setup({
+ snippet = {
+ expand = function(args)
+ vim.snippet.expand(args.body)
+ end,
+ },
+
+ mapping = cmp.mapping.preset.insert({
+ ["<C-Space>"] = cmp.mapping.complete(),
+ ["<CR>"] = cmp.mapping.confirm({ select = true }),
+ }),
+
+ sources = cmp.config.sources({
+ { name = "nvim_lsp" },
+ { name = "buffer" },
+ }),
+})
+
+vim.diagnostic.config({
+ virtual_text = true,
+ signs = true,
+ underline = true,
+ update_in_insert = false,
+ severity_sort = true,
+
+ float = {
+ border = "rounded",
+ source = true,
+ },
+})
+
+vim.cmd([[
+highlight clear
+syntax reset
+highlight Normal guibg=NONE
+highlight NormalNC guibg=NONE
+highlight SignColumn guibg=NONE
+highlight FoldColumn guibg=NONE
+highlight VertSplit guibg=NONE
+highlight StatusLine guibg=NONE
+highlight StatusLineNC guibg=NONE
+highlight LineNr guibg=NONE
+highlight CursorLine guibg=#151515
+highlight CursorLineNr guibg=NONE gui=bold
+highlight Pmenu guibg=#121212
+highlight PmenuSel guibg=#2a2a2a
+highlight PmenuSbar guibg=#121212
+highlight PmenuThumb guibg=#4a4a4a
+highlight NormalFloat guibg=NONE
+highlight FloatBorder guibg=NONE
+highlight DiagnosticError guifg=#ff6b6b
+highlight DiagnosticWarn guifg=#ffd08a
+highlight DiagnosticInfo guifg=#9fe7ff
+highlight DiagnosticHint guifg=#7dff9a
+highlight DiagnosticVirtualTextError guifg=#ff6b6b guibg=NONE
+highlight DiagnosticVirtualTextWarn guifg=#ffd08a guibg=NONE
+highlight DiagnosticVirtualTextInfo guifg=#9fe7ff guibg=NONE
+highlight DiagnosticVirtualTextHint guifg=#7dff7a guibg=NONE
+highlight DiagnosticUnderlineError gui=undercurl guisp=#ff6b6b
+highlight DiagnosticUnderlineWarn gui=undercurl guisp=#ffd08a
+highlight DiagnosticUnderlineInfo gui=undercurl guisp=#9fe7ff
+highlight DiagnosticUnderlineHint gui=undercurl guisp=#7dff7a
+highlight LspReferenceText guibg=#1f1f1f
+highlight LspReferenceRead guibg=#1f1f1f
+highlight LspReferenceWrite guibg=#1f1f1f
+]])
+
+--autopairs?
+require("nvim-autopairs").setup()
+
+EOF
diff --git a/config/nvim-2/vscript/scp.vim b/config/nvim-2/vscript/scp.vim
new file mode 100644
index 0000000..6824c18
--- /dev/null
+++ b/config/nvim-2/vscript/scp.vim
@@ -0,0 +1,29 @@
+function! Sc(char)
+ let closing = {'(': ')', '[': ']', '{': '}', '<': '>', '"': '"', "'": "'"}
+
+ if has_key(closing, a:char)
+ let line = getline('.')
+ let col = col('.') - 1
+ let before = col > 0 ? line[col-1] : ''
+ let after = col < len(line) ? line[col] : ''
+ if before =~ '\w' && after =~ '\w'
+ return a:char
+ endif
+ if (a:char == '"' || a:char == "'") && before == a:char
+ return a:char
+ endif
+ if after == closing[a:char]
+ return "\<Right>"
+ endif
+ return a:char . closing[a:char] . "\<Left>"
+ endif
+
+ return a:char
+endfunction
+
+inoremap ( <C-R>=Sc('(')<CR>
+inoremap [ <C-R>=Sc('[')<CR>
+inoremap { <C-R>=Sc('{')<CR>
+inoremap < <C-R>=Sc('<')<CR>
+inoremap " <C-R>=Sc('"')<CR>
+inoremap ' <C-R>=Sc("'")<CR>
diff --git a/config/nvim-root/init.lua b/config/nvim-root/init.lua
new file mode 100755
index 0000000..1d60c81
--- /dev/null
+++ b/config/nvim-root/init.lua
@@ -0,0 +1,168 @@
+vim.cmd [[
+ set nocompatible
+ filetype plugin indent on
+ syntax enable
+ call plug#begin('~/.local/share/nvim/plugged')
+ Plug 'tpope/vim-sensible'
+ Plug 'junegunn/fzf.vim'
+ Plug 'tpope/vim-surround'
+ Plug 'tpope/vim-commentary'
+ Plug 'jiangmiao/auto-pairs'
+ Plug 'tpope/vim-repeat'
+ Plug 'mattn/emmet-vim'
+ Plug 'norcalli/nvim-colorizer.lua'
+ call plug#end()
+]]
+
+vim.opt.clipboard = "unnamedplus"
+vim.opt.updatetime = 300
+vim.opt.timeoutlen = 500
+vim.opt.signcolumn = "yes"
+vim.opt.completeopt = { "menuone", "noinsert", "noselect" }
+vim.opt.encoding = "utf-8"
+vim.opt.number = true
+vim.opt.relativenumber = true
+vim.opt.numberwidth = 4
+vim.opt.tabstop = 4
+vim.opt.shiftwidth = 4
+vim.opt.expandtab = true
+vim.opt.smartindent = true
+vim.opt.incsearch = true
+vim.opt.hlsearch = true
+vim.opt.ignorecase = true
+vim.opt.smartcase = true
+vim.opt.wrap = true
+vim.opt.mouse = "a"
+vim.opt.scrolloff = 5
+vim.opt.cursorline = true
+vim.opt.showmode = false
+vim.opt.shortmess:append("I")
+vim.opt.autoindent = true
+vim.opt.termguicolors = true
+vim.opt.list = true
+vim.opt.undodir = vim.fn.stdpath("cache") .. "/undo"
+vim.opt.undofile = true
+vim.opt.wrapscan = true
+vim.opt.shortmess:append("c")
+vim.opt.autoread = true
+vim.opt.cmdheight = 1
+vim.opt.belloff = "all"
+vim.opt.laststatus = 2
+vim.opt.scrolljump = 3
+vim.opt.hidden = true
+vim.opt.splitbelow = true
+vim.opt.splitright = true
+vim.opt.backup = false
+vim.opt.writebackup = false
+vim.opt.lazyredraw = true
+vim.opt.smoothscroll = true
+
+vim.api.nvim_set_hl(0, "Normal", { fg = "#a6536f", bg = "NONE", ctermfg = 132, ctermbg = "NONE" })
+vim.api.nvim_set_hl(0, "NormalNC", { fg = "#bb6c82", bg = "NONE", ctermfg = 168, ctermbg = "NONE" })
+vim.api.nvim_set_hl(0, "LineNr", { fg = "#743c5e", bg = "NONE", ctermfg = 132, ctermbg = "NONE" })
+vim.api.nvim_set_hl(0, "CursorLine", { bg = "#3f1f32", fg = "NONE", blend = 30 })
+vim.api.nvim_set_hl(0, "VertSplit", { fg = "#3f1f32", bg = "NONE", ctermfg = 237, ctermbg = "NONE" })
+
+vim.api.nvim_set_hl(0, "StatusLine", {
+ fg = "#a6536f",
+ bg = "#2a1c2e",
+ ctermfg = 132,
+ ctermbg = 235,
+})
+
+vim.api.nvim_set_hl(0, "StatusLineMode", {
+ fg = "#f7d8e5",
+ bg = "#5e2f4c",
+ bold = true,
+ ctermfg = 224,
+ ctermbg = 131,
+})
+
+vim.api.nvim_set_hl(0, "Visual", { bg = "#5a2c3a", fg = "NONE", ctermbg = 52, ctermfg = "NONE" })
+vim.api.nvim_set_hl(0, "VisualNOS", { bg = "#5a2c3a", fg = "NONE", ctermbg = 52, ctermfg = "NONE" })
+vim.api.nvim_set_hl(0, "VisualSB", { bg = "#5a2c3a", fg = "NONE", ctermbg = 52, ctermfg = "NONE" })
+vim.api.nvim_set_hl(0, "Search", { fg = "#b0576f", bg = "#1c1533", ctermfg = 131, ctermbg = 234 })
+vim.api.nvim_set_hl(0, "IncSearch", { fg = "#f5a3ba", bg = "#1c1533", ctermfg = 218, ctermbg = 234 })
+vim.api.nvim_set_hl(0, "Pmenu", { fg = "#b0576f", bg = "NONE", ctermfg = 131, ctermbg = "NONE" })
+vim.api.nvim_set_hl(0, "PmenuSel", { fg = "#000000", bg = "#b0576f", ctermfg = 0, ctermbg = 131 })
+vim.api.nvim_set_hl(0, "WildMenu", { fg = "#b0576f", bg = "NONE", ctermfg = 131, ctermbg = "NONE" })
+vim.api.nvim_set_hl(0, "Folded", { fg = "#c18299", bg = "NONE", ctermfg = 174, ctermbg = "NONE" })
+vim.api.nvim_set_hl(0, "SignColumn", { fg = "#f0b6c8", bg = "NONE", ctermfg = 224, ctermbg = "NONE" })
+
+local mode_names = {
+ n = "ROOT NRM",
+ i = "ROOT INS",
+ v = "ROOT VSL",
+ V = "ROOT VLI",
+ [""] = "ROOT VBL",
+ R = "ROOT RPL",
+ c = "ROOT CMD",
+}
+
+function _G.ModeName()
+ return mode_names[vim.fn.mode()] or "UNK"
+end
+
+vim.opt.statusline = table.concat {
+ "%#StatusLineMode# ",
+ "%{v:lua.ModeName()} ",
+ "%#StatusLine# ",
+ "%f %m %r ",
+ "%=",
+ "Ln:%l/%L ",
+ "Col:%c ",
+ "[%p%%]",
+}
+
+vim.g.mapleader = " "
+local map = vim.keymap.set
+map("n", "<leader>w", ":w<CR>")
+map("n", "<leader>q", ":q<CR>")
+map("n", "<leader>h", ":nohlsearch<CR>", { silent = true })
+map("n", "<leader>n", ":set relativenumber!<CR>")
+map("n", "<C-h>", "<C-w>h")
+map("n", "<C-j>", "<C-w>j")
+map("n", "<C-k>", "<C-w>k")
+map("n", "<C-l>", "<C-w>l")
+map("n", "<leader>v", ":Ex<CR>")
+map("", "j", "gj")
+map("", "k", "gk")
+
+vim.keymap.set({ "n", "v" }, "<leader>cd", vim.cmd.Ex)
+
+vim.keymap.set({ "n", "v" }, "<leader>d", '"_d', { desc = "Delete without yanking" })
+vim.keymap.set("n", "<leader>bn", ":bnext<CR>", { desc = "Next buffer" })
+vim.keymap.set("n", "<leader>bp", ":bprevious<CR>", { desc = "Previous buffer" })
+
+vim.keymap.set("n", "<C-h>", "<C-w>h", { desc = "Move to left window" })
+vim.keymap.set("n", "<C-j>", "<C-w>j", { desc = "Move to bottom window" })
+vim.keymap.set("n", "<C-k>", "<C-w>k", { desc = "Move to top window" })
+vim.keymap.set("n", "<C-l>", "<C-w>l", { desc = "Move to right window" })
+
+local modes_to_disable = { "n", "v", "x", "s", "c" }
+local arrows = { "<Up>", "<Down>", "<Left>", "<Right>" }
+
+for _, mode in ipairs(modes_to_disable) do
+ for _, key in ipairs(arrows) do
+ vim.keymap.set(mode, key, "<Nop>", { silent = true })
+ end
+end
+
+vim.keymap.set("n", "<leader>sv", ":vsplit<CR>", { desc = "Split window vertically" })
+vim.keymap.set("n", "<leader>sh", ":split<CR>", { desc = "Split window horizontally" })
+vim.keymap.set("n", "<C-Up>", ":resize +2<CR>", { desc = "Increase window height" })
+vim.keymap.set("n", "<C-Down>", ":resize -2<CR>", { desc = "Decrease window height" })
+vim.keymap.set("n", "<C-Right>", ":vertical resize -2<CR>", { desc = "Decrease window width" })
+vim.keymap.set("n", "<C-Left>", ":vertical resize +2<CR>", { desc = "Increase window width" })
+
+vim.keymap.set("n", "<A-j>", ":m .+1<CR>==", { desc = "Move line down" })
+vim.keymap.set("n", "<A-k>", ":m .-2<CR>==", { desc = "Move line up" })
+vim.keymap.set("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
+vim.keymap.set("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
+
+require('colorizer').setup {
+ '*',
+ css = { names = true },
+ html = { names = true },
+}
+
diff --git a/config/picom/picom-animations.conf b/config/picom/picom-animations.conf
new file mode 100755
index 0000000..b59cfcb
--- /dev/null
+++ b/config/picom/picom-animations.conf
@@ -0,0 +1,310 @@
+{
+ match = "window_type = 'normal'";
+ animations = (
+ {
+ triggers = ["close"];
+ opacity = {
+ curve = "cubic-bezier(0,1,1,1)";
+ duration = 0.3;
+ start = "window-raw-opacity-before";
+ end = 0;
+ };
+ blur-opacity = "opacity";
+ shadow-opacity = "opacity";
+
+ scale-x = {
+ curve = "cubic-bezier(0,1.3,1,1)";
+ duration = 0.3;
+ start = 1;
+ end = 0.6;
+ };
+ scale-y = "scale-x";
+
+ offset-x = "(1 - scale-x) / 2 * window-width";
+ offset-y = "(1 - scale-y) / 2 * window-height";
+
+ shadow-scale-x = "scale-x";
+ shadow-scale-y = "scale-y";
+ shadow-offset-x = "offset-x";
+ shadow-offset-y = "offset-y";
+ },
+
+ {
+ triggers = ["open"];
+ opacity = {
+ curve = "cubic-bezier(0,1,1,1)";
+ duration = 0.3;
+ start = 0;
+ end = "window-raw-opacity";
+ };
+ blur-opacity = "opacity";
+ shadow-opacity = "opacity";
+
+ scale-x = {
+ curve = "cubic-bezier(0,1.3,1,1)";
+ duration = 0.3;
+ start = 0.6;
+ end = 1;
+ };
+ scale-y = "scale-x";
+
+ offset-x = "(1 - scale-x) / 2 * window-width";
+ offset-y = "(1 - scale-y) / 2 * window-height";
+
+ shadow-scale-x = "scale-x";
+ shadow-scale-y = "scale-y";
+ shadow-offset-x = "offset-x";
+ shadow-offset-y = "offset-y";
+ },
+
+ {
+ triggers = ["geometry"];
+ scale-x = {
+ curve = "cubic-bezier(0,0,0,1.28)";
+ duration = 0.3;
+ start = "window-width-before / window-width";
+ end = 1;
+ };
+
+ scale-x-reverse = {
+ curve = "cubic-bezier(0,0,0,1.28)";
+ duration = 0.4;
+ start = "window-width / window-width-before";
+ end = 1;
+ };
+ scale-y = {
+ curve = "cubic-bezier(0,0,0,1.28)";
+ duration = 0.3;
+ start = "window-height-before / window-height";
+ end = 1;
+ };
+ scale-y-reverse = {
+ curve = "cubic-bezier(0,0,0,1.28)";
+ duration = 0.4;
+ start = "window-height / window-height-before";
+ end = 1;
+ };
+ offset-x = {
+ curve = "cubic-bezier(0,0,0,1.28)";
+ duration = 0.3;
+ start = "window-x-before - window-x";
+ end = 0;
+ };
+ offset-y = {
+ curve = "cubic-bezier(0,0,0,1.28)";
+ duration = 0.3;
+ start = "window-y-before - window-y";
+ end = 0;
+ };
+ shadow-scale-x = "scale-x";
+ shadow-scale-y = "scale-y";
+ shadow-offset-x = "offset-x";
+ shadow-offset-y = "offset-y";
+ }
+ )
+},
+
+{
+ match = "class_g = 'Rofi'";
+ animations = (
+ {
+ triggers = ["close", "hide"];
+ preset = "disappear";
+ duration = 0.05;
+ scale = 0.4;
+ },
+ {
+ triggers = ["open", "show"];
+ preset = "appear";
+ duration = 0.15;
+ scale = 0.4;
+ }
+ )
+},
+
+{
+ match = "class_g = 'dunst'";
+ animations = (
+ {
+ triggers = ["close", "hide"];
+ preset = "fly-out";
+ direction = "up";
+ duration = 0.15;
+ },
+ {
+ triggers = ["open", "show"];
+ preset = "fly-in";
+ direction = "up";
+ duration = 0.15;
+ }
+ )
+},
+
+{
+ match = "class_g = 'jgmenu'";
+ animations = (
+ {
+ triggers = ["close", "hide"];
+ preset = "disappear";
+ duration = 0.05;
+ scale = 0.4;
+ },
+ {
+ triggers = ["open", "show"];
+ preset = "appear";
+ duration = 0.1;
+ scale = 0.4;
+ }
+ )
+},
+
+{
+ match = "class_g = 'bspwm-scratch'";
+ animations = (
+ {
+ triggers = ["close", "hide"];
+ preset = "fly-out";
+ direction = "up";
+ duration = 0.15;
+ },
+ {
+ triggers = ["open", "show"];
+ preset = "fly-in";
+ direction = "up";
+ duration = 0.15;
+ }
+ )
+},
+
+{
+ match = "name = 'Eww - launchermenu'";
+ animations = (
+ {
+ triggers = ["close", "hide"];
+ preset = "slide-out";
+ direction = "right";
+ duration = 0.15;
+ },
+ {
+ triggers = ["open", "show"];
+ preset = "slide-in";
+ direction = "right";
+ duration = 0.15;
+ }
+ )
+},
+
+{
+ match = "name = 'Eww - music'";
+ animations = (
+ {
+ triggers = ["close", "hide"];
+ preset = "slide-out";
+ direction = "up";
+ duration = 0.15;
+ },
+ {
+ triggers = ["open", "show"];
+ preset = "slide-in";
+ direction = "up";
+ duration = 0.15;
+ }
+ )
+},
+
+{
+ match = "name = 'Eww - date'";
+ animations = (
+ {
+ triggers = ["close", "hide"];
+ preset = "fly-out";
+ direction = "up";
+ duration = 0.15;
+ },
+ {
+ triggers = ["open", "show"];
+ preset = "fly-in";
+ direction = "up";
+ duration = 0.15;
+ }
+ )
+},
+
+{
+ match = "name = 'Eww - csheet'";
+ animations = (
+ {
+ triggers = ["close", "hide"];
+ preset = "disappear";
+ duration = 0.05;
+ scale = 0.4;
+ },
+ {
+ triggers = ["open", "show"];
+ preset = "appear";
+ duration = 0.1;
+ scale = 0.4;
+ }
+ )
+},
+
+{
+ match = "window_type = 'dock'";
+ animations = (
+ {
+ triggers = ["focus-in", "focus-out"];
+ opacity = {
+ curve = "cubic-bezier(0, 0, 0, 1)";
+ duration = 0.1;
+ start = 0;
+ end = 1;
+ };
+ blur-opacity = "opacity";
+ shadow-opacity = "opacity";
+
+ scale-x = {
+ curve = "cubic-bezier(0, 0, 0, 1)";
+ duration = 0.15;
+ start = 0.9;
+ end = 1;
+ };
+ scale-y = "scale-x";
+
+ offset-x = "(1 - scale-x) / 2 * window-width";
+ offset-y = "(1 - scale-y) / 2 * window-height";
+
+ shadow-scale-x = "scale-x";
+ shadow-scale-y = "scale-y";
+ shadow-offset-x = "offset-x";
+ shadow-offset-y = "offset-y";
+ },
+
+ {
+ triggers = ["focus-out"];
+ opacity = {
+ curve = "cubic-bezier(0, 0, 0, 1)";
+ duration = 0.1;
+ start = 1;
+ end = 0;
+ };
+ blur-opacity = "opacity";
+ shadow-opacity = "opacity";
+
+ scale-x = {
+ curve = "cubic-bezier(0, 0, 0, 1)";
+ duration = 0.15;
+ start = 1;
+ end = 0.9;
+ };
+ scale-y = "scale-x";
+
+ offset-x = "(1 - scale-x) / 2 * window-width";
+ offset-y = "(1 - scale-y) / 2 * window-height";
+
+ shadow-scale-x = "scale-x";
+ shadow-scale-y = "scale-y";
+ shadow-offset-x = "offset-x";
+ shadow-offset-y = "offset-y";
+ }
+ )
+}
diff --git a/config/picom/picom.conf b/config/picom/picom.conf
new file mode 100755
index 0000000..29f35a2
--- /dev/null
+++ b/config/picom/picom.conf
@@ -0,0 +1,151 @@
+shadow-radius = 1;
+shadow-opacity = .1;
+shadow-offset-x = -7;
+shadow-offset-y = -7;
+shadow-color = "#000000"
+
+fading = true;
+fade-in-step = 0.03;
+fade-out-step = 0.03;
+fade-delta = 5
+no-fading-openclose = false;
+no-fading-destroyed-argb = false
+
+frame-opacity = 1.0;
+
+backend = "glx"
+dithered-present = false;
+vsync = true;
+
+detect-rounded-corners = true;
+detect-client-opacity = true;
+detect-transient = true;
+
+use-damage = true;
+
+blur:
+ {
+ method = "dual_kawase";
+ size = 10;
+ deviation = 2.5;
+ }
+
+rules: (
+ {
+ blur-background = true;
+ blur-background-fixed = true;
+ fade = false;
+ },
+ {
+ match = "window_type = 'dock'";
+ corner-radius = 0;
+ shadow = false;
+ },
+ {
+ match = "class_g = 'dwm' || class_g = 'Polybar' || class_g = 'dmenu'";
+ corner-radius = 0;
+ blur-background = true;
+ opacity = 0.80;
+ shadow = false;
+ },
+ {
+ match = "fullscreen = true";
+ corner-radius = 0;
+ },
+ {
+ match = "window_type = 'normal'";
+ fade = true;
+ shadow = true;
+ },
+ {
+ match = "window_type = 'dialog'";
+ shadow = true;
+ },
+ {
+ match = "window_type = 'tooltip'";
+ corner-radius = 0;
+ opacity = 0.90;
+ },
+ {
+ match = "window_type = 'dock'";
+ corner-radius = 0;
+ fade = true;
+ },
+ {
+ match = "window_type = 'dropdown_menu' || window_type = 'menu' || window_type = 'popup' || window_type = 'popup_menu'";
+ corner-radius = 0;
+ },
+ {
+ match = "class_g = 'Alacritty' || class_g = 'kitty' || class_g = 'FloaTerm'";
+ opacity = 0.8;
+ blur-background = true;
+ },
+ {
+ match = "class_g = 'Polybar' || class_g = 'eww-bar' || class_g = 'Viewnior' || class_g = 'Rofi' || class_g = 'mpv' || class_g = 'bspwm-scratch' || class_g = 'Dunst' || class_g = 'retroarch'";
+ corner-radius = 0;
+ },
+ {
+ match = "name = 'Notification' || class_g ?= 'Notify-osd' || class_g = 'Dunst' || class_g = 'Polybar' || class_g = 'Eww' || class_g = 'jgmenu' || class_g = 'scratch' || class_g = 'Spotify' || class_g = 'retroarch' || class_g = 'firefox' || class_g = 'Rofi' || class_g = 'Screenkey' || class_g = 'mpv' || class_g = 'Viewnior' || _GTK_FRAME_EXTENTS@";
+ shadow = false;
+ },
+ {
+ match = "window_type = 'normal'";
+ animations = (
+ {
+ triggers = ["open"];
+ opacity = {
+ curve = "cubic-bezier(0,1,1,1)";
+ duration = 0.3;
+ start = 0;
+ end = "window-raw-opacity";
+ };
+ blur-opacity = "opacity";
+ shadow-opacity = "opacity";
+
+ scale-x = {
+ curve = "cubic-bezier(0,1.3,1,1)";
+ duration = 0.3;
+ start = 0.6;
+ end = 1;
+ };
+ scale-y = "scale-x";
+
+ offset-x = "(1 - scale-x) / 2 * window-width";
+ offset-y = "(1 - scale-y) / 2 * window-height";
+
+ shadow-scale-x = "scale-x";
+ shadow-scale-y = "scale-y";
+ shadow-offset-x = "offset-x";
+ shadow-offset-y = "offset-y";
+ },
+ {
+ triggers = ["close"];
+ opacity = {
+ curve = "cubic-bezier(0,1,1,1)";
+ duration = 0.3;
+ start = "window-raw-opacity-before";
+ end = 0;
+ };
+ blur-opacity = "opacity";
+ shadow-opacity = "opacity";
+
+ scale-x = {
+ curve = "cubic-bezier(0,1.3,1,1)";
+ duration = 0.3;
+ start = 1;
+ end = 0.6;
+ };
+ scale-y = "scale-x";
+
+ offset-x = "(1 - scale-x) / 2 * window-width";
+ offset-y = "(1 - scale-y) / 2 * window-height";
+
+ shadow-scale-x = "scale-x";
+ shadow-scale-y = "scale-y";
+ shadow-offset-x = "offset-x";
+ shadow-offset-y = "offset-y";
+ }
+ )
+ },
+ @include "picom-animations.conf"
+)
diff --git a/config/piss/pissrc b/config/piss/pissrc
new file mode 100755
index 0000000..1ec3420
--- /dev/null
+++ b/config/piss/pissrc
@@ -0,0 +1,4 @@
+#!/bin/sh
+piss bind "Super + Shift + S" "screenie"
+piss bind "Super + R" "$HOME/Projects/py/dmenu.py"
+piss bind "Super + Shift + Return" "dmenu_run -l 10 -fn \"JetBrainsMono Nerd Font:size=11\" -nb \"#121212\" -nf \"#e0e0e0\" -sb \"#222222\" -sf \"#e0e0e0\" -p \"Run:\""
diff --git a/config/plugged/plug.vim b/config/plugged/plug.vim
new file mode 100755
index 0000000..a225a6d
--- /dev/null
+++ b/config/plugged/plug.vim
@@ -0,0 +1,2877 @@
+" vim-plug: Vim plugin manager
+" ============================
+"
+" 1. Download plug.vim and put it in 'autoload' directory
+"
+" # Vim
+" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
+" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
+"
+" # Neovim
+" sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
+" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
+"
+" 2. Add a vim-plug section to your ~/.vimrc (or ~/.config/nvim/init.vim for Neovim)
+"
+" call plug#begin()
+"
+" " List your plugins here
+" Plug 'tpope/vim-sensible'
+"
+" call plug#end()
+"
+" 3. Reload the file or restart Vim, then you can,
+"
+" :PlugInstall to install plugins
+" :PlugUpdate to update plugins
+" :PlugDiff to review the changes from the last update
+" :PlugClean to remove plugins no longer in the list
+"
+" For more information, see https://github.com/junegunn/vim-plug
+"
+"
+" Copyright (c) 2024 Junegunn Choi
+"
+" MIT License
+"
+" Permission is hereby granted, free of charge, to any person obtaining
+" a copy of this software and associated documentation files (the
+" "Software"), to deal in the Software without restriction, including
+" without limitation the rights to use, copy, modify, merge, publish,
+" distribute, sublicense, and/or sell copies of the Software, and to
+" permit persons to whom the Software is furnished to do so, subject to
+" the following conditions:
+"
+" The above copyright notice and this permission notice shall be
+" included in all copies or substantial portions of the Software.
+"
+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+if exists('g:loaded_plug')
+ finish
+endif
+let g:loaded_plug = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let s:plug_src = 'https://github.com/junegunn/vim-plug.git'
+let s:plug_tab = get(s:, 'plug_tab', -1)
+let s:plug_buf = get(s:, 'plug_buf', -1)
+let s:mac_gui = has('gui_macvim') && has('gui_running')
+let s:is_win = has('win32')
+let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win)
+let s:vim8 = has('patch-8.0.0039') && exists('*job_start')
+if s:is_win && &shellslash
+ set noshellslash
+ let s:me = resolve(expand('<sfile>:p'))
+ set shellslash
+else
+ let s:me = resolve(expand('<sfile>:p'))
+endif
+let s:base_spec = { 'branch': '', 'frozen': 0 }
+let s:TYPE = {
+\ 'string': type(''),
+\ 'list': type([]),
+\ 'dict': type({}),
+\ 'funcref': type(function('call'))
+\ }
+let s:loaded = get(s:, 'loaded', {})
+let s:triggers = get(s:, 'triggers', {})
+
+function! s:is_powershell(shell)
+ return a:shell =~# 'powershell\(\.exe\)\?$' || a:shell =~# 'pwsh\(\.exe\)\?$'
+endfunction
+
+function! s:isabsolute(dir) abort
+ return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)')
+endfunction
+
+function! s:git_dir(dir) abort
+ let gitdir = s:trim(a:dir) . '/.git'
+ if isdirectory(gitdir)
+ return gitdir
+ endif
+ if !filereadable(gitdir)
+ return ''
+ endif
+ let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*')
+ if len(gitdir) && !s:isabsolute(gitdir)
+ let gitdir = a:dir . '/' . gitdir
+ endif
+ return isdirectory(gitdir) ? gitdir : ''
+endfunction
+
+function! s:git_origin_url(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let config = gitdir . '/config'
+ if empty(gitdir) || !filereadable(config)
+ return ''
+ endif
+ return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze')
+endfunction
+
+function! s:git_revision(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let head = gitdir . '/HEAD'
+ if empty(gitdir) || !filereadable(head)
+ return ''
+ endif
+
+ let line = get(readfile(head), 0, '')
+ let ref = matchstr(line, '^ref: \zs.*')
+ if empty(ref)
+ return line
+ endif
+
+ if filereadable(gitdir . '/' . ref)
+ return get(readfile(gitdir . '/' . ref), 0, '')
+ endif
+
+ if filereadable(gitdir . '/packed-refs')
+ for line in readfile(gitdir . '/packed-refs')
+ if line =~# ' ' . ref
+ return matchstr(line, '^[0-9a-f]*')
+ endif
+ endfor
+ endif
+
+ return ''
+endfunction
+
+function! s:git_local_branch(dir) abort
+ let gitdir = s:git_dir(a:dir)
+ let head = gitdir . '/HEAD'
+ if empty(gitdir) || !filereadable(head)
+ return ''
+ endif
+ let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*')
+ return len(branch) ? branch : 'HEAD'
+endfunction
+
+function! s:git_origin_branch(spec)
+ if len(a:spec.branch)
+ return a:spec.branch
+ endif
+
+ " The file may not be present if this is a local repository
+ let gitdir = s:git_dir(a:spec.dir)
+ let origin_head = gitdir.'/refs/remotes/origin/HEAD'
+ if len(gitdir) && filereadable(origin_head)
+ return matchstr(get(readfile(origin_head), 0, ''),
+ \ '^ref: refs/remotes/origin/\zs.*')
+ endif
+
+ " The command may not return the name of a branch in detached HEAD state
+ let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
+ return v:shell_error ? '' : result[-1]
+endfunction
+
+if s:is_win
+ function! s:plug_call(fn, ...)
+ let shellslash = &shellslash
+ try
+ set noshellslash
+ return call(a:fn, a:000)
+ finally
+ let &shellslash = shellslash
+ endtry
+ endfunction
+else
+ function! s:plug_call(fn, ...)
+ return call(a:fn, a:000)
+ endfunction
+endif
+
+function! s:plug_getcwd()
+ return s:plug_call('getcwd')
+endfunction
+
+function! s:plug_fnamemodify(fname, mods)
+ return s:plug_call('fnamemodify', a:fname, a:mods)
+endfunction
+
+function! s:plug_expand(fmt)
+ return s:plug_call('expand', a:fmt, 1)
+endfunction
+
+function! s:plug_tempname()
+ return s:plug_call('tempname')
+endfunction
+
+function! plug#begin(...)
+ if a:0 > 0
+ let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p'))
+ elseif exists('g:plug_home')
+ let home = s:path(g:plug_home)
+ elseif has('nvim')
+ let home = stdpath('data') . '/plugged'
+ elseif !empty(&rtp)
+ let home = s:path(split(&rtp, ',')[0]) . '/plugged'
+ else
+ return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.')
+ endif
+ if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp
+ return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.')
+ endif
+
+ let g:plug_home = home
+ let g:plugs = {}
+ let g:plugs_order = []
+ let s:triggers = {}
+
+ call s:define_commands()
+ return 1
+endfunction
+
+function! s:define_commands()
+ command! -nargs=+ -bar Plug call plug#(<args>)
+ if !executable('git')
+ return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.')
+ endif
+ if has('win32')
+ \ && &shellslash
+ \ && (&shell =~# 'cmd\(\.exe\)\?$' || s:is_powershell(&shell))
+ return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
+ endif
+ if !has('nvim')
+ \ && (has('win32') || has('win32unix'))
+ \ && !has('multi_byte')
+ return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.')
+ endif
+ command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>])
+ command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>])
+ command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0)
+ command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif
+ command! -nargs=0 -bar PlugStatus call s:status()
+ command! -nargs=0 -bar PlugDiff call s:diff()
+ command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(<bang>0, <f-args>)
+endfunction
+
+function! s:to_a(v)
+ return type(a:v) == s:TYPE.list ? a:v : [a:v]
+endfunction
+
+function! s:to_s(v)
+ return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n"
+endfunction
+
+function! s:glob(from, pattern)
+ return s:lines(globpath(a:from, a:pattern))
+endfunction
+
+function! s:source(from, ...)
+ let found = 0
+ for pattern in a:000
+ for vim in s:glob(a:from, pattern)
+ execute 'source' s:esc(vim)
+ let found = 1
+ endfor
+ endfor
+ return found
+endfunction
+
+function! s:assoc(dict, key, val)
+ let a:dict[a:key] = add(get(a:dict, a:key, []), a:val)
+endfunction
+
+function! s:ask(message, ...)
+ call inputsave()
+ echohl WarningMsg
+ let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) '))
+ echohl None
+ call inputrestore()
+ echo "\r"
+ return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0
+endfunction
+
+function! s:ask_no_interrupt(...)
+ try
+ return call('s:ask', a:000)
+ catch
+ return 0
+ endtry
+endfunction
+
+function! s:lazy(plug, opt)
+ return has_key(a:plug, a:opt) &&
+ \ (empty(s:to_a(a:plug[a:opt])) ||
+ \ !isdirectory(a:plug.dir) ||
+ \ len(s:glob(s:rtp(a:plug), 'plugin')) ||
+ \ len(s:glob(s:rtp(a:plug), 'after/plugin')))
+endfunction
+
+function! plug#end()
+ if !exists('g:plugs')
+ return s:err('plug#end() called without calling plug#begin() first')
+ endif
+
+ if exists('#PlugLOD')
+ augroup PlugLOD
+ autocmd!
+ augroup END
+ augroup! PlugLOD
+ endif
+ let lod = { 'ft': {}, 'map': {}, 'cmd': {} }
+
+ if get(g:, 'did_load_filetypes', 0)
+ filetype off
+ endif
+ for name in g:plugs_order
+ if !has_key(g:plugs, name)
+ continue
+ endif
+ let plug = g:plugs[name]
+ if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for')
+ let s:loaded[name] = 1
+ continue
+ endif
+
+ if has_key(plug, 'on')
+ let s:triggers[name] = { 'map': [], 'cmd': [] }
+ for cmd in s:to_a(plug.on)
+ if cmd =~? '^<Plug>.\+'
+ if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i'))
+ call s:assoc(lod.map, cmd, name)
+ endif
+ call add(s:triggers[name].map, cmd)
+ elseif cmd =~# '^[A-Z]'
+ let cmd = substitute(cmd, '!*$', '', '')
+ if exists(':'.cmd) != 2
+ call s:assoc(lod.cmd, cmd, name)
+ endif
+ call add(s:triggers[name].cmd, cmd)
+ else
+ call s:err('Invalid `on` option: '.cmd.
+ \ '. Should start with an uppercase letter or `<Plug>`.')
+ endif
+ endfor
+ endif
+
+ if has_key(plug, 'for')
+ let types = s:to_a(plug.for)
+ if !empty(types)
+ augroup filetypedetect
+ call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim')
+ if has('nvim-0.5.0')
+ call s:source(s:rtp(plug), 'ftdetect/**/*.lua', 'after/ftdetect/**/*.lua')
+ endif
+ augroup END
+ endif
+ for type in types
+ call s:assoc(lod.ft, type, name)
+ endfor
+ endif
+ endfor
+
+ for [cmd, names] in items(lod.cmd)
+ execute printf(
+ \ has('patch-7.4.1898')
+ \ ? 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, <q-mods> ,%s)'
+ \ : 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)'
+ \ , cmd, string(cmd), string(names))
+ endfor
+
+ for [map, names] in items(lod.map)
+ for [mode, map_prefix, key_prefix] in
+ \ [['i', '<C-\><C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']]
+ execute printf(
+ \ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>',
+ \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix)
+ endfor
+ endfor
+
+ for [ft, names] in items(lod.ft)
+ augroup PlugLOD
+ execute printf('autocmd FileType %s call <SID>lod_ft(%s, %s)',
+ \ ft, string(ft), string(names))
+ augroup END
+ endfor
+
+ call s:reorg_rtp()
+ filetype plugin indent on
+ if has('vim_starting')
+ if has('syntax') && !exists('g:syntax_on')
+ syntax enable
+ end
+ else
+ call s:reload_plugins()
+ endif
+endfunction
+
+function! s:loaded_names()
+ return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)')
+endfunction
+
+function! s:load_plugin(spec)
+ call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim')
+ if has('nvim-0.5.0')
+ call s:source(s:rtp(a:spec), 'plugin/**/*.lua', 'after/plugin/**/*.lua')
+ endif
+endfunction
+
+function! s:reload_plugins()
+ for name in s:loaded_names()
+ call s:load_plugin(g:plugs[name])
+ endfor
+endfunction
+
+function! s:trim(str)
+ return substitute(a:str, '[\/]\+$', '', '')
+endfunction
+
+function! s:version_requirement(val, min)
+ for idx in range(0, len(a:min) - 1)
+ let v = get(a:val, idx, 0)
+ if v < a:min[idx] | return 0
+ elseif v > a:min[idx] | return 1
+ endif
+ endfor
+ return 1
+endfunction
+
+function! s:git_version_requirement(...)
+ if !exists('s:git_version')
+ let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)')
+ endif
+ return s:version_requirement(s:git_version, a:000)
+endfunction
+
+function! s:progress_opt(base)
+ return a:base && !s:is_win &&
+ \ s:git_version_requirement(1, 7, 1) ? '--progress' : ''
+endfunction
+
+function! s:rtp(spec)
+ return s:path(a:spec.dir . get(a:spec, 'rtp', ''))
+endfunction
+
+if s:is_win
+ function! s:path(path)
+ return s:trim(substitute(a:path, '/', '\', 'g'))
+ endfunction
+
+ function! s:dirpath(path)
+ return s:path(a:path) . '\'
+ endfunction
+
+ function! s:is_local_plug(repo)
+ return a:repo =~? '^[a-z]:\|^[%~]'
+ endfunction
+
+ " Copied from fzf
+ function! s:wrap_cmds(cmds)
+ let cmds = [
+ \ '@echo off',
+ \ 'setlocal enabledelayedexpansion']
+ \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
+ \ + ['endlocal']
+ if has('iconv')
+ if !exists('s:codepage')
+ let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
+ endif
+ return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
+ endif
+ return map(cmds, 'v:val."\r"')
+ endfunction
+
+ function! s:batchfile(cmd)
+ let batchfile = s:plug_tempname().'.bat'
+ call writefile(s:wrap_cmds(a:cmd), batchfile)
+ let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
+ if s:is_powershell(&shell)
+ let cmd = '& ' . cmd
+ endif
+ return [batchfile, cmd]
+ endfunction
+else
+ function! s:path(path)
+ return s:trim(a:path)
+ endfunction
+
+ function! s:dirpath(path)
+ return substitute(a:path, '[/\\]*$', '/', '')
+ endfunction
+
+ function! s:is_local_plug(repo)
+ return a:repo[0] =~ '[/$~]'
+ endfunction
+endif
+
+function! s:err(msg)
+ echohl ErrorMsg
+ echom '[vim-plug] '.a:msg
+ echohl None
+endfunction
+
+function! s:warn(cmd, msg)
+ echohl WarningMsg
+ execute a:cmd 'a:msg'
+ echohl None
+endfunction
+
+function! s:esc(path)
+ return escape(a:path, ' ')
+endfunction
+
+function! s:escrtp(path)
+ return escape(a:path, ' ,')
+endfunction
+
+function! s:remove_rtp()
+ for name in s:loaded_names()
+ let rtp = s:rtp(g:plugs[name])
+ execute 'set rtp-='.s:escrtp(rtp)
+ let after = globpath(rtp, 'after')
+ if isdirectory(after)
+ execute 'set rtp-='.s:escrtp(after)
+ endif
+ endfor
+endfunction
+
+function! s:reorg_rtp()
+ if !empty(s:first_rtp)
+ execute 'set rtp-='.s:first_rtp
+ execute 'set rtp-='.s:last_rtp
+ endif
+
+ " &rtp is modified from outside
+ if exists('s:prtp') && s:prtp !=# &rtp
+ call s:remove_rtp()
+ unlet! s:middle
+ endif
+
+ let s:middle = get(s:, 'middle', &rtp)
+ let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])')
+ let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)')
+ let rtp = join(map(rtps, 'escape(v:val, ",")'), ',')
+ \ . ','.s:middle.','
+ \ . join(map(afters, 'escape(v:val, ",")'), ',')
+ let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g')
+ let s:prtp = &rtp
+
+ if !empty(s:first_rtp)
+ execute 'set rtp^='.s:first_rtp
+ execute 'set rtp+='.s:last_rtp
+ endif
+endfunction
+
+function! s:doautocmd(...)
+ if exists('#'.join(a:000, '#'))
+ execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000)
+ endif
+endfunction
+
+function! s:dobufread(names)
+ for name in a:names
+ let path = s:rtp(g:plugs[name])
+ for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin']
+ if len(finddir(dir, path))
+ if exists('#BufRead')
+ doautocmd BufRead
+ endif
+ return
+ endif
+ endfor
+ endfor
+endfunction
+
+function! plug#load(...)
+ if a:0 == 0
+ return s:err('Argument missing: plugin name(s) required')
+ endif
+ if !exists('g:plugs')
+ return s:err('plug#begin was not called')
+ endif
+ let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000
+ let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)')
+ if !empty(unknowns)
+ let s = len(unknowns) > 1 ? 's' : ''
+ return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', ')))
+ end
+ let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)')
+ if !empty(unloaded)
+ for name in unloaded
+ call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ endfor
+ call s:dobufread(unloaded)
+ return 1
+ end
+ return 0
+endfunction
+
+function! s:remove_triggers(name)
+ if !has_key(s:triggers, a:name)
+ return
+ endif
+ for cmd in s:triggers[a:name].cmd
+ execute 'silent! delc' cmd
+ endfor
+ for map in s:triggers[a:name].map
+ execute 'silent! unmap' map
+ execute 'silent! iunmap' map
+ endfor
+ call remove(s:triggers, a:name)
+endfunction
+
+function! s:lod(names, types, ...)
+ for name in a:names
+ call s:remove_triggers(name)
+ let s:loaded[name] = 1
+ endfor
+ call s:reorg_rtp()
+
+ for name in a:names
+ let rtp = s:rtp(g:plugs[name])
+ for dir in a:types
+ call s:source(rtp, dir.'/**/*.vim')
+ if has('nvim-0.5.0') " see neovim#14686
+ call s:source(rtp, dir.'/**/*.lua')
+ endif
+ endfor
+ if a:0
+ if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2))
+ execute 'runtime' a:1
+ endif
+ call s:source(rtp, a:2)
+ endif
+ call s:doautocmd('User', name)
+ endfor
+endfunction
+
+function! s:lod_ft(pat, names)
+ let syn = 'syntax/'.a:pat.'.vim'
+ call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn)
+ execute 'autocmd! PlugLOD FileType' a:pat
+ call s:doautocmd('filetypeplugin', 'FileType')
+ call s:doautocmd('filetypeindent', 'FileType')
+endfunction
+
+if has('patch-7.4.1898')
+ function! s:lod_cmd(cmd, bang, l1, l2, args, mods, names)
+ call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ call s:dobufread(a:names)
+ execute printf('%s %s%s%s %s', a:mods, (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
+ endfunction
+else
+ function! s:lod_cmd(cmd, bang, l1, l2, args, names)
+ call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ call s:dobufread(a:names)
+ execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
+ endfunction
+endif
+
+function! s:lod_map(map, names, with_prefix, prefix)
+ call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
+ call s:dobufread(a:names)
+ let extra = ''
+ while 1
+ let c = getchar(0)
+ if c == 0
+ break
+ endif
+ let extra .= nr2char(c)
+ endwhile
+
+ if a:with_prefix
+ let prefix = v:count ? v:count : ''
+ let prefix .= '"'.v:register.a:prefix
+ if mode(1) == 'no'
+ if v:operator == 'c'
+ let prefix = "\<esc>" . prefix
+ endif
+ let prefix .= v:operator
+ endif
+ call feedkeys(prefix, 'n')
+ endif
+ call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra)
+endfunction
+
+function! plug#(repo, ...)
+ if a:0 > 1
+ return s:err('Invalid number of arguments (1..2)')
+ endif
+
+ try
+ let repo = s:trim(a:repo)
+ let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec
+ let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??'))
+ let spec = extend(s:infer_properties(name, repo), opts)
+ if !has_key(g:plugs, name)
+ call add(g:plugs_order, name)
+ endif
+ let g:plugs[name] = spec
+ let s:loaded[name] = get(s:loaded, name, 0)
+ catch
+ return s:err(repo . ' ' . v:exception)
+ endtry
+endfunction
+
+function! s:parse_options(arg)
+ let opts = copy(s:base_spec)
+ let type = type(a:arg)
+ let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)'
+ if type == s:TYPE.string
+ if empty(a:arg)
+ throw printf(opt_errfmt, 'tag', 'string')
+ endif
+ let opts.tag = a:arg
+ elseif type == s:TYPE.dict
+ for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
+ if has_key(a:arg, opt)
+ \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+ throw printf(opt_errfmt, opt, 'string')
+ endif
+ endfor
+ for opt in ['on', 'for']
+ if has_key(a:arg, opt)
+ \ && type(a:arg[opt]) != s:TYPE.list
+ \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+ throw printf(opt_errfmt, opt, 'string or list')
+ endif
+ endfor
+ if has_key(a:arg, 'do')
+ \ && type(a:arg.do) != s:TYPE.funcref
+ \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
+ throw printf(opt_errfmt, 'do', 'string or funcref')
+ endif
+ call extend(opts, a:arg)
+ if has_key(opts, 'dir')
+ let opts.dir = s:dirpath(s:plug_expand(opts.dir))
+ endif
+ else
+ throw 'Invalid argument type (expected: string or dictionary)'
+ endif
+ return opts
+endfunction
+
+function! s:infer_properties(name, repo)
+ let repo = a:repo
+ if s:is_local_plug(repo)
+ return { 'dir': s:dirpath(s:plug_expand(repo)) }
+ else
+ if repo =~ ':'
+ let uri = repo
+ else
+ if repo !~ '/'
+ throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo)
+ endif
+ let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git')
+ let uri = printf(fmt, repo)
+ endif
+ return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri }
+ endif
+endfunction
+
+function! s:install(force, names)
+ call s:update_impl(0, a:force, a:names)
+endfunction
+
+function! s:update(force, names)
+ call s:update_impl(1, a:force, a:names)
+endfunction
+
+function! plug#helptags()
+ if !exists('g:plugs')
+ return s:err('plug#begin was not called')
+ endif
+ for spec in values(g:plugs)
+ let docd = join([s:rtp(spec), 'doc'], '/')
+ if isdirectory(docd)
+ silent! execute 'helptags' s:esc(docd)
+ endif
+ endfor
+ return 1
+endfunction
+
+function! s:syntax()
+ syntax clear
+ syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber
+ syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX,plugAbort
+ syn match plugNumber /[0-9]\+[0-9.]*/ contained
+ syn match plugBracket /[[\]]/ contained
+ syn match plugX /x/ contained
+ syn match plugAbort /\~/ contained
+ syn match plugDash /^-\{1}\ /
+ syn match plugPlus /^+/
+ syn match plugStar /^*/
+ syn match plugMessage /\(^- \)\@<=.*/
+ syn match plugName /\(^- \)\@<=[^ ]*:/
+ syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/
+ syn match plugTag /(tag: [^)]\+)/
+ syn match plugInstall /\(^+ \)\@<=[^:]*/
+ syn match plugUpdate /\(^* \)\@<=[^:]*/
+ syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag
+ syn match plugEdge /^ \X\+$/
+ syn match plugEdge /^ \X*/ contained nextgroup=plugSha
+ syn match plugSha /[0-9a-f]\{7,9}/ contained
+ syn match plugRelDate /([^)]*)$/ contained
+ syn match plugNotLoaded /(not loaded)$/
+ syn match plugError /^x.*/
+ syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/
+ syn match plugH2 /^.*:\n-\+$/
+ syn match plugH2 /^-\{2,}/
+ syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean
+ hi def link plug1 Title
+ hi def link plug2 Repeat
+ hi def link plugH2 Type
+ hi def link plugX Exception
+ hi def link plugAbort Ignore
+ hi def link plugBracket Structure
+ hi def link plugNumber Number
+
+ hi def link plugDash Special
+ hi def link plugPlus Constant
+ hi def link plugStar Boolean
+
+ hi def link plugMessage Function
+ hi def link plugName Label
+ hi def link plugInstall Function
+ hi def link plugUpdate Type
+
+ hi def link plugError Error
+ hi def link plugDeleted Ignore
+ hi def link plugRelDate Comment
+ hi def link plugEdge PreProc
+ hi def link plugSha Identifier
+ hi def link plugTag Constant
+
+ hi def link plugNotLoaded Comment
+endfunction
+
+function! s:lpad(str, len)
+ return a:str . repeat(' ', a:len - len(a:str))
+endfunction
+
+function! s:lines(msg)
+ return split(a:msg, "[\r\n]")
+endfunction
+
+function! s:lastline(msg)
+ return get(s:lines(a:msg), -1, '')
+endfunction
+
+function! s:new_window()
+ execute get(g:, 'plug_window', '-tabnew')
+endfunction
+
+function! s:plug_window_exists()
+ let buflist = tabpagebuflist(s:plug_tab)
+ return !empty(buflist) && index(buflist, s:plug_buf) >= 0
+endfunction
+
+function! s:switch_in()
+ if !s:plug_window_exists()
+ return 0
+ endif
+
+ if winbufnr(0) != s:plug_buf
+ let s:pos = [tabpagenr(), winnr(), winsaveview()]
+ execute 'normal!' s:plug_tab.'gt'
+ let winnr = bufwinnr(s:plug_buf)
+ execute winnr.'wincmd w'
+ call add(s:pos, winsaveview())
+ else
+ let s:pos = [winsaveview()]
+ endif
+
+ setlocal modifiable
+ return 1
+endfunction
+
+function! s:switch_out(...)
+ call winrestview(s:pos[-1])
+ setlocal nomodifiable
+ if a:0 > 0
+ execute a:1
+ endif
+
+ if len(s:pos) > 1
+ execute 'normal!' s:pos[0].'gt'
+ execute s:pos[1] 'wincmd w'
+ call winrestview(s:pos[2])
+ endif
+endfunction
+
+function! s:finish_bindings()
+ nnoremap <silent> <buffer> R :call <SID>retry()<cr>
+ nnoremap <silent> <buffer> D :PlugDiff<cr>
+ nnoremap <silent> <buffer> S :PlugStatus<cr>
+ nnoremap <silent> <buffer> U :call <SID>status_update()<cr>
+ xnoremap <silent> <buffer> U :call <SID>status_update()<cr>
+ nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr>
+ nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr>
+endfunction
+
+function! s:prepare(...)
+ if empty(s:plug_getcwd())
+ throw 'Invalid current working directory. Cannot proceed.'
+ endif
+
+ for evar in ['$GIT_DIR', '$GIT_WORK_TREE']
+ if exists(evar)
+ throw evar.' detected. Cannot proceed.'
+ endif
+ endfor
+
+ call s:job_abort(0)
+ if s:switch_in()
+ if b:plug_preview == 1
+ pc
+ endif
+ enew
+ else
+ call s:new_window()
+ endif
+
+ nnoremap <silent> <buffer> q :call <SID>close_pane()<cr>
+ if a:0 == 0
+ call s:finish_bindings()
+ endif
+ let b:plug_preview = -1
+ let s:plug_tab = tabpagenr()
+ let s:plug_buf = winbufnr(0)
+ call s:assign_name()
+
+ for k in ['<cr>', 'L', 'o', 'X', 'd', 'dd']
+ execute 'silent! unmap <buffer>' k
+ endfor
+ setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell
+ if exists('+colorcolumn')
+ setlocal colorcolumn=
+ endif
+ setf vim-plug
+ if exists('g:syntax_on')
+ call s:syntax()
+ endif
+endfunction
+
+function! s:close_pane()
+ if b:plug_preview == 1
+ pc
+ let b:plug_preview = -1
+ elseif exists('s:jobs') && !empty(s:jobs)
+ call s:job_abort(1)
+ else
+ bd
+ endif
+endfunction
+
+function! s:assign_name()
+ " Assign buffer name
+ let prefix = '[Plugins]'
+ let name = prefix
+ let idx = 2
+ while bufexists(name)
+ let name = printf('%s (%s)', prefix, idx)
+ let idx = idx + 1
+ endwhile
+ silent! execute 'f' fnameescape(name)
+endfunction
+
+function! s:chsh(swap)
+ let prev = [&shell, &shellcmdflag, &shellredir]
+ if !s:is_win
+ set shell=sh
+ endif
+ if a:swap
+ if s:is_powershell(&shell)
+ let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
+ elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
+ set shellredir=>%s\ 2>&1
+ endif
+ endif
+ return prev
+endfunction
+
+function! s:bang(cmd, ...)
+ let batchfile = ''
+ try
+ let [sh, shellcmdflag, shrd] = s:chsh(a:0)
+ " FIXME: Escaping is incomplete. We could use shellescape with eval,
+ " but it won't work on Windows.
+ let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
+ if s:is_win
+ let [batchfile, cmd] = s:batchfile(cmd)
+ endif
+ let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%')
+ execute "normal! :execute g:_plug_bang\<cr>\<cr>"
+ finally
+ unlet g:_plug_bang
+ let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
+ if s:is_win && filereadable(batchfile)
+ call delete(batchfile)
+ endif
+ endtry
+ return v:shell_error ? 'Exit status: ' . v:shell_error : ''
+endfunction
+
+function! s:regress_bar()
+ let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '')
+ call s:progress_bar(2, bar, len(bar))
+endfunction
+
+function! s:is_updated(dir)
+ return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir))
+endfunction
+
+function! s:do(pull, force, todo)
+ if has('nvim')
+ " Reset &rtp to invalidate Neovim cache of loaded Lua modules
+ " See https://github.com/junegunn/vim-plug/pull/1157#issuecomment-1809226110
+ let &rtp = &rtp
+ endif
+ for [name, spec] in items(a:todo)
+ if !isdirectory(spec.dir)
+ continue
+ endif
+ let installed = has_key(s:update.new, name)
+ let updated = installed ? 0 :
+ \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir))
+ if a:force || installed || updated
+ execute 'cd' s:esc(spec.dir)
+ call append(3, '- Post-update hook for '. name .' ... ')
+ let error = ''
+ let type = type(spec.do)
+ if type == s:TYPE.string
+ if spec.do[0] == ':'
+ if !get(s:loaded, name, 0)
+ let s:loaded[name] = 1
+ call s:reorg_rtp()
+ endif
+ call s:load_plugin(spec)
+ try
+ execute spec.do[1:]
+ catch
+ let error = v:exception
+ endtry
+ if !s:plug_window_exists()
+ cd -
+ throw 'Warning: vim-plug was terminated by the post-update hook of '.name
+ endif
+ else
+ let error = s:bang(spec.do)
+ endif
+ elseif type == s:TYPE.funcref
+ try
+ call s:load_plugin(spec)
+ let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged')
+ call spec.do({ 'name': name, 'status': status, 'force': a:force })
+ catch
+ let error = v:exception
+ endtry
+ else
+ let error = 'Invalid hook type'
+ endif
+ call s:switch_in()
+ call setline(4, empty(error) ? (getline(4) . 'OK')
+ \ : ('x' . getline(4)[1:] . error))
+ if !empty(error)
+ call add(s:update.errors, name)
+ call s:regress_bar()
+ endif
+ cd -
+ endif
+ endfor
+endfunction
+
+function! s:hash_match(a, b)
+ return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0
+endfunction
+
+function! s:disable_credential_helper()
+ return s:git_version_requirement(2) && get(g:, 'plug_disable_credential_helper', 1)
+endfunction
+
+function! s:checkout(spec)
+ let sha = a:spec.commit
+ let output = s:git_revision(a:spec.dir)
+ let error = 0
+ if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
+ let credential_helper = s:disable_credential_helper() ? '-c credential.helper= ' : ''
+ let output = s:system(
+ \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
+ let error = v:shell_error
+ endif
+ return [output, error]
+endfunction
+
+function! s:finish(pull)
+ let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen'))
+ if new_frozen
+ let s = new_frozen > 1 ? 's' : ''
+ call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s))
+ endif
+ call append(3, '- Finishing ... ') | 4
+ redraw
+ call plug#helptags()
+ call plug#end()
+ call setline(4, getline(4) . 'Done!')
+ redraw
+ let msgs = []
+ if !empty(s:update.errors)
+ call add(msgs, "Press 'R' to retry.")
+ endif
+ if a:pull && len(s:update.new) < len(filter(getline(5, '$'),
+ \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'"))
+ call add(msgs, "Press 'D' to see the updated changes.")
+ endif
+ echo join(msgs, ' ')
+ call s:finish_bindings()
+endfunction
+
+function! s:retry()
+ if empty(s:update.errors)
+ return
+ endif
+ echo
+ call s:update_impl(s:update.pull, s:update.force,
+ \ extend(copy(s:update.errors), [s:update.threads]))
+endfunction
+
+function! s:is_managed(name)
+ return has_key(g:plugs[a:name], 'uri')
+endfunction
+
+function! s:names(...)
+ return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)'))
+endfunction
+
+function! s:check_ruby()
+ silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'")
+ if !exists('g:plug_ruby')
+ redraw!
+ return s:warn('echom', 'Warning: Ruby interface is broken')
+ endif
+ let ruby_version = split(g:plug_ruby, '\.')
+ unlet g:plug_ruby
+ return s:version_requirement(ruby_version, [1, 8, 7])
+endfunction
+
+function! s:update_impl(pull, force, args) abort
+ let sync = index(a:args, '--sync') >= 0 || has('vim_starting')
+ let args = filter(copy(a:args), 'v:val != "--sync"')
+ let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ?
+ \ remove(args, -1) : get(g:, 'plug_threads', 16)
+
+ let managed = filter(deepcopy(g:plugs), 's:is_managed(v:key)')
+ let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') :
+ \ filter(managed, 'index(args, v:key) >= 0')
+
+ if empty(todo)
+ return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install'))
+ endif
+
+ if !s:is_win && s:git_version_requirement(2, 3)
+ let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : ''
+ let $GIT_TERMINAL_PROMPT = 0
+ for plug in values(todo)
+ let plug.uri = substitute(plug.uri,
+ \ '^https://git::@github\.com', 'https://github.com', '')
+ endfor
+ endif
+
+ if !isdirectory(g:plug_home)
+ try
+ call mkdir(g:plug_home, 'p')
+ catch
+ return s:err(printf('Invalid plug directory: %s. '.
+ \ 'Try to call plug#begin with a valid directory', g:plug_home))
+ endtry
+ endif
+
+ if has('nvim') && !exists('*jobwait') && threads > 1
+ call s:warn('echom', '[vim-plug] Update Neovim for parallel installer')
+ endif
+
+ let use_job = s:nvim || s:vim8
+ let python = (has('python') || has('python3')) && !use_job
+ let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby()
+
+ let s:update = {
+ \ 'start': reltime(),
+ \ 'all': todo,
+ \ 'todo': copy(todo),
+ \ 'errors': [],
+ \ 'pull': a:pull,
+ \ 'force': a:force,
+ \ 'new': {},
+ \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1,
+ \ 'bar': '',
+ \ 'fin': 0
+ \ }
+
+ call s:prepare(1)
+ call append(0, ['', ''])
+ normal! 2G
+ silent! redraw
+
+ " Set remote name, overriding a possible user git config's clone.defaultRemoteName
+ let s:clone_opt = ['--origin', 'origin']
+ if get(g:, 'plug_shallow', 1)
+ call extend(s:clone_opt, ['--depth', '1'])
+ if s:git_version_requirement(1, 7, 10)
+ call add(s:clone_opt, '--no-single-branch')
+ endif
+ endif
+
+ if has('win32unix') || has('wsl')
+ call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input'])
+ endif
+
+ let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : ''
+
+ " Python version requirement (>= 2.7)
+ if python && !has('python3') && !ruby && !use_job && s:update.threads > 1
+ redir => pyv
+ silent python import platform; print platform.python_version()
+ redir END
+ let python = s:version_requirement(
+ \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6])
+ endif
+
+ if (python || ruby) && s:update.threads > 1
+ try
+ let imd = &imd
+ if s:mac_gui
+ set noimd
+ endif
+ if ruby
+ call s:update_ruby()
+ else
+ call s:update_python()
+ endif
+ catch
+ let lines = getline(4, '$')
+ let printed = {}
+ silent! 4,$d _
+ for line in lines
+ let name = s:extract_name(line, '.', '')
+ if empty(name) || !has_key(printed, name)
+ call append('$', line)
+ if !empty(name)
+ let printed[name] = 1
+ if line[0] == 'x' && index(s:update.errors, name) < 0
+ call add(s:update.errors, name)
+ end
+ endif
+ endif
+ endfor
+ finally
+ let &imd = imd
+ call s:update_finish()
+ endtry
+ else
+ call s:update_vim()
+ while use_job && sync
+ sleep 100m
+ if s:update.fin
+ break
+ endif
+ endwhile
+ endif
+endfunction
+
+function! s:log4(name, msg)
+ call setline(4, printf('- %s (%s)', a:msg, a:name))
+ redraw
+endfunction
+
+function! s:update_finish()
+ if exists('s:git_terminal_prompt')
+ let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt
+ endif
+ if s:switch_in()
+ call append(3, '- Updating ...') | 4
+ for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))'))
+ let [pos, _] = s:logpos(name)
+ if !pos
+ continue
+ endif
+ let out = ''
+ let error = 0
+ if has_key(spec, 'commit')
+ call s:log4(name, 'Checking out '.spec.commit)
+ let [out, error] = s:checkout(spec)
+ elseif has_key(spec, 'tag')
+ let tag = spec.tag
+ if tag =~ '\*'
+ let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir))
+ if !v:shell_error && !empty(tags)
+ let tag = tags[0]
+ call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag))
+ call append(3, '')
+ endif
+ endif
+ call s:log4(name, 'Checking out '.tag)
+ let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir)
+ let error = v:shell_error
+ endif
+ if !error && filereadable(spec.dir.'/.gitmodules') &&
+ \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
+ call s:log4(name, 'Updating submodules. This may take a while.')
+ let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir)
+ let error = v:shell_error
+ endif
+ let msg = s:format_message(v:shell_error ? 'x': '-', name, out)
+ if error
+ call add(s:update.errors, name)
+ call s:regress_bar()
+ silent execute pos 'd _'
+ call append(4, msg) | 4
+ elseif !empty(out)
+ call setline(pos, msg[0])
+ endif
+ redraw
+ endfor
+ silent 4 d _
+ try
+ call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")'))
+ catch
+ call s:warn('echom', v:exception)
+ call s:warn('echo', '')
+ return
+ endtry
+ call s:finish(s:update.pull)
+ call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.')
+ call s:switch_out('normal! gg')
+ endif
+endfunction
+
+function! s:mark_aborted(name, message)
+ let attrs = { 'running': 0, 'error': 1, 'abort': 1, 'lines': [a:message] }
+ let s:jobs[a:name] = extend(get(s:jobs, a:name, {}), attrs)
+endfunction
+
+function! s:job_abort(cancel)
+ if (!s:nvim && !s:vim8) || !exists('s:jobs')
+ return
+ endif
+
+ for [name, j] in items(s:jobs)
+ if s:nvim
+ silent! call jobstop(j.jobid)
+ elseif s:vim8
+ silent! call job_stop(j.jobid)
+ endif
+ if j.new
+ call s:rm_rf(g:plugs[name].dir)
+ endif
+ if a:cancel
+ call s:mark_aborted(name, 'Aborted')
+ endif
+ endfor
+
+ if a:cancel
+ for todo in values(s:update.todo)
+ let todo.abort = 1
+ endfor
+ else
+ let s:jobs = {}
+ endif
+endfunction
+
+function! s:last_non_empty_line(lines)
+ let len = len(a:lines)
+ for idx in range(len)
+ let line = a:lines[len-idx-1]
+ if !empty(line)
+ return line
+ endif
+ endfor
+ return ''
+endfunction
+
+function! s:bullet_for(job, ...)
+ if a:job.running
+ return a:job.new ? '+' : '*'
+ endif
+ if get(a:job, 'abort', 0)
+ return '~'
+ endif
+ return a:job.error ? 'x' : get(a:000, 0, '-')
+endfunction
+
+function! s:job_out_cb(self, data) abort
+ let self = a:self
+ let data = remove(self.lines, -1) . a:data
+ let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]')
+ call extend(self.lines, lines)
+ " To reduce the number of buffer updates
+ let self.tick = get(self, 'tick', -1) + 1
+ if !self.running || self.tick % len(s:jobs) == 0
+ let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines)
+ if len(result)
+ call s:log(s:bullet_for(self), self.name, result)
+ endif
+ endif
+endfunction
+
+function! s:job_exit_cb(self, data) abort
+ let a:self.running = 0
+ let a:self.error = a:data != 0
+ call s:reap(a:self.name)
+ call s:tick()
+endfunction
+
+function! s:job_cb(fn, job, ch, data)
+ if !s:plug_window_exists() " plug window closed
+ return s:job_abort(0)
+ endif
+ call call(a:fn, [a:job, a:data])
+endfunction
+
+function! s:nvim_cb(job_id, data, event) dict abort
+ return (a:event == 'stdout' || a:event == 'stderr') ?
+ \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) :
+ \ s:job_cb('s:job_exit_cb', self, 0, a:data)
+endfunction
+
+function! s:spawn(name, spec, queue, opts)
+ let job = { 'name': a:name, 'spec': a:spec, 'running': 1, 'error': 0, 'lines': [''],
+ \ 'new': get(a:opts, 'new', 0), 'queue': copy(a:queue) }
+ let Item = remove(job.queue, 0)
+ let argv = type(Item) == s:TYPE.funcref ? call(Item, [a:spec]) : Item
+ let s:jobs[a:name] = job
+
+ if s:nvim
+ if has_key(a:opts, 'dir')
+ let job.cwd = a:opts.dir
+ endif
+ call extend(job, {
+ \ 'on_stdout': function('s:nvim_cb'),
+ \ 'on_stderr': function('s:nvim_cb'),
+ \ 'on_exit': function('s:nvim_cb'),
+ \ })
+ let jid = s:plug_call('jobstart', argv, job)
+ if jid > 0
+ let job.jobid = jid
+ else
+ let job.running = 0
+ let job.error = 1
+ let job.lines = [jid < 0 ? argv[0].' is not executable' :
+ \ 'Invalid arguments (or job table is full)']
+ endif
+ elseif s:vim8
+ let cmd = join(map(copy(argv), 'plug#shellescape(v:val, {"script": 0})'))
+ if has_key(a:opts, 'dir')
+ let cmd = s:with_cd(cmd, a:opts.dir, 0)
+ endif
+ let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
+ let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
+ \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]),
+ \ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]),
+ \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]),
+ \ 'err_mode': 'raw',
+ \ 'out_mode': 'raw'
+ \})
+ if job_status(jid) == 'run'
+ let job.jobid = jid
+ else
+ let job.running = 0
+ let job.error = 1
+ let job.lines = ['Failed to start job']
+ endif
+ else
+ let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [argv, a:opts.dir] : [argv]))
+ let job.error = v:shell_error != 0
+ let job.running = 0
+ endif
+endfunction
+
+function! s:reap(name)
+ let job = remove(s:jobs, a:name)
+ if job.error
+ call add(s:update.errors, a:name)
+ elseif get(job, 'new', 0)
+ let s:update.new[a:name] = 1
+ endif
+
+ let more = len(get(job, 'queue', []))
+ let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines)
+ if len(result)
+ call s:log(s:bullet_for(job), a:name, result)
+ endif
+
+ if !job.error && more
+ let job.spec.queue = job.queue
+ let s:update.todo[a:name] = job.spec
+ else
+ let s:update.bar .= s:bullet_for(job, '=')
+ call s:bar()
+ endif
+endfunction
+
+function! s:bar()
+ if s:switch_in()
+ let total = len(s:update.all)
+ call setline(1, (s:update.pull ? 'Updating' : 'Installing').
+ \ ' plugins ('.len(s:update.bar).'/'.total.')')
+ call s:progress_bar(2, s:update.bar, total)
+ call s:switch_out()
+ endif
+endfunction
+
+function! s:logpos(name)
+ let max = line('$')
+ for i in range(4, max > 4 ? max : 4)
+ if getline(i) =~# '^[-+x*] '.a:name.':'
+ for j in range(i + 1, max > 5 ? max : 5)
+ if getline(j) !~ '^ '
+ return [i, j - 1]
+ endif
+ endfor
+ return [i, i]
+ endif
+ endfor
+ return [0, 0]
+endfunction
+
+function! s:log(bullet, name, lines)
+ if s:switch_in()
+ let [b, e] = s:logpos(a:name)
+ if b > 0
+ silent execute printf('%d,%d d _', b, e)
+ if b > winheight('.')
+ let b = 4
+ endif
+ else
+ let b = 4
+ endif
+ " FIXME For some reason, nomodifiable is set after :d in vim8
+ setlocal modifiable
+ call append(b - 1, s:format_message(a:bullet, a:name, a:lines))
+ call s:switch_out()
+ endif
+endfunction
+
+function! s:update_vim()
+ let s:jobs = {}
+
+ call s:bar()
+ call s:tick()
+endfunction
+
+function! s:checkout_command(spec)
+ let a:spec.branch = s:git_origin_branch(a:spec)
+ return ['git', 'checkout', '-q', a:spec.branch, '--']
+endfunction
+
+function! s:merge_command(spec)
+ let a:spec.branch = s:git_origin_branch(a:spec)
+ return ['git', 'merge', '--ff-only', 'origin/'.a:spec.branch]
+endfunction
+
+function! s:tick()
+ let pull = s:update.pull
+ let prog = s:progress_opt(s:nvim || s:vim8)
+while 1 " Without TCO, Vim stack is bound to explode
+ if empty(s:update.todo)
+ if empty(s:jobs) && !s:update.fin
+ call s:update_finish()
+ let s:update.fin = 1
+ endif
+ return
+ endif
+
+ let name = keys(s:update.todo)[0]
+ let spec = remove(s:update.todo, name)
+ if get(spec, 'abort', 0)
+ call s:mark_aborted(name, 'Skipped')
+ call s:reap(name)
+ continue
+ endif
+
+ let queue = get(spec, 'queue', [])
+ let new = empty(globpath(spec.dir, '.git', 1))
+
+ if empty(queue)
+ call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...')
+ redraw
+ endif
+
+ let has_tag = has_key(spec, 'tag')
+ if len(queue)
+ call s:spawn(name, spec, queue, { 'dir': spec.dir })
+ elseif !new
+ let [error, _] = s:git_validate(spec, 0)
+ if empty(error)
+ if pull
+ let cmd = s:disable_credential_helper() ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch']
+ if has_tag && !empty(globpath(spec.dir, '.git/shallow'))
+ call extend(cmd, ['--depth', '99999999'])
+ endif
+ if !empty(prog)
+ call add(cmd, prog)
+ endif
+ let queue = [cmd, split('git remote set-head origin -a')]
+ if !has_tag && !has_key(spec, 'commit')
+ call extend(queue, [function('s:checkout_command'), function('s:merge_command')])
+ endif
+ call s:spawn(name, spec, queue, { 'dir': spec.dir })
+ else
+ let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 }
+ endif
+ else
+ let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 }
+ endif
+ else
+ let cmd = ['git', 'clone']
+ if !has_tag
+ call extend(cmd, s:clone_opt)
+ endif
+ if !empty(prog)
+ call add(cmd, prog)
+ endif
+ call s:spawn(name, spec, [extend(cmd, [spec.uri, s:trim(spec.dir)]), function('s:checkout_command'), function('s:merge_command')], { 'new': 1 })
+ endif
+
+ if !s:jobs[name].running
+ call s:reap(name)
+ endif
+ if len(s:jobs) >= s:update.threads
+ break
+ endif
+endwhile
+endfunction
+
+function! s:update_python()
+let py_exe = has('python') ? 'python' : 'python3'
+execute py_exe "<< EOF"
+import datetime
+import functools
+import os
+try:
+ import queue
+except ImportError:
+ import Queue as queue
+import random
+import re
+import shutil
+import signal
+import subprocess
+import tempfile
+import threading as thr
+import time
+import traceback
+import vim
+
+G_NVIM = vim.eval("has('nvim')") == '1'
+G_PULL = vim.eval('s:update.pull') == '1'
+G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1
+G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)'))
+G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt'))
+G_PROGRESS = vim.eval('s:progress_opt(1)')
+G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads'))
+G_STOP = thr.Event()
+G_IS_WIN = vim.eval('s:is_win') == '1'
+
+class PlugError(Exception):
+ def __init__(self, msg):
+ self.msg = msg
+class CmdTimedOut(PlugError):
+ pass
+class CmdFailed(PlugError):
+ pass
+class InvalidURI(PlugError):
+ pass
+class Action(object):
+ INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-']
+
+class Buffer(object):
+ def __init__(self, lock, num_plugs, is_pull):
+ self.bar = ''
+ self.event = 'Updating' if is_pull else 'Installing'
+ self.lock = lock
+ self.maxy = int(vim.eval('winheight(".")'))
+ self.num_plugs = num_plugs
+
+ def __where(self, name):
+ """ Find first line with name in current buffer. Return line num. """
+ found, lnum = False, 0
+ matcher = re.compile('^[-+x*] {0}:'.format(name))
+ for line in vim.current.buffer:
+ if matcher.search(line) is not None:
+ found = True
+ break
+ lnum += 1
+
+ if not found:
+ lnum = -1
+ return lnum
+
+ def header(self):
+ curbuf = vim.current.buffer
+ curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs)
+
+ num_spaces = self.num_plugs - len(self.bar)
+ curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ')
+
+ with self.lock:
+ vim.command('normal! 2G')
+ vim.command('redraw')
+
+ def write(self, action, name, lines):
+ first, rest = lines[0], lines[1:]
+ msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)]
+ msg.extend([' ' + line for line in rest])
+
+ try:
+ if action == Action.ERROR:
+ self.bar += 'x'
+ vim.command("call add(s:update.errors, '{0}')".format(name))
+ elif action == Action.DONE:
+ self.bar += '='
+
+ curbuf = vim.current.buffer
+ lnum = self.__where(name)
+ if lnum != -1: # Found matching line num
+ del curbuf[lnum]
+ if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]):
+ lnum = 3
+ else:
+ lnum = 3
+ curbuf.append(msg, lnum)
+
+ self.header()
+ except vim.error:
+ pass
+
+class Command(object):
+ CD = 'cd /d' if G_IS_WIN else 'cd'
+
+ def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None):
+ self.cmd = cmd
+ if cmd_dir:
+ self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd)
+ self.timeout = timeout
+ self.callback = cb if cb else (lambda msg: None)
+ self.clean = clean if clean else (lambda: None)
+ self.proc = None
+
+ @property
+ def alive(self):
+ """ Returns true only if command still running. """
+ return self.proc and self.proc.poll() is None
+
+ def execute(self, ntries=3):
+ """ Execute the command with ntries if CmdTimedOut.
+ Returns the output of the command if no Exception.
+ """
+ attempt, finished, limit = 0, False, self.timeout
+
+ while not finished:
+ try:
+ attempt += 1
+ result = self.try_command()
+ finished = True
+ return result
+ except CmdTimedOut:
+ if attempt != ntries:
+ self.notify_retry()
+ self.timeout += limit
+ else:
+ raise
+
+ def notify_retry(self):
+ """ Retry required for command, notify user. """
+ for count in range(3, 0, -1):
+ if G_STOP.is_set():
+ raise KeyboardInterrupt
+ msg = 'Timeout. Will retry in {0} second{1} ...'.format(
+ count, 's' if count != 1 else '')
+ self.callback([msg])
+ time.sleep(1)
+ self.callback(['Retrying ...'])
+
+ def try_command(self):
+ """ Execute a cmd & poll for callback. Returns list of output.
+ Raises CmdFailed -> return code for Popen isn't 0
+ Raises CmdTimedOut -> command exceeded timeout without new output
+ """
+ first_line = True
+
+ try:
+ tfile = tempfile.NamedTemporaryFile(mode='w+b')
+ preexec_fn = not G_IS_WIN and os.setsid or None
+ self.proc = subprocess.Popen(self.cmd, stdout=tfile,
+ stderr=subprocess.STDOUT,
+ stdin=subprocess.PIPE, shell=True,
+ preexec_fn=preexec_fn)
+ thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,))
+ thrd.start()
+
+ thread_not_started = True
+ while thread_not_started:
+ try:
+ thrd.join(0.1)
+ thread_not_started = False
+ except RuntimeError:
+ pass
+
+ while self.alive:
+ if G_STOP.is_set():
+ raise KeyboardInterrupt
+
+ if first_line or random.random() < G_LOG_PROB:
+ first_line = False
+ line = '' if G_IS_WIN else nonblock_read(tfile.name)
+ if line:
+ self.callback([line])
+
+ time_diff = time.time() - os.path.getmtime(tfile.name)
+ if time_diff > self.timeout:
+ raise CmdTimedOut(['Timeout!'])
+
+ thrd.join(0.5)
+
+ tfile.seek(0)
+ result = [line.decode('utf-8', 'replace').rstrip() for line in tfile]
+
+ if self.proc.returncode != 0:
+ raise CmdFailed([''] + result)
+
+ return result
+ except:
+ self.terminate()
+ raise
+
+ def terminate(self):
+ """ Terminate process and cleanup. """
+ if self.alive:
+ if G_IS_WIN:
+ os.kill(self.proc.pid, signal.SIGINT)
+ else:
+ os.killpg(self.proc.pid, signal.SIGTERM)
+ self.clean()
+
+class Plugin(object):
+ def __init__(self, name, args, buf_q, lock):
+ self.name = name
+ self.args = args
+ self.buf_q = buf_q
+ self.lock = lock
+ self.tag = args.get('tag', 0)
+
+ def manage(self):
+ try:
+ if os.path.exists(self.args['dir']):
+ self.update()
+ else:
+ self.install()
+ with self.lock:
+ thread_vim_command("let s:update.new['{0}'] = 1".format(self.name))
+ except PlugError as exc:
+ self.write(Action.ERROR, self.name, exc.msg)
+ except KeyboardInterrupt:
+ G_STOP.set()
+ self.write(Action.ERROR, self.name, ['Interrupted!'])
+ except:
+ # Any exception except those above print stack trace
+ msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip())
+ self.write(Action.ERROR, self.name, msg.split('\n'))
+ raise
+
+ def install(self):
+ target = self.args['dir']
+ if target[-1] == '\\':
+ target = target[0:-1]
+
+ def clean(target):
+ def _clean():
+ try:
+ shutil.rmtree(target)
+ except OSError:
+ pass
+ return _clean
+
+ self.write(Action.INSTALL, self.name, ['Installing ...'])
+ callback = functools.partial(self.write, Action.INSTALL, self.name)
+ cmd = 'git clone {0} {1} {2} {3} 2>&1'.format(
+ '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'],
+ esc(target))
+ com = Command(cmd, None, G_TIMEOUT, callback, clean(target))
+ result = com.execute(G_RETRIES)
+ self.write(Action.DONE, self.name, result[-1:])
+
+ def repo_uri(self):
+ cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url'
+ command = Command(cmd, self.args['dir'], G_TIMEOUT,)
+ result = command.execute(G_RETRIES)
+ return result[-1]
+
+ def update(self):
+ actual_uri = self.repo_uri()
+ expect_uri = self.args['uri']
+ regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$')
+ ma = regex.match(actual_uri)
+ mb = regex.match(expect_uri)
+ if ma is None or mb is None or ma.groups() != mb.groups():
+ msg = ['',
+ 'Invalid URI: {0}'.format(actual_uri),
+ 'Expected {0}'.format(expect_uri),
+ 'PlugClean required.']
+ raise InvalidURI(msg)
+
+ if G_PULL:
+ self.write(Action.UPDATE, self.name, ['Updating ...'])
+ callback = functools.partial(self.write, Action.UPDATE, self.name)
+ fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else ''
+ cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS)
+ com = Command(cmd, self.args['dir'], G_TIMEOUT, callback)
+ result = com.execute(G_RETRIES)
+ self.write(Action.DONE, self.name, result[-1:])
+ else:
+ self.write(Action.DONE, self.name, ['Already installed'])
+
+ def write(self, action, name, msg):
+ self.buf_q.put((action, name, msg))
+
+class PlugThread(thr.Thread):
+ def __init__(self, tname, args):
+ super(PlugThread, self).__init__()
+ self.tname = tname
+ self.args = args
+
+ def run(self):
+ thr.current_thread().name = self.tname
+ buf_q, work_q, lock = self.args
+
+ try:
+ while not G_STOP.is_set():
+ name, args = work_q.get_nowait()
+ plug = Plugin(name, args, buf_q, lock)
+ plug.manage()
+ work_q.task_done()
+ except queue.Empty:
+ pass
+
+class RefreshThread(thr.Thread):
+ def __init__(self, lock):
+ super(RefreshThread, self).__init__()
+ self.lock = lock
+ self.running = True
+
+ def run(self):
+ while self.running:
+ with self.lock:
+ thread_vim_command('noautocmd normal! a')
+ time.sleep(0.33)
+
+ def stop(self):
+ self.running = False
+
+if G_NVIM:
+ def thread_vim_command(cmd):
+ vim.session.threadsafe_call(lambda: vim.command(cmd))
+else:
+ def thread_vim_command(cmd):
+ vim.command(cmd)
+
+def esc(name):
+ return '"' + name.replace('"', '\"') + '"'
+
+def nonblock_read(fname):
+ """ Read a file with nonblock flag. Return the last line. """
+ fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK)
+ buf = os.read(fread, 100000).decode('utf-8', 'replace')
+ os.close(fread)
+
+ line = buf.rstrip('\r\n')
+ left = max(line.rfind('\r'), line.rfind('\n'))
+ if left != -1:
+ left += 1
+ line = line[left:]
+
+ return line
+
+def main():
+ thr.current_thread().name = 'main'
+ nthreads = int(vim.eval('s:update.threads'))
+ plugs = vim.eval('s:update.todo')
+ mac_gui = vim.eval('s:mac_gui') == '1'
+
+ lock = thr.Lock()
+ buf = Buffer(lock, len(plugs), G_PULL)
+ buf_q, work_q = queue.Queue(), queue.Queue()
+ for work in plugs.items():
+ work_q.put(work)
+
+ start_cnt = thr.active_count()
+ for num in range(nthreads):
+ tname = 'PlugT-{0:02}'.format(num)
+ thread = PlugThread(tname, (buf_q, work_q, lock))
+ thread.start()
+ if mac_gui:
+ rthread = RefreshThread(lock)
+ rthread.start()
+
+ while not buf_q.empty() or thr.active_count() != start_cnt:
+ try:
+ action, name, msg = buf_q.get(True, 0.25)
+ buf.write(action, name, ['OK'] if not msg else msg)
+ buf_q.task_done()
+ except queue.Empty:
+ pass
+ except KeyboardInterrupt:
+ G_STOP.set()
+
+ if mac_gui:
+ rthread.stop()
+ rthread.join()
+
+main()
+EOF
+endfunction
+
+function! s:update_ruby()
+ ruby << EOF
+ module PlugStream
+ SEP = ["\r", "\n", nil]
+ def get_line
+ buffer = ''
+ loop do
+ char = readchar rescue return
+ if SEP.include? char.chr
+ buffer << $/
+ break
+ else
+ buffer << char
+ end
+ end
+ buffer
+ end
+ end unless defined?(PlugStream)
+
+ def esc arg
+ %["#{arg.gsub('"', '\"')}"]
+ end
+
+ def killall pid
+ pids = [pid]
+ if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM
+ pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil }
+ else
+ unless `which pgrep 2> /dev/null`.empty?
+ children = pids
+ until children.empty?
+ children = children.map { |pid|
+ `pgrep -P #{pid}`.lines.map { |l| l.chomp }
+ }.flatten
+ pids += children
+ end
+ end
+ pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil }
+ end
+ end
+
+ def compare_git_uri a, b
+ regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$}
+ regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1)
+ end
+
+ require 'thread'
+ require 'fileutils'
+ require 'timeout'
+ running = true
+ iswin = VIM::evaluate('s:is_win').to_i == 1
+ pull = VIM::evaluate('s:update.pull').to_i == 1
+ base = VIM::evaluate('g:plug_home')
+ all = VIM::evaluate('s:update.todo')
+ limit = VIM::evaluate('get(g:, "plug_timeout", 60)')
+ tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1
+ nthr = VIM::evaluate('s:update.threads').to_i
+ maxy = VIM::evaluate('winheight(".")').to_i
+ vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/
+ cd = iswin ? 'cd /d' : 'cd'
+ tot = VIM::evaluate('len(s:update.todo)') || 0
+ bar = ''
+ skip = 'Already installed'
+ mtx = Mutex.new
+ take1 = proc { mtx.synchronize { running && all.shift } }
+ logh = proc {
+ cnt = bar.length
+ $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})"
+ $curbuf[2] = '[' + bar.ljust(tot) + ']'
+ VIM::command('normal! 2G')
+ VIM::command('redraw')
+ }
+ where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } }
+ log = proc { |name, result, type|
+ mtx.synchronize do
+ ing = ![true, false].include?(type)
+ bar += type ? '=' : 'x' unless ing
+ b = case type
+ when :install then '+' when :update then '*'
+ when true, nil then '-' else
+ VIM::command("call add(s:update.errors, '#{name}')")
+ 'x'
+ end
+ result =
+ if type || type.nil?
+ ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"]
+ elsif result =~ /^Interrupted|^Timeout/
+ ["#{b} #{name}: #{result}"]
+ else
+ ["#{b} #{name}"] + result.lines.map { |l| " " << l }
+ end
+ if lnum = where.call(name)
+ $curbuf.delete lnum
+ lnum = 4 if ing && lnum > maxy
+ end
+ result.each_with_index do |line, offset|
+ $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp)
+ end
+ logh.call
+ end
+ }
+ bt = proc { |cmd, name, type, cleanup|
+ tried = timeout = 0
+ begin
+ tried += 1
+ timeout += limit
+ fd = nil
+ data = ''
+ if iswin
+ Timeout::timeout(timeout) do
+ tmp = VIM::evaluate('tempname()')
+ system("(#{cmd}) > #{tmp}")
+ data = File.read(tmp).chomp
+ File.unlink tmp rescue nil
+ end
+ else
+ fd = IO.popen(cmd).extend(PlugStream)
+ first_line = true
+ log_prob = 1.0 / nthr
+ while line = Timeout::timeout(timeout) { fd.get_line }
+ data << line
+ log.call name, line.chomp, type if name && (first_line || rand < log_prob)
+ first_line = false
+ end
+ fd.close
+ end
+ [$? == 0, data.chomp]
+ rescue Timeout::Error, Interrupt => e
+ if fd && !fd.closed?
+ killall fd.pid
+ fd.close
+ end
+ cleanup.call if cleanup
+ if e.is_a?(Timeout::Error) && tried < tries
+ 3.downto(1) do |countdown|
+ s = countdown > 1 ? 's' : ''
+ log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type
+ sleep 1
+ end
+ log.call name, 'Retrying ...', type
+ retry
+ end
+ [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"]
+ end
+ }
+ main = Thread.current
+ threads = []
+ watcher = Thread.new {
+ if vim7
+ while VIM::evaluate('getchar(1)')
+ sleep 0.1
+ end
+ else
+ require 'io/console' # >= Ruby 1.9
+ nil until IO.console.getch == 3.chr
+ end
+ mtx.synchronize do
+ running = false
+ threads.each { |t| t.raise Interrupt } unless vim7
+ end
+ threads.each { |t| t.join rescue nil }
+ main.kill
+ }
+ refresh = Thread.new {
+ while true
+ mtx.synchronize do
+ break unless running
+ VIM::command('noautocmd normal! a')
+ end
+ sleep 0.2
+ end
+ } if VIM::evaluate('s:mac_gui') == 1
+
+ clone_opt = VIM::evaluate('s:clone_opt').join(' ')
+ progress = VIM::evaluate('s:progress_opt(1)')
+ nthr.times do
+ mtx.synchronize do
+ threads << Thread.new {
+ while pair = take1.call
+ name = pair.first
+ dir, uri, tag = pair.last.values_at *%w[dir uri tag]
+ exists = File.directory? dir
+ ok, result =
+ if exists
+ chdir = "#{cd} #{iswin ? dir : esc(dir)}"
+ ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil
+ current_uri = data.lines.to_a.last
+ if !ret
+ if data =~ /^Interrupted|^Timeout/
+ [false, data]
+ else
+ [false, [data.chomp, "PlugClean required."].join($/)]
+ end
+ elsif !compare_git_uri(current_uri, uri)
+ [false, ["Invalid URI: #{current_uri}",
+ "Expected: #{uri}",
+ "PlugClean required."].join($/)]
+ else
+ if pull
+ log.call name, 'Updating ...', :update
+ fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : ''
+ bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil
+ else
+ [true, skip]
+ end
+ end
+ else
+ d = esc dir.sub(%r{[\\/]+$}, '')
+ log.call name, 'Installing ...', :install
+ bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc {
+ FileUtils.rm_rf dir
+ }
+ end
+ mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok
+ log.call name, result, ok
+ end
+ } if running
+ end
+ end
+ threads.each { |t| t.join rescue nil }
+ logh.call
+ refresh.kill if refresh
+ watcher.kill
+EOF
+endfunction
+
+function! s:shellesc_cmd(arg, script)
+ let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g')
+ return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g')
+endfunction
+
+function! s:shellesc_ps1(arg)
+ return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'"
+endfunction
+
+function! s:shellesc_sh(arg)
+ return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
+endfunction
+
+" Escape the shell argument based on the shell.
+" Vim and Neovim's shellescape() are insufficient.
+" 1. shellslash determines whether to use single/double quotes.
+" Double-quote escaping is fragile for cmd.exe.
+" 2. It does not work for powershell.
+" 3. It does not work for *sh shells if the command is executed
+" via cmd.exe (ie. cmd.exe /c sh -c command command_args)
+" 4. It does not support batchfile syntax.
+"
+" Accepts an optional dictionary with the following keys:
+" - shell: same as Vim/Neovim 'shell' option.
+" If unset, fallback to 'cmd.exe' on Windows or 'sh'.
+" - script: If truthy and shell is cmd.exe, escape for batchfile syntax.
+function! plug#shellescape(arg, ...)
+ if a:arg =~# '^[A-Za-z0-9_/:.-]\+$'
+ return a:arg
+ endif
+ let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
+ let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
+ let script = get(opts, 'script', 1)
+ if shell =~# 'cmd\(\.exe\)\?$'
+ return s:shellesc_cmd(a:arg, script)
+ elseif s:is_powershell(shell)
+ return s:shellesc_ps1(a:arg)
+ endif
+ return s:shellesc_sh(a:arg)
+endfunction
+
+function! s:glob_dir(path)
+ return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)')
+endfunction
+
+function! s:progress_bar(line, bar, total)
+ call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']')
+endfunction
+
+function! s:compare_git_uri(a, b)
+ " See `git help clone'
+ " https:// [user@] github.com[:port] / junegunn/vim-plug [.git]
+ " [git@] github.com[:port] : junegunn/vim-plug [.git]
+ " file:// / junegunn/vim-plug [/]
+ " / junegunn/vim-plug [/]
+ let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$'
+ let ma = matchlist(a:a, pat)
+ let mb = matchlist(a:b, pat)
+ return ma[1:2] ==# mb[1:2]
+endfunction
+
+function! s:format_message(bullet, name, message)
+ if a:bullet != 'x'
+ return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))]
+ else
+ let lines = map(s:lines(a:message), '" ".v:val')
+ return extend([printf('x %s:', a:name)], lines)
+ endif
+endfunction
+
+function! s:with_cd(cmd, dir, ...)
+ let script = a:0 > 0 ? a:1 : 1
+ let pwsh = s:is_powershell(&shell)
+ let cd = s:is_win && !pwsh ? 'cd /d' : 'cd'
+ let sep = pwsh ? ';' : '&&'
+ return printf('%s %s %s %s', cd, plug#shellescape(a:dir, {'script': script, 'shell': &shell}), sep, a:cmd)
+endfunction
+
+function! s:system(cmd, ...)
+ let batchfile = ''
+ try
+ let [sh, shellcmdflag, shrd] = s:chsh(1)
+ if type(a:cmd) == s:TYPE.list
+ " Neovim's system() supports list argument to bypass the shell
+ " but it cannot set the working directory for the command.
+ " Assume that the command does not rely on the shell.
+ if has('nvim') && a:0 == 0
+ return system(a:cmd)
+ endif
+ let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
+ if s:is_powershell(&shell)
+ let cmd = '& ' . cmd
+ endif
+ else
+ let cmd = a:cmd
+ endif
+ if a:0 > 0
+ let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list)
+ endif
+ if s:is_win && type(a:cmd) != s:TYPE.list
+ let [batchfile, cmd] = s:batchfile(cmd)
+ endif
+ return system(cmd)
+ finally
+ let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
+ if s:is_win && filereadable(batchfile)
+ call delete(batchfile)
+ endif
+ endtry
+endfunction
+
+function! s:system_chomp(...)
+ let ret = call('s:system', a:000)
+ return v:shell_error ? '' : substitute(ret, '\n$', '', '')
+endfunction
+
+function! s:git_validate(spec, check_branch)
+ let err = ''
+ if isdirectory(a:spec.dir)
+ let result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)]
+ let remote = result[-1]
+ if empty(remote)
+ let err = join([remote, 'PlugClean required.'], "\n")
+ elseif !s:compare_git_uri(remote, a:spec.uri)
+ let err = join(['Invalid URI: '.remote,
+ \ 'Expected: '.a:spec.uri,
+ \ 'PlugClean required.'], "\n")
+ elseif a:check_branch && has_key(a:spec, 'commit')
+ let sha = s:git_revision(a:spec.dir)
+ if empty(sha)
+ let err = join(add(result, 'PlugClean required.'), "\n")
+ elseif !s:hash_match(sha, a:spec.commit)
+ let err = join([printf('Invalid HEAD (expected: %s, actual: %s)',
+ \ a:spec.commit[:6], sha[:6]),
+ \ 'PlugUpdate required.'], "\n")
+ endif
+ elseif a:check_branch
+ let current_branch = result[0]
+ " Check tag
+ let origin_branch = s:git_origin_branch(a:spec)
+ if has_key(a:spec, 'tag')
+ let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir)
+ if a:spec.tag !=# tag && a:spec.tag !~ '\*'
+ let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.',
+ \ (empty(tag) ? 'N/A' : tag), a:spec.tag)
+ endif
+ " Check branch
+ elseif origin_branch !=# current_branch
+ let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
+ \ current_branch, origin_branch)
+ endif
+ if empty(err)
+ let ahead_behind = split(s:lastline(s:system([
+ \ 'git', 'rev-list', '--count', '--left-right',
+ \ printf('HEAD...origin/%s', origin_branch)
+ \ ], a:spec.dir)), '\t')
+ if v:shell_error || len(ahead_behind) != 2
+ let err = "Failed to compare with the origin. The default branch might have changed.\nPlugClean required."
+ else
+ let [ahead, behind] = ahead_behind
+ if ahead && behind
+ " Only mention PlugClean if diverged, otherwise it's likely to be
+ " pushable (and probably not that messed up).
+ let err = printf(
+ \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n"
+ \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind)
+ elseif ahead
+ let err = printf("Ahead of origin/%s by %d commit(s).\n"
+ \ .'Cannot update until local changes are pushed.',
+ \ origin_branch, ahead)
+ endif
+ endif
+ endif
+ endif
+ else
+ let err = 'Not found'
+ endif
+ return [err, err =~# 'PlugClean']
+endfunction
+
+function! s:rm_rf(dir)
+ if isdirectory(a:dir)
+ return s:system(s:is_win
+ \ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
+ \ : ['rm', '-rf', a:dir])
+ endif
+endfunction
+
+function! s:clean(force)
+ call s:prepare()
+ call append(0, 'Searching for invalid plugins in '.g:plug_home)
+ call append(1, '')
+
+ " List of valid directories
+ let dirs = []
+ let errs = {}
+ let [cnt, total] = [0, len(g:plugs)]
+ for [name, spec] in items(g:plugs)
+ if !s:is_managed(name) || get(spec, 'frozen', 0)
+ call add(dirs, spec.dir)
+ else
+ let [err, clean] = s:git_validate(spec, 1)
+ if clean
+ let errs[spec.dir] = s:lines(err)[0]
+ else
+ call add(dirs, spec.dir)
+ endif
+ endif
+ let cnt += 1
+ call s:progress_bar(2, repeat('=', cnt), total)
+ normal! 2G
+ redraw
+ endfor
+
+ let allowed = {}
+ for dir in dirs
+ let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1
+ let allowed[dir] = 1
+ for child in s:glob_dir(dir)
+ let allowed[child] = 1
+ endfor
+ endfor
+
+ let todo = []
+ let found = sort(s:glob_dir(g:plug_home))
+ while !empty(found)
+ let f = remove(found, 0)
+ if !has_key(allowed, f) && isdirectory(f)
+ call add(todo, f)
+ call append(line('$'), '- ' . f)
+ if has_key(errs, f)
+ call append(line('$'), ' ' . errs[f])
+ endif
+ let found = filter(found, 'stridx(v:val, f) != 0')
+ end
+ endwhile
+
+ 4
+ redraw
+ if empty(todo)
+ call append(line('$'), 'Already clean.')
+ else
+ let s:clean_count = 0
+ call append(3, ['Directories to delete:', ''])
+ redraw!
+ if a:force || s:ask_no_interrupt('Delete all directories?')
+ call s:delete([6, line('$')], 1)
+ else
+ call setline(4, 'Cancelled.')
+ nnoremap <silent> <buffer> d :set opfunc=<sid>delete_op<cr>g@
+ nmap <silent> <buffer> dd d_
+ xnoremap <silent> <buffer> d :<c-u>call <sid>delete_op(visualmode(), 1)<cr>
+ echo 'Delete the lines (d{motion}) to delete the corresponding directories'
+ endif
+ endif
+ 4
+ setlocal nomodifiable
+endfunction
+
+function! s:delete_op(type, ...)
+ call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0)
+endfunction
+
+function! s:delete(range, force)
+ let [l1, l2] = a:range
+ let force = a:force
+ let err_count = 0
+ while l1 <= l2
+ let line = getline(l1)
+ if line =~ '^- ' && isdirectory(line[2:])
+ execute l1
+ redraw!
+ let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1)
+ let force = force || answer > 1
+ if answer
+ let err = s:rm_rf(line[2:])
+ setlocal modifiable
+ if empty(err)
+ call setline(l1, '~'.line[1:])
+ let s:clean_count += 1
+ else
+ delete _
+ call append(l1 - 1, s:format_message('x', line[1:], err))
+ let l2 += len(s:lines(err))
+ let err_count += 1
+ endif
+ let msg = printf('Removed %d directories.', s:clean_count)
+ if err_count > 0
+ let msg .= printf(' Failed to remove %d directories.', err_count)
+ endif
+ call setline(4, msg)
+ setlocal nomodifiable
+ endif
+ endif
+ let l1 += 1
+ endwhile
+endfunction
+
+function! s:upgrade()
+ echo 'Downloading the latest version of vim-plug'
+ redraw
+ let tmp = s:plug_tempname()
+ let new = tmp . '/plug.vim'
+
+ try
+ let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp])
+ if v:shell_error
+ return s:err('Error upgrading vim-plug: '. out)
+ endif
+
+ if readfile(s:me) ==# readfile(new)
+ echo 'vim-plug is already up-to-date'
+ return 0
+ else
+ call rename(s:me, s:me . '.old')
+ call rename(new, s:me)
+ unlet g:loaded_plug
+ echo 'vim-plug has been upgraded'
+ return 1
+ endif
+ finally
+ silent! call s:rm_rf(tmp)
+ endtry
+endfunction
+
+function! s:upgrade_specs()
+ for spec in values(g:plugs)
+ let spec.frozen = get(spec, 'frozen', 0)
+ endfor
+endfunction
+
+function! s:status()
+ call s:prepare()
+ call append(0, 'Checking plugins')
+ call append(1, '')
+
+ let ecnt = 0
+ let unloaded = 0
+ let [cnt, total] = [0, len(g:plugs)]
+ for [name, spec] in items(g:plugs)
+ let is_dir = isdirectory(spec.dir)
+ if has_key(spec, 'uri')
+ if is_dir
+ let [err, _] = s:git_validate(spec, 1)
+ let [valid, msg] = [empty(err), empty(err) ? 'OK' : err]
+ else
+ let [valid, msg] = [0, 'Not found. Try PlugInstall.']
+ endif
+ else
+ if is_dir
+ let [valid, msg] = [1, 'OK']
+ else
+ let [valid, msg] = [0, 'Not found.']
+ endif
+ endif
+ let cnt += 1
+ let ecnt += !valid
+ " `s:loaded` entry can be missing if PlugUpgraded
+ if is_dir && get(s:loaded, name, -1) == 0
+ let unloaded = 1
+ let msg .= ' (not loaded)'
+ endif
+ call s:progress_bar(2, repeat('=', cnt), total)
+ call append(3, s:format_message(valid ? '-' : 'x', name, msg))
+ normal! 2G
+ redraw
+ endfor
+ call setline(1, 'Finished. '.ecnt.' error(s).')
+ normal! gg
+ setlocal nomodifiable
+ if unloaded
+ echo "Press 'L' on each line to load plugin, or 'U' to update"
+ nnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr>
+ xnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr>
+ end
+endfunction
+
+function! s:extract_name(str, prefix, suffix)
+ return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$')
+endfunction
+
+function! s:status_load(lnum)
+ let line = getline(a:lnum)
+ let name = s:extract_name(line, '-', '(not loaded)')
+ if !empty(name)
+ call plug#load(name)
+ setlocal modifiable
+ call setline(a:lnum, substitute(line, ' (not loaded)$', '', ''))
+ setlocal nomodifiable
+ endif
+endfunction
+
+function! s:status_update() range
+ let lines = getline(a:firstline, a:lastline)
+ let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)')
+ if !empty(names)
+ echo
+ execute 'PlugUpdate' join(names)
+ endif
+endfunction
+
+function! s:is_preview_window_open()
+ silent! wincmd P
+ if &previewwindow
+ wincmd p
+ return 1
+ endif
+endfunction
+
+function! s:find_name(lnum)
+ for lnum in reverse(range(1, a:lnum))
+ let line = getline(lnum)
+ if empty(line)
+ return ''
+ endif
+ let name = s:extract_name(line, '-', '')
+ if !empty(name)
+ return name
+ endif
+ endfor
+ return ''
+endfunction
+
+function! s:preview_commit()
+ if b:plug_preview < 0
+ let b:plug_preview = !s:is_preview_window_open()
+ endif
+
+ let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}')
+ if empty(sha)
+ let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$')
+ if empty(name)
+ return
+ endif
+ let title = 'HEAD@{1}..'
+ let command = 'git diff --no-color HEAD@{1}'
+ else
+ let title = sha
+ let command = 'git show --no-color --pretty=medium '.sha
+ let name = s:find_name(line('.'))
+ endif
+
+ if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir)
+ return
+ endif
+
+ if !s:is_preview_window_open()
+ execute get(g:, 'plug_pwindow', 'vertical rightbelow new')
+ execute 'e' title
+ else
+ execute 'pedit' title
+ wincmd P
+ endif
+ setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable
+ let batchfile = ''
+ try
+ let [sh, shellcmdflag, shrd] = s:chsh(1)
+ let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command
+ if s:is_win
+ let [batchfile, cmd] = s:batchfile(cmd)
+ endif
+ execute 'silent %!' cmd
+ finally
+ let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd]
+ if s:is_win && filereadable(batchfile)
+ call delete(batchfile)
+ endif
+ endtry
+ setlocal nomodifiable
+ nnoremap <silent> <buffer> q :q<cr>
+ wincmd p
+endfunction
+
+function! s:section(flags)
+ call search('\(^[x-] \)\@<=[^:]\+:', a:flags)
+endfunction
+
+function! s:format_git_log(line)
+ let indent = ' '
+ let tokens = split(a:line, nr2char(1))
+ if len(tokens) != 5
+ return indent.substitute(a:line, '\s*$', '', '')
+ endif
+ let [graph, sha, refs, subject, date] = tokens
+ let tag = matchstr(refs, 'tag: [^,)]\+')
+ let tag = empty(tag) ? ' ' : ' ('.tag.') '
+ return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date)
+endfunction
+
+function! s:append_ul(lnum, text)
+ call append(a:lnum, ['', a:text, repeat('-', len(a:text))])
+endfunction
+
+function! s:diff()
+ call s:prepare()
+ call append(0, ['Collecting changes ...', ''])
+ let cnts = [0, 0]
+ let bar = ''
+ let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)')
+ call s:progress_bar(2, bar, len(total))
+ for origin in [1, 0]
+ let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))'))))
+ if empty(plugs)
+ continue
+ endif
+ call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
+ for [k, v] in plugs
+ let branch = s:git_origin_branch(v)
+ if len(branch)
+ let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
+ let cmd = ['git', 'log', '--graph', '--color=never']
+ if s:git_version_requirement(2, 10, 0)
+ call add(cmd, '--no-show-signature')
+ endif
+ call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
+ if has_key(v, 'rtp')
+ call extend(cmd, ['--', v.rtp])
+ endif
+ let diff = s:system_chomp(cmd, v.dir)
+ if !empty(diff)
+ let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : ''
+ call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))
+ let cnts[origin] += 1
+ endif
+ endif
+ let bar .= '='
+ call s:progress_bar(2, bar, len(total))
+ normal! 2G
+ redraw
+ endfor
+ if !cnts[origin]
+ call append(5, ['', 'N/A'])
+ endif
+ endfor
+ call setline(1, printf('%d plugin(s) updated.', cnts[0])
+ \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : ''))
+
+ if cnts[0] || cnts[1]
+ nnoremap <silent> <buffer> <plug>(plug-preview) :silent! call <SID>preview_commit()<cr>
+ if empty(maparg("\<cr>", 'n'))
+ nmap <buffer> <cr> <plug>(plug-preview)
+ endif
+ if empty(maparg('o', 'n'))
+ nmap <buffer> o <plug>(plug-preview)
+ endif
+ endif
+ if cnts[0]
+ nnoremap <silent> <buffer> X :call <SID>revert()<cr>
+ echo "Press 'X' on each block to revert the update"
+ endif
+ normal! gg
+ setlocal nomodifiable
+endfunction
+
+function! s:revert()
+ if search('^Pending updates', 'bnW')
+ return
+ endif
+
+ let name = s:find_name(line('.'))
+ if empty(name) || !has_key(g:plugs, name) ||
+ \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y'
+ return
+ endif
+
+ call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir)
+ setlocal modifiable
+ normal! "_dap
+ setlocal nomodifiable
+ echo 'Reverted'
+endfunction
+
+function! s:snapshot(force, ...) abort
+ call s:prepare()
+ setf vim
+ call append(0, ['" Generated by vim-plug',
+ \ '" '.strftime("%c"),
+ \ '" :source this file in vim to restore the snapshot',
+ \ '" or execute: vim -S snapshot.vim',
+ \ '', '', 'PlugUpdate!'])
+ 1
+ let anchor = line('$') - 3
+ let names = sort(keys(filter(copy(g:plugs),
+ \'has_key(v:val, "uri") && isdirectory(v:val.dir)')))
+ for name in reverse(names)
+ let sha = has_key(g:plugs[name], 'commit') ? g:plugs[name].commit : s:git_revision(g:plugs[name].dir)
+ if !empty(sha)
+ call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
+ redraw
+ endif
+ endfor
+
+ if a:0 > 0
+ let fn = s:plug_expand(a:1)
+ if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
+ return
+ endif
+ call writefile(getline(1, '$'), fn)
+ echo 'Saved as '.a:1
+ silent execute 'e' s:esc(fn)
+ setf vim
+ endif
+endfunction
+
+function! s:split_rtp()
+ return split(&rtp, '\\\@<!,')
+endfunction
+
+let s:first_rtp = s:escrtp(get(s:split_rtp(), 0, ''))
+let s:last_rtp = s:escrtp(get(s:split_rtp(), -1, ''))
+
+if exists('g:plugs')
+ let g:plugs_order = get(g:, 'plugs_order', keys(g:plugs))
+ call s:upgrade_specs()
+ call s:define_commands()
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/config/plugin/config.vim b/config/plugin/config.vim
new file mode 100755
index 0000000..22f7190
--- /dev/null
+++ b/config/plugin/config.vim
@@ -0,0 +1 @@
+lua require('config') \ No newline at end of file
diff --git a/config/qtile/config.py b/config/qtile/config.py
new file mode 100755
index 0000000..8fd1238
--- /dev/null
+++ b/config/qtile/config.py
@@ -0,0 +1,154 @@
+from libqtile import bar, layout, qtile, widget, hook
+from libqtile.config import Click, Drag, Group, Key, Match, Screen
+from libqtile.lazy import lazy
+from libqtile.utils import guess_terminal
+from libqtile.bar import Bar, Gap
+import subprocess
+from libqtile.widget.cpu import CPU
+from libqtile.widget.memory import Memory
+
+subprocess.run("/home/coast/.local/src/local/bin/start_qtile.sh")
+
+mod = "mod4"
+terminal = "footclient"
+browser = "firefox-bin"
+
+keys = [
+ Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
+ Key([mod], "j", lazy.layout.right(), desc="Move focus to right"),
+ Key([mod], "k", lazy.layout.down(), desc="Move focus down"),
+ Key([mod], "l", lazy.layout.up(), desc="Move focus up"),
+ Key([mod], "space", lazy.layout.next(), desc="Move window focus to other window"),
+ Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left"),
+ Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move window to the right"),
+ Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"),
+ Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"),
+ Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow window to the left"),
+ Key([mod, "control"], "l", lazy.layout.grow_right(), desc="Grow window to the right"),
+ Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"),
+ Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"),
+ Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"),
+ Key([mod, "shift"], "Return", lazy.layout.toggle_split(), desc="Toggle between split and unsplit sides of stack"),
+ Key([mod], "Return", lazy.spawn(terminal), desc="Launch foot"),
+ Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"),
+ Key([mod], "s", lazy.window.kill(), desc="Kill focused window"),
+ Key([mod], "w", lazy.window.toggle_fullscreen(), desc="Toggle fullscreen on the focused window"),
+ Key([mod], "space", lazy.window.toggle_floating(), desc="Toggle floating on the focused window"),
+ Key([mod, "control"], "r", lazy.reload_config(), desc="Reload the config"),
+ Key([mod, "shift"], "q", lazy.shutdown(), desc="Shutdown Qtile"),
+ Key([mod], "r", lazy.spawn("wmenu-run -f \"Maple Mono 10\" -N #000000 -n #ffffff -M #aeaeae -S #aeaeae -s #000000"), desc="Spawn a command using wmenu"),
+ Key([mod], "Print", lazy.spawn("/home/coast/.local/src/local/bin/screenie-wlr")),
+ Key([mod, "shift"], "Print", lazy.spawn("/usr/bin/grim")),
+ Key([mod], "Left", lazy.window.move_floating(-20, 0)),
+ Key([mod], "Right", lazy.window.move_floating(20, 0)),
+ Key([mod], "Up", lazy.window.move_floating(0, -20)),
+ Key([mod], "Down", lazy.window.move_floating(0, 20)),
+ Key([mod, "shift"], "Left", lazy.window.resize_floating(-20, 0)),
+ Key([mod, "shift"], "Right", lazy.window.resize_floating(20, 0)),
+ Key([mod, "shift"], "Up", lazy.window.resize_floating(0, -20)),
+ Key([mod, "shift"], "Down", lazy.window.resize_floating(0, 20)),
+ Key([mod, "shift"], "i", lazy.spawn("pcmanfm")),
+ Key([mod, "shift"], "b", lazy.spawn(browser)),
+ Key([mod, "shift"], "v", lazy.spawn("vesktop-bin --ozone-platform=wayland"))]
+
+for vt in range(1, 8):
+ keys.append(Key(["control", "mod1"], f"f{vt}", lazy.core.change_vt(vt).when(func=lambda: qtile.core.name == "wayland"), desc=f"Switch to VT{vt}"))
+
+groups = [Group(i) for i in "123456789"]
+
+for i in groups:
+ keys.extend(
+ [
+ Key(
+ [mod],
+ i.name,
+ lazy.group[i.name].toscreen(),
+ desc=f"Switch to group {i.name}",
+ ),
+ Key(
+ [mod, "shift"],
+ i.name,
+ lazy.window.togroup(i.name, switch_group=True),
+ desc=f"Switch to & move focused window to group {i.name}",
+ ),
+ ]
+ )
+
+layouts = [
+ layout.MonadTall(font = "Maple Mono", margin = 8, border_focus=["#454545"], border_width=4, border_normal=["#1c1c1c"]),
+ # Try more layouts by unleashing below layouts.
+ # layout.Stack(num_stacks=2),
+ # layout.Bsp(),
+ # layout.Matrix(),
+ # layout.MonadWide(),
+ # layout.RatioTile(),
+ # layout.Tile(),
+ # layout.TreeTab(),
+ # layout.VerticalTile(),
+ # layout.Zoomy(),
+]
+
+widget_defaults = dict(font="sans", fontsize=20, padding=3)
+extension_defaults = widget_defaults.copy()
+
+class CenteredWindowName(widget.WindowName):
+ def draw(self):
+ self.layout.text = self.text
+ text_width, _ = self.layout.size
+ x = (self.bar.width - text_width) / 2
+ y = (self.bar.height - self.layout.height) / 2
+ self.drawer.clear(self.background or self.bar.background)
+ self.layout.draw(int(x), int(y))
+ self.drawer.draw(offsetx=0, width=self.bar.width)
+
+screens = [
+ Screen(
+ bottom=bar.Bar
+ ([widget.Spacer(length=3),
+ widget.TextBox(text="󰣨", fontsize=16, mouse_callbacks={'Button1': lambda: qtile.cmd_spawn(terminal), 'Button3': lambda: qtile.cmd_spawn(browser)}),
+ widget.Spacer(length=3),
+ widget.GroupBox(font='MapleMono', borderwidth=1, padding=6, rounded=False, highlight_method='block', this_current_screen_border='#3a3a3a', foreground='#ffffff', active='#ffffff', inactive='#ffffff', hide_unused=True, fontsize=16),
+ widget.TextBox(text='[', font="Maple Mono", padding=1, foreground=["#1e1e1e"], fontsize=16),
+ widget.WindowName(font="Maple Mono", foreground=["#ffffff"], fontsize=16,),
+ widget.TextBox(text=']', font="Maple Mono", padding=1, foreground=["#1e1e1e"], fontsize=16),
+ widget.TextBox(text='[', font="Maple Mono", padding=1, foreground=["#1e1e1e"], fontsize=16),
+ widget.Memory(foreground="#ffffff", font="MapleMono", fontsize=16, padding=1, mouse_callbacks = {'Button1': lambda: qtile.cmd_spawn(terminal + ' -e htop')}, format = '󰍛 {MemPercent}%'),
+ widget.TextBox(text=']', font="Maple Mono", padding=1, foreground=["#1e1e1e"], fontsize=16),
+ widget.TextBox(text='[', font="Maple Mono", padding=1, foreground=["#1e1e1e"], fontsize=16),
+ widget.CPU(font="MapleMono", fontsize=16, foreground="#ffffff", padding=1, mouse_callbacks = {'Button1': lambda: qtile.cmd_spawn(terminal + ' -e htop')}, format = ' {load_percent}%'),
+ widget.TextBox(text=']', font="Maple Mono", padding=1, foreground=["#1e1e1e"], fontsize=16),
+ widget.TextBox(text='[', font="Maple Mono", padding=1, foreground=["#1e1e1e"], fontsize=16),
+ widget.Clock(format=" %I:%M %p", font="Maple Mono", padding=1, foreground=["#ffffff"], fontsize=16, mouse_callbacks={'Button3': lambda: qtile.cmd_spawn('eww open calendar'), 'Button1': lambda: qtile.cmd_spawn('eww close calendar')}),
+ widget.TextBox(text=']', font="Maple Mono", padding=1, foreground=["#1e1e1e"], fontsize=16)],
+ 24))]
+
+mouse=[
+ Drag([mod], "Button1", lazy.window.set_position_floating(), start=lazy.window.get_position()),
+ Drag([mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size())]
+
+dgroups_key_binder = None
+dgroups_app_rules = []
+follow_mouse_focus = True
+bring_front_click = False
+floats_kept_above = True
+cursor_warp = False
+floating_layout = layout.Floating(
+ border_focus="#454545",
+ border_normal="#1c1c1c",
+ border_width=4,
+ float_rules=[
+ *layout.Floating.default_float_rules,
+ Match(wm_class="confirmreset"),
+ Match(wm_class="makebranch"),
+ Match(wm_class="maketag"),
+ Match(wm_class="ssh-askpass"),
+ Match(title="branchdialog"),
+ Match(title="pinentry")])
+auto_fullscreen = True
+focus_on_window_activation = "smart"
+reconfigure_screens = True
+auto_minimize = True
+wl_input_rules = None
+wl_xcursor_theme = "Adwaita"
+wl_xcursor_size = 24
+wmname = "LG3D"
diff --git a/config/qutebrowser/autoconfig.yml b/config/qutebrowser/autoconfig.yml
new file mode 100755
index 0000000..986632b
--- /dev/null
+++ b/config/qutebrowser/autoconfig.yml
@@ -0,0 +1,10 @@
+# If a config.py file exists, this file is ignored unless it's explicitly loaded
+# via config.load_autoconfig(). For more information, see:
+# https://github.com/qutebrowser/qutebrowser/blob/main/doc/help/configuring.asciidoc#loading-autoconfigyml
+# DO NOT edit this file by hand, qutebrowser will overwrite it.
+# Instead, create a config.py - see :help for details.
+
+config_version: 2
+settings:
+ content.javascript.clipboard:
+ https://chatgpt.com: access-paste
diff --git a/config/qutebrowser/bookmarks/urls b/config/qutebrowser/bookmarks/urls
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/config/qutebrowser/bookmarks/urls
diff --git a/config/qutebrowser/config.py b/config/qutebrowser/config.py
new file mode 100755
index 0000000..87e98e5
--- /dev/null
+++ b/config/qutebrowser/config.py
@@ -0,0 +1,47 @@
+config.load_autoconfig(False)
+
+config.set(
+ 'content.headers.user_agent',
+ 'Mozilla/5.0 (Windows; Windows NT 10.1; Win64; x64; en-US) '
+ 'AppleWebKit/640.0.0 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/640.0.0'
+)
+
+
+c.url.searchengines = {
+ "DEFAULT": "https://priv.au/search?q={}"
+}
+
+c.url.start_pages = "https://priv.au"
+c.url.default_page = "https://priv.au"
+
+c.aliases['tab-new'] = 'open -t'
+c.aliases['tabnew'] = 'open -t'
+
+# Adblocking info -->
+# For yt ads: place the greasemonkey script yt-ads.js in your greasemonkey folder (~/.config/qutebrowser/greasemonkey).
+# The script skips through the entire ad, so all you have to do is click the skip button.
+# Yeah it's not ublock origin, but if you want a minimal browser, this is a solution for the tradeoff.
+# You can also watch yt vids directly in mpv, see qutebrowser FAQ for how to do that.
+# If you want additional blocklists, you can get the python-adblock package, or you can uncomment the ublock lists here.
+c.content.blocking.enabled = True
+# c.content.blocking.method = 'adblock' # uncomment this if you install python-adblock
+# c.content.blocking.adblock.lists = [
+# "https://github.com/ewpratten/youtube_ad_blocklist/blob/master/blocklist.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/legacy.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2020.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2021.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2022.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2023.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2024.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/badware.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/privacy.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/badlists.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/annoyances.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/annoyances-cookies.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/annoyances-others.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/badlists.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/quick-fixes.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/resource-abuse.txt",
+# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/unbreak.txt"]
+
diff --git a/config/qutebrowser/greasemonkey/yt-ads.js b/config/qutebrowser/greasemonkey/yt-ads.js
new file mode 100755
index 0000000..932fd29
--- /dev/null
+++ b/config/qutebrowser/greasemonkey/yt-ads.js
@@ -0,0 +1,19 @@
+// ==UserScript==
+// @name Auto Skip YouTube Ads
+// @version 1.1.0
+// @description Speed up and skip YouTube ads automatically
+// @author jso8910 and others
+// @match *://*.youtube.com/*
+// ==/UserScript==
+
+
+document.addEventListener('load', () => {
+ const btn = document.querySelector('.videoAdUiSkipButton,.ytp-ad-skip-button-modern')
+ if (btn) {
+ btn.click()
+ }
+ const ad = [...document.querySelectorAll('.ad-showing')][0];
+ if (ad) {
+ document.querySelector('video').currentTime = 9999999999;
+ }
+}, true);
diff --git a/config/qutebrowser/quickmarks b/config/qutebrowser/quickmarks
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/config/qutebrowser/quickmarks
diff --git a/config/rofi/config.rasi b/config/rofi/config.rasi
new file mode 100755
index 0000000..88e4ad0
--- /dev/null
+++ b/config/rofi/config.rasi
@@ -0,0 +1,64 @@
+* {
+ highlight: bold italic;
+ scrollbar: true;
+
+ base-bg: #1e1e2e;
+ base-bg-soft: #181825;
+ base-bg-alt: #11111b;
+
+ base-fg: #cdd6f4;
+ base-fg-dim: #6c7086;
+
+ accent: #f5c2e7;
+ accent-light: #cba6f7;
+ accent-dark: #f38ba8;
+
+ border-gray: #313244;
+
+ background: @base-bg;
+ background-color: @background;
+ foreground: @base-fg;
+ border-color: @border-gray;
+ separatorcolor: @border-color;
+ scrollbar-handle: @border-color;
+
+ normal-background: @background;
+ normal-foreground: @foreground;
+ alternate-normal-background: @base-bg-soft;
+ alternate-normal-foreground: @foreground;
+
+ selected-normal-background: @accent;
+ selected-normal-foreground: @base-bg-alt;
+
+ active-background: @accent;
+ active-foreground: @base-bg-alt;
+ alternate-active-background: @accent;
+ alternate-active-foreground: @active-foreground;
+
+ selected-active-background: @accent-light;
+ selected-active-foreground: @active-foreground;
+
+ urgent-background: @accent-dark;
+ urgent-foreground: @base-bg-alt;
+ alternate-urgent-background: @accent-dark;
+ alternate-urgent-foreground: @urgent-foreground;
+
+ selected-urgent-background: @accent-light;
+ selected-urgent-foreground: @urgent-foreground;
+
+ padding: 6px 6px;
+}
+
+configuration {
+ font: "JetBrainsMono Nerd Font 14";
+ show-icons: true;
+ terminal: "foot";
+}
+
+element-icon {
+ size: 20px;
+}
+
+window {
+ border-radius: 0px;
+}
diff --git a/config/rofi/gruvbox.rasi b/config/rofi/gruvbox.rasi
new file mode 100755
index 0000000..4941db9
--- /dev/null
+++ b/config/rofi/gruvbox.rasi
@@ -0,0 +1,61 @@
+* {
+ highlight: bold italic;
+ scrollbar: true;
+
+ base-bg: #0f0f0f;
+ base-bg-soft: #1a1a1a;
+ base-bg-alt: #2a2a2a;
+ base-fg: #e0def4;
+ base-fg-dim: #6e6a86;
+
+ accent: #ebbcba;
+ accent-light: #ea9a97;
+ accent-dark: #d7827e;
+
+ border-gray: #454545;
+
+ background: @base-bg;
+ background-color: @background;
+ foreground: @base-fg;
+ border-color: @border-gray;
+ separatorcolor: @border-color;
+ scrollbar-handle: @border-color;
+
+ normal-background: @background;
+ normal-foreground: @foreground;
+ alternate-normal-background: @base-bg-soft;
+ alternate-normal-foreground: @foreground;
+ selected-normal-background: @accent;
+ selected-normal-foreground: @base-bg;
+
+ active-background: @accent;
+ active-foreground: @base-bg;
+ alternate-active-background: @accent;
+ alternate-active-foreground: @active-foreground;
+ selected-active-background: @accent-light;
+ selected-active-foreground: @active-foreground;
+
+ urgent-background: @accent-dark;
+ urgent-foreground: @base-bg;
+ alternate-urgent-background: @accent-dark;
+ alternate-urgent-foreground: @urgent-foreground;
+ selected-urgent-background: @accent-light;
+ selected-urgent-foreground: @urgent-foreground;
+
+ padding: 6px 6px;
+}
+
+configuration {
+ font: "JetBrainsMono Nerd Font 14";
+ show-icons: true;
+ terminal: "footclient";
+}
+
+element-icon {
+ size: 20px;
+}
+
+window {
+ border-radius: 10px;
+}
+
diff --git a/config/rofi/rofi/config.rasi b/config/rofi/rofi/config.rasi
new file mode 100755
index 0000000..d99eab8
--- /dev/null
+++ b/config/rofi/rofi/config.rasi
@@ -0,0 +1,61 @@
+* {
+ highlight: bold italic;
+ scrollbar: true;
+
+ base-bg: #000000;
+ base-bg-soft: #1a1a1a;
+ base-bg-alt: #0d0d0d;
+ base-fg: #f5f5f5;
+ base-fg-dim: #808080;
+ accent: #ffffff;
+ accent-light: #e0e0e0;
+ accent-dark: #4d4d4d;
+ border-gray: #333333;
+
+ background: @base-bg;
+ background-color: @background;
+ foreground: @base-fg;
+ border-color: @border-gray;
+ separatorcolor: @border-color;
+ scrollbar-handle: @border-color;
+
+ normal-background: @background;
+ normal-foreground: @foreground;
+ alternate-normal-background: @base-bg-soft;
+ alternate-normal-foreground: @foreground;
+
+ selected-normal-background: @accent;
+ selected-normal-foreground: @base-bg-alt;
+
+ active-background: @accent;
+ active-foreground: @base-bg-alt;
+ alternate-active-background: @accent;
+ alternate-active-foreground: @active-foreground;
+
+ selected-active-background: @accent-light;
+ selected-active-foreground: @active-foreground;
+
+ urgent-background: @accent-dark;
+ urgent-foreground: @base-bg-alt;
+ alternate-urgent-background: @accent-dark;
+ alternate-urgent-foreground: @urgent-foreground;
+
+ selected-urgent-background: @accent-light;
+ selected-urgent-foreground: @urgent-foreground;
+
+ padding: 6px 6px;
+}
+
+configuration {
+ font: "JetBrainsMono Nerd Font 14";
+ show-icons: true;
+ terminal: "foot";
+}
+
+element-icon {
+ size: 20px;
+}
+
+window {
+ border-radius: 10px;
+}
diff --git a/config/shell/aliases b/config/shell/aliases
new file mode 100755
index 0000000..a882dec
--- /dev/null
+++ b/config/shell/aliases
@@ -0,0 +1,45 @@
+#!/bin/sh
+#general aliases
+alias forge="su forgejo"
+alias cst="emacs ~/.suckless/st/config.h"
+alias resmacs="systemctl --user restart emacsd"
+alias smi="nvidia-smi"
+alias src="source ~/.zshrc"
+alias bat="sb-battery"
+alias battery="sb-battery"
+alias vimrc="vim .vimrc"
+alias ri="ranger"
+alias rim="ranger"
+alias quit="exit"
+alias :q="exit"
+alias :q!="exit"
+alias :Q="exit"
+alias :Q!="exit"
+alias :quit="exit"
+alias :quit!="exit"
+alias :QUIT="exit"
+alias :QUIT!="exit"
+alias q="exit"
+alias fnl="fennel"
+alias "git push -u origin main"="push"
+alias irc="irssi"
+alias hsw="home-manager switch --flake ~/.config/home-manager"
+alias hsc="emacs ~/.config/home-manager/home.nix"
+alias yell="echo"
+alias chm="ecop cat ~/.config/home-manager/home.nix"
+if [ -n "$ZSH_VERSION" ]; then
+ alias ed="ed -p '%: '"
+else
+ alias ed="ed -p '$: '"
+fi
+alias weather="curl wttr.in/masjedsoleyman"
+#typo/shortcut
+alias c="clear"
+alias cear="clear"
+alias "cd.."="cd .."
+alias claer="clear"
+alias claer="clear"
+alias clare="clear"
+alias cleae="clear"
+alias clera="clear"
+alias hotp="htop"
diff --git a/config/shell/exports b/config/shell/exports
new file mode 100755
index 0000000..9ca27a9
--- /dev/null
+++ b/config/shell/exports
@@ -0,0 +1,7 @@
+export PATH=$HOME/.local/bin:$PATH
+export PATH=$HOME/.luarocks/bin:$PATH
+if [ -n "$ZSH_VERSION" ]; then
+ export ZSH="/home/avery/.oh-my-zsh"
+fi
+export NIXPKGS_ALLOW_UNFREE=1
+export EDITOR="emacs"
diff --git a/config/shell/shell/aliases b/config/shell/shell/aliases
new file mode 100755
index 0000000..d53e7b2
--- /dev/null
+++ b/config/shell/shell/aliases
@@ -0,0 +1,53 @@
+ #!/bin/sh
+ #general aliases
+ alias xi="doas xbps-install -S $1"
+ alias nf="clear && fastfetch"
+ alias ascdis="fastfetch --logo $1"
+ alias forge="su forgejo"
+ alias emoji="cat ~/.local/share/emoji | grep $1"
+ alias cst="emacs ~/.suckless/st/config.h"
+ alias las="ls"
+ alias lasa="ls -a"
+ alias lasal="ls -al"
+ alias anal="ls -ahl"
+ alias resmacs="systemctl --user restart emacsd"
+ alias smi="nvidia-smi"
+ alias src="source ~/.zshrc"
+ alias bat="sb-battery"
+ alias battery="sb-battery"
+ alias vimrc="vim .vimrc"
+ alias ri="ranger"
+ alias rim="ranger"
+ alias quit="exit"
+ alias :q="exit"
+ alias :q!="exit"
+ alias :Q="exit"
+ alias :Q!="exit"
+ alias :quit="exit"
+ alias :quit!="exit"
+ alias :QUIT="exit"
+ alias :QUIT!="exit"
+ alias q="exit"
+ alias fnl="fennel"
+ alias "push"="git push -u origin main"
+ alias irc="irssi"
+ alias hsw="home-manager switch --flake ~/.config/home-manager"
+ alias hsc="emacs ~/.config/home-manager/home.nix"
+ alias yell="echo"
+ alias chm="ecop cat ~/.config/home-manager/home.nix"
+ if [ -n "$ZSH_VERSION" ]; then
+ alias ed="ed -p '%: '"
+ else
+ alias ed="ed -p '$: '"
+ fi
+ alias weather="curl wttr.in/masjedsoleyman"
+ #typo/shortcut
+ alias c="clear"
+ alias cear="clear"
+ alias "cd.."="cd .."
+ alias claer="clear"
+ alias claer="clear"
+ alias clare="clear"
+ alias cleae="clear"
+ alias clera="clear"
+ alias hotp="htop"
diff --git a/config/shell/shell/aliases.backup b/config/shell/shell/aliases.backup
new file mode 100755
index 0000000..c8f86ac
--- /dev/null
+++ b/config/shell/shell/aliases.backup
@@ -0,0 +1,27 @@
+#!/bin/zsh
+#general aliases
+alias emacs="emacsclient -c"
+alias vimrc="edsc .vimrc"
+alias ri="ranger"
+alias rim="ranger"
+alias :q="exit"
+alias :q!="exit"
+alias :Q="exit"
+alias :Q!="exit"
+alias :quit="exit"
+alias :quit!="exit"
+alias :QUIT="exit"
+alias :QUIT!="exit"
+alias fnl="fennel"
+alias irc="irssi"
+alias hsw="home-manager switch"
+#typo/shortcut
+alias c="clear"
+alias cear="clear"
+alias "cd.."="cd .."
+alias claer="clear"
+alias claer="clear"
+alias clare="clear"
+alias cleae="clear"
+alias clera="clear"
+alias hotp="htop"
diff --git a/config/shell/shell/exports b/config/shell/shell/exports
new file mode 100755
index 0000000..9ed30bc
--- /dev/null
+++ b/config/shell/shell/exports
@@ -0,0 +1,8 @@
+export PATH=$HOME/.local/bin:$PATH
+export PATH=$HOME/.luarocks/bin:$PATH
+if [ -n "$ZSH_VERSION" ]; then
+ export ZSH="/home/avery/.oh-my-zsh"
+fi
+export NIXPKGS_ALLOW_UNFREE=1
+export EDITOR="emacs"
+export BROWSER="brave"
diff --git a/config/shell/shell/exports.backup b/config/shell/shell/exports.backup
new file mode 100755
index 0000000..c1d9f0e
--- /dev/null
+++ b/config/shell/shell/exports.backup
@@ -0,0 +1,4 @@
+export PATH=$HOME/.local/bin:$PATH
+export PATH=$HOME/.luarocks/bin:$PATH
+export ZSH="/home/avery/.oh-my-zsh"
+export NIXPKGS_ALLOW_UNFREE=1
diff --git a/config/starship.toml b/config/starship.toml
new file mode 100755
index 0000000..119021d
--- /dev/null
+++ b/config/starship.toml
@@ -0,0 +1,36 @@
+format = """
+[](#0f0f0f)\
+$username\
+[](bg:#1a1a1a fg:#0f0f0f)\
+$directory\
+[](bg:#2a2a2a fg:#1a1a1a)\
+$all_langs\
+[](bg:#1a1a1a fg:#2a2a2a)\
+$time\
+[](fg:#1a1a1a)
+"""
+
+add_newline = false
+
+[username]
+show_always = true
+style_user = "bg:#0f0f0f fg:#ebbcba"
+style_root = "bg:#0f0f0f fg:#eb6f92"
+format = '[$user]($style)'
+disabled = false
+
+[os]
+style = "bg:#1a1a1a fg:#ebbcba"
+disabled = true
+
+[directory]
+style = "fg:#ebbcba bg:#1a1a1a"
+format = "[ $path ]($style)"
+truncation_length = 3
+truncation_symbol = "…/"
+
+[directory.substitutions]
+"Documents" = "󰈙 "
+"Downloads" = " "
+"Music" = " "
+"Pictures" = " "
diff --git a/config/sway/config b/config/sway/config
new file mode 100755
index 0000000..d7c5c04
--- /dev/null
+++ b/config/sway/config
@@ -0,0 +1,131 @@
+exec "foot --server"
+exec "wbg /home/coast/Pictures/walls/wallhaven-yq5dmg_1920x1080.png"
+exec "dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=Sway"
+exec "gnome-keyring-daemon --start --components=secrets"
+exec "waybar"
+exec "mpd ~/.mpdconf"
+exec "mpc add /"
+exec "flatpak override --env=GTK_THEME=Catppuccin-B-MB-Dark --user"
+exec "mako"
+
+set $mod Mod4
+set $left h
+set $down j
+set $up k
+set $right l
+
+set $term footclient
+set $menu rofi -show drun -config /home/coast/.config/rofi/config.rasi
+set $webBrowser firefox-bin
+set $discordApp vesktop-bin --proxy-server="socks5://127.0.0.1:65000"
+set $restartWaybar "pkill waybar; waybar &"
+set $fileManager pcmanfm
+
+
+output HDMI-A-1 resolution 1920x1080@100Hz position 0,0
+
+workspace 2 output HDMI-A-1
+
+output * bg /home/coast/Pictures/walls/wallhaven-yq5dmg_1920x1080.png fill
+
+ exec swayidle -w \
+ timeout 300 'hyprlock' \
+ timeout 600 'swaymsg "output * power off"' \
+ resume 'swaymsg "output * power on"' \
+ before-sleep 'hyprlock'
+
+input type:keyboard {
+ xkb_layout us
+}
+
+gaps inner 5
+gaps outer 9
+
+default_border pixel 1
+
+client.focused #6c6c9d #6c6c9d #ffffff #6c6c9d #6c6c9d
+client.unfocused #1e1e2e #1e1e2e #5c5c5c #1e1e2e #1e1e2e
+client.focused_inactive #1e1e2e #1e1e2e #5c5c5c #1e1e2e #1e1e2e
+
+bindsym $mod+Return exec $term
+bindsym $mod+s kill
+bindsym $mod+r exec $menu
+bindsym $mod+Shift+q exec swaymsg exit
+bindsym $mod+ctrl+r reload
+
+floating_modifier $mod normal
+
+bindsym $mod+space exec swaymsg floating toggle && swaymsg resize set 1000 800 && swaymsg move position center
+
+bindsym $mod+backslash move position center
+
+bindsym $mod+$left focus left
+bindsym $mod+$down focus down
+bindsym $mod+$up focus up
+bindsym $mod+$right focus right
+
+bindsym $mod+Shift+$left move left
+bindsym $mod+Shift+$down move down
+bindsym $mod+Shift+$up move up
+bindsym $mod+Shift+$right move right
+
+bindsym $mod+Mod1+$left resize shrink width 30px
+bindsym $mod+Mod1+$right resize grow width 30px
+bindsym $mod+Mod1+$up resize shrink height 30px
+bindsym $mod+Mod1+$down resize grow height 30px
+
+bindsym $mod+Left move left 40px
+bindsym $mod+Right move right 40px
+bindsym $mod+Up move up 40px
+bindsym $mod+Down move down 40px
+
+bindsym $mod+Shift+Left resize shrink width 40px
+bindsym $mod+Shift+Right resize grow width 40px
+bindsym $mod+Shift+Up resize shrink height 40px
+bindsym $mod+Shift+Down resize grow height 40px
+
+bindsym $mod+1 workspace number 1
+bindsym $mod+2 workspace number 2
+bindsym $mod+3 workspace number 3
+bindsym $mod+4 workspace number 4
+bindsym $mod+5 workspace number 5
+bindsym $mod+6 workspace number 6
+bindsym $mod+7 workspace number 7
+bindsym $mod+8 workspace number 8
+bindsym $mod+9 workspace number 9
+
+bindsym $mod+Shift+1 move container to workspace number 1
+bindsym $mod+Shift+2 move container to workspace number 2
+bindsym $mod+Shift+3 move container to workspace number 3
+bindsym $mod+Shift+4 move container to workspace number 4
+bindsym $mod+Shift+5 move container to workspace number 5
+bindsym $mod+Shift+6 move container to workspace number 6
+bindsym $mod+Shift+7 move container to workspace number 7
+bindsym $mod+Shift+8 move container to workspace number 8
+bindsym $mod+Shift+9 move container to workspace number 9
+
+bindsym $mod+c scratchpad show
+bindsym $mod+Shift+c move scratchpad
+
+bindsym $mod+Shift+b exec $webBrowser
+bindsym $mod+Shift+v exec $discordApp
+bindsym $mod+f exec $fileManager
+bindsym $mod+Shift+p exec $restartWaybar
+bindsym $mod+ctrl+l exec hyprlock
+
+bindsym $mod+Shift+s exec screenie-wlr
+
+bindsym $mod+Mod1+Up exec /home/coast/.local/bin/mpc-shuf.sh shuf
+bindsym $mod+Mod1+Down exec /home/coast/.local/bin/mpc-shuf.sh shufno
+bindsym $mod+Mod1+Right exec /home/coast/.local/bin/mpc-shuf.sh next
+bindsym $mod+Mod1+Left exec /home/coast/.local/bin/mpc-shuf.sh prev
+bindsym $mod+Shift+r exec /home/coast/.local/bin/mpc-shuf.sh search
+bindsym $mod+ctrl+a exec /home/coast/.local/bin/mpc-shuf.sh album
+bindsym $mod+Mod1+r exec /home/coast/.local/bin/mpc-shuf.sh artist
+bindsym $mod+slash exec /home/coast/.local/bin/mpc-shuf.sh info
+bindsym $mod+comma exec mpc volume -5
+bindsym $mod+period exec mpc volume +5
+bindsym $mod+bracketright exec /home/coast/.local/bin/mpc-shuf.sh toggle
+bindsym $mod+ctrl+Up exec /home/coast/.local/bin/mpc-shuf.sh reload
+
+xwayland enable
diff --git a/config/sxhkd/sxhkdrc b/config/sxhkd/sxhkdrc
new file mode 100755
index 0000000..a44e11d
--- /dev/null
+++ b/config/sxhkd/sxhkdrc
@@ -0,0 +1,18 @@
+super + shift + r
+ brwmenu
+super + shift + b
+ mullvad-browser-bin
+super + f
+ pcmanfm
+super + shift + f
+ st -e ranger
+super + shift + t
+ torbrowser-launcher
+super + shift + i
+ mullvad-browser-bin --private-window
+super + shift + n
+ nekoray
+super + shift + v
+ vesktop-bin
+super + shift + g
+ st -e htop
diff --git a/config/systemd/emacsd.service b/config/systemd/emacsd.service
new file mode 100755
index 0000000..950f2c6
--- /dev/null
+++ b/config/systemd/emacsd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Emacs daemon
+
+[Service]
+Type=forking
+ExecStart=/usr/bin/emacs --daemon
+ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
+Restart=on-failure
+
+[Install]
+WantedBy=default.target
diff --git a/config/tmux/tmux.conf b/config/tmux/tmux.conf
new file mode 100755
index 0000000..7bd46dc
--- /dev/null
+++ b/config/tmux/tmux.conf
@@ -0,0 +1,67 @@
+set -g default-terminal "tmux-256color"
+set -ga terminal-overrides ",*:RGB"
+set -g mouse on
+set -g set-clipboard on
+
+unbind C-b
+set -g prefix C-a
+bind-key C-a send-prefix
+
+bind h select-pane -L
+bind j select-pane -D
+bind k select-pane -U
+bind l select-pane -R
+
+unbind %
+bind | split-window -h -c "#{pane_current_path}"
+
+unbind '"'
+bind - split-window -v -c "#{pane_current_path}"
+
+unbind r
+bind r source-file $HOME/.config/tmux/tmux.conf
+
+set -g base-index 1
+set -g pane-base-index 1
+set -g renumber-windows on
+
+set -g mode-keys vi
+bind-key -T copy-mode-vi v send-keys -X begin-selection
+bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
+bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
+unbind -T copy-mode-vi MouseDragEnd1Pane
+
+bind -n M-h select-pane -L
+bind -n M-j select-pane -D
+bind -n M-k select-pane -U
+bind -n M-l select-pane -R
+
+bind -n M-1 select-window -t 1
+bind -n M-2 select-window -t 2
+bind -n M-3 select-window -t 3
+bind -n M-4 select-window -t 4
+bind -n M-5 select-window -t 5
+bind -n M-6 select-window -t 6
+bind -n M-7 select-window -t 7
+bind -n M-8 select-window -t 8
+bind -n M-9 select-window -t 9
+
+set -g status on
+set -g status-justify centre
+set -g status-bg "#1a1a1a"
+set -g status-fg "#ebbcba"
+set -g status-style "bg=#1a1a1a,fg=#ebbcba"
+
+set -g status-left "#[bg=#ebbcba,fg=#1a1a1a,bold] #S "
+set -g status-right " #[bg=#ebbcba,fg=#1a1a1a,bold] %H:%M "
+set -g window-status-current-format "#[fg=#ebbcba]#[bg=#ebbcba,fg=#1a1a1a,bold] #I: #W #[fg=#ebbcba,bg=#1a1a1a]"
+set -g window-status-format "#[fg=#ebbcba]#[bg=#ebbcba,fg=#111111] #I #[fg=#ebbcba,bg=#1a1a1a]"
+
+set -g pane-border-style "fg=#ebbcba"
+set -g pane-active-border-style "fg=#ebbcba"
+
+set -g mode-style "bg=#ebbcba,fg=#ebbcba"
+
+set -g message-style "fg=#ebbcba,bg=#1a1a1a,bold"
+set -g message-command-style "fg=#ebbcba,bg=#1a1a1a,bold"
+
diff --git a/config/waybar-2/config.jsonc b/config/waybar-2/config.jsonc
new file mode 100644
index 0000000..a2ed085
--- /dev/null
+++ b/config/waybar-2/config.jsonc
@@ -0,0 +1,27 @@
+{
+ "layer": "top",
+ "position": "bottom",
+ "height": 35,
+ "spacing": 4,
+ "modules-left": ["hyprland/workspaces"],
+ "modules-center": ["hyprland/window"],
+ "modules-right": ["clock"],
+
+ "hyprland/workspaces": {
+ "disable-scroll": true,
+ "all-outputs": true,
+ "format": "{id}",
+ "on-click": "activate"
+ },
+
+ "hyprland/window": {
+ "format": "{}",
+ "max-length": 40,
+ "separate-outputs": true
+ },
+
+ "clock": {
+ "format": "{:%I:%M %p}",
+ "tooltip": false
+ }
+}
diff --git a/config/waybar-2/style.css b/config/waybar-2/style.css
new file mode 100644
index 0000000..10b2071
--- /dev/null
+++ b/config/waybar-2/style.css
@@ -0,0 +1,42 @@
+* {
+ border: none;
+ border-radius: 0;
+ font-family: "JetBrainsMono Nerd Font";
+ font-size: 15px;
+ min-height: 0;
+}
+
+window#waybar {
+ background-color: rgba(30, 30, 46, 0.8);
+ color: #cdd6f4;
+}
+
+#workspaces {
+ margin: 0 4px;
+}
+
+#workspaces button {
+ padding: 0 8px;
+ margin: 0 4px;
+ color: #6c7086;
+}
+
+#workspaces button.active {
+ color: #89b4fa;
+ border-bottom: 2px solid #89b4fa;
+}
+
+#workspaces button:hover {
+ background: rgba(137, 180, 250, 0.1);
+ box-shadow: inherit;
+ text-shadow: inherit;
+}
+
+#window {
+ color: #cdd6f4;
+}
+
+#clock {
+ font-weight: bold;
+ padding-right: 15px;
+}
diff --git a/config/waybar-2/waybar/config.jsonc b/config/waybar-2/waybar/config.jsonc
new file mode 100755
index 0000000..8d04fac
--- /dev/null
+++ b/config/waybar-2/waybar/config.jsonc
@@ -0,0 +1,154 @@
+{
+ "reload-style-on-change": true,
+ "layer": "top",
+ "position": "top",
+ "output": "HDMI-A-1",
+ "spacing": 0,
+ "height": 35,
+ "border-radius": 25,
+
+ "modules-left": ["niri/workspaces"],
+ "modules-center": [],
+ "modules-right": ["group/right"],
+
+ "group/right": {
+ "orientation": "inherit",
+ "modules": [
+ "clock"
+ ]
+ },
+
+ "custom/active_window": {
+ "exec": "~/.config/waybar/window.sh",
+ "return-type": "json",
+ "markup": true
+ },
+
+ "niri/workspaces": {
+ "on-click": "activate",
+ "format": "{icon}",
+ "format-icons": {
+ "default": "",
+ "active": "",
+ "urgent": "",
+ "empty": ""
+ },
+ "persistent-workspaces": {
+ "1": [],
+ "2": [],
+ "3": [],
+ "4": [],
+ "5": [],
+ "6": [],
+ "7": [],
+ "8": []
+ }
+ },
+
+ "custom/wbmenu": {
+ "format": "<span size='13500'></span>",
+ "on-click": "rofi -show drun -config ~/.config/rofi/gruvbox.rasi",
+ "on-click-right": "xdg-terminal-exec",
+ "tooltip-format": "Menu\n\nSuper + Return"
+ },
+
+ "cpu": {
+ "interval": 2,
+ "format": "{icon} ",
+ "format-icons": ["󰪞", "󰪟", "󰪠", "󰪡", "󰪢", "󰪣", "󰪤", "󰪥"]
+ },
+
+ "memory": {
+ "interval": 2,
+ "format": "{icon}",
+ "format-icons": ["󰪞", "󰪟", "󰪠", "󰪡", "󰪢", "󰪣", "󰪤", "󰪥"]
+ },
+
+ "clock": {
+ "format": " {:%I:%M %p • %a, %d/%m} ",
+ "format-alt": "{:%A, %d %B %Y}",
+ "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
+ },
+
+ "network": {
+ "format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
+ "format": "{icon}",
+ "format-wifi": "{icon}",
+ "format-ethernet": "<span size='11500'>󰌘</span>",
+ "format-disconnected": "<span size='11500'>󰤮</span>",
+ "tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
+ "tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
+ "tooltip-format-disconnected": "Disconnected",
+ "interval": 3,
+ "spacing": 1
+ },
+
+ "battery": {
+ "format": "{capacity}% {icon}",
+ "format-discharging": "{icon}",
+ "format-charging": "{icon}",
+ "format-plugged": "",
+ "format-icons": {
+ "charging": ["󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"],
+ "default": ["󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
+ },
+ "format-full": "󰂅",
+ "tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
+ "tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
+ "interval": 5,
+ "states": {
+ "warning": 20,
+ "critical": 10
+ }
+ },
+
+ "bluetooth": {
+ "format": "<span size='11500'>󰂯</span>",
+ "format-disabled": "<span size='11500'>󰂲</span>",
+ "format-connected": "<span size='11500'></span>",
+ "format-no-controller": "",
+ "tooltip-format": "Devices connected: {num_connections}"
+ },
+
+ "pulseaudio": {
+ "format": "<span size='11500'>{icon}</span>",
+ "on-click-right": "pamixer -t",
+ "tooltip-format": "Playing at {volume}%",
+ "scroll-step": 5,
+ "format-muted": "",
+ "format-icons": {
+ "default": [" ", " ", " "]
+ }
+ },
+
+ "group/tray-expander": {
+ "orientation": "inherit",
+ "drawer": {
+ "transition-duration": 600,
+ "children-class": "tray-group-item"
+ },
+ "modules": ["custom/expand-icon", "tray"]
+ },
+
+ "custom/expand-icon": {
+ "format": "",
+ "tooltip": false
+ },
+
+ "tray": {
+ "icon-size": 16,
+ "spacing": 8
+ },
+
+ "custom/separator#blank": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false
+ },
+
+ "custom/separator#dot": {
+ "format": " ",
+ "interval": "once",
+ "tooltip": false
+ }
+}
diff --git a/config/waybar-2/waybar/style.css b/config/waybar-2/waybar/style.css
new file mode 100755
index 0000000..7f63e4b
--- /dev/null
+++ b/config/waybar-2/waybar/style.css
@@ -0,0 +1,207 @@
+@define-color background #0E0F12;
+@define-color foreground #E6DAD1;
+@define-color accent #A07A6A;
+@define-color muted #6E5A52;
+@define-color subtle #15161A;
+
+* {
+ color: @foreground;
+ border: none;
+ border-radius: 0;
+ min-height: 0;
+ font-family: 'JetBrainsMono Nerd Font Propo';
+ font-size: 12px;
+}
+
+window#waybar {
+ background-color: @background;
+ transition-property: background-color;
+ transition-duration: .5s;
+}
+
+window#waybar > box {
+ background-color: @background;
+ border-radius: 32px;
+ margin: 2px 10px 0px 10px;
+}
+
+window#waybar.empty #window {
+ background: transparent;
+ background-color: transparent;
+ border: none;
+ border-radius: 0;
+ color: transparent;
+ padding: 0;
+ margin: 0;
+}
+
+#waybar.empty .modules-center {
+ opacity: 0;
+}
+
+.modules-left {
+ margin-left: 8px;
+}
+.modules-right {
+ margin-right: 8px;
+}
+
+#workspaces {
+ padding: 0px 5px;
+ margin: 3.5px 3.5px;
+ border-radius: 11px;
+ background-color: alpha(@foreground, 0.06);
+ opacity: 0.95;
+}
+
+#workspaces button {
+ all: initial;
+ color: @foreground;
+ padding: 0 6px;
+ margin: 0 1.5px;
+ min-width: 9px;
+}
+
+#workspaces button.empty {
+ opacity: 0.45;
+}
+
+#workspaces button.active {
+ border-radius: 18px;
+ background: alpha(@foreground, 0.14);
+ opacity: 1;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 5px;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+#workspaces button:hover {
+ border-radius: 18px;
+ background: alpha(@foreground, 0.08);
+ opacity: 1;
+}
+
+#workspaces button.urgent {
+ border-radius: 18px;
+ background: alpha(#f13333, 0.4);
+ opacity: 1;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 5px;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+#clock {
+ font-size: 13px;
+ font-weight: 700;
+}
+
+#battery,
+#pulseaudio,
+#custom-screenrecording-indicator,
+#custom-update {
+ min-width: 12px;
+ margin: 0 7.5px;
+}
+
+#pulseaudio {
+ margin-right: 5px;
+}
+
+#bluetooth {
+ margin-right: 12px;
+}
+
+#network {
+ margin-right: 9px;
+}
+
+#custom-idle-indicator,
+#custom-notification-silencing-indicator {
+ margin-right: 2px;
+ min-width: 15px;
+}
+
+#custom-update {
+ font-size: 10px;
+}
+
+#custom-screenrecording-indicator {
+ min-width: 12px;
+ margin-left: 8.75px;
+ font-size: 10px;
+}
+
+#custom-screenrecording-indicator.active {
+ color: red;
+}
+
+#tray {
+ background: alpha(@foreground, 0.0);
+ border-radius: 16px;
+ padding: 0px 5px;
+ margin: 3.5px 2px;
+ margin-right: 4px;
+}
+
+#custom-omarchy {
+ background: alpha(@foreground, 0.08);
+ border-radius: 99px;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: -3px;
+ margin-right: 5px;
+ padding-right: 7px;
+ padding-left: 7px;
+}
+
+#cpu, #memory {
+ font-size: 18px;
+ padding: 2px 1px;
+}
+
+#custom-active_window {
+ padding: 3px 6px;
+ border-radius: 14px;
+ background: alpha(@foreground, 0.06);
+ font-size: 12px;
+}
+
+#group-right1,
+#group_right1,
+#right1 {
+ font-weight: 800;
+ background: transparent;
+ padding: 0px 5px;
+ margin: 3.5px 2px;
+}
+
+#group-left,
+#group_left,
+#left,
+#group-right,
+#group_right,
+#right {
+ font-weight: 800;
+ background: alpha(@foreground, 0.06);
+ border-radius: 12px;
+ padding: 0px 5px;
+ margin: 3.5px 2px;
+}
+
+tooltip {
+ background: @subtle;
+ border: 1px solid alpha(@foreground, 0.12);
+ border-radius: 4px 4px 11px 11px;
+}
+
+tooltip label {
+ color: alpha(@foreground, 0.92);
+}
+
+.hidden {
+ opacity: 0;
+}
diff --git a/config/waybar-2/waybar/window.sh b/config/waybar-2/waybar/window.sh
new file mode 100755
index 0000000..abf1e39
--- /dev/null
+++ b/config/waybar-2/waybar/window.sh
@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+
+MAX_TITLE_LEN=20
+
+print_status() {
+ window=$(hyprctl activewindow -j 2>/dev/null)
+ address=$(jq -r '.address // empty' <<< "$window")
+
+ # No active window → show Desktop + Workspace
+ if [[ -z "$address" || "$address" == "null" ]]; then
+ ws=$(hyprctl activeworkspace -j | jq -r '.id')
+
+ top_line="Desktop"
+ bottom_line="Workspace $ws"
+
+ esc_top=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$top_line")
+ esc_bottom=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$bottom_line")
+
+ text="<span size='7500' foreground='#a6adc8' rise='-2000'>$esc_top</span>
+<span size='9000' weight='bold' foreground='#ffffff'>$esc_bottom</span>"
+
+ jq -nc \
+ --arg text "$text" \
+ --arg tooltip "$bottom_line" \
+ '{ text: $text, class: "custom-window", tooltip: $tooltip }'
+ return
+ fi
+
+ class=$(jq -r '.class // "Unknown"' <<< "$window")
+ title=$(jq -r '.title // ""' <<< "$window")
+
+ app_class="${class,,}"
+
+ # Discord / Vesktop cleanup
+ if [[ "$app_class" == *discord* || "$app_class" == *vesktop* ]]; then
+ title=$(sed -E 's/^\([0-9]+\)[[:space:]]*//' <<< "$title")
+ title=$(sed -E 's/^Discord[[:space:]]*\|[[:space:]]*//' <<< "$title")
+ fi
+
+ # Truncate title
+ if (( ${#title} > MAX_TITLE_LEN )); then
+ title="${title:0:$((MAX_TITLE_LEN-3))}..."
+ fi
+
+ esc_top=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$class")
+ esc_bottom=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$title")
+
+ text="<span size='7500' foreground='#a6adc8' rise='-2000'>$esc_top</span>
+<span size='9000' weight='bold' foreground='#ffffff'>$esc_bottom</span>"
+
+ tooltip="$class: $title"
+
+ jq -nc \
+ --arg text "$text" \
+ --arg tooltip "$tooltip" \
+ '{ text: $text, class: "custom-window", tooltip: $tooltip }'
+}
+
+# Initial output
+print_status
+
+last=""
+
+# Update only when state changes
+while true; do
+ current_window=$(hyprctl activewindow -j 2>/dev/null)
+ current_ws=$(hyprctl activeworkspace -j 2>/dev/null)
+
+ current="$current_window$current_ws"
+
+ if [[ "$current" != "$last" ]]; then
+ print_status
+ last="$current"
+ fi
+
+ sleep 0.5
+done
diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc
new file mode 100755
index 0000000..6907e47
--- /dev/null
+++ b/config/waybar/config.jsonc
@@ -0,0 +1,107 @@
+{
+ "position": "top",
+// "output": "HDMI-A-1",
+ "layer": "top",
+ "modules-left": [
+// "custom/distro",
+ "niri/workspaces",
+ "niri/window"
+ ],
+ "modules-center": [
+ ],
+ "modules-right": [
+ "network",
+ "pulseaudio",
+ "clock"
+ ],
+ "pulseaudio": {
+ "tooltip": false,
+ "scroll-step": 5,
+ "format": " {volume}%",
+ "format-muted": "muted",
+ "format-icons": {
+ "default": [
+ "",
+ "",
+ ""
+ ]
+ }
+ },
+ "privacy": {
+ "icon-spacing": 10,
+ "icon-size": 18,
+ "transition-duration": 250,
+ "tooltip": false,
+ "modules": [
+ {
+ "type": "screenshare",
+ "tooltip": true,
+ "tooltip-icon-size": 24
+ },
+ {
+ "type": "audio-out",
+ "tooltip": true,
+ "tooltip-icon-size": 24
+ },
+ {
+ "type": "audio-in",
+ "tooltip": true,
+ "tooltip-icon-size": 24
+ }
+ ]
+ },
+ "custom/distro": {
+ "format": "󱄅",
+ "on-click": "sh -c 'rofi -show drun -config ~/.config/rofi/gruvbox.rasi'",
+ "tooltip": false
+ },
+ "bluetooth": {
+ "format": " {status}",
+ "format-connected": " CONN",
+ "tooltip": true,
+ "on-click": "footclient -e bluetoothctl",
+ "tooltip-format-connected": "{device_alias}"
+ },
+ "clock": {
+ "format": "󰥔 {:%I:%M %p}",
+ "tooltip": true,
+ "tooltip-format": "{:%a, %b %d, :%I:%M:%S %p}"
+ },
+ "niri/workspaces": {
+ "format": "●",
+ "active-format": "{icon} ●",
+ "window-icons": true,
+ "icon-size": 20
+ },
+ "niri/window": {
+ "icon": false,
+ "icon-size": 20
+ },
+ "niri/mode": {
+ "format": "<span style=\"italic\">{}</span>"
+ },
+ "network": {
+ // "interface": "wlo1",
+ "interface": "eno1",
+ "format-wifi": "󰖩 {essid}",
+ "format-ethernet": "󰛳 {ipaddr}/{cidr}",
+ "format-disconnected": "󱚼 disconnected",
+ "tooltip": true,
+ "tooltip-format": "Click to copy",
+ "max-length": 50,
+ "on-click": "sh -c 'ip addr show eno1 | grep \"inet \" | awk \"{print \\$2}\" | sed \"s#/.*##\" | wl-copy'"
+ },
+ "battery": {
+ "format": "BAT {capacity}%",
+ "interval": 10,
+ "states": {
+ "warning": 20,
+ "critical": 10
+ },
+ "format-time": "{H}:{m}",
+ "format-charging": "BAT {capacity}%",
+ "format-discharging": "BAT {capacity}%",
+ "tooltip-format": "{power}W, {cycles} cycles"
+ }
+}
+
diff --git a/config/waybar/style.css b/config/waybar/style.css
new file mode 100755
index 0000000..601dd6d
--- /dev/null
+++ b/config/waybar/style.css
@@ -0,0 +1,82 @@
+@define-color border #211e1e;
+@define-color background #111111;
+@define-color surface0 #151111;
+@define-color overlay0 #161515;
+@define-color text #e0def4;
+@define-color text_dim #6e6a86;
+@define-color blue #31748f;
+@define-color green #9ccfd8;
+@define-color yellow #f6c177;
+@define-color peach #ebbcba;
+@define-color maroon #e79591;
+@define-color lavender #c4a7e7;
+@define-color pink #eb6f92;
+@define-color teal #9ccfd8;
+@define-color grey #6e6a86;
+
+* {
+ border: none;
+ font-family: "JetBrainsMono Nerd Font";
+ font-size: 15px;
+ min-height: 10px;
+}
+
+window#waybar {
+ background: transparent;
+}
+
+#disk,
+#pulseaudio,
+#window,
+#clock,
+#network,
+#battery,
+#privacy,
+#memory,
+#cpu,
+#workspaces,
+#tray,
+#bluetooth,
+#tray menu {
+ margin-top: 0;
+ padding: 5px 10px;
+ margin: 3px 0 13px 10px;
+ background: @surface0;
+ color: @peach;
+ transition: 0.3s;
+ border: 1.5px solid @border;
+ border-radius: 8px;
+}
+
+#window { transition: none; }
+
+window#waybar.empty #window {
+ background: transparent;
+ box-shadow: none;
+ border: none;
+}
+
+#network { color: @peach; }
+#clock { margin-right: 12px; color: @peach; }
+#pulseaudio { color: @peach; }
+
+#workspaces {
+ margin-left: 12px;
+ color: @peach;
+}
+
+#workspaces button {
+ margin: 0;
+ padding: 1px 3px;
+ color: @peach;
+ transition: none;
+}
+
+#workspaces button.empty { color: @peach; }
+#workspaces button.active { color: @maroon; }
+#workspaces button.urgent { color: @peach; }
+
+#workspaces button:hover {
+ background: @overlay0;
+ color: @peach;
+}
diff --git a/config/wofi/config b/config/wofi/config
new file mode 100755
index 0000000..0f7e7ba
--- /dev/null
+++ b/config/wofi/config
@@ -0,0 +1,32 @@
+# mode & placement
+show=drun
+location=top
+width=700
+lines=8
+columns=2
+dynamic_lines=false
+
+# icons
+allow_images=true
+image_size=36
+
+# search & UX
+matching=fuzzy
+insensitive=true
+hide_scroll=false
+prompt=
+
+# terminal
+term=foot
+
+# keybinds (vim-ish)
+key_up=Ctrl-k
+key_down=Ctrl-j
+key_left=Ctrl-h
+key_right=Ctrl-l
+key_submit=Return
+key_forward=Tab
+key_backward=Shift-ISO_Left_Tab
+
+# stylesheet
+style=/home/tony/.config/wofi/style.css
diff --git a/config/wofi/style.css b/config/wofi/style.css
new file mode 100755
index 0000000..4ee72bd
--- /dev/null
+++ b/config/wofi/style.css
@@ -0,0 +1,59 @@
+* {
+ font-family: "UbuntuMono", monospace;
+ font-size: 16px;
+ font-weight: bold;
+}
+
+window {
+ margin: 0px;
+ border: 2px solid #7f7f7f; /* Bright grey */
+ border-radius: 5px;
+ background-color: #1c1c1c; /* Dark grey */
+ font-family: monospace;
+ font-size: 12px;
+}
+
+#input {
+ margin: 5px;
+ border: 1px solid #1c1c1c; /* Dark grey */
+ color: #d3d3d3; /* Light grey */
+ background-color: #1c1c1c; /* Dark grey */
+}
+
+#input image {
+ color: #d3d3d3; /* Light grey */
+}
+
+#inner-box {
+ margin: 5px;
+ border: none;
+ background-color: #1c1c1c; /* Dark grey */
+}
+
+#outer-box {
+ margin: 5px;
+ border: none;
+ background-color: #1c1c1c; /* Dark grey */
+}
+
+#scroll {
+ margin: 0px;
+ border: none;
+}
+
+#text {
+ margin: 5px;
+ border: none;
+ color: #d3d3d3; /* Light grey */
+}
+
+#entry:selected {
+ background-color: #7f7f7f; /* Bright grey */
+ font-weight: normal;
+}
+
+#text:selected {
+ background-color: #7f7f7f; /* Bright grey */
+ font-weight: normal;
+}
+
diff --git a/config/xmobar/xmobarrc b/config/xmobar/xmobarrc
new file mode 100755
index 0000000..8d75d19
--- /dev/null
+++ b/config/xmobar/xmobarrc
@@ -0,0 +1,13 @@
+Config {
+ font = "xft:JetBrainsMono Nerd Font-12",
+ bgColor = "#282828",
+ fgColor = "#EBDBB2",
+ position = TopSize L 100 30,
+ commands = [
+ Run XMonadLog,
+ Run Date "TIME %I:%M %p" "date" 10,
+ Run Com "sh" ["-c", "ip -4 addr show | grep inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d/ -f1 | head -n1"] "localip" 50
+ ],
+ alignSep = "}{",
+ template = " %XMonadLog%}{ NET %localip% : %date% "
+ }
diff --git a/config/xmonad/xmonad.hs b/config/xmonad/xmonad.hs
new file mode 100755
index 0000000..efec589
--- /dev/null
+++ b/config/xmonad/xmonad.hs
@@ -0,0 +1,51 @@
+import XMonad
+import XMonad.Util.EZConfig (additionalKeysP)
+import XMonad.Util.Run
+import XMonad.Hooks.DynamicLog
+import XMonad.Hooks.StatusBar
+import XMonad.Hooks.ManageDocks
+import XMonad.Layout.Spacing
+import System.IO
+
+keybinds =
+ [
+ ("M-<Return>", spawn "alacritty"),
+ ("M-r", spawn "rofi -show drun -config ~/.config/rofi/gruvbox.rasi"),
+ ("M-S-s", spawn "flameshot gui"),
+ ("M-s", kill)
+ ]
+
+cLayoutHook = avoidStruts $ spacing 5 $ layoutHook def
+
+cXMobarPP :: PP
+cXMobarPP = def
+ {
+ ppCurrent = xmobarColor "#83A598" "" ,
+ ppHidden = xmobarColor "#EBDBB2" "",
+ ppHiddenNoWindows = xmobarColor "#EBDBB2" "",
+ ppTitle = xmobarColor "#EBDBB2" "" . shorten 60 . wrap "[" "]",
+ ppLayout = \layout -> ""
+ }
+
+cXStatusBar = statusBarProp "xmobar" (pure cXMobarPP)
+
+logHook = dynamicLogWithPP $ def
+ { ppOutput = \s -> return (),
+ ppCurrent = id,
+ ppVisible = id,
+ ppHidden = id,
+ ppUrgent = id,
+ ppTitle = id
+ }
+
+main = xmonad . withSB (statusBarProp "xmobar -f 'xft:JetBrainsMono Nerd Font-14'" (pure cXMobarPP)) $ withEasySB cXStatusBar defToggleStrutsKey $ def
+ {
+ modMask = mod4Mask,
+ terminal = "alacritty",
+ borderWidth = 2,
+ normalBorderColor = "#282828",
+ focusedBorderColor = "#383838",
+ workspaces = map show [1..9],
+ layoutHook = cLayoutHook
+ }
+ `additionalKeysP` keybinds