grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / hardware / video / displaylink.nix
blob32e5eaf2b978d8084e6d9d249e54bd5ccdf12ddb
1 { config, lib, pkgs, ... }:
2 let
4   enabled = lib.elem "displaylink" config.services.xserver.videoDrivers;
6   evdi = config.boot.kernelPackages.evdi;
8   displaylink = pkgs.displaylink.override {
9     inherit evdi;
10   };
16   config = lib.mkIf enabled {
18     boot.extraModulePackages = [ evdi ];
19     boot.kernelModules = [ "evdi" ];
21     environment.etc."X11/xorg.conf.d/40-displaylink.conf".text = ''
22       Section "OutputClass"
23         Identifier  "DisplayLink"
24         MatchDriver "evdi"
25         Driver      "modesetting"
26         Option      "TearFree" "true"
27         Option      "AccelMethod" "none"
28       EndSection
29     '';
31     # make the device available
32     services.xserver.displayManager.sessionCommands = ''
33       ${lib.getBin pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource 1 0
34     '';
36     # Those are taken from displaylink-installer.sh and from Arch Linux AUR package.
38     services.udev.packages = [ displaylink ];
40     powerManagement.powerDownCommands = ''
41       #flush any bytes in pipe
42       while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done;
44       #suspend DisplayLinkManager
45       echo "S" > /tmp/PmMessagesPort_in
47       #wait until suspend of DisplayLinkManager finish
48       if [ -f /tmp/PmMessagesPort_out ]; then
49         #wait until suspend of DisplayLinkManager finish
50         read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out
51       fi
52     '';
54     powerManagement.resumeCommands = ''
55       #resume DisplayLinkManager
56       echo "R" > /tmp/PmMessagesPort_in
57     '';
59     systemd.services.dlm = {
60       description = "DisplayLink Manager Service";
61       after = [ "display-manager.service" ];
62       conflicts = [ "getty@tty7.service" ];
64       serviceConfig = {
65         ExecStart = "${displaylink}/bin/DisplayLinkManager";
66         Restart = "always";
67         RestartSec = 5;
68         LogsDirectory = "displaylink";
69       };
70     };
72   };