diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
new file mode 100644
index 0000000..ad7d194
--- /dev/null
+++ b/.config/hypr/hyprland.conf
@@ -0,0 +1,217 @@
+#
+# Please note not all available settings / options are set here.
+# For a full list, see the wiki
+#
+#
+
+# See https://wiki.hyprland.org/Configuring/Monitors/
+monitor=,highrr,auto,auto
+
+# Some default env vars.
+env = XCURSOR_SIZE,24
+
+# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
+input {
+ kb_layout = us
+ kb_variant =
+ kb_model =
+ kb_options =
+ kb_rules =
+
+ follow_mouse = 1
+
+ touchpad {
+ natural_scroll = yes
+ }
+
+ repeat_delay = 300
+ repeat_rate = 50
+
+ sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
+}
+
+general {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+
+ gaps_in = 6
+ gaps_out = 12
+ border_size = 2
+ col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
+ col.inactive_border = rgba(595959aa)
+
+ layout = master
+
+ # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
+ allow_tearing = false
+}
+
+decoration {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+
+ rounding = 10
+
+ blur {
+ enabled = true
+ size = 3
+ passes = 1
+ }
+
+ drop_shadow = yes
+ shadow_range = 4
+ shadow_render_power = 3
+ col.shadow = rgba(1a1a1aee)
+}
+
+animations {
+ enabled = yes
+
+ # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
+
+ bezier = myBezier, 0.05, 0.9, 0.1, 1.05
+
+ animation = windows, 1, 7, myBezier
+ animation = windowsOut, 1, 7, default, popin 80%
+ animation = border, 1, 10, default
+ animation = borderangle, 1, 8, default
+ animation = fade, 1, 7, default
+ animation = workspaces, 1, 6, default
+}
+
+dwindle {
+ # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
+ pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
+ preserve_split = yes # you probably want this
+}
+
+master {
+ # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
+ new_is_master = true
+ no_gaps_when_only = true
+}
+
+gestures {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+ workspace_swipe = off
+}
+
+misc {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+ force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers
+ enable_swallow = true
+ swallow_regex = ^foot$
+}
+
+# Example per-device config
+# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
+device:epic-mouse-v1 {
+ sensitivity = -0.5
+}
+
+# Example windowrule v1
+# windowrule = float, ^(kitty)$
+# Example windowrule v2
+# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
+# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
+
+$mainMod = SUPER
+
+# Program spawning hotkeys
+bind = CONTROL ALT, BACKSPACE, exec, $TERMINAL -e $SHELL -c 'htop'
+bind = $mainMod, RETURN, exec, foot
+bind = $mainMod, W, exec, firefox
+bind = $mainMod, E, exec, $TERMINAL -e $SHELL -c 'tmp="$(mktemp)" && command lf -last-dir-path="$tmp" "$@" && test -f "$tmp" && dir="$(command cat "$tmp")" && rm -f "$tmp" && test -d "$dir" && cd "$dir" && exec $SHELL'
+bind = $mainMod SHIFT, E, exec, emacsclient -c -a 'emacs'
+
+# Menu hoykeys
+bind = $mainMod, R, exec, menu-run
+
+# System control keybinds
+binde = $mainMod, MINUS, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-
+binde = $mainMod SHIFT, MINUS, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
+binde = $mainMod, EQUAL, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+
+binde = $mainMod SHIFT, EQUAL, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
+binde = ,F7, exec, change-brightness up
+binde = ,XF86MonBrightnessUp, exec, change-brightness up
+binde = ,F6, exec, change-brightness down
+binde = ,XF86MonBrightnessDown, exec, change-brightness down
+bind = $mainMod, L, exec, swaylock -e -c 000000
+
+# Kill commands
+bind = $mainMod CONTROL SHIFT, Q, exit,
+bind = $mainMod, Q, killactive,
+
+# Change gaps
+binde = $mainMod, Z, exec, hyprgaps -i 3
+binde = $mainMod, X, exec, hyprgaps -d 3
+
+# Master stack movement commands
+bind = $mainMod, J, layoutmsg, cyclenext
+bind = $mainMod SHIFT, J, layoutmsg, swapnext
+bind = $mainMod, K, layoutmsg, cycleprev
+bind = $mainMod SHIFT, K, layoutmsg, swapprev
+bind = $mainMod SHIFT, L, splitratio, +0.05
+bind = $mainMod SHIFT, H, splitratio, -0.05
+
+# Changing number of masters
+bind = $mainMod, O, layoutmsg, addmaster
+bind = $mainMod SHIFT, O, layoutmsg, removemaster
+
+# Change tiling direction
+bind = $mainMod, T, layoutmsg, orientationleft
+bind = $mainMod SHIFT, T, layoutmsg, orientationtop
+
+# Special windows
+bind = $mainMod, F, togglefloating,
+bind = $mainMod, S, togglespecialworkspace, magic
+bind = $mainMod SHIFT, S, movetoworkspace, special:magic
+
+# Switch workspaces with mainMod + [0-9]
+bind = $mainMod, 1, exec, hyprdwm goto 1
+bind = $mainMod, 2, exec, hyprdwm goto 2
+bind = $mainMod, 3, exec, hyprdwm goto 3
+bind = $mainMod, 4, exec, hyprdwm goto 4
+bind = $mainMod, 5, exec, hyprdwm goto 5
+bind = $mainMod, 6, exec, hyprdwm goto 6
+bind = $mainMod, 7, exec, hyprdwm goto 7
+bind = $mainMod, 8, exec, hyprdwm goto 8
+bind = $mainMod, 9, exec, hyprdwm goto 9
+bind = $mainMod, 0, exec, hyprdwm goto 10
+
+# Move active window to a workspace with mainMod + SHIFT + [0-9]
+bind = $mainMod SHIFT, 1, exec, hyprdwm moveto 1
+bind = $mainMod SHIFT, 2, exec, hyprdwm moveto 2
+bind = $mainMod SHIFT, 3, exec, hyprdwm moveto 3
+bind = $mainMod SHIFT, 4, exec, hyprdwm moveto 4
+bind = $mainMod SHIFT, 5, exec, hyprdwm moveto 5
+bind = $mainMod SHIFT, 6, exec, hyprdwm moveto 6
+bind = $mainMod SHIFT, 7, exec, hyprdwm moveto 7
+bind = $mainMod SHIFT, 8, exec, hyprdwm moveto 8
+bind = $mainMod SHIFT, 9, exec, hyprdwm moveto 9
+bind = $mainMod SHIFT, 9, exec, hyprdwm moveto 10
+
+# Moving between monitors
+bind = $mainMod, COMMA, movewindow, mon:l
+bind = $mainMod, LEFT, movewindow, mon:l
+bind = $mainMod, PERIOD, movewindow, mon:r
+bind = $mainMod, RIGHT, movewindow, mon:r
+
+# Scroll through existing workspaces with mainMod + scroll
+bind = $mainMod, mouse_down, workspace, e+1
+bind = $mainMod, mouse_up, workspace, e-1
+
+# Move/resize windows with mainMod + LMB/RMB and dragging
+bindm = $mainMod, mouse:272, movewindow
+bindm = $mainMod, mouse:273, resizewindow
+
+exec-once = swww init # Do this early so the daemon has time to load
+
+# Set default workspace per monitor
+exec-once = hyprctl dispatch focusmonitor 1; hyprctl dispatch exec 'hyprdwm goto 1'
+exec-once = hyprctl dispatch focusmonitor 2; hyprctl dispatch exec 'hyprdwm goto 1'
+exec-once = hyprctl dispatch focusmonitor 3; hyprctl dispatch exec 'hyprdwm goto 1'
+
+exec-once = waybar
+exec-once = hyprland-autoname-workspaces
+exec-once = kanshi
+exec-once = sleep 1 && swww img ~/.config/wallpaper
+
diff --git a/.config/hyprland-autoname-workspaces/config.toml b/.config/hyprland-autoname-workspaces/config.toml
new file mode 100644
index 0000000..87afac2
--- /dev/null
+++ b/.config/hyprland-autoname-workspaces/config.toml
@@ -0,0 +1,103 @@
+version = "1.1.11"
+
+[format]
+# Deduplicate icons if enable.
+# A superscripted counter will be added.
+# dedup = false
+# dedup_inactive_fullscreen = false # dedup more
+# window delimiter
+delim = ""
+
+# available formatter:
+# {counter_sup} - superscripted count of clients on the workspace, and simple {counter}, {delim}
+# {icon}, {client}
+# workspace formatter
+workspace = "{id}:{delim}{clients}" # {id}, {delim} and {clients} are supported
+# workspace_empty = "{id}" # {id}, {delim} and {clients} are supported
+# client formatter
+# client = "{icon}"
+# client_active = "*{icon}*"
+
+# deduplicate client formatter
+# client_fullscreen = "[{icon}]"
+# client_dup = "{client}{counter_sup}"
+# client_dup_fullscreen = "[{icon}]{delim}{icon}{counter_unfocused}"
+# client_dup_active = "*{icon}*{delim}{icon}{counter_unfocused}"
+
+[class]
+# Add your icons mapping
+# use double quote the key and the value
+# take class name from 'hyprctl clients'
+"DEFAULT" = "{class}"
+"(?i)Kitty" = " "
+"(?i)foot" = " "
+"(?i)st" = " "
+"[Ff]irefox" = " "
+"(?i)slack" = " "
+"(?i)discord" = " "
+"(?i)spotify" = " "
+"(?i)chromium" = " "
+"(?i)emacs" = " "
+
+# [class_active]
+# DEFAULT = "*{icon}*"
+# "(?i)ExampleOneTerm" = "{icon}"
+
+# [initial_class]
+# "DEFAULT" = "test"
+# "(?i)Kitty" = "term"
+
+# [initial_class_active]
+# "(?i)Kitty" = "*TERM*"
+
+[title_in_class."(?i)kitty"]
+"(?i)neomutt" = "neomutt"
+
+[title_in_class."(?i)foot"]
+"(?i)nvim" = "nvim"
+"(?i)neovim" = "neovim"
+
+# regex captures support is supported
+# "emerge: (.+?/.+?)-.*" = "{match1}"
+
+[title_in_class_active."(?i)firefox"]
+"(?i)twitch" = "{icon}"
+
+# [title_in_initial_class."(?i)kitty"]
+# "(?i)neomutt" = "neomutt"
+
+# [initial_title_in_class."(?i)kitty"]
+# "(?i)neomutt" = "neomutt"
+
+# [initial_title_in_initial_class."(?i)kitty"]
+# "(?i)neomutt" = "neomutt"
+
+# [initial_title."(?i)kitty"]
+# "zsh" = "Zsh"
+
+# [initial_title_active."(?i)kitty"]
+# "zsh" = "*Zsh*"
+
+# Add your applications that need to be exclude
+# The key is the class, the value is the title.
+# You can put an empty title to exclude based on
+# class name only, "" make the job.
+[exclude]
+"" = "^$" # prevent displaying icon for empty class
+"(?i)fcitx" = ".*" # will match all title for fcitx
+"(?i)TestApp" = "" # will match all title for TestApp
+aProgram = "^$" # will match null title for aProgram
+"[Ss]team" = "^(Friends List.*)?$" # will match Steam friends list plus all popups (empty titles)
+
+[workspaces_name]
+0 = "zero"
+1 = "one"
+2 = "two"
+3 = "three"
+4 = "four"
+5 = "five"
+6 = "six"
+7 = "seven"
+8 = "eight"
+9 = "nine"
+10 = "ten"
diff --git a/.config/kanshi/config b/.config/kanshi/config
new file mode 100644
index 0000000..96202ec
--- /dev/null
+++ b/.config/kanshi/config
@@ -0,0 +1,9 @@
+profile default {
+ output eDP-1 enable position 0,0
+}
+
+profile dual-monitor-main {
+ output eDP-1 enable position 0,600
+ output DP-3 enable mode 1920x1080@143.856003Hz position 1920,0
+}
+
diff --git a/.config/waybar/config b/.config/waybar/config
new file mode 100644
index 0000000..a1e5d76
--- /dev/null
+++ b/.config/waybar/config
@@ -0,0 +1,72 @@
+{
+ "layer": "top",
+ "position": "top",
+ "height": 27,
+
+ "modules-left": ["hyprland/workspaces", "custom/scratch", "hyprland/mode", "hyprland/window"],
+ "modules-center": [],
+ "modules-right": ["memory", "network", "pulseaudio", "clock", "tray", "battery"],
+
+ "hyprland/workspaces": {
+ "disable-scroll": true,
+ "disable-markup": true,
+ "format": "{name}"
+ },
+
+ "hyprland/window": {
+ "format": "{}",
+ "max-length": 150
+ },
+
+ "tray": {
+ "icon-size": 18,
+ "spacing": 15
+ },
+
+ "clock": {
+ "format": "{: %a %b%e %R}",
+ "interval": 30
+ },
+
+ "memory": {
+ "interval": 5,
+ "format": " {used:0.1f}G/{total:0.1f}G "
+ },
+
+ "battery": {
+ "bat": "BAT0",
+ "states": {
+ "full": 99,
+ "good": 98,
+ "normal": 98,
+ "warning": 20,
+ "critical": 20
+ },
+ "format": "{icon} {capacity}%",
+ "format-good": "{icon} {capacity}%",
+ "format-full": " {capacity}%",
+ "format-charging": " {capacity}%",
+ "format-icons": ["", "", "", "", ""],
+ "interval": 30
+ },
+
+ "network": {
+ "interface": "wlp0s20f3",
+ "format-wifi": " {essid} ",
+ "format-disconnected": " ",
+ "interval": 60
+ },
+
+ "pulseaudio": {
+ "format": "{icon} {volume}% ",
+ "format-bluetooth": " {volume}% ",
+ "format-muted":"婢 Mute ",
+ "interval": 60,
+
+ "format-icons": {
+ "default": [""]
+ },
+
+ "on-click": "blueman-manager"
+ }
+}
diff --git a/.config/waybar/style.css b/.config/waybar/style.css
new file mode 100644
index 0000000..39de3b7
--- /dev/null
+++ b/.config/waybar/style.css
@@ -0,0 +1,78 @@
+* {
+ font-family: FiraCode Nerd Font, FontAwesome;
+ font-size: 15px;
+}
+
+window#waybar {
+ background-color: rgba(0, 0, 0, 0.8);
+ color: #ffffff;
+}
+
+#window {
+ color: #ffffff;
+ padding: 0px 10px 0px 10px;
+}
+
+button:hover {
+ color: #ffffff;
+ border-bottom: 3px solid #ffffff;
+ background: rgba(150, 150, 150, 0.5);
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+.modules-left {
+ padding: 0px 0px 0px 0px;
+}
+
+.modules-right {
+ padding: 0px 5px 0px 0px;
+}
+
+
+#custom-scratch {
+ color: #b8b8b8;
+ padding: 0px 9px 0px 9px;
+}
+
+#workspaces button {
+ padding: 0px 11px 0px 11px;
+ min-width: 1px;
+ color: #888888;
+ border: none;
+ border-radius: 0;
+}
+
+#workspaces button.active {
+ padding: 0px 11px 0px 11px;
+ color: #ffffff;
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+#mode {
+ background-color: #900000;
+ color: #ffffff;
+ padding: 0px 5px 0px 5px;
+ border: 1px solid #2f343a;
+}
+
+#network, #temperature, #backlight, #pulseudio, #battery {
+ padding: 0px 15px 0px 15px;
+}
+
+#clock {
+ margin: 0px 15px 0px 15px;
+}
+
+#tray{
+ padding: 0px 8px 0px 5px;
+ margin: 0px 5px 0px 5px;
+}
+
+#battery.critical {
+ color: #ff5555;
+}
+
+#network.disconnected {
+ color: #ff5555;
+}
+
diff --git a/.local/bin/hyprdwm b/.local/bin/hyprdwm
new file mode 100755
index 0000000..9e01001
--- /dev/null
+++ b/.local/bin/hyprdwm
@@ -0,0 +1,32 @@
+#!/usr/bin/env sh
+# This is a script aimed at replicating the functionality of DWM where
+# there are 9 workspaces per monitor.
+
+if [ ! "$1" = "goto" ] && [ ! "$1" = "moveto" ]; then
+ echo "Invalid instruction"
+ exit 1
+fi
+
+case $2 in
+ ''|*[!0-9]*)
+ echo "Provide a number"
+ exit 1
+ ;;
+ *) ;;
+esac
+
+monitor="$(hyprctl activeworkspace | grep "monitorID:" | awk '{print $2}')"
+workspace="$(($monitor * 10 + $2))"
+hyprctl dispatch moveworkspacetomonitor "$workspace" "$monitor"
+hyprctl dispatch focusmonitor "$monitor"
+
+case "$1" in
+ goto)
+ hyprctl dispatch workspace "$workspace"
+ ;;
+ moveto)
+ hyprctl dispatch movetoworkspace "$workspace"
+ ;;
+ *) ;;
+esac
+
diff --git a/.local/bin/hyprgaps b/.local/bin/hyprgaps
new file mode 100755
index 0000000..66af956
--- /dev/null
+++ b/.local/bin/hyprgaps
@@ -0,0 +1,29 @@
+#!/usr/bin/env sh
+
+increase=0
+if [ "$1" != "-i" ] && [ "$1" != "-d" ] || [ -z "$2" ]; then
+ echo "Wrong number of arguments"
+ exit 1
+else
+ [ "$1" = "-i" ] && increase=1
+fi
+
+amount="$2"
+curr_out="$(hyprctl -j getoption general:gaps_out | jq '.int')"
+
+if [ $increase = 1 ]; then
+ new_out=$(($curr_out + $amount))
+else
+ new_out=$(($curr_out - $amount))
+fi
+
+new_in="$(($new_out / 2))"
+
+if [ $new_out -lt 0 ] || [ $new_in -lt 0 ]; then
+ new_out=0
+ new_in=0
+fi
+
+hyprctl keyword general:gaps_out "$new_out"
+hyprctl keyword general:gaps_in "$new_in"
+