1{ config, lib, pkgs, pkgs_i686, ... }:
2
3with lib;
4
5let
6
7 prl-tools = config.boot.kernelPackages.prl-tools;
8
9in
10
11{
12
13 options = {
14 hardware.parallels = {
15
16 enable = mkOption {
17 type = types.bool;
18 default = false;
19 description = ''
20 This enables Parallels Tools for Linux guests, along with provided
21 video, mouse and other hardware drivers.
22 '';
23 };
24
25 };
26
27 };
28
29 config = mkIf config.hardware.parallels.enable {
30
31 services.xserver = {
32 drivers = singleton
33 { name = "prlvideo"; modules = [ prl-tools ]; libPath = [ prl-tools ]; };
34
35 screenSection = ''
36 Option "NoMTRR"
37 '';
38
39 config = ''
40 Section "InputClass"
41 Identifier "prlmouse"
42 MatchIsPointer "on"
43 MatchTag "prlmouse"
44 Driver "prlmouse"
45 EndSection
46 '';
47 };
48
49 hardware.opengl.package = prl-tools;
50 hardware.opengl.package32 = pkgs_i686.linuxPackages.prl-tools.override { libsOnly = true; kernel = null; };
51
52 services.udev.packages = [ prl-tools ];
53
54 environment.systemPackages = [ prl-tools ];
55
56 boot.extraModulePackages = [ prl-tools ];
57
58 boot.kernelModules = [ "prl_tg" "prl_eth" "prl_fs" "prl_fs_freeze" "acpi_memhotplug" ];
59
60 services.ntp.enable = false;
61
62 systemd.services.prltoolsd = {
63 description = "Parallels Tools' service";
64 wantedBy = [ "multi-user.target" ];
65 serviceConfig = {
66 ExecStart = "${prl-tools}/bin/prltoolsd -f";
67 PIDFile = "/var/run/prltoolsd.pid";
68 };
69 };
70
71 systemd.services.prlfsmountd = {
72 description = "Parallels Shared Folders Daemon";
73 wantedBy = [ "multi-user.target" ];
74 serviceConfig = rec {
75 ExecStart = "${prl-tools}/sbin/prlfsmountd ${PIDFile}";
76 ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /media";
77 ExecStopPost = "${prl-tools}/sbin/prlfsmountd -u";
78 PIDFile = "/run/prlfsmountd.pid";
79 };
80 };
81
82 systemd.services.prlshprint = {
83 description = "Parallels Shared Printer Tool";
84 wantedBy = [ "multi-user.target" ];
85 bindsTo = [ "cups.service" ];
86 serviceConfig = {
87 Type = "forking";
88 ExecStart = "${prl-tools}/bin/prlshprint";
89 };
90 };
91
92 };
93}