{ 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; }; }; }; }; }; }