diff --git a/nix/hm-module.nix b/nix/hm-module.nix
index 13564b8..c62f16d 100644
--- a/nix/hm-module.nix
+++ b/nix/hm-module.nix
@@ -5,7 +5,7 @@ self: {
...
}: let
inherit (builtins) toString;
- inherit (lib.types) int listOf package str bool submodule;
+ inherit (lib.types) bool float int listOf package str submodule;
inherit (lib.modules) mkIf;
inherit (lib.options) mkOption mkEnableOption;
@@ -21,37 +21,6 @@ in {
default = self.packages.${pkgs.stdenv.hostPlatform.system}.hyprlock;
};
- backgrounds = mkOption {
- description = "Monitor configurations";
- default = [
- {
- monitor = "";
- path = "";
- }
- ];
- type = listOf (submodule {
- options = {
- monitor = mkOption {
- description = "The monitor to apply the given wallpaper to";
- type = str;
- default = "";
- };
-
- path = mkOption {
- description = "The path to the wallpaper";
- type = str;
- default = "echo 'timeout reached'";
- };
-
- color = mkOption {
- description = "Background color";
- type = str;
- default = "rgba(25, 20, 20, 1.0)";
- };
- };
- });
- };
-
general = {
disable_loading_bar = mkOption {
description = "Whether to disable loading bar";
@@ -65,150 +34,206 @@ in {
};
};
- input_field = {
- monitor = mkOption {
- description = "The monitor to place the input field on";
- type = str;
- default = "";
- };
+ backgrounds = mkOption {
+ description = "Background configurations";
+ type = listOf (submodule {
+ options = {
+ monitor = mkOption {
+ description = "The monitor to apply the given wallpaper to";
+ type = str;
+ default = "";
+ };
- size = {
- width = mkOption {
- description = "Width of the input field";
- type = int;
- default = 200;
+ path = mkOption {
+ description = "The path to the wallpaper";
+ type = str;
+ default = "echo '/home/me/someImage.png'"; # only png supported for now
+ };
+
+ color = mkOption {
+ description = "Background color";
+ type = str;
+ default = "rgba(25, 20, 20, 1.0)";
+ };
};
- height = mkOption {
- description = "Height of the input field";
- type = int;
- default = 50;
- };
- };
-
- outline_thickness = mkOption {
- description = "The outline thickness of the input field";
- type = int;
- default = 3;
- };
-
- outer_color = mkOption {
- description = "The outer color of the input field";
- type = str;
- default = "rgb(151515)";
- };
-
- inner_color = mkOption {
- description = "The inner color of the input field";
- type = str;
- default = "rgb(200, 200, 200)";
- };
-
- font_color = mkOption {
- description = "The font color of the input field";
- type = str;
- default = "rgb(10, 10, 10)";
- };
-
- fade_on_empty = mkOption {
- description = "Fade input field when empty";
- type = bool;
- default = true;
- };
-
- placeholder_text = mkOption {
- description = "The placeholder text of the input field";
- type = str;
- default = "Input Password...";
- };
-
- hide_input = mkOption {
- description = "Hide input typed into the input field";
- type = bool;
- default = false;
- };
-
- position = {
- x = mkOption {
- description = "X position of the label";
- type = int;
- default = 0;
- };
- y = mkOption {
- description = "Y position of the label";
- type = int;
- default = 80;
- };
- };
-
- halign = mkOption {
- description = "Horizontal alignment of the label";
- type = str;
- default = "center";
- };
-
- valign = mkOption {
- description = "Vertical alignment of the label";
- type = str;
- default = "center";
- };
+ });
+ default = [
+ { }
+ ];
};
- label = {
- monitor = mkOption {
- description = "The monitor to display the label on";
- type = str;
- default = "";
- };
+ input-fields = mkOption {
+ description = "Input field configurations";
+ type = listOf (submodule {
+ options = {
+ monitor = mkOption {
+ description = "The monitor to place the input field on";
+ type = str;
+ default = "";
+ };
- text = mkOption {
- description = "Text to display in label";
- type = str;
- default = "Hi there, $USER";
- };
+ size = {
+ width = mkOption {
+ description = "Width of the input field";
+ type = int;
+ default = 200;
+ };
+ height = mkOption {
+ description = "Height of the input field";
+ type = int;
+ default = 50;
+ };
+ };
- color = mkOption {
- description = "Color of the label";
- type = str;
- default = "rgba(200, 200, 200, 1.0)";
- };
+ outline_thickness = mkOption {
+ description = "The outline thickness of the input field";
+ type = int;
+ default = 3;
+ };
- font_size = mkOption {
- description = "Font size of the label";
- type = int;
- default = 25;
- };
+ dots_size = mkOption {
+ description = "The size of the dots in the input field (scale of input-field height, 0.2 - 0.8)";
+ type = float;
+ default = 0.33;
+ };
- font_family = mkOption {
- description = "Font family of the label";
- type = str;
- default = "Noto Sans";
- };
+ dots_spacing = mkOption {
+ description = "The spacing between the dots in the input field (scale of dot's absolute size, 0.0 - 1.0)";
+ type = float;
+ default = 0.15;
+ };
- position = {
- x = mkOption {
- description = "X position of the label";
- type = int;
- default = 0;
+ outer_color = mkOption {
+ description = "The outer color of the input field";
+ type = str;
+ default = "rgb(151515)";
+ };
+
+ inner_color = mkOption {
+ description = "The inner color of the input field";
+ type = str;
+ default = "rgb(200, 200, 200)";
+ };
+
+ font_color = mkOption {
+ description = "The font color of the input field";
+ type = str;
+ default = "rgb(10, 10, 10)";
+ };
+
+ fade_on_empty = mkOption {
+ description = "Fade input field when empty";
+ type = bool;
+ default = true;
+ };
+
+ placeholder_text = mkOption {
+ description = "The placeholder text of the input field";
+ type = str;
+ default = "Input Password...";
+ };
+
+ hide_input = mkOption {
+ description = "Hide input typed into the input field";
+ type = bool;
+ default = false;
+ };
+
+ position = {
+ x = mkOption {
+ description = "X position of the label";
+ type = int;
+ default = 0;
+ };
+ y = mkOption {
+ description = "Y position of the label";
+ type = int;
+ default = -20;
+ };
+ };
+
+ halign = mkOption {
+ description = "Horizontal alignment of the label";
+ type = str;
+ default = "center";
+ };
+
+ valign = mkOption {
+ description = "Vertical alignment of the label";
+ type = str;
+ default = "center";
+ };
};
+ });
+ default = [
+ { }
+ ];
+ };
- y = mkOption {
- description = "Y position of the label";
- type = int;
- default = 80;
+ labels = mkOption {
+ description = "Label configurations";
+ type = listOf (submodule {
+ options = {
+ monitor = mkOption {
+ description = "The monitor to display the label on";
+ type = str;
+ default = "";
+ };
+
+ text = mkOption {
+ description = "Text to display in label";
+ type = str;
+ default = "Hi there, $USER";
+ };
+
+ color = mkOption {
+ description = "Color of the label";
+ type = str;
+ default = "rgba(200, 200, 200, 1.0)";
+ };
+
+ font_size = mkOption {
+ description = "Font size of the label";
+ type = int;
+ default = 25;
+ };
+
+ font_family = mkOption {
+ description = "Font family of the label";
+ type = str;
+ default = "Noto Sans";
+ };
+
+ position = {
+ x = mkOption {
+ description = "X position of the label";
+ type = int;
+ default = 0;
+ };
+
+ y = mkOption {
+ description = "Y position of the label";
+ type = int;
+ default = 80;
+ };
+ };
+
+ halign = mkOption {
+ description = "Horizontal alignment of the label";
+ type = str;
+ default = "center";
+ };
+
+ valign = mkOption {
+ description = "Vertical alignment of the label";
+ type = str;
+ default = "center";
+ };
};
- };
-
- halign = mkOption {
- description = "Horizontal alignment of the label";
- type = str;
- default = "center";
- };
-
- valign = mkOption {
- description = "Vertical alignment of the label";
- type = str;
- default = "center";
- };
+ });
+ default = [
+ { }
+ ];
};
};
@@ -221,34 +246,6 @@ in {
hide_cursor = ${boolToString cfg.general.hide_cursor}
}
- label {
- monitor = ${cfg.label.monitor}
- text = ${cfg.label.text}
- color = ${cfg.label.color}
- font_size = ${toString cfg.label.font_size}
- font_family = ${cfg.label.font_family}
-
- position = ${toString cfg.label.position.x}, ${toString cfg.label.position.y}
- halign = ${cfg.label.halign}
- valign = ${cfg.label.valign}
- }
-
- input-field {
- monitor = ${cfg.input_field.monitor}
- size = ${toString cfg.input_field.size.width}, ${toString cfg.input_field.size.height}
- outline_thickness = ${toString cfg.input_field.outline_thickness}
- outer_color = ${cfg.input_field.outer_color}
- inner_color = ${cfg.input_field.inner_color}
- font_color = ${cfg.input_field.font_color}
- fade_on_empty = ${boolToString cfg.input_field.fade_on_empty}
- placeholder-text = ${cfg.input_field.placeholder_text}
- hide_input = ${boolToString cfg.input_field.hide_input}
-
- position = ${toString cfg.input_field.position.x}, ${toString cfg.input_field.position.y}
- halign = ${cfg.input_field.halign}
- valign = ${cfg.input_field.valign}
- }
-
${builtins.concatStringsSep "\n" (map (background: ''
background {
monitor = ${background.monitor}
@@ -257,6 +254,42 @@ in {
}
'')
cfg.backgrounds)}
+
+ ${builtins.concatStringsSep "\n" (map (input-field: ''
+ input-field {
+ monitor = ${input-field.monitor}
+ size = ${toString input-field.size.width}, ${toString input-field.size.height}
+ outline_thickness = ${toString input-field.outline_thickness}
+ dots_size = ${toString input-field.dots_size}
+ dots_spacing = ${toString input-field.dots_spacing}
+ outer_color = ${input-field.outer_color}
+ inner_color = ${input-field.inner_color}
+ font_color = ${input-field.font_color}
+ fade_on_empty = ${boolToString input-field.fade_on_empty}
+ placeholder_text = ${input-field.placeholder_text}
+ hide_input = ${boolToString input-field.hide_input}
+
+ position = ${toString input-field.position.x}, ${toString input-field.position.y}
+ halign = ${input-field.halign}
+ valign = ${input-field.valign}
+ }
+ '')
+ cfg.input-fields)}
+
+ ${builtins.concatStringsSep "\n" (map (label: ''
+ label {
+ monitor = ${label.monitor}
+ text = ${label.text}
+ color = ${label.color}
+ font_size = ${toString label.font_size}
+ font_family = ${label.font_family}
+
+ position = ${toString label.position.x}, ${toString label.position.y}
+ halign = ${label.halign}
+ valign = ${label.valign}
+ }
+ '')
+ cfg.labels)}
'';
};
}