feat: add hyprland monitor options

This commit is contained in:
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; webis.enable = true;
impermanence.enable = true; impermanence.enable = true;
}; };
programs.hyprland.enable = true; programs.hyprland = {
programs.gitbutler.enable = true; enable = true;
monitors.DP-3.scale = "auto";
};
programs.exercism.enable = true; programs.exercism.enable = true;
}; };

View file

@ -3,10 +3,18 @@
, ... , ...
}: }:
with lib;
let let
inherit (lib) concatStringsSep flip boolToString mapAttrsToList;
cfg = config.my.programs.hyprland; 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}"; mkRule = rule: windowRegexes: "windowrulev2 = ${rule},${concatStringsSep "," windowRegexes}";
mkRules = rules: windowRegexes: concatStringsSep "\n" (map (flip mkRule windowRegexes) rules); mkRules = rules: windowRegexes: concatStringsSep "\n" (map (flip mkRule windowRegexes) rules);
in in
@ -17,7 +25,7 @@ in
# #
# See https://wiki.hyprland.org/Configuring/Monitors/ # 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 # See https://wiki.hyprland.org/Configuring/Keywords/ for more

View file

@ -5,8 +5,8 @@
, ... , ...
} @ args: } @ args:
with lib;
let let
inherit (lib) mkOption mkEnableOption mkIf types getExe genAttrs optionalAttrs optional;
cfg = config.my.programs.hyprland; cfg = config.my.programs.hyprland;
hyprland = inputs.hyprland.packages.${pkgs.system}.default; hyprland = inputs.hyprland.packages.${pkgs.system}.default;
@ -31,9 +31,38 @@ in
default = [ "de" "us" ]; default = [ "de" "us" ];
}; };
monitors = mkOption { monitors = mkOption {
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; type = types.listOf types.str;
description = "monitor settings"; default = [ ];
default = [ ",preferred,auto,1" ]; apply = lib.concatStringsSep ",";
};
};
};
in
sub
);
description = "monitor setting";
default = {
"" = { };
};
}; };
extraConfig = mkOption { extraConfig = mkOption {
type = types.str; type = types.str;
@ -51,6 +80,7 @@ in
# foot.enable = true; # foot.enable = true;
kitty.enable = true; kitty.enable = true;
rofi.enable = true; rofi.enable = true;
hyprland.monitors."" = lib.mkDefault { };
}; };
wallpapers.enable = true; wallpapers.enable = true;
services = { services = {