aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LICENSE13
-rw-r--r--Makefile7
-rw-r--r--README.adoc25
-rw-r--r--bash/.bash_profile6
-rwxr-xr-xbash/.bashrc37
-rw-r--r--dunst/.config/dunst/dunstrc435
-rw-r--r--git/.gitconfig3
-rwxr-xr-xlf/.config/lf/cleaner4
-rwxr-xr-xlf/.config/lf/lfrc80
-rwxr-xr-xlf/.config/lf/scope44
-rw-r--r--neofetch/.config/neofetch/config.conf865
-rw-r--r--neovim/.config/nvim/init.lua17
-rw-r--r--neovim/.config/nvim/lua/autocmd.lua25
-rw-r--r--neovim/.config/nvim/lua/keybinds.lua34
-rw-r--r--neovim/.config/nvim/lua/plugins.lua149
-rw-r--r--neovim/.config/nvim/lua/plugins/catppuccin.lua22
-rw-r--r--neovim/.config/nvim/lua/plugins/cmp.lua29
-rw-r--r--neovim/.config/nvim/lua/plugins/fidget.lua9
-rw-r--r--neovim/.config/nvim/lua/plugins/github-theme.lua4
-rw-r--r--neovim/.config/nvim/lua/plugins/gitsigns.lua27
-rw-r--r--neovim/.config/nvim/lua/plugins/lsp.lua79
-rw-r--r--neovim/.config/nvim/lua/plugins/lualine.lua34
-rw-r--r--neovim/.config/nvim/lua/plugins/mason.lua10
-rw-r--r--neovim/.config/nvim/lua/plugins/pairs.lua2
-rw-r--r--neovim/.config/nvim/lua/plugins/rust-tools.lua24
-rw-r--r--neovim/.config/nvim/lua/plugins/telescope.lua64
-rw-r--r--neovim/.config/nvim/lua/plugins/treesitter.lua126
-rw-r--r--neovim/.config/nvim/lua/settings.lua53
-rw-r--r--neovim/.config/nvim/plugin/packer_compiled.lua333
-rw-r--r--qutebrowser/.config/qutebrowser/config.py95
-rw-r--r--qutebrowser/.config/qutebrowser/home.html15
-rw-r--r--screenshot.pngbin0 -> 2469374 bytes
-rwxr-xr-xscripts/.local/bin/personal/appmenu8
-rwxr-xr-xscripts/.local/bin/personal/bar/battery27
-rwxr-xr-xscripts/.local/bin/personal/bar/brightness67
-rwxr-xr-xscripts/.local/bin/personal/bar/datetime9
-rwxr-xr-xscripts/.local/bin/personal/bar/getrpm3
-rwxr-xr-xscripts/.local/bin/personal/bar/lights14
-rwxr-xr-xscripts/.local/bin/personal/bar/load4
-rwxr-xr-xscripts/.local/bin/personal/bar/network13
-rwxr-xr-xscripts/.local/bin/personal/bar/packages9
-rwxr-xr-xscripts/.local/bin/personal/bar/player12
-rwxr-xr-xscripts/.local/bin/personal/bar/status30
-rwxr-xr-xscripts/.local/bin/personal/bar/temp3
-rwxr-xr-xscripts/.local/bin/personal/bar/title10
-rwxr-xr-xscripts/.local/bin/personal/bar/updates16
-rwxr-xr-xscripts/.local/bin/personal/bar/volume10
-rwxr-xr-xscripts/.local/bin/personal/batestimate17
-rwxr-xr-xscripts/.local/bin/personal/colorconvert28
-rwxr-xr-xscripts/.local/bin/personal/compile (renamed from scripts/compile)51
-rwxr-xr-xscripts/.local/bin/personal/compresspdf9
-rwxr-xr-xscripts/.local/bin/personal/dayprogress6
-rwxr-xr-xscripts/.local/bin/personal/dlmusic13
-rwxr-xr-xscripts/.local/bin/personal/ed27
-rwxr-xr-xscripts/.local/bin/personal/edge231
-rwxr-xr-xscripts/.local/bin/personal/edgedetect31
-rwxr-xr-xscripts/.local/bin/personal/eve3
-rwxr-xr-xscripts/.local/bin/personal/extract23
-rwxr-xr-xscripts/.local/bin/personal/getibusinput (renamed from scripts/getibusinput)0
-rwxr-xr-xscripts/.local/bin/personal/hdmi14
-rwxr-xr-xscripts/.local/bin/personal/hdqwallsdownload34
-rwxr-xr-xscripts/.local/bin/personal/infoboard25
-rwxr-xr-xscripts/.local/bin/personal/kivytest30
-rwxr-xr-xscripts/.local/bin/personal/klimperklamper129
-rwxr-xr-xscripts/.local/bin/personal/launchworkingenv5
-rwxr-xr-xscripts/.local/bin/personal/lfub24
-rwxr-xr-xscripts/.local/bin/personal/lockscreen8
-rwxr-xr-xscripts/.local/bin/personal/mats4
-rwxr-xr-xscripts/.local/bin/personal/mountmenu28
-rwxr-xr-xscripts/.local/bin/personal/music (renamed from scripts/music)0
-rwxr-xr-xscripts/.local/bin/personal/mute (renamed from scripts/mute)0
-rwxr-xr-xscripts/.local/bin/personal/pdfcompress4
-rwxr-xr-xscripts/.local/bin/personal/pipes.sh385
-rwxr-xr-xscripts/.local/bin/personal/powermenu28
-rwxr-xr-xscripts/.local/bin/personal/prepare (renamed from scripts/prepare)0
-rwxr-xr-xscripts/.local/bin/personal/retab12
-rwxr-xr-xscripts/.local/bin/personal/rica53
-rwxr-xr-xscripts/.local/bin/personal/rmbackup29
-rwxr-xr-xscripts/.local/bin/personal/rotdir12
-rwxr-xr-xscripts/.local/bin/personal/tabmenu25
-rwxr-xr-xscripts/.local/bin/personal/tabura3
-rwxr-xr-xscripts/.local/bin/personal/trans119
-rwxr-xr-xscripts/.local/bin/personal/volctl22
-rwxr-xr-xscripts/.local/bin/personal/wally56
-rwxr-xr-xscripts/.local/bin/personal/zeit5
-rwxr-xr-xscripts/compresspdf5
-rwxr-xr-xscripts/dlmusic13
-rw-r--r--sxhkd/.config/sxhkd/mediarc114
-rw-r--r--sxhkd/.config/sxhkd/sxhkdrc151
-rw-r--r--systemd/.config/systemd/user/brightness-persistence.service8
l---------systemd/.config/systemd/user/default.target.wants/brightness-persistence.service1
-rw-r--r--wal/.config/wal/templates/config.py82
-rw-r--r--wal/.config/wal/templates/zathurarc20
-rw-r--r--xorg/.Xmodmap248
-rw-r--r--xorg/.Xresources72
-rw-r--r--xorg/.config/env31
-rw-r--r--xorg/.config/mimeapps.list16
-rw-r--r--xorg/.config/wallpaperbin0 -> 1434794 bytes
-rwxr-xr-xxorg/.xinitrc24
-rw-r--r--zathura/.config/zathura/zathurarc22
100 files changed, 4970 insertions, 35 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5f75680
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..c542619
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,7 @@
+all: install
+
+install:
+ stow -v --target="$(HOME)" --restow */
+
+uninstall:
+ stow -v --target="$(HOME)" --delete */
diff --git a/README.adoc b/README.adoc
new file mode 100644
index 0000000..5c29fcc
--- /dev/null
+++ b/README.adoc
@@ -0,0 +1,25 @@
+= davipkj's .files
+
+In this directory you will find my user-specific application configuration files.
+I use `make` and `stow` to manage them, meaning the top level directories are where you will find the respective configurations.
+
+NOTE: Since I have a HiDPI Display, my font size may be a little too big for you.
+
+image::screenshot.png
+
+image:https://img.shields.io/badge/license-wtfpl-bf419c?style=flat-square[]
+image:https://img.shields.io/badge/price-free-bf419c?style=flat-square[]
+
+== Requirements
+
+* I use the *JetBrains Mono font*, which can be downloaded https://github.com/JetBrains/JetBrainsMono[here].
+
+== System
+
+Don- Don't say it- ... I use arch btw!
+
+* *OS:* https://archlinux.org[Arch Linux]
+* *Device:* https://support.apple.com/kb/SP719[MacBook Pro]
+* *Window Manager:* https://git.davidpenkowoj.de/dwm.git[dwm]
+* *Terminal Emulator:* https://git.davidpenkowoj.de/st.git[st]
+* *Browser:* https://www.qutebrowser.org[qutebrowser]
diff --git a/bash/.bash_profile b/bash/.bash_profile
new file mode 100644
index 0000000..fe4ba32
--- /dev/null
+++ b/bash/.bash_profile
@@ -0,0 +1,6 @@
+# Startx
+if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
+ exec startx
+fi
+
+[[ -f ~/.bashrc ]] && . ~/.bashrc
diff --git a/bash/.bashrc b/bash/.bashrc
new file mode 100755
index 0000000..6fbbaaf
--- /dev/null
+++ b/bash/.bashrc
@@ -0,0 +1,37 @@
+# If not running interactively, don't do anything
+[[ $- != *i* ]] && return
+
+# Define function for easy script sourcing
+source_if_present () { [ -f "$1" ] && source $1 ; }
+
+# Load environment variables
+source_if_present "$HOME/.config/env"
+
+# Load wal colors
+source_if_present "$HOME/.cache/wal/colors.sh"
+# Support TTYs
+source_if_present "$HOME/.cache/wal/colors-tty.sh"
+
+# Load bash completion
+source_if_present "/usr/share/bash-completion/bash_completion"
+
+# Enable tab to cycle-complete
+bind '"\t":menu-complete'
+
+# Set aliases
+alias lf='lfub'
+alias vim='nvim'
+alias ll="ls -lah"
+alias tlmgr='tllocalmgr'
+alias ls='ls --color=auto'
+alias ip='ip --color=auto'
+alias grep='grep --color=auto'
+alias diff='diff --color=auto'
+alias dmenu="dmenu -nb '$color0' -nf '$color15' -sb '$color1' -sf '$color0'"
+
+# Set prompt
+PS1='[ \001\e[0;31m\002\u\001\e[0m\002@\001\e[0;32m\002\h\001\e[0m\002 ] \001\e[0;33m\002\W\001\e[0m\002 \$ '
+
+# Enable wal colors
+[ -f "$HOME/.cache/wal/sequences" ] && (cat "$HOME/.cache/wal/sequences" &)
+
diff --git a/dunst/.config/dunst/dunstrc b/dunst/.config/dunst/dunstrc
new file mode 100644
index 0000000..1e12f27
--- /dev/null
+++ b/dunst/.config/dunst/dunstrc
@@ -0,0 +1,435 @@
+# See dunst(5) for all configuration options
+
+[global]
+ ### Display ###
+
+ # Which monitor should the notifications be displayed on.
+ monitor = 0
+
+ # Display notification on focused monitor. Possible modes are:
+ # mouse: follow mouse pointer
+ # keyboard: follow window with keyboard focus
+ # none: don't follow anything
+ #
+ # "keyboard" needs a window manager that exports the
+ # _NET_ACTIVE_WINDOW property.
+ # This should be the case for almost all modern window managers.
+ #
+ # If this option is set to mouse or keyboard, the monitor option
+ # will be ignored.
+ follow = none
+
+ ### Geometry ###
+
+ # dynamic width from 0 to 300
+ # width = (0, 300)
+ # constant width of 300
+ width = 400
+
+ # The maximum height of a single notification, excluding the frame.
+ height = 220
+
+ # Position the notification in the top right corner
+ origin = bottom-center
+
+ # Offset from the origin
+ offset = 0x300
+
+ # Scale factor. It is auto-detected if value is 0.
+ scale = 0
+
+ # Maximum number of notification (0 means no limit)
+ notification_limit = 0
+
+ ### Progress bar ###
+
+ # Turn on the progess bar. It appears when a progress hint is passed with
+ # for example dunstify -h int:value:12
+ progress_bar = true
+
+ # Set the progress bar height. This includes the frame, so make sure
+ # it's at least twice as big as the frame width.
+ progress_bar_height = 10
+
+ # Set the frame width of the progress bar
+ progress_bar_frame_width = 1
+
+ # Set the minimum width for the progress bar
+ progress_bar_min_width = 150
+
+ # Set the maximum width for the progress bar
+ progress_bar_max_width = 300
+
+
+ # Show how many messages are currently hidden (because of
+ # notification_limit).
+ indicate_hidden = yes
+
+ # The transparency of the window. Range: [0; 100].
+ # This option will only work if a compositing window manager is
+ # present (e.g. xcompmgr, compiz, etc.). (X11 only)
+ transparency = 0
+
+ # Draw a line of "separator_height" pixel height between two
+ # notifications.
+ # Set to 0 to disable.
+ separator_height = 2
+
+ # Padding between text and separator.
+ padding = 8
+
+ # Horizontal padding.
+ horizontal_padding = 8
+
+ # Padding between text and icon.
+ text_icon_padding = 0
+
+ # Defines width in pixels of frame around the notification window.
+ # Set to 0 to disable.
+ frame_width = 0
+
+ # Defines color of the frame around the notification window.
+ frame_color = "#aaaaaa"
+
+ # Define a color for the separator.
+ # possible values are:
+ # * auto: dunst tries to find a color fitting to the background;
+ # * foreground: use the same color as the foreground;
+ # * frame: use the same color as the frame;
+ # * anything else will be interpreted as a X color.
+ separator_color = frame
+
+ # Sort messages by urgency.
+ sort = yes
+
+ # Don't remove messages, if the user is idle (no mouse or keyboard input)
+ # for longer than idle_threshold seconds.
+ # Set to 0 to disable.
+ # A client can set the 'transient' hint to bypass this. See the rules
+ # section for how to disable this if necessary
+ # idle_threshold = 120
+
+ ### Text ###
+
+ font = Hack 24
+
+ # The spacing between lines. If the height is smaller than the
+ # font height, it will get raised to the font height.
+ line_height = 0
+
+ # Possible values are:
+ # full: Allow a small subset of html markup in notifications:
+ # <b>bold</b>
+ # <i>italic</i>
+ # <s>strikethrough</s>
+ # <u>underline</u>
+ #
+ # For a complete reference see
+ # <https://docs.gtk.org/Pango/pango_markup.html>.
+ #
+ # strip: This setting is provided for compatibility with some broken
+ # clients that send markup even though it's not enabled on the
+ # server. Dunst will try to strip the markup but the parsing is
+ # simplistic so using this option outside of matching rules for
+ # specific applications *IS GREATLY DISCOURAGED*.
+ #
+ # no: Disable markup parsing, incoming notifications will be treated as
+ # plain text. Dunst will not advertise that it has the body-markup
+ # capability if this is set as a global setting.
+ #
+ # It's important to note that markup inside the format option will be parsed
+ # regardless of what this is set to.
+ markup = full
+
+ # The format of the message. Possible variables are:
+ # %a appname
+ # %s summary
+ # %b body
+ # %i iconname (including its path)
+ # %I iconname (without its path)
+ # %p progress value if set ([ 0%] to [100%]) or nothing
+ # %n progress value if set without any extra characters
+ # %% Literal %
+ # Markup is allowed
+ format = "<b>%s</b>\n%b"
+
+ # Alignment of message text.
+ # Possible values are "left", "center" and "right".
+ alignment = center
+
+ # Vertical alignment of message text and icon.
+ # Possible values are "top", "center" and "bottom".
+ vertical_alignment = center
+
+ # Show age of message if message is older than show_age_threshold
+ # seconds.
+ # Set to -1 to disable.
+ show_age_threshold = 60
+
+ # Specify where to make an ellipsis in long lines.
+ # Possible values are "start", "middle" and "end".
+ ellipsize = middle
+
+ # Ignore newlines '\n' in notifications.
+ ignore_newline = no
+
+ # Stack together notifications with the same content
+ stack_duplicates = true
+
+ # Hide the count of stacked notifications with the same content
+ hide_duplicate_count = true
+
+ # Display indicators for URLs (U) and actions (A).
+ show_indicators = yes
+
+ ### Icons ###
+
+ # Align icons left/right/off
+ icon_position = off
+
+ # Scale small icons up to this size, set to 0 to disable. Helpful
+ # for e.g. small files or high-dpi screens. In case of conflict,
+ # max_icon_size takes precedence over this.
+ min_icon_size = 0
+
+ # Scale larger icons down to this size, set to 0 to disable
+ max_icon_size = 32
+
+ # Paths to default icons.
+ icon_path = /usr/share/icons/Papirus-Dark/16x16/devices/
+
+ ### History ###
+
+ # Should a notification popped up from history be sticky or timeout
+ # as if it would normally do.
+ sticky_history = yes
+
+ # Maximum amount of notifications kept in history
+ history_length = 20
+
+ ### Misc/Advanced ###
+
+ # dmenu path.
+ dmenu = /usr/bin/dmenu -p dunst:
+
+ # Browser for opening urls in context menu.
+ browser = /usr/bin/xdg-open
+
+ # Always run rule-defined scripts, even if the notification is suppressed
+ always_run_script = true
+
+ # Define the title of the windows spawned by dunst
+ title = Dunst
+
+ # Define the class of the windows spawned by dunst
+ class = Dunst
+
+ # Define the corner radius of the notification window
+ # in pixel size. If the radius is 0, you have no rounded
+ # corners.
+ # The radius will be automatically lowered if it exceeds half of the
+ # notification height to avoid clipping text and/or icons.
+ corner_radius = 0
+
+ # Ignore the dbus closeNotification message.
+ # Useful to enforce the timeout set by dunst configuration. Without this
+ # parameter, an application may close the notification sent before the
+ # user defined timeout.
+ ignore_dbusclose = false
+
+ ### Wayland ###
+ # These settings are Wayland-specific. They have no effect when using X11
+
+ # Uncomment this if you want to let notications appear under fullscreen
+ # applications (default: overlay)
+ # layer = top
+
+ # Set this to true to use X11 output on Wayland.
+ force_xwayland = false
+
+ ### Legacy
+
+ # Use the Xinerama extension instead of RandR for multi-monitor support.
+ # This setting is provided for compatibility with older nVidia drivers that
+ # do not support RandR and using it on systems that support RandR is highly
+ # discouraged.
+ #
+ # By enabling this setting dunst will not be able to detect when a monitor
+ # is connected or disconnected which might break follow mode if the screen
+ # layout changes.
+ force_xinerama = false
+
+ ### mouse
+
+ # Defines list of actions for each mouse event
+ # Possible values are:
+ # * none: Don't do anything.
+ # * do_action: Invoke the action determined by the action_name rule. If there is no
+ # such action, open the context menu.
+ # * open_url: If the notification has exactly one url, open it. If there are multiple
+ # ones, open the context menu.
+ # * close_current: Close current notification.
+ # * close_all: Close all notifications.
+ # * context: Open context menu for the notification.
+ # * context_all: Open context menu for all notifications.
+ # These values can be strung together for each mouse event, and
+ # will be executed in sequence.
+ mouse_left_click = close_current
+ mouse_middle_click = do_action, close_current
+ mouse_right_click = close_all
+
+# Experimental features that may or may not work correctly. Do not expect them
+# to have a consistent behaviour across releases.
+[experimental]
+ # Calculate the dpi to use on a per-monitor basis.
+ # If this setting is enabled the Xft.dpi value will be ignored and instead
+ # dunst will attempt to calculate an appropriate dpi value for each monitor
+ # using the resolution and physical size. This might be useful in setups
+ # where there are multiple screens with very different dpi values.
+ per_monitor_dpi = false
+
+
+[urgency_low]
+ # IMPORTANT: colors have to be defined in quotation marks.
+ # Otherwise the "#" and following would be interpreted as a comment.
+ background = "#E6E1DF"
+ foreground = "#232122"
+ timeout = 2
+ # Icon for notifications with low urgency, uncomment to enable
+ #default_icon = /path/to/icon
+
+[urgency_normal]
+ background = "#232323"
+ foreground = "#E6E1DF"
+ timeout = 10
+ # Icon for notifications with normal urgency, uncomment to enable
+ #default_icon = /path/to/icon
+
+[urgency_critical]
+ background = "#F30021"
+ foreground = "#FFFFFF"
+ timeout = 0
+ # Icon for notifications with critical urgency, uncomment to enable
+ #default_icon = /path/to/icon
+
+# Every section that isn't one of the above is interpreted as a rules to
+# override settings for certain messages.
+#
+# Messages can be matched by
+# appname (discouraged, see desktop_entry)
+# body
+# category
+# desktop_entry
+# icon
+# match_transient
+# msg_urgency
+# stack_tag
+# summary
+#
+# and you can override the
+# background
+# foreground
+# format
+# frame_color
+# fullscreen
+# new_icon
+# set_stack_tag
+# set_transient
+# set_category
+# timeout
+# urgency
+# skip_display
+# history_ignore
+# action_name
+# word_wrap
+# ellipsize
+# alignment
+#
+# Shell-like globbing will get expanded.
+#
+# Instead of the appname filter, it's recommended to use the desktop_entry filter.
+# GLib based applications export their desktop-entry name. In comparison to the appname,
+# the desktop-entry won't get localized.
+#
+# SCRIPTING
+# You can specify a script that gets run when the rule matches by
+# setting the "script" option.
+# The script will be called as follows:
+# script appname summary body icon urgency
+# where urgency can be "LOW", "NORMAL" or "CRITICAL".
+#
+# NOTE: It might be helpful to run dunst -print in a terminal in order
+# to find fitting options for rules.
+
+# Disable the transient hint so that idle_threshold cannot be bypassed from the
+# client
+#[transient_disable]
+# match_transient = yes
+# set_transient = no
+#
+# Make the handling of transient notifications more strict by making them not
+# be placed in history.
+#[transient_history_ignore]
+# match_transient = yes
+# history_ignore = yes
+
+# fullscreen values
+# show: show the notifications, regardless if there is a fullscreen window opened
+# delay: displays the new notification, if there is no fullscreen window active
+# If the notification is already drawn, it won't get undrawn.
+# pushback: same as delay, but when switching into fullscreen, the notification will get
+# withdrawn from screen again and will get delayed like a new notification
+#[fullscreen_delay_everything]
+# fullscreen = delay
+#[fullscreen_show_critical]
+# msg_urgency = critical
+# fullscreen = show
+
+#[espeak]
+# summary = "*"
+# script = dunst_espeak.sh
+
+#[script-test]
+# summary = "*script*"
+# script = dunst_test.sh
+
+#[ignore]
+# # This notification will not be displayed
+# summary = "foobar"
+# skip_display = true
+
+#[history-ignore]
+# # This notification will not be saved in history
+# summary = "foobar"
+# history_ignore = yes
+
+#[skip-display]
+# # This notification will not be displayed, but will be included in the history
+# summary = "foobar"
+# skip_display = yes
+
+#[signed_on]
+# appname = Pidgin
+# summary = "*signed on*"
+# urgency = low
+#
+#[signed_off]
+# appname = Pidgin
+# summary = *signed off*
+# urgency = low
+#
+#[says]
+# appname = Pidgin
+# summary = *says*
+# urgency = critical
+#
+#[twitter]
+# appname = Pidgin
+# summary = *twitter.com*
+# urgency = normal
+#
+#[stack-volumes]
+# appname = "some_volume_notifiers"
+# set_stack_tag = "volume"
+#
+# vim: ft=cfg
diff --git a/git/.gitconfig b/git/.gitconfig
new file mode 100644
index 0000000..8c81160
--- /dev/null
+++ b/git/.gitconfig
@@ -0,0 +1,3 @@
+[user]
+ email = davidpenkow1@gmail.com
+ name = davidpkj
diff --git a/lf/.config/lf/cleaner b/lf/.config/lf/cleaner
new file mode 100755
index 0000000..a184d84
--- /dev/null
+++ b/lf/.config/lf/cleaner
@@ -0,0 +1,4 @@
+#!/bin/sh
+if [ -n "$FIFO_UEBERZUG" ]; then
+ printf '{"action": "remove", "identifier": "PREVIEW"}\n' > "$FIFO_UEBERZUG"
+fi
diff --git a/lf/.config/lf/lfrc b/lf/.config/lf/lfrc
new file mode 100755
index 0000000..6380420
--- /dev/null
+++ b/lf/.config/lf/lfrc
@@ -0,0 +1,80 @@
+# Luke's lf settings
+
+# Note on Image Previews
+# For those wanting image previews, like this system, there are four steps to
+# set it up. These are done automatically for LARBS users, but I will state
+# them here for others doing it manually.
+#
+# 1. ueberzug must be installed.
+# 2. The scope file (~/.config/lf/scope for me), must have a command similar to
+# mine to generate ueberzug images.
+# 3. A `set cleaner` line as below is a cleaner script.
+# 4. lf should be started through a wrapper script (~/.local/bin/lfub for me)
+# that creates the environment for ueberzug. This command can be be aliased
+# in your shellrc (`alias lf="lfub") or if set to a binding, should be
+# called directly instead of normal lf.
+
+# Basic vars
+set shellopts '-eu'
+set ifs "\n"
+set scrolloff 10
+set period 1
+set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml"
+set cleaner '~/.config/lf/cleaner'
+set previewer '~/.config/lf/scope'
+
+# cmds/functions
+cmd createdirectory $mkdir -p "$(echo $* | tr ' ' '\ ')"
+cmd createfile $touch "$(echo $* | tr ' ' '\ ')"
+
+cmd open ${{
+ case $(file --mime-type "$(readlink -f $f)" -b) in
+ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) localc $fx ;;
+ image/vnd.djvu|application/pdf|application/octet-stream|application/postscript) setsid -f zathura $fx >/dev/null 2>&1 ;;
+ text/*|application/json|inode/x-empty) $EDITOR $fx;;
+ image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;;
+ image/svg+xml) display -- $f ;;
+ image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|tif\|ico\)\(_large\)*$" |
+ setsid -f sxiv -aio 2>/dev/null | while read -r file; do
+ [ -z "$file" ] && continue
+ lf -remote "send select \"$file\""
+ lf -remote "send toggle"
+ done &
+ ;;
+ audio/*) mpv --audio-display=no $f ;;
+ video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;;
+ application/pdf|application/vnd*|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;;
+ application/pgp-encrypted) $EDITOR $fx ;;
+ *) for f in $fx; do setsid -f $OPENER $f >/dev/null 2>&1; done;;
+ esac
+}}
+
+cmd extract ${{
+ set -f
+ printf "%s\n\t" "$fx"
+ printf "extract?[y/N]"
+ read ans
+ [ $ans = "y" ] && extract $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 setbg ${{
+ wally "$fx" > /dev/null
+}}
+
+# Bindings
+map D delete
+map E extract
+map . set hidden!
+map b setbg
+map M push :createdirectory<space>
+map T push :createfile<space>
+map Y copy
diff --git a/lf/.config/lf/scope b/lf/.config/lf/scope
new file mode 100755
index 0000000..618bde3
--- /dev/null
+++ b/lf/.config/lf/scope
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# File preview handler for lf.
+
+set -C -f
+IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}"
+
+image() {
+ if [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1; then
+ printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$4" "$5" "$(($2-1))" "$(($3-1))" "$1" > "$FIFO_UEBERZUG"
+ else
+ mediainfo "$1"
+ fi
+}
+
+ifub() {
+ [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && command -V ueberzug >/dev/null 2>&1
+}
+
+# Note that the cache file name is a function of file information, meaning if
+# an image appears in multiple places across the machine, it will not have to
+# be regenerated once seen.
+
+case "$(file --dereference --brief --mime-type -- "$1")" in
+ image/*) image "$1" "$2" "$3" "$4" "$5" ;;
+ text/html) lynx -width="$4" -display_charset=utf-8 -dump "$1" ;;
+ text/troff) man ./ "$1" | col -b ;;
+ text/* | */xml | application/json) bat -p --theme base16 --terminal-width "$4" -f "$1" ;;
+ application/zip) atool --list -- "$1" ;;
+ audio/* | application/octet-stream) mediainfo "$1" || exit 1;;
+ video/* )
+ CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}')"
+ [ ! -f "$CACHE" ] && ffmpegthumbnailer -i "$1" -o "$CACHE" -s 0
+ image "$CACHE" "$2" "$3" "$4" "$5"
+ ;;
+ */pdf)
+ CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/lf/thumb.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}')"
+ [ ! -f "$CACHE.jpg" ] && pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
+ image "$CACHE.jpg" "$2" "$3" "$4" "$5"
+ ;;
+ *opendocument*) odt2txt "$1" ;;
+ application/pgp-encrypted) gpg -d -- "$1" ;;
+esac
+exit 1
diff --git a/neofetch/.config/neofetch/config.conf b/neofetch/.config/neofetch/config.conf
new file mode 100644
index 0000000..0a1931d
--- /dev/null
+++ b/neofetch/.config/neofetch/config.conf
@@ -0,0 +1,865 @@
+# 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 "Kernel" kernel
+ info "Host" model
+ #info "Shell" shell
+ info "Packages" packages
+ info "Resolution" resolution
+ info "DE" de
+ info "WM" wm
+ info "Uptime" uptime
+ #info "WM Theme" wm_theme
+ #info "Theme" theme
+ #info "Icons" icons
+ info "Terminal" term
+ info "Terminal Font" term_font
+ info "Memory" memory
+ info "CPU" cpu
+ info "GPU" gpu
+
+ # 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="/home/me/.config/neo.png"
+image_source="ascii"
+
+
+# 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="500px"
+
+# 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/neovim/.config/nvim/init.lua b/neovim/.config/nvim/init.lua
new file mode 100644
index 0000000..ccad37a
--- /dev/null
+++ b/neovim/.config/nvim/init.lua
@@ -0,0 +1,17 @@
+require("settings")
+require("keybinds")
+require("autocmd")
+require("plugins")
+
+-- https://sharksforarms.dev/posts/neovim-rust/
+-- https://ka.codes/posts/nvim-lspinstall
+-- https://rsdlt.github.io/posts/rust-nvim-ide-guide-walkthrough-development-debug/#why-neovim-for-rust-development
+
+-- 1. italic error signs -> probably st
+
+-- Pretty print lua table
+function _G.dump(...)
+ local objects = vim.tbl_map(vim.inspect, { ... })
+ print(unpack(objects))
+end
+
diff --git a/neovim/.config/nvim/lua/autocmd.lua b/neovim/.config/nvim/lua/autocmd.lua
new file mode 100644
index 0000000..603e6b4
--- /dev/null
+++ b/neovim/.config/nvim/lua/autocmd.lua
@@ -0,0 +1,25 @@
+-- Custom filetypes
+vim.filetype.add({
+ extension = {
+ conf = "conf",
+ nd = "markdown",
+ },
+ pattern = {
+ [".*%.env.*"] = "sh",
+ ["ignore$"] = "conf",
+ },
+})
+
+local cmd = vim.api.nvim_create_autocmd
+
+-- Go to last location when opening buffer
+cmd("BufReadPost", {
+ command = [[ if line("'\"") > 1 && line("'\"") <= line("$") | execute "normal! g`\"" | endif ]]
+})
+
+-- Highlight the region on yank
+cmd("TextYankPost", {
+ group = vim.api.nvim_create_augroup("TextYankGroup", { clear = true }),
+ callback = function() vim.highlight.on_yank({ higroup = "Visual" }) end,
+})
+
diff --git a/neovim/.config/nvim/lua/keybinds.lua b/neovim/.config/nvim/lua/keybinds.lua
new file mode 100644
index 0000000..56834b2
--- /dev/null
+++ b/neovim/.config/nvim/lua/keybinds.lua
@@ -0,0 +1,34 @@
+map = function(m, k, v)
+ vim.keymap.set(m, k, v, { silent = true })
+end
+
+-- Fix * (Keep the cursor position, don't move to next match)
+map("n", "*", "*N")
+
+-- Fix n and N. Keeping cursor in center
+map("n", "n", "nzz")
+map("n", "N", "Nzz")
+
+-- Move line up and down in NORMAL and VISUAL modes
+map("n", "<A-j>", "<cmd>move .+1<cmd>")
+map("n", "<A-k>", "<cmd>move .-2<cr>")
+map("x", "<A-j>", ":move '>+1<cr>gv=gv")
+map("x", "<A-k>", ":move '<-2<cr>gv=gv")
+
+-- map("n", "<C-space>", ":Files<CR>")
+map("n", "<C-c>", ":!compile %<cr><cr>")
+
+-- Mimic shell movements
+-- map("i", "<C-E>", "<ESC>A")
+-- map("i", "<C-A>", "<ESC>I")
+
+-- Move to the next/previous buffer
+-- map("n", "<leader>[", "<CMD>bp<CR>")
+-- map("n", "<leader>]", "<CMD>bn<CR>")
+
+-- Move to last buffer
+-- map("n", """", "<CMD>b#<CR>")
+
+exp = {}
+exp.map = map
+
diff --git a/neovim/.config/nvim/lua/plugins.lua b/neovim/.config/nvim/lua/plugins.lua
new file mode 100644
index 0000000..5b28fbb
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins.lua
@@ -0,0 +1,149 @@
+-- Automatically run :PackerCompile whenever plugins.lua is updated with an autocommand:
+vim.api.nvim_create_autocmd("BufWritePost", {
+ group = vim.api.nvim_create_augroup("PACKER", { clear = true }),
+ pattern = "plugins.lua",
+ command = "source <afile> | PackerCompile",
+})
+
+return require("packer").startup(function(use)
+ use("wbthomason/packer.nvim")
+ use("nvim-lua/plenary.nvim")
+
+ -- Color theme
+ use({
+ "catppuccin/nvim",
+ as = "catppuccin-theme",
+ run = ":CatppuccinCompile",
+ config = function() require("plugins.catppuccin") end,
+ })
+
+ --[[ use({
+ "projekt0n/github-nvim-theme",
+ config = function() require("plugins.github-theme") end,
+ }) ]]
+
+ -- Status line
+ use({
+ {
+ "nvim-lualine/lualine.nvim",
+ event = "BufEnter",
+ config = function() require("plugins.lualine") end,
+ },
+ {
+ "j-hui/fidget.nvim",
+ after = "lualine.nvim",
+ config = function() require("plugins.fidget") end,
+ },
+ })
+
+ -- Better syntax highlighting
+ use({
+ {
+ "nvim-treesitter/nvim-treesitter",
+ event = "BufEnter",
+ config = function() require("plugins.treesitter") end,
+ },
+ {
+ "nvim-treesitter/playground",
+ after = "nvim-treesitter"
+ },
+ {
+ "nvim-treesitter/nvim-treesitter-refactor",
+ after = "nvim-treesitter"
+ },
+ {
+ "nvim-treesitter/nvim-treesitter-textobjects",
+ after = "nvim-treesitter"
+ },
+ })
+
+ -- Git features
+ use({
+ "lewis6991/gitsigns.nvim",
+ event = "BufEnter",
+ config = function() require("plugins.gitsigns") end,
+ })
+
+ -- Automatic bracket pars
+ use({
+ "windwp/nvim-autopairs",
+ event = "InsertCharPre",
+ after = "nvim-cmp",
+ config = function() require("plugins.pairs") end,
+ })
+
+ -- Comment utility
+ use({
+ "numToStr/Comment.nvim",
+ event = "BufEnter",
+ config = function() require("Comment").setup() end,
+ })
+
+ -- Fuzzy file picker
+ use({
+ {
+ "nvim-telescope/telescope.nvim",
+ config = function() require("plugins.telescope") end,
+ },
+ {
+ "nvim-telescope/telescope-fzf-native.nvim",
+ run = "make",
+ after = "telescope.nvim",
+ config = function() require("telescope").load_extension("fzf") end,
+ },
+ })
+
+ -- Language Server Protocol
+ use({
+ {
+ "neovim/nvim-lspconfig",
+ -- event = "BufEnter",
+ config = function() require("plugins.lsp") end,
+ },
+ {
+ "williamboman/mason-lspconfig.nvim",
+ after = "nvim-lspconfig",
+ },
+ {
+ "williamboman/mason.nvim",
+ after = "mason-lspconfig.nvim",
+ config = function() require("plugins.mason") end,
+ },
+ })
+
+ -- Completion framework
+ use({
+ {
+ "hrsh7th/nvim-cmp",
+ -- after = "nvim-lspconfig",
+ -- event = "BufEnter",
+ config = function() require("plugins.cmp") end,
+ },
+ {
+ "hrsh7th/cmp-nvim-lsp",
+ after = "nvim-cmp",
+ },
+ {
+ "hrsh7th/cmp-vsnip",
+ after = "nvim-cmp",
+ },
+ {
+ "hrsh7th/cmp-path",
+ after = "nvim-cmp",
+ },
+ {
+ "hrsh7th/cmp-buffer",
+ after = "nvim-cmp",
+ },
+ {
+ "hrsh7th/vim-vsnip",
+ after = "nvim-cmp",
+ },
+ })
+
+ use({
+ "simrat39/rust-tools.nvim",
+ after = "nvim-cmp",
+ config = function() require("plugins.rust-tools") end,
+ })
+end)
diff --git a/neovim/.config/nvim/lua/plugins/catppuccin.lua b/neovim/.config/nvim/lua/plugins/catppuccin.lua
new file mode 100644
index 0000000..e1780e3
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/catppuccin.lua
@@ -0,0 +1,22 @@
+vim.g.catppuccin_flavour = "macchiato" -- latte, frappe, macchiato, mocha
+local colors = require("catppuccin.palettes").get_palette() -- return vim.g.catppuccin_flavour palette
+
+require("catppuccin").setup({
+ transparent_background = true,
+ styles = {
+ comments = {},
+ conditionals = {},
+ },
+ integration = {
+ telescope = true,
+ },
+ highlight_overrides = {
+ all = {
+ CursorLine = { bg = colors.base },
+ CursorLineNr = { bg = colors.base },
+ },
+ },
+})
+
+vim.cmd([[ colorscheme catppuccin ]])
+
diff --git a/neovim/.config/nvim/lua/plugins/cmp.lua b/neovim/.config/nvim/lua/plugins/cmp.lua
new file mode 100644
index 0000000..18d8fe6
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/cmp.lua
@@ -0,0 +1,29 @@
+-- https://github.com/hrsh7th/nvim-cmp#basic-configuration
+local cmp = require('cmp')
+
+cmp.setup({
+ snippet = {
+ expand = function(args)
+ vim.fn["vsnip#anonymous"](args.body)
+ end,
+ },
+ mapping = {
+ ['<S-Tab>'] = cmp.mapping.select_prev_item(),
+ ['<Tab>'] = cmp.mapping.select_next_item(),
+ ['<C-k>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-j>'] = cmp.mapping.scroll_docs(4),
+ ['<C-Space>'] = cmp.mapping.complete(),
+ ['<C-e>'] = cmp.mapping.close(),
+ ['<Return>'] = cmp.mapping.confirm({
+ behavior = cmp.ConfirmBehavior.Insert,
+ select = false,
+ })
+ },
+ sources = {
+ { name = 'nvim_lsp' },
+ { name = 'vsnip' },
+ { name = 'path' },
+ { name = 'buffer' },
+ },
+})
+
diff --git a/neovim/.config/nvim/lua/plugins/fidget.lua b/neovim/.config/nvim/lua/plugins/fidget.lua
new file mode 100644
index 0000000..f6564d5
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/fidget.lua
@@ -0,0 +1,9 @@
+require("fidget").setup({
+ text = {
+ spinner = "dots", -- animation shown when tasks are ongoing
+ done = "✓", -- character shown when all tasks are complete
+ },
+ window = {
+ blend = 0, -- &winblend for the window
+ },
+})
diff --git a/neovim/.config/nvim/lua/plugins/github-theme.lua b/neovim/.config/nvim/lua/plugins/github-theme.lua
new file mode 100644
index 0000000..b000fbb
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/github-theme.lua
@@ -0,0 +1,4 @@
+require('github-theme').setup({
+ transparent = true,
+ theme_style = "dark_default",
+})
diff --git a/neovim/.config/nvim/lua/plugins/gitsigns.lua b/neovim/.config/nvim/lua/plugins/gitsigns.lua
new file mode 100644
index 0000000..61f6238
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/gitsigns.lua
@@ -0,0 +1,27 @@
+local map = vim.keymap.set
+
+require("gitsigns").setup({
+ signs = {
+ add = { text = "+" },
+ delete = { text = "-" },
+ change = { text = "~" },
+ changedelete = { text = "⋍" },
+ },
+ on_attach = function(buf)
+ local gs = package.loaded.gitsigns
+ local opts = { buffer = buf, expr = true, replace_keycodes = false }
+
+ -- Navigation
+ map("n", "]c", "&diff ? ']c' : '<CMD>Gitsigns next_hunk<CR>'", opts)
+ map("n", "[c", "&diff ? '[c' : '<CMD>Gitsigns prev_hunk<CR>'", opts)
+
+ -- Actions
+ map({ "n", "v" }, "<leader>hr", gs.reset_hunk, { buffer = buf })
+ map({ "n", "v" }, "<leader>hs", gs.stage_hunk)
+ map("n", "<leader>hS", gs.stage_buffer, { buffer = buf })
+ map("n", "<leader>hp", gs.preview_hunk, { buffer = buf })
+
+ -- Text object
+ map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", { buffer = buf })
+ end,
+})
diff --git a/neovim/.config/nvim/lua/plugins/lsp.lua b/neovim/.config/nvim/lua/plugins/lsp.lua
new file mode 100644
index 0000000..db73c10
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/lsp.lua
@@ -0,0 +1,79 @@
+require("lspconfig")
+
+local sign = function(opts)
+ vim.fn.sign_define(opts.name, {
+ texthl = opts.name,
+ text = opts.text,
+ numhl = ''
+ })
+end
+
+sign({name = 'DiagnosticSignError', text = ''})
+sign({name = 'DiagnosticSignWarn', text = ''})
+sign({name = 'DiagnosticSignHint', text = ''})
+sign({name = 'DiagnosticSignInfo', text = ''})
+
+vim.diagnostic.config({
+ signs = true,
+ virtual_text = false,
+ update_in_insert = true,
+ underline = false,
+ severity_sort = true,
+ float = {
+ source = 'always',
+ header = '',
+ prefix = '',
+ },
+})
+
+require("keybinds")
+
+map("n", "<F2>", "<cmd>lua vim.lsp.buf.rename()<cr>")
+map("n", "<C-h>", "<cmd>lua vim.diagnostic.open_float()<cr>")
+
+--[[
+nnoremap <silent> <c-]> <cmd>lua vim.lsp.buf.definition()<CR>
+nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR>
+nnoremap <silent> gD <cmd>lua vim.lsp.buf.implementation()<CR>
+nnoremap <silent> <c-k> <cmd>lua vim.lsp.buf.signature_help()<CR>
+nnoremap <silent> 1gD <cmd>lua vim.lsp.buf.type_definition()<CR>
+nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR>
+nnoremap <silent> g0 <cmd>lua vim.lsp.buf.document_symbol()<CR>
+nnoremap <silent> gW <cmd>lua vim.lsp.buf.workspace_symbol()<CR>
+nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>
+
+-- Jump to the definition
+bufmap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<cr>')
+
+-- Jump to declaration
+bufmap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<cr>')
+
+-- Lists all the implementations for the symbol under the cursor
+bufmap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<cr>')
+
+-- Jumps to the definition of the type symbol
+bufmap('n', 'go', '<cmd>lua vim.lsp.buf.type_definition()<cr>')
+
+-- Lists all the references
+bufmap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<cr>')
+
+-- Displays a function's signature information
+bufmap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<cr>')
+
+-- Renames all references to the symbol under the cursor
+bufmap('n', '<F2>', '<cmd>lua vim.lsp.buf.rename()<cr>')
+
+-- Selects a code action available at the current cursor position
+bufmap('n', '<F4>', '<cmd>lua vim.lsp.buf.code_action()<cr>')
+bufmap('x', '<F4>', '<cmd>lua vim.lsp.buf.range_code_action()<cr>')
+
+-- Show diagnostics in a floating window
+bufmap('n', 'gl', '<cmd>lua vim.diagnostic.open_float()<cr>')
+
+-- Move to the previous diagnostic
+bufmap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<cr>')
+
+-- Move to the next diagnostic
+bufmap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<cr>')
+]]
+
diff --git a/neovim/.config/nvim/lua/plugins/lualine.lua b/neovim/.config/nvim/lua/plugins/lualine.lua
new file mode 100644
index 0000000..353e691
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/lualine.lua
@@ -0,0 +1,34 @@
+require("lualine").setup({
+ options = {
+ theme = "catppuccin",
+ component_separators = { left = "»", right = "«" },
+ section_separators = "",
+ icons_enabled = true,
+ globalstatus = true,
+ },
+ sections = {
+ lualine_a = {
+ { "mode", color = { gui = "bold" } },
+ },
+ lualine_b = {
+ { "branch" },
+ { "diff", colored = false },
+ },
+ lualine_c = {
+ { "filename", file_status = true },
+ { "diagnostics" },
+ },
+ lualine_x = {
+ { "filetype" },
+ { "fileformat", icons_enabled = false },
+ { "encoding" },
+ },
+ lualine_y = {
+ { "progress" },
+ },
+ lualine_z = {
+ { "location", color = { gui = "bold" } },
+ },
+ },
+ extensions = { "quickfix", "nvim-tree" },
+})
diff --git a/neovim/.config/nvim/lua/plugins/mason.lua b/neovim/.config/nvim/lua/plugins/mason.lua
new file mode 100644
index 0000000..3e97958
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/mason.lua
@@ -0,0 +1,10 @@
+require("mason").setup({
+ ui = {
+ icons = {
+ package_installed = "✓",
+ package_pending = "➜",
+ package_uninstalled = "✗"
+ }
+ }
+})
+require("mason-lspconfig").setup()
diff --git a/neovim/.config/nvim/lua/plugins/pairs.lua b/neovim/.config/nvim/lua/plugins/pairs.lua
new file mode 100644
index 0000000..ed0e692
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/pairs.lua
@@ -0,0 +1,2 @@
+require("nvim-autopairs").setup()
+require("cmp").event:on("confirm_done", require("nvim-autopairs.completion.cmp").on_confirm_done())
diff --git a/neovim/.config/nvim/lua/plugins/rust-tools.lua b/neovim/.config/nvim/lua/plugins/rust-tools.lua
new file mode 100644
index 0000000..c8442aa
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/rust-tools.lua
@@ -0,0 +1,24 @@
+require("rust-tools").setup({
+ tools = {
+ autoSetHints = true,
+ inlay_hints = {
+ auto = false,
+ show_parameter_hints = false,
+ parameter_hints_prefix = "",
+ other_hints_prefix = "",
+ },
+ },
+
+ -- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#rust_analyzer
+ server = {
+ settings = {
+ -- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc
+ ["rust-analyzer"] = {
+ checkOnSave = {
+ command = "clippy"
+ },
+ }
+ }
+ },
+})
+
diff --git a/neovim/.config/nvim/lua/plugins/telescope.lua b/neovim/.config/nvim/lua/plugins/telescope.lua
new file mode 100644
index 0000000..01dcb2f
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/telescope.lua
@@ -0,0 +1,64 @@
+local actions = require("telescope.actions")
+local finders = require("telescope.builtin")
+
+local action_mt = require "telescope.actions.mt"
+local action_state = require "telescope.actions.state"
+-- global for later inspection
+custom_actions = action_mt.transform_mod({
+ print_entry = function()
+ print(vim.inspect(action_state.get_selected_entry()))
+ end,
+})
+
+require("telescope").setup({
+ defaults = {
+ prompt_prefix = " ",
+ initial_mode = "insert",
+ sorting_strategy = "ascending",
+ layout_config = {
+ prompt_position = "top",
+ },
+ mappings = {
+ i = {
+ ["<C-M>"] = custom_actions['print_entry'],
+ ["<ESC>"] = actions.close,
+ ["<C-j>"] = actions.move_selection_next,
+ ["<C-k>"] = actions.move_selection_previous,
+ ["<TAB>"] = actions.toggle_selection + actions.move_selection_next,
+ ["<C-s>"] = actions.send_selected_to_qflist,
+ ["<C-q>"] = actions.send_to_qflist,
+ },
+ },
+ },
+ extensions = {
+ fzf = {
+ fuzzy = true,
+ override_generic_sorter = true,
+ override_file_sorter = true,
+ case_mode = "smart_case",
+ },
+ },
+})
+
+local Telescope = setmetatable({}, {
+ __index = function(_, k)
+ if vim.bo.filetype == "NvimTree" then
+ vim.cmd.wincmd("l")
+ end
+ return finders[k]
+ end,
+})
+
+vim.keymap.set("n", "<C-space>", function()
+ local ok = pcall(Telescope.git_files, { show_untracked = true })
+ if not ok then
+ Telescope.find_files()
+ end
+end)
+
+-- Get :help at the speed of light
+vim.keymap.set("n", "<leader>H", Telescope.help_tags)
+-- Search for string
+vim.keymap.set("n", "<leaders>s", Telescope.live_grep)
+-- Fuzzy find changed files in git
+vim.keymap.set("n", "<leader>c", Telescope.git_status)
diff --git a/neovim/.config/nvim/lua/plugins/treesitter.lua b/neovim/.config/nvim/lua/plugins/treesitter.lua
new file mode 100644
index 0000000..e3d8fbb
--- /dev/null
+++ b/neovim/.config/nvim/lua/plugins/treesitter.lua
@@ -0,0 +1,126 @@
+-- Treesitter folds
+-- vim.o.foldmethod = "expr"
+-- vim.o.foldexpr = "nvim_treesitter#foldexpr()"
+-- vim.o.foldlevelstart = 99
+
+require("nvim-treesitter.configs").setup({
+ -- nvim-treesitter/nvim-treesitter (self config)
+ auto_install = true,
+ ensure_installed = {
+ "c",
+ "lua",
+ "rust",
+ "go",
+ "javascript",
+ "typescript",
+ "tsx",
+ "markdown",
+ "markdown_inline",
+ "html",
+ "css",
+ "json",
+ "bash",
+ },
+ highlight = {
+ enable = true,
+ -- Setting this to true will run `:h syntax` and tree-sitter at the same time.
+ -- Set this to `true` if you depend on "syntax" being enabled (like for indentation).
+ -- Using this option may slow down your editor, and you may see some duplicate highlights.
+ -- Instead of true it can also be a list of languages
+ additional_vim_regex_highlighting = false,
+ },
+ indent = {
+ enable = true,
+ },
+ incremental_selection = {
+ enable = true,
+ keymaps = {
+ init_selection = "gs",
+ -- NOTE: These are visual mode mappings
+ node_incremental = "gs",
+ node_decremental = "gS",
+ scope_incremental = "<leader>gc",
+ },
+ },
+ -- nvim-treesitter/nvim-treesitter-textobjects
+ textobjects = {
+ select = {
+ enable = true,
+ -- Automatically jump forward to textobj, similar to targets.vim
+ lookahead = true,
+ keymaps = {
+ -- You can use the capture groups defined in textobjects.scm
+ ["af"] = "@function.outer",
+ ["if"] = "@function.inner",
+ ["ac"] = "@class.outer",
+ ["ic"] = "@class.inner",
+ ["al"] = "@loop.outer",
+ ["il"] = "@loop.inner",
+ ["aa"] = "@parameter.outer",
+ ["ia"] = "@parameter.inner",
+ ["uc"] = "@comment.outer",
+
+ -- Or you can define your own textobjects like this
+ -- ["iF"] = {
+ -- python = "(function_definition) @function",
+ -- cpp = "(function_definition) @function",
+ -- c = "(function_definition) @function",
+ -- java = "(method_declaration) @function",
+ -- },
+ },
+ },
+ swap = {
+ enable = true,
+ swap_next = {
+ ["<leader>a"] = "@parameter.inner",
+ ["<leader>f"] = "@function.outer",
+ ["<leader>e"] = "@element",
+ },
+ swap_previous = {
+ ["<leader>A"] = "@parameter.inner",
+ ["<leader>F"] = "@function.outer",
+ ["<leader>E"] = "@element",
+ },
+ },
+ move = {
+ enable = true,
+ set_jumps = true, -- whether to set jumps in the jumplist
+ goto_next_start = {
+ ["]f"] = "@function.outer",
+ ["]]"] = "@class.outer",
+ },
+ goto_next_end = {
+ ["]F"] = "@function.outer",
+ ["]["] = "@class.outer",
+ },
+ goto_previous_start = {
+ ["[f"] = "@function.outer",
+ ["[["] = "@class.outer",
+ },
+ goto_previous_end = {
+ ["[F"] = "@function.outer",
+ ["[]"] = "@class.outer",
+ },
+ },
+ },
+ -- windwp/nvim-ts-autotag
+ autotag = {
+ enable = true,
+ },
+ -- nvim-treesitter/playground
+ playground = {
+ enable = true,
+ disable = {},
+ updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code
+ persist_queries = false, -- Whether the query persists across vim sessions
+ },
+ -- nvim-treesitter/nvim-treesitter-refactor
+ refactor = {
+ highlight_definitions = { enable = true },
+ -- highlight_current_scope = { enable = false },
+ },
+ context_commentstring = {
+ enable = true,
+ enable_autocmd = false,
+ },
+})
diff --git a/neovim/.config/nvim/lua/settings.lua b/neovim/.config/nvim/lua/settings.lua
new file mode 100644
index 0000000..e65dbff
--- /dev/null
+++ b/neovim/.config/nvim/lua/settings.lua
@@ -0,0 +1,53 @@
+local g = vim.g
+local o = vim.o
+
+-- Amount of lines to keep below and above the cursor
+o.scrolloff = 10
+
+-- I like it this way
+o.number = true
+o.cursorline = true
+o.relativenumber = true
+o.numberwidth = 4
+
+o.signcolumn = "yes:1"
+o.shortmess = o.shortmess .. "c"
+o.completeopt = "menuone,noselect,noinsert"
+
+o.hidden = true
+o.backup = false
+o.undofile = true
+o.swapfile = false
+o.writebackup = false
+o.encoding = "utf-8"
+o.guicursor = "a:ver25-blinkwait50-blinkon50-blinkoff50"
+
+o.ruler = true
+o.showcmd = true
+o.showmode = true
+o.laststatus = 2
+
+o.smarttab = true
+o.expandtab = true
+o.autoindent = true
+o.softtabstop = -1
+o.shiftwidth = 2
+o.tabstop = 2
+
+-- Search is case insensitive unless /C or searched capitalized
+o.hlsearch = true
+o.incsearch = true
+o.smartcase = true
+o.ignorecase = true
+
+-- Invisible characters
+o.list = true
+o.listchars = "trail:·,nbsp:×,tab:->"
+
+-- Clipboard works with os
+o.clipboard = "unnamedplus"
+
+-- Map leader to space
+g.mapleader = " "
+g.maplocalleader = " "
+
diff --git a/neovim/.config/nvim/plugin/packer_compiled.lua b/neovim/.config/nvim/plugin/packer_compiled.lua
new file mode 100644
index 0000000..a561012
--- /dev/null
+++ b/neovim/.config/nvim/plugin/packer_compiled.lua
@@ -0,0 +1,333 @@
+-- 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/me/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/home/me/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/home/me/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/home/me/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua"
+local install_cpath_pattern = "/home/me/.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 = {
+ ["Comment.nvim"] = {
+ config = { "\27LJ\2\n5\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\fComment\frequire\0" },
+ loaded = false,
+ needs_bufread = false,
+ only_cond = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/Comment.nvim",
+ url = "https://github.com/numToStr/Comment.nvim"
+ },
+ ["catppuccin-theme"] = {
+ config = { "\27LJ\2\n2\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\23plugins.catppuccin\frequire\0" },
+ loaded = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/start/catppuccin-theme",
+ url = "https://github.com/catppuccin/nvim"
+ },
+ ["cmp-buffer"] = {
+ after_files = { "/home/me/.local/share/nvim/site/pack/packer/opt/cmp-buffer/after/plugin/cmp_buffer.lua" },
+ load_after = {},
+ loaded = true,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/cmp-buffer",
+ url = "https://github.com/hrsh7th/cmp-buffer"
+ },
+ ["cmp-nvim-lsp"] = {
+ after_files = { "/home/me/.local/share/nvim/site/pack/packer/opt/cmp-nvim-lsp/after/plugin/cmp_nvim_lsp.lua" },
+ load_after = {},
+ loaded = true,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/cmp-nvim-lsp",
+ url = "https://github.com/hrsh7th/cmp-nvim-lsp"
+ },
+ ["cmp-path"] = {
+ after_files = { "/home/me/.local/share/nvim/site/pack/packer/opt/cmp-path/after/plugin/cmp_path.lua" },
+ load_after = {},
+ loaded = true,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/cmp-path",
+ url = "https://github.com/hrsh7th/cmp-path"
+ },
+ ["cmp-vsnip"] = {
+ after_files = { "/home/me/.local/share/nvim/site/pack/packer/opt/cmp-vsnip/after/plugin/cmp_vsnip.lua" },
+ load_after = {},
+ loaded = true,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/cmp-vsnip",
+ url = "https://github.com/hrsh7th/cmp-vsnip"
+ },
+ ["fidget.nvim"] = {
+ config = { "\27LJ\2\n.\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\19plugins.fidget\frequire\0" },
+ load_after = {
+ ["lualine.nvim"] = true
+ },
+ loaded = false,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/fidget.nvim",
+ url = "https://github.com/j-hui/fidget.nvim"
+ },
+ ["gitsigns.nvim"] = {
+ config = { "\27LJ\2\n0\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\21plugins.gitsigns\frequire\0" },
+ loaded = false,
+ needs_bufread = false,
+ only_cond = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/gitsigns.nvim",
+ url = "https://github.com/lewis6991/gitsigns.nvim"
+ },
+ ["lualine.nvim"] = {
+ after = { "fidget.nvim" },
+ config = { "\27LJ\2\n/\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\20plugins.lualine\frequire\0" },
+ loaded = false,
+ needs_bufread = false,
+ only_cond = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/lualine.nvim",
+ url = "https://github.com/nvim-lualine/lualine.nvim"
+ },
+ ["mason-lspconfig.nvim"] = {
+ after = { "mason.nvim" },
+ load_after = {},
+ loaded = true,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/mason-lspconfig.nvim",
+ url = "https://github.com/williamboman/mason-lspconfig.nvim"
+ },
+ ["mason.nvim"] = {
+ config = { "\27LJ\2\n-\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\18plugins.mason\frequire\0" },
+ load_after = {},
+ loaded = true,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/mason.nvim",
+ url = "https://github.com/williamboman/mason.nvim"
+ },
+ ["nvim-autopairs"] = {
+ config = { "\27LJ\2\n-\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\18plugins.pairs\frequire\0" },
+ load_after = {},
+ loaded = false,
+ needs_bufread = false,
+ only_cond = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/nvim-autopairs",
+ url = "https://github.com/windwp/nvim-autopairs"
+ },
+ ["nvim-cmp"] = {
+ after = { "cmp-vsnip", "cmp-buffer", "nvim-autopairs", "cmp-nvim-lsp", "rust-tools.nvim", "vim-vsnip", "cmp-path" },
+ config = { "\27LJ\2\n+\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\16plugins.cmp\frequire\0" },
+ loaded = true,
+ only_config = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/start/nvim-cmp",
+ url = "https://github.com/hrsh7th/nvim-cmp"
+ },
+ ["nvim-lspconfig"] = {
+ after = { "mason-lspconfig.nvim" },
+ config = { "\27LJ\2\n+\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\16plugins.lsp\frequire\0" },
+ loaded = true,
+ only_config = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/start/nvim-lspconfig",
+ url = "https://github.com/neovim/nvim-lspconfig"
+ },
+ ["nvim-treesitter"] = {
+ after = { "nvim-treesitter-textobjects", "playground", "nvim-treesitter-refactor" },
+ config = { "\27LJ\2\n2\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\23plugins.treesitter\frequire\0" },
+ loaded = false,
+ needs_bufread = false,
+ only_cond = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/nvim-treesitter",
+ url = "https://github.com/nvim-treesitter/nvim-treesitter"
+ },
+ ["nvim-treesitter-refactor"] = {
+ load_after = {
+ ["nvim-treesitter"] = true
+ },
+ loaded = false,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/nvim-treesitter-refactor",
+ url = "https://github.com/nvim-treesitter/nvim-treesitter-refactor"
+ },
+ ["nvim-treesitter-textobjects"] = {
+ load_after = {
+ ["nvim-treesitter"] = true
+ },
+ loaded = false,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/nvim-treesitter-textobjects",
+ url = "https://github.com/nvim-treesitter/nvim-treesitter-textobjects"
+ },
+ ["packer.nvim"] = {
+ loaded = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/start/packer.nvim",
+ url = "https://github.com/wbthomason/packer.nvim"
+ },
+ playground = {
+ load_after = {
+ ["nvim-treesitter"] = true
+ },
+ loaded = false,
+ needs_bufread = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/playground",
+ url = "https://github.com/nvim-treesitter/playground"
+ },
+ ["plenary.nvim"] = {
+ loaded = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/start/plenary.nvim",
+ url = "https://github.com/nvim-lua/plenary.nvim"
+ },
+ ["rust-tools.nvim"] = {
+ config = { "\27LJ\2\n2\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\23plugins.rust-tools\frequire\0" },
+ load_after = {},
+ loaded = true,
+ needs_bufread = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/rust-tools.nvim",
+ url = "https://github.com/simrat39/rust-tools.nvim"
+ },
+ ["telescope-fzf-native.nvim"] = {
+ config = { "\27LJ\2\nH\0\0\3\0\4\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0'\2\3\0B\0\2\1K\0\1\0\bfzf\19load_extension\14telescope\frequire\0" },
+ load_after = {},
+ loaded = true,
+ needs_bufread = false,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/telescope-fzf-native.nvim",
+ url = "https://github.com/nvim-telescope/telescope-fzf-native.nvim"
+ },
+ ["telescope.nvim"] = {
+ after = { "telescope-fzf-native.nvim" },
+ config = { "\27LJ\2\n1\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\22plugins.telescope\frequire\0" },
+ loaded = true,
+ only_config = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/start/telescope.nvim",
+ url = "https://github.com/nvim-telescope/telescope.nvim"
+ },
+ ["vim-vsnip"] = {
+ load_after = {},
+ loaded = true,
+ needs_bufread = true,
+ path = "/home/me/.local/share/nvim/site/pack/packer/opt/vim-vsnip",
+ url = "https://github.com/hrsh7th/vim-vsnip"
+ }
+}
+
+time([[Defining packer_plugins]], false)
+-- Config for: nvim-lspconfig
+time([[Config for nvim-lspconfig]], true)
+try_loadstring("\27LJ\2\n+\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\16plugins.lsp\frequire\0", "config", "nvim-lspconfig")
+time([[Config for nvim-lspconfig]], false)
+-- Config for: catppuccin-theme
+time([[Config for catppuccin-theme]], true)
+try_loadstring("\27LJ\2\n2\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\23plugins.catppuccin\frequire\0", "config", "catppuccin-theme")
+time([[Config for catppuccin-theme]], false)
+-- Config for: nvim-cmp
+time([[Config for nvim-cmp]], true)
+try_loadstring("\27LJ\2\n+\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\16plugins.cmp\frequire\0", "config", "nvim-cmp")
+time([[Config for nvim-cmp]], false)
+-- Config for: telescope.nvim
+time([[Config for telescope.nvim]], true)
+try_loadstring("\27LJ\2\n1\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\22plugins.telescope\frequire\0", "config", "telescope.nvim")
+time([[Config for telescope.nvim]], false)
+-- Load plugins in order defined by `after`
+time([[Sequenced loading]], true)
+vim.cmd [[ packadd mason-lspconfig.nvim ]]
+vim.cmd [[ packadd mason.nvim ]]
+
+-- Config for: mason.nvim
+try_loadstring("\27LJ\2\n-\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\18plugins.mason\frequire\0", "config", "mason.nvim")
+
+vim.cmd [[ packadd telescope-fzf-native.nvim ]]
+
+-- Config for: telescope-fzf-native.nvim
+try_loadstring("\27LJ\2\nH\0\0\3\0\4\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0'\2\3\0B\0\2\1K\0\1\0\bfzf\19load_extension\14telescope\frequire\0", "config", "telescope-fzf-native.nvim")
+
+vim.cmd [[ packadd cmp-path ]]
+vim.cmd [[ packadd vim-vsnip ]]
+vim.cmd [[ packadd rust-tools.nvim ]]
+
+-- Config for: rust-tools.nvim
+try_loadstring("\27LJ\2\n2\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\23plugins.rust-tools\frequire\0", "config", "rust-tools.nvim")
+
+vim.cmd [[ packadd cmp-nvim-lsp ]]
+vim.cmd [[ packadd cmp-buffer ]]
+vim.cmd [[ packadd cmp-vsnip ]]
+time([[Sequenced loading]], false)
+vim.cmd [[augroup packer_load_aucmds]]
+vim.cmd [[au!]]
+ -- Event lazy-loads
+time([[Defining lazy-load event autocommands]], true)
+vim.cmd [[au InsertCharPre * ++once lua require("packer.load")({'nvim-autopairs'}, { event = "InsertCharPre *" }, _G.packer_plugins)]]
+vim.cmd [[au BufEnter * ++once lua require("packer.load")({'gitsigns.nvim', 'Comment.nvim', 'lualine.nvim', 'nvim-treesitter'}, { event = "BufEnter *" }, _G.packer_plugins)]]
+time([[Defining lazy-load event autocommands]], false)
+vim.cmd("augroup END")
+
+_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/qutebrowser/.config/qutebrowser/config.py b/qutebrowser/.config/qutebrowser/config.py
new file mode 100644
index 0000000..4ff32b1
--- /dev/null
+++ b/qutebrowser/.config/qutebrowser/config.py
@@ -0,0 +1,95 @@
+config.load_autoconfig(False)
+
+translucent = "#801a1a1a"
+background = "#1a1a1a"
+foreground = "#bbd2e0"
+accent = "#306b92"
+
+c.zoom.default = "175%"
+c.fonts.default_size = "19pt"
+c.fonts.default_family = "JetBrains Mono"
+
+c.downloads.location.prompt = False
+c.downloads.location.remember = False
+c.downloads.location.directory = "/home/me/downloads/"
+
+c.statusbar.widgets = ["keypress", "url", "scroll"]
+c.statusbar.show = "in-mode"
+
+c.tabs.show = "always"
+c.tabs.favicons.show = "never"
+c.tabs.title.alignment = "center"
+c.tabs.title.format = "{perc}{audio}{current_title}"
+
+c.content.blocking.method = "adblock"
+
+c.qt.highdpi = True
+c.qt.force_software_rendering = "chromium"
+
+c.colors.webpage.preferred_color_scheme = "dark"
+
+# local searxng instance stuff
+c.url.start_pages = "https://search.brave.com/"
+c.url.default_page = "https://search.brave.com/"
+c.url.searchengines = {"DEFAULT": "https://search.brave.com/search?q={}"}
+
+# fileselect stuff
+
+c.colors.completion.category.bg = accent
+c.colors.completion.category.fg = background
+c.colors.completion.even.bg = background
+c.colors.completion.odd.bg = background
+c.colors.completion.item.selected.bg = foreground
+c.colors.completion.item.selected.fg = background
+c.colors.completion.item.selected.match.fg = accent
+c.colors.completion.match.fg = accent
+c.colors.completion.scrollbar.bg = background
+c.colors.completion.scrollbar.fg = foreground
+
+c.colors.downloads.bar.bg = background
+c.colors.downloads.error.bg = background
+c.colors.downloads.error.fg = foreground
+c.colors.downloads.start.bg = background
+c.colors.downloads.start.fg = foreground
+c.colors.downloads.stop.bg = background
+c.colors.downloads.stop.fg = foreground
+
+c.colors.keyhint.bg = translucent
+c.colors.keyhint.fg = foreground
+c.colors.keyhint.suffix.fg = accent
+c.colors.hints.bg = translucent
+c.colors.hints.fg = foreground
+c.hints.border = "none"
+c.hints.radius = 0
+
+c.colors.tabs.bar.bg = background
+c.colors.tabs.even.bg = background
+c.colors.tabs.even.fg = foreground
+c.colors.tabs.odd.bg = background
+c.colors.tabs.odd.fg = foreground
+c.colors.tabs.indicator.error = accent
+c.colors.tabs.indicator.start = foreground
+c.colors.tabs.indicator.stop = background
+c.colors.tabs.selected.even.bg = accent
+c.colors.tabs.selected.even.fg = background
+c.colors.tabs.selected.odd.bg = accent
+c.colors.tabs.selected.odd.fg = background
+
+c.colors.statusbar.command.bg = background
+c.colors.statusbar.command.fg = foreground
+c.colors.statusbar.url.fg = foreground
+c.colors.statusbar.url.warn.fg = accent
+c.colors.statusbar.url.error.fg = accent
+c.colors.statusbar.url.hover.fg = foreground
+c.colors.statusbar.url.success.http.fg = foreground
+c.colors.statusbar.url.success.https.fg = foreground
+
+c.colors.messages.error.bg = background
+c.colors.messages.error.fg = foreground
+c.colors.messages.error.border = background
+c.colors.messages.info.bg = background
+c.colors.messages.info.fg = foreground
+c.colors.messages.info.border = background
+c.colors.messages.warning.bg = background
+c.colors.messages.warning.fg = foreground
+c.colors.messages.warning.border = background
diff --git a/qutebrowser/.config/qutebrowser/home.html b/qutebrowser/.config/qutebrowser/home.html
new file mode 100644
index 0000000..bff6b19
--- /dev/null
+++ b/qutebrowser/.config/qutebrowser/home.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML>
+
+<html>
+ <head>
+ <title>start</title>
+ <style>
+ body {
+ background: #1a1a1a;
+ }
+ </style>
+ </head>
+ <body>
+ </body>
+</html>
+
diff --git a/screenshot.png b/screenshot.png
new file mode 100644
index 0000000..6b383cc
--- /dev/null
+++ b/screenshot.png
Binary files differ
diff --git a/scripts/.local/bin/personal/appmenu b/scripts/.local/bin/personal/appmenu
new file mode 100755
index 0000000..3c96a8f
--- /dev/null
+++ b/scripts/.local/bin/personal/appmenu
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Launching
+rofi -no-lazy-grab -show drun \
+-display-drun "Applications :" -drun-display-format "{name}" \
+-matching fuzzy \
+-font "Hack 20" \
+
diff --git a/scripts/.local/bin/personal/bar/battery b/scripts/.local/bin/personal/bar/battery
new file mode 100755
index 0000000..53c1cb0
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/battery
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+percent="$(acpi | awk '{print $4}')"
+state="$(acpi | awk '{print $3}')"
+time="$(acpi | awk '{print $5}')"
+
+state0=""
+state1=""
+state2=""
+state3=""
+state4=""
+
+if [[ "$1" = "condition" ]]; then
+ if ((${percent::-2} <= 10)) ; then
+ echo "1"
+ else
+ echo "0"
+ fi
+
+ exit 0
+fi
+
+if [ "${state::-1}" == "Discharging" ]; then
+ echo "${percent::-1} (${time::-3} ↓)"
+else
+ echo "${percent::-1} (${time::-3} ↑)"
+fi
diff --git a/scripts/.local/bin/personal/bar/brightness b/scripts/.local/bin/personal/bar/brightness
new file mode 100755
index 0000000..a7dbe73
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/brightness
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+# A script to manage screen and keyboard brightness on my machine
+# Depends on: bash, brightnessctl
+# By David Penkowoj, 2021/06/24
+
+MTR_VALUE=15
+KBD_VALUE=1
+
+SWITCH="$1"
+
+case $SWITCH in
+ "help")
+ printf "Possible arguments:\n"
+ printf "===================\n"
+ printf "load - loads brightness from save\n"
+ printf "save - saves current brightness\n"
+ printf "up - increases brightness by 5 percent and saves\n"
+ printf "down - decreases brightness by 5 percent and saves\n"
+ printf "smallup - increases brightness by 1 percent and saves\n"
+ printf "smalldown - decreases brightness by 1 percent and saves\n"
+ printf "status - show brightness of a device"
+ ;;
+ "load")
+ brightnessctl --device='intel_backlight' set "$MTR_VALUE%"
+ brightnessctl --device='smc::kbd_backlight' set 0 # "$KBD_VALUE%"
+ ;;
+ "save")
+ M="$(brightnessctl --device='intel_backlight' | grep -Eo "[0-9]+" | head -n 2 | tail -n 1)"
+ K="$(brightnessctl --device='smc::kbd_backlight' | grep -Eo "[0-9]+" | head -n 2 | tail -n 1)"
+ sed -i "s/MTR_VALUE=$MTR_VALUE/MTR_VALUE=$M/g" "$0"
+ sed -i "s/KBD_VALUE=$KBD_VALUE/KBD_VALUE=$K/g" "$0"
+ ;;
+ "smalldown")
+ if [[ "$2" = "monitor" ]]; then brightnessctl --device='intel_backlight' set 1-%; fi
+ if [[ "$2" = "keyboard" ]]; then brightnessctl --device='smc::kbd_backlight' set 1-%; fi
+ brightness save
+ ;;
+ "smallup")
+ if [[ "$2" = "monitor" ]]; then brightnessctl --device='intel_backlight' set +1%; fi
+ if [[ "$2" = "keyboard" ]]; then brightnessctl --device='smc::kbd_backlight' set +1%; fi
+ brightness save
+ ;;
+ "down")
+ if [[ "$2" = "monitor" ]]; then brightnessctl --device='intel_backlight' set 5-%; fi
+ if [[ "$2" = "keyboard" ]]; then brightnessctl --device='smc::kbd_backlight' set 5-%; fi
+ brightness save
+ ;;
+ "up")
+ if [[ "$2" = "monitor" ]]; then brightnessctl --device='intel_backlight' set +5%; fi
+ if [[ "$2" = "keyboard" ]]; then brightnessctl --device='smc::kbd_backlight' set +5%; fi
+ brightness save
+ ;;
+ "get")
+ M="$(brightnessctl --device='intel_backlight' | grep -Eo "[0-9]+" | head -n 2 | tail -n 1)"
+ K="$(brightnessctl --device='smc::kbd_backlight' | grep -Eo "[0-9]+" | head -n 2 | tail -n 1)"
+ if [[ "$2" = "monitor" ]]; then echo "$M%"; fi
+ if [[ "$2" = "keyboard" ]]; then echo "$K%"; fi
+ ;;
+ *)
+ printf "Monitor:\n"
+ brightnessctl --device='intel_backlight' | tail -n 3 | sed 's/\t/- /g'
+ printf "Keyboard:\n"
+ brightnessctl --device='smc::kbd_backlight' | tail -n 3 | sed 's/\t/- /g'
+ ;;
+esac
+
diff --git a/scripts/.local/bin/personal/bar/datetime b/scripts/.local/bin/personal/bar/datetime
new file mode 100755
index 0000000..31f2144
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/datetime
@@ -0,0 +1,9 @@
+#!/bin/dash
+
+if [ "$1" = "date" ]; then
+ echo "$(date '+%a. %Y-%m-%d')"
+elif [ "$1" = "time" ]; then
+ echo "$(date '+%H:%M %Z')"
+else
+ echo "$(date '+%a. %Y-%m-%d %H:%M %Z')"
+fi
diff --git a/scripts/.local/bin/personal/bar/getrpm b/scripts/.local/bin/personal/bar/getrpm
new file mode 100755
index 0000000..14f07cc
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/getrpm
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+sensors | grep RPM | awk '{print $4} { sum += $4; n++ } END { if (n > 0) print sum / n; }'
diff --git a/scripts/.local/bin/personal/bar/lights b/scripts/.local/bin/personal/bar/lights
new file mode 100755
index 0000000..e347188
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/lights
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# A script to log screen and keyboard brighness
+# Dependencies: bash, brightnessctl
+# By David Penkowoj, 2022/02/08
+
+MTR_BRIGHTNESS="$(brightnessctl --device="intel_backlight" i | sed -z 's/.*(\|).*//g')"
+KBD_BRIGHTNESS="$(brightnessctl --device="smc::kbd_backlight" i | sed -z 's/.*(\|).*//g')"
+
+if [[ "$KBD_BRIGHTNESS" = "0%" ]]; then
+ echo "$MTR_BRIGHTNESS"
+else
+ echo "$MTR_BRIGHTNESS | $KBD_BRIGHTNESS"
+fi
diff --git a/scripts/.local/bin/personal/bar/load b/scripts/.local/bin/personal/bar/load
new file mode 100755
index 0000000..dec7f60
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/load
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+grep 'cpu ' /proc/stat | awk '{cpu_usage=($2+$4)*100/($2+$4+$5)} {printf "%0.2f%", cpu_usage}'
+printf "\n"
diff --git a/scripts/.local/bin/personal/bar/network b/scripts/.local/bin/personal/bar/network
new file mode 100755
index 0000000..915d482
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/network
@@ -0,0 +1,13 @@
+#!/bin/dash
+
+ssid="$(nmcli device show | grep "GENERAL.CONNECTION" -m 1 | awk '{print $2}')"
+
+if [ -n "$ssid" ]; then
+ if [ "$ssid" = "--" ]; then
+ echo ""
+ else
+ echo "$ssid"
+ fi
+else
+ echo "..."
+fi
diff --git a/scripts/.local/bin/personal/bar/packages b/scripts/.local/bin/personal/bar/packages
new file mode 100755
index 0000000..348b0b7
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/packages
@@ -0,0 +1,9 @@
+#!/bin/dash
+
+updates=$(checkupdates | wc -l)
+
+if [ -z "$updates" ]; then
+ printf "Fully Updated"
+else
+ printf "$updates updates" updates
+fi
diff --git a/scripts/.local/bin/personal/bar/player b/scripts/.local/bin/personal/bar/player
new file mode 100755
index 0000000..85366c0
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/player
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+STATUS="$(playerctl status)"
+
+if [[ "$STATUS" == "Playing" ]]; then
+ TITLE="$(playerctl metadata title)"
+ ARTIST="$(playerctl metadata artist)"
+
+ printf "%s - %s" "$ARTIST" "$TITLE"
+else
+ echo ""
+fi
diff --git a/scripts/.local/bin/personal/bar/status b/scripts/.local/bin/personal/bar/status
new file mode 100755
index 0000000..10c33de
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/status
@@ -0,0 +1,30 @@
+#!/bin/dash
+
+# loads colors
+. ~/.cache/wal/colors.sh
+
+SEPARATOR=" "
+
+# default color button
+use() {
+ printf "%s^c%s^^b%s^ %s ^b%s^ %s ^b%s^" "$SEPARATOR" "$color0" "$color1" "$1" "$color2" "$2" "$color0"
+}
+
+# show in specified color if specified condition is true
+usecolorif() {
+ if [ "$3" = "1" ]; then
+ printf "%s^c%s^^b%s^ %s ^c%s^^b%s^ %s ^b%s^" "$SEPARATOR" "$color1" "$color0" "$1" "$color2" "$color0" "$2" "$color0"
+ else
+ use "$1" "$2"
+ fi
+}
+
+# only show if content is not zero
+useif() {
+ if [ -n "$2" ]; then
+ use "$1" "$2"
+ fi
+}
+
+# actual string
+echo "$(useif "" "$(updates read)")$(useif "" "$(volume)")$(use "" "$(lights)")$(usecolorif "ﴞ" "$(battery)" "$(battery condition)")$(useif "說" "$(network)")$(use "" "$(datetime time)")$(use "" "$(datetime date)")"
diff --git a/scripts/.local/bin/personal/bar/temp b/scripts/.local/bin/personal/bar/temp
new file mode 100755
index 0000000..4a9589f
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/temp
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+echo "$(sensors | grep "Package id 0:" | awk '{print $4}')"
diff --git a/scripts/.local/bin/personal/bar/title b/scripts/.local/bin/personal/bar/title
new file mode 100755
index 0000000..5d2ed60
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/title
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+TITLE="$(xtitle)"
+
+if [[ -z "$TITLE" ]]; then
+ echo "Enjoying the Desktop - No waifu, no laifu"
+else
+ echo "$TITLE"
+fi
+
diff --git a/scripts/.local/bin/personal/bar/updates b/scripts/.local/bin/personal/bar/updates
new file mode 100755
index 0000000..c0a3f4a
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/updates
@@ -0,0 +1,16 @@
+#!/bin/dash
+
+storage=0
+
+if [ "$1" = "read" ]; then
+ if [ "$storage" != "0" ]; then
+ echo "$storage"
+ else
+ echo ""
+ fi
+elif [ "$1" = "run" ]; then
+ sudo pacman -Syu && updates check
+elif [ "$1" = "check" ]; then
+ packages="$(checkupdates | wc -l)"
+ sed -i "s/storage=$storage/storage=$packages/g" "$0"
+fi
diff --git a/scripts/.local/bin/personal/bar/volume b/scripts/.local/bin/personal/bar/volume
new file mode 100755
index 0000000..f709d6a
--- /dev/null
+++ b/scripts/.local/bin/personal/bar/volume
@@ -0,0 +1,10 @@
+#!/bin/dash
+
+SINK="$(pactl get-default-sink)"
+VOLUME="$(pactl get-sink-volume $SINK | awk '{print $5}')"
+
+if [ "$VOLUME" != "0%" ]; then
+ echo "$VOLUME"
+else
+ echo ""
+fi
diff --git a/scripts/.local/bin/personal/batestimate b/scripts/.local/bin/personal/batestimate
new file mode 100755
index 0000000..b8d70aa
--- /dev/null
+++ b/scripts/.local/bin/personal/batestimate
@@ -0,0 +1,17 @@
+#!/usr/bin/env python3
+
+charge_now_path = "/sys/class/power_supply/BAT0/charge_now"
+current_now_path = "/sys/class/power_supply/BAT0/current_now"
+
+f = open(charge_now_path, "r")
+charge_now = int(f.readlines()[0])
+f = open(current_now_path, "r")
+current_now = int(f.readlines()[0])
+
+ratio = charge_now / current_now * 100
+
+hours = ratio / 60
+minutes = ratio % 60
+
+print(str(hours) + ":" + str(minutes))
+
diff --git a/scripts/.local/bin/personal/colorconvert b/scripts/.local/bin/personal/colorconvert
new file mode 100755
index 0000000..6777f23
--- /dev/null
+++ b/scripts/.local/bin/personal/colorconvert
@@ -0,0 +1,28 @@
+#!/usr/bin/env python3
+
+import sys
+import colorsys
+
+def hsl2hex(color):
+ # regex = r'hsl\(\s*(\d+),\s*(\d+)%,\s*(\d+)%\s*\);'
+ # lines = [re.findall(regex,line) for line in one_dark_syn.split('\n')]
+ # rgbs = [colorsys.hsv_to_rgb(int(line[1][0])/360, int(line[0][1])/100, int(line[0][2])/100) for line in lines if line]
+ # rgbhex = ["".join("%03X" % round(i*255) for i in rgb) for rgb in rgbs]
+
+ colors = color.split(",")
+ color_rgb_frac = colorsys.hls_to_rgb(int(colors[0]) / 360, int(colors[2]) / 100, int(color[1]) / 100)
+ print(color_rgb_frac)
+ color_rgb = [round(value / 255) for value in color_rgb_frac]
+ print(color_rgb)
+ color_hex = [",".join("%3X" % rgb for rgb in color_rgb)]
+ print(color_hex)
+ return color_hex
+
+# https://www.rapidtables.com/convert/color/hsl-to-rgb.html
+
+if __name__ == "__main__":
+ if sys.argv[1] == "hsl2hex":
+ print(hsl2hex(sys.argv[2]))
+ else:
+ print("Usage example:\ncolorconvert hsl2hex 78,50,60")
+
diff --git a/scripts/compile b/scripts/.local/bin/personal/compile
index f038562..028ae11 100755
--- a/scripts/compile
+++ b/scripts/.local/bin/personal/compile
@@ -1,19 +1,12 @@
#!/bin/bash
# A script to compile any (here defined) type of text file to a target format
-# Depends on: bash, basename, pdflatex
+# Depends on: bash, basename, pdflatex, pandoc, asciidoctor
# By David Penkowoj, 2021/08/02
-# Function to compile .lp to .pdf files
-LP_TO_PDF() {
- lilypond "$1" --pdf -s -o "$2.pdf" &&
- printf "Successfully compiled %s to %s\n" "$1" "$2.pdf" ||
- printf "[ Error ] Couldn't compile %s\n" "$1"
-}
-
# Function to compile .md to .pdf files
-MD_TO_PDF() {
- pandoc "$1" -o "$2.pdf" &&
+ADOC_TO_HTML() {
+ asciidoctor "$1" &&
printf "Successfully compiled %s to %s\n" "$1" "$2.pdf" ||
printf "[ Error ] Couldn't compile %s\n" "$1"
}
@@ -22,13 +15,32 @@ MD_TO_PDF() {
TEX_TO_PDF() {
printf "If the script seems to hang, try pressing <Enter>\n"
- pdflatex "$1" > /dev/null &&
- pdflatex "$1" > /dev/null && # This is to ensure certain tex elements being drawn
+ pdflatex -shell-escape "$1" > /dev/null &&
+ pdflatex -shell-escape "$1" > /dev/null && # This is to ensure certain tex elements being drawn
rm -rf "$2.toc" "$2.log" "$2.aux" &&
printf "Successfully compiled %s to %s\n" "$2.tex" "$2.pdf" ||
printf "[ Error ] Couldn't compile %s\n" "$2.tex"
}
+# Function to compile .lp to .pdf files
+LP_TO_PDF() {
+ lilypond "$1" --pdf -s -o "$2.pdf" &&
+ printf "Successfully compiled %s to %s\n" "$1" "$2.pdf" ||
+ printf "[ Error ] Couldn't compile %s\n" "$1"
+}
+
+# Function to compile .md to .pdf files
+MD_TO_PDF() {
+ TMP="/tmp/compilemd"
+
+ sed '/^!.*/d' "$1" > "$TMP" && # This enables comments with "!"
+ sed 's/^\\!/!/g' "$TMP" "$TMP" && # This enables escaping with "\!"
+
+ pandoc "$TMP" -o "$2.pdf" &&
+ printf "Successfully compiled %s to %s\n" "$1" "$2.pdf" ||
+ printf "[ Error ] Couldn't compile %s\n" "$1"
+}
+
# Check if file exists
if [[ -e "$1" ]]; then
# Determine filename and extension
@@ -43,22 +55,27 @@ if [[ -e "$1" ]]; then
# Do the respective compile actions
case "$EXTENSION" in
+ "adoc")
+ ADOC_TO_HTML "$1" "${FILENAME%.*}"
+ ;;
"tex")
TEX_TO_PDF "$1" "${FILENAME%.*}"
;;
- "md")
- MD_TO_PDF "$1" "${FILENAME%.*}"
+ "pov")
+ povray "$1"
;;
"lp")
- LP_TO_PDF "$1" "${FILENAME%.*}"
+ MD_TO_PDF "$1" "${FILENAME%.*}"
;;
- "pov")
- povray "$1"
+ "md")
+ MD_TO_PDF "$1" "${FILENAME%.*}"
;;
*)
printf "[ Error ] There is no entry on how to handle '%s' files.\n" "$EXTENSION"
exit 1
esac
+else
+ printf "[ Error ] No file specified!\n"
fi
exit 0
diff --git a/scripts/.local/bin/personal/compresspdf b/scripts/.local/bin/personal/compresspdf
new file mode 100755
index 0000000..8ad1b07
--- /dev/null
+++ b/scripts/.local/bin/personal/compresspdf
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# PDF Compressor
+# Dependencies: ghostscript
+
+if [[ -e $1 ]]; then
+ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile="${1}_compressed.pdf" "$1" &&
+ printf "done" || printf "error"
+fi
diff --git a/scripts/.local/bin/personal/dayprogress b/scripts/.local/bin/personal/dayprogress
new file mode 100755
index 0000000..f872893
--- /dev/null
+++ b/scripts/.local/bin/personal/dayprogress
@@ -0,0 +1,6 @@
+#!/usr/bin/env python3
+
+from datetime import datetime
+
+minute = datetime.now().minute
+print(minute / 60 * 100)
diff --git a/scripts/.local/bin/personal/dlmusic b/scripts/.local/bin/personal/dlmusic
new file mode 100755
index 0000000..c0177ac
--- /dev/null
+++ b/scripts/.local/bin/personal/dlmusic
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# A script to not make me type all that argument **** when I want to download music.
+# Yes I am lazy.
+
+if [[ -n "$1" ]]; then
+ youtube-dl "$1" --extract-audio -i -o "%(title)s.%(ext)s" --audio-format mp3 &&
+ exit 0 ||
+ exit 1
+else
+ printf "[ Error ] Not enough arguments.\n"
+ exit 1
+fi
diff --git a/scripts/.local/bin/personal/ed b/scripts/.local/bin/personal/ed
new file mode 100755
index 0000000..9e7b99f
--- /dev/null
+++ b/scripts/.local/bin/personal/ed
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# A script to start editing files
+# Dependencies: bash, basename, date
+# By David Penkowoj, 2022-02-18
+
+# implement: fzf -f QUERY
+
+DATE="$(date +'%Y-%m-%d')"
+FILE="$(basename $1)"
+DIR="$(dirname $1)"
+
+if [[ "$DIR" = "." ]]; then
+ if [[ -f "$DATE-A-$FILE" ]]; then
+ "$EDITOR" "$DATE-A-$FILE"
+ else
+ "$EDITOR" "$DATE-B-$FILE"
+ fi
+else
+ cd "$DIR"
+ if [[ -f "$DATE-A-$FILE" ]]; then
+ "$EDITOR" "$DATE-A-$FILE"
+ else
+ "$EDITOR" "$DATE-B-$FILE"
+ fi
+fi
+
diff --git a/scripts/.local/bin/personal/edge2 b/scripts/.local/bin/personal/edge2
new file mode 100755
index 0000000..376bebb
--- /dev/null
+++ b/scripts/.local/bin/personal/edge2
@@ -0,0 +1,31 @@
+#!/bin/env python
+
+import sys
+import cv2
+import math
+import numpy as np
+import matplotlib.pyplot as plt
+
+def correct():
+ img = cv2.imread(sys.argv[1])
+ rows,cols,ch = img.shape
+
+ pts1 = np.float32([[98, 786],[20, 3268],[1800, 3268],[1798, 850]])
+
+ ratio=1.6
+ cardH=math.sqrt((pts1[2][0]-pts1[1][0])*(pts1[2][0]-pts1[1][0])+(pts1[2][1]-pts1[1][1])*(pts1[2][1]-pts1[1][1]))
+ cardW=ratio*cardH;
+ pts2 = np.float32([[pts1[0][0],pts1[0][1]], [pts1[0][0]+cardW, pts1[0][1]], [pts1[0][0]+cardW, pts1[0][1]+cardH], [pts1[0][0], pts1[0][1]+cardH]])
+
+ M = cv2.getPerspectiveTransform(pts1,pts2)
+
+ offsetSize=500
+ transformed = np.zeros((int(cardW+offsetSize), int(cardH+offsetSize)), dtype=np.uint8);
+ dst = cv2.warpPerspective(img, M, transformed.shape)
+
+ plt.subplot(121),plt.imshow(img),plt.title('Input')
+ plt.subplot(122),plt.imshow(dst),plt.title('Output')
+ plt.show()
+
+if __name__ == "__main__":
+ correct()
diff --git a/scripts/.local/bin/personal/edgedetect b/scripts/.local/bin/personal/edgedetect
new file mode 100755
index 0000000..34d26c8
--- /dev/null
+++ b/scripts/.local/bin/personal/edgedetect
@@ -0,0 +1,31 @@
+#!/bin/env python3
+
+import sys
+import cv2 as cv
+import numpy as np
+import matplotlib.pyplot as plt
+from skimage.io import imread, imshow
+from skimage.color import rgb2gray
+from skimage.feature import match_template, peak_local_max
+from skimage import transform
+
+def detect():
+ #img = cv.imread(cv.samples.findFile(sys.argv[1]))
+ #if img is None:
+ # sys.exit("Could not read the image.")
+ #_,img = cv.threshold(img, 128, 255, cv.THRESH_BINARY)
+
+ image= cv.imread(sys.argv[1])
+ gray= cv.cvtColor(image, cv.COLOR_BGR2GRAY)
+ gray= np.float32(gray)
+ harris_corners= cv.cornerHarris(gray, 3, 3, 0.05)
+ kernel= np.ones((7,7), np.uint8)
+ harris_corners= cv.dilate(harris_corners, kernel, iterations= 2)
+ image[harris_corners > 0.025 * harris_corners.max()]= [255,127,127]
+ cv.imshow('Harris Corners', image)
+ cv.waitKey(0)
+ cv.destroyAllWindows()
+
+
+if __name__ == "__main__":
+ detect()
diff --git a/scripts/.local/bin/personal/eve b/scripts/.local/bin/personal/eve
new file mode 100755
index 0000000..556bde0
--- /dev/null
+++ b/scripts/.local/bin/personal/eve
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+wally "$(ls /home/me/images/wallpapers | dmenu)"
diff --git a/scripts/.local/bin/personal/extract b/scripts/.local/bin/personal/extract
new file mode 100755
index 0000000..b51c413
--- /dev/null
+++ b/scripts/.local/bin/personal/extract
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+if [ -f $1 ] ; then
+ case $1 in
+ *.tar.bz2) tar -xvjf $1 --one-top-level ;;
+ *.tar.gz) tar -xvzf $1 --one-top-level ;;
+ # *.bz2) bunzip2 $1 ;;
+ *.rar) unrar x $1 ;;
+ *.gz) gunzip $1 ;;
+ *.tar) tar xf $1 ;;
+ *.tbz2) tar xjf $1 ;;
+ *.tgz) tar xzf $1 ;;
+ *.zip) unzip $1 ;;
+ # *.Z) uncompress $1;;
+ # * .7z) 7z x $1 ;;
+ *.deb) ar x $1 ;;
+ *.tar.xz) tar xf $1 ;;
+ *.tar.zst) tar xf $1 ;;
+ *) echo "'$1' cannot be extracted via ex()" ;;
+ esac
+else
+ echo "'$1' is not a valid file"
+fi
diff --git a/scripts/getibusinput b/scripts/.local/bin/personal/getibusinput
index 4d52273..4d52273 100755
--- a/scripts/getibusinput
+++ b/scripts/.local/bin/personal/getibusinput
diff --git a/scripts/.local/bin/personal/hdmi b/scripts/.local/bin/personal/hdmi
new file mode 100755
index 0000000..ea687ef
--- /dev/null
+++ b/scripts/.local/bin/personal/hdmi
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# HDMI_ACTIVE="$(xrandr | grep ' connected' | grep 'HDMI' | awk '{print $1}')"
+
+# if [[ ! -z "$HDMI_ACTIVE" ]]; then
+# echo "active"
+# fi
+
+HDMI_ACTIVE="$(grep '^connected' /sys/class/drm/card0/*HDMI*/status)"
+
+if [[ ! -z "$HDMI_ACTIVE" ]]; then
+ echo active
+fi
+
diff --git a/scripts/.local/bin/personal/hdqwallsdownload b/scripts/.local/bin/personal/hdqwallsdownload
new file mode 100755
index 0000000..72498a9
--- /dev/null
+++ b/scripts/.local/bin/personal/hdqwallsdownload
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+# A utility to download all images from a specific website give the exact url
+
+# https://hdqwalls.com/2880x1800/anime-girl-wallpapers/page/2
+# https://hdqwalls.com/search?q=Genshin+Impact&page=2
+
+FILE="/tmp/wallpaperhtml"
+
+download() {
+ curl -s "$1" > "$FILE"
+
+ IMAGES=$(cat "$FILE" | pup img.thumbnail | grep -o '"http[^"]\+"' | sed 's/\/wallpapers\/thumb/\/download/g' | sed 's/.jpg"$/-2880x1800.jpg/g' | sed 's/"//g')
+ COUNTER=0
+
+ for IMG in $IMAGES; do
+ let COUNTER++
+ NAME="$(basename $IMG)"
+
+ echo "[ Download ] ($COUNTER) $NAME"
+ curl -s "$IMG" > "$NAME"
+ sleep 2
+ done
+
+ echo -e "\nFinished!"
+}
+
+if [[ -z "$1" ]]; then
+ echo "[ Error ] Please provide a URL"
+ exit 1
+fi
+
+download "$1"
+
diff --git a/scripts/.local/bin/personal/infoboard b/scripts/.local/bin/personal/infoboard
new file mode 100755
index 0000000..a220709
--- /dev/null
+++ b/scripts/.local/bin/personal/infoboard
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# bspc desktop -f '^11' &&
+#
+# windows="$(bspc query -N -d '^11' -n .window)"
+#
+# if [ "$windows" = "2" ]
+# then
+ # exit 0;
+# else
+ # for number in {$windows}
+ # do
+ # bspc node -c && sleep 0.1
+ # done
+#
+ # kitty zsh -c ". ~/.config/zsh/.zshrc; zeit" &
+ # kitty zsh -c ". ~/.config/zsh/.zshrc; cmatrix" &
+# fi
+
+if [[ -n "$(eww windows | grep -o '\*')" ]]; then
+ eww close info
+else
+ eww open info
+fi
+
diff --git a/scripts/.local/bin/personal/kivytest b/scripts/.local/bin/personal/kivytest
new file mode 100755
index 0000000..55699ed
--- /dev/null
+++ b/scripts/.local/bin/personal/kivytest
@@ -0,0 +1,30 @@
+#!/usr/bin/env python3
+
+import kivy
+import random
+
+from kivy.app import App
+from kivy.uix.button import Button
+from kivy.uix.boxlayout import BoxLayout
+
+red = [1,0,0,1]
+green = [0,1,0,1]
+blue = [0,0,1,1]
+purple = [1,0,1,1]
+
+class h1(App):
+ def build(self):
+ layout = BoxLayout(padding=20)
+ colors = [red, green, blue, purple]
+
+ for i in range(8):
+ btn = Button(text="Button #%s" % (i+1),
+ background_color=random.choice(colors)
+ )
+
+ layout.add_widget(btn)
+ return layout
+
+if __name__ == "__main__":
+ app = h1()
+ app.run()
diff --git a/scripts/.local/bin/personal/klimperklamper b/scripts/.local/bin/personal/klimperklamper
new file mode 100755
index 0000000..6bd15ad
--- /dev/null
+++ b/scripts/.local/bin/personal/klimperklamper
@@ -0,0 +1,129 @@
+#!/usr/bin/env python3
+
+import random
+import sys
+import os
+
+slowLength = [ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2 ]
+mediumLength = [ 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4 ]
+fastLength = [ 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16 ]
+notes = [ "c", "cis", "d", "dis", "e", "f", "fis", "g", "gis", "a", "ais", "b" ]
+string = '\\version "2.22.1"\n\\header {\ntitle = "Die Dissonanz der Schulzeit"\nsubtitle = "Musik Klausurersatzleistung"\ncomposer = "David Penkowoj"\ncopyright = ""\ntagline = ""\n}\n\\score {\n\\fixed c\' {\n\\time 4/4\n\\tempo "Allegro" 4 = 160\n'
+
+variationDict = {
+ "normal": [],
+ "mirror": [],
+ "reverse": [],
+ "reverseMirror": [],
+}
+
+def mirror(noteCopy):
+ result = []
+ mirrorAxisNote = noteCopy[0]
+ baseIndex = notes.index(mirrorAxisNote)
+
+ for note in noteCopy:
+ index = notes.index(note)
+ newNoteIndex = index + (- 2 * (index - baseIndex))
+
+ result.append(notes[newNoteIndex % len(notes)])
+
+ return result
+
+def reverse(noteCopy):
+ return noteCopy[::-1]
+
+def reverseMirror(noteCopy):
+ return mirror(noteCopy)[::-1]
+
+def randomVariation(rand):
+ rand = random.randrange(1, 5)
+
+ if rand == 1:
+ return variationDict["normal"].copy(), "Grundreihe"
+ if rand == 2:
+ return variationDict["mirror"].copy(), "Umkehrung"
+ if rand == 3:
+ return variationDict["reverse"].copy(), "Krebs"
+ if rand == 4:
+ return variationDict["reverseMirror"].copy(), "Krebsumkehrung"
+
+def getLength(notesCopy, location):
+ lengthList = []
+
+ if location <= 1 or location >= 7:
+ lengthList = slowLength.copy()
+ elif location >= 3 and location <= 5:
+ lengthList = fastLength.copy()
+ else:
+ lengthList = mediumLength.copy()
+
+ # asd
+
+ return lengthList
+
+def changeLength(notesCopy, location):
+ for note in notesCopy:
+ index = notesCopy.index(note)
+ rand = random.choice(lengthList)
+ notesCopy[index] = (f"{note}{rand} ")
+ lengthList.remove(rand)
+
+ return notesCopy
+
+def generateRows():
+ notesCopy = notes.copy()
+ random.shuffle(notesCopy)
+
+ variationDict["normal"] = notesCopy
+ variationDict["mirror"] = mirror(notesCopy)
+ variationDict["reverse"] = reverse(notesCopy)
+ variationDict["reverseMirror"] = reverseMirror(notesCopy)
+
+def makeMusescore():
+ global string
+
+ string = "#!/usr/local/bin/xdotool\n\n"
+
+ generateRows()
+
+ for i in range(4):
+ articualtedVariation, variationType = randomVariation(i)
+ getLength(articualtedVariation, i)
+
+ variation = " ".join(articualtedVariation)
+ string = f"{string}type {variation}\nkey Enter\n"
+
+ with open("/tmp/klimperklamper", "w") as file:
+ file.write(string)
+ file.close()
+
+ os.system("nvim /tmp/klimperklamper")
+
+def makePDF():
+ global string
+
+ generateRows()
+
+ for i in range(8):
+ articualtedVariation, variationType = randomVariation()
+ changeLength(articualtedVariation, i)
+
+ variation = " ".join(articualtedVariation)
+ string = f"{string}\\mark \\markup \\smaller \\italic {variationType} {variation}|\\break\n"
+ string = string + "}\n\\midi {} \n\\layout {\nindent = 0\\mm\n}\n}"
+
+ with open("/tmp/klimperklamper", "w") as file:
+ file.write(string)
+ file.close()
+
+ os.system("nvim /tmp/klimperklamper")
+ os.system("lilypond -o /tmp/klimperklamper /tmp/klimperklamper")
+ os.system("zathura /tmp/klimperklamper.pdf")
+
+if __name__ == "__main__":
+ if sys.argv[1] == "musescore":
+ makeMusescore()
+ else:
+ makePDF()
+
diff --git a/scripts/.local/bin/personal/launchworkingenv b/scripts/.local/bin/personal/launchworkingenv
new file mode 100755
index 0000000..5b35542
--- /dev/null
+++ b/scripts/.local/bin/personal/launchworkingenv
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# bspc desktop -f '^1' &&
+# kitty -d documents &
+tabura &
diff --git a/scripts/.local/bin/personal/lfub b/scripts/.local/bin/personal/lfub
new file mode 100755
index 0000000..9012f50
--- /dev/null
+++ b/scripts/.local/bin/personal/lfub
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+# This is a wrapper script for lb that allows it to create image previews with
+# ueberzug. This works in concert with the lf configuration file and the
+# lf-cleaner script.
+
+set -e
+
+cleanup() {
+ exec 3>&-
+ rm "$FIFO_UEBERZUG"
+}
+
+if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
+ lf "$@"
+else
+ [ ! -d "$HOME/.cache/lf" ] && mkdir -p "$HOME/.cache/lf"
+ export FIFO_UEBERZUG="$HOME/.cache/lf/ueberzug-$$"
+ mkfifo "$FIFO_UEBERZUG"
+ ueberzug layer -s <"$FIFO_UEBERZUG" -p json &
+ exec 3>"$FIFO_UEBERZUG"
+ trap cleanup HUP INT QUIT TERM PWR EXIT
+ lf "$@" 3>&-
+fi
diff --git a/scripts/.local/bin/personal/lockscreen b/scripts/.local/bin/personal/lockscreen
new file mode 100755
index 0000000..bf4e825
--- /dev/null
+++ b/scripts/.local/bin/personal/lockscreen
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+[ -e "/tmp/lockscrot.png" ] && sudo rm /tmp/lockscrot.png
+[ -e "/etc/lightdm/lockscreen.png" ] && sudo rm /etc/lightdm/lockscreen.png
+
+scrot -e 'sudo mv -f $f /tmp/lockscrot.png'
+sudo convert /tmp/lockscrot.png -filter Gaussian -blur 0x15 /etc/lightdm/lockscreen.png
+dm-tool lock
diff --git a/scripts/.local/bin/personal/mats b/scripts/.local/bin/personal/mats
new file mode 100755
index 0000000..ba299a8
--- /dev/null
+++ b/scripts/.local/bin/personal/mats
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+wmname LG3D
+exec matlab -r "s = settings;s.matlab.desktop.DisplayScaleFactor.PersonalValue=2;quit" -nodesktop -nosplash
diff --git a/scripts/.local/bin/personal/mountmenu b/scripts/.local/bin/personal/mountmenu
new file mode 100755
index 0000000..1b5a007
--- /dev/null
+++ b/scripts/.local/bin/personal/mountmenu
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# Colors
+BACKGROUND="#1A1A1A"
+INACTIVE="#1F1F1F"
+ACTIVE="#186673"
+TEXT="#FFFFFF"
+
+# Launching
+RESULT="$(echo "$(lsblk -l | awk '$3 == "1" {print $0}' | grep part)" | rofi -no-lazy-grab -dmenu \
+-display-drun "Applications :" -drun-display-format "{name}" \
+-hide-scrollbar true \
+-matching fuzzy \
+-bw 0 \
+-lines 5 \
+-line-padding 15 \
+-padding 20 \
+-width 50 \
+-font "Hack 20" \
+-color-enabled true \
+-color-window "$BACKGROUND, $BACKGROUND, $BACKGROUND" \
+-color-normal "$INACTIVE, $TEXT, $INACTIVE, $ACTIVE, $TEXT" | awk '{print $1}' )"
+
+mkdir -p /mnt/mount
+sudo mount "/dev/$RESULT" /mnt/mount && notify-send "Erfolg" || notify-send "Fehler"
+
+# I like this font
+# -font "Fantasque Sans Mono 20" \
diff --git a/scripts/music b/scripts/.local/bin/personal/music
index 54104b0..54104b0 100755
--- a/scripts/music
+++ b/scripts/.local/bin/personal/music
diff --git a/scripts/mute b/scripts/.local/bin/personal/mute
index 1103c0e..1103c0e 100755
--- a/scripts/mute
+++ b/scripts/.local/bin/personal/mute
diff --git a/scripts/.local/bin/personal/pdfcompress b/scripts/.local/bin/personal/pdfcompress
new file mode 100755
index 0000000..aa972ea
--- /dev/null
+++ b/scripts/.local/bin/personal/pdfcompress
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="c_$1" "$1"
+
diff --git a/scripts/.local/bin/personal/pipes.sh b/scripts/.local/bin/personal/pipes.sh
new file mode 100755
index 0000000..73346ef
--- /dev/null
+++ b/scripts/.local/bin/personal/pipes.sh
@@ -0,0 +1,385 @@
+#!/usr/bin/env bash
+# pipes.sh: Animated pipes terminal screensaver.
+# https://github.com/pipeseroni/pipes.sh
+#
+# Copyright (c) 2015-2018 Pipeseroni/pipes.sh contributors
+# Copyright (c) 2013-2015 Yu-Jie Lin
+# Copyright (c) 2010 Matthew Simpson
+#
+# 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.
+
+
+VERSION=1.3.0
+
+M=32768 # Bash RANDOM maximum + 1
+p=1 # number of pipes
+f=75 # frame rate
+s=13 # probability of straight fitting
+r=2000 # characters limit
+t=0 # iteration counter for -r character limit
+w=80 # terminal size
+h=24
+
+# ab -> sets[][idx] = a*4 + b
+# 0: up, 1: right, 2: down, 3: left
+# 00 means going up , then going up -> ┃
+# 12 means going right, then going down -> ┓
+sets=(
+ "┃┏ ┓┛━┓ ┗┃┛┗ ┏━"
+ "│╭ ╮╯─╮ ╰│╯╰ ╭─"
+ "│┌ ┐┘─┐ └│┘└ ┌─"
+ "║╔ ╗╝═╗ ╚║╝╚ ╔═"
+ "|+ ++-+ +|++ +-"
+ "|/ \/-\ \|/\ /-"
+ ".. .... .... .."
+ ".o oo.o o.oo o."
+ "-\ /\|/ /-\/ \|" # railway
+ "╿┍ ┑┚╼┒ ┕╽┙┖ ┎╾" # knobby pipe
+)
+SETS=() # rearranged all pipe chars into individul elements for easier access
+
+# pipes'
+x=() # current position
+y=()
+l=() # current directions
+ # 0: up, 1: right, 2: down, 3: left
+n=() # new directions
+v=() # current types
+c=() # current escape codes
+
+# selected pipes'
+V=() # types (indexes to sets[])
+C=() # color indices for tput setaf
+VN=0 # number of selected types
+CN=0 # number of selected colors
+E=() # pre-generated escape codes from BOLD, NOCOLOR, and C
+
+# switches
+RNDSTART=0 # randomize starting position and direction
+BOLD=1
+NOCOLOR=0
+KEEPCT=0 # keep pipe color and type
+
+
+# print help message in 72-char width
+print_help() {
+ local cgap
+ printf -v cgap '%*s' $((15 - ${#COLORS})) ''
+ cat <<HELP
+Usage: $(basename $0) [OPTION]...
+Animated pipes terminal screensaver.
+
+ -p [1-] number of pipes (D=1)
+ -t [0-$((${#sets[@]} - 1))] pipe type (D=0)
+ -t c[16 chars] custom pipe type
+ -c [0-$COLORS]${cgap}pipe color INDEX (TERM=$TERM), can be
+ hexadecimal with '#' prefix
+ (D=-c 1 -c 2 ... -c 7 -c 0)
+ -f [20-100] framerate (D=75)
+ -s [5-15] going straight probability, 1 in (D=13)
+ -r [0-] reset after (D=2000) characters, 0 if no reset
+ -R randomize starting position and direction
+ -B no bold effect
+ -C no color
+ -K keep pipe color and type when crossing edges
+ -h print this help message
+ -v print version number
+
+Note: -t and -c can be used more than once.
+HELP
+}
+
+
+# parse command-line options
+# It depends on a valid COLORS which is set by _CP_init_termcap_vars
+parse() {
+ # test if $1 is a natural number in decimal, an integer >= 0
+ is_N() {
+ [[ -n $1 && -z ${1//[0-9]} ]]
+ }
+
+
+ # test if $1 is a hexadecimal string
+ is_hex() {
+ [[ -n $1 && -z ${1//[0-9A-Fa-f]} ]]
+ }
+
+
+ # print error message for invalid argument to standard error, this
+ # - mimics getopts error message
+ # - use all positional parameters as error message
+ # - has a newline appended
+ # $arg and $OPTARG are the option name and argument set by getopts.
+ pearg() {
+ printf "%s: -$arg invalid argument -- $OPTARG; %s\n" "$0" "$*" >&2
+ }
+
+
+ OPTIND=1
+ while getopts "p:t:c:f:s:r:RBCKhv" arg; do
+ case $arg in
+ p)
+ if is_N "$OPTARG" && ((OPTARG > 0)); then
+ p=$OPTARG
+ else
+ pearg 'must be an integer and greater than 0'
+ return 1
+ fi
+ ;;
+ t)
+ if [[ "$OPTARG" = c???????????????? ]]; then
+ V+=(${#sets[@]})
+ sets+=("${OPTARG:1}")
+ elif is_N "$OPTARG" && ((OPTARG < ${#sets[@]})); then
+ V+=($OPTARG)
+ else
+ pearg 'must be an integer and from 0 to' \
+ "$((${#sets[@]} - 1)); or a custom type"
+ return 1
+ fi
+ ;;
+ c)
+ if [[ $OPTARG == '#'* ]]; then
+ if ! is_hex "${OPTARG:1}"; then
+ pearg 'unrecognized hexadecimal string'
+ return 1
+ fi
+ if ((16$OPTARG >= COLORS)); then
+ pearg 'hexadecimal must be from #0 to' \
+ "#$(printf '%X' $((COLORS - 1)))"
+ return 1
+ fi
+ C+=($((16$OPTARG)))
+ elif is_N "$OPTARG" && ((OPTARG < COLORS)); then
+ C+=($OPTARG)
+ else
+ pearg "must be an integer and from 0 to $((COLORS - 1));" \
+ 'or a hexadecimal string with # prefix'
+ return 1
+ fi
+ ;;
+ f)
+ if is_N "$OPTARG" && ((OPTARG >= 20 && OPTARG <= 100)); then
+ f=$OPTARG
+ else
+ pearg 'must be an integer and from 20 to 100'
+ return 1
+ fi
+ ;;
+ s)
+ if is_N "$OPTARG" && ((OPTARG >= 5 && OPTARG <= 15)); then
+ s=$OPTARG
+ else
+ pearg 'must be an integer and from 5 to 15'
+ return 1
+ fi
+ ;;
+ r)
+ if is_N "$OPTARG"; then
+ r=$OPTARG
+ else
+ pearg 'must be a non-negative integer'
+ return 1
+ fi
+ ;;
+ R) RNDSTART=1;;
+ B) BOLD=0;;
+ C) NOCOLOR=1;;
+ K) KEEPCT=1;;
+ h)
+ print_help
+ exit 0
+ ;;
+ v) echo "$(basename -- "$0") $VERSION"
+ exit 0
+ ;;
+ *)
+ return 1
+ esac
+ done
+
+ shift $((OPTIND - 1))
+ if (($#)); then
+ printf "$0: illegal arguments -- $*; no arguments allowed\n" >&2
+ return 1
+ fi
+}
+
+
+cleanup() {
+ # clear out standard input
+ read -t 0.001 && cat </dev/stdin>/dev/null
+
+ tput reset # fix for konsole, see pipeseroni/pipes.sh#43
+ tput rmcup
+ tput cnorm
+ stty echo
+ printf "$SGR0"
+ exit 0
+}
+
+
+resize() {
+ w=$(tput cols) h=$(tput lines)
+}
+
+
+init_pipes() {
+ # +_CP_init_pipes
+ local i
+
+ ci=$((KEEPCT ? 0 : CN * RANDOM / M))
+ vi=$((KEEPCT ? 0 : VN * RANDOM / M))
+ for ((i = 0; i < p; i++)); do
+ ((
+ n[i] = 0,
+ l[i] = RNDSTART ? RANDOM % 4 : 0,
+ x[i] = RNDSTART ? w * RANDOM / M : w / 2,
+ y[i] = RNDSTART ? h * RANDOM / M : h / 2,
+ v[i] = V[vi]
+ ))
+ c[i]=${E[ci]}
+ ((ci = (ci + 1) % CN, vi = (vi + 1) % VN))
+ done
+ # -_CP_init_pipes
+}
+
+
+init_screen() {
+ stty -echo
+ tput smcup
+ tput civis
+ tput clear
+ trap cleanup HUP TERM
+
+ resize
+ trap resize SIGWINCH
+}
+
+
+main() {
+ # simple pre-check of TERM, tput's error message should be enough
+ tput -T "$TERM" sgr0 >/dev/null || return $?
+
+ # +_CP_init_termcap_vars
+ COLORS=$(tput colors) # COLORS - 1 == maximum color index for -c argument
+ SGR0=$(tput sgr0)
+ SGR_BOLD=$(tput bold)
+ # -_CP_init_termcap_vars
+
+ parse "$@" || return $?
+
+ # +_CP_init_VC
+ # set default values if not by options
+ ((${#V[@]})) || V=(0)
+ VN=${#V[@]}
+ ((${#C[@]})) || C=(1 2 3 4 5 6 7 0)
+ CN=${#C[@]}
+ # -_CP_init_VC
+
+ # +_CP_init_E
+ # generate E[] based on BOLD (SGR_BOLD), NOCOLOR, and C for each element in
+ # C, a corresponding element in E[] =
+ # SGR0
+ # + SGR_BOLD, if BOLD
+ # + tput setaf C, if !NOCOLOR
+ local i
+ for ((i = 0; i < CN; i++)) {
+ E[i]=$SGR0
+ ((BOLD)) && E[i]+=$SGR_BOLD
+ ((NOCOLOR)) || E[i]+=$(tput setaf ${C[i]})
+ }
+ # -_CP_init_E
+
+ # +_CP_init_SETS
+ local i j
+ for ((i = 0; i < ${#sets[@]}; i++)) {
+ for ((j = 0; j < 16; j++)) {
+ SETS+=("${sets[i]:j:1}")
+ }
+ }
+ unset i j
+ # -_CP_init_SETS
+
+ init_screen
+ init_pipes
+
+ # any key press exits the loop and this script
+ trap 'break 2' INT
+
+ local i
+ while REPLY=; do
+ read -t 0.0$((1000 / f)) -n 1 2>/dev/null
+ case "$REPLY" in
+ P) ((s = s < 15 ? s + 1 : s));;
+ O) ((s = s > 3 ? s - 1 : s));;
+ F) ((f = f < 100 ? f + 1 : f));;
+ D) ((f = f > 20 ? f - 1 : f));;
+ B) ((BOLD = (BOLD + 1) % 2));;
+ C) ((NOCOLOR = (NOCOLOR + 1) % 2));;
+ K) ((KEEPCT = (KEEPCT + 1) % 2));;
+ ?) break;;
+ esac
+ for ((i = 0; i < p; i++)); do
+ # New position:
+ # l[] direction = 0: up, 1: right, 2: down, 3: left
+ # +_CP_newpos
+ ((l[i] % 2)) && ((x[i] += -l[i] + 2, 1)) || ((y[i] += l[i] - 1))
+ # -_CP_newpos
+
+ # Loop on edges (change color on loop):
+ # +_CP_warp
+ ((!KEEPCT && (x[i] >= w || x[i] < 0 || y[i] >= h || y[i] < 0))) \
+ && { c[i]=${E[CN * RANDOM / M]}; ((v[i] = V[VN * RANDOM / M])); }
+ ((x[i] = (x[i] + w) % w,
+ y[i] = (y[i] + h) % h))
+ # -_CP_warp
+
+ # new turning direction:
+ # $((s - 1)) in $s, going straight, therefore n[i] == l[i];
+ # and 1 in $s that pipe makes a right or left turn
+ #
+ # s * RANDOM / M - 1 == 0
+ # n[i] == -1
+ # => n[i] == l[i] + 1 or l[i] - 1
+ # +_CP_newdir
+ ((
+ n[i] = s * RANDOM / M - 1,
+ n[i] = n[i] >= 0 ? l[i] : l[i] + (2 * (RANDOM % 2) - 1),
+ n[i] = (n[i] + 4) % 4
+ ))
+ # -_CP_newdir
+
+ # Print:
+ # +_CP_print
+ printf '\e[%d;%dH%s%s' \
+ $((y[i] + 1)) $((x[i] + 1)) ${c[i]} \
+ "${SETS[v[i] * 16 + l[i] * 4 + n[i]]}"
+ # -_CP_print
+ l[i]=${n[i]}
+ done
+ ((r > 0 && t * p >= r)) && tput reset && tput civis && t=0 || ((t++))
+ done
+
+ cleanup
+}
+
+
+# when being sourced, $0 == bash, only invoke main when they are the same
+[[ "$0" != "$BASH_SOURCE" ]] || main "$@"
diff --git a/scripts/.local/bin/personal/powermenu b/scripts/.local/bin/personal/powermenu
new file mode 100755
index 0000000..0a26582
--- /dev/null
+++ b/scripts/.local/bin/personal/powermenu
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+
+UPTIME=$(uptime -p | sed -e 's/up //g')
+DWM_PID="$(pidof dwm)"
+
+OPTION_CANCEL="Cancel"
+OPTION_SHUTDOWN="Shutdown"
+OPTION_REBOOT="Restart"
+OPTION_LOGOUT="Logout"
+OPTION_LOCK="Lock"
+
+OPTIONS="$OPTION_CANCEL\n$OPTION_SHUTDOWN\n$OPTION_REBOOT\n$OPTION_LOCK\n$OPTION_LOGOUT"
+SELECTED="$(echo -e "$OPTIONS" | dmenu -i -l 5 -p "Uptime: $UPTIME" -z 700 -h 30 -y 900 -x 1090 -fn 'JetBrains Mono:size=19')"
+
+case $SELECTED in
+ $OPTION_SHUTDOWN)
+ sudo systemctl poweroff
+ ;;
+ $OPTION_REBOOT)
+ sudo systemctl reboot
+ ;;
+ $OPTION_LOCK)
+ slock
+ ;;
+ $OPTION_LOGOUT)
+ kill -TERM $DWM_PID
+ ;;
+esac
diff --git a/scripts/prepare b/scripts/.local/bin/personal/prepare
index bb6d231..bb6d231 100755
--- a/scripts/prepare
+++ b/scripts/.local/bin/personal/prepare
diff --git a/scripts/.local/bin/personal/retab b/scripts/.local/bin/personal/retab
new file mode 100755
index 0000000..f1b63c6
--- /dev/null
+++ b/scripts/.local/bin/personal/retab
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+currentid=$(xdotool getwindowfocus)
+tabbedid=$(xdotool search --class tabbed | tail -n1)
+childid="$(xwininfo -id $tabbedid -children | awk 'NR==7 {print $1}')"
+
+if [[ $currentid -eq $childid ]]; then
+ xdotool windowreparent $childid "$(xwininfo -root | awk '/Window id:/ {print $4}')"
+else
+ xdotool windowreparent $currentid $tabbedid
+fi
+
diff --git a/scripts/.local/bin/personal/rica b/scripts/.local/bin/personal/rica
new file mode 100755
index 0000000..5004785
--- /dev/null
+++ b/scripts/.local/bin/personal/rica
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+
+# A script to update the colors in specific config files for easy ricing.
+# Depenencies:
+# By David Penkowoj, 2022-03-18
+
+import os
+
+# Get colors and loop over relevant configs
+def replace_color_configs():
+ with open("/home/me/.cache/wal/oldcolors") as old_color_file:
+ old_colors = [ color.replace("\n", "") for color in old_color_file.readlines() ]
+
+ with open("/home/me/.cache/wal/colors") as new_color_file:
+ new_colors = [ color.replace("\n", "") for color in new_color_file.readlines() ]
+
+ for config in relevant:
+ config(old_colors, new_colors)
+
+def find_and_replace_config(file_path, old_colors, new_colors):
+ with open(file_path, "r") as file:
+ data = file.read()
+
+ for color in old_colors:
+ if data.find(color) != -1:
+ index = old_colors.index(color)
+ data = data.replace(color, new_colors[index])
+
+ with open(file_path, "w") as file:
+ file.write(data)
+
+# Change config for zathura
+def change_zathura(old_colors, new_colors):
+ file_path = "/home/me/.config/zathura/zathurarc"
+
+ find_and_replace_config(file_path, old_colors, new_colors)
+
+def change_qutebrowser(old_colors, new_colors):
+ file_path = "/home/me/.config/qutebrowser/config.py"
+
+ find_and_replace_config(file_path, old_colors, new_colors)
+
+# change_nvim
+# change_dunst,
+
+relevant = [
+ change_zathura,
+ change_qutebrowser,
+]
+
+if __name__ == "__main__":
+ os.system('xrdb merge "$HOME/.cache/wal/colors.Xresources"')
+ replace_color_configs()
diff --git a/scripts/.local/bin/personal/rmbackup b/scripts/.local/bin/personal/rmbackup
new file mode 100755
index 0000000..1d1a241
--- /dev/null
+++ b/scripts/.local/bin/personal/rmbackup
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+HOST="root@remarkable"
+DEST="$HOME/documents/remarkable/backup/$(date +%Y-%m-%d)"
+
+ERRORS=0
+
+function loglin() { printf "\e[1;$1m%.s─\e[1;30m" $(seq 1 $(tput cols)) ; }
+
+function loginf() { loglin 34 ; echo -e "\e[1;34m[ Info ]\e[1;30m $1" ; loglin 34 ; }
+function logerr() { ((ERRORS=ERRORS+1)) ; loglin 31 ; echo -e "\e[1;31m[ Error ]\e[1;30m $1" ; loglin 31 ; }
+
+function copyfrom() {
+ scp -r "$1" "$2" &&
+ loginf "Successfully backed up data: $1 → $2" ||
+ logerr "Failed to back up data: $1 → $2" ;
+}
+
+mkdir -p "$DEST/files" && cd "$DEST" &&
+loginf "Created backup directory at $DEST/" ||
+logerr "Failed to create back up directory" ;
+
+copyfrom "$HOST:/usr/share/remarkable" "$DEST"
+copyfrom "$HOST:~/.local/share/remarkable/xochitl" "$DEST/files"
+copyfrom "$HOST:~/.config/remarkable/xochitl.conf" "$DEST/xochitl.conf"
+copyfrom "$HOST:/usr/bin/xochitl" "$DEST/xochitl"
+
+echo -e "\n"
+loginf "\e[0mFinished back up with $ERRORS error(s)!"
diff --git a/scripts/.local/bin/personal/rotdir b/scripts/.local/bin/personal/rotdir
new file mode 100755
index 0000000..86da6db
--- /dev/null
+++ b/scripts/.local/bin/personal/rotdir
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# When I open an image from the file manager in sxiv (the image viewer), I want
+# to be able to press the next/previous keys to key through the rest of the
+# images in the same directory. This script "rotates" the content of a
+# directory based on the first chosen file, so that if I open the 15th image,
+# if I press next, it will go to the 16th etc. Autistic, I know, but this is
+# one of the reasons that sxiv is great for being able to read standard input.
+
+[ -z "$1" ] && echo "usage: rotdir regex 2>&1" && exit 1
+base="$(basename "$1")"
+ls "$PWD" | awk -v BASE="$base" 'BEGIN { lines = ""; m = 0; } { if ($0 == BASE) { m = 1; } } { if (!m) { if (lines) { lines = lines"\n"; } lines = lines""$0; } else { print $0; } } END { print lines; }'
diff --git a/scripts/.local/bin/personal/tabmenu b/scripts/.local/bin/personal/tabmenu
new file mode 100755
index 0000000..4c0404b
--- /dev/null
+++ b/scripts/.local/bin/personal/tabmenu
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# Colors
+BACKGROUND="#1A1A1A"
+INACTIVE="#1F1F1F"
+ACTIVE="#186673"
+TEXT="#FFFFFF"
+
+# Launching
+rofi -no-lazy-grab -show windowcd \
+-display-drun "Applications :" -drun-display-format "{name}" \
+-hide-scrollbar true \
+-matching fuzzy \
+-bw 0 \
+-lines 5 \
+-line-padding 15 \
+-padding 20 \
+-width 50 \
+-font "Hack 20" \
+-color-enabled true \
+-color-window "$BACKGROUND, $BACKGROUND, $BACKGROUND" \
+-color-normal "$INACTIVE, $TEXT, $INACTIVE, $ACTIVE, $TEXT" \
+
+# I like this font
+# -font "Fantasque Sans Mono 20" \
diff --git a/scripts/.local/bin/personal/tabura b/scripts/.local/bin/personal/tabura
new file mode 100755
index 0000000..1ebdece
--- /dev/null
+++ b/scripts/.local/bin/personal/tabura
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+tabbed -c zathura -e
diff --git a/scripts/.local/bin/personal/trans b/scripts/.local/bin/personal/trans
new file mode 100755
index 0000000..755b5cf
--- /dev/null
+++ b/scripts/.local/bin/personal/trans
@@ -0,0 +1,119 @@
+#!/usr/bin/env python3
+
+# A script to fetch information from https://dict.cc/ and display it in the terminal
+# Depends on: python3, beautifulsoup4, tabulate, pynput, requests
+# By David Penkowoj, 2021/01/11
+
+# https://stackoverflow.com/questions/65328213/how-to-prevent-certain-certain-keys-from-sending-input-in-python
+
+import sys
+import requests
+from pynput import keyboard
+from tabulate import tabulate
+from bs4 import BeautifulSoup
+
+index = 0
+entry = "Allgemein"
+dictionary = {}
+found_rows = []
+keys = []
+
+def get_file():
+ file = "/tmp/$1.dictcc"
+ link = "http://www.dict.cc/?s=" + sys.argv[1]
+ agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36"
+ headers = { "User-Agent": agent }
+
+ return requests.get(link, headers = headers, allow_redirects=True)
+
+def setup():
+ file = get_file()
+
+ parsed = BeautifulSoup(file.content, features = "html5lib")
+
+ found_table = parsed.body.find("table", attrs = {"cellspacing": "1"})
+
+ global found_rows
+ found_rows = found_table.find_all("tr")
+ found_rows[0].decompose()
+
+ print(found_rows[1].text + "\n")
+ found_rows[1].decompose()
+
+ global dictionary
+ dictionary = {entry: []}
+
+def add_translation(items):
+ global entry
+ global dictionary
+ translation = [];
+
+ for item in items:
+ translation.append(item.text)
+ if len(translation) == 0:
+ continue
+
+ dictionary[entry].append(translation)
+
+def stop():
+ print(chr(27) + "[2J")
+ print("Exit")
+ sys.exit(0);
+
+def showpage(key):
+ global index
+ if not safe_index(index):
+ stop()
+
+ print(chr(27) + "[2J")
+ print(tabulate(dictionary[key], [key.ljust(60, " "), "-".ljust(60, " ")], tablefmt="fancy_grid"))
+ print("\n[j] next, [k] previous, [q] quit")
+
+def safe_index(i):
+ if i >= 0 and i < len(keys):
+ return True
+ return False
+
+def on_press(key):
+ global index
+
+ if "char" in dir(key):
+ if key.char == 'q' or not safe_index(index):
+ stop()
+
+ if key.char == 'j':
+ index=(index + 1)
+ if key.char == 'k':
+ index=(index - 1)
+
+ showpage(keys[index])
+
+def main():
+ global keys
+ global found_rows
+ for row in found_rows:
+ found_items = row.find_all("td", attrs = {"dir": "ltr"})
+ if len(found_items) == 0:
+ found_items = row.find_all("td", attrs = {"colspan": "4"})
+ if len(found_items) == 1:
+ global entry
+ global dictionary
+ entry = found_items[0].text
+ dictionary[entry] = []
+ continue
+ else:
+ continue
+
+ #dfn div
+
+ add_translation(found_items)
+
+ keys = list(dictionary)
+ showpage(keys[index])
+
+ with keyboard.Listener(suppress=True, on_press=on_press) as listener:
+ listener.join()
+
+setup()
+main()
+
diff --git a/scripts/.local/bin/personal/volctl b/scripts/.local/bin/personal/volctl
new file mode 100755
index 0000000..6dc6e6b
--- /dev/null
+++ b/scripts/.local/bin/personal/volctl
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# A script to manage the volume on my system universally
+
+sink="$(pactl list short sinks | grep "pci-0000_00_1b.0" | awk '{print $1}')"
+volume="$(pamixer --get-volume)"
+
+if [ "$1" = "increase" ]
+then
+ pactl set-sink-volume "$sink" +5%
+elif [ "$1" = "decrease" ]
+then
+ pactl set-sink-volume "$sink" -5%
+elif [ "$1" = "mute" ]
+then
+ pactl set-sink-volume "$sink" 0%
+elif [ "$1" = "check" ]
+then
+ printf "%s\n" "$volume"
+else
+ printf "[ Error ] Not enough arguments.\n"
+fi
diff --git a/scripts/.local/bin/personal/wally b/scripts/.local/bin/personal/wally
new file mode 100755
index 0000000..91ab90e
--- /dev/null
+++ b/scripts/.local/bin/personal/wally
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+# A script to generate a theme for my system (auto-rice)
+# Dependencies: pywal, feh, xdotool
+# By David Penkowoj, 2022-01-31
+
+# Usage: wally {path to image} [backend] [saturation value]
+
+backend="colorz"
+saturation="0.5"
+wallpaperDir="$HOME/images/wallpapers"
+cachedWallpaperFile="$HOME/.config/wallpaper"
+
+setTheme() {
+ echo "Overwriting previous color backup with current colors."
+ mv "$HOME/.cache/wal/colors" "$HOME/.cache/wal/oldcolors"
+ echo "Generating new color scheme."
+ wal -i "$1" -q -b "#1a1a1a" --saturate "$saturation"
+ echo "Caching wallpaper."
+ cp "$1" "$cachedWallpaperFile"
+ echo "Setting wallpaper."
+ feh --bg-fill "$cachedWallpaperFile"
+ echo "Updating various software with rica."
+ rica
+ echo "Refreshing window manager."
+ xdotool key Super_L+r
+}
+
+if [[ -n "$3" ]]; then
+ echo "Got saturation value '$3'."
+ saturation="$3"
+else
+ echo "Did not recieve saturation value as third argument"
+fi
+
+if [[ -n "$2" ]]; then
+ echo "Got backend value '$2'."
+ backend="$2"
+else
+ echo "Did not recieve backend value as second argument"
+fi
+
+if [[ -f "$1" ]]; then
+ echo "Image found in relative directory."
+ setTheme "$1"
+else
+ echo "File not found, searching wallpaper directory."
+
+ if [[ -f "$wallpaperDir/$1" ]]; then
+ echo "Image found in wallpaper directory."
+ setTheme "$wallpaperDir/$1"
+ else
+ echo "No image found."
+ fi
+fi
+
diff --git a/scripts/.local/bin/personal/zeit b/scripts/.local/bin/personal/zeit
new file mode 100755
index 0000000..f31894d
--- /dev/null
+++ b/scripts/.local/bin/personal/zeit
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+# Don't ask. It's really weird and painful to explain.
+
+tty-clock -C 3 -f %d.%m.%Y -sc
diff --git a/scripts/compresspdf b/scripts/compresspdf
deleted file mode 100755
index 704f2eb..0000000
--- a/scripts/compresspdf
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-# PDF Compressor
-# Dependencies: ghostscript
-
-[[ -e $1 ]] && gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile="${1}_compressed.pdf" "$1" && printf "done" || printf "error"
diff --git a/scripts/dlmusic b/scripts/dlmusic
deleted file mode 100755
index aeda290..0000000
--- a/scripts/dlmusic
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-# A script to not make me type all that argument **** when I want to download music.
-# Yes I am lazy.
-
-if [ "$1" ]
-then
- youtube-dl "$1" --extract-audio -i -o "%(title)s.%(ext)s" --audio-format mp3
- exit 0
-else
- printf "[ Error ] Not enough arguments.\n"
- exit 1
-fi
diff --git a/sxhkd/.config/sxhkd/mediarc b/sxhkd/.config/sxhkd/mediarc
new file mode 100644
index 0000000..91ef9c6
--- /dev/null
+++ b/sxhkd/.config/sxhkd/mediarc
@@ -0,0 +1,114 @@
+### ESSENTIALS
+
+## Restart sxhkd
+super + alt + s
+ pkill -USR1 -x sxhkd
+
+## Reparent Window to tabbed
+super + t
+ retab
+
+## Take a Screenshot
+super + p
+ flameshot full -p /home/me/images/screenshots
+
+## Take a cropped Screenshot
+super + shift + p
+ flameshot full -p /home/me/images/screenshots
+
+## Mountmenu
+## Powermenu
+## Theme changer?
+
+### MEDIA
+
+## Monitor brightness down by 1
+XF86MonBrightnessDown
+ brightness smalldown monitor; \
+ dunstify -u low -r "110" "Monitor: $(xbacklight -get)%"
+
+## Monitor brightness up by 1
+XF86MonBrightnessUp
+ brightness smallup monitor; \
+ dunstify -u low -r "110" "Monitor: $(xbacklight -get)%"
+
+## Monitor brightness down by 5
+shift + XF86MonBrightnessDown
+ brightness down monitor; \
+ dunstify -u low -r "110" "Monitor: $(xbacklight -get)%"
+
+## Monitor brightness up by 5
+shift + XF86MonBrightnessUp
+ brightness up monitor; \
+ dunstify -u low -r "110" "Monitor: $(xbacklight -get)%"
+
+## Remove redshift
+super + XF86MonBrightnessDown
+ redshift -x
+
+## Set redshift
+super + XF86MonBrightnessUp
+ redshift -P -O 3500
+
+## Turn off wifi
+super + XF86KbdBrightnessDown
+ nmcli radio all off
+
+## Turn on wifi
+super + XF86KbdBrightnessUp
+ nmcli radio all on
+
+## Keyboard brightness down by 1
+XF86KbdBrightnessDown
+ brightness smalldown keyboard; \
+ dunstify -u low -r "110" "Keyboard: $(brightnessctl --device='smc::kbd_backlight' g)"
+
+## Keyboard brightness up by 1
+XF86KbdBrightnessUp
+ brightness smallup keyboard; \
+ dunstify -u low -r "110" "Keyboard: $(brightnessctl --device='smc::kbd_backlight' g)"
+
+## Keyboard brightness down by 5
+shift + XF86KbdBrightnessDown
+ brightness down keyboard; \
+ dunstify -u low -r "110" "Keyboard: $(brightnessctl --device='smc::kbd_backlight' g)"
+
+## Keyboard brightness up by 5
+shift + XF86KbdBrightnessUp
+ brightness up keyboard; \
+ dunstify -u low -r "110" "Keyboard: $(brightnessctl --device='smc::kbd_backlight' g)"
+
+## Play/Pause media
+XF86AudioPlay
+ playerctl play-pause
+
+## Next media
+XF86AudioNext
+ playerctl next
+
+## Previous media
+XF86AudioPrev
+ playerctl previous
+
+## Increase volume
+XF86AudioRaiseVolume
+ volctl increase
+
+## Decrease volume
+XF86AudioLowerVolume
+ volctl decrease
+
+## Mute volume
+XF86AudioMute
+ volctl mute
+
+### LAUNCHERS
+
+## Launch document writing environment
+XF86LaunchA
+ launchworkingenv
+
+## Launch infoboard
+XF86LaunchB
+ infoboard
+
diff --git a/sxhkd/.config/sxhkd/sxhkdrc b/sxhkd/.config/sxhkd/sxhkdrc
new file mode 100644
index 0000000..8cf659b
--- /dev/null
+++ b/sxhkd/.config/sxhkd/sxhkdrc
@@ -0,0 +1,151 @@
+### ESSENTIALS
+
+## Terminal
+super + Return
+ kitty
+
+## Rofi
+super + @space
+ appmenu # rofi -show drun -theme ~/.cache/wal/colors-rofi-dark.rasi
+
+## Deth
+super + alt + 0
+ bspc quit
+
+## Reload sxhkd
+super + alt + s
+ pkill -USR1 -x sxhkd
+
+## Reload bspwm
+super + alt + b
+ bspc wm -r
+
+## Close window
+super + q
+ bspc node -c
+
+## Kill window and parent
+super + shift + q
+ bspc node -k
+
+## Mount script
+super + m
+ mountmenu
+
+
+### EXTENDED ESSENTIALS
+
+## Lock screen
+super + l
+ dm-tool lock
+
+## Take a Screenshot
+super + p
+ scrot -e 'mv $f ~/images/screenshots/ && notify-send -u normal "Screenshot Taken"'
+
+## Tab to next/previous node
+super + {_,shift + }Tab
+ rofi -show window
+ #tabmenu
+ # bspc node -f {next,prev}
+
+## Set window state
+super + {t,s,f}
+ bspc node -t {tiled,floating,fullscreen}
+
+## Focus or send to a workspace
+super + {_,shift + }{1-9,0}
+ bspc {desktop -f,node -d} '^{1-9,10}'
+
+
+### RESIZING AND POSITIONING
+
+## Expand a window
+super + ctrl + {Left,Down,Up,Right}
+ bspc node -z {left -10 0,bottom 0 10,top 0 -10,right 10 0}
+
+## Contract a window
+super + ctrl + shift + {Left,Down,Up,Right}
+ bspc node -z {right -10 0,top 0 10,bottom 0 -10,left 10 0}
+
+## Move a floating window
+super + {Left,Down,Up,Right}
+ bspc node -v {-10 0,0 10,0 -10,10 0}
+
+
+### MEDIA
+
+## Monitor brightness down by 1
+XF86MonBrightnessDown
+ brightness smalldown monitor; \
+ dunstify -u low -r "110" "Monitor: $(xbacklight -get)%"
+
+## Monitor brightness up by 1
+XF86MonBrightnessUp
+ brightness smallup monitor; \
+ dunstify -u low -r "110" "Monitor: $(xbacklight -get)%"
+
+## Monitor brightness down by 5
+super + XF86MonBrightnessDown
+ brightness down monitor; \
+ dunstify -u low -r "110" "Monitor: $(xbacklight -get)%"
+
+## Monitor brightness up by 5
+super + XF86MonBrightnessUp
+ brightness up monitor; \
+ dunstify -u low -r "110" "Monitor: $(xbacklight -get)%"
+
+## Keyboard brightness down by 1
+XF86KbdBrightnessDown
+ brightness smalldown keyboard; \
+ dunstify -u low -r "110" "Keyboard: $(brightnessctl --device='smc::kbd_backlight' g)"
+
+## Keyboard brightness up by 1
+XF86KbdBrightnessUp
+ brightness smallup keyboard; \
+ dunstify -u low -r "110" "Keyboard: $(brightnessctl --device='smc::kbd_backlight' g)"
+
+## Keyboard brightness down by 5
+super + XF86KbdBrightnessDown
+ brightness down keyboard; \
+ dunstify -u low -r "110" "Keyboard: $(brightnessctl --device='smc::kbd_backlight' g)"
+
+## Keyboard brightness up by 5
+super + XF86KbdBrightnessUp
+ brightness up keyboard; \
+ dunstify -u low -r "110" "Keyboard: $(brightnessctl --device='smc::kbd_backlight' g)"
+
+## Play/Pause media
+XF86AudioPlay
+ playerctl play-pause
+
+## Next media
+XF86AudioNext
+ playerctl next
+
+## Previous media
+XF86AudioPrev
+ playerctl previous
+
+## Increase volume
+XF86AudioRaiseVolume
+ volctl increase
+
+## Decrease volume
+XF86AudioLowerVolume
+ volctl decrease
+
+## Mute volume
+XF86AudioMute
+ volctl mute
+
+
+### LAUNCHERS
+
+## Launch document writing environment
+XF86LaunchA
+ launchworkingenv
+
+## Launch infoboard
+XF86LaunchB
+ infoboard
diff --git a/systemd/.config/systemd/user/brightness-persistence.service b/systemd/.config/systemd/user/brightness-persistence.service
new file mode 100644
index 0000000..3dff020
--- /dev/null
+++ b/systemd/.config/systemd/user/brightness-persistence.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=persistent brightness across sessions
+
+[Service]
+ExecStart=/home/me/.local/bin/brightness load
+
+[Install]
+WantedBy=default.target
diff --git a/systemd/.config/systemd/user/default.target.wants/brightness-persistence.service b/systemd/.config/systemd/user/default.target.wants/brightness-persistence.service
new file mode 120000
index 0000000..0278c84
--- /dev/null
+++ b/systemd/.config/systemd/user/default.target.wants/brightness-persistence.service
@@ -0,0 +1 @@
+/home/me/.config/systemd/user/brightness-persistence.service \ No newline at end of file
diff --git a/wal/.config/wal/templates/config.py b/wal/.config/wal/templates/config.py
new file mode 100644
index 0000000..0438973
--- /dev/null
+++ b/wal/.config/wal/templates/config.py
@@ -0,0 +1,82 @@
+config.load_autoconfig(False)
+
+translucent = "#801a1a1a"
+background = "#1a1a1a"
+foreground = "#f0ede1"
+accent = "#bace6d"
+
+c.zoom.default = "175%"
+c.fonts.default_size = "20pt"
+c.fonts.default_family = "Hack"
+
+c.downloads.location.prompt = False
+c.downloads.location.remember = False
+c.downloads.location.directory = "/home/me/downloads/"
+
+c.statusbar.widgets = ["keypress", "url", "scroll"]
+c.statusbar.show = "in-mode"
+
+c.tabs.favicons.show = "never"
+c.tabs.title.alignment = "center"
+c.tabs.title.format = "{perc}{audio}{current_title}"
+
+# fileselect stuff
+
+c.colors.completion.category.bg = accent
+c.colors.completion.category.fg = background
+c.colors.completion.even.bg = background
+c.colors.completion.odd.bg = background
+c.colors.completion.item.selected.bg = foreground
+c.colors.completion.item.selected.fg = background
+c.colors.completion.item.selected.match.fg = accent
+c.colors.completion.match.fg = accent
+c.colors.completion.scrollbar.bg = background
+c.colors.completion.scrollbar.fg = foreground
+
+c.colors.downloads.bar.bg = background
+c.colors.downloads.error.bg = background
+c.colors.downloads.error.fg = foreground
+c.colors.downloads.start.bg = background
+c.colors.downloads.start.fg = foreground
+c.colors.downloads.stop.bg = background
+c.colors.downloads.stop.fg = foreground
+
+c.colors.keyhint.bg = translucent
+c.colors.keyhint.fg = foreground
+c.colors.keyhint.suffix.fg = accent
+c.colors.hints.bg = translucent
+c.colors.hints.fg = foreground
+c.hints.border = "none"
+c.hints.radius = 0
+
+c.colors.tabs.bar.bg = background
+c.colors.tabs.even.bg = background
+c.colors.tabs.even.fg = foreground
+c.colors.tabs.odd.bg = background
+c.colors.tabs.odd.fg = foreground
+c.colors.tabs.indicator.error = accent
+c.colors.tabs.indicator.start = foreground
+c.colors.tabs.indicator.stop = background
+c.colors.tabs.selected.even.bg = accent
+c.colors.tabs.selected.even.fg = background
+c.colors.tabs.selected.odd.bg = accent
+c.colors.tabs.selected.odd.fg = background
+
+c.colors.statusbar.command.bg = background
+c.colors.statusbar.command.fg = foreground
+c.colors.statusbar.url.fg = foreground
+c.colors.statusbar.url.warn.fg = accent
+c.colors.statusbar.url.error.fg = accent
+c.colors.statusbar.url.hover.fg = foreground
+c.colors.statusbar.url.success.http.fg = foreground
+c.colors.statusbar.url.success.https.fg = foreground
+
+c.colors.messages.error.bg = background
+c.colors.messages.error.fg = foreground
+c.colors.messages.error.border = background
+c.colors.messages.info.bg = background
+c.colors.messages.info.fg = foreground
+c.colors.messages.info.border = background
+c.colors.messages.warning.bg = background
+c.colors.messages.warning.fg = foreground
+c.colors.messages.warning.border = background
diff --git a/wal/.config/wal/templates/zathurarc b/wal/.config/wal/templates/zathurarc
new file mode 100644
index 0000000..a30e101
--- /dev/null
+++ b/wal/.config/wal/templates/zathurarc
@@ -0,0 +1,20 @@
+set selection-clipboard "clipboard"
+
+set window-title-basename true
+set window-title-page false
+
+set default-bg "#1a1a1a"
+set font "Hack normal 20"
+set highlight-color "#ece4e4"
+set highlight-active-color "#f30021"
+set recolor-lightcolor "#1a1a1a"
+set statusbar-bg "#1a1a1a"
+set statusbar-fg "#ece4e4"
+set inputbar-bg "#1a1a1a"
+set inputbar-fg "#ece4e4"
+set completion-fg "#ece4e4"
+set completion-bg "#1a1a1a"
+set completion-group-fg "#ece4e4"
+set completion-group-bg "#f30021"
+set completion-highlight-fg "#1a1a1a"
+set completion-highlight-bg "#ece4e4"
diff --git a/xorg/.Xmodmap b/xorg/.Xmodmap
new file mode 100644
index 0000000..0a90c25
--- /dev/null
+++ b/xorg/.Xmodmap
@@ -0,0 +1,248 @@
+keycode 8 =
+keycode 9 = Escape NoSymbol Escape
+keycode 10 = 1 exclam 1 exclam onesuperior exclamdown onesuperior exclamdown
+keycode 11 = 2 quotedbl 2 quotedbl twosuperior oneeighth twosuperior oneeighth
+keycode 12 = 3 section 3 section threesuperior sterling threesuperior sterling
+keycode 13 = 4 dollar 4 dollar onequarter currency onequarter currency
+keycode 14 = 5 percent 5 percent onehalf threeeighths onehalf threeeighths
+keycode 15 = 6 ampersand 6 ampersand notsign fiveeighths notsign fiveeighths
+keycode 16 = 7 slash 7 slash braceleft seveneighths braceleft seveneighths
+keycode 17 = 8 parenleft 8 parenleft bracketleft trademark bracketleft trademark
+keycode 18 = 9 parenright 9 parenright bracketright plusminus bracketright plusminus
+keycode 19 = 0 equal 0 equal braceright degree braceright degree
+keycode 20 = ssharp question ssharp question backslash questiondown U1E9E backslash questiondown U1E9E
+keycode 21 = dead_acute dead_grave dead_acute dead_grave dead_cedilla dead_ogonek dead_cedilla dead_ogonek
+keycode 22 = BackSpace BackSpace BackSpace BackSpace
+keycode 23 = Tab ISO_Left_Tab Tab ISO_Left_Tab
+keycode 24 = q Q q Q at Greek_OMEGA at Greek_OMEGA
+keycode 25 = w W w W U017F section U017F section
+keycode 26 = e E e E EuroSign EuroSign EuroSign EuroSign
+keycode 27 = r R r R paragraph registered paragraph registered
+keycode 28 = t T t T tslash Tslash tslash Tslash
+keycode 29 = z Z z Z leftarrow yen leftarrow yen
+keycode 30 = u U u U downarrow uparrow downarrow uparrow
+keycode 31 = i I i I rightarrow idotless rightarrow idotless
+keycode 32 = o O o O oslash Oslash oslash Oslash
+keycode 33 = p P p P thorn THORN thorn THORN
+keycode 34 = udiaeresis Udiaeresis udiaeresis Udiaeresis dead_diaeresis dead_abovering dead_diaeresis dead_abovering
+keycode 35 = plus asterisk plus asterisk asciitilde macron asciitilde macron
+keycode 36 = Return NoSymbol Return
+keycode 37 = Control_L NoSymbol Control_L
+keycode 38 = a A a A ae AE ae AE
+keycode 39 = s S s S U017F U1E9E U017F U1E9E
+keycode 40 = d D d D eth ETH eth ETH
+keycode 41 = f F f F dstroke ordfeminine dstroke ordfeminine
+keycode 42 = g G g G eng ENG eng ENG
+keycode 43 = h H h H hstroke Hstroke hstroke Hstroke
+keycode 44 = j J j J dead_belowdot dead_abovedot dead_belowdot dead_abovedot
+keycode 45 = k K k K kra ampersand kra ampersand
+keycode 46 = l L l L lstroke Lstroke lstroke Lstroke
+keycode 47 = odiaeresis Odiaeresis odiaeresis Odiaeresis dead_doubleacute dead_belowdot dead_doubleacute dead_belowdot
+keycode 48 = adiaeresis Adiaeresis adiaeresis Adiaeresis dead_circumflex dead_caron dead_circumflex dead_caron
+keycode 49 = less greater less greater bar dead_belowmacron bar dead_belowmacron
+keycode 50 = Shift_L NoSymbol Shift_L
+keycode 51 = numbersign apostrophe numbersign apostrophe rightsinglequotemark dead_breve rightsinglequotemark dead_breve
+keycode 52 = y Y y Y guillemotright U203A guillemotright U203A
+keycode 53 = x X x X guillemotleft U2039 guillemotleft U2039
+keycode 54 = c C c C cent copyright cent copyright
+keycode 55 = v V v V doublelowquotemark singlelowquotemark doublelowquotemark singlelowquotemark
+keycode 56 = b B b B leftdoublequotemark leftsinglequotemark leftdoublequotemark leftsinglequotemark
+keycode 57 = n N n N rightdoublequotemark rightsinglequotemark rightdoublequotemark rightsinglequotemark
+keycode 58 = m M m M mu masculine mu masculine
+keycode 59 = comma semicolon comma semicolon periodcentered multiply periodcentered multiply
+keycode 60 = period colon period colon U2026 division U2026 division
+keycode 61 = minus underscore minus underscore endash emdash endash emdash
+keycode 62 = Shift_R NoSymbol Shift_R
+keycode 63 = KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply XF86ClearGrab KP_Multiply KP_Multiply XF86ClearGrab
+keycode 64 = Alt_L Meta_L Alt_L Meta_L
+keycode 65 = space NoSymbol space
+keycode 66 = Caps_Lock NoSymbol Caps_Lock
+keycode 67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1 F1 F1 XF86Switch_VT_1
+keycode 68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2 F2 F2 XF86Switch_VT_2
+keycode 69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3 F3 F3 XF86Switch_VT_3
+keycode 70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4 F4 F4 XF86Switch_VT_4
+keycode 71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 F5 F5 XF86Switch_VT_5
+keycode 72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6 F6 F6 XF86Switch_VT_6
+keycode 73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7 F7 F7 XF86Switch_VT_7
+keycode 74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8 F8 F8 XF86Switch_VT_8
+keycode 75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9 F9 F9 XF86Switch_VT_9
+keycode 76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10 F10 F10 XF86Switch_VT_10
+keycode 77 = Num_Lock NoSymbol Num_Lock
+keycode 78 = Scroll_Lock NoSymbol Scroll_Lock
+keycode 79 = KP_Home KP_7 KP_Home KP_7
+keycode 80 = KP_Up KP_8 KP_Up KP_8
+keycode 81 = KP_Prior KP_9 KP_Prior KP_9
+keycode 82 = KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract XF86Prev_VMode KP_Subtract KP_Subtract XF86Prev_VMode
+keycode 83 = KP_Left KP_4 KP_Left KP_4
+keycode 84 = KP_Begin KP_5 KP_Begin KP_5
+keycode 85 = KP_Right KP_6 KP_Right KP_6
+keycode 86 = KP_Add KP_Add KP_Add KP_Add KP_Add KP_Add XF86Next_VMode KP_Add KP_Add XF86Next_VMode
+keycode 87 = KP_End KP_1 KP_End KP_1
+keycode 88 = KP_Down KP_2 KP_Down KP_2
+keycode 89 = KP_Next KP_3 KP_Next KP_3
+keycode 90 = KP_Insert KP_0 KP_Insert KP_0
+keycode 91 = KP_Delete KP_Separator KP_Delete KP_Separator
+keycode 92 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift
+keycode 93 =
+keycode 94 = asciicircum degree asciitilde notsign U2033
+keycode 95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11 F11 F11 XF86Switch_VT_11
+keycode 96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12 F12 F12 XF86Switch_VT_12
+keycode 97 =
+keycode 98 = Katakana NoSymbol Katakana
+keycode 99 = Hiragana NoSymbol Hiragana
+keycode 100 = Henkan_Mode NoSymbol Henkan_Mode
+keycode 101 = Hiragana_Katakana NoSymbol Hiragana_Katakana
+keycode 102 = Muhenkan NoSymbol Muhenkan
+keycode 103 =
+keycode 104 = KP_Enter NoSymbol KP_Enter
+keycode 105 = Control_R NoSymbol Control_R
+keycode 106 = KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide XF86Ungrab KP_Divide KP_Divide XF86Ungrab
+keycode 107 = Print Sys_Req Print Sys_Req
+keycode 108 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift
+keycode 109 = Linefeed NoSymbol Linefeed
+keycode 110 = Home NoSymbol Home
+keycode 111 = Up NoSymbol Up
+keycode 112 = Prior NoSymbol Prior
+keycode 113 = Left NoSymbol Left
+keycode 114 = Right NoSymbol Right
+keycode 115 = End NoSymbol End
+keycode 116 = Down NoSymbol Down
+keycode 117 = Next NoSymbol Next
+keycode 118 = Insert NoSymbol Insert
+keycode 119 = Delete NoSymbol Delete
+keycode 120 =
+keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
+keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
+keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
+keycode 124 = XF86PowerOff NoSymbol XF86PowerOff
+keycode 125 = KP_Equal NoSymbol KP_Equal
+keycode 126 = plusminus NoSymbol plusminus
+keycode 127 = Pause Break Pause Break
+keycode 128 = XF86LaunchA NoSymbol XF86LaunchA
+keycode 129 = KP_Decimal KP_Decimal KP_Decimal KP_Decimal
+keycode 130 = Hangul NoSymbol Hangul
+keycode 131 = Hangul_Hanja NoSymbol Hangul_Hanja
+keycode 132 =
+keycode 133 = Super_L NoSymbol Super_L
+keycode 134 = Super_R NoSymbol Super_R
+keycode 135 = Menu NoSymbol Menu
+keycode 136 = Cancel NoSymbol Cancel
+keycode 137 = Redo NoSymbol Redo
+keycode 138 = SunProps NoSymbol SunProps
+keycode 139 = Undo NoSymbol Undo
+keycode 140 = SunFront NoSymbol SunFront
+keycode 141 = XF86Copy NoSymbol XF86Copy
+keycode 142 = XF86Open NoSymbol XF86Open
+keycode 143 = XF86Paste NoSymbol XF86Paste
+keycode 144 = Find NoSymbol Find
+keycode 145 = XF86Cut NoSymbol XF86Cut
+keycode 146 = Help NoSymbol Help
+keycode 147 = XF86MenuKB NoSymbol XF86MenuKB
+keycode 148 = XF86Calculator NoSymbol XF86Calculator
+keycode 149 =
+keycode 150 = XF86Sleep NoSymbol XF86Sleep
+keycode 151 = XF86WakeUp NoSymbol XF86WakeUp
+keycode 152 = XF86Explorer NoSymbol XF86Explorer
+keycode 153 = XF86Send NoSymbol XF86Send
+keycode 154 =
+keycode 155 = XF86Xfer NoSymbol XF86Xfer
+keycode 156 = XF86Launch1 NoSymbol XF86Launch1
+keycode 157 = XF86Launch2 NoSymbol XF86Launch2
+keycode 158 = XF86WWW NoSymbol XF86WWW
+keycode 159 = XF86DOS NoSymbol XF86DOS
+keycode 160 = XF86ScreenSaver NoSymbol XF86ScreenSaver
+keycode 161 = XF86RotateWindows NoSymbol XF86RotateWindows
+keycode 162 = XF86TaskPane NoSymbol XF86TaskPane
+keycode 163 = XF86Mail NoSymbol XF86Mail
+keycode 164 = XF86Favorites NoSymbol XF86Favorites
+keycode 165 = XF86MyComputer NoSymbol XF86MyComputer
+keycode 166 = XF86Back NoSymbol XF86Back
+keycode 167 = XF86Forward NoSymbol XF86Forward
+keycode 168 =
+keycode 169 = XF86Eject NoSymbol XF86Eject
+keycode 170 = XF86Eject NoSymbol XF86Eject
+keycode 171 = XF86AudioNext NoSymbol XF86AudioNext
+keycode 172 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause
+keycode 173 = XF86AudioPrev NoSymbol XF86AudioPrev
+keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject
+keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
+keycode 176 = XF86AudioRewind NoSymbol XF86AudioRewind
+keycode 177 = XF86Phone NoSymbol XF86Phone
+keycode 178 =
+keycode 179 = XF86Tools NoSymbol XF86Tools
+keycode 180 = XF86HomePage NoSymbol XF86HomePage
+keycode 181 = XF86Reload NoSymbol XF86Reload
+keycode 182 = XF86Close NoSymbol XF86Close
+keycode 183 =
+keycode 184 =
+keycode 185 = XF86ScrollUp NoSymbol XF86ScrollUp
+keycode 186 = XF86ScrollDown NoSymbol XF86ScrollDown
+keycode 187 = parenleft NoSymbol parenleft
+keycode 188 = parenright NoSymbol parenright
+keycode 189 = XF86New NoSymbol XF86New
+keycode 190 = Redo NoSymbol Redo
+keycode 191 = XF86Tools NoSymbol XF86Tools
+keycode 192 = XF86Launch5 NoSymbol XF86Launch5
+keycode 193 = XF86Launch6 NoSymbol XF86Launch6
+keycode 194 = XF86Launch7 NoSymbol XF86Launch7
+keycode 195 = XF86Launch8 NoSymbol XF86Launch8
+keycode 196 = XF86Launch9 NoSymbol XF86Launch9
+keycode 197 =
+keycode 198 = XF86AudioMicMute NoSymbol XF86AudioMicMute
+keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle
+keycode 200 = XF86TouchpadOn NoSymbol XF86TouchpadOn
+keycode 201 = XF86TouchpadOff NoSymbol XF86TouchpadOff
+keycode 202 =
+keycode 203 = Mode_switch NoSymbol Mode_switch
+keycode 204 = NoSymbol Alt_L NoSymbol Alt_L
+keycode 205 = NoSymbol Meta_L NoSymbol Meta_L
+keycode 206 = NoSymbol Super_L NoSymbol Super_L
+keycode 207 = NoSymbol Hyper_L NoSymbol Hyper_L
+keycode 208 = XF86AudioPlay NoSymbol XF86AudioPlay
+keycode 209 = XF86AudioPause NoSymbol XF86AudioPause
+keycode 210 = XF86Launch3 NoSymbol XF86Launch3
+keycode 211 = XF86Launch4 NoSymbol XF86Launch4
+keycode 212 = XF86LaunchB NoSymbol XF86LaunchB
+keycode 213 = XF86Suspend NoSymbol XF86Suspend
+keycode 214 = XF86Close NoSymbol XF86Close
+keycode 215 = XF86AudioPlay NoSymbol XF86AudioPlay
+keycode 216 = XF86AudioForward NoSymbol XF86AudioForward
+keycode 217 =
+keycode 218 = Print NoSymbol Print
+keycode 219 =
+keycode 220 = XF86WebCam NoSymbol XF86WebCam
+keycode 221 = XF86AudioPreset NoSymbol XF86AudioPreset
+keycode 222 =
+keycode 223 = XF86Mail NoSymbol XF86Mail
+keycode 224 = XF86Messenger NoSymbol XF86Messenger
+keycode 225 = XF86Search NoSymbol XF86Search
+keycode 226 = XF86Go NoSymbol XF86Go
+keycode 227 = XF86Finance NoSymbol XF86Finance
+keycode 228 = XF86Game NoSymbol XF86Game
+keycode 229 = XF86Shop NoSymbol XF86Shop
+keycode 230 =
+keycode 231 = Cancel NoSymbol Cancel
+keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
+keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp
+keycode 234 = XF86AudioMedia NoSymbol XF86AudioMedia
+keycode 235 = XF86Display NoSymbol XF86Display
+keycode 236 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
+keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
+keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp
+keycode 239 = XF86Send NoSymbol XF86Send
+keycode 240 = XF86Reply NoSymbol XF86Reply
+keycode 241 = XF86MailForward NoSymbol XF86MailForward
+keycode 242 = XF86Save NoSymbol XF86Save
+keycode 243 = XF86Documents NoSymbol XF86Documents
+keycode 244 = XF86Battery NoSymbol XF86Battery
+keycode 245 = XF86Bluetooth NoSymbol XF86Bluetooth
+keycode 246 = XF86WLAN NoSymbol XF86WLAN
+keycode 247 = XF86UWB NoSymbol XF86UWB
+keycode 248 =
+keycode 249 = XF86Next_VMode NoSymbol XF86Next_VMode
+keycode 250 = XF86Prev_VMode NoSymbol XF86Prev_VMode
+keycode 251 = XF86MonBrightnessCycle NoSymbol XF86MonBrightnessCycle
+keycode 252 = XF86BrightnessAuto NoSymbol XF86BrightnessAuto
+keycode 253 = XF86DisplayOff NoSymbol XF86DisplayOff
+keycode 254 = XF86WWAN NoSymbol XF86WWAN
+keycode 255 = XF86RFKill NoSymbol XF86RFKill
diff --git a/xorg/.Xresources b/xorg/.Xresources
new file mode 100644
index 0000000..ae19709
--- /dev/null
+++ b/xorg/.Xresources
@@ -0,0 +1,72 @@
+Xft.dpi: 96
+
+! X colors.
+! Generated by 'wal'
+*foreground: #cbcbcb
+*background: #141414
+*.foreground: #cbcbcb
+*.background: #141414
+emacs*foreground: #cbcbcb
+emacs*background: #141414
+URxvt*foreground: #cbcbcb
+XTerm*foreground: #cbcbcb
+UXTerm*foreground: #cbcbcb
+URxvt*background: [100]#141414
+XTerm*background: #141414
+UXTerm*background: #141414
+URxvt*cursorColor: #cbcbcb
+XTerm*cursorColor: #cbcbcb
+UXTerm*cursorColor: #cbcbcb
+URxvt*borderColor: [100]#141414
+
+! Colors 0-15.
+*.color0: #141414
+*color0: #141414
+*.color1: #98000d
+*color1: #98000d
+*.color2: #a2000c
+*color2: #a2000c
+*.color3: #e10000
+*color3: #e10000
+*.color4: #b80018
+*color4: #b80018
+*.color5: #ff1f4d
+*color5: #ff1f4d
+*.color6: #fe0b0b
+*color6: #fe0b0b
+*.color7: #cbcbcb
+*color7: #cbcbcb
+*.color8: #8e8e8e
+*color8: #8e8e8e
+*.color9: #98000d
+*color9: #98000d
+*.color10: #a2000c
+*color10: #a2000c
+*.color11: #e10000
+*color11: #e10000
+*.color12: #b80018
+*color12: #b80018
+*.color13: #ff1f4d
+*color13: #ff1f4d
+*.color14: #fe0b0b
+*color14: #fe0b0b
+*.color15: #cbcbcb
+*color15: #cbcbcb
+
+! Black color that will not be affected by bold highlighting.
+*.color66: #141414
+*color66: #141414
+
+! Xclock colors.
+XClock*foreground: #cbcbcb
+XClock*background: #141414
+XClock*majorColor: rgba:cb/cb/cb/ff
+XClock*minorColor: rgba:cb/cb/cb/ff
+XClock*hourColor: rgba:cb/cb/cb/ff
+XClock*minuteColor: rgba:cb/cb/cb/ff
+XClock*secondColor: rgba:cb/cb/cb/ff
+
+! Set depth to make transparency work.
+URxvt*depth: 32
+
+Sxiv.font: JetBrains Mono:pixelsize=23
diff --git a/xorg/.config/env b/xorg/.config/env
new file mode 100644
index 0000000..0bb5a12
--- /dev/null
+++ b/xorg/.config/env
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+### SCRIPTS
+export PATH="$PATH:$HOME/.local/bin/:$HOME/.local/bin/personal/:$HOME/.local/bin/personal/bar/:$HOME/software/bin/"
+
+### DEFAULTS
+export TERM="xterm"
+export EDITOR="nvim"
+export BROWSER="qutebrowser"
+export TERMINAL="st"
+export EMAIL="thunderbird"
+
+export GIT_SSH_COMMAND="ssh"
+
+### FLUTTER
+
+export PATH="$PATH:$HOME/software/flutter/bin:/opt/android-sdk/tools/bin/"
+export CHROME_EXECUTABLE="$(which brave)"
+
+export JAVA_HOME="/usr/lib/jvm/java-8-openjdk/"
+# export ANDROID_HOME="sdkmanager"
+
+### UI SCALE
+# export GDK_DPI_SCALE="0.5"
+export GDK_DPI_SCALE="1"
+
+### CLEANING
+export LESSHISTFILE="-"
+export ZDOTDIR="$HOME/.config/zsh"
+export WGETRC="$HOME/.config/wget/wgetrc"
+
diff --git a/xorg/.config/mimeapps.list b/xorg/.config/mimeapps.list
new file mode 100644
index 0000000..8abb510
--- /dev/null
+++ b/xorg/.config/mimeapps.list
@@ -0,0 +1,16 @@
+[Added Associations]
+image/*=sxiv.desktop;org.qutebrowser.qutebrowser.desktop;
+x-scheme-handler/mailto=userapp-Thunderbird-CLI8N1.desktop;
+x-scheme-handler/mid=userapp-Thunderbird-CLI8N1.desktop;
+application/pdf=org.pwmt.zathura-pdf-mupdf.desktop;
+
+[Default Applications]
+image/png=sxiv.desktop
+image/jpeg=sxiv.desktop
+inode/directory=thunar.desktop
+application/pdf=org.pwmt.zathura.desktop
+x-scheme-handler/mailto=userapp-Thunderbird-CLI8N1.desktop
+message/rfc822=userapp-Thunderbird-CLI8N1.desktop
+x-scheme-handler/mid=userapp-Thunderbird-CLI8N1.desktop
+x-scheme-handler/http=org.qutebrowser.qutebrowser.desktop
+x-scheme-handler/https=org.qutebrowser.qutebrowser.desktop
diff --git a/xorg/.config/wallpaper b/xorg/.config/wallpaper
new file mode 100644
index 0000000..d118bcc
--- /dev/null
+++ b/xorg/.config/wallpaper
Binary files differ
diff --git a/xorg/.xinitrc b/xorg/.xinitrc
new file mode 100755
index 0000000..b6a1168
--- /dev/null
+++ b/xorg/.xinitrc
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+setxkbmap de
+feh --bg-fill $HOME/.config/wallpaper
+
+# This was needed on my system with the non-lts kernel (some keys were mismatched)
+# [[ -f ~/.Xmodmap ]] && xmodmap $HOME/.Xmodmap
+[[ -f ~/.Xresources ]] && xrdb -merge -I$HOME ~/.Xresources
+[[ -f $HOME/.cache/wal/colors.Xresources ]] && xrdb -merge -I$HOME $HOME/.cache/wal/colors.Xresources
+
+[[ -f $HOME/.config/env ]] && source $HOME/.config/env
+
+updates check &
+
+sxhkd -c "$HOME/.config/sxhkd/mediarc" &
+unclutter -idle 1 &
+brightness load &
+slstatus &
+dunst &
+
+exec dwm
+
+wal -R
+
diff --git a/zathura/.config/zathura/zathurarc b/zathura/.config/zathura/zathurarc
new file mode 100644
index 0000000..bbb6424
--- /dev/null
+++ b/zathura/.config/zathura/zathurarc
@@ -0,0 +1,22 @@
+set selection-clipboard "clipboard"
+
+set window-title-basename true
+set window-title-page false
+
+set recolor true
+
+set default-bg "#1a1a1a"
+set font "JetBrains Mono normal 18"
+set highlight-color "#bbd2e0"
+set highlight-active-color "#306b92"
+set recolor-lightcolor "#1a1a1a"
+set statusbar-bg "#1a1a1a"
+set statusbar-fg "#bbd2e0"
+set inputbar-bg "#1a1a1a"
+set inputbar-fg "#bbd2e0"
+set completion-fg "#bbd2e0"
+set completion-bg "#1a1a1a"
+set completion-group-fg "#bbd2e0"
+set completion-group-bg "#306b92"
+set completion-highlight-fg "#1a1a1a"
+set completion-highlight-bg "#bbd2e0"