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;
|
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
Loading…
Reference in a new issue