| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  | { config, lib, pkgs, pkgs_i686, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with lib; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							| 
									
										
										
										
											2018-03-01 17:06:43 -06:00
										 |  |  |   prl-tools = config.hardware.parallels.package; | 
					
						
							| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  |     hardware.parallels = { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       enable = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = false; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2015-09-15 08:01:02 +02:00
										 |  |  |           This enables Parallels Tools for Linux guests, along with provided | 
					
						
							| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  |           video, mouse and other hardware drivers. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-19 22:41:25 -06:00
										 |  |  |       autoMountShares = mkOption { | 
					
						
							|  |  |  |         type = types.bool; | 
					
						
							|  |  |  |         default = true; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Control prlfsmountd service. When this service is running, shares can not be manually | 
					
						
							|  |  |  |           mounted through `mount -t prl_fs ...` as this service will remount and trample any set options. | 
					
						
							|  |  |  |           Recommended to enable for simple file sharing, but extended share use such as for code should | 
					
						
							|  |  |  |           disable this to manually mount shares. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2018-03-01 17:06:43 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |       package = mkOption { | 
					
						
							|  |  |  |         type = types.package; | 
					
						
							|  |  |  |         default = config.boot.kernelPackages.prl-tools; | 
					
						
							|  |  |  |         defaultText = "config.boot.kernelPackages.prl-tools"; | 
					
						
							|  |  |  |         example = literalExample "config.boot.kernelPackages.prl-tools"; | 
					
						
							|  |  |  |         description = ''
 | 
					
						
							|  |  |  |           Defines which package to use for prl-tools. Override to change the version. | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf config.hardware.parallels.enable { | 
					
						
							|  |  |  |     services.xserver = { | 
					
						
							|  |  |  |       drivers = singleton | 
					
						
							|  |  |  |         { name = "prlvideo"; modules = [ prl-tools ]; libPath = [ prl-tools ]; }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       screenSection = ''
 | 
					
						
							|  |  |  |         Option "NoMTRR" | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       config = ''
 | 
					
						
							|  |  |  |         Section "InputClass" | 
					
						
							|  |  |  |           Identifier "prlmouse" | 
					
						
							|  |  |  |           MatchIsPointer "on" | 
					
						
							|  |  |  |           MatchTag "prlmouse" | 
					
						
							|  |  |  |           Driver "prlmouse" | 
					
						
							|  |  |  |         EndSection | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     hardware.opengl.package = prl-tools; | 
					
						
							|  |  |  |     hardware.opengl.package32 = pkgs_i686.linuxPackages.prl-tools.override { libsOnly = true; kernel = null; }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.udev.packages = [ prl-tools ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.systemPackages = [ prl-tools ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     boot.extraModulePackages = [ prl-tools ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-19 17:41:21 -05:00
										 |  |  |     boot.kernelModules = [ "prl_tg" "prl_eth" "prl_fs" "prl_fs_freeze" ]; | 
					
						
							| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-14 23:49:14 +01:00
										 |  |  |     services.timesyncd.enable = false; | 
					
						
							| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.prltoolsd = { | 
					
						
							|  |  |  |       description = "Parallels Tools' service"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         ExecStart = "${prl-tools}/bin/prltoolsd -f"; | 
					
						
							|  |  |  |         PIDFile = "/var/run/prltoolsd.pid"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-19 22:41:25 -06:00
										 |  |  |     systemd.services.prlfsmountd = mkIf config.hardware.parallels.autoMountShares { | 
					
						
							| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  |       description = "Parallels Shared Folders Daemon"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       serviceConfig = rec { | 
					
						
							|  |  |  |         ExecStart = "${prl-tools}/sbin/prlfsmountd ${PIDFile}"; | 
					
						
							|  |  |  |         ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /media"; | 
					
						
							|  |  |  |         ExecStopPost = "${prl-tools}/sbin/prlfsmountd -u"; | 
					
						
							|  |  |  |         PIDFile = "/run/prlfsmountd.pid"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.prlshprint = { | 
					
						
							|  |  |  |       description = "Parallels Shared Printer Tool"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2015-03-12 09:00:56 +03:00
										 |  |  |       bindsTo = [ "cups.service" ]; | 
					
						
							| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         Type = "forking"; | 
					
						
							|  |  |  |         ExecStart = "${prl-tools}/bin/prlshprint"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-19 14:36:24 -05:00
										 |  |  |     systemd.user.services = { | 
					
						
							|  |  |  |       prlcc = { | 
					
						
							|  |  |  |         description = "Parallels Control Center"; | 
					
						
							|  |  |  |         wantedBy = [ "graphical-session.target" ]; | 
					
						
							|  |  |  |         serviceConfig = { | 
					
						
							|  |  |  |           ExecStart = "${prl-tools}/bin/prlcc"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |       prldnd = { | 
					
						
							|  |  |  |         description = "Parallels Control Center"; | 
					
						
							|  |  |  |         wantedBy = [ "graphical-session.target" ]; | 
					
						
							|  |  |  |         serviceConfig = { | 
					
						
							|  |  |  |           ExecStart = "${prl-tools}/bin/prldnd"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |       prl_wmouse_d  = { | 
					
						
							|  |  |  |         description = "Parallels Walking Mouse Daemon"; | 
					
						
							|  |  |  |         wantedBy = [ "graphical-session.target" ]; | 
					
						
							|  |  |  |         serviceConfig = { | 
					
						
							|  |  |  |           ExecStart = "${prl-tools}/bin/prl_wmouse_d"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |       prlcp = { | 
					
						
							|  |  |  |         description = "Parallels CopyPaste Tool"; | 
					
						
							|  |  |  |         wantedBy = [ "graphical-session.target" ]; | 
					
						
							|  |  |  |         serviceConfig = { | 
					
						
							|  |  |  |           ExecStart = "${prl-tools}/bin/prlcp"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |       prlsga = { | 
					
						
							|  |  |  |         description = "Parallels Shared Guest Applications Tool"; | 
					
						
							|  |  |  |         wantedBy = [ "graphical-session.target" ]; | 
					
						
							|  |  |  |         serviceConfig = { | 
					
						
							|  |  |  |           ExecStart = "${prl-tools}/bin/prlsga"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |       prlshprof = { | 
					
						
							|  |  |  |         description = "Parallels Shared Profile Tool"; | 
					
						
							|  |  |  |         wantedBy = [ "graphical-session.target" ]; | 
					
						
							|  |  |  |         serviceConfig = { | 
					
						
							|  |  |  |           ExecStart = "${prl-tools}/bin/prlshprof"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-11 02:32:05 +03:00
										 |  |  |   }; | 
					
						
							|  |  |  | } |