62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								{ config, lib, ... }:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								with lib;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  enabled = elem "displaylink" config.services.xserver.videoDrivers;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  displaylink = config.boot.kernelPackages.displaylink;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								in
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  config = mkIf enabled {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    boot.extraModulePackages = [ displaylink ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    boot.kernelModules = [ "evdi" ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Those are taken from displaylink-installer.sh and from Arch Linux AUR package.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    services.udev.extraRules = ''
							 | 
						||
| 
								 | 
							
								      ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{bNumInterfaces}=="*5", TAG+="uaccess"
							 | 
						||
| 
								 | 
							
								    '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    powerManagement.powerDownCommands = ''
							 | 
						||
| 
								 | 
							
								      #flush any bytes in pipe
							 | 
						||
| 
								 | 
							
								      while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      #suspend DisplayLinkManager
							 | 
						||
| 
								 | 
							
								      echo "S" > /tmp/PmMessagesPort_in
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      #wait until suspend of DisplayLinkManager finish
							 | 
						||
| 
								 | 
							
								      read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out
							 | 
						||
| 
								 | 
							
								    '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    powerManagement.resumeCommands = ''
							 | 
						||
| 
								 | 
							
								      #resume DisplayLinkManager
							 | 
						||
| 
								 | 
							
								      echo "R" > /tmp/PmMessagesPort_in
							 | 
						||
| 
								 | 
							
								    '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    systemd.services.displaylink = {
							 | 
						||
| 
								 | 
							
								      description = "DisplayLink Manager Service";
							 | 
						||
| 
								 | 
							
								      after = [ "display-manager.service" ];
							 | 
						||
| 
								 | 
							
								      wantedBy = [ "graphical.target" ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      serviceConfig = {
							 | 
						||
| 
								 | 
							
								        ExecStart = "${displaylink}/bin/DisplayLinkManager";
							 | 
						||
| 
								 | 
							
								        Restart = "always";
							 | 
						||
| 
								 | 
							
								        RestartSec = 5;
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      preStart = ''
							 | 
						||
| 
								 | 
							
								        mkdir -p /var/log/displaylink
							 | 
						||
| 
								 | 
							
								      '';
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |