diff --git a/hyprland/.config/dunst/dunstrc b/hyprland/.config/dunst/dunstrc
new file mode 100644
index 00000000..3c0eff4f
--- /dev/null
+++ b/hyprland/.config/dunst/dunstrc
@@ -0,0 +1,66 @@
+# vim: set ft=cfg:
+[global]
+ ## BEHAVIOR
+ follow = mouse # Notifications follow the monitor with the mouse
+ format = "%s (%a)\n%b"
+ hide_duplicate_count = false # Hide count of stacked notifs
+ ignore_newline = false # Ignore \n (for some reason)
+ indicate_hidden = true # Show how many messages are currently hidden
+ idle_threshold = 120 # Time in seconds before user is considered idle
+ markup = full # Whether to disable markup features (see manpage)
+ show_age_threshold = 60 # Shows age if message is older than this (in sec)
+ show_indicators = true # Show hints for interactable notifs
+ sort = true # Sort messages by urgency.
+ stack_duplicates = true
+ timeout = 10 # Time in seconds before the thing fades
+
+ ## MISC CONFIGURATION
+ always_run_script = true # Runs scripts for rules even if they're hidden
+ browser = xdg-open
+ dmenu = /usr/bin/rofi -dmenu -p dunst:
+
+ ## WINDOW CONFIGURATION
+ title = Dunst
+ class = Dunst
+
+ ## HISTORY
+ sticky_history = yes # Notifs pulled from history stay onscreen
+ history_length = 20 # Buffer size
+
+ ## LOOKS
+ # COLORS
+ # Note that rules defined later on can and will override these
+ # All colors must be quoted so as to not misinterpret as comments
+ background= "#fbf1c7" # Background of the notification
+ frame_color = "#f2e5bc"
+ separator_color = frame
+ foreground = "#3c3836" # Font color, for body and title
+ highlight = "#b8bb26" # Progress bars
+ # SIZE AND POSITIONING
+ width = 400
+ height = 300
+ offset = 8x8 # This takes into account any bars
+ corner_radius = 0
+ transparency = 0
+ # PROGRESS BAR
+ progress_bar = true
+ progress_bar_horizontal_alignment = left
+ progress_bar_frame_width = 2
+ progress_bar_height = 8
+ # INTERIOR FORMATTING
+ frame_width = 6 # Defines width in pixels of frame
+ horizontal_padding = 12 # Horizontal padding.
+ padding = 12 # Padding between text and separator.
+ separator_height = 4
+ # TEXT
+ alignment = left
+ font = IBM Plex Sans 10
+ line_height = 0
+ word_wrap = yes
+ # ICONS
+ icon_path = /usr/share/icons/Papirus-Light/48x48/status/:/usr/share/icons/Papirus-Light/48x48/devices/:/usr/share/icons/Papirus-Light/48x48/apps
+ icon_position = right
+ max_icon_size = 48
+
+[urgency_critical]
+ foreground = "#fb4934"
diff --git a/hyprland/.config/dunst/dunstrc-light b/hyprland/.config/dunst/dunstrc-light
new file mode 100644
index 00000000..365be6b2
--- /dev/null
+++ b/hyprland/.config/dunst/dunstrc-light
@@ -0,0 +1,321 @@
+[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 = mouse
+
+ # The geometry of the window:
+ # [{width}]x{height}[+/-{x}+/-{y}]
+ # The geometry of the message window.
+ # The height is measured in number of notifications everything else
+ # in pixels. If the width is omitted but the height is given
+ # ("-geometry x2"), the message window expands over the whole screen
+ # (dmenu-like). If width is 0, the window expands to the longest
+ # message displayed. A positive x is measured from the left, a
+ # negative from the right side of the screen. Y is measured from
+ # the top and down respectively.
+ # The width can be negative. In this case the actual width is the
+ # screen width minus the width defined in within the geometry option.
+ geometry = "500x8-6+50"
+ corner_radius = 0
+
+ # Show how many messages are currently hidden (because of geometry).
+ indicate_hidden = yes
+
+ # Shrink window if it's smaller than the width. Will be ignored if
+ # width is 0.
+ shrink = no
+
+ # 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.).
+ transparency = 0
+
+ # The height of the entire notification. If the height is smaller
+ # than the font height and padding combined, it will be raised
+ # to the font height and padding.
+ notification_height = 0
+
+ # Draw a line of "separator_height" pixel height between two
+ # notifications.
+ # Set to 0 to disable.
+ separator_height = 4
+
+ # Padding between text and separator.
+ padding = 12
+
+ # Horizontal padding.
+ horizontal_padding = 12
+
+ # Defines width in pixels of frame around the notification window.
+ # Set to 0 to disable.
+ frame_width = 4
+
+ # Defines color of the frame around the notification window.
+ frame_color = "#32302f"
+
+ # 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.
+ idle_threshold = 120
+
+ ### Text ###
+
+ #font = Monospace 8
+ font = Roboto 10
+
+ # 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:
+ # bold
+ # italic
+ # strikethrough
+ # underline
+ #
+ # For a complete reference see
+ # .
+ #
+ # 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
+ # Markup is allowed
+ format = "%s (%a)\n%b"
+
+ # Alignment of message text.
+ # Possible values are "left", "center" and "right".
+ alignment = left
+
+ # Show age of message if message is older than show_age_threshold
+ # seconds.
+ # Set to -1 to disable.
+ show_age_threshold = 60
+
+ # Split notifications into multiple lines if they don't fit into
+ # geometry.
+ word_wrap = yes
+
+ # Ignore newlines '\n' in notifications.
+ ignore_newline = no
+
+ # Merge multiple notifications with the same content
+ stack_duplicates = true
+
+ # Hide the count of merged notifications with the same content
+ hide_duplicate_count = false
+
+ # Display indicators for URLs (U) and actions (A).
+ show_indicators = yes
+
+ ### Icons ###
+
+ # Align icons left/right/off
+ icon_position = right
+
+ # Scale larger icons down to this size, set to 0 to disable
+ max_icon_size = 48
+
+ # Paths to default icons.
+ icon_path = /usr/share/icons/Papirus-Dark/48x48/status/:/usr/share/icons/Papirus-Dark/48x48/devices/:/usr/share/icons/Papirus-Dark/48x48/apps
+
+ ### 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/rofi -dmenu -p dunst:
+
+ # Browser for opening urls in context menu.
+ browser = 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
+
+ # Print a notification on startup.
+ # This is mainly for error detection, since dbus (re-)starts dunst
+ # automatically after a crash.
+ startup_notification = 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
+
+# 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
+
+[shortcuts]
+
+ # Shortcuts are specified as [modifier+][modifier+]...key
+ # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
+ # "mod3" and "mod4" (windows-key).
+ # Xev might be helpful to find names for keys.
+
+ # Close notification.
+ close = mod1+shift+space
+
+ # Close all notifications.
+ close_all = mod1+shift+enter
+
+ # Redisplay last message(s).
+ # On the US keyboard layout "grave" is normally above TAB and left
+ # of "1". Make sure this key actually exists on your keyboard layout,
+ # e.g. check output of 'xmodmap -pke'
+ history = mod1+shift+d
+
+ # Context menu.
+ context = mod1+shift+o
+
+[urgency_low]
+ # IMPORTANT: colors have to be defined in quotation marks.
+ # Otherwise the "#" and following would be interpreted as a comment.
+ background = "#282828"
+ foreground = "#ebdbb2"
+ timeout = 10
+ # Icon for notifications with low urgency, uncomment to enable
+ #icon = /path/to/icon
+
+[urgency_normal]
+ background = "#282828"
+ foreground = "#ebdbb2"
+ timeout = 10
+ # Icon for notifications with normal urgency, uncomment to enable
+ #icon = /path/to/icon
+
+[urgency_critical]
+ background = "#282828"
+ foreground = "#fabd2f"
+ timeout = 0
+ # Icon for notifications with critical urgency, uncomment to enable
+ #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", "summary", "body", "icon", "category",
+# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
+# "background", "new_icon" and "format".
+# Shell-like globbing will get expanded.
+#
+# 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: if you don't want a notification to be displayed, set the format
+# to "".
+# NOTE: It might be helpful to run dunst -print in a terminal in order
+# to find fitting options for rules.
+
+#[espeak]
+# summary = "*"
+# script = dunst_espeak.sh
+
+#[script-test]
+# summary = "*script*"
+# script = dunst_test.sh
+
+#[ignore]
+# # This notification will not be displayed
+# summary = "foobar"
+# format = ""
+
+#[history-ignore]
+# # This notification will not be saved in history
+# summary = "foobar"
+# history_ignore = 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
+#
+# vim: ft=cfg
diff --git a/hyprland/.config/foot/foot.ini b/hyprland/.config/foot/foot.ini
new file mode 100644
index 00000000..54bccaf1
--- /dev/null
+++ b/hyprland/.config/foot/foot.ini
@@ -0,0 +1,200 @@
+# -*- conf -*-
+
+# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
+# term=foot (or xterm-256color if built with -Dterminfo=disabled)
+term=xterm-256color
+# login-shell=no
+
+# app-id=foot # globally set wayland app-id. Default values are "foot" and "footclient" for desktop and server mode
+# title=foot
+# locked-title=no
+
+# font=monospace:size=8
+font=IBM Plex Mono:size=9
+# font-bold=
+# font-italic=
+# font-bold-italic=
+# font-size-adjustment=0.5
+# line-height=
+# letter-spacing=0
+# horizontal-letter-offset=0
+# vertical-letter-offset=0
+# underline-offset=
+# underline-thickness=
+# box-drawings-uses-font-glyphs=no
+# dpi-aware=no
+
+# initial-window-size-pixels=700x500 # Or,
+# initial-window-size-chars=
+# initial-window-mode=windowed
+# pad=0x0 # optionally append 'center'
+# resize-delay-ms=100
+
+# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
+
+# bold-text-in-bright=no
+# word-delimiters=,│`|:"'()[]{}<>
+# selection-target=primary
+# workers=
+# utmp-helper=/usr/lib/utempter/utempter # When utmp backend is ‘libutempter’ (Linux)
+# utmp-helper=/usr/libexec/ulog-helper # When utmp backend is ‘ulog’ (FreeBSD)
+
+[environment]
+# name=value
+
+[bell]
+# urgent=no
+# notify=no
+# command=
+# command-focused=no
+
+[scrollback]
+# lines=1000
+# multiplier=3.0
+# indicator-position=relative
+# indicator-format=""
+
+[url]
+# launch=xdg-open ${url}
+# label-letters=sadfjklewcmpgh
+# osc8-underline=url-mode
+# protocols=http, https, ftp, ftps, file, gemini, gopher
+# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
+
+[cursor]
+# style=block
+# color=
+# blink=no
+# beam-thickness=1.5
+# underline-thickness=
+
+[mouse]
+# hide-when-typing=no
+# alternate-scroll-mode=yes
+
+[touch]
+# long-press-delay=400
+
+[colors]
+background=282828
+foreground=ebdbb2
+regular0=282828
+regular1=cc241d
+regular2=98971a
+regular3=d79921
+regular4=458588
+regular5=b16286
+regular6=689d6a
+regular7=a89984
+bright0=928374
+bright1=fb4934
+bright2=b8bb26
+bright3=fabd2f
+bright4=83a598
+bright5=d3869b
+bright6=8ec07c
+bright7=ebdbb2
+
+## dimmed colors (see foot.ini(5) man page)
+# dim0=
+# ...
+# dim7=
+
+## The remaining 256-color palette
+# 16 = <256-color palette #16>
+# ...
+# 255 = <256-color palette #255>
+
+## Misc colors
+# selection-foreground=
+# selection-background=
+# jump-labels= # black-on-yellow
+# scrollback-indicator= # black-on-bright-blue
+# search-box-no-match= # black-on-red
+# search-box-match= # black-on-yellow
+# urls=
+
+[csd]
+# preferred=server
+# size=26
+# font=
+# color=
+# hide-when-maximized=no
+# double-click-to-maximize=yes
+# border-width=0
+# border-color=
+# button-width=26
+# button-color=
+# button-minimize-color=
+# button-maximize-color=
+# button-close-color=
+
+[key-bindings]
+# scrollback-up-page=Shift+Page_Up
+# scrollback-up-half-page=none
+# scrollback-up-line=none
+# scrollback-down-page=Shift+Page_Down
+# scrollback-down-half-page=none
+# scrollback-down-line=none
+# clipboard-copy=Control+Shift+c XF86Copy
+# clipboard-paste=Control+Shift+v XF86Paste
+# primary-paste=Shift+Insert
+# search-start=Control+Shift+r
+# font-increase=Control+plus Control+equal Control+KP_Add
+# font-decrease=Control+minus Control+KP_Subtract
+# font-reset=Control+0 Control+KP_0
+# spawn-terminal=Control+Shift+n
+# minimize=none
+# maximize=none
+# fullscreen=none
+# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
+# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
+# pipe-selected=[xargs -r firefox] none
+# show-urls-launch=Control+Shift+o
+# show-urls-copy=none
+# show-urls-persistent=none
+# prompt-prev=Control+Shift+z
+# prompt-next=Control+Shift+x
+# unicode-input=Control+Shift+u
+# noop=none
+
+[search-bindings]
+# cancel=Control+g Control+c Escape
+# commit=Return
+# find-prev=Control+r
+# find-next=Control+s
+# cursor-left=Left Control+b
+# cursor-left-word=Control+Left Mod1+b
+# cursor-right=Right Control+f
+# cursor-right-word=Control+Right Mod1+f
+# cursor-home=Home Control+a
+# cursor-end=End Control+e
+# delete-prev=BackSpace
+# delete-prev-word=Mod1+BackSpace Control+BackSpace
+# delete-next=Delete
+# delete-next-word=Mod1+d Control+Delete
+# extend-to-word-boundary=Control+w
+# extend-to-next-whitespace=Control+Shift+w
+# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
+# primary-paste=Shift+Insert
+# unicode-input=none
+
+[url-bindings]
+# cancel=Control+g Control+c Control+d Escape
+# toggle-url-visible=t
+
+[text-bindings]
+# \x03=Mod4+c # Map Super+c -> Ctrl+c
+
+[mouse-bindings]
+# selection-override-modifiers=Shift
+# primary-paste=BTN_MIDDLE
+# select-begin=BTN_LEFT
+# select-begin-block=Control+BTN_LEFT
+# select-extend=BTN_RIGHT
+# select-extend-character-wise=Control+BTN_RIGHT
+# select-word=BTN_LEFT-2
+# select-word-whitespace=Control+BTN_LEFT-2
+# select-row=BTN_LEFT-3
+
+# vim: ft=dosini
diff --git a/hyprland/.config/rofi/config.rasi b/hyprland/.config/rofi/config.rasi
new file mode 100644
index 00000000..4410d978
--- /dev/null
+++ b/hyprland/.config/rofi/config.rasi
@@ -0,0 +1,129 @@
+/*
+ * config.rasi
+ * Copyright (C) 2020 Vintage Salt
+ *
+ * Distributed under terms of the MIT License
+ *
+ * See rofi-theme(5) for documentation
+ */
+
+configuration {
+ matching: "normal";
+ show-icons: true;
+ icon-theme: "Papirus-Gruvbox-Dark";
+ modi: "drun,ssh,window";
+}
+
+* {
+ background: #282828;
+ background-alt: #32302f;
+ foreground: #ebdbb2;
+ foreground-alt: #fb4934;
+ yellow: #fabd2f;
+ blue: #83a598;
+ cyan: #8ec07c;
+
+ text-color: @foreground;
+ background-color: @background;
+ font: "IBM Plex Sans 10";
+}
+
+#window {
+ location: southwest;
+ anchor: southwest;
+
+ border-color: @background-alt;
+ background-color: @background;
+
+ border: 4px 4px 0 0;
+ height: 60%;
+ width: 30%;
+ padding: 0em;
+}
+ #inputbar {
+ background-color: @background-alt;
+ padding: 0.5em;
+ }
+ #case-indicator {
+ enabled: false;
+ }
+ #prompt {
+ enabled: false;
+ }
+ #textbox-prompt-colon {
+ enabled: false;
+ }
+ #entry {
+ background-color: inherit;
+ font: "IBM Plex Sans 12";
+ padding: 0.5em;
+ }
+ #num-filtered-rows {
+ background-color: inherit;
+ font: "IBM Plex Sans 12";
+ padding: 0.5em;
+ }
+ #textbox-num-sep {
+ background-color: inherit;
+ font: "IBM Plex Sans 12";
+ padding: 0.5em 0em;
+ }
+ #num-rows {
+ background-color: inherit;
+ font: "IBM Plex Sans 12";
+ padding: 0.5em;
+ }
+ #message {
+ padding: 4px;
+ }
+ #textbox {
+ padding: 4px 12px 4px 12px;
+ font-color: @foreground-alt;
+ }
+
+ #listview {
+ padding: 0.5em;
+ border: none;
+ }
+ #scrollbar {
+ handle-color: @background-alt;
+ enabled: false;
+ }
+ #element {
+ padding: 0.5em;
+ }
+ #element alternate.normal {
+ background-color: @background;
+ }
+ #element normal active {
+ text-color: @cyan;
+ }
+ #element normal urgent {
+ text-color: @yellow;
+ }
+ #element selected normal {
+ background-color: @blue;
+ text-color: @background;
+ }
+ #element selected active {
+ background-color: @cyan;
+ text-color: @background;
+ }
+ #element selected urgent {
+ background-color: @yellow;
+ text-color: @background;
+ }
+
+ #sidebar {
+ }
+
+ #button {
+ padding: 8px;
+ }
+
+ #button selected {
+ background-color: @background-alt;
+ }
+
+/* vim:ft=css
+*/
diff --git a/hyprland/.config/sway/config b/hyprland/.config/sway/config
new file mode 100644
index 00000000..40cd5594
--- /dev/null
+++ b/hyprland/.config/sway/config
@@ -0,0 +1,21 @@
+#
+# Salt's Sway configuration file
+#
+# NOTE
+# Any further configuration that isn't just declaring a global should be
+# done via the creation of a file in config.d.
+#
+# Note that you can also override system-provided configs by making an
+# identically-named file in config.d
+#
+
+## CONFIGS
+set $term foot
+# Set modifiers
+set $mod Mod1
+set $sup Mod4
+set $ctl Ctrl
+set $shift Shift
+
+include '$(/usr/libexec/sway/layered-include "/usr/share/sway/config.d/*.conf" "/etc/sway/config.d/*.conf" "${XDG_CONFIG_HOME:-$HOME/.config}/sway/config.d/*.conf")'
+include "${XDG_CONFIG_HOME:-$HOME/.config}/sway/machine.d/$HOSTNAME.conf"
diff --git a/hyprland/.config/sway/config.d/03-keybinds.conf b/hyprland/.config/sway/config.d/03-keybinds.conf
new file mode 100644
index 00000000..a60c9cf7
--- /dev/null
+++ b/hyprland/.config/sway/config.d/03-keybinds.conf
@@ -0,0 +1,91 @@
+# vim: set ft=swayconfig:
+#
+# This file holds keybinds for all of swaywm
+#
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+# Program opening and closing
+bindsym $mod+Return exec "$term"
+bindsym $mod+q kill
+bindsym $mod+space exec "rofi -show drun"
+bindsym $mod+backslash exec "rofi -show ssh"
+bindsym $mod+Tab exec "rofi -show window"
+# Dunst management
+bindsym $mod+$shift+space exec dunstctl close
+bindsym $mod+$shift+Return exec dunstctl close-all
+bindsym $mod+$shift+d exec dunstctl history-pop
+bindsym $mod+$shift+o exec dunstctl context
+# Pulse controls
+bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume
+bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume
+bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound
+# Screenshots
+bindsym $mod+o exec grim -g "$(slurp -d)" - | wl-copy
+# Brightness controls
+#bindsym XF86MonBrightnessUp exec xbacklight -inc 5 # increase screen brightness
+#bindsym XF86MonBrightnessDown exec xbacklight -dec 5 # decrease screen brightness
+# pavucontrol controls
+bindsym $mod+p exec --no-startup-id "pgrep pavucontrol || pavucontrol"
+bindsym $mod+$shift+p exec --no-startup-id "pkill pavucontrol"
+# Miscellaneous non-movement hotkeys
+bindsym $ctl+$mod+l exec --no-startup-id "loginctl lock-session"
+bindsym $mod+$shift+c reload
+# Change focus
+bindsym $mod+h focus left
+bindsym $mod+j focus down
+bindsym $mod+k focus up
+bindsym $mod+l focus right
+# Move the focused window around
+bindsym $mod+$shift+h move left
+bindsym $mod+$shift+j move down
+bindsym $mod+$shift+k move up
+bindsym $mod+$shift+l move right
+# Move the focused workspace between monitors
+# Disabled here because I like having workspaces allocated to certain outputs
+#bindsym $sup+h move workspace to output left
+#bindsym $sup+j move workspace to output down
+#bindsym $sup+k move workspace to output up
+#bindsym $sup+l move workspace to output right
+# Configure the split of this container
+bindsym $mod+semicolon split h
+bindsym $mod+v split v
+# Toggle floating
+bindsym $mod+f floating toggle
+# Fullscreen
+bindsym $mod+$shift+f fullscreen toggle
+# Change the layout of this container
+# Disabled because I just fatfinger these, they're never useful in my workflow
+#bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+# Focus the parent container. Lets you move groups at a time
+bindsym $mod+a focus parent
+# Focus the child container
+bindsym $mod+d focus child
+# Switch between workspaces
+bindsym $mod+1 workspace $w1
+bindsym $mod+2 workspace $w2
+bindsym $mod+3 workspace $w3
+bindsym $mod+4 workspace $w4
+bindsym $mod+5 workspace $w5
+bindsym $mod+6 workspace $w6
+bindsym $mod+7 workspace $w7
+bindsym $mod+8 workspace $w8
+bindsym $mod+9 workspace $w9
+bindsym $mod+0 workspace $w10
+bindsym $mod+minus workspace $w11
+bindsym $mod+period workspace next
+bindsym $mod+comma workspace prev
+# Move the focused container to a specific workspace
+bindsym $mod+$shift+1 move container to workspace $w1
+bindsym $mod+$shift+2 move container to workspace $w2
+bindsym $mod+$shift+3 move container to workspace $w3
+bindsym $mod+$shift+4 move container to workspace $w4
+bindsym $mod+$shift+5 move container to workspace $w5
+bindsym $mod+$shift+6 move container to workspace $w6
+bindsym $mod+$shift+7 move container to workspace $w7
+bindsym $mod+$shift+8 move container to workspace $w8
+bindsym $mod+$shift+9 move container to workspace $w9
+bindsym $mod+$shift+0 move container to workspace $w10
+bindsym $mod+$shift+minus move container to workspace $w11
diff --git a/hyprland/.config/sway/config.d/04-inputs.conf b/hyprland/.config/sway/config.d/04-inputs.conf
new file mode 100644
index 00000000..e9c1d400
--- /dev/null
+++ b/hyprland/.config/sway/config.d/04-inputs.conf
@@ -0,0 +1,22 @@
+# vim: set ft=swayconfig:
+#
+# This file stores global confguration for input devices
+#
+
+# Mice
+#input "type:pointer" {
+# accel_profile flat # Disables mouse acceleration
+# pointer_accel 0.000 # Set a sens that I like
+#}
+input "type:touchpad" {
+ drag enabled
+ dwt disabled
+ tap enabled
+ tap_button_map lrm
+}
+# Keyboards
+input "type:keyboard" {
+ xkb_capslock disabled
+ xkb_numlock enabled
+}
+
diff --git a/hyprland/.config/sway/config.d/05-theme.conf b/hyprland/.config/sway/config.d/05-theme.conf
new file mode 100644
index 00000000..e59e0732
--- /dev/null
+++ b/hyprland/.config/sway/config.d/05-theme.conf
@@ -0,0 +1,38 @@
+# vim: set ft=swayconfig:
+#
+# This file controls all theming within swaywm, including colors, gaps,
+# borders, fonts, etc.
+#
+# Right now we're staring at a nice gruvbox theme
+#
+font pango:IBM Plex Sans 12
+default_border pixel 4
+titlebar_border_thickness 4
+focus_on_window_activation none
+gaps inner 8
+
+set $red #fb4934
+set $green #b8bb26
+set $yellow #fabd2f
+set $blue #83a598
+set $magenta #de869b
+set $cyan #8ec07c
+set $white #ebdbb2
+set $black #282828
+set $gray #32302f
+
+# See sway(5) for details on these
+# Border color of the view itself v
+# Indicator color (like for v/h split) v
+# Titlebar text color v
+# Titlebar backgrouond color v
+# Titlebar border color v
+#
+ # The currently focused window
+ client.focused $blue $blue $black $gray $blue
+ # The most recently focused view in an unfocused container
+ client.focused_inactive $gray $black $white $gray $gray
+ # Any other unfocused views
+ client.unfocused $gray $gray $white $gray $gray
+ # Any view with an urgency hint
+ client.urgent $yellow $black $white $gray $yellow
diff --git a/hyprland/.config/sway/config.d/06-modes.conf b/hyprland/.config/sway/config.d/06-modes.conf
new file mode 100644
index 00000000..9dd946ca
--- /dev/null
+++ b/hyprland/.config/sway/config.d/06-modes.conf
@@ -0,0 +1,24 @@
+# vim: set ft=swayconfig:
+#
+# This file stores "modes" for sway, such as for resizing
+#
+
+# Resize
+bindsym $mod+r mode "resize"
+mode "resize" {
+ bindsym h resize shrink width 10 px or 10 ppt
+ bindsym j resize grow height 10 px or 10 ppt
+ bindsym k resize shrink height 10 px or 10 ppt
+ bindsym l resize grow width 10 px or 10 ppt
+
+ bindsym Left resize shrink width 10 px or 10 ppt
+ bindsym Down resize grow height 10 px or 10 ppt
+ bindsym Up resize shrink height 10 px or 10 ppt
+ bindsym Right resize grow width 10 px or 10 ppt
+
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ bindsym $mod+r mode "default"
+}
+
+
diff --git a/hyprland/.config/sway/config.d/30-wallpaper.conf b/hyprland/.config/sway/config.d/30-wallpaper.conf
new file mode 100644
index 00000000..5419ed5f
--- /dev/null
+++ b/hyprland/.config/sway/config.d/30-wallpaper.conf
@@ -0,0 +1,5 @@
+# vim: set ft=swayconfig:
+# Wallpaper
+#output * bg ~/Pictures/Wallpapers/.current fill
+output * bg ~/Pictures/Wallpapers/.current center #282828
+
diff --git a/hyprland/.config/sway/config.d/40-window-rules.conf b/hyprland/.config/sway/config.d/40-window-rules.conf
new file mode 100644
index 00000000..b63231e3
--- /dev/null
+++ b/hyprland/.config/sway/config.d/40-window-rules.conf
@@ -0,0 +1,60 @@
+# vim: set ft=swayconfig:
+#
+# This file allocates rules for organizing windows
+#
+
+## WORKSPACES
+set $w1 1
+set $w2 2
+set $w3 3
+set $w4 4
+set $w5 5
+set $w6 6
+set $w7 7
+set $w8 8
+set $w9 9
+set $w10 10
+set $w11 11
+
+# General rules of thought:
+# * The primary monitor will contain workspaces 1-7
+# * Secondary monitors will get workspaces 8-10
+# * Important apps go on primary, unimportant ones that are likely to be side-
+# content, event-driven, and distractive can go on the secondary
+# * Laptops get all 10 on one monitor, but shunting unimportant junk to the
+# back workspaces yields a better workflow regardless
+# * No rules are set in stone and the user can totally just move stuff around
+# with reckless abandon
+for_window {
+ # Workspace 1 should always be the web browser
+ [app_id="org.mozilla.firefox"] move container to workspace $w1
+
+ # Workspace 2 should contain Steam, if we intend to launch a game this session
+ #[app_id="com.valvesoftware.Steam"] move container to workspace $w2
+
+ # Workspace 8 contains Thunderbird and Keepass
+ [app_id="org.keepassxc.KeePassXC"] move container to workspace $w8
+ [app_id="org.mozilla.Thunderbird"] move container to workspace $w8
+ [class="thunderbird"] move container to workspace $w8
+
+ # Workspace 9 should be communications platforms
+ [app_id="com.dev.vencord.Vesktop"] move container to workspace $w9
+ [app_id="com.dev.vencord.Vesktop"] inhibit_idle visible
+ [app_id="vesktop"] move container to workspace $w9
+ [app_id="vesktop"] inhibit_idle visible
+ [app_id="com.discordapp.Discord"] move container to workspace $w9
+ [app_id="com.discordapp.Discord"] inhibit_idle visible
+
+ [app_id="im.riot.Riot"] move container to workspace $w9
+ [app_id="im.riot.Riot"] inhibit_idle visible
+
+ # And Workspace 10 should contain misc. long-running programs
+ [class="Spotify"] move container to workspace $w10
+ [app_id="spotube"] move container to workspace $w10
+ [class="nuclear"] move container to workspace $w10
+}
+
+# These rules are app-specific but for any workspace
+for_window {
+ [class="steam_app_2291060"] fullscreen
+}
diff --git a/hyprland/.config/sway/config.d/90-swayidle.conf b/hyprland/.config/sway/config.d/90-swayidle.conf
new file mode 100644
index 00000000..81c19dd0
--- /dev/null
+++ b/hyprland/.config/sway/config.d/90-swayidle.conf
@@ -0,0 +1,15 @@
+# vim: set ft=swayconfig:
+#
+# Idle and lock configuration
+#
+
+exec LT="900" && \
+ swayidle -w \
+ timeout $LT \
+ 'swaylock -f' \
+ before-sleep \
+ 'swaylock -f' \
+ lock \
+ 'swaylock -f' \
+ unlock \
+ 'pkill -xu "$USER" -SIGUSR1 swaylock'
diff --git a/hyprland/.config/sway/config.d/90-wlsunset.conf b/hyprland/.config/sway/config.d/90-wlsunset.conf
new file mode 100644
index 00000000..49d84419
--- /dev/null
+++ b/hyprland/.config/sway/config.d/90-wlsunset.conf
@@ -0,0 +1,11 @@
+# vim: set ft=swayconfig:
+#
+# wlsunset is more or less redshift. It reddens the screen as the day draws
+# to a close.
+#
+# For customization, see wlsunset(1)
+#
+exec wlsunset \
+ -T 5300 \
+ -t 3500 \
+ -g 1
diff --git a/hyprland/.config/sway/config.d/template b/hyprland/.config/sway/config.d/template
new file mode 100644
index 00000000..7122041d
--- /dev/null
+++ b/hyprland/.config/sway/config.d/template
@@ -0,0 +1,2 @@
+# vim: set ft=swayconfig:
+
diff --git a/hyprland/.config/sway/environment b/hyprland/.config/sway/environment
new file mode 100644
index 00000000..c24fe4c8
--- /dev/null
+++ b/hyprland/.config/sway/environment
@@ -0,0 +1,2 @@
+#!/bin/sh
+SWAY_EXTRA_ARGS="-D noscanout"
diff --git a/hyprland/.config/sway/machine.d/dsk-ryzen-1.ws.mgmt.desu.ltd.conf b/hyprland/.config/sway/machine.d/dsk-ryzen-1.ws.mgmt.desu.ltd.conf
new file mode 100644
index 00000000..e6fda6b3
--- /dev/null
+++ b/hyprland/.config/sway/machine.d/dsk-ryzen-1.ws.mgmt.desu.ltd.conf
@@ -0,0 +1,54 @@
+# vim: set ft=swayconfig:
+set $monprim "Acer Technologies XV272U 0x11122114"
+set $monsec "Acer Technologies XV272U 0x0501FD67"
+
+output $monprim {
+ res 2560x1440@143.998993Hz
+ pos 1440 937
+ adaptive_sync off
+}
+output $monsec {
+ res 2560x1440@143.998993Hz
+ pos 0 0
+ transform 270
+ adaptive_sync off
+}
+# Valve Index
+output "Unknown Unknown Unknown" {
+ disable
+}
+
+input type:pointer {
+ accel_profile flat
+ pointer_accel 0.000
+}
+
+output * bg ~/Pictures/Wallpapers/1561879941868.jpg fill
+
+## WORKSPACES
+set $w1 1
+set $w2 2
+set $w3 3
+set $w4 4
+set $w5 5
+set $w6 6
+set $w7 7
+set $w8 8
+set $w9 9
+set $w10 10
+set $w11 11
+# Workspace setup for my desktop
+# Defaults to whatever on my laptop and on other machines
+workspace $w1 output $monprim
+workspace $w2 output $monprim
+workspace $w3 output $monprim
+workspace $w4 output $monprim
+workspace $w5 output $monprim
+workspace $w6 output $monprim
+workspace $w7 output $monprim
+# Putting 10 here first so it's the default for my secondary
+workspace $w10 output $monsec
+workspace $w8 output $monsec
+workspace $w9 output $monsec
+workspace $w11 output $monsec
+
diff --git a/hyprland/.config/sway/machine.d/lap-fw-diy-1.ws.mgmt.desu.ltd.conf b/hyprland/.config/sway/machine.d/lap-fw-diy-1.ws.mgmt.desu.ltd.conf
new file mode 100644
index 00000000..e6798700
--- /dev/null
+++ b/hyprland/.config/sway/machine.d/lap-fw-diy-1.ws.mgmt.desu.ltd.conf
@@ -0,0 +1,32 @@
+# vim: set ft=swayconfig:
+set $monprim "eDP-1"
+
+output $monprim scale 1.5
+
+output * bg ~/Pictures/Wallpapers/1561879941868.jpg fill
+
+## WORKSPACES
+set $w1 1
+set $w2 2
+set $w3 3
+set $w4 4
+set $w5 5
+set $w6 6
+set $w7 7
+set $w8 8
+set $w9 9
+set $w10 10
+set $w11 11
+# Workspace setup for my desktop
+# Defaults to whatever on my laptop and on other machines
+workspace $w1 output $mon
+workspace $w2 output $mon
+workspace $w3 output $mon
+workspace $w4 output $mon
+workspace $w5 output $mon
+workspace $w6 output $mon
+workspace $w7 output $mon
+workspace $w8 output $mon
+workspace $w9 output $mon
+workspace $w10 output $mon
+workspace $w11 output $mon
diff --git a/hyprland/.config/sway/machine.d/template b/hyprland/.config/sway/machine.d/template
new file mode 100644
index 00000000..2c9e1484
--- /dev/null
+++ b/hyprland/.config/sway/machine.d/template
@@ -0,0 +1,28 @@
+# vim: set ft=swayconfig:
+## WORKSPACES
+set $w1 1
+set $w2 2
+set $w3 3
+set $w4 4
+set $w5 5
+set $w6 6
+set $w7 7
+set $w8 8
+set $w9 9
+set $w10 10
+# Workspace setup for my desktop
+# Defaults to whatever on my laptop and on other machines
+set $monprim DisplayPort-0
+set $monsec HDMI-A-0
+workspace $w1 output $monprim
+workspace $w2 output $monprim
+workspace $w3 output $monprim
+workspace $w4 output $monprim
+workspace $w5 output $monprim
+workspace $w6 output $monprim
+workspace $w7 output $monprim
+# Putting 10 here first so it's the default for my secondary
+workspace $w10 output $monsec
+workspace $w8 output $monsec
+workspace $w9 output $monsec
+
diff --git a/hyprland/.config/swaylock/config b/hyprland/.config/swaylock/config
new file mode 100644
index 00000000..9160b192
--- /dev/null
+++ b/hyprland/.config/swaylock/config
@@ -0,0 +1,2 @@
+scaling=fill
+color=000000
diff --git a/hyprland/.config/waybar/config b/hyprland/.config/waybar/config
new file mode 100644
index 00000000..f8528102
--- /dev/null
+++ b/hyprland/.config/waybar/config
@@ -0,0 +1,130 @@
+[{
+ "id": "top",
+ "name": "top",
+ "layer": "top",
+ "height": 40,
+ "modules-left": ["sway/workspaces", "sway/mode"],
+ "modules-center": ["sway/window"],
+ "modules-right": ["tray"],
+ "sway/workspaces": {
+ "all-outputs": false,
+ "disable-scroll": true,
+ "persistent-workspaces": {
+ "1": ["eDP-1", "DP-1"],
+ "2": ["eDP-1", "DP-1"],
+ "3": ["eDP-1", "DP-1"],
+ "4": ["eDP-1", "DP-1"],
+ "5": ["eDP-1", "DP-1"],
+ "6": ["eDP-1", "DP-1"],
+ "7": ["eDP-1", "DP-1"],
+ "8": ["eDP-1", "DP-2"],
+ "9": ["eDP-1", "DP-2"],
+ "10": ["eDP-1", "DP-2"],
+ "11": ["eDP-1", "DP-2"]
+ }
+ },
+ "sway/window": {
+ },
+ "tray": {
+ "icon-size": 16,
+ "spacing": 10
+ }
+},
+{
+ "id": "bottom",
+ "name": "bottom",
+ "layer": "top",
+ "position": "bottom",
+ "height": 40,
+ "modules-left": ["gamemode", "custom/backup", "battery", "temperature", "cpu", "memory", "network"],
+ "modules-center": [],
+ "modules-right": ["mpris", "pulseaudio", "backlight", "idle_inhibitor", "clock"],
+ "clock": {
+ "format": "{:%a %b %d %I:%M %p}",
+ "tooltip": false
+ },
+ "network": {
+ "interval": 5,
+ "format": " {bandwidthUpBytes} {bandwidthDownBytes}",
+ "format-disconnected": ""
+ },
+ "battery": {
+ "states": {
+ "good": 100,
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "{icon} {capacity}%",
+ "format-charging": "{icon} {capacity}%",
+ "format-plugged": "{icon} {capacity}%",
+ "format-icons": ["", "", "", "", ""]
+ },
+ "backlight": {
+ "format": " {percent}%"
+ },
+ "idle_inhibitor": {
+ "format": ""
+ },
+ "gamemode": {
+ "format": "{glyph}",
+ "glyph": "",
+ "use-icon": false,
+ "icon-spacing": 0,
+ "icon-size": 0
+ },
+ "pulseaudio": {
+ "scroll-step": 5,
+ "format": "{icon} {volume}%",
+ "format-icons": {
+ "default": ["", "", ""]
+ },
+ "on-scroll-up": "/usr/libexec/sway/volume-helper --limit 100 --increase 5",
+ "on-scroll-down": "/usr/libexec/sway/volume-helper --limit 100 --decrease 5",
+ "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle && /usr/libexec/sway/volume-helper"
+ },
+ "cpu": {
+ "interval": 3,
+ "format": " {usage}%",
+ "states": {
+ "critical": 90,
+ "warning": 80,
+ "regular": 50
+ }
+ },
+ "memory": {
+ "interval": 5,
+ "format": " {percentage}% {swapPercentage}%",
+ "states": {
+ "critical": 90,
+ "warning": 80,
+ "regular": 50
+ }
+ },
+ "temperature": {
+ "format": " {temperatureC}°",
+ "critical-threshold": 80
+ },
+ "mpris": {
+ "interval": 1,
+ "artist-len": 30,
+ "album-len": 30,
+ "title-len": 40,
+ "format": "{player_icon} - {dynamic}",
+ "ignored-players": [
+ "firefox"
+ ],
+ "player-icons": {
+ "default": "♫"
+ },
+ "status-icons": {
+ "playing": "⏵",
+ "paused": "⏸",
+ "stopped": "⏹"
+ }
+ },
+ "custom/backup": {
+ "interval": 60,
+ "format": "",
+ "exec": "systemctl is-failed backup.service"
+ }
+}]
diff --git a/hyprland/.config/waybar/style.css b/hyprland/.config/waybar/style.css
new file mode 100644
index 00000000..cb47ff09
--- /dev/null
+++ b/hyprland/.config/waybar/style.css
@@ -0,0 +1,178 @@
+/*
+ * style.css
+ * Copyright (C) 2021 Vintage Salt
+ *
+ * Distributed under terms of the MIT license.
+ */
+
+* {
+ border: none;
+ border-radius: 0;
+ font-family: "IBM Plex Sans", "Font Awesome 6 Free", sans-serif;
+ font-size: 13px;
+}
+
+window#waybar {
+ background: #282828;
+}
+window#waybar.top {
+ background: linear-gradient(0deg, rgba(40,40,40,0) 0%, rgba(40,40,40,1) 80%);
+}
+window#waybar.bottom {
+ background: linear-gradient(180deg, rgba(40,40,40,0) 0%, rgba(40,40,40,1) 80%);
+}
+
+/* swaywm stuff */
+#workspaces {
+}
+#workspaces button {
+ /* Any random button */
+ background: transparent;
+ color: #a89984;
+ padding: 0 0.9em;
+}
+#workspaces button:hover {
+ /* A button that is currently being hovered over by the mouse cursor */
+ /* This comes with free transitions */
+ box-shadow: inherit;
+ text-shadow: inherit;
+ background-color: #504945;
+}
+#workspaces button.visible {
+ color: #282828;
+ background: #504945;
+ font-weight: bold;
+}
+#workspaces button.focused {
+ color: #282828;
+ background: #83a598;
+ font-weight: bold;
+}
+#workspaces button.urgent {
+ color: #fabd2f;
+ font-weight: bold;
+}
+#workspaces button.persistent {
+ color: #504945;
+}
+#mode {
+ background: #fb4934;
+ color: #ebdbb2;
+ padding: 0 1em;
+}
+
+/* widgets */
+#window {
+ color: #ebdbb2;
+}
+#pulseaudio {
+ padding: 0 1em;
+ color: #ebdbb2;
+}
+#pulseaudio.muted {
+ border-top: 4px solid #fb4934;
+ border-bottom: 4px solid #282828;
+}
+#tray {
+ padding: 0 1em;
+}
+#mpris {
+ padding: 0 1em;
+}
+#mpris.playing {
+ color: #d3869b;
+}
+#mpris.paused, #mpris.stopped {
+ color: #504945;
+}
+
+#network {
+ padding: 0 1em;
+ color: #504945;
+}
+#network.disconnected {
+ color: #fb4934;
+}
+
+#idle_inhibitor {
+ padding: 0 1em;
+}
+#idle_inhibitor.deactivated {
+ color: #504945;
+}
+#idle_inhibitor.activated {
+ color: #ebdbb2;
+}
+
+#backlight {
+ padding: 0 1em;
+ color: #ebdbb2;
+}
+#gamemode {
+ padding: 0 1em;
+ color: #504945;
+}
+#gamemode.running {
+ color: #b8bb26;
+}
+/* Memory */
+#memory {
+ padding: 0 1em;
+ color: #504945;
+}
+#memory.critical {
+ color: #fb4934;
+}
+#memory.warning {
+ color: #fabd2f;
+}
+#memory.regular {
+ color: #ebdbb2;
+}
+/* CPU */
+#cpu {
+ padding: 0 1em;
+ color: #504945;
+}
+#cpu.critical {
+ color: #fb4934;
+}
+#cpu.warning {
+ color: #fabd2f;
+}
+#cpu.regular {
+ color: #ebdbb2;
+}
+/* Battery */
+#battery {
+ padding: 0 1em;
+}
+#battery.charging {
+ color: #b8bb26;
+}
+#battery.good {
+ color: #504945;
+}
+#battery.discharging.warning {
+ color: #fabd2f;
+}
+#battery.discharging.critical {
+ color: #fb4934;
+}
+#clock {
+ color: #ebdbb2;
+ padding: 0 1em;
+}
+/* Temperature*/
+#temperature {
+ padding: 0 1em;
+ color: #504945;
+}
+#temperature.critical {
+ color: #fb4934;
+}
+/* Custom modules */
+#custom-backup {
+ color: #fb4934;
+ padding: 0 1em;
+}
diff --git a/hyprland/.var/app/dev.vencord.Vesktop/config/vesktop/themes/midnight-gruvbox.theme.css b/hyprland/.var/app/dev.vencord.Vesktop/config/vesktop/themes/midnight-gruvbox.theme.css
new file mode 100644
index 00000000..33189e0c
--- /dev/null
+++ b/hyprland/.var/app/dev.vencord.Vesktop/config/vesktop/themes/midnight-gruvbox.theme.css
@@ -0,0 +1,83 @@
+/**
+ * @name midnight-gruvbox
+ * @description A dark, rounded discord theme. Managed by .dotfiles, packed in by stow. Original by refact0r
+ * @author salt
+ * @version 1.6.2
+ * @source https://github.com/refact0r/midnight-discord/blob/master/midnight.theme.css
+*/
+
+/* IMPORTANT: make sure to enable dark mode in discord settings for the theme to apply properly!!! */
+
+@import url('https://refact0r.github.io/midnight-discord/midnight.css');
+
+/* customize things here */
+:root {
+ /* font, change to 'gg sans' for default discord font*/
+ --font: 'IBM Plex Sans';
+
+ /* top left corner text */
+ --corner-text: 'Midnight';
+
+ /* color of status indicators and window controls */
+ --online-indicator: #b8bb26; /* change to #23a55a for default green */
+ --dnd-indicator: #fb4934; /* change to #f13f43 for default red */
+ --idle-indicator: #fabd2f; /* change to #f0b232 for default yellow */
+ --streaming-indicator: #d3869b; /* change to #593695 for default purple */
+
+ /* accent colors */
+ --accent-1: #83a598; /* links */
+ --accent-2: #83a598; /* general unread/mention elements */
+ --accent-3: #83a598; /* accent buttons */
+ --accent-4: #458588; /* accent buttons when hovered */
+ --accent-5: #458588; /* accent buttons when clicked */
+ --mention: #3c3836; /* mentions & mention messages */
+ --mention-hover: #504945; /* mentions & mention messages when hovered */
+
+ /* text colors */
+ --text-0: #ebdbb2; /* text on colored elements */
+ --text-1: var(--text-2); /* other normally white text */
+ --text-2: #ebdbb2; /* headings and important text */
+ --text-3: #d5c4a1; /* normal text */
+ --text-4: #bdae93; /* icon buttons and channels */
+ --text-5: #7c6f64; /* muted channels/chats and timestamps */
+
+ /* background and dark colors */
+ --bg-1: #665c54; /* dark buttons when clicked */
+ --bg-2: #504945; /* dark buttons */
+ --bg-3: #32302f; /* spacing, secondary elements */
+ --bg-4: #282828; /* main background color */
+ --hover: #3c3836; /* channels and buttons when hovered */
+ --active: #3c3836; /* channels and buttons when clicked or selected */
+ --message-hover: #1d2021; /* messages when hovered */
+
+ /* amount of spacing and padding */
+ --spacing: 8px;
+
+ /* animations */
+ /* ALL ANIMATIONS CAN BE DISABLED WITH REDUCED MOTION IN DISCORD SETTINGS */
+ --list-item-transition: 0.2s ease; /* channels/members/settings hover transition */
+ --unread-bar-transition: 0.2s ease; /* unread bar moving into view transition */
+ --moon-spin-transition: 0.4s ease; /* moon icon spin */
+ --icon-spin-transition: 1s ease; /* round icon button spin (settings, emoji, etc.) */
+
+ /* corner roundness (border-radius) */
+ --roundness-xl: 16px; /* roundness of big panel outer corners */
+ --roundness-l: 14px; /* popout panels */
+ --roundness-m: 12px; /* smaller panels, images, embeds */
+ --roundness-s: 8px; /* members, settings inputs */
+ --roundness-xs: 4px; /* channels, buttons */
+ --roundness-xxs: 4px; /* searchbar, small elements */
+
+ /* direct messages moon icon */
+ /* change to block to show, none to hide */
+ --discord-icon: block; /* discord icon */
+ --moon-icon: none; /* moon icon */
+ --moon-icon-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* custom icon url */
+ --moon-icon-size: auto;
+
+ /* filter uncolorable elements to fit theme */
+ /* (just set to none, they're too much work to configure) */
+ --login-bg-filter: saturate(0.3) hue-rotate(-15deg) brightness(0.4); /* login background artwork */
+ --green-to-accent-3-filter: hue-rotate(56deg) saturate(1.43); /* add friend page explore icon */
+ --blurple-to-accent-3-filter: hue-rotate(304deg) saturate(0.84) brightness(1.2); /* add friend page school icon */
+}