diff --git a/ansible/roles/hyprland/templates/dunstrc.j2 b/ansible/roles/hyprland/templates/dunstrc.j2
new file mode 100644
index 0000000..8334b0f
--- /dev/null
+++ b/ansible/roles/hyprland/templates/dunstrc.j2
@@ -0,0 +1,65 @@
+[global]
+ monitor = 0
+ follow = mouse
+ width = 300
+ height = 300
+ origin = top-right
+ offset = 10x10
+ scale = 0
+ notification_limit = 0
+ progress_bar = true
+ progress_bar_height = 10
+ progress_bar_frame_width = 1
+ progress_bar_min_width = 150
+ progress_bar_max_width = 300
+ indicate_hidden = yes
+ transparency = 0
+ separator_height = 2
+ padding = 8
+ horizontal_padding = 8
+ text_icon_padding = 0
+ frame_width = 3
+ frame_color = "#aaaaaa"
+ separator_color = frame
+ sort = yes
+ idle_threshold = 120
+ font = Monospace 12
+ line_height = 0
+ markup = full
+ format = "%s\n%b"
+ alignment = left
+ vertical_alignment = center
+ show_age_threshold = 60
+ ellipsize = middle
+ ignore_newline = no
+ stack_duplicates = true
+ hide_duplicate_count = false
+ show_indicators = yes
+ icon_position = left
+ min_icon_size = 0
+ max_icon_size = 32
+ sticky_history = yes
+ history_length = 20
+ dmenu = /usr/bin/wofi -dmenu -p dunst:
+ browser = /usr/bin/xdg-open
+ always_run_script = true
+ title = Dunst
+ class = Dunst
+ corner_radius = 10
+ ignore_dbusclose = false
+
+[urgency_low]
+ background = "#222222"
+ foreground = "#888888"
+ timeout = 10
+
+[urgency_normal]
+ background = "#285577"
+ foreground = "#ffffff"
+ timeout = 20
+
+[urgency_critical]
+ background = "#900000"
+ foreground = "#ffffff"
+ frame_color = "#ff0000"
+ timeout = 0
diff --git a/ansible/roles/hyprland/templates/hypridle.conf.j2 b/ansible/roles/hyprland/templates/hypridle.conf.j2
new file mode 100644
index 0000000..4eac56b
--- /dev/null
+++ b/ansible/roles/hyprland/templates/hypridle.conf.j2
@@ -0,0 +1,16 @@
+general {
+ lock_cmd = pidof hyprlock || hyprlock
+ before_sleep_cmd = loginctl lock-session
+ after_sleep_cmd = hyprctl dispatch dpms on
+}
+
+listener {
+ timeout = 300
+ on-timeout = loginctl lock-session
+}
+
+listener {
+ timeout = 330
+ on-timeout = hyprctl dispatch dpms off
+ on-resume = hyprctl dispatch dpms on
+}
diff --git a/ansible/roles/hyprland/templates/hyprland.conf.j2 b/ansible/roles/hyprland/templates/hyprland.conf.j2
new file mode 100644
index 0000000..d9b8ae2
--- /dev/null
+++ b/ansible/roles/hyprland/templates/hyprland.conf.j2
@@ -0,0 +1,102 @@
+# hyprland.conf - managed by Ansible
+
+# Monitors
+# Monitor names for Wayland: DP-1, HDMI-A-1, DVI-D-1
+# Layout: Left (DP-1), Center (HDMI-A-1), Right (DVI-D-1)
+monitor=DP-1, 1920x1080@60, 0x0, 1
+monitor=HDMI-A-1, 1920x1080@60, 1920x0, 1
+monitor=DVI-D-1, 1920x1080@60, 3840x0, 1
+
+# Execute on start
+exec-once = waybar
+exec-once = dunst
+exec-once = hypridle
+exec-once = wl-paste --type text --watch cliphist store
+exec-once = wl-paste --type image --watch cliphist store
+
+# Environment variables for NVIDIA
+env = LIBVA_DRIVER_NAME,nvidia
+env = XDG_SESSION_TYPE,wayland
+env = GBM_BACKEND,nvidia-drm
+env = __GLX_VENDOR_LIBRARY_NAME,nvidia
+env = WLR_NO_HARDWARE_CURSORS,1
+env = NVD_BACKEND,direct
+
+# Input
+input {
+ kb_layout = de
+ follow_mouse = 1
+ sensitivity = 0
+}
+
+# General
+general {
+ gaps_in = 5
+ gaps_out = 10
+ border_size = 2
+ col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
+ col.inactive_border = rgba(595959aa)
+ layout = dwindle
+}
+
+# Decoration
+decoration {
+ rounding = 10
+ blur {
+ enabled = true
+ size = 3
+ passes = 1
+ }
+}
+
+# Animations
+animations {
+ enabled = yes
+}
+
+# Dwindle layout
+dwindle {
+ pseudotile = yes
+ preserve_split = yes
+}
+
+# Keybindings
+$mainMod = SUPER
+
+bind = $mainMod, Return, exec, kitty
+bind = $mainMod, Q, killactive,
+bind = $mainMod, M, exit,
+bind = $mainMod, E, exec, dolphin
+bind = $mainMod, V, togglefloating,
+bind = $mainMod, D, exec, wofi --show drun
+bind = $mainMod, P, pseudo, # dwindle
+bind = $mainMod, J, togglesplit, # dwindle
+bind = $mainMod, L, exec, hyprlock
+
+# Focus
+bind = $mainMod, left, movefocus, l
+bind = $mainMod, right, movefocus, r
+bind = $mainMod, up, movefocus, u
+bind = $mainMod, down, movefocus, d
+
+# Workspaces
+bind = $mainMod, 1, workspace, 1
+bind = $mainMod, 2, workspace, 2
+bind = $mainMod, 3, workspace, 3
+bind = $mainMod, 4, workspace, 4
+bind = $mainMod, 5, workspace, 5
+bind = $mainMod, 6, workspace, 6
+bind = $mainMod, 7, workspace, 7
+bind = $mainMod, 8, workspace, 8
+bind = $mainMod, 9, workspace, 9
+
+# Move to workspace
+bind = $mainMod SHIFT, 1, movetoworkspace, 1
+bind = $mainMod SHIFT, 2, movetoworkspace, 2
+bind = $mainMod SHIFT, 3, movetoworkspace, 3
+bind = $mainMod SHIFT, 4, movetoworkspace, 4
+bind = $mainMod SHIFT, 5, movetoworkspace, 5
+bind = $mainMod SHIFT, 6, movetoworkspace, 6
+bind = $mainMod SHIFT, 7, movetoworkspace, 7
+bind = $mainMod SHIFT, 8, movetoworkspace, 8
+bind = $mainMod SHIFT, 9, movetoworkspace, 9
diff --git a/ansible/roles/hyprland/templates/hyprlock.conf.j2 b/ansible/roles/hyprland/templates/hyprlock.conf.j2
new file mode 100644
index 0000000..62c18b0
--- /dev/null
+++ b/ansible/roles/hyprland/templates/hyprlock.conf.j2
@@ -0,0 +1,29 @@
+general {
+ no_fade_in = false
+ grace = 0
+ disable_loading = true
+}
+
+background {
+ monitor =
+ color = rgba(25, 20, 20, 1.0)
+ blur_passes = 2
+}
+
+input-field {
+ monitor =
+ size = 200, 50
+ outline_thickness = 3
+ dots_size = 0.33
+ dots_spacing = 0.15
+ dots_center = true
+ outer_color = rgb(151515)
+ inner_color = rgb(200, 200, 200)
+ font_color = rgb(10, 10, 10)
+ fade_on_empty = true
+ placeholder_text = Input Password...
+ hide_input = false
+ position = 0, -20
+ halign = center
+ valign = center
+}
diff --git a/ansible/roles/hyprland/templates/waybar_config.j2 b/ansible/roles/hyprland/templates/waybar_config.j2
new file mode 100644
index 0000000..a2953cd
--- /dev/null
+++ b/ansible/roles/hyprland/templates/waybar_config.j2
@@ -0,0 +1,29 @@
+{
+ "layer": "top",
+ "position": "top",
+ "height": 30,
+ "modules-left": ["hyprland/workspaces", "hyprland/mode"],
+ "modules-center": ["hyprland/window"],
+ "modules-right": ["network", "cpu", "memory", "clock", "tray"],
+ "hyprland/workspaces": {
+ "disable-scroll": true,
+ "all-outputs": true,
+ "format": "{name}"
+ },
+ "clock": {
+ "format": "{:%Y-%m-%d %H:%M}",
+ "tooltip-format": "{:%Y %B}\n{calendar}"
+ },
+ "cpu": {
+ "format": "CPU {usage}%",
+ "tooltip": false
+ },
+ "memory": {
+ "format": "RAM {}%"
+ },
+ "network": {
+ "format-wifi": " {essid} ({signalStrength}%)",
+ "format-ethernet": " {ifname}",
+ "format-disconnected": "⚠ Disconnected"
+ }
+}
diff --git a/ansible/roles/hyprland/templates/waybar_style.css.j2 b/ansible/roles/hyprland/templates/waybar_style.css.j2
new file mode 100644
index 0000000..bce369d
--- /dev/null
+++ b/ansible/roles/hyprland/templates/waybar_style.css.j2
@@ -0,0 +1,26 @@
+* {
+ border: none;
+ border-radius: 0;
+ font-family: monospace;
+ font-size: 14px;
+}
+
+window#waybar {
+ background: rgba(43, 48, 59, 0.5);
+ color: #ffffff;
+}
+
+#workspaces button {
+ padding: 0 5px;
+ background: transparent;
+ color: #ffffff;
+}
+
+#workspaces button.active {
+ background: #64727D;
+ border-bottom: 3px solid #ffffff;
+}
+
+#clock, #cpu, #memory, #network, #tray {
+ padding: 0 10px;
+}