hyprland: prioritize variables and beziers (#4263)

* hyprland: prioritize variables and beziers

The `settings` key now handles `$variables` and `bezier`s differently,
putting them at the top of the file.
Also, proper indentation has been implemented.

* Update modules/services/window-managers/hyprland.nix

Co-authored-by: Naïm Favier <n@monade.li>

* hyprland: add animations & beziers test

---------

Co-authored-by: Naïm Favier <n@monade.li>
This commit is contained in:
Mihai Fufezan 2023-07-22 14:58:46 +03:00 committed by GitHub
parent ee5673246d
commit 76dd6c6619
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 16 deletions

View file

@ -175,22 +175,34 @@ in {
shouldGenerate = cfg.systemdIntegration || cfg.extraConfig != ""
|| combinedSettings != { };
toHyprconf = attrs:
toHyprconf = with lib;
attrs: indentLevel:
let
indent = concatStrings (replicate indentLevel " ");
mkSection = n: attrs: ''
${n} {
${toHyprconf attrs}}
${indent}${n} {
${toHyprconf attrs (indentLevel + 1)}${indent}}
'';
mkFields = lib.generators.toKeyValue { listsAsDuplicateKeys = true; };
sections = lib.filterAttrs (n: v: lib.isAttrs v) attrs;
fields = lib.filterAttrs (n: v: !(lib.isAttrs v)) attrs;
in lib.concatStringsSep "\n" (lib.mapAttrsToList mkSection sections)
+ mkFields fields;
sections = filterAttrs (n: v: isAttrs v) attrs;
mkFields = generators.toKeyValue { listsAsDuplicateKeys = true; };
allFields = filterAttrs (n: v: !(isAttrs v)) attrs;
importantFields =
filterAttrs (n: _: (hasPrefix "$" n) || (hasPrefix "bezier" n))
allFields;
fields = builtins.removeAttrs allFields
(mapAttrsToList (n: _: n) importantFields);
in mkFields importantFields
+ concatStringsSep "\n" (mapAttrsToList mkSection sections)
+ removeSuffix indent (indent + (concatStringsSep ''
${indent}'' (splitString "\n" (mkFields fields))));
in lib.mkIf shouldGenerate {
text = lib.optionalString cfg.systemdIntegration ''
exec-once = ${pkgs.dbus}/bin/dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP && systemctl --user start hyprland-session.target
'' + lib.optionalString (combinedSettings != { })
(toHyprconf combinedSettings)
(toHyprconf combinedSettings 0)
+ lib.optionalString (cfg.extraConfig != "") cfg.extraConfig;
onChange = lib.mkIf (cfg.package != null) ''
( # execute in subshell so that `shopt` won't affect other scripts

View file

@ -1,4 +1,15 @@
exec-once = /nix/store/00000000000000000000000000000000-dbus/bin/dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY HYPRLAND_INSTANCE_SIGNATURE XDG_CURRENT_DESKTOP && systemctl --user start hyprland-session.target
$mod=SUPER
bezier=smoothOut, 0.36, 0, 0.66, -0.56
bezier=smoothIn, 0.25, 1, 0.5, 1
bezier=overshot, 0.4,0.8,0.2,1.2
animations {
animation=border, 1, 2, smoothIn
animation=fade, 1, 4, smoothOut
animation=windows, 1, 3, overshot, popin 80%
enabled=true
}
decoration {
col.shadow=rgba(00000099)
shadow_offset=0 5
@ -12,7 +23,6 @@ accel_profile=flat
follow_mouse=1
kb_layout=ro
}
$mod=SUPER
bindm=$mod, mouse:272, movewindow
bindm=$mod, mouse:273, resizewindow
bindm=$mod ALT, mouse:272, resizewindow

View file

@ -15,6 +15,21 @@
"$mod" = "SUPER";
animations = {
enabled = true;
animation = [
"border, 1, 2, smoothIn"
"fade, 1, 4, smoothOut"
"windows, 1, 3, overshot, popin 80%"
];
};
bezier = [
"smoothOut, 0.36, 0, 0.66, -0.56"
"smoothIn, 0.25, 1, 0.5, 1"
"overshot, 0.4,0.8,0.2,1.2"
];
input = {
kb_layout = "ro";
follow_mouse = 1;