feat: derive desktop input and SDDM scale from host metadata
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
{
|
||||
flake.modules.nixos.input =
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
hostInput = config.meta.host.input;
|
||||
|
||||
hasAnyConfiguredValue = attrs: lib.any (value: value != null) (lib.attrValues attrs);
|
||||
libinputScrollMethodMap = {
|
||||
edge = "edge";
|
||||
"no-scroll" = "none";
|
||||
"on-button-down" = "button";
|
||||
"two-finger" = "twofinger";
|
||||
};
|
||||
libinputClickMethodMap = {
|
||||
"button-areas" = "buttonareas";
|
||||
clickfinger = "clickfinger";
|
||||
};
|
||||
|
||||
hasMouseConfig = hasAnyConfiguredValue hostInput.mouse;
|
||||
hasTouchpadConfig = hasAnyConfiguredValue hostInput.touchpad;
|
||||
hasPointerConfig = hasMouseConfig || hasTouchpadConfig;
|
||||
|
||||
mouseConfig = lib.filterAttrs (_: value: value != null) {
|
||||
accelProfile = hostInput.mouse.accelProfile;
|
||||
accelSpeed =
|
||||
if hostInput.mouse.accelSpeed == null then null else toString hostInput.mouse.accelSpeed;
|
||||
leftHanded = hostInput.mouse.leftHanded;
|
||||
middleEmulation = hostInput.mouse.middleEmulation;
|
||||
naturalScrolling = hostInput.mouse.naturalScrolling;
|
||||
scrollMethod =
|
||||
if hostInput.mouse.scrollMethod == null then
|
||||
null
|
||||
else
|
||||
libinputScrollMethodMap.${hostInput.mouse.scrollMethod};
|
||||
};
|
||||
|
||||
touchpadConfig = lib.filterAttrs (_: value: value != null) {
|
||||
accelProfile = hostInput.touchpad.accelProfile;
|
||||
accelSpeed =
|
||||
if hostInput.touchpad.accelSpeed == null then null else toString hostInput.touchpad.accelSpeed;
|
||||
clickMethod =
|
||||
if hostInput.touchpad.clickMethod == null then
|
||||
null
|
||||
else
|
||||
libinputClickMethodMap.${hostInput.touchpad.clickMethod};
|
||||
disableWhileTyping = hostInput.touchpad.disableWhileTyping;
|
||||
leftHanded = hostInput.touchpad.leftHanded;
|
||||
middleEmulation = hostInput.touchpad.middleEmulation;
|
||||
naturalScrolling = hostInput.touchpad.naturalScrolling;
|
||||
scrollMethod =
|
||||
if hostInput.touchpad.scrollMethod == null then
|
||||
null
|
||||
else
|
||||
libinputScrollMethodMap.${hostInput.touchpad.scrollMethod};
|
||||
tapping = hostInput.touchpad.tapping;
|
||||
};
|
||||
in
|
||||
{
|
||||
services.libinput = lib.mkIf hasPointerConfig {
|
||||
enable = true;
|
||||
mouse = mouseConfig;
|
||||
touchpad = touchpadConfig;
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user