{ config, lib, ... }: with lib; let prl-tools = config.hardware.parallels.package; in { imports = [ (mkRemovedOptionModule [ "hardware" "parallels" "autoMountShares" ] "Shares are always automatically mounted since Parallels Desktop 20.") ]; options = { hardware.parallels = { enable = mkOption { type = types.bool; default = false; description = '' This enables Parallels Tools for Linux guests, along with provided video, mouse and other hardware drivers. ''; }; package = mkOption { type = types.nullOr types.package; default = config.boot.kernelPackages.prl-tools; defaultText = "config.boot.kernelPackages.prl-tools"; example = literalExpression "config.boot.kernelPackages.prl-tools"; description = '' Defines which package to use for prl-tools. Override to change the version. ''; }; }; }; config = mkIf config.hardware.parallels.enable { services.udev.packages = [ prl-tools ]; environment.systemPackages = [ prl-tools ]; boot.extraModulePackages = [ prl-tools ]; boot.kernelModules = [ "prl_tg" ]; services.timesyncd.enable = false; systemd.services.prltoolsd = { description = "Parallels Tools Service"; wantedBy = [ "multi-user.target" ]; path = [ prl-tools ]; serviceConfig = { ExecStart = "${prl-tools}/bin/prltoolsd -f"; PIDFile = "/var/run/prltoolsd.pid"; WorkingDirectory = "${prl-tools}/bin"; }; }; systemd.services.prlshprint = { description = "Parallels Printing Tool"; wantedBy = [ "multi-user.target" ]; bindsTo = [ "cups.service" ]; path = [ prl-tools ]; serviceConfig = { ExecStart = "${prl-tools}/bin/prlshprint"; WorkingDirectory = "${prl-tools}/bin"; }; }; systemd.user.services.prlcc = { description = "Parallels Control Center"; wantedBy = [ "graphical-session.target" ]; path = [ prl-tools ]; serviceConfig = { ExecStart = "${prl-tools}/bin/prlcc"; WorkingDirectory = "${prl-tools}/bin"; }; }; }; meta.maintainers = with maintainers; [ codgician ]; }