diff --git a/tests/default.nix b/tests/default.nix
index 7b714581d..a34f01768 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -195,6 +195,7 @@ in import nmtSrc {
./modules/programs/getmail
./modules/programs/gnome-terminal
./modules/programs/hexchat
+ ./modules/programs/hyprlock
./modules/programs/i3blocks
./modules/programs/i3status-rust
./modules/programs/imv
diff --git a/tests/modules/programs/hyprlock/basic-configuration.conf b/tests/modules/programs/hyprlock/basic-configuration.conf
new file mode 100644
index 000000000..3fdf9ce3d
--- /dev/null
+++ b/tests/modules/programs/hyprlock/basic-configuration.conf
@@ -0,0 +1,27 @@
+background {
+ monitor=
+ blur_passes=3
+ blur_size=8
+ path=screenshot
+}
+
+general {
+ disable_loading_bar=true
+ grace=300
+ hide_cursor=true
+ no_fade_in=false
+}
+
+input-field {
+ monitor=
+ size=200, 50
+ dots_center=true
+ fade_on_empty=false
+ font_color=rgb(202, 211, 245)
+ inner_color=rgb(91, 96, 120)
+ outer_color=rgb(24, 25, 38)
+ outline_thickness=5
+ placeholder_text=Password...
+ position=0, -80
+ shadow_passes=2
+}
diff --git a/tests/modules/programs/hyprlock/basic-configuration.nix b/tests/modules/programs/hyprlock/basic-configuration.nix
new file mode 100644
index 000000000..0898edc0f
--- /dev/null
+++ b/tests/modules/programs/hyprlock/basic-configuration.nix
@@ -0,0 +1,41 @@
+{ ... }: {
+ programs.hyprlock = {
+ enable = true;
+
+ settings = {
+ general = {
+ disable_loading_bar = true;
+ grace = 300;
+ hide_cursor = true;
+ no_fade_in = false;
+ };
+
+ background = [{
+ monitor = "";
+ path = "screenshot";
+ blur_passes = 3;
+ blur_size = 8;
+ }];
+
+ input-field = [{
+ size = "200, 50";
+ position = "0, -80";
+ monitor = "";
+ dots_center = true;
+ fade_on_empty = false;
+ font_color = "rgb(202, 211, 245)";
+ inner_color = "rgb(91, 96, 120)";
+ outer_color = "rgb(24, 25, 38)";
+ outline_thickness = 5;
+ placeholder_text = ''Password...'';
+ shadow_passes = 2;
+ }];
+ };
+ };
+
+ nmt.script = ''
+ assertFileContent \
+ home-files/.config/hypr/hyprlock.conf \
+ ${./basic-configuration.conf}
+ '';
+}
diff --git a/tests/modules/programs/hyprlock/complex-configuration.conf b/tests/modules/programs/hyprlock/complex-configuration.conf
new file mode 100644
index 000000000..35ecc8858
--- /dev/null
+++ b/tests/modules/programs/hyprlock/complex-configuration.conf
@@ -0,0 +1,173 @@
+background {
+ monitor=
+ blur_passes=3
+ blur_size=8
+ brightness=0.817200
+ color=rgba(25, 20, 20, 1.0)
+ contrast=0.891700
+ noise=0.011700
+ path=screenshot
+ vibrancy=0.168600
+ vibrancy_darkness=0.050000
+}
+
+general {
+ disable_loading_bar=true
+ grace=300
+ hide_cursor=true
+ ignore_empty_input=false
+ no_fade_in=false
+ no_fade_out=false
+}
+
+image {
+ monitor=
+ size=120
+ border_color=rgb(202, 211, 245)
+ border_size=5
+ halign=center
+ path=/home/$USER/.face
+ position=0, 45
+ reload_cmd=
+ reload_time=-1
+ rotate=0.000000
+ rounding=-1
+ shadow_passes=1
+ valign=center
+}
+
+input-field {
+ monitor=
+ size=200, 50
+ bothlock_color=-1
+ capslock_color=-1
+ check_color=rgb(204, 136, 34)
+ dots_center=true
+ dots_rounding=-1
+ dots_size=0.330000
+ dots_spacing=0.150000
+ fade_on_empty=false
+ fade_timeout=2000
+ fail_color=rgb(204, 34, 34)
+ fail_text=$FAIL
+ fail_transition=300
+ font_color=rgb(202, 211, 245)
+ halign=center
+ hide_input=false
+ inner_color=rgb(91, 96, 120)
+ invert_numlock=false
+ numlock_color=-1
+ outer_color=rgb(24, 25, 38)
+ outline_thickness=5
+ placeholder_text=Password...
+ position=0, -80
+ rounding=-1
+ shadow_boost=1.200000
+ shadow_color=rgba(0, 0, 0, 1.0)
+ shadow_passes=2
+ shadow_size=3
+ swap_font_color=false
+ valign=center
+}
+
+label {
+ monitor=
+ color=rgb(202, 211, 245)
+ font_family=MonaspiceNe Nerd Font
+ font_size=100
+ halign=center
+ position=0, 330
+ rotate=0.000000
+ shadow_boost=1.200000
+ shadow_color=rgba(0, 0, 0, 1.0)
+ shadow_passes=2
+ shadow_size=3
+ text=$TIME
+ text_align=
+ valign=center
+}
+
+label {
+ monitor=
+ color=rgb(202, 211, 245)
+ font_family=MonaspiceNe Nerd Font
+ font_size=25
+ halign=left
+ position=10, 0
+ rotate=0.000000
+ shadow_boost=1.200000
+ shadow_color=rgba(0, 0, 0, 1.0)
+ shadow_passes=1
+ shadow_size=3
+ text= $USER
+ text_align=
+ valign=top
+}
+
+label {
+ monitor=
+ color=rgb(202, 211, 245)
+ font_family=MonaspiceNe Nerd Font
+ font_size=50
+ halign=center
+ position=15, -350
+ rotate=0.000000
+ shadow_boost=1.200000
+ shadow_color=rgba(0, 0, 0, 1.0)
+ shadow_passes=1
+ shadow_size=3
+ text=
+ text_align=
+ valign=center
+}
+
+label {
+ monitor=
+ color=rgb(202, 211, 245)
+ font_family=MonaspiceNe Nerd Font
+ font_size=25
+ halign=center
+ position=0, -430
+ rotate=0.000000
+ shadow_boost=1.200000
+ shadow_color=rgba(0, 0, 0, 1.0)
+ shadow_passes=1
+ shadow_size=3
+ text=Locked
+ text_align=
+ valign=center
+}
+
+label {
+ monitor=
+ color=rgb(202, 211, 245)
+ font_family=MonaspiceNe Nerd Font
+ font_size=30
+ halign=center
+ position=0, 210
+ rotate=0.000000
+ shadow_boost=1.200000
+ shadow_color=rgba(0, 0, 0, 1.0)
+ shadow_passes=1
+ shadow_size=3
+ text=cmd[update:120000] echo "$(date +'%a %d %B')"
+ text_align=
+ valign=center
+}
+
+label {
+ monitor=
+ color=rgb(202, 211, 245)
+ font_family=MonaspiceNe Nerd Font
+ font_size=25
+ halign=right
+ position=5, 8
+ rotate=0.000000
+ shadow_boost=1.200000
+ shadow_color=rgba(0, 0, 0, 1.0)
+ shadow_passes=1
+ shadow_size=3
+ text=
+ text_align=
+ valign=bottom
+}
diff --git a/tests/modules/programs/hyprlock/complex-configuration.nix b/tests/modules/programs/hyprlock/complex-configuration.nix
new file mode 100644
index 000000000..a5298a3cc
--- /dev/null
+++ b/tests/modules/programs/hyprlock/complex-configuration.nix
@@ -0,0 +1,185 @@
+{ ... }: {
+ programs.hyprlock = {
+ enable = true;
+
+ settings = {
+ general = {
+ disable_loading_bar = true;
+ hide_cursor = true;
+ ignore_empty_input = false;
+ grace = 300;
+ no_fade_in = false;
+ no_fade_out = false;
+ };
+
+ background = [{
+ monitor = "";
+ brightness = "0.817200";
+ color = "rgba(25, 20, 20, 1.0)";
+ path = "screenshot";
+ blur_passes = 3;
+ blur_size = 8;
+ contrast = "0.891700";
+ noise = "0.011700";
+ vibrancy = "0.168600";
+ vibrancy_darkness = "0.050000";
+ }];
+
+ input-field = [{
+ monitor = "";
+ size = "200, 50";
+ position = "0, -80";
+ outline_thickness = 5;
+ dots_center = true;
+ outer_color = "rgb(24, 25, 38)";
+ inner_color = "rgb(91, 96, 120)";
+ font_color = "rgb(202, 211, 245)";
+ fade_on_empty = false;
+ placeholder_text = ''Password...'';
+ shadow_passes = 2;
+ bothlock_color = -1;
+ capslock_color = "-1";
+ check_color = "rgb(204, 136, 34)";
+ dots_rounding = "-1";
+ dots_size = "0.330000";
+ dots_spacing = "0.150000";
+ fade_timeout = "2000";
+ fail_color = "rgb(204, 34, 34)";
+ fail_text = "$FAIL";
+ fail_transition = 300;
+ halign = "center";
+ hide_input = false;
+ invert_numlock = false;
+ numlock_color = -1;
+ rounding = -1;
+ shadow_boost = "1.200000";
+ shadow_color = "rgba(0, 0, 0, 1.0)";
+ shadow_size = 3;
+ swap_font_color = false;
+ valign = "center";
+ }];
+
+ image = [{
+ monitor = "";
+ size = 120;
+ position = "0, 45";
+ path = "/home/$USER/.face";
+ border_color = "rgb(202, 211, 245)";
+ border_size = 5;
+ halign = "center";
+ valign = "center";
+ shadow_passes = 1;
+ reload_cmd = "";
+ reload_time = -1;
+ rotate = "0.000000";
+ rounding = "-1";
+ }];
+
+ label = [
+ {
+ monitor = "";
+ text = ''$TIME'';
+ color = "rgb(202, 211, 245)";
+ font_size = 100;
+ font_family = "MonaspiceNe Nerd Font";
+ valign = "center";
+ halign = "center";
+ position = "0, 330";
+ shadow_passes = 2;
+ rotate = "0.000000";
+ shadow_boost = "1.200000";
+ shadow_color = "rgba(0, 0, 0, 1.0)";
+ shadow_size = 3;
+ text_align = "";
+ }
+ {
+ monitor = "";
+ text = '' $USER'';
+ color = "rgb(202, 211, 245)";
+ font_size = 25;
+ font_family = "MonaspiceNe Nerd Font";
+ valign = "top";
+ halign = "left";
+ position = "10, 0";
+ rotate = "0.000000";
+ shadow_boost = "1.200000";
+ shadow_color = "rgba(0, 0, 0, 1.0)";
+ shadow_size = 3;
+ text_align = "";
+ shadow_passes = 1;
+ }
+ {
+ monitor = "";
+ text = '' '';
+ color = "rgb(202, 211, 245)";
+ font_size = 50;
+ font_family = "MonaspiceNe Nerd Font";
+ valign = "center";
+ halign = "center";
+ position = "15, -350";
+ rotate = "0.000000";
+ shadow_boost = "1.200000";
+ shadow_color = "rgba(0, 0, 0, 1.0)";
+ shadow_size = 3;
+ text_align = "";
+ shadow_passes = 1;
+ }
+ {
+ monitor = "";
+ text = ''Locked'';
+ color = "rgb(202, 211, 245)";
+ font_size = 25;
+ font_family = "MonaspiceNe Nerd Font";
+ valign = "center";
+ halign = "center";
+ position = "0, -430";
+ rotate = "0.000000";
+ shadow_boost = "1.200000";
+ shadow_color = "rgba(0, 0, 0, 1.0)";
+ shadow_size = 3;
+ text_align = "";
+ shadow_passes = 1;
+ }
+ {
+ monitor = "";
+ text = ''
+ cmd[update:120000] echo "$(date +'%a %d %B')"'';
+ color = "rgb(202, 211, 245)";
+ font_size = 30;
+ font_family = "MonaspiceNe Nerd Font";
+ valign = "center";
+ halign = "center";
+ position = "0, 210";
+ rotate = "0.000000";
+ shadow_boost = "1.200000";
+ shadow_color = "rgba(0, 0, 0, 1.0)";
+ shadow_size = 3;
+ text_align = "";
+ shadow_passes = 1;
+ }
+ {
+ monitor = "";
+ text = '' '';
+ color = "rgb(202, 211, 245)";
+ font_size = 25;
+ font_family = "MonaspiceNe Nerd Font";
+ valign = "bottom";
+ halign = "right";
+ position = "5, 8";
+ rotate = "0.000000";
+ shadow_boost = "1.200000";
+ shadow_color = "rgba(0, 0, 0, 1.0)";
+ shadow_size = 3;
+ text_align = "";
+ shadow_passes = 1;
+ }
+ ];
+ };
+ };
+
+ nmt.script = ''
+ assertFileContent \
+ home-files/.config/hypr/hyprlock.conf \
+ ${./complex-configuration.conf}
+ '';
+}
diff --git a/tests/modules/programs/hyprlock/default.nix b/tests/modules/programs/hyprlock/default.nix
new file mode 100644
index 000000000..3ea18c021
--- /dev/null
+++ b/tests/modules/programs/hyprlock/default.nix
@@ -0,0 +1,4 @@
+{
+ hyprlock-basic-configuration = ./basic-configuration.nix;
+ hyprlock-complex-configuration = ./complex-configuration.nix;
+}