at 15.09-beta 2.1 kB view raw
1# Module for VirtualBox guests. 2 3{ config, lib, pkgs, ... }: 4 5with lib; 6 7let 8 9 cfg = config.virtualisation.virtualbox.guest; 10 kernel = config.boot.kernelPackages; 11 12in 13 14{ 15 16 ###### interface 17 18 options.virtualisation.virtualbox.guest.enable = mkOption { 19 default = false; 20 description = "Whether to enable the VirtualBox service and other guest additions."; 21 }; 22 23 ###### implementation 24 25 config = mkIf cfg.enable { 26 assertions = [ { 27 assertion = pkgs.stdenv.isi686 || pkgs.stdenv.isx86_64; 28 message = "Virtualbox not currently supported on ${pkgs.stdenv.system}"; 29 } ]; 30 31 environment.systemPackages = [ kernel.virtualboxGuestAdditions ]; 32 33 boot.extraModulePackages = [ kernel.virtualboxGuestAdditions ]; 34 35 boot.kernelModules = [ "vboxsf" ]; 36 37 users.extraGroups.vboxsf.gid = config.ids.gids.vboxsf; 38 39 systemd.services.virtualbox = 40 { description = "VirtualBox Guest Services"; 41 42 wantedBy = [ "multi-user.target" ]; 43 requires = [ "dev-vboxguest.device" ]; 44 after = [ "dev-vboxguest.device" ]; 45 46 unitConfig.ConditionVirtualization = "oracle"; 47 48 serviceConfig.ExecStart = "@${kernel.virtualboxGuestAdditions}/bin/VBoxService VBoxService --foreground"; 49 }; 50 51 services.xserver.videoDrivers = mkOverride 50 [ "virtualbox" ]; 52 53 services.xserver.config = 54 '' 55 Section "InputDevice" 56 Identifier "VBoxMouse" 57 Driver "vboxmouse" 58 EndSection 59 ''; 60 61 services.xserver.serverLayoutSection = 62 '' 63 InputDevice "VBoxMouse" 64 ''; 65 66 services.xserver.displayManager.sessionCommands = 67 '' 68 PATH=${makeSearchPath "bin" [ pkgs.gnugrep pkgs.which pkgs.xorg.xorgserver ]}:$PATH \ 69 ${kernel.virtualboxGuestAdditions}/bin/VBoxClient-all 70 ''; 71 72 services.udev.extraRules = 73 '' 74 # /dev/vboxuser is necessary for VBoxClient to work. Maybe we 75 # should restrict this to logged-in users. 76 KERNEL=="vboxuser", OWNER="root", GROUP="root", MODE="0666" 77 78 # Allow systemd dependencies on vboxguest. 79 KERNEL=="vboxguest", TAG+="systemd" 80 ''; 81 }; 82 83}