at 17.09-beta 1.5 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 enabled = elem "displaylink" config.services.xserver.videoDrivers; 8 9 evdi = config.boot.kernelPackages.evdi; 10 11 displaylink = pkgs.displaylink.override { 12 inherit evdi; 13 }; 14 15in 16 17{ 18 19 config = mkIf enabled { 20 21 boot.extraModulePackages = [ evdi ]; 22 23 # Those are taken from displaylink-installer.sh and from Arch Linux AUR package. 24 25 services.udev.packages = [ displaylink ]; 26 27 powerManagement.powerDownCommands = '' 28 #flush any bytes in pipe 29 while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done; 30 31 #suspend DisplayLinkManager 32 echo "S" > /tmp/PmMessagesPort_in 33 34 #wait until suspend of DisplayLinkManager finish 35 if [ -f /tmp/PmMessagesPort_out ]; then 36 #wait until suspend of DisplayLinkManager finish 37 read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out 38 fi 39 ''; 40 41 powerManagement.resumeCommands = '' 42 #resume DisplayLinkManager 43 echo "R" > /tmp/PmMessagesPort_in 44 ''; 45 46 systemd.services.dlm = { 47 description = "DisplayLink Manager Service"; 48 after = [ "display-manager.service" ]; 49 conflicts = [ "getty@tty7.service" ]; 50 path = [ pkgs.kmod ]; 51 52 serviceConfig = { 53 ExecStart = "${displaylink}/bin/DisplayLinkManager"; 54 Restart = "always"; 55 RestartSec = 5; 56 }; 57 58 preStart = '' 59 mkdir -p /var/log/displaylink 60 modprobe evdi 61 ''; 62 }; 63 64 }; 65 66}