diff options
Diffstat (limited to 'modules/hyprland')
| -rw-r--r-- | modules/hyprland/monitor.nix | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/modules/hyprland/monitor.nix b/modules/hyprland/monitor.nix new file mode 100644 index 0000000..7aafb7f --- /dev/null +++ b/modules/hyprland/monitor.nix @@ -0,0 +1,101 @@ +{ config, lib, ... }: +let + cfg = config.hyprland.monitors; +in +{ + imports = [ ../waybar ]; + + options.hyprland.monitors = + with lib; + mkOption { + description = "Hyprland Monitor Configuration"; + type = types.attrsOf ( + types.submodule { + options = { + resolution = mkOption { + description = "Monitor Resolution"; + type = types.strMatching "[:digit:]+x[:digit:]+|preferred"; + default = "preferred"; + }; + position = mkOption { + description = "Monitor Position"; + type = types.strMatching "-?[:digit:]+x-?[:digit:]+|auto"; + default = "auto"; + }; + scale = mkOption { + description = "Monitor Scale"; + type = types.numbers.positive; + default = 1; + }; + transform = mkOption { + description = "Hyprland Monitor Transform"; + type = types.submodule { + options = { + flipped = mkOption { + description = "Hyprland Flip Monitor"; + type = types.bool; + default = false; + }; + rotation = mkOption { + description = "Hyprland Monitor Rotation"; + type = types.enum [ + 0 + 90 + 180 + 270 + ]; + default = 0; + }; + }; + }; + default = { + flipped = false; + rotation = 0; + }; + }; + bar = mkOption { + description = "Waybar Settings"; + type = types.submodule { + options = { + enable = mkOption { + description = "Enable Waybar for this Monitor"; + type = types.bool; + default = false; + }; + }; + }; + default = { + enable = false; + }; + }; + }; + } + ); + default = { + default = { }; + }; + }; + + config = { + home-manager.users.n8.wayland.windowManager.hyprland.settings.monitor = + lib.attrsets.mapAttrsToList + ( + name: value: + "${if name == "default" then "" else name},${value.resolution}," + + "${value.position}," + + "${toString value.scale}," + + "transform," + + "${toString ((value.transform.rotation / 90) + (if value.transform.flipped then 4 else 0))}" + ) + cfg; + + bar = builtins.map (m: m.name) ( + builtins.filter (m: m.enable) ( + lib.attrsets.mapAttrsToList (name: value: { + name = name; + enable = value.bar.enable; + }) cfg + ) + ); + }; +} |