diff --git a/machine-confs/helium.nix b/machine-confs/helium.nix index 6299e88..e9870d2 100644 --- a/machine-confs/helium.nix +++ b/machine-confs/helium.nix @@ -1,9 +1,4 @@ -{ - config, - pkgs, - lib, - ... -}: +{ config, pkgs, ... }: { networking = { hostName = "helium"; diff --git a/machine-confs/lithium.nix b/machine-confs/lithium.nix index cf87df8..c13f329 100644 --- a/machine-confs/lithium.nix +++ b/machine-confs/lithium.nix @@ -1,9 +1,4 @@ -{ - config, - pkgs, - lib, - ... -}: +{ config, pkgs, ... }: { networking.hostName = "lithium"; diff --git a/machine-confs/wg-rpi.nix b/machine-confs/wg-rpi.nix index 6da8abf..de0caf5 100644 --- a/machine-confs/wg-rpi.nix +++ b/machine-confs/wg-rpi.nix @@ -1,9 +1,4 @@ -{ - config, - pkgs, - lib, - ... -}: +{ config, pkgs, ... }: let SSID = "ENTER_SSID"; SSIDpassword = "ENTER_PASSWORD"; diff --git a/misc/libinput.nix b/misc/libinput.nix index d79055c..4207915 100644 --- a/misc/libinput.nix +++ b/misc/libinput.nix @@ -1,326 +1,452 @@ -{ config, lib, pkgs, ... }: +{ + config, + lib, + pkgs, + ... +}: with lib; -let cfg = config.services.libinput; +let + cfg = config.services.libinput; - xorgBool = v: if v then "on" else "off"; + xorgBool = v: if v then "on" else "off"; - mkConfigForDevice = deviceType: { - dev = mkOption { - type = types.nullOr types.str; - default = null; - example = "/dev/input/event0"; - description = '' - Path for ${deviceType} device. Set to `null` to apply to any - auto-detected ${deviceType}. - ''; - }; - - accelProfile = mkOption { - type = types.enum [ "flat" "adaptive" "custom" ]; - default = "adaptive"; - example = "flat"; - description = '' - Sets the pointer acceleration profile to the given profile. - Permitted values are `adaptive`, `flat`, `custom`. - Not all devices support this option or all profiles. - If a profile is unsupported, the default profile for this is used. - `flat`: Pointer motion is accelerated by a constant - (device-specific) factor, depending on the current speed. - `adaptive`: Pointer acceleration depends on the input speed. - This is the default profile for most devices. - `custom`: Allows the user to define a custom acceleration function. - To define custom functions use the accelPoints - and accelStep options. - ''; - }; - - accelSpeed = mkOption { - type = types.nullOr types.str; - default = null; - example = "-0.5"; - description = '' - Cursor acceleration (how fast speed increases from minSpeed to maxSpeed). - This only applies to the flat or adaptive profile. - ''; - }; - - accelPointsFallback = mkOption { - type = types.nullOr (types.listOf types.number); - default = null; - example = [ 0.0 1.0 2.4 2.5 ]; - description = '' - Sets the points of the fallback acceleration function. The value must be a list of - floating point non-negative numbers. This only applies to the custom profile. - ''; - }; - - accelPointsMotion = mkOption { - type = types.nullOr (types.listOf types.number); - default = null; - example = [ 0.0 1.0 2.4 2.5 ]; - description = '' - Sets the points of the (pointer) motion acceleration function. The value must be a - list of floating point non-negative numbers. This only applies to the custom profile. - ''; - }; - - accelPointsScroll = mkOption { - type = types.nullOr (types.listOf types.number); - default = null; - example = [ 0.0 1.0 2.4 2.5 ]; - description = '' - Sets the points of the scroll acceleration function. The value must be a list of - floating point non-negative numbers. This only applies to the custom profile. - ''; - }; - - accelStepFallback = mkOption { - type = types.nullOr types.number; - default = null; - example = 0.1; - description = '' - Sets the step between the points of the fallback acceleration function. When a step of - 0.0 is provided, libinput's Fallback acceleration function is used. This only applies - to the custom profile. - ''; - }; - - accelStepMotion = mkOption { - type = types.nullOr types.number; - default = null; - example = 0.1; - description = '' - Sets the step between the points of the (pointer) motion acceleration function. When a - step of 0.0 is provided, libinput's Fallback acceleration function is used. This only - applies to the custom profile. - ''; - }; - - accelStepScroll = mkOption { - type = types.nullOr types.number; - default = null; - example = 0.1; - description = '' - Sets the step between the points of the scroll acceleration function. When a step of - 0.0 is provided, libinput's Fallback acceleration function is used. This only applies - to the custom profile. - ''; - }; - - buttonMapping = mkOption { - type = types.nullOr types.str; - default = null; - example = "1 6 3 4 5 0 7"; - description = '' - Sets the logical button mapping for this device, see XSetPointerMapping(3). The string must - be a space-separated list of button mappings in the order of the logical buttons on the - device, starting with button 1. The default mapping is "1 2 3 ... 32". A mapping of 0 deac‐ - tivates the button. Multiple buttons can have the same mapping. Invalid mapping strings are - discarded and the default mapping is used for all buttons. Buttons not specified in the - user's mapping use the default mapping. See section BUTTON MAPPING for more details. - ''; - }; - - calibrationMatrix = mkOption { - type = types.nullOr types.str; - default = null; - example = "0.5 0 0 0 0.8 0.1 0 0 1"; - description = '' - A string of 9 space-separated floating point numbers. Sets the calibration matrix to the - 3x3 matrix where the first row is (abc), the second row is (def) and the third row is (ghi). - ''; - }; - - clickMethod = mkOption { - type = types.nullOr (types.enum [ "none" "buttonareas" "clickfinger" ]); - default = null; - example = "buttonareas"; - description = '' - Enables a click method. Permitted values are `none`, - `buttonareas`, `clickfinger`. - Not all devices support all methods, if an option is unsupported, - the default click method for this device is used. - ''; - }; - - leftHanded = mkOption { - type = types.bool; - default = false; - description = "Enables left-handed button orientation, i.e. swapping left and right buttons."; - }; - - middleEmulation = mkOption { - type = types.bool; - default = true; - description = '' - Enables middle button emulation. When enabled, pressing the left and right buttons - simultaneously produces a middle mouse button click. - ''; - }; - - naturalScrolling = mkOption { - type = types.bool; - default = false; - description = "Enables or disables natural scrolling behavior."; - }; - - scrollButton = mkOption { - type = types.nullOr types.int; - default = null; - example = 1; - description = '' - Designates a button as scroll button. If the ScrollMethod is button and the button is logically - held down, x/y axis movement is converted into scroll events. - ''; - }; - - scrollMethod = mkOption { - type = types.enum [ "twofinger" "edge" "button" "none" ]; - default = "twofinger"; - example = "edge"; - description = '' - Specify the scrolling method: `twofinger`, `edge`, - `button`, or `none` - ''; - }; - - horizontalScrolling = mkOption { - type = types.bool; - default = true; - description = '' - Enables or disables horizontal scrolling. When disabled, this driver will discard any - horizontal scroll events from libinput. This does not disable horizontal scroll events - from libinput; it merely discards the horizontal axis from any scroll events. - ''; - }; - - sendEventsMode = mkOption { - type = types.enum [ "disabled" "enabled" "disabled-on-external-mouse" ]; - default = "enabled"; - example = "disabled"; - description = '' - Sets the send events mode to `disabled`, `enabled`, - or `disabled-on-external-mouse` - ''; - }; - - tapping = mkOption { - type = types.bool; - default = true; - description = '' - Enables or disables tap-to-click behavior. - ''; - }; - - tappingButtonMap = mkOption { - type = types.nullOr (types.enum [ "lrm" "lmr" ]); - default = null; - description = '' - Set the button mapping for 1/2/3-finger taps to left/right/middle or left/middle/right, respectively. - ''; - }; - - tappingDragLock = mkOption { - type = types.bool; - default = true; - description = '' - Enables or disables drag lock during tapping behavior. When enabled, a finger up during tap- - and-drag will not immediately release the button. If the finger is set down again within the - timeout, the dragging process continues. - ''; - }; - - transformationMatrix = mkOption { - type = types.nullOr types.str; - default = null; - example = "0.5 0 0 0 0.8 0.1 0 0 1"; - description = '' - A string of 9 space-separated floating point numbers. Sets the transformation matrix to - the 3x3 matrix where the first row is (abc), the second row is (def) and the third row is (ghi). - ''; - }; - - disableWhileTyping = mkOption { - type = types.bool; - default = false; - description = '' - Disable input method while typing. - ''; - }; - - additionalOptions = mkOption { - type = types.lines; - default = ""; - example = - '' - Option "DragLockButtons" "L1 B1 L2 B2" - ''; - description = '' - Additional options for libinput ${deviceType} driver. See - {manpage}`libinput(4)` - for available options."; - ''; - }; + mkConfigForDevice = deviceType: { + dev = mkOption { + type = types.nullOr types.str; + default = null; + example = "/dev/input/event0"; + description = '' + Path for ${deviceType} device. Set to `null` to apply to any + auto-detected ${deviceType}. + ''; }; - mkX11ConfigForDevice = deviceType: matchIs: '' - Identifier "libinput ${deviceType} configuration" - MatchDriver "libinput" - MatchIs${matchIs} "${xorgBool true}" - ${optionalString (cfg.${deviceType}.dev != null) ''MatchDevicePath "${cfg.${deviceType}.dev}"''} - Option "AccelProfile" "${cfg.${deviceType}.accelProfile}" - ${optionalString (cfg.${deviceType}.accelSpeed != null) ''Option "AccelSpeed" "${cfg.${deviceType}.accelSpeed}"''} - ${optionalString (cfg.${deviceType}.accelPointsFallback != null) ''Option "AccelPointsFallback" "${toString cfg.${deviceType}.accelPointsFallback}"''} - ${optionalString (cfg.${deviceType}.accelPointsMotion != null) ''Option "AccelPointsMotion" "${toString cfg.${deviceType}.accelPointsMotion}"''} - ${optionalString (cfg.${deviceType}.accelPointsScroll != null) ''Option "AccelPointsScroll" "${toString cfg.${deviceType}.accelPointsScroll}"''} - ${optionalString (cfg.${deviceType}.accelStepFallback != null) ''Option "AccelStepFallback" "${toString cfg.${deviceType}.accelStepFallback}"''} - ${optionalString (cfg.${deviceType}.accelStepMotion != null) ''Option "AccelStepMotion" "${toString cfg.${deviceType}.accelStepMotion}"''} - ${optionalString (cfg.${deviceType}.accelStepScroll != null) ''Option "AccelStepScroll" "${toString cfg.${deviceType}.accelStepScroll}"''} - ${optionalString (cfg.${deviceType}.buttonMapping != null) ''Option "ButtonMapping" "${cfg.${deviceType}.buttonMapping}"''} - ${optionalString (cfg.${deviceType}.calibrationMatrix != null) ''Option "CalibrationMatrix" "${cfg.${deviceType}.calibrationMatrix}"''} - ${optionalString (cfg.${deviceType}.transformationMatrix != null) ''Option "TransformationMatrix" "${cfg.${deviceType}.transformationMatrix}"''} - ${optionalString (cfg.${deviceType}.clickMethod != null) ''Option "ClickMethod" "${cfg.${deviceType}.clickMethod}"''} - Option "LeftHanded" "${xorgBool cfg.${deviceType}.leftHanded}" - Option "MiddleEmulation" "${xorgBool cfg.${deviceType}.middleEmulation}" - Option "NaturalScrolling" "${xorgBool cfg.${deviceType}.naturalScrolling}" - ${optionalString (cfg.${deviceType}.scrollButton != null) ''Option "ScrollButton" "${toString cfg.${deviceType}.scrollButton}"''} - Option "ScrollMethod" "${cfg.${deviceType}.scrollMethod}" - Option "HorizontalScrolling" "${xorgBool cfg.${deviceType}.horizontalScrolling}" - Option "SendEventsMode" "${cfg.${deviceType}.sendEventsMode}" - Option "Tapping" "${xorgBool cfg.${deviceType}.tapping}" - ${optionalString (cfg.${deviceType}.tappingButtonMap != null) ''Option "TappingButtonMap" "${cfg.${deviceType}.tappingButtonMap}"''} - Option "TappingDragLock" "${xorgBool cfg.${deviceType}.tappingDragLock}" - Option "DisableWhileTyping" "${xorgBool cfg.${deviceType}.disableWhileTyping}" - ${cfg.${deviceType}.additionalOptions} - ''; -in { + accelProfile = mkOption { + type = types.enum [ + "flat" + "adaptive" + "custom" + ]; + default = "adaptive"; + example = "flat"; + description = '' + Sets the pointer acceleration profile to the given profile. + Permitted values are `adaptive`, `flat`, `custom`. + Not all devices support this option or all profiles. + If a profile is unsupported, the default profile for this is used. + `flat`: Pointer motion is accelerated by a constant + (device-specific) factor, depending on the current speed. + `adaptive`: Pointer acceleration depends on the input speed. + This is the default profile for most devices. + `custom`: Allows the user to define a custom acceleration function. + To define custom functions use the accelPoints + and accelStep options. + ''; + }; + + accelSpeed = mkOption { + type = types.nullOr types.str; + default = null; + example = "-0.5"; + description = '' + Cursor acceleration (how fast speed increases from minSpeed to maxSpeed). + This only applies to the flat or adaptive profile. + ''; + }; + + accelPointsFallback = mkOption { + type = types.nullOr (types.listOf types.number); + default = null; + example = [ + 0.0 + 1.0 + 2.4 + 2.5 + ]; + description = '' + Sets the points of the fallback acceleration function. The value must be a list of + floating point non-negative numbers. This only applies to the custom profile. + ''; + }; + + accelPointsMotion = mkOption { + type = types.nullOr (types.listOf types.number); + default = null; + example = [ + 0.0 + 1.0 + 2.4 + 2.5 + ]; + description = '' + Sets the points of the (pointer) motion acceleration function. The value must be a + list of floating point non-negative numbers. This only applies to the custom profile. + ''; + }; + + accelPointsScroll = mkOption { + type = types.nullOr (types.listOf types.number); + default = null; + example = [ + 0.0 + 1.0 + 2.4 + 2.5 + ]; + description = '' + Sets the points of the scroll acceleration function. The value must be a list of + floating point non-negative numbers. This only applies to the custom profile. + ''; + }; + + accelStepFallback = mkOption { + type = types.nullOr types.number; + default = null; + example = 0.1; + description = '' + Sets the step between the points of the fallback acceleration function. When a step of + 0.0 is provided, libinput's Fallback acceleration function is used. This only applies + to the custom profile. + ''; + }; + + accelStepMotion = mkOption { + type = types.nullOr types.number; + default = null; + example = 0.1; + description = '' + Sets the step between the points of the (pointer) motion acceleration function. When a + step of 0.0 is provided, libinput's Fallback acceleration function is used. This only + applies to the custom profile. + ''; + }; + + accelStepScroll = mkOption { + type = types.nullOr types.number; + default = null; + example = 0.1; + description = '' + Sets the step between the points of the scroll acceleration function. When a step of + 0.0 is provided, libinput's Fallback acceleration function is used. This only applies + to the custom profile. + ''; + }; + + buttonMapping = mkOption { + type = types.nullOr types.str; + default = null; + example = "1 6 3 4 5 0 7"; + description = '' + Sets the logical button mapping for this device, see XSetPointerMapping(3). The string must + be a space-separated list of button mappings in the order of the logical buttons on the + device, starting with button 1. The default mapping is "1 2 3 ... 32". A mapping of 0 deac‐ + tivates the button. Multiple buttons can have the same mapping. Invalid mapping strings are + discarded and the default mapping is used for all buttons. Buttons not specified in the + user's mapping use the default mapping. See section BUTTON MAPPING for more details. + ''; + }; + + calibrationMatrix = mkOption { + type = types.nullOr types.str; + default = null; + example = "0.5 0 0 0 0.8 0.1 0 0 1"; + description = '' + A string of 9 space-separated floating point numbers. Sets the calibration matrix to the + 3x3 matrix where the first row is (abc), the second row is (def) and the third row is (ghi). + ''; + }; + + clickMethod = mkOption { + type = types.nullOr ( + types.enum [ + "none" + "buttonareas" + "clickfinger" + ] + ); + default = null; + example = "buttonareas"; + description = '' + Enables a click method. Permitted values are `none`, + `buttonareas`, `clickfinger`. + Not all devices support all methods, if an option is unsupported, + the default click method for this device is used. + ''; + }; + + leftHanded = mkOption { + type = types.bool; + default = false; + description = "Enables left-handed button orientation, i.e. swapping left and right buttons."; + }; + + middleEmulation = mkOption { + type = types.bool; + default = true; + description = '' + Enables middle button emulation. When enabled, pressing the left and right buttons + simultaneously produces a middle mouse button click. + ''; + }; + + naturalScrolling = mkOption { + type = types.bool; + default = false; + description = "Enables or disables natural scrolling behavior."; + }; + + scrollButton = mkOption { + type = types.nullOr types.int; + default = null; + example = 1; + description = '' + Designates a button as scroll button. If the ScrollMethod is button and the button is logically + held down, x/y axis movement is converted into scroll events. + ''; + }; + + scrollMethod = mkOption { + type = types.enum [ + "twofinger" + "edge" + "button" + "none" + ]; + default = "twofinger"; + example = "edge"; + description = '' + Specify the scrolling method: `twofinger`, `edge`, + `button`, or `none` + ''; + }; + + horizontalScrolling = mkOption { + type = types.bool; + default = true; + description = '' + Enables or disables horizontal scrolling. When disabled, this driver will discard any + horizontal scroll events from libinput. This does not disable horizontal scroll events + from libinput; it merely discards the horizontal axis from any scroll events. + ''; + }; + + sendEventsMode = mkOption { + type = types.enum [ + "disabled" + "enabled" + "disabled-on-external-mouse" + ]; + default = "enabled"; + example = "disabled"; + description = '' + Sets the send events mode to `disabled`, `enabled`, + or `disabled-on-external-mouse` + ''; + }; + + tapping = mkOption { + type = types.bool; + default = true; + description = '' + Enables or disables tap-to-click behavior. + ''; + }; + + tappingButtonMap = mkOption { + type = types.nullOr ( + types.enum [ + "lrm" + "lmr" + ] + ); + default = null; + description = '' + Set the button mapping for 1/2/3-finger taps to left/right/middle or left/middle/right, respectively. + ''; + }; + + tappingDragLock = mkOption { + type = types.bool; + default = true; + description = '' + Enables or disables drag lock during tapping behavior. When enabled, a finger up during tap- + and-drag will not immediately release the button. If the finger is set down again within the + timeout, the dragging process continues. + ''; + }; + + transformationMatrix = mkOption { + type = types.nullOr types.str; + default = null; + example = "0.5 0 0 0 0.8 0.1 0 0 1"; + description = '' + A string of 9 space-separated floating point numbers. Sets the transformation matrix to + the 3x3 matrix where the first row is (abc), the second row is (def) and the third row is (ghi). + ''; + }; + + disableWhileTyping = mkOption { + type = types.bool; + default = false; + description = '' + Disable input method while typing. + ''; + }; + + additionalOptions = mkOption { + type = types.lines; + default = ""; + example = '' + Option "DragLockButtons" "L1 B1 L2 B2" + ''; + description = '' + Additional options for libinput ${deviceType} driver. See + {manpage}`libinput(4)` + for available options."; + ''; + }; + }; + + mkX11ConfigForDevice = deviceType: matchIs: '' + Identifier "libinput ${deviceType} configuration" + MatchDriver "libinput" + MatchIs${matchIs} "${xorgBool true}" + ${optionalString (cfg.${deviceType}.dev != null) ''MatchDevicePath "${cfg.${deviceType}.dev}"''} + Option "AccelProfile" "${cfg.${deviceType}.accelProfile}" + ${optionalString ( + cfg.${deviceType}.accelSpeed != null + ) ''Option "AccelSpeed" "${cfg.${deviceType}.accelSpeed}"''} + ${optionalString (cfg.${deviceType}.accelPointsFallback != null) + ''Option "AccelPointsFallback" "${toString cfg.${deviceType}.accelPointsFallback}"'' + } + ${optionalString (cfg.${deviceType}.accelPointsMotion != null) + ''Option "AccelPointsMotion" "${toString cfg.${deviceType}.accelPointsMotion}"'' + } + ${optionalString (cfg.${deviceType}.accelPointsScroll != null) + ''Option "AccelPointsScroll" "${toString cfg.${deviceType}.accelPointsScroll}"'' + } + ${optionalString (cfg.${deviceType}.accelStepFallback != null) + ''Option "AccelStepFallback" "${toString cfg.${deviceType}.accelStepFallback}"'' + } + ${optionalString (cfg.${deviceType}.accelStepMotion != null) + ''Option "AccelStepMotion" "${toString cfg.${deviceType}.accelStepMotion}"'' + } + ${optionalString (cfg.${deviceType}.accelStepScroll != null) + ''Option "AccelStepScroll" "${toString cfg.${deviceType}.accelStepScroll}"'' + } + ${optionalString (cfg.${deviceType}.buttonMapping != null) + ''Option "ButtonMapping" "${cfg.${deviceType}.buttonMapping}"'' + } + ${optionalString (cfg.${deviceType}.calibrationMatrix != null) + ''Option "CalibrationMatrix" "${cfg.${deviceType}.calibrationMatrix}"'' + } + ${optionalString ( + cfg.${deviceType}.transformationMatrix != null + ) ''Option "TransformationMatrix" "${cfg.${deviceType}.transformationMatrix}"''} + ${optionalString ( + cfg.${deviceType}.clickMethod != null + ) ''Option "ClickMethod" "${cfg.${deviceType}.clickMethod}"''} + Option "LeftHanded" "${xorgBool cfg.${deviceType}.leftHanded}" + Option "MiddleEmulation" "${xorgBool cfg.${deviceType}.middleEmulation}" + Option "NaturalScrolling" "${xorgBool cfg.${deviceType}.naturalScrolling}" + ${optionalString (cfg.${deviceType}.scrollButton != null) + ''Option "ScrollButton" "${toString cfg.${deviceType}.scrollButton}"'' + } + Option "ScrollMethod" "${cfg.${deviceType}.scrollMethod}" + Option "HorizontalScrolling" "${xorgBool cfg.${deviceType}.horizontalScrolling}" + Option "SendEventsMode" "${cfg.${deviceType}.sendEventsMode}" + Option "Tapping" "${xorgBool cfg.${deviceType}.tapping}" + ${optionalString (cfg.${deviceType}.tappingButtonMap != null) + ''Option "TappingButtonMap" "${cfg.${deviceType}.tappingButtonMap}"'' + } + Option "TappingDragLock" "${xorgBool cfg.${deviceType}.tappingDragLock}" + Option "DisableWhileTyping" "${xorgBool cfg.${deviceType}.disableWhileTyping}" + ${cfg.${deviceType}.additionalOptions} + ''; +in +{ imports = - (map (option: mkRenamedOptionModule ([ "services" "xserver" "libinput" option ]) [ "services" "libinput" "touchpad" option ]) [ - "accelProfile" - "accelSpeed" - "buttonMapping" - "calibrationMatrix" - "clickMethod" - "leftHanded" - "middleEmulation" - "naturalScrolling" - "scrollButton" - "scrollMethod" - "horizontalScrolling" - "sendEventsMode" - "tapping" - "tappingButtonMap" - "tappingDragLock" - "transformationMatrix" - "disableWhileTyping" - "additionalOptions" - ]) ++ [ - (mkRenamedOptionModule [ "services" "xserver" "libinput" "enable" ] [ "services" "libinput" "enable" ]) - (mkRenamedOptionModule [ "services" "xserver" "libinput" "mouse" ] [ "services" "libinput" "mouse" ]) - (mkRenamedOptionModule [ "services" "xserver" "libinput" "touchpad" ] [ "services" "libinput" "touchpad" ]) + (map + ( + option: + mkRenamedOptionModule + ([ + "services" + "xserver" + "libinput" + option + ]) + [ + "services" + "libinput" + "touchpad" + option + ] + ) + [ + "accelProfile" + "accelSpeed" + "buttonMapping" + "calibrationMatrix" + "clickMethod" + "leftHanded" + "middleEmulation" + "naturalScrolling" + "scrollButton" + "scrollMethod" + "horizontalScrolling" + "sendEventsMode" + "tapping" + "tappingButtonMap" + "tappingDragLock" + "transformationMatrix" + "disableWhileTyping" + "additionalOptions" + ] + ) + ++ [ + (mkRenamedOptionModule + [ + "services" + "xserver" + "libinput" + "enable" + ] + [ + "services" + "libinput" + "enable" + ] + ) + (mkRenamedOptionModule + [ + "services" + "xserver" + "libinput" + "mouse" + ] + [ + "services" + "libinput" + "mouse" + ] + ) + (mkRenamedOptionModule + [ + "services" + "xserver" + "libinput" + "touchpad" + ] + [ + "services" + "libinput" + "touchpad" + ] + ) ]; options = { @@ -335,7 +461,6 @@ in { }; }; - config = mkIf cfg.enable { services.xserver.modules = [ pkgs.xorg.xf86inputlibinput ]; @@ -343,8 +468,10 @@ in { environment.systemPackages = [ pkgs.xorg.xf86inputlibinput ]; environment.etc = - let cfgPath = "X11/xorg.conf.d/40-libinput.conf"; - in { + let + cfgPath = "X11/xorg.conf.d/40-libinput.conf"; + in + { ${cfgPath} = { source = pkgs.xorg.xf86inputlibinput.out + "/share/" + cfgPath; }; @@ -359,10 +486,12 @@ in { assertions = [ # already present in synaptics.nix - /* { - assertion = !config.services.xserver.synaptics.enable; - message = "Synaptics and libinput are incompatible, you cannot enable both (in services.xserver)."; - } */ + /* + { + assertion = !config.services.xserver.synaptics.enable; + message = "Synaptics and libinput are incompatible, you cannot enable both (in services.xserver)."; + } + */ ]; };