commit 5959a0325c9fb0736896ebf27b4c45931923dc38 Author: Adam <24621027+adoyle0@users.noreply.github.com> Date: Fri Feb 3 04:08:44 2023 -0500 yo diff --git a/.bash_profile b/.bash_profile new file mode 100644 index 0000000..759eaf9 --- /dev/null +++ b/.bash_profile @@ -0,0 +1,118 @@ +#!/bin/zsh + +export PATH="$PATH:$(du "$HOME/.local/bin" | cut -f2 | paste -sd ':' -)" + +unsetopt PROMPT_SP + +# Default programs: +export EDITOR="nvim" +export TERMINAL="kitty" +export BROWSER="firefox-developer-edition" + +# Move config files out of home and into .config/ +export XINITRC="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xinitrc" +export GTK2_RC_FILES="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-2.0/gtkrc-2.0" +export LESSHISTFILE="-" +export INPUTRC="${XDG_CONFIG_HOME:-$HOME/.config}/shell/inputrc" +export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh" +export KODI_DATA="${XDG_DATA_HOME:-$HOME/.local/share}/kodi" +export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store" +export TMUX_TMPDIR="$XDG_RUNTIME_DIR" +export ANDROID_SDK_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android" +export CARGO_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/cargo" +export GOPATH="${XDG_DATA_HOME:-$HOME/.local/share}/go" +export HISTFILE="${XDG_DATA_HOME:-$HOME/.local/share}/history" + +# Other program settings: +export FZF_DEFAULT_OPTS="--layout=reverse --height 40%" +export LESS=-R +export LESS_TERMCAP_mb="$(printf '%b' '')" +export LESS_TERMCAP_md="$(printf '%b' '')" +export LESS_TERMCAP_me="$(printf '%b' '')" +export LESS_TERMCAP_so="$(printf '%b' '')" +export LESS_TERMCAP_se="$(printf '%b' '')" +export LESS_TERMCAP_us="$(printf '%b' '')" +export LESS_TERMCAP_ue="$(printf '%b' '')" +export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null" +export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme. + +# This is the list for lf icons: +export LF_ICONS="di=📁:\ +fi=📃:\ +tw=🤝:\ +ow=📂:\ +ln=⛓:\ +or=❌:\ +ex=🎯:\ +*.txt=✍:\ +*.mom=✍:\ +*.me=✍:\ +*.ms=✍:\ +*.png=🖼:\ +*.webp=🖼:\ +*.ico=🖼:\ +*.jpg=📸:\ +*.jpe=📸:\ +*.jpeg=📸:\ +*.gif=🖼:\ +*.svg=🗺:\ +*.tif=🖼:\ +*.tiff=🖼:\ +*.xcf=🖌:\ +*.html=🌎:\ +*.xml=📰:\ +*.gpg=🔒:\ +*.css=🎨:\ +*.pdf=📚:\ +*.djvu=📚:\ +*.epub=📚:\ +*.csv=📓:\ +*.xlsx=📓:\ +*.tex=📜:\ +*.md=📘:\ +*.r=📊:\ +*.R=📊:\ +*.rmd=📊:\ +*.Rmd=📊:\ +*.m=📊:\ +*.mp3=🎵:\ +*.opus=🎵:\ +*.ogg=🎵:\ +*.m4a=🎵:\ +*.flac=🎼:\ +*.wav=🎼:\ +*.mkv=🎥:\ +*.mp4=🎥:\ +*.webm=🎥:\ +*.mpeg=🎥:\ +*.avi=🎥:\ +*.mov=🎥:\ +*.mpg=🎥:\ +*.wmv=🎥:\ +*.m4b=🎥:\ +*.flv=🎥:\ +*.zip=📦:\ +*.rar=📦:\ +*.7z=📦:\ +*.tar.gz=📦:\ +*.z64=🎮:\ +*.v64=🎮:\ +*.n64=🎮:\ +*.gba=🎮:\ +*.nes=🎮:\ +*.gdi=🎮:\ +*.1=ℹ:\ +*.nfo=ℹ:\ +*.info=ℹ:\ +*.log=📙:\ +*.iso=📀:\ +*.img=📀:\ +*.bib=🎓:\ +*.ged=👪:\ +*.part=💔:\ +*.torrent=🔽:\ +*.jar=♨:\ +*.java=♨:\ +" + +[ ! -f ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc ] && shortcuts >/dev/null 2>&1 & diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..410bbc1 --- /dev/null +++ b/.bashrc @@ -0,0 +1,23 @@ +stty -ixon +shopt -s autocd +HISTSIZE= HISTFILESIZE= + +# Set Bash prompt. Capitalize username and host if root user +if [ "$EUID" -ne 0 ] + then export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]" + else export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]ROOT\[$(tput setaf 2)\]@\[$(tput setaf 4)\]$(hostname | awk '{print toupper($0)}') \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]" +fi + +export GPG_TTY=$(tty) + +alias x="exit" +alias push="rsync -avzP " +alias ka="killall" +alias rf="source ~/.bashrc" +alias bb="byobu" +alias starwars="telnet towel.blinkenlights.nl" + +# Adding color +alias ls='ls -hN --color=auto --group-directories-first' +alias crep="grep --color=always" # Color grep - highlight desired sequence. +alias ccat="highlight --out-format=xterm256" # Color cat - print file with syntax highlighting. diff --git a/.byobu/.tmux.conf b/.byobu/.tmux.conf new file mode 100644 index 0000000..207d7e8 --- /dev/null +++ b/.byobu/.tmux.conf @@ -0,0 +1 @@ +set -g mouse on diff --git a/.config/awesome/awesome-wm-widgets b/.config/awesome/awesome-wm-widgets new file mode 160000 index 0000000..ef70d16 --- /dev/null +++ b/.config/awesome/awesome-wm-widgets @@ -0,0 +1 @@ +Subproject commit ef70d16c43c2f566a4fe2955b8d6c08f6c185af8 diff --git a/.config/awesome/binds/client.lua b/.config/awesome/binds/client.lua new file mode 100644 index 0000000..1c516ec --- /dev/null +++ b/.config/awesome/binds/client.lua @@ -0,0 +1,21 @@ +-- Keys that affect the current window +clientkeys = Gears.table.join( + Awful.key({ Modkey, }, "f", function (c) c.fullscreen = not c.fullscreen c:raise() end, + {description = "toggle fullscreen", group = "client"}), + Awful.key({ Modkey, }, "q", function (c) c:kill() end, + {description = "close", group = "client"}), + Awful.key({ Modkey, }, "o", function (c) c:move_to_screen() end, + {description = "move to screen", group = "client"}), + Awful.key({ Modkey, }, "t", function (c) c.ontop = not c.ontop end, + {description = "toggle keep on top", group = "client"}), + Awful.key({ Modkey, "Shift" }, "n", function (c) c.maximized = not c.maximized c:raise() end, + {description = "(un)maximize", group = "client"}), + Awful.key({ Modkey, "Control" }, "space", Awful.client.floating.toggle , + {description = "toggle floating", group = "client"}), + Awful.key({ Modkey, "Control" }, "Return", function (c) c:swap(Awful.client.getmaster()) end, + {description = "move to master", group = "client"}), + Awful.key({ Modkey, }, "j", function () Awful.client.focus.byidx( 1) end, + {description = "focus next by index", group = "client"}), + Awful.key({ Modkey, }, "k", function () Awful.client.focus.byidx(-1) end, + {description = "focus previous by index", group = "client"}) +) diff --git a/.config/awesome/binds/global.lua b/.config/awesome/binds/global.lua new file mode 100644 index 0000000..597d011 --- /dev/null +++ b/.config/awesome/binds/global.lua @@ -0,0 +1,67 @@ +globalkeys = Gears.table.join( + Awful.key({ }, "Print", function() os.execute("maimpick") end, + {description = "run screenshot script", group="awesome"}), + Awful.key({ Modkey, }, "F1", Hotkeys_popup.show_help , + {description = "show help", group="awesome"}), + Awful.key({ Modkey, }, "l", function () Awful.screen.focus_relative( 1) end, + {description = "focus next screen", group = "screen"}), + Awful.key({ Modkey, }, "h", function () Awful.screen.focus_relative(-1) end, + {description = "focus previous screen", group = "screen"}), + Awful.key({ Modkey, }, "w", function () Awful.spawn(Browser) end, + {description = "open firefox", group = "launcher"}), + Awful.key({ Modkey, "Shift" }, "w", function () Awful.spawn(Browser2) end, + {description = "open brave", group = "launcher"}), + Awful.key({ Modkey, }, "e", function () Awful.spawn(Editor_cmd) end, + {description = "open editor", group = "launcher"}), + Awful.key({ Modkey, "Shift" }, "e", function () Awful.spawn("thunderbird") end, + {description = "open thunderbird", group = "launcher"}), + Awful.key({ Modkey, }, "m", function () Awful.spawn(Music) end, + {description = "open spotify", group = "launcher"}), + Awful.key({ Modkey, }, "d", function () Awful.spawn("discord --enable-gpu-rasterization") end, + {description = "open discord", group = "launcher"}), + Awful.key({ Modkey, }, "c", function () Awful.spawn("caprine") end, + {description = "open caprine", group = "launcher"}), + Awful.key({ Modkey, "Shift" }, "c", function () Awful.spawn("telegram-desktop") end, + {description = "open telegram-desktop", group = "launcher"}), + Awful.key({ Modkey, }, "g", function () Awful.spawn("godot") end, + {description = "open godot", group = "launcher"}), + Awful.key({ Modkey, "Shift" }, "g", function () Awful.spawn("steam-native") end, + {description = "open steam", group = "launcher"}), + Awful.key({ Modkey, }, "Return", function () Awful.spawn(Terminal) end, + {description = "open a terminal", group = "launcher"}), + Awful.key({ Modkey, }, "BackSpace", awesome.restart , + {description = "reload awesome", group = "awesome"}), + Awful.key({ Modkey, "Shift" }, "Escape", awesome.quit , + {description = "quit awesome", group = "awesome"}), + Awful.key({ Modkey, }, "v", function () Awful.spawn("virt-manager") end, + {description = "open virt-manager", group = "launcher"}), + Awful.key({ Modkey, "Shift" }, "k", function () Awful.tag.incmwfact( 0.05) end, + {description = "resize split +", group = "layout"}), + Awful.key({ Modkey, "Shift" }, "j", function () Awful.tag.incmwfact(-0.05) end, + {description = "resize split -", group = "layout"}), + Awful.key({ Modkey, }, "space", function () Awful.layout.inc( 1) end, + {description = "select next", group = "layout"}), + Awful.key({ Modkey, "Shift" }, "space", function () Awful.layout.inc(-1) end, + {description = "select previous", group = "layout"}), + Awful.key({ Modkey, }, "r", function () Awful.screen.focused().mypromptbox:run() end, + {description = "run prompt", group = "launcher"}), + + -- Media + Awful.key({}, "XF86AudioPlay", function() os.execute("playerctl play-pause") end), + Awful.key({}, "XF86AudioStop", function() os.execute("playerctl stop") end), + Awful.key({}, "XF86AudioNext", function() os.execute("playerctl next") end), + Awful.key({}, "XF86AudioPrev", function() os.execute("playerctl previous") end), + Awful.key({}, "XF86AudioRaiseVolume", function() os.execute("pamixer -i 3") end), + Awful.key({}, "XF86AudioLowerVolume", function() os.execute("pamixer -d 3") end), + Awful.key({}, "XF86AudioMute", function() os.execute("pamixer -t") end), + Awful.key({}, "XF86AudioMicMute", function() os.execute("pactl set-source-mute @DEFAULT_SOURCE@ toggle") end), + + Awful.key({ Modkey, }, "Tab", + function () + Awful.client.focus.history.previous() + if client.focus then + client.focus:raise() + end + end, + {description = "go back", group = "client"}) +) diff --git a/.config/awesome/binds/init.lua b/.config/awesome/binds/init.lua new file mode 100644 index 0000000..7eaa7dc --- /dev/null +++ b/.config/awesome/binds/init.lua @@ -0,0 +1,74 @@ +require('binds.global') +require('binds.client') + +-- Mouse +root.buttons(Gears.table.join( + Awful.button({ }, 4, Awful.tag.viewnext), + Awful.button({ }, 5, Awful.tag.viewprev) +)) +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it work on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, 9 do + globalkeys = Gears.table.join(globalkeys, + -- View tag only. + Awful.key({ Modkey }, "#" .. i + 9, + function () + local screen = Awful.screen.focused() + local tag = screen.tags[i] + if tag then + tag:view_only() + end + end, + {description = "view tag #"..i, group = "tag"}), + -- Toggle tag display. + Awful.key({ Modkey, "Control" }, "#" .. i + 9, + function () + local screen = Awful.screen.focused() + local tag = screen.tags[i] + if tag then + Awful.tag.viewtoggle(tag) + end + end, + {description = "toggle tag #" .. i, group = "tag"}), + -- Move client to tag. + Awful.key({ Modkey, "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:move_to_tag(tag) + end + end + end, + {description = "move focused client to tag #"..i, group = "tag"}), + -- Toggle tag on focused client. + Awful.key({ Modkey, "Control", "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:toggle_tag(tag) + end + end + end, + {description = "toggle focused client on tag #" .. i, group = "tag"}) + ) +end + +clientbuttons = Gears.table.join( + Awful.button({ }, 1, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + end), + Awful.button({ Modkey }, 1, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + Awful.mouse.client.move(c) + end), + Awful.button({ Modkey }, 3, function (c) + c:emit_signal("request::activate", "mouse_click", {raise = true}) + Awful.mouse.client.resize(c) + end) +) + +-- Set keys +root.keys(globalkeys) diff --git a/.config/awesome/core/init.lua b/.config/awesome/core/init.lua new file mode 100644 index 0000000..3fc36c1 --- /dev/null +++ b/.config/awesome/core/init.lua @@ -0,0 +1,31 @@ +if awesome.startup_errors then + Naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors }) +end + +-- Handle runtime errors after startup +do + local in_error = false + awesome.connect_signal("debug::error", function (err) + -- Make sure we don't go into an endless error loop + if in_error then return end + in_error = true + + Naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = tostring(err) }) + in_error = false + end) +end + +require("awful.autofocus") +require("awful.hotkeys_popup.keys") + +Gears = require("gears") +Awful = require("awful") +Wibox = require("wibox") +Beautiful = require("beautiful") +Naughty = require("naughty") +Menubar = require("menubar") +Hotkeys_popup = require("awful.hotkeys_popup") diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua new file mode 100644 index 0000000..24a0ce4 --- /dev/null +++ b/.config/awesome/rc.lua @@ -0,0 +1,27 @@ +require('core') + +Terminal = "kitty" +Editor = "nvim" +Editor_cmd = Terminal .. " -e " .. Editor +Browser = "firefox-developer-edition" +Browser2 = "brave-nightly" +Music = "spotify-launcher" +Modkey = "Mod4" + +Beautiful.init(".config/awesome/theme.lua") + +Awful.layout.layouts = { + Awful.layout.suit.tile.right, + Awful.layout.suit.tile.top, + Awful.layout.suit.tile.left, + Awful.layout.suit.tile.bottom, +} + +Menubar.utils.terminal = Terminal -- Set the terminal for applications that require it + +require('wibar') +require('binds') +require('rules') +require('signals') + +Gears.timer.start_new(10, function() collectgarbage("step", 20000) return true end) diff --git a/.config/awesome/rules/init.lua b/.config/awesome/rules/init.lua new file mode 100644 index 0000000..29e35a2 --- /dev/null +++ b/.config/awesome/rules/init.lua @@ -0,0 +1,50 @@ +Awful.rules.rules = { + -- All clients will match this rule. + { rule = { }, + properties = { border_width = Beautiful.border_width, + border_color = Beautiful.border_normal, + focus = Awful.client.focus.filter, + raise = true, + keys = clientkeys, + buttons = clientbuttons, + screen = Awful.screen.preferred, + placement = Awful.placement.no_overlap+Awful.placement.no_offscreen + } + }, + + -- Floating clients. + { rule_any = { + instance = { + "DTA", -- Firefox addon DownThemAll. + "copyq", -- Includes session name in class. + "pinentry", + }, + class = { + "Arandr", + "Blueman-manager", + "Gpick", + "Kruler", + "MessageWin", -- kalarm. + "Sxiv", + "Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size. + "Wpa_gui", + "veromix", + "xtightvncviewer"}, + + -- Note that the name property shown in xprop might be set slightly after creation of the client + -- and the name shown there might not match defined rules here. + name = { + "Event Tester", -- xev. + }, + role = { + "AlarmWindow", -- Thunderbird's calendar. + "ConfigManager", -- Thunderbird's about:config. + "pop-up", -- e.g. Google Chrome's (detached) Developer Tools. + } + }, properties = { floating = true }}, + + -- Add titlebars to normal clients and dialogs + { rule_any = {type = { "normal", "dialog" } + }, properties = { titlebars_enabled = false } + }, +} diff --git a/.config/awesome/signals/init.lua b/.config/awesome/signals/init.lua new file mode 100644 index 0000000..29cf127 --- /dev/null +++ b/.config/awesome/signals/init.lua @@ -0,0 +1,60 @@ +client.connect_signal("manage", function (c) + -- Set the windows at the slave, + -- i.e. put it at the end of others instead of setting it master. + -- if not awesome.startup then awful.client.setslave(c) end + + if awesome.startup + and not c.size_hints.user_position + and not c.size_hints.program_position then + -- Prevent clients from being unreachable after screen count changes. + Awful.placement.no_offscreen(c) + end +end) + +-- Add a titlebar if titlebars_enabled is set to true in the rules. +client.connect_signal("request::titlebars", function(c) + -- buttons for the titlebar + local buttons = Gears.table.join( + Awful.button({ }, 1, function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + Awful.mouse.client.move(c) + end), + Awful.button({ }, 3, function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + Awful.mouse.client.resize(c) + end) + ) + + Awful.titlebar(c) : setup { + { -- Left + Awful.titlebar.widget.iconwidget(c), + buttons = buttons, + layout = Wibox.layout.fixed.horizontal + }, + { -- Middle + { -- Title + align = "center", + widget = Awful.titlebar.widget.titlewidget(c) + }, + buttons = buttons, + layout = Wibox.layout.flex.horizontal + }, + { -- Right + Awful.titlebar.widget.floatingbutton (c), + Awful.titlebar.widget.maximizedbutton(c), + Awful.titlebar.widget.stickybutton (c), + Awful.titlebar.widget.ontopbutton (c), + Awful.titlebar.widget.closebutton (c), + layout = Wibox.layout.fixed.horizontal() + }, + layout = Wibox.layout.align.horizontal + } +end) + +-- Enable sloppy focus, so that focus follows mouse. +client.connect_signal("mouse::enter", function(c) + c:emit_signal("request::activate", "mouse_enter", {raise = false}) +end) + +client.connect_signal("focus", function(c) c.border_color = Beautiful.border_focus end) +client.connect_signal("unfocus", function(c) c.border_color = Beautiful.border_normal end) diff --git a/.config/awesome/theme.lua b/.config/awesome/theme.lua new file mode 100644 index 0000000..0c86468 --- /dev/null +++ b/.config/awesome/theme.lua @@ -0,0 +1,69 @@ +local theme_assets = require("beautiful.theme_assets") +local xresources = require("beautiful.xresources") +local dpi = xresources.apply_dpi +local xrdb = xresources.get_current_theme() + +local gfs = require("gears.filesystem") +local themes_path = gfs.get_themes_dir() + +local theme = {} + +theme.font = "monospace 11" +theme.wallpaper = '.cache/wal/bg' + +theme.useless_gap = dpi(0) +theme.border_width = dpi(1) + +theme.menu_height = dpi(15) +theme.menu_width = dpi(100) + +-- Colors +theme.bg_normal = xrdb.background +theme.bg_focus = xrdb.color4 +theme.bg_urgent = xrdb.color1 +theme.bg_minimize = xrdb.color4 +theme.bg_systray = theme.bg_normal + +theme.fg_normal = xrdb.foreground +theme.fg_focus = xrdb.foreground +theme.fg_urgent = xrdb.foreground +theme.fg_minimize = xrdb.foreground + +theme.border_normal = xrdb.color5 +theme.border_focus = xrdb.color4 +theme.border_marked = xrdb.color10 + +-- Generate taglist squares: +local taglist_square_size = dpi(4) +theme.taglist_squares_sel = theme_assets.taglist_squares_sel( + taglist_square_size, theme.fg_normal +) +theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( + taglist_square_size, theme.fg_normal +) + +-- You can use your own layout icons like this: +theme.layout_fairh = themes_path.."default/layouts/fairhw.png" +theme.layout_fairv = themes_path.."default/layouts/fairvw.png" +theme.layout_floating = themes_path.."default/layouts/floatingw.png" +theme.layout_magnifier = themes_path.."default/layouts/magnifierw.png" +theme.layout_max = themes_path.."default/layouts/maxw.png" +theme.layout_fullscreen = themes_path.."default/layouts/fullscreenw.png" +theme.layout_tilebottom = themes_path.."default/layouts/tilebottomw.png" +theme.layout_tileleft = themes_path.."default/layouts/tileleftw.png" +theme.layout_tile = themes_path.."default/layouts/tilew.png" +theme.layout_tiletop = themes_path.."default/layouts/tiletopw.png" +theme.layout_spiral = themes_path.."default/layouts/spiralw.png" +theme.layout_dwindle = themes_path.."default/layouts/dwindlew.png" +theme.layout_cornernw = themes_path.."default/layouts/cornernww.png" +theme.layout_cornerne = themes_path.."default/layouts/cornernew.png" +theme.layout_cornersw = themes_path.."default/layouts/cornersww.png" +theme.layout_cornerse = themes_path.."default/layouts/cornersew.png" + +-- Define the icon theme for application icons. If not set then the icons +-- from /usr/share/icons and /usr/share/icons/hicolor will be used. +theme.icon_theme = nil + +return theme + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80 diff --git a/.config/awesome/wibar/init.lua b/.config/awesome/wibar/init.lua new file mode 100644 index 0000000..36c7d01 --- /dev/null +++ b/.config/awesome/wibar/init.lua @@ -0,0 +1,76 @@ +require('wibar.widgets') +require('wibar.taglist') +require('wibar.tasklist') + +local function set_wallpaper(s) + -- Wallpaper + if Beautiful.wallpaper then + local wallpaper = Beautiful.wallpaper + -- If wallpaper is a function, call it with the screen + if type(wallpaper) == "function" then + wallpaper = wallpaper(s) + end + Gears.wallpaper.maximized(wallpaper, s, true) + end +end + +-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) +screen.connect_signal("property::geometry", set_wallpaper) + +Awful.screen.connect_for_each_screen(function(s) + -- set_wallpaper(s) + + -- Each screen has its own tag table. + Awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, Awful.layout.layouts[1]) + + -- Create a promptbox for each screen + s.mypromptbox = Awful.widget.prompt() + -- Create an imagebox widget which will contain an icon indicating which layout we're using. + -- We need one layoutbox per screen. + s.mylayoutbox = Awful.widget.layoutbox(s) + s.mylayoutbox:buttons(Gears.table.join( + Awful.button({ }, 3, function () Awful.layout.inc(-1) end), + Awful.button({ }, 4, function () Awful.layout.inc( 1) end), + Awful.button({ }, 5, function () Awful.layout.inc(-1) end))) + -- Create a taglist widget + s.mytaglist = Awful.widget.taglist { + screen = s, + filter = Awful.widget.taglist.filter.all, + buttons = Taglist_buttons + } + + -- Create a tasklist widget + s.mytasklist = Awful.widget.tasklist { + screen = s, + filter = Awful.widget.tasklist.filter.currenttags, + buttons = Tasklist_buttons + } + + -- Create the Wibox + s.myWibox = Awful.wibar({ position = "top", screen = s }) + + -- Add widgets to the Wibox + s.myWibox:setup { + layout = Wibox.layout.align.horizontal, + { -- Left widgets + layout = Wibox.layout.fixed.horizontal, + --mylauncher, + s.mytaglist, + s.mypromptbox, + }, + + s.mytasklist, -- Middle widget + + { -- Right widgets + layout = Wibox.layout.fixed.horizontal, + Cpu_widget(), + Ram_widget(), + Batteryarc_widget({enable_battery_warning = false}), + Wibox.widget.systray(), + Mytextclock, + s.mylayoutbox, + }, + } +end) + +os.execute('nitrogen --set-zoom-fill $(awk {print} ~/.cache/wal/wal)') diff --git a/.config/awesome/wibar/taglist.lua b/.config/awesome/wibar/taglist.lua new file mode 100644 index 0000000..1b22e1f --- /dev/null +++ b/.config/awesome/wibar/taglist.lua @@ -0,0 +1,16 @@ +Taglist_buttons = Gears.table.join( + Awful.button({ }, 1, function(t) t:view_only() end), + Awful.button({ Modkey }, 1, function(t) + if client.focus then + client.focus:move_to_tag(t) + end + end), + Awful.button({ }, 3, Awful.tag.viewtoggle), + Awful.button({ Modkey }, 3, function(t) + if client.focus then + client.focus:toggle_tag(t) + end + end), + Awful.button({ }, 4, function(t) Awful.tag.viewnext(t.screen) end), + Awful.button({ }, 5, function(t) Awful.tag.viewprev(t.screen) end) + ) diff --git a/.config/awesome/wibar/tasklist.lua b/.config/awesome/wibar/tasklist.lua new file mode 100644 index 0000000..a21269c --- /dev/null +++ b/.config/awesome/wibar/tasklist.lua @@ -0,0 +1,21 @@ +Tasklist_buttons = Gears.table.join( + Awful.button({ }, 1, function (c) + if c == client.focus then + c.minimized = true + else + c:emit_signal( + "request::activate", + "tasklist", + {raise = true} + ) + end + end), + Awful.button({ }, 3, function() + Awful.menu.client_list({ theme = { width = 250 } }) + end), + Awful.button({ }, 4, function () + Awful.client.focus.byidx(1) + end), + Awful.button({ }, 5, function () + Awful.client.focus.byidx(-1) + end)) diff --git a/.config/awesome/wibar/widgets.lua b/.config/awesome/wibar/widgets.lua new file mode 100644 index 0000000..7c210e0 --- /dev/null +++ b/.config/awesome/wibar/widgets.lua @@ -0,0 +1,20 @@ +Calendar_widget = require("awesome-wm-widgets.calendar-widget.calendar") +Cpu_widget = require("awesome-wm-widgets.cpu-widget.cpu-widget") +Ram_widget = require("awesome-wm-widgets.ram-widget.ram-widget") +Batteryarc_widget = require("awesome-wm-widgets.batteryarc-widget.batteryarc") + +local cw = Calendar_widget({ + placement = 'top_right', + start_sunday = 'true', + previous_month_button = 4, + next_month_button = 5, +}) + +Mytextclock = Wibox.widget{ + format = ' %a %b %d, %I:%M%P ', + widget = Wibox.widget.textclock +} +Mytextclock:connect_signal("button::press", + function(_, _, _, button) + if button == 1 then cw.toggle() end + end) diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf new file mode 100644 index 0000000..1196a96 --- /dev/null +++ b/.config/kitty/kitty.conf @@ -0,0 +1,4 @@ +background_opacity 0.8 +font_size 11 +include ~/.cache/wal/colors-kitty.conf +enable_audio_bell no diff --git a/.config/lf/lfrc b/.config/lf/lfrc new file mode 100644 index 0000000..a22c9f4 --- /dev/null +++ b/.config/lf/lfrc @@ -0,0 +1,96 @@ +# Basic vars +set shellopts '-eu' +set ifs "\n" +set scrolloff 10 +set icons +set period 1 +set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml" + +# Previews +set previewer stpv +set cleaner stpvimgclr +&stpvimg --listen $id +cmd on-quit $stpvimg --end $id + +# cmds/functions +cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')" + +cmd extract ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + printf "%s\n\t" "$fx" + printf "extract?[y/N]" + read ans + [ $ans = "y" ] && aunpack $fx +}} + +cmd delete ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + printf "%s\n\t" "$fx" + printf "delete?[y/N]" + read ans + [ $ans = "y" ] && rm -rf -- $fx +}} + +cmd moveto ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + clear; echo "Move to where?" + dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" && + for x in $fx; do + eval mv -iv \"$x\" \"$dest\" + done && + notify-send "🚚 File(s) moved." "File(s) moved to $dest." +}} + +cmd copyto ${{ + clear; tput cup $(($(tput lines)/3)); tput bold + set -f + clear; echo "Copy to where?" + dest="$(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf | sed 's|~|$HOME|')" && + for x in $fx; do + eval cp -ivr \"$x\" \"$dest\" + done && + notify-send "📋 File(s) copied." "File(s) copies to $dest." +}} + +cmd setbg "$1" +cmd bulkrename $vidir + +# Bindings +map $lf -remote "send $id select '$(fzf)'" +map J $lf -remote "send $id cd $(sed -e 's/\s*#.*//' -e '/^$/d' -e 's/^\S*\s*//' ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs | fzf)" +map gh +map g top +map D delete +map E extract +map C copyto +map M moveto +map push :mkdir +map reload +map set hidden! +map shell +map x $$f +map X !$f +map o &mimeopen $f +map O $mimeopen --ask $f + +map A rename # at the very end +map c push A # new rename +map I push A # at the very beginning +map i push A # before extension +map a push A # after extension +map B bulkrename +map b $setbg $f + +map down +map up +map V push :!nvim + +map W $setsid -f $TERMINAL >/dev/null 2>&1 + +map Y $printf "%s" "$fx" | xclip -selection clipboard + +# Source Bookmarks +source "~/.config/lf/shortcutrc" diff --git a/.config/nvim/after/plugin/colors.lua b/.config/nvim/after/plugin/colors.lua new file mode 100644 index 0000000..56e5212 --- /dev/null +++ b/.config/nvim/after/plugin/colors.lua @@ -0,0 +1,7 @@ +function AddTransparency() + vim.api.nvim_set_hl(0, "Normal", { bg = "none" }) + vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" }) + +end + +AddTransparency() diff --git a/.config/nvim/after/plugin/fugitive.lua b/.config/nvim/after/plugin/fugitive.lua new file mode 100644 index 0000000..2873cef --- /dev/null +++ b/.config/nvim/after/plugin/fugitive.lua @@ -0,0 +1 @@ +vim.keymap.set('n', 'gs', vim.cmd.Git); diff --git a/.config/nvim/after/plugin/harpoon.lua b/.config/nvim/after/plugin/harpoon.lua new file mode 100644 index 0000000..5abda8b --- /dev/null +++ b/.config/nvim/after/plugin/harpoon.lua @@ -0,0 +1,10 @@ +local mark = require('harpoon.mark') +local ui = require('harpoon.ui') + +vim.keymap.set('n', 'a', mark.add_file) +vim.keymap.set('n', '', ui.toggle_quick_menu) + +vim.keymap.set('n', '', function() ui.nav_file(1) end) +vim.keymap.set('n', '', function() ui.nav_file(2) end) +vim.keymap.set('n', '', function() ui.nav_file(3) end) +vim.keymap.set('n', '', function() ui.nav_file(4) end) diff --git a/.config/nvim/after/plugin/lsp.lua b/.config/nvim/after/plugin/lsp.lua new file mode 100644 index 0000000..f7ad1da --- /dev/null +++ b/.config/nvim/after/plugin/lsp.lua @@ -0,0 +1,33 @@ +local lsp = require('lsp-zero') + +lsp.preset('recommended') + +local cmp = require('cmp') +local cmp_select = {behavior = cmp.SelectBehavior.Select} +local cmp_mappings = lsp.defaults.cmp_mappings({ + [''] = cmp.mapping.select_prev_item(cmp_select), + [''] = cmp.mapping.select_next_item(cmp_select), + [''] = cmp.mapping.confirm({ select = true }), + [''] = cmp.mapping.complete() +}) + +lsp.setup_nvim_cmp({ + mapping = cmp_mappings +}) + +lsp.on_attach(function(client, bufnr) + local opts = {buffer = bufnr, remap = false} + + vim.keymap.set('n', 'gd', function() vim.lsp.buf.definition() end, opts) + vim.keymap.set('n', 'K', function() vim.lsp.buf.hover() end, opts) + vim.keymap.set('n', 'vws', function() vim.lsp.buf.workspace_symbol() end, opts) + vim.keymap.set('n', 'vd', function() vim.diagnostic.open_float() end, opts) + vim.keymap.set('n', '[d', function() vim.diagnostic.goto_next() end, opts) + vim.keymap.set('n', ']d', function() vim.diagnostic.goto_prev() end, opts) + vim.keymap.set('n', 'vca', function() vim.lsp.buf.code_action() end, opts) + vim.keymap.set('n', 'vrr', function() vim.lsp.buf.references() end, opts) + vim.keymap.set('n', 'vrn', function() vim.lsp.buf.rename() end, opts) + vim.keymap.set('i', '', function() vim.lsp.buf.signature_help() end, opts) +end) + +lsp.setup() diff --git a/.config/nvim/after/plugin/mason.lua b/.config/nvim/after/plugin/mason.lua new file mode 100644 index 0000000..af77151 --- /dev/null +++ b/.config/nvim/after/plugin/mason.lua @@ -0,0 +1,9 @@ +require("mason").setup({ + ui = { + icons = { + package_installed = "✓", + package_pending = "➜", + package_uninstalled = "✗" + } + } +}) diff --git a/.config/nvim/after/plugin/telescope.lua b/.config/nvim/after/plugin/telescope.lua new file mode 100644 index 0000000..012e08c --- /dev/null +++ b/.config/nvim/after/plugin/telescope.lua @@ -0,0 +1,9 @@ +local builtin = require('telescope.builtin') +vim.keymap.set('n', 'pf', builtin.find_files, {}) +vim.keymap.set('n', '', builtin.git_files, {}) +vim.keymap.set('n', 'ps', function() + builtin.grep_string({ search = vim.fn.input("Grep > ") }); +end) +--vim.keymap.set('n', 'fg', builtin.live_grep, {}) +--vim.keymap.set('n', 'fb', builtin.buffers, {}) +--vim.keymap.set('n', 'fh', builtin.help_tags, {}) diff --git a/.config/nvim/after/plugin/treesitter.lua b/.config/nvim/after/plugin/treesitter.lua new file mode 100644 index 0000000..ad54390 --- /dev/null +++ b/.config/nvim/after/plugin/treesitter.lua @@ -0,0 +1,12 @@ +require'nvim-treesitter.configs'.setup { + ensure_installed = { "help", "javascript", "typescript", "python", "c", "lua", "rust" }, + sync_install = false, + auto_install = true, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, + indent = { + enable = true + }, +} diff --git a/.config/nvim/after/plugin/undotree.lua b/.config/nvim/after/plugin/undotree.lua new file mode 100644 index 0000000..a346462 --- /dev/null +++ b/.config/nvim/after/plugin/undotree.lua @@ -0,0 +1 @@ +vim.keymap.set('n', 'u', vim.cmd.UndotreeToggle) diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..3bf53fc --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,2 @@ +require('adam') +require('adam.set') diff --git a/.config/nvim/lua/adam/init.lua b/.config/nvim/lua/adam/init.lua new file mode 100644 index 0000000..9034e94 --- /dev/null +++ b/.config/nvim/lua/adam/init.lua @@ -0,0 +1,3 @@ +require('adam.set') +require('adam.remap') +require('adam.packer') diff --git a/.config/nvim/lua/adam/packer.lua b/.config/nvim/lua/adam/packer.lua new file mode 100644 index 0000000..a7c8d19 --- /dev/null +++ b/.config/nvim/lua/adam/packer.lua @@ -0,0 +1,49 @@ +-- This file can be loaded by calling `lua require('plugins')` from your init.vim + +-- Only required if you have packer configured as `opt` +vim.cmd [[packadd packer.nvim]] + +return require('packer').startup(function(use) + -- Packer can manage itself + use 'wbthomason/packer.nvim' + + -- Telescope + use { + 'nvim-telescope/telescope.nvim', tag = '0.1.0', + -- or , branch = '0.1.x', + requires = { {'nvim-lua/plenary.nvim'} } + } + + use('nvim-treesitter/nvim-treesitter', {run = ':TSUpdate'}) + use 'nvim-treesitter/playground' + + use 'theprimeagen/harpoon' + use 'mbbill/undotree' + use 'tpope/vim-fugitive' + + -- Visual + use 'vim-airline/vim-airline' + + use { + 'VonHeikemen/lsp-zero.nvim', + requires = { + -- LSP Support + {'neovim/nvim-lspconfig'}, + {'williamboman/mason.nvim'}, + {'williamboman/mason-lspconfig.nvim'}, + + -- Autocompletion + {'hrsh7th/nvim-cmp'}, + {'hrsh7th/cmp-buffer'}, + {'hrsh7th/cmp-path'}, + {'saadparwaiz1/cmp_luasnip'}, + {'hrsh7th/cmp-nvim-lsp'}, + {'hrsh7th/cmp-nvim-lua'}, + + -- Snippets + {'L3MON4D3/LuaSnip'}, + {'rafamadriz/friendly-snippets'}, + } + } + +end) diff --git a/.config/nvim/lua/adam/remap.lua b/.config/nvim/lua/adam/remap.lua new file mode 100644 index 0000000..894f922 --- /dev/null +++ b/.config/nvim/lua/adam/remap.lua @@ -0,0 +1,33 @@ +vim.keymap.set('n', 'pv', vim.cmd.Ex) +vim.keymap.set('n', 'pS', vim.cmd.PackerSync) + +vim.keymap.set("v", "J", ":m '>+1gv=gv") +vim.keymap.set("v", "K", ":m '<-2gv=gv") + +vim.keymap.set('n', 'J', 'mzJ`z') +vim.keymap.set('n', '', 'zz') +vim.keymap.set('n', '', 'zz') +vim.keymap.set('n', 'n', 'nzzzv') +vim.keymap.set('n', 'N', 'Nzzzv') + +vim.keymap.set('x', 'p', '\"_dP') + +vim.keymap.set('n', 'y', '\"+y') +vim.keymap.set('v', 'y', '\"+y') +vim.keymap.set('n', 'Y', '\"+Y') + +vim.keymap.set('n', 'd', '\"_d') +vim.keymap.set('v', 'd', '\"_d') + +vim.keymap.set('n', 'Q', '') +vim.keymap.set('n', 'f', function() + vim.lsp.buf.format() +end) + +vim.keymap.set('n', '', 'cnextzz') +vim.keymap.set('n', '', 'cprevzz') +vim.keymap.set('n', 'k', 'lnextzz') +vim.keymap.set('n', 'j', 'lprevzz') + +vim.keymap.set('n', 's', [[:%s/\<\>//gI]]) +vim.keymap.set('n', 'x', '!chmod +x %', { silent = true }) diff --git a/.config/nvim/lua/adam/set.lua b/.config/nvim/lua/adam/set.lua new file mode 100644 index 0000000..36c8785 --- /dev/null +++ b/.config/nvim/lua/adam/set.lua @@ -0,0 +1,27 @@ +vim.opt.nu = true +vim.opt.relativenumber = true + +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.expandtab = true + +vim.opt.smartindent = true + +vim.opt.wrap = false + +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undodir = os.getenv('HOME') .. '/.vim/undodir' +vim.opt.undofile = true + +vim.opt.hlsearch = false +vim.opt.incsearch = true + +vim.opt.scrolloff = 8 +vim.opt.signcolumn = 'yes' +vim.opt.isfname:append('@-@') + +vim.opt.updatetime = 50 + +vim.g.mapleader = ' ' diff --git a/.config/nvim/plugin/packer_compiled.lua b/.config/nvim/plugin/packer_compiled.lua new file mode 100644 index 0000000..9e7390a --- /dev/null +++ b/.config/nvim/plugin/packer_compiled.lua @@ -0,0 +1,199 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + +_G._packer = _G._packer or {} +_G._packer.inside_compile = true + +local time +local profile_info +local should_profile = false +if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end +else + time = function(chunk, start) end +end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + if threshold then + table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') + end + + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/adam/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/home/adam/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/home/adam/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/home/adam/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/adam/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + LuaSnip = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/LuaSnip", + url = "https://github.com/L3MON4D3/LuaSnip" + }, + ["cmp-buffer"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/cmp-buffer", + url = "https://github.com/hrsh7th/cmp-buffer" + }, + ["cmp-nvim-lsp"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp", + url = "https://github.com/hrsh7th/cmp-nvim-lsp" + }, + ["cmp-nvim-lua"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/cmp-nvim-lua", + url = "https://github.com/hrsh7th/cmp-nvim-lua" + }, + ["cmp-path"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/cmp-path", + url = "https://github.com/hrsh7th/cmp-path" + }, + cmp_luasnip = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/cmp_luasnip", + url = "https://github.com/saadparwaiz1/cmp_luasnip" + }, + ["friendly-snippets"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/friendly-snippets", + url = "https://github.com/rafamadriz/friendly-snippets" + }, + harpoon = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/harpoon", + url = "https://github.com/theprimeagen/harpoon" + }, + ["lsp-zero.nvim"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/lsp-zero.nvim", + url = "https://github.com/VonHeikemen/lsp-zero.nvim" + }, + ["mason-lspconfig.nvim"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/mason-lspconfig.nvim", + url = "https://github.com/williamboman/mason-lspconfig.nvim" + }, + ["mason.nvim"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/mason.nvim", + url = "https://github.com/williamboman/mason.nvim" + }, + ["nvim-cmp"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/nvim-cmp", + url = "https://github.com/hrsh7th/nvim-cmp" + }, + ["nvim-lspconfig"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/nvim-lspconfig", + url = "https://github.com/neovim/nvim-lspconfig" + }, + ["nvim-treesitter"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/nvim-treesitter", + url = "https://github.com/nvim-treesitter/nvim-treesitter" + }, + ["packer.nvim"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/packer.nvim", + url = "https://github.com/wbthomason/packer.nvim" + }, + playground = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/playground", + url = "https://github.com/nvim-treesitter/playground" + }, + ["plenary.nvim"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/plenary.nvim", + url = "https://github.com/nvim-lua/plenary.nvim" + }, + ["telescope.nvim"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/telescope.nvim", + url = "https://github.com/nvim-telescope/telescope.nvim" + }, + undotree = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/undotree", + url = "https://github.com/mbbill/undotree" + }, + ["vim-airline"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/vim-airline", + url = "https://github.com/vim-airline/vim-airline" + }, + ["vim-fugitive"] = { + loaded = true, + path = "/home/adam/.local/share/nvim/site/pack/packer/start/vim-fugitive", + url = "https://github.com/tpope/vim-fugitive" + } +} + +time([[Defining packer_plugins]], false) + +_G._packer.inside_compile = false +if _G._packer.needs_bufread == true then + vim.cmd("doautocmd BufRead") +end +_G._packer.needs_bufread = false + +if should_profile then save_profiles() end + +end) + +if not no_errors then + error_msg = error_msg:gsub('"', '\\"') + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end diff --git a/.config/picom.conf b/.config/picom.conf new file mode 100644 index 0000000..5162756 --- /dev/null +++ b/.config/picom.conf @@ -0,0 +1,44 @@ +vsync = true; +unredir-if-possible = true; + +backend = "glx"; +glx-no-stencil = true; +glx-no-rebind-pixmap = false; + +fading = true; +fade-delta = 5; +fade-exclude = [ ]; + +mark-wmwin-focused = true; +mark-ovredir-focused = true; +use-ewmh-active-win = false; +detect-transient = true; +detect-client-leader = true; + +wintypes : +{ + tooltip : + { + fade = true; + shadow = true; + opacity = 0.75; + focus = true; + full-shadow = false; + }; + dock : + { + shadow = false; + }; + dnd : + { + shadow = false; + }; + popup_menu : + { + opacity = 1.0; + }; + dropdown_menu : + { + opacity = 1.0; + }; +}; diff --git a/.config/shell/aliasrc b/.config/shell/aliasrc new file mode 100644 index 0000000..8ed5f25 --- /dev/null +++ b/.config/shell/aliasrc @@ -0,0 +1,47 @@ +#!/bin/sh + + +# Use neovim for vim if present. +[ -x "$(command -v nvim)" ] && alias vim="nvim" vimdiff="nvim -d" + +# /comfy/ +alias \ +v="vim ." \ +x="exit" \ +ka="killall" \ +bb="byobu" \ + +# Shortcuts +alias \ +cf="~/.config && v" \ +cfv="~/.config/nvim && v" \ +cfa="~/.config/awesome && v" \ +cfs="~/.config/shell && v" \ +cfl="~/.config/lf && v" \ +cfx="~/.config/x11 && v" \ +cfz="~/.config/zsh && v" \ +cfk="~/.config/kitty && v" \ +cfp="nvim ~/.config/picom.conf" \ + +# Add verbosity +alias \ +cp="cp -iv" \ +mv="mv -iv" \ +rm="rm -vI" \ +mkd="mkdir -pv" \ + +# Add color +alias \ +ls="ls -hN --color=auto --group-directories-first" \ +grep="grep --color=auto" \ +diff="diff --color=auto" \ +ccat="highlight --out-format=ansi" \ + +# Laziness +alias \ +hosts="sudo nvim /etc/hosts" \ +push="rsync -avzP --copy-links " \ +sup="push ~/projects/http deez:" \ + +# Forget why +wget="wget --hsts-file='XDG_CACHE_HOME/wget-hsts'" \ diff --git a/.config/shell/inputrc b/.config/shell/inputrc new file mode 100644 index 0000000..f9b94dd --- /dev/null +++ b/.config/shell/inputrc @@ -0,0 +1,19 @@ +$include /etc/inputrc +set editing-mode vi +$if mode=vi + +set show-mode-in-prompt on +set vi-ins-mode-string \1\e[6 q\2 +set vi-cmd-mode-string \1\e[2 q\2 + +set keymap vi-command +# these are for vi-command mode +Control-l: clear-screen +Control-a: beginning-of-line + +set keymap vi-insert +# these are for vi-insert mode +Control-l: clear-screen +Control-a: beginning-of-line + +$endif diff --git a/.config/shell/profile b/.config/shell/profile new file mode 100644 index 0000000..759eaf9 --- /dev/null +++ b/.config/shell/profile @@ -0,0 +1,118 @@ +#!/bin/zsh + +export PATH="$PATH:$(du "$HOME/.local/bin" | cut -f2 | paste -sd ':' -)" + +unsetopt PROMPT_SP + +# Default programs: +export EDITOR="nvim" +export TERMINAL="kitty" +export BROWSER="firefox-developer-edition" + +# Move config files out of home and into .config/ +export XINITRC="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xinitrc" +export GTK2_RC_FILES="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-2.0/gtkrc-2.0" +export LESSHISTFILE="-" +export INPUTRC="${XDG_CONFIG_HOME:-$HOME/.config}/shell/inputrc" +export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh" +export KODI_DATA="${XDG_DATA_HOME:-$HOME/.local/share}/kodi" +export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store" +export TMUX_TMPDIR="$XDG_RUNTIME_DIR" +export ANDROID_SDK_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android" +export CARGO_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/cargo" +export GOPATH="${XDG_DATA_HOME:-$HOME/.local/share}/go" +export HISTFILE="${XDG_DATA_HOME:-$HOME/.local/share}/history" + +# Other program settings: +export FZF_DEFAULT_OPTS="--layout=reverse --height 40%" +export LESS=-R +export LESS_TERMCAP_mb="$(printf '%b' '')" +export LESS_TERMCAP_md="$(printf '%b' '')" +export LESS_TERMCAP_me="$(printf '%b' '')" +export LESS_TERMCAP_so="$(printf '%b' '')" +export LESS_TERMCAP_se="$(printf '%b' '')" +export LESS_TERMCAP_us="$(printf '%b' '')" +export LESS_TERMCAP_ue="$(printf '%b' '')" +export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null" +export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme. + +# This is the list for lf icons: +export LF_ICONS="di=📁:\ +fi=📃:\ +tw=🤝:\ +ow=📂:\ +ln=⛓:\ +or=❌:\ +ex=🎯:\ +*.txt=✍:\ +*.mom=✍:\ +*.me=✍:\ +*.ms=✍:\ +*.png=🖼:\ +*.webp=🖼:\ +*.ico=🖼:\ +*.jpg=📸:\ +*.jpe=📸:\ +*.jpeg=📸:\ +*.gif=🖼:\ +*.svg=🗺:\ +*.tif=🖼:\ +*.tiff=🖼:\ +*.xcf=🖌:\ +*.html=🌎:\ +*.xml=📰:\ +*.gpg=🔒:\ +*.css=🎨:\ +*.pdf=📚:\ +*.djvu=📚:\ +*.epub=📚:\ +*.csv=📓:\ +*.xlsx=📓:\ +*.tex=📜:\ +*.md=📘:\ +*.r=📊:\ +*.R=📊:\ +*.rmd=📊:\ +*.Rmd=📊:\ +*.m=📊:\ +*.mp3=🎵:\ +*.opus=🎵:\ +*.ogg=🎵:\ +*.m4a=🎵:\ +*.flac=🎼:\ +*.wav=🎼:\ +*.mkv=🎥:\ +*.mp4=🎥:\ +*.webm=🎥:\ +*.mpeg=🎥:\ +*.avi=🎥:\ +*.mov=🎥:\ +*.mpg=🎥:\ +*.wmv=🎥:\ +*.m4b=🎥:\ +*.flv=🎥:\ +*.zip=📦:\ +*.rar=📦:\ +*.7z=📦:\ +*.tar.gz=📦:\ +*.z64=🎮:\ +*.v64=🎮:\ +*.n64=🎮:\ +*.gba=🎮:\ +*.nes=🎮:\ +*.gdi=🎮:\ +*.1=ℹ:\ +*.nfo=ℹ:\ +*.info=ℹ:\ +*.log=📙:\ +*.iso=📀:\ +*.img=📀:\ +*.bib=🎓:\ +*.ged=👪:\ +*.part=💔:\ +*.torrent=🔽:\ +*.jar=♨:\ +*.java=♨:\ +" + +[ ! -f ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc ] && shortcuts >/dev/null 2>&1 & diff --git a/.config/shell/shortcutrc b/.config/shell/shortcutrc new file mode 100644 index 0000000..c92e262 --- /dev/null +++ b/.config/shell/shortcutrc @@ -0,0 +1,6 @@ +# vim: filetype=sh +cf="~/.config && v" \ +cfv="~/.config/nvim && v" \ +cfa="~/.config/awesome && v" \ +cfs="~/.config/shell && v" \ +cfl="~/.config/lf && v" \ diff --git a/.config/x11/xinitrc b/.config/x11/xinitrc new file mode 100755 index 0000000..902d6ad --- /dev/null +++ b/.config/x11/xinitrc @@ -0,0 +1,8 @@ +#!/bin/sh +if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile" ]; then + . "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile" +else + . "$HOME/.xprofile" +fi +wal -R +ssh-agent awesome diff --git a/.config/x11/xprofile b/.config/x11/xprofile new file mode 100755 index 0000000..569fdc3 --- /dev/null +++ b/.config/x11/xprofile @@ -0,0 +1,14 @@ +#!/bin/sh + +[ -x "$(command -v g610-led)" ] && g610-led -a ff & +if [ -f ".screenlayout/default.sh" ]; then + . ".screenlayout/default.sh" & +fi + +xmodmap -e 'clear lock' & +xmodmap -e 'keysym Caps_Lock = Escape' & +picom -b & +xset r rate 300 50 & +unclutter & +redshift -l 43:-70 & +xclip & diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc new file mode 100644 index 0000000..dbdb42c --- /dev/null +++ b/.config/zsh/.zshrc @@ -0,0 +1,74 @@ +#!/bin/zsh + +if test -d ~/.oh-my-zsh; then + ZSH=~/.oh-my-zsh/ +else + ZSH=/usr/share/oh-my-zsh +fi + +ZSH_THEME="pygmalion-virtualenv" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +DISABLE_UNTRACKED_FILES_DIRTY="true" + +plugins=(git vi-mode virtualenv python) + +# vi-mode +VI_MODE_RESET_PROMPT_ON_MODE_CHANGE=true +VI_MODE_SET_CURSOR=true + +# Use neovim for vim if present. +[ -x "$(command -v nvim)" ] && alias vim="nvim" vimdiff="nvim -d" + +# /comfy/ +alias \ +v="vim ." \ +x="exit" \ +ka="killall" \ +bb="byobu" \ + +# Shortcuts +alias \ +cf="~/.config && v" \ +cfv="~/.config/nvim && v" \ +cfa="~/.config/awesome && v" \ +cfs="~/.config/shell && v" \ +cfl="~/.config/lf && v" \ +cfx="~/.config/x11 && v" \ +cfz="~/.config/zsh && v" \ +cfk="~/.config/kitty && v" \ +cfp="nvim ~/.config/picom.conf" \ + +# Add verbosity +alias \ +cp="cp -iv" \ +mv="mv -iv" \ +rm="rm -vI" \ +mkd="mkdir -pv" \ + +# Add color +alias \ +ls="ls -hN --color=auto --group-directories-first" \ +grep="grep --color=auto" \ +diff="diff --color=auto" \ +ccat="highlight --out-format=ansi" \ + +# Laziness +alias \ +hosts="sudo nvim /etc/hosts" \ +push="rsync -avzP --copy-links " \ +sup="push ~/projects/http deez:" \ +vs="source bin/activate" \ +vd="deactivate" \ + +# Forget why +wget="wget --hsts-file='XDG_CACHE_HOME/wget-hsts'" \ + +ZSH_CACHE_DIR=$HOME/.cache/oh-my-zsh +if [[ ! -d $ZSH_CACHE_DIR ]]; then + mkdir $ZSH_CACHE_DIR +fi + +source $ZSH/oh-my-zsh.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..af0e82f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule ".config/awesome/awesome-wm-widgets"] + path = .config/awesome/awesome-wm-widgets + url = git@github.com:streetturtle/awesome-wm-widgets.git diff --git a/.scripts/doors/install_full_arch b/.scripts/doors/install_full_arch new file mode 100755 index 0000000..4080b71 --- /dev/null +++ b/.scripts/doors/install_full_arch @@ -0,0 +1,40 @@ +#!/bin/bash + +# Install all (most) dependencies +# This also serves as a list of dependencies + +yay -S --needed --noconfirm \ +\ +`# Standard`\ +awesome \ +btop \ +kitty \ +neovim \ +firefox-developer-edition \ +python-pywal \ +playerctl \ +pamixer \ +byobu \ +zsh \ +xorg-xmodmap \ +picom \ +unclutter \ +redshift \ +xclip \ +polkit-gnome \ +arc-icon-theme \ +acpi \ +nitrogen \ +spotify-launcher \ +xorg-server \ +xorg-xinit \ +xorg-xset \ +\ +`# Aur`\ +python-pywalfox \ +pywal-discord-git \ +wal-telegram-git \ +lf-git \ +ctpv-git \ +nvim-packer-git \ +oh-my-zsh-git diff --git a/.scripts/doors/install_min_arch b/.scripts/doors/install_min_arch new file mode 100755 index 0000000..19da545 --- /dev/null +++ b/.scripts/doors/install_min_arch @@ -0,0 +1,24 @@ +#!/bin/bash + +# Yay +git clone https://aur.archlinux.org/yay.git && +cd yay && makepkg -si --noconfirm && rm -rf yay && + +# Base/Shell +yay -S --needed --noconfirm \ +\ +`# Standard`\ +rsync \ +btop \ +neovim \ +byobu \ +zsh \ +nnn \ +\ +`# Aur`\ +nvim-packer-git \ +oh-my-zsh-git + +rsync -avzP --copy-links Doors/ ./ +rm -rf Doors; +sudo chsh -s /bin/zsh $USER; diff --git a/.scripts/doors/install_min_ubuntu b/.scripts/doors/install_min_ubuntu new file mode 100755 index 0000000..ac5d61d --- /dev/null +++ b/.scripts/doors/install_min_ubuntu @@ -0,0 +1,11 @@ +#!/bin/bash + +# Base +sudo apt-get install git rsync btop neovim byobu zsh nnn + +# Packer +git clone --depth 1 https://github.com/wbthomason/packer.nvim\ + ~/.local/share/nvim/site/pack/packer/start/packer.nvim + +# OhMyZsh +sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" diff --git a/.scripts/doors/setup b/.scripts/doors/setup new file mode 100755 index 0000000..0718e50 --- /dev/null +++ b/.scripts/doors/setup @@ -0,0 +1,27 @@ +#!/bin/bash +echo " +======================================================= + Installing D's nux (you're gonna love my nux(really)) +======================================================= +" + +. /etc/os-release +OS=$NAME + +if [[ $OS == *Arch* ]]; then + sudo sed '/Color/s/^#//' -i /etc/pacman.conf && + sudo pacman -S --needed --noconfirm git rsync base-devel && + git clone https://github.com/adoyle0/Doors.git && + rsync -avzP --copy-links Doors/ ./ + .scripts/doors/install_min_arch + +elif [[ $OS == *buntu* ]]; then + .scripts/doors/install_min_ubuntu +fi + +echo " +======================== + logout and log back in +======================== +plz +"; diff --git a/.scripts/doors/swal b/.scripts/doors/swal new file mode 100755 index 0000000..3b9a22f --- /dev/null +++ b/.scripts/doors/swal @@ -0,0 +1,2 @@ +cp $(awk {print} ~/.cache/wal/wal) ~/projects/doordesk/doordesk/public/bg.png +cp ~/.cache/wal/colors.css ~projects/doordesk/doordesk/public/colors.css diff --git a/.scripts/doors/wal b/.scripts/doors/wal new file mode 100755 index 0000000..2d58533 --- /dev/null +++ b/.scripts/doors/wal @@ -0,0 +1,11 @@ +#! /bin/bash + +wal -i ~/Pictures/Wallpapers; + +cp $(awk {print} ~/.cache/wal/wal) ~/.cache/wal/bg; +pywalfox update; +pywal-discord; +beautifuldiscord --css ~/.config/BetterDiscord/themes; +wal-telegram -g; + +echo 'awesome.restart()' | awesome-client; diff --git a/.xinitrc b/.xinitrc new file mode 100644 index 0000000..691d62d --- /dev/null +++ b/.xinitrc @@ -0,0 +1,15 @@ +#!/bin/sh +if [ -f "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile" ]; then + . "${XDG_CONFIG_HOME:-$HOME/.config}/x11/xprofile" +else + . "$HOME/.xprofile" +fi + +# optimus +if [ -x $(command -v optimus-manager) ]; then + sudo prime-switch + prime-offload +fi + +wal -R +ssh-agent awesome diff --git a/.zprofile b/.zprofile new file mode 100644 index 0000000..759eaf9 --- /dev/null +++ b/.zprofile @@ -0,0 +1,118 @@ +#!/bin/zsh + +export PATH="$PATH:$(du "$HOME/.local/bin" | cut -f2 | paste -sd ':' -)" + +unsetopt PROMPT_SP + +# Default programs: +export EDITOR="nvim" +export TERMINAL="kitty" +export BROWSER="firefox-developer-edition" + +# Move config files out of home and into .config/ +export XINITRC="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xinitrc" +export GTK2_RC_FILES="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-2.0/gtkrc-2.0" +export LESSHISTFILE="-" +export INPUTRC="${XDG_CONFIG_HOME:-$HOME/.config}/shell/inputrc" +export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh" +export KODI_DATA="${XDG_DATA_HOME:-$HOME/.local/share}/kodi" +export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store" +export TMUX_TMPDIR="$XDG_RUNTIME_DIR" +export ANDROID_SDK_HOME="${XDG_CONFIG_HOME:-$HOME/.config}/android" +export CARGO_HOME="${XDG_DATA_HOME:-$HOME/.local/share}/cargo" +export GOPATH="${XDG_DATA_HOME:-$HOME/.local/share}/go" +export HISTFILE="${XDG_DATA_HOME:-$HOME/.local/share}/history" + +# Other program settings: +export FZF_DEFAULT_OPTS="--layout=reverse --height 40%" +export LESS=-R +export LESS_TERMCAP_mb="$(printf '%b' '')" +export LESS_TERMCAP_md="$(printf '%b' '')" +export LESS_TERMCAP_me="$(printf '%b' '')" +export LESS_TERMCAP_so="$(printf '%b' '')" +export LESS_TERMCAP_se="$(printf '%b' '')" +export LESS_TERMCAP_us="$(printf '%b' '')" +export LESS_TERMCAP_ue="$(printf '%b' '')" +export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null" +export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme. + +# This is the list for lf icons: +export LF_ICONS="di=📁:\ +fi=📃:\ +tw=🤝:\ +ow=📂:\ +ln=⛓:\ +or=❌:\ +ex=🎯:\ +*.txt=✍:\ +*.mom=✍:\ +*.me=✍:\ +*.ms=✍:\ +*.png=🖼:\ +*.webp=🖼:\ +*.ico=🖼:\ +*.jpg=📸:\ +*.jpe=📸:\ +*.jpeg=📸:\ +*.gif=🖼:\ +*.svg=🗺:\ +*.tif=🖼:\ +*.tiff=🖼:\ +*.xcf=🖌:\ +*.html=🌎:\ +*.xml=📰:\ +*.gpg=🔒:\ +*.css=🎨:\ +*.pdf=📚:\ +*.djvu=📚:\ +*.epub=📚:\ +*.csv=📓:\ +*.xlsx=📓:\ +*.tex=📜:\ +*.md=📘:\ +*.r=📊:\ +*.R=📊:\ +*.rmd=📊:\ +*.Rmd=📊:\ +*.m=📊:\ +*.mp3=🎵:\ +*.opus=🎵:\ +*.ogg=🎵:\ +*.m4a=🎵:\ +*.flac=🎼:\ +*.wav=🎼:\ +*.mkv=🎥:\ +*.mp4=🎥:\ +*.webm=🎥:\ +*.mpeg=🎥:\ +*.avi=🎥:\ +*.mov=🎥:\ +*.mpg=🎥:\ +*.wmv=🎥:\ +*.m4b=🎥:\ +*.flv=🎥:\ +*.zip=📦:\ +*.rar=📦:\ +*.7z=📦:\ +*.tar.gz=📦:\ +*.z64=🎮:\ +*.v64=🎮:\ +*.n64=🎮:\ +*.gba=🎮:\ +*.nes=🎮:\ +*.gdi=🎮:\ +*.1=ℹ:\ +*.nfo=ℹ:\ +*.info=ℹ:\ +*.log=📙:\ +*.iso=📀:\ +*.img=📀:\ +*.bib=🎓:\ +*.ged=👪:\ +*.part=💔:\ +*.torrent=🔽:\ +*.jar=♨:\ +*.java=♨:\ +" + +[ ! -f ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc ] && shortcuts >/dev/null 2>&1 & diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..27e7f00 --- /dev/null +++ b/readme.md @@ -0,0 +1,34 @@ +# Doors are sturdier than windows + +The idea is a one liner to have a quick workbench, like flipping a door on its side for a quick desk. + +It's a bootstrap script for my personal desktop environment + +Use as much or as little as you need. + +## Install +You should have an [Arch](https://archlinux.org) system, you can run this immediately after a minimal `archinstall` setup: + +### Quick shell: +As your new user in your new user's home directory run: (will overwrite some user files) + +1. ```curl -s https://doordesk.net/setup | bash``` + +2. Log out and log back in + +Minimum install is the default, if you want a graphical environment run: + +`.scripts/installdeps_full` + +to get the rest and then: + +```startx``` to load it. + +## Post Install +1. Neovim will be confused on first start until `:PackerSync` is run + +### TODO: +- support more distros +- handle errors +- make sure full install actually has all deps handled +