diff --git a/dunst/dunstrc b/dunst/dunstrc
new file mode 100644
index 0000000..a8365b8
--- /dev/null
+++ b/dunst/dunstrc
@@ -0,0 +1,304 @@
+[global]
+ frame_width = 1
+ frame_color = "#584945"
+
+ font = FiraCode Nerd Font 11
+
+ # Allow a small subset of html markup:
+ # bold
+ # italic
+ # strikethrough
+ # underline
+ #
+ # For a complete reference see
+ # .
+ # If markup is not allowed, those tags will be stripped out of the
+ # message.
+ markup = yes
+
+ # 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
+ # Markup is allowed
+ format = "%s %p\n%b"
+
+ # Sort messages by urgency.
+ sort = yes
+
+ # Show how many messages are currently hidden (because of geometry).
+ indicate_hidden = yes
+
+ # Alignment of message text.
+ # Possible values are "left", "center" and "right".
+ alignment = left
+
+ # The frequency with wich text that is longer than the notification
+ # window allows bounces back and forth.
+ # This option conflicts with "word_wrap".
+ # Set to 0 to disable.
+ bounce_freq = 5
+
+
+ # 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
+
+
+ # 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 respectevly.
+ # 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 = "1000x4-25+25"
+ width=350
+ height=200
+
+ # Shrink window if it's smaller than the width. Will be ignored if
+ # width is 0.
+ shrink = yes
+
+ # The transparency of the window. Range: [0; 100].
+ # This option will only work if a compositing windowmanager is
+ # present (e.g. xcompmgr, compiz, etc.).
+ transparency =25
+
+ # 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.
+ # default 120
+ idle_threshold = 120
+
+ # 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 windowmanager that exports the
+ # _NET_ACTIVE_WINDOW property.
+ # This should be the case for almost all modern windowmanagers.
+ #
+ # If this option is set to mouse or keyboard, the monitor option
+ # will be ignored.
+ follow = mouse
+
+ # Should a notification popped up from history be sticky or timeout
+ # as if it would normally do.
+ sticky_history = no
+
+ # Maximum amount of notifications kept in history
+ history_length = 5
+
+ # Display indicators for URLs (U) and actions (A).
+ show_indicators = no
+
+ # The height of a single line. If the height is smaller than the
+ # font height, it will get raised to the font height.
+ # This adds empty space above and under the text.
+ line_height = 0
+
+ # Draw a line of "separator_height" pixel height between two
+ # notifications.
+ # Set to 0 to disable.
+ separator_height = 1
+
+ # Padding between text and separator.
+ # padding = 8
+ padding = 8
+
+ # Horizontal padding.
+ horizontal_padding = 10
+
+ # 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 = foreground
+
+ # Print a notification on startup.
+ # This is mainly for error detection, since dbus (re-)starts dunst
+ # automatically after a crash.
+ startup_notification = false
+
+ # dmenu path.
+ dmenu = /usr/bin/dmenu -p dunst:
+
+ # Browser for opening urls in context menu.
+ browser = qutebrowser
+
+ # Align icons left/right/off
+ icon_position = left
+
+ # Paths to default icons.
+ icon_path = /usr/share/icons/Adwaita/16x16/status/:/usr/share/icons/Adwaita/16x16/devices/
+
+ # Limit icons size.
+ max_icon_size=128
+
+[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+space
+
+ # Close all notifications.
+ # close_all = ctrl+shift+space
+ close_all = ctrl+mod1+space
+
+ # Redisplay last message(s).
+ # On the US keyboard layout "grave" is normally above TAB and left
+ # of "1".
+ history = ctrl+mod4+h
+
+ # Context menu.
+ context = ctrl+mod1+c
+
+[urgency_low]
+ # IMPORTANT: colors have to be defined in quotation marks.
+ # Otherwise the "#" and following would be interpreted as a comment.
+ background = "#282828"
+ foreground = "#fbf1c7"
+ timeout = 5
+
+[urgency_normal]
+ background = "#282828"
+ foreground = "#ebdbb2"
+ timeout = 5
+
+[urgency_critical]
+ background = "#cc241d"
+ foreground = "#ebdbb2"
+ timeout = 0
+
+
+# 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 = ""
+
+#[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
+#
+#[Claws Mail]
+# appname = claws-mail
+# category = email.arrived
+# urgency = normal
+# background = "#2F899E"
+# foreground = "#FFA247"
+#
+#[mute.sh]
+# appname = mute
+# category = mute.sound
+# script = mute.sh
+#
+#[JDownloader]
+# appname = JDownloader
+# category = JD
+# background = "#FFA247"
+# foreground = "#FFFFFF"
+#
+#[newsbeuter]
+# summary = *Feeds*
+# background = "#A8EB41"
+# foreground = "#FFFFFF"
+#
+[irc]
+ appname = weechat
+ timeout = 0
+ background = "#0033bb"
+ foreground = "#dddddd"
+#
+[weechat hl]
+ appname = weechat
+ category = weechat.HL
+ background = "#FF5C47"
+ foreground = "#FFFFFF"
+#
+[weechat pn]
+ appname = weechat
+ category = weechat.PM
+ background = "#D53B84"
+ foreground = "#FFFFFF"
+#
+#[CMUS]
+# appname = CMUS
+# category = cmus
+# background = "#6C4AB7"
+# foreground = "#FFE756"
+#
+#
+# background = "#30AB70"
+# foreground = "#F67245"
+#
+# vim: ft=cfg
diff --git a/rofi/config.rasi b/rofi/config.rasi
new file mode 100644
index 0000000..fb32e0f
--- /dev/null
+++ b/rofi/config.rasi
@@ -0,0 +1,48 @@
+@import "gruvbox-common.rasinc"
+* {
+ /* Theme settings */
+ highlight: bold italic;
+ scrollbar: false;
+
+ /* Gruvbox dark colors */
+ gruvbox-dark-bg0: #282828F5;
+ gruvbox-dark-bg0-soft: #32302f;
+ gruvbox-dark-bg3: #665c54;
+ gruvbox-dark-fg0: #fbf1c7;
+ gruvbox-dark-fg1: #ebdbb2;
+ gruvbox-dark-red-dark: #cc241d;
+ gruvbox-dark-red-light: #fb4934;
+ gruvbox-dark-yellow-dark: #d79921;
+ gruvbox-dark-yellow-light: #fabd2f;
+ gruvbox-dark-gray: #a89984;
+
+ /* Theme colors */
+ background: @gruvbox-dark-bg0;
+ background-color: @background;
+ foreground: @gruvbox-dark-fg1;
+ border-color: @gruvbox-dark-gray;
+ separatorcolor: @border-color;
+ scrollbar-handle: @border-color;
+
+ normal-background: @background;
+ normal-foreground: @foreground;
+ alternate-normal-background: @background;
+ alternate-normal-foreground: @foreground;
+ selected-normal-background: @gruvbox-dark-bg3;
+ selected-normal-foreground: @gruvbox-dark-fg0;
+
+ active-background: @gruvbox-dark-yellow-dark;
+ active-foreground: @background;
+ alternate-active-background: @active-background;
+ alternate-active-foreground: @active-foreground;
+ selected-active-background: @gruvbox-dark-yellow-light;
+ selected-active-foreground: @active-foreground;
+
+ urgent-background: @gruvbox-dark-red-dark;
+ urgent-foreground: @background;
+ alternate-urgent-background: @urgent-background;
+ alternate-urgent-foreground: @urgent-foreground;
+ selected-urgent-background: @gruvbox-dark-red-light;
+ selected-urgent-foreground: @urgent-foreground;
+}
+
diff --git a/rofi/gruvbox-common.rasinc.rasi b/rofi/gruvbox-common.rasinc.rasi
new file mode 100644
index 0000000..84c36b5
--- /dev/null
+++ b/rofi/gruvbox-common.rasinc.rasi
@@ -0,0 +1,193 @@
+/* ==========================================================================
+ File: gruvbox-common.rasi
+ Desc: Shared rules between all gruvbox themes
+ Author: bardisty
+ Source: https://github.com/bardisty/gruvbox-rofi
+ Modified: Mon Feb 12 2018 06:06:47 PST -0800
+ ========================================================================== */
+
+configuration {
+ modi: "drun";
+ show-icons: true;
+ icon-theme: "Papirus-Dark";
+ display-drun: "";
+ drun-display-format: "{name}";
+}
+
+window {
+ background-color: @background;
+ border: 2;
+ padding: 2;
+ transparency: "real";
+ location: center;
+ anchor: center;
+ fullscreen: false;
+ width: 600px;
+ x-offset: 0px;
+ y-offset: 0px;
+
+ enabled: true;
+ margin: 0px;
+ padding: 0px;
+ border: 2px solid;
+ border-radius: 12px;
+ border-color: @gruvbox-dark-gray;
+}
+
+mainbox {
+ enabled: true;
+ spacing: 0px;
+ margin: 0px;
+ padding: 0px;
+ border: 0px solid;
+ border-radius: 0px 0px 0px 0px;
+ border-color: @selected-normal-foreground;
+ background-color: transparent;
+ children: [ "inputbar", "listview" ];
+}
+
+message {
+ border: 2px 0 0;
+ border-color: @separatorcolor;
+ padding: 1px;
+}
+
+textbox {
+ highlight: @highlight;
+ text-color: @foreground;
+}
+
+listview {
+ enabled: true;
+ columns: 1;
+ lines: 6;
+ cycle: true;
+ dynamic: true;
+ scrollbar: false;
+ layout: vertical;
+ reverse: false;
+ fixed-height: true;
+ fixed-columns: true;
+
+ spacing: 5px;
+ margin: 0px;
+ padding: 0px;
+ border: 0px solid;
+ border-radius: 0px;
+ border-color: @selected-normal-foreground;
+ background-color: transparent;
+ text-color: @foreground;
+ cursor: "default";
+}
+
+element {
+ border: 0;
+ padding: 2px;
+}
+
+element.normal.normal {
+ background-color: @normal-background;
+ text-color: @normal-foreground;
+}
+
+element.normal.urgent {
+ background-color: @urgent-background;
+ text-color: @urgent-foreground;
+}
+
+element.normal.active {
+ background-color: @active-background;
+ text-color: @active-foreground;
+}
+
+element.selected.normal {
+ background-color: @selected-normal-background;
+ text-color: @selected-normal-foreground;
+}
+
+element.selected.urgent {
+ background-color: @selected-urgent-background;
+ text-color: @selected-urgent-foreground;
+}
+
+element.selected.active {
+ background-color: @selected-active-background;
+ text-color: @selected-active-foreground;
+}
+
+element.alternate.normal {
+ background-color: @alternate-normal-background;
+ text-color: @alternate-normal-foreground;
+}
+
+element.alternate.urgent {
+ background-color: @alternate-urgent-background;
+ text-color: @alternate-urgent-foreground;
+}
+
+element.alternate.active {
+ background-color: @alternate-active-background;
+ text-color: @alternate-active-foreground;
+}
+
+scrollbar {
+ width: 0px;
+ border: 0;
+ handle-color: @scrollbar-handle;
+ handle-width: 8px;
+ padding: 0;
+}
+
+mode-switcher {
+ border: 2px 0 0;
+ border-color: @separatorcolor;
+}
+
+inputbar {
+ text-color: @normal-foreground;
+ children: [ prompt, entry];
+ enabled: true;
+ spacing: 10px;
+ margin: 0px;
+ padding: 15px;
+ border: 0px solid;
+ border-radius: 0px;
+}
+
+case-indicator,
+button {
+ spacing: 0;
+ text-color: @normal-foreground;
+}
+
+button.selected {
+ background-color: @selected-normal-background;
+ text-color: @selected-normal-foreground;
+}
+
+
+prompt {
+ enabled: true;
+ background-color: inherit;
+ text-color: inherit;
+}
+textbox-prompt-colon {
+ enabled: true;
+ expand: false;
+ str: "::";
+ background-color: inherit;
+ text-color: inherit;
+}
+entry {
+ enabled: true;
+ background-color: inherit;
+ text-color: inherit;
+ cursor: text;
+ placeholder: "Search...";
+ placeholder-color: inherit;
+}
+
+element-text, element-icon {
+ background-color: inherit;
+ text-color: inherit;
+}