| 
									
										
										
										
											2014-05-23 10:18:03 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with lib; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     hardware.trackpoint = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Enable sensitivity and speed configuration for trackpoints. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2015-03-15 00:04:55 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-23 10:18:03 +02:00
										 |  |  |       sensitivity = mkOption { | 
					
						
							|  |  |  |         default = 128; | 
					
						
							|  |  |  |         example = 255; | 
					
						
							|  |  |  |         type = types.int; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Configure the trackpoint sensitivity. By default, the kernel | 
					
						
							|  |  |  |           configures 128. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       speed = mkOption { | 
					
						
							|  |  |  |         default = 97; | 
					
						
							|  |  |  |         example = 255; | 
					
						
							|  |  |  |         type = types.int; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Configure the trackpoint sensitivity. By default, the kernel | 
					
						
							|  |  |  |           configures 97. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2014-08-13 12:10:52 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       emulateWheel = mkOption { | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Enable scrolling while holding the middle mouse button. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2015-03-15 00:04:55 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-25 19:55:26 +02:00
										 |  |  |       fakeButtons = mkOption { | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Switch to "bare" PS/2 mouse support in case Trackpoint buttons are not recognized | 
					
						
							|  |  |  |           properly. This can happen for example on models like the L430, T450, T450s, on | 
					
						
							|  |  |  |           which the Trackpoint buttons are actually a part of the Synaptics touchpad. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-23 10:18:03 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-25 19:55:26 +02:00
										 |  |  |   config = | 
					
						
							|  |  |  |   let cfg = config.hardware.trackpoint; in | 
					
						
							|  |  |  |   mkMerge [ | 
					
						
							|  |  |  |     (mkIf cfg.enable { | 
					
						
							| 
									
										
										
										
											2014-08-13 12:10:52 +02:00
										 |  |  |       services.udev.extraRules = | 
					
						
							| 
									
										
										
										
											2014-07-28 23:33:05 +02:00
										 |  |  |       ''
 | 
					
						
							| 
									
										
										
										
											2015-05-25 19:55:26 +02:00
										 |  |  |         ACTION=="add|change", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{device/speed}="${toString cfg.speed}", ATTR{device/sensitivity}="${toString cfg.sensitivity}" | 
					
						
							| 
									
										
										
										
											2014-07-28 23:33:05 +02:00
										 |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2014-05-23 10:18:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-13 12:10:52 +02:00
										 |  |  |       system.activationScripts.trackpoint = | 
					
						
							|  |  |  |         ''
 | 
					
						
							|  |  |  |           ${config.systemd.package}/bin/udevadm trigger --attr-match=name="TPPS/2 IBM TrackPoint" | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-25 19:55:26 +02:00
										 |  |  |     (mkIf (cfg.emulateWheel) { | 
					
						
							|  |  |  |       services.xserver.inputClassSections = | 
					
						
							|  |  |  |         [''
 | 
					
						
							|  |  |  |         Identifier "Trackpoint Wheel Emulation" | 
					
						
							|  |  |  |           MatchProduct "${if cfg.fakeButtons then "PS/2 Generic Mouse" else "Elantech PS/2 TrackPoint|TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device|Composite TouchPad / TrackPoint"}" | 
					
						
							|  |  |  |           MatchDevicePath "/dev/input/event*" | 
					
						
							|  |  |  |           Option "EmulateWheel" "true" | 
					
						
							|  |  |  |           Option "EmulateWheelButton" "2" | 
					
						
							|  |  |  |           Option "Emulate3Buttons" "false" | 
					
						
							|  |  |  |           Option "XAxisMapping" "6 7" | 
					
						
							|  |  |  |           Option "YAxisMapping" "4 5" | 
					
						
							|  |  |  |         ''];
 | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (mkIf cfg.fakeButtons { | 
					
						
							|  |  |  |       boot.extraModprobeConfig = "options psmouse proto=bare"; | 
					
						
							| 
									
										
										
										
											2014-08-13 12:10:52 +02:00
										 |  |  |     }) | 
					
						
							|  |  |  |   ]; | 
					
						
							| 
									
										
										
										
											2014-05-23 10:18:03 +02:00
										 |  |  | } |