hyprnix but I made it (and it hopefully works)

This commit is contained in:
KoenDR06 2025-07-15 17:35:38 +02:00
parent 4402bf13d3
commit 444186a0df
3 changed files with 495 additions and 10 deletions

View file

@ -0,0 +1,405 @@
{
lib,
...
}: let
inherit (lib) mkEnableOption mkOption types;
in {
options = {
horseman.wm.hyprland = {
enable = mkEnableOption "Hyprland";
config = {
execOnce = mkOption {
type = types.listOf types.str;
default = [
"hyprpaper"
"eww daemon"
"hypridle"
"hyprpaper"
"swaync"
];
};
env = mkOption {
type = types.listOf types.str;
default = [
"XCURSOR_SIZE,24"
"HYPRCURSOR_SIZE,24"
];
};
windowrules = mkOption {
type = types.listOf types.str;
default = [
"suppressevent maximize, class:.*"
"nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0"
"rounding 0, floating:0 onworkspace:w[t1]"
"bordersize 0, floating:0 onworkspace:w[t1]"
"float, initialTitle:^Picture-in-Picture$"
"center, initialTitle:^Picture-in-Picture$"
"size 33% 33%, initialTitle:^Picture-in-Picture$"
"float, initialClass:CImg"
];
};
workspaces = mkOption {
type = types.listOf types.str;
default = [
"w[t1], gapsout:0, gapsin:0"
];
};
general = {
gapsIn = mkOption {
type = types.int;
default = 5;
};
gapsOut = mkOption {
type = types.int;
default = 5;
};
borderSize = mkOption {
type = types.int;
default = 2;
};
col.activeBorder = mkOption {
type = types.str;
default = "rgba(b7bdf8ff)";
};
col.inactiveBorder = mkOption {
type = types.str;
default = "rgba(b7bdf840)";
};
resizeOnBorder = mkOption {
type = types.bool;
default = true;
};
allowTearing = mkOption {
type = types.bool;
default = false;
};
layout = mkOption {
type = types.enum ["dwindle" "master"];
default = "dwindle";
};
};
decoration = {
rounding = mkOption {
type = types.int;
default = 10;
};
activeOpacity = mkOption {
type = types.float;
default = 1.0;
};
inactiveOpacity = mkOption {
type = types.float;
default = 1.0;
};
shadow = {
enabled = mkOption {
type = types.bool;
default = true;
};
range = mkOption {
type = types.int;
default = 4;
};
renderPower = mkOption {
type = types.int;
default = 3;
};
color = mkOption {
type = types.str;
default = "rgba(1a1a1aee)";
};
};
blur = {
enabled = mkOption {
type = types.bool;
default = true;
};
size = mkOption {
type = types.int;
default = 3;
};
passes = mkOption {
type = types.int;
default = 3;
};
vibrancy = mkOption {
type = types.float;
default = 0.1696;
};
};
};
animations = {
enabled = mkOption {
type = types.bool;
default = true;
};
beziers = mkOption {
type = types.listOf (types.submodule {
options = {
name = mkOption {type = types.str;};
startX = mkOption {type = types.number;};
startY = mkOption {type = types.number;};
endX = mkOption {type = types.number;};
endY = mkOption {type = types.number;};
};
});
default = [
{
name = "easeOutQuint";
startX = 0.23;
startY = 1.0;
endX = 0.32;
endY = 1.0;
}
{
name = "easeInOutCubic";
startX = 0.65;
startY = 0.05;
endX = 0.36;
endY = 1.0;
}
{
name = "linear";
startX = 0.0;
startY = 0.0;
endX = 1.0;
endY = 1.0;
}
{
name = "almostLinear";
startX = 0.5;
startY = 0.5;
endX = 0.75;
endY = 1.0;
}
{
name = "quick";
startX = 0.15;
startY = 0.0;
endX = 0.1;
endY = 1.0;
}
];
};
animations = mkOption {
type = types.listOf (types.submodule {
options = {
name = mkOption {type = types.str;};
on = mkOption {type = types.bool;};
speed = mkOption {type = types.number; default = 0;};
curve = mkOption {type = types.str; default = "";};
style = mkOption {type = types.str; default = "";};
};
});
default = [
{
name = "global";
on = true;
speed = 10.0;
curve = "default";
}
{
name = "border";
on = true;
speed = 5.39;
curve = "easeOutQuint";
}
{
name = "windows";
on = true;
speed = 4.79;
curve = "easeOutQuint";
}
{
name = "windowsIn";
on = true;
speed = 4.1;
curve = "easeOutQuint";
style = "popin 87%";
}
{
name = "windowsOut";
on = true;
speed = 1.49;
curve = "linear";
style = "popin 87%";
}
{
name = "fadeIn";
on = true;
speed = 1.73;
curve = "almostLinear";
}
{
name = "fadeOut";
on = true;
speed = 1.46;
curve = "almostLinear";
}
{
name = "fade";
on = true;
speed = 3.03;
curve = "quick";
}
{
name = "layers";
on = true;
speed = 3.81;
curve = "easeOutQuint";
}
{
name = "layersIn";
on = true;
speed = 4.0;
curve = "easeOutQuint";
style = "fade";
}
{
name = "layersOut";
on = true;
speed = 1.5;
curve = "linear";
style = "fade";
}
{
name = "fadeLayersIn";
on = true;
speed = 1.79;
curve = "almostLinear";
}
{
name = "fadeLayersOut";
on = true;
speed = 1.39;
curve = "almostLinear";
}
{
name = "workspaces";
on = true;
speed = 1.94;
curve = "almostLinear";
style = "fade";
}
{
name = "workspacesIn";
on = true;
speed = 1.21;
curve = "almostLinear";
style = "fade";
}
{
name = "workspacesOut";
on = true;
speed = 1.94;
curve = "almostLinear";
style = "fade";
}
];
};
};
dwindle = {
pseudotile = mkOption {
type = types.bool;
default = true;
};
preserveSplit = mkOption {
type = types.bool;
default = true;
};
};
master = {
newStatus = mkOption {
type = types.enum ["master" "slave" "inherit"];
default = "master";
};
};
misc = {
forceDefaultWallpaper = mkOption {
type = types.enum [ 0 1 2 (-1) ];
default = 0;
};
};
input = {
kbLayout = mkOption {
type = types.str;
default = "us";
};
repeatRate = mkOption {
type = types.int;
default = 50;
};
repeatDelay = mkOption {
type = types.int;
default = 300;
};
followMouse = mkOption {
type = types.enum [ 0 1 2 3 ];
default = 1;
};
sensitivity = mkOption {
type = types.numbers.between (-1.0) 1.0;
default = 0.0;
};
numlockByDefault = mkOption {
type = types.bool;
default = true;
};
touchpad = {
naturalScroll = mkOption {
type = types.bool;
default = true;
};
};
};
gestures = {
workspaceSwipe = mkOption {
type = types.bool;
default = false;
};
};
};
};
};
}