envision-unwrapped: 0-unstable-2024-10-20 -> 1.1.1 (#360652)
[NixPkgs.git] / nixos / modules / virtualisation / parallels-guest.nix
blob91a0532fbaab75ee2c6f5b796251ef4924d5afa6
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   prl-tools = config.hardware.parallels.package;
7 in
11   imports = [
12     (mkRemovedOptionModule [ "hardware" "parallels" "autoMountShares" ] "Shares are always automatically mounted since Parallels Desktop 20.")
13   ];
15   options = {
16     hardware.parallels = {
18       enable = mkOption {
19         type = types.bool;
20         default = false;
21         description = ''
22           This enables Parallels Tools for Linux guests, along with provided
23           video, mouse and other hardware drivers.
24         '';
25       };
27       package = mkOption {
28         type = types.nullOr types.package;
29         default = config.boot.kernelPackages.prl-tools;
30         defaultText = "config.boot.kernelPackages.prl-tools";
31         example = literalExpression "config.boot.kernelPackages.prl-tools";
32         description = ''
33           Defines which package to use for prl-tools. Override to change the version.
34         '';
35       };
36     };
38   };
40   config = mkIf config.hardware.parallels.enable {
42     services.udev.packages = [ prl-tools ];
44     environment.systemPackages = [ prl-tools ];
46     boot.extraModulePackages = [ prl-tools ];
48     boot.kernelModules = [ "prl_fs" "prl_fs_freeze" "prl_tg" ]
49       ++ optional (pkgs.stdenv.hostPlatform.system == "aarch64-linux") "prl_notifier";
51     services.timesyncd.enable = false;
53     systemd.services.prltoolsd = {
54       description = "Parallels Tools Service";
55       wantedBy = [ "multi-user.target" ];
56       path = [ prl-tools ];
57       serviceConfig = {
58         ExecStart = "${prl-tools}/bin/prltoolsd -f";
59         PIDFile = "/var/run/prltoolsd.pid";
60         WorkingDirectory = "${prl-tools}/bin";
61       };
62     };
64     systemd.services.prlshprint = {
65       description = "Parallels Printing Tool";
66       wantedBy = [ "multi-user.target" ];
67       bindsTo = [ "cups.service" ];
68       path = [ prl-tools ];
69       serviceConfig = {
70         ExecStart = "${prl-tools}/bin/prlshprint";
71         WorkingDirectory = "${prl-tools}/bin";
72       };
73     };
75     systemd.user.services = {
76       prlcc = {
77         description = "Parallels Control Center";
78         wantedBy = [ "graphical-session.target" ];
79         path = [ prl-tools ];
80         serviceConfig = {
81           ExecStart = "${prl-tools}/bin/prlcc";
82           WorkingDirectory = "${prl-tools}/bin";
83         };
84       };
85       prldnd = {
86         description = "Parallels Drag And Drop Tool";
87         wantedBy = [ "graphical-session.target" ];
88         path = [ prl-tools ];
89         serviceConfig = {
90           ExecStart = "${prl-tools}/bin/prldnd";
91           WorkingDirectory = "${prl-tools}/bin";
92         };
93       };
94       prlcp = {
95         description = "Parallels Copy Paste Tool";
96         wantedBy = [ "graphical-session.target" ];
97         path = [ prl-tools ];
98         serviceConfig = {
99           ExecStart = "${prl-tools}/bin/prlcp";
100           Restart = "always";
101           WorkingDirectory = "${prl-tools}/bin";
102         };
103       };
104       prlsga = {
105         description = "Parallels Shared Guest Applications Tool";
106         wantedBy = [ "graphical-session.target" ];
107         path = [ prl-tools ];
108         serviceConfig = {
109           ExecStart = "${prl-tools}/bin/prlsga";
110           WorkingDirectory = "${prl-tools}/bin";
111         };
112       };
113       prlshprof = {
114         description = "Parallels Shared Profile Tool";
115         wantedBy = [ "graphical-session.target" ];
116         path = [ prl-tools ];
117         serviceConfig = {
118           ExecStart = "${prl-tools}/bin/prlshprof";
119           WorkingDirectory = "${prl-tools}/bin";
120         };
121       };
122     };
124   };