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
 | 
						|
      '';
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
}
 |