feat: add hyprland monitor options
This commit is contained in:
parent
a11717c8ce
commit
1cae5d144a
3 changed files with 48 additions and 8 deletions
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.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;
|
||||
description = "monitor settings";
|
||||
default = [ ",preferred,auto,1" ];
|
||||
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 = {
|
||||
|
|
Loading…
Reference in a new issue