nixos-configs/lib/hypr/default.nix
matt1432 788b9e92c3
All checks were successful
Discord / discord commits (push) Has been skipped
feat(lib): add hypr.mkMonitor helper function
2025-02-05 14:55:34 -05:00

108 lines
2.3 KiB
Nix

{
concatStringsSep,
elemAt,
optional,
optionals,
...
}: rec {
pointToStr = p: "${toString (elemAt p 0)}, ${toString (elemAt p 1)}";
mkBezier = {
name,
p0,
p1,
}:
concatStringsSep "," [name (pointToStr p0) (pointToStr p1)];
mkAnimation = {
name,
enable ? true,
duration ? 0, # in ds (100ms)
bezier ? "default",
style ? null,
}:
concatStringsSep "," (
[
name
(
if enable
then "1"
else "0"
)
]
++ optionals enable (
[
(toString duration)
bezier
]
++ optional (style != null) style
)
);
mkLayerRule = {
rule,
namespace,
}:
concatStringsSep "," [rule namespace];
mkBind = {
modifier ? "",
key,
dispatcher ? "exec",
command ? null,
}:
concatStringsSep "," (
[modifier key dispatcher]
++ optional (command != null) command
);
mkMonitor = {
description ? null,
name ? null,
resolution ? null,
refreshRate ? null,
position ? "auto",
scale ? "1",
transform ? null,
mirror ? null,
bitdepth ? null,
vrr ? null,
}: let
transformMap = {
"normal" = 0;
"90" = 1;
"180" = 2;
"270" = 3;
"normalf" = 4;
"90f" = 5;
"180f" = 6;
"270f" = 7;
};
in
concatStringsSep "," (
[
(
if name != null && description != null
then throw "description or name required"
else if name != null
then name
else "desc:${description}"
)
(
if resolution == null && refreshRate != null
then throw "resolution needed if refreshRate is specified"
else if resolution != null && refreshRate != null
then "${resolution}@${toString refreshRate}"
else if resolution != null && refreshRate == null
then resolution
else "preferred"
)
position
scale
]
++ optional (transform != null) "transform, ${toString transformMap.${transform}}"
++ optional (mirror != null) "mirror, ${mirror}"
++ optional (bitdepth != null) "bitdepth, ${toString bitdepth}"
++ optional (vrr != null) "vrr, ${toString vrr}"
);
}