diff --git a/dunst/dunstrc b/dunst/dunstrc
new file mode 100644
index 0000000..b253ec4
--- /dev/null
+++ b/dunst/dunstrc
@@ -0,0 +1,430 @@
+[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
+
+ # 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 = "300x5-10+43"
+
+ # 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 = 25
+
+ # 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 = 5
+
+ # Padding between text and separator.
+ padding = 8
+
+ # Horizontal padding.
+ horizontal_padding = 8
+
+ # 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 = "#00000000"
+
+ # 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 = Monospace 8
+
+ # 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
+ # %% Literal %
+ # Markup is allowed
+ format = "%s\n%b"
+
+ # Alignment of message text.
+ # Possible values are "left", "center" and "right".
+ alignment = left
+
+ # Vertical alignment of message text and icon.
+ # Possible values are "top", "center" and "bottom".
+ vertical_alignment = top
+
+ # 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
+
+ # When word_wrap is set to no, 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 = false
+
+ # Hide the count of stacked 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 = left
+
+ # 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/Dracula/actions/16/:/usr/share/icons/Dracula/16/:/usr/share/icons/Dracula/Places/16/
+
+ ### 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/firefox -new-tab
+
+ # 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
+
+ # Manage dunst's desire for talking
+ # Can be one of the following values:
+ # crit: Critical features. Dunst aborts
+ # warn: Only non-fatal warnings
+ # mesg: Important Messages
+ # info: all unimportant stuff
+ # debug: all less than unimportant stuff
+ verbosity = mesg
+
+ # 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
+
+ ### 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: If the notification has exactly one action, or one is marked as default,
+ # invoke it. If there are multiple and no default, open the context menu.
+ # * close_current: Close current notification.
+ # * close_all: Close 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
+
+[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 = ctrl+space
+
+ # Close all notifications.
+ close_all = ctrl+shift+space
+
+ # 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 = ctrl+grave
+
+ # Context menu.
+ context = ctrl+shift+period
+
+[urgency_low]
+ # IMPORTANT: colors have to be defined in quotation marks.
+ # Otherwise the "#" and following would be interpreted as a comment.
+ background = "#282a36"
+ foreground = "#f8f8f2"
+ timeout = 10
+ # Icon for notifications with low urgency, uncomment to enable
+ #icon = /path/to/icon
+
+[urgency_normal]
+ background = "#282a36"
+ foreground = "#f8f8f2"
+ timeout = 10
+ # Icon for notifications with normal urgency, uncomment to enable
+ #icon = /path/to/icon
+
+[urgency_critical]
+ background = "#900000"
+ foreground = "#ffffff"
+ 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 (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
+# timeout
+# urgency
+#
+# 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: 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.
+
+# 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"
+# format = ""
+
+#[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/fish/config.fish b/fish/config.fish
index a7173c0..c10dc49 100644
--- a/fish/config.fish
+++ b/fish/config.fish
@@ -2,6 +2,8 @@ set --export SHELL /bin/fish
set --export EDITOR "nvim"
set -e fish_greeting
+set -U fish_user_paths /home/kalle/.gem/ruby/2.7.0/bin $fish_user_paths
+
source "$HOME/.config/fish/abbreviations.fish"
function playlist-dl
diff --git a/fish/fish_variables b/fish/fish_variables
index 25d8d15..e68b33e 100644
--- a/fish/fish_variables
+++ b/fish/fish_variables
@@ -34,6 +34,7 @@ SETUVAR fish_pager_color_completion:\x1d
SETUVAR fish_pager_color_description:B3A06D\x1eyellow
SETUVAR fish_pager_color_prefix:white\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
+SETUVAR fish_user_paths:/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin\x1e/home/kalle/\x2egem/ruby/2\x2e7\x2e0/bin
SETUVAR pure_begin_prompt_with_current_directory:true
SETUVAR pure_color_command_duration:pure_color_warning
SETUVAR pure_color_current_directory:pure_color_primary
diff --git a/i3/config b/i3/config
new file mode 100644
index 0000000..cf7a2fb
--- /dev/null
+++ b/i3/config
@@ -0,0 +1,153 @@
+# Set the mod key to be the meta key.
+set $mod Mod4
+
+# Set the font used by i3.
+font pango:DejaVu Sans Mono 8
+
+# Launch picom on startup
+exec --no-startup-id picom -bc
+
+# Set a random desktop background
+exec --no-startup-id feh --bg-scale --random ~/Pictures/Wallpapers/
+
+# Launch polybar
+exec --no-startup-id polybar primary
+
+# Launch dunst
+exec --no-startup-id dunst
+
+# Launch MPD
+exec --no-startup-id mpd
+
+# Launch flameshot
+exec --no-startup-id flameshot
+
+# Use pactl to adjust volume in PulseAudio.
+bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% && $refresh_i3status
+bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% && $refresh_i3status
+bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
+
+# Media player controls
+bindsym XF86AudioPlay exec mpc toggle
+bindsym XF86AudioNext exec mpc next
+bindsym XF86AudioPrev exec mpc previous
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# Start kitty
+bindsym $mod+Return exec --no-startup-id kitty
+
+# Kill focused window
+bindsym $mod+Shift+q kill
+
+# Start dmenu
+bindsym $mod+d exec --no-startup-id dmenu_run
+
+# Change focus
+bindsym $mod+h focus left
+bindsym $mod+j focus down
+bindsym $mod+k focus up
+bindsym $mod+l focus right
+
+# Move focused window
+bindsym $mod+Shift+h move left
+bindsym $mod+Shift+j move down
+bindsym $mod+Shift+k move up
+bindsym $mod+Shift+l move right
+
+# Enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+
+# TODO: Change these hotkeys. Cause they suck.
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+
+# Toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# Gaps
+gaps inner 10
+gaps outer 0
+
+# Disable borders
+for_window [class="^.*"] border pixel 1
+
+# Define names for default workspaces for which we configure key bindings later on.
+# We use variables to avoid repeating the names in multiple places.
+set $ws1 "1"
+set $ws2 "2"
+set $ws3 "3"
+set $ws4 "4"
+set $ws5 "5"
+set $ws6 "6"
+set $ws7 "7"
+set $ws8 "8"
+set $ws9 "9"
+set $ws10 "10"
+
+# switch to workspace
+bindsym $mod+1 workspace number $ws1
+bindsym $mod+2 workspace number $ws2
+bindsym $mod+3 workspace number $ws3
+bindsym $mod+4 workspace number $ws4
+bindsym $mod+5 workspace number $ws5
+bindsym $mod+6 workspace number $ws6
+bindsym $mod+7 workspace number $ws7
+bindsym $mod+8 workspace number $ws8
+bindsym $mod+9 workspace number $ws9
+bindsym $mod+0 workspace number $ws10
+
+# move focused container to workspace
+bindsym $mod+Shift+1 move container to workspace number $ws1
+bindsym $mod+Shift+2 move container to workspace number $ws2
+bindsym $mod+Shift+3 move container to workspace number $ws3
+bindsym $mod+Shift+4 move container to workspace number $ws4
+bindsym $mod+Shift+5 move container to workspace number $ws5
+bindsym $mod+Shift+6 move container to workspace number $ws6
+bindsym $mod+Shift+7 move container to workspace number $ws7
+bindsym $mod+Shift+8 move container to workspace number $ws8
+bindsym $mod+Shift+9 move container to workspace number $ws9
+bindsym $mod+Shift+0 move container to workspace number $ws10
+
+# reload the configuration file
+bindsym $mod+Shift+c reload
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+r restart
+# exit i3 (logs you out of your X session)
+bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
+
+
+# Colors border bground text indicator child_border
+client.focused #3366CC #2356BC #FFFFFF #3366CC #3366CC
+client.focused_inactive #000000 #000000 #FFFFFF #000000 #000000
+client.unfocused #000000 #000000 #FFFFFF #000000 #000000
+client.urgent #900000 #900000 #FFFFFF #900000 #900000
+client.placeholder #000000 #000000 #FFFFFF #000000 #000000
+
+client.background #FFFFFF
+
+# TODO: Change these.
+# resize window (you can also use the mouse for that)
+mode "resize" {
+ # These bindings trigger as soon as you enter the resize mode
+
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s height.
+ 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
+
+ # back to normal: Enter or Escape or $mod+r
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ bindsym $mod+r mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
diff --git a/kitty/INSTALL.md b/kitty/INSTALL.md
new file mode 100644
index 0000000..324bd11
--- /dev/null
+++ b/kitty/INSTALL.md
@@ -0,0 +1,14 @@
+### [kitty](https://sw.kovidgoyal.net/kitty/)
+
+#### Install
+
+Download using the [GitHub .zip download](https://github.com/dracula/kitty/archive/master.zip) option
+
+```
+$ cp dracula.conf diff.conf ~/.config/kitty/
+$ echo "include dracula.conf" >> ~/.config/kitty/kitty.conf
+```
+
+Then reload kitty for the config to take affect.
+
+Alternatively copy paste `dracula.conf` directly into `kitty.conf`.
diff --git a/kitty/dracula.conf b/kitty/dracula.conf
new file mode 100644
index 0000000..8bee635
--- /dev/null
+++ b/kitty/dracula.conf
@@ -0,0 +1,62 @@
+# https://draculatheme.com/kitty
+#
+# Installation instructions:
+#
+# cp dracula.conf ~/.config/kitty/
+# echo "include dracula.conf" >> ~/.config/kitty/kitty.conf
+#
+# Then reload kitty for the config to take affect.
+# Alternatively copy paste below directly into kitty.conf
+
+foreground #f8f8f2
+background #282a36
+selection_foreground #ffffff
+selection_background #44475a
+
+url_color #8be9fd
+
+# black
+color0 #21222c
+color8 #6272a4
+
+# red
+color1 #ff5555
+color9 #ff6e6e
+
+# green
+color2 #50fa7b
+color10 #69ff94
+
+# yellow
+color3 #f1fa8c
+color11 #ffffa5
+
+# blue
+color4 #bd93f9
+color12 #d6acff
+
+# magenta
+color5 #ff79c6
+color13 #ff92df
+
+# cyan
+color6 #8be9fd
+color14 #a4ffff
+
+# white
+color7 #f8f8f2
+color15 #ffffff
+
+# Cursor colors
+cursor #f8f8f2
+cursor_text_color background
+
+# Tab bar colors
+active_tab_foreground #282a36
+active_tab_background #f8f8f2
+inactive_tab_foreground #282a36
+inactive_tab_background #6272a4
+
+# Marks
+mark1_foreground #282a36
+mark1_background #ff5555
diff --git a/kitty/kitty.conf b/kitty/kitty.conf
new file mode 100644
index 0000000..51c6572
--- /dev/null
+++ b/kitty/kitty.conf
@@ -0,0 +1,8 @@
+font_family "Roboto Mono Nerd Font"
+bold_font auto
+italic_font auto
+bold_italic_font auto
+
+background_opacity 0.8
+
+include dracula.conf
diff --git a/mpd/mpd.conf b/mpd/mpd.conf
new file mode 100644
index 0000000..f8e6763
--- /dev/null
+++ b/mpd/mpd.conf
@@ -0,0 +1,399 @@
+# Files and directories #######################################################
+#
+# This setting controls the top directory which MPD will search to discover the
+# available audio files and add them to the daemon's online database. This
+# setting defaults to the XDG directory, otherwise the music directory will be
+# be disabled and audio files will only be accepted over ipc socket (using
+# file:// protocol) or streaming files over an accepted protocol.
+#
+music_directory "~/Music"
+#
+# This setting sets the MPD internal playlist directory. The purpose of this
+# directory is storage for playlists created by MPD. The server will use
+# playlist files not created by the server but only if they are in the MPD
+# format. This setting defaults to playlist saving being disabled.
+#
+playlist_directory "~/.local/share/mpd/playlists"
+#
+# This setting sets the location of the MPD database. This file is used to
+# load the database at server start up and store the database while the
+# server is not up. This setting defaults to disabled which will allow
+# MPD to accept files over ipc socket (using file:// protocol) or streaming
+# files over an accepted protocol.
+#
+db_file "~/.local/share/mpd/database"
+#
+# These settings are the locations for the daemon log files for the daemon.
+# These logs are great for troubleshooting, depending on your log_level
+# settings.
+#
+# The special value "syslog" makes MPD use the local syslog daemon. This
+# setting defaults to logging to syslog.
+#
+log_file "~/.local/share/mpd/log"
+#
+# This setting sets the location of the file which stores the process ID
+# for use of mpd --kill and some init scripts. This setting is disabled by
+# default and the pid file will not be stored.
+#
+pid_file "~/.local/share/mpd/pid"
+#
+# This setting sets the location of the file which contains information about
+# most variables to get MPD back into the same general shape it was in before
+# it was brought down. This setting is disabled by default and the server
+# state will be reset on server start up.
+#
+state_file "~/.local/share/mpd/state"
+#
+# The location of the sticker database. This is a database which
+# manages dynamic information attached to songs.
+#
+sticker_file "~/.local/share/mpd/sticker.sql"
+#
+###############################################################################
+
+
+# General music daemon options ################################################
+#
+# This setting specifies the user that MPD will run as. MPD should never run as
+# root and you may use this setting to make MPD change its user ID after
+# initialization. This setting is disabled by default and MPD is run as the
+# current user.
+#
+#user "nobody"
+#
+# This setting specifies the group that MPD will run as. If not specified
+# primary group of user specified with "user" setting will be used (if set).
+# This is useful if MPD needs to be a member of group such as "audio" to
+# have permission to use sound card.
+#
+#group "nogroup"
+#
+# This setting sets the address for the daemon to listen on. Careful attention
+# should be paid if this is assigned to anything other then the default, any.
+# This setting can deny access to control of the daemon. Not effective if
+# systemd socket activiation is in use.
+#
+# For network
+bind_to_address "0.0.0.0"
+#
+# And for Unix Socket
+#bind_to_address "~/.mpd/socket"
+#
+# This setting is the TCP port that is desired for the daemon to get assigned
+# to.
+#
+port "6600"
+#
+# Suppress all messages below the given threshold. Use "verbose" for
+# troubleshooting.
+#
+#log_level "notice"
+#
+# Setting "restore_paused" to "yes" puts MPD into pause mode instead
+# of starting playback after startup.
+#
+#restore_paused "no"
+#
+# This setting enables MPD to create playlists in a format usable by other
+# music players.
+#
+#save_absolute_paths_in_playlists "no"
+#
+# This setting defines a list of tag types that will be extracted during the
+# audio file discovery process. The complete list of possible values can be
+# found in the user manual.
+#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
+#
+# This example just enables the "comment" tag without disabling all
+# the other supported tags:
+#metadata_to_use "+comment"
+#
+# This setting enables automatic update of MPD's database when files in
+# music_directory are changed.
+#
+#auto_update "yes"
+#
+# Limit the depth of the directories being watched, 0 means only watch
+# the music directory itself. There is no limit by default.
+#
+#auto_update_depth "3"
+#
+###############################################################################
+
+
+# Symbolic link behavior ######################################################
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links outside of the configured music_directory.
+#
+#follow_outside_symlinks "yes"
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links inside of the configured music_directory.
+#
+#follow_inside_symlinks "yes"
+#
+###############################################################################
+
+
+# Zeroconf / Avahi Service Discovery ##########################################
+#
+# If this setting is set to "yes", service information will be published with
+# Zeroconf / Avahi.
+#
+#zeroconf_enabled "yes"
+#
+# The argument to this setting will be the Zeroconf / Avahi unique name for
+# this MPD server on the network. %h will be replaced with the hostname.
+#
+#zeroconf_name "Music Player @ %h"
+#
+###############################################################################
+
+
+# Permissions #################################################################
+#
+# If this setting is set, MPD will require password authorization. The password
+# setting can be specified multiple times for different password profiles.
+#
+#password "password@read,add,control,admin"
+#
+# This setting specifies the permissions a user has who has not yet logged in.
+#
+#default_permissions "read,add,control,admin"
+#
+###############################################################################
+
+
+# Database #######################################################################
+#
+
+#database {
+# plugin "proxy"
+# host "other.mpd.host"
+# port "6600"
+#}
+
+# Input #######################################################################
+#
+
+input {
+ plugin "curl"
+# proxy "proxy.isp.com:8080"
+# proxy_user "user"
+# proxy_password "password"
+}
+
+#
+###############################################################################
+
+# Audio Output ################################################################
+#
+# MPD supports various audio output types, as well as playing through multiple
+# audio outputs at the same time, through multiple audio_output settings
+# blocks. Setting this block is optional, though the server will only attempt
+# autodetection for one sound card.
+#
+# An example of an ALSA output:
+#
+#audio_output {
+# type "alsa"
+# name "My ALSA Device"
+## device "hw:0,0" # optional
+## mixer_type "hardware" # optional
+## mixer_device "default" # optional
+## mixer_control "PCM" # optional
+## mixer_index "0" # optional
+#}
+#
+# An example of an OSS output:
+#
+#audio_output {
+# type "oss"
+# name "My OSS Device"
+## device "/dev/dsp" # optional
+## mixer_type "hardware" # optional
+## mixer_device "/dev/mixer" # optional
+## mixer_control "PCM" # optional
+#}
+#
+# An example of a shout output (for streaming to Icecast):
+#
+#audio_output {
+# type "shout"
+# encoder "vorbis" # optional
+# name "My Shout Stream"
+# host "localhost"
+# port "8000"
+# mount "/mpd.ogg"
+# password "hackme"
+# quality "5.0"
+# bitrate "128"
+# format "44100:16:1"
+## protocol "icecast2" # optional
+## user "source" # optional
+## description "My Stream Description" # optional
+## url "http://example.com" # optional
+## genre "jazz" # optional
+## public "no" # optional
+## timeout "2" # optional
+## mixer_type "software" # optional
+#}
+#
+# An example of a recorder output:
+#
+#audio_output {
+# type "recorder"
+# name "My recorder"
+# encoder "vorbis" # optional, vorbis or lame
+# path "/var/lib/mpd/recorder/mpd.ogg"
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+#}
+#
+# An example of a httpd output (built-in HTTP streaming server):
+#
+#audio_output {
+# type "httpd"
+# name "My HTTP Stream"
+# encoder "vorbis" # optional, vorbis or lame
+# port "8000"
+# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+# max_clients "0" # optional 0=no limit
+#}
+#
+# An example of a pulseaudio output (streaming to a remote pulseaudio server)
+#
+audio_output {
+ type "pulse"
+ name "MPD"
+# server "localhost" # optional
+# sink "remote_server_sink" # optional
+# media_role "media_role" #optional
+}
+#
+# An example of a winmm output (Windows multimedia API).
+#
+#audio_output {
+# type "winmm"
+# name "My WinMM output"
+## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
+# or
+## device "0" # optional
+## mixer_type "hardware" # optional
+#}
+#
+# An example of a wasapi output (Windows multimedia API).
+#
+#audio_output {
+# type "wasapi"
+# name "My WASAPI output"
+## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
+# or
+## device "0" # optional
+## Exclusive mode blocks all other audio source, and get best audio quality without resampling.
+## exclusive "no" # optional
+## Enumerate all devices in log.
+## enumerate "no" # optional
+#}
+#
+# An example of an openal output.
+#
+#audio_output {
+# type "openal"
+# name "My OpenAL output"
+## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
+#}
+#
+# An example of an sndio output.
+#
+#audio_output {
+# type "sndio"
+# name "sndio output"
+# mixer_type "hardware"
+#}
+#
+# An example of an OS X output:
+#
+#audio_output {
+# type "osx"
+# name "My OS X Device"
+## device "Built-in Output" # optional
+## channel_map "-1,-1,0,1" # optional
+#}
+#
+## Example "pipe" output:
+#
+#audio_output {
+# type "pipe"
+# name "my pipe"
+# command "aplay -f cd 2>/dev/null"
+## Or if you're want to use AudioCompress
+# command "AudioCompress -m | aplay -f cd 2>/dev/null"
+## Or to send raw PCM stream through PCM:
+# command "nc example.org 8765"
+# format "44100:16:2"
+#}
+#
+## An example of a null output (for no audio output):
+#
+#audio_output {
+# type "null"
+# name "My Null Output"
+# mixer_type "none" # optional
+#}
+#
+###############################################################################
+
+
+# Normalization automatic volume adjustments ##################################
+#
+# This setting specifies the type of ReplayGain to use. This setting can have
+# the argument "off", "album", "track" or "auto". "auto" is a special mode that
+# chooses between "track" and "album" depending on the current state of
+# random playback. If random playback is enabled then "track" mode is used.
+# See for more details about ReplayGain.
+# This setting is off by default.
+#
+#replaygain "album"
+#
+# This setting sets the pre-amp used for files that have ReplayGain tags. By
+# default this setting is disabled.
+#
+#replaygain_preamp "0"
+#
+# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
+# By default this setting is disabled.
+#
+#replaygain_missing_preamp "0"
+#
+# This setting enables or disables ReplayGain limiting.
+# MPD calculates actual amplification based on the ReplayGain tags
+# and replaygain_preamp / replaygain_missing_preamp setting.
+# If replaygain_limit is enabled MPD will never amplify audio signal
+# above its original level. If replaygain_limit is disabled such amplification
+# might occur. By default this setting is enabled.
+#
+#replaygain_limit "yes"
+#
+# This setting enables on-the-fly normalization volume adjustment. This will
+# result in the volume of all playing audio to be adjusted so the output has
+# equal "loudness". This setting is disabled by default.
+#
+#volume_normalization "no"
+#
+###############################################################################
+
+# Character Encoding ##########################################################
+#
+# If file or directory names do not display correctly for your locale then you
+# may need to modify this setting.
+#
+#filesystem_charset "UTF-8"
+#
+###############################################################################
diff --git a/picom/picom.conf b/picom/picom.conf
new file mode 100644
index 0000000..3e28a64
--- /dev/null
+++ b/picom/picom.conf
@@ -0,0 +1,150 @@
+#################################
+# Background-Blurring #
+#################################
+
+# Blur background of semi-transparent / ARGB windows.
+# Bad in performance, with driver-dependent behavior.
+# The name of the switch may change without prior notifications.
+#
+blur-background = true;
+
+# Specify the blur convolution kernel, with the following format:
+# example:
+# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
+#
+# blur-kern = ''
+blur-kern = "5x5box";
+
+
+# Exclude conditions for background blur.
+# blur-background-exclude = []
+blur-background-exclude = [
+ "window_type = 'dock'",
+ "window_type = 'desktop'",
+ "_GTK_FRAME_EXTENTS@:c"
+];
+
+#################################
+# General Settings #
+#################################
+
+# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
+# `xrender` is the default one.
+#
+# backend = 'glx'
+backend = "xrender";
+
+# Enable/disable VSync.
+# vsync = false
+vsync = true
+
+# Try to detect WM windows (a non-override-redirect window with no
+# child that has 'WM_STATE') and mark them as active.
+mark-wmwin-focused = true;
+
+# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
+mark-ovredir-focused = true;
+
+# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
+# not passing '_NET_WM_OPACITY' of client windows to frame windows.
+detect-client-opacity = true;
+
+# Specify refresh rate of the screen. If not specified or 0, picom will
+# try detecting this with X RandR extension.
+refresh-rate = 144;
+
+# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
+# in the same group focused at the same time.
+#
+# detect-transient = false
+detect-transient = true
+
+# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
+# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
+# detect-transient is enabled, too.
+#
+# detect-client-leader = false
+detect-client-leader = true
+
+# GLX backend: Avoid rebinding pixmap on window damage.
+# Probably could improve performance on rapid window content changes,
+# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
+# Recommended if it works.
+#
+# glx-no-rebind-pixmap = false
+
+# Disable the use of damage information.
+# This cause the whole screen to be redrawn everytime, instead of the part of the screen
+# has actually changed. Potentially degrades the performance, but might fix some artifacts.
+# The opposing option is use-damage
+#
+# no-use-damage = false
+use-damage = true
+
+# Use X Sync fence to sync clients' draw calls, to make sure all draw
+# calls are finished before picom starts drawing. Needed on nvidia-drivers
+# with GLX backend for some users.
+#
+xrender-sync-fence = false
+
+# Set the log level. Possible values are:
+# "trace", "debug", "info", "warn", "error"
+# in increasing level of importance. Case doesn't matter.
+# If using the "TRACE" log level, it's better to log into a file
+# using *--log-file*, since it can generate a huge stream of logs.
+#
+# log-level = "debug"
+log-level = "warn";
+
+# Set the log file.
+# If *--log-file* is never specified, logs will be written to stderr.
+# Otherwise, logs will to written to the given file, though some of the early
+# logs might still be written to the stderr.
+# When setting this option from the config file, it is recommended to use an absolute path.
+#
+# log-file = '/path/to/your/log/file'
+
+# Show all X errors (for debugging)
+# show-all-xerrors = false
+
+# Write process ID to a file.
+# write-pid-path = '/path/to/your/log/file'
+
+# Window type settings
+#
+# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
+# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
+# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
+# "tooltip", "notification", "combo", and "dnd".
+#
+# Following per window-type options are available: ::
+#
+# fade, shadow:::
+# Controls window-type-specific shadow and fade settings.
+#
+# opacity:::
+# Controls default opacity of the window type.
+#
+# focus:::
+# Controls whether the window of this type is to be always considered focused.
+# (By default, all window types except "normal" and "dialog" has this on.)
+#
+# full-shadow:::
+# Controls whether shadow is drawn under the parts of the window that you
+# normally won't be able to see. Useful when the window has parts of it
+# transparent, and you want shadows in those areas.
+#
+# redir-ignore:::
+# Controls whether this type of windows should cause screen to become
+# redirected again after been unredirected. If you have unredir-if-possible
+# set, and doesn't want certain window to cause unnecessary screen redirection,
+# you can set this to `true`.
+#
+wintypes:
+{
+ tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
+ dock = { shadow = false; }
+ dnd = { shadow = false; }
+ popup_menu = { opacity = 0.8; }
+ dropdown_menu = { opacity = 0.8; }
+};
diff --git a/polybar/config b/polybar/config
new file mode 100644
index 0000000..afc6de2
--- /dev/null
+++ b/polybar/config
@@ -0,0 +1,177 @@
+[colors]
+transparent = #00000000
+background = #282a36
+background-current = #44475a
+foreground = #f8f8f2
+cyan = #5ba9bd
+green = #209a4b
+orange = #cf885c
+pink = #ff79c6
+purple = #7d53b9
+red = #cc3333
+yellow = #997700
+
+[bar/primary]
+monitor = ${env:MONITOR:DP-4}
+width = 100%
+height = 28
+
+background = ${colors.transparent}
+foregorund = ${colors.foreground}
+
+# No under/over line
+line-size = 0
+# Small border to pull it away from the green edges.
+border-size = 5
+border-bottom-size = 0
+border-color = ${colors.transparent}
+
+padding = 1
+
+module-margin-left = 1
+module-margin-right = 0
+
+font-0 = "Roboto Mono Nerd Font:pixelsize=12;2"
+
+tray-position = right
+tray-background = ${colors.background}
+
+modules-left = i3
+modules-center = mpd
+modules-right = memory pulseaudio du_root date
+
+[module/i3]
+type = internal/i3
+format =
+index-sort = true
+wrapping-scroll = false
+
+; Only show workspaces on the same output as the bar
+pin-workspaces = true
+
+label-mode-padding = 2
+label-mode-foreground = #000
+label-mode-background = ${colors.background}
+
+; focused = Active workspace on focused monitor
+label-focused = %index%
+label-focused-background = ${colors.background-current}
+label-focused-padding = 2
+
+; unfocused = Inactive workspace on any monitor
+label-unfocused = %index%
+label-unfocused-background = ${colors.background}
+label-unfocused-padding = 2
+
+; visible = Active workspace on unfocused monitor
+label-visible = %index%
+label-visible-background = ${self.label-focused-background}
+label-visible-padding = ${self.label-focused-padding}
+
+; urgent = Workspace with urgency hint set
+label-urgent = %index%
+label-urgent-background = ${colors.red}
+label-urgent-padding = 2
+
+
+[module/mpd]
+type = internal/mpd
+format-online = " "
+format-online-background = ${colors.background}
+format-online-prefix = " "
+format-online-prefix-background = ${colors.purple}
+
+icon-prev = " 玲"
+icon-stop = " 栗"
+icon-play = " 契"
+icon-pause = " "
+icon-next = " 怜"
+
+label-song = " %artist% - %title% "
+label-song-maxlen = 25
+label-song-ellipsis = true
+
+[module/xbacklight]
+type = internal/xbacklight
+
+format =