{ lib, config, ... }: { options = with lib; with types; { hardware.monitors = mkOption { type = lazyAttrsOf (submodule { options = { mode = mkOption { type = str; default = "auto"; }; position = mkOption { type = str; default = "auto"; }; rotation = mkOption { type = enum [ "none" "90" "180" "270" ]; default = "none"; }; flipped = mkOption { type = bool; default = false; }; }; }); default = { }; description = "Monitor configuration"; }; }; # config = { # xdg.configFile."hypr/monitors.lua" = lib.mkIf config.wayland.windowManager.hyprland.enable { # text = # let # workspaceSettings = ( # lib.imap0 ( # idx: # { name, value }: # let # offset = idx * 10; # in # lib.concatMapStrings ( # i: # let # ws = offset + i; # in # '' # hl.workspace_rule({ workspace = ${toString ws}, monitor = "${name}", default_name = "${toString i}" }) # '' # ) (lib.range 1 10) # ) (lib.attrsToList config.hardware.monitors) # ); # transformMap = { # "none" = { # normal = 0; # flipped = 4; # }; # "90" = { # normal = 1; # flipped = 5; # }; # "180" = { # normal = 2; # flipped = 6; # }; # "270" = { # normal = 3; # flipped = 7; # }; # }; # # monitorTransform = # m: # let # t = transformMap.${m.rotation}; # in # if m.flipped then t.flipped else t.normal; # # monitorString = name: m: '' # hl.monitor({ # output = "${name}", # mode = "${m.mode}", # position = "${m.position}", # transform = ${toString (monitorTransform m)}, # }) # ''; # # monitorSettings = lib.mapAttrsToList monitorString config.hardware.monitors; # in # lib.concatStringsSep "\n" (workspaceSettings ++ monitorSettings); # }; # }; }