From 28d24615b333afafb24897c6d6e2d3329eb3481d Mon Sep 17 00:00:00 2001 From: Mathis H Date: Tue, 12 Mar 2024 22:16:18 +0000 Subject: [PATCH] hyprland: add option for per-input device configs --- modules/services/window-managers/hyprland.nix | 24 ++++++++++++++++--- .../hyprland/simple-config.conf | 4 ++++ .../hyprland/simple-config.nix | 5 ++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/modules/services/window-managers/hyprland.nix b/modules/services/window-managers/hyprland.nix index ec0cf557f..3048d5894 100644 --- a/modules/services/window-managers/hyprland.nix +++ b/modules/services/window-managers/hyprland.nix @@ -207,23 +207,41 @@ in { let indent = concatStrings (replicate indentLevel " "); + sections = filterAttrs (n: v: isAttrs v && n != "device") attrs; + mkSection = n: attrs: '' ${indent}${n} { ${toHyprconf attrs (indentLevel + 1)}${indent}} ''; - sections = filterAttrs (n: v: isAttrs v) attrs; + + mkDeviceCategory = device: '' + ${indent}device { + name=${device.name} + ${ + toHyprconf (filterAttrs (n: _: "name" != n) device) + (indentLevel + 1) + }${indent}} + ''; + + deviceCategory = lib.optionalString (hasAttr "device" attrs) + (if isList attrs.device then + (concatMapStringsSep "\n" (d: mkDeviceCategory d) attrs.device) + else + mkDeviceCategory attrs.device); mkFields = generators.toKeyValue { listsAsDuplicateKeys = true; inherit indent; }; - allFields = filterAttrs (n: v: !(isAttrs v)) attrs; + allFields = filterAttrs (n: v: !(isAttrs v) && n != "device") attrs; + importantFields = filterAttrs (n: _: (hasPrefix "$" n) || (hasPrefix "bezier" n) || (cfg.sourceFirst && (hasPrefix "source" n))) allFields; + fields = builtins.removeAttrs allFields (mapAttrsToList (n: _: n) importantFields); - in mkFields importantFields + in mkFields importantFields + deviceCategory + concatStringsSep "\n" (mapAttrsToList mkSection sections) + mkFields fields; diff --git a/tests/modules/services/window-managers/hyprland/simple-config.conf b/tests/modules/services/window-managers/hyprland/simple-config.conf index 0db599a31..9b15ba32a 100644 --- a/tests/modules/services/window-managers/hyprland/simple-config.conf +++ b/tests/modules/services/window-managers/hyprland/simple-config.conf @@ -6,6 +6,10 @@ 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 source=sourced.conf +device { + name=some:device + enable=true +} animations { animation=border, 1, 2, smoothIn animation=fade, 1, 4, smoothOut diff --git a/tests/modules/services/window-managers/hyprland/simple-config.nix b/tests/modules/services/window-managers/hyprland/simple-config.nix index f45bf6b38..e7b11ffe1 100644 --- a/tests/modules/services/window-managers/hyprland/simple-config.nix +++ b/tests/modules/services/window-managers/hyprland/simple-config.nix @@ -46,6 +46,11 @@ "$mod ALT, mouse:272, resizewindow" ]; + device = { + name = "some:device"; + enable = true; + }; + plugin = { plugin1 = { dummy = "plugin setting";