at 18.09-beta 4.5 kB view raw
1{ config, lib, pkgs, pkgs_i686, ... }: 2 3with lib; 4 5let 6 prl-tools = config.hardware.parallels.package; 7in 8 9{ 10 11 options = { 12 hardware.parallels = { 13 14 enable = mkOption { 15 type = types.bool; 16 default = false; 17 description = '' 18 This enables Parallels Tools for Linux guests, along with provided 19 video, mouse and other hardware drivers. 20 ''; 21 }; 22 23 autoMountShares = mkOption { 24 type = types.bool; 25 default = true; 26 description = '' 27 Control prlfsmountd service. When this service is running, shares can not be manually 28 mounted through `mount -t prl_fs ...` as this service will remount and trample any set options. 29 Recommended to enable for simple file sharing, but extended share use such as for code should 30 disable this to manually mount shares. 31 ''; 32 }; 33 34 package = mkOption { 35 type = types.package; 36 default = config.boot.kernelPackages.prl-tools; 37 defaultText = "config.boot.kernelPackages.prl-tools"; 38 example = literalExample "config.boot.kernelPackages.prl-tools"; 39 description = '' 40 Defines which package to use for prl-tools. Override to change the version. 41 ''; 42 }; 43 }; 44 45 }; 46 47 config = mkIf config.hardware.parallels.enable { 48 services.xserver = { 49 drivers = singleton 50 { name = "prlvideo"; modules = [ prl-tools ]; libPath = [ prl-tools ]; }; 51 52 screenSection = '' 53 Option "NoMTRR" 54 ''; 55 56 config = '' 57 Section "InputClass" 58 Identifier "prlmouse" 59 MatchIsPointer "on" 60 MatchTag "prlmouse" 61 Driver "prlmouse" 62 EndSection 63 ''; 64 }; 65 66 hardware.opengl.package = prl-tools; 67 hardware.opengl.package32 = pkgs_i686.linuxPackages.prl-tools.override { libsOnly = true; kernel = null; }; 68 69 services.udev.packages = [ prl-tools ]; 70 71 environment.systemPackages = [ prl-tools ]; 72 73 boot.extraModulePackages = [ prl-tools ]; 74 75 boot.kernelModules = [ "prl_tg" "prl_eth" "prl_fs" "prl_fs_freeze" ]; 76 77 services.timesyncd.enable = false; 78 79 systemd.services.prltoolsd = { 80 description = "Parallels Tools' service"; 81 wantedBy = [ "multi-user.target" ]; 82 serviceConfig = { 83 ExecStart = "${prl-tools}/bin/prltoolsd -f"; 84 PIDFile = "/var/run/prltoolsd.pid"; 85 }; 86 }; 87 88 systemd.services.prlfsmountd = mkIf config.hardware.parallels.autoMountShares { 89 description = "Parallels Shared Folders Daemon"; 90 wantedBy = [ "multi-user.target" ]; 91 serviceConfig = rec { 92 ExecStart = "${prl-tools}/sbin/prlfsmountd ${PIDFile}"; 93 ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /media"; 94 ExecStopPost = "${prl-tools}/sbin/prlfsmountd -u"; 95 PIDFile = "/run/prlfsmountd.pid"; 96 }; 97 }; 98 99 systemd.services.prlshprint = { 100 description = "Parallels Shared Printer Tool"; 101 wantedBy = [ "multi-user.target" ]; 102 bindsTo = [ "cups.service" ]; 103 serviceConfig = { 104 Type = "forking"; 105 ExecStart = "${prl-tools}/bin/prlshprint"; 106 }; 107 }; 108 109 systemd.user.services = { 110 prlcc = { 111 description = "Parallels Control Center"; 112 wantedBy = [ "graphical-session.target" ]; 113 serviceConfig = { 114 ExecStart = "${prl-tools}/bin/prlcc"; 115 }; 116 }; 117 prldnd = { 118 description = "Parallels Control Center"; 119 wantedBy = [ "graphical-session.target" ]; 120 serviceConfig = { 121 ExecStart = "${prl-tools}/bin/prldnd"; 122 }; 123 }; 124 prl_wmouse_d = { 125 description = "Parallels Walking Mouse Daemon"; 126 wantedBy = [ "graphical-session.target" ]; 127 serviceConfig = { 128 ExecStart = "${prl-tools}/bin/prl_wmouse_d"; 129 }; 130 }; 131 prlcp = { 132 description = "Parallels CopyPaste Tool"; 133 wantedBy = [ "graphical-session.target" ]; 134 serviceConfig = { 135 ExecStart = "${prl-tools}/bin/prlcp"; 136 }; 137 }; 138 prlsga = { 139 description = "Parallels Shared Guest Applications Tool"; 140 wantedBy = [ "graphical-session.target" ]; 141 serviceConfig = { 142 ExecStart = "${prl-tools}/bin/prlsga"; 143 }; 144 }; 145 prlshprof = { 146 description = "Parallels Shared Profile Tool"; 147 wantedBy = [ "graphical-session.target" ]; 148 serviceConfig = { 149 ExecStart = "${prl-tools}/bin/prlshprof"; 150 }; 151 }; 152 }; 153 154 }; 155}