feat: add hyprland monitor options

nixos
Moritz Böhme 2024-08-12 11:06:18 +02:00
parent a11717c8ce
commit 1cae5d144a
Signed by: moritz
GPG Key ID: 970C6E89EB0547A9
3 changed files with 48 additions and 8 deletions

View File

@ -20,8 +20,10 @@
webis.enable = true;
impermanence.enable = true;
};
programs.hyprland.enable = true;
programs.gitbutler.enable = true;
programs.hyprland = {
enable = true;
monitors.DP-3.scale = "auto";
};
programs.exercism.enable = true;
};

View File

@ -3,10 +3,18 @@
, ...
}:
with lib;
let
inherit (lib) concatStringsSep flip boolToString mapAttrsToList;
cfg = config.my.programs.hyprland;
mkMonitor = { name, resolution, position, scale, disabled, extra }:
if disabled
then "monitor=${name},disabled"
else "monitor=${name},${resolution},${position},${scale},${extra}";
monitorsList = mapAttrsToList (name: value: { name = name; } // value) cfg.monitors;
monitors = map mkMonitor monitorsList;
mkRule = rule: windowRegexes: "windowrulev2 = ${rule},${concatStringsSep "," windowRegexes}";
mkRules = rules: windowRegexes: concatStringsSep "\n" (map (flip mkRule windowRegexes) rules);
in
@ -17,7 +25,7 @@ in
#
# See https://wiki.hyprland.org/Configuring/Monitors/
${concatLines (map (x: "monitor=${x}") cfg.monitors)}
${concatStringsSep "\n" monitors}
# See https://wiki.hyprland.org/Configuring/Keywords/ for more

View File

@ -5,8 +5,8 @@
, ...
} @ args:
with lib;
let
inherit (lib) mkOption mkEnableOption mkIf types getExe genAttrs optionalAttrs optional;
cfg = config.my.programs.hyprland;
hyprland = inputs.hyprland.packages.${pkgs.system}.default;
@ -31,9 +31,38 @@ in
default = [ "de" "us" ];
};
monitors = mkOption {
type = types.listOf types.str;
description = "monitor settings";
default = [ ",preferred,auto,1" ];
type = types.attrsOf (
let
sub = types.submodule {
options = {
resolution = mkOption {
type = types.strMatching "\(preferred\)|\([[:digit:]]+x[[:digit:]]+\(@[[:digit:]]+\)\?\)";
default = "preferred";
};
position = mkOption {
type = types.strMatching "\(auto\)|\(-\?[[:digit:]]+x-?[[:digit:]]+\)";
default = "auto";
};
disabled = mkEnableOption "disabled";
scale = mkOption {
type = types.oneOf [ types.float (types.strMatching "auto") ];
default = 1.0;
apply = x: if lib.isFloat x then lib.strings.floatToString x else x;
};
extra = mkOption {
type = types.listOf types.str;
default = [ ];
apply = lib.concatStringsSep ",";
};
};
};
in
sub
);
description = "monitor setting";
default = {
"" = { };
};
};
extraConfig = mkOption {
type = types.str;
@ -51,6 +80,7 @@ in
# foot.enable = true;
kitty.enable = true;
rofi.enable = true;
hyprland.monitors."" = lib.mkDefault { };
};
wallpapers.enable = true;
services = {