summary refs log blame commit diff
path: root/modules/virtualisation/virtualbox-guest.nix
blob: 8e09d79e3a48edf45856968b65bf385bf96c5b9c (plain) (tree)
1
2
3
4
5
6
7
8
9

                               






                                   
                                      


  
                                                    


                  
 
             
 
                           
 


                                                                                            
        

      
 
    
 




                            
                                                                     
 
                                                                   
 

                                           
 

                                 
                                                                                  

        














                                                                   




                                                                                             






                                                                      



                                                               


    
       
# Module for VirtualBox guests.

{ config, pkgs, ... }:

with pkgs.lib;

let

  cfg = config.services.virtualbox;
  kernel = config.boot.kernelPackages;

in

if (pkgs.stdenv.isi686 || pkgs.stdenv.isx86_64) then
{

  ###### interface

  options = {

    services.virtualbox = {

      enable = mkOption {
        default = false;
        description = "Whether to enable the VirtualBox service and other guest additions.";
      };

    };

  };


  ###### implementation

  config = mkIf cfg.enable {

    environment.systemPackages = [ kernel.virtualboxGuestAdditions ];

    boot.extraModulePackages = [ kernel.virtualboxGuestAdditions ];

    jobs.virtualbox =
      { description = "VirtualBox service";

        startOn = "started udev";

        exec = "${kernel.virtualboxGuestAdditions}/sbin/VBoxService --foreground";
      };

    services.xserver.videoDrivers = mkOverride 50 [ "virtualbox" ];

    services.xserver.config =
      ''
        Section "InputDevice"
          Identifier "VBoxMouse"
          Driver "vboxmouse"
        EndSection
      '';

    services.xserver.serverLayoutSection =
      ''
        InputDevice "VBoxMouse"
      '';
    
    services.xserver.displayManager.sessionCommands =
      ''
        PATH=${makeSearchPath "bin" [ pkgs.gnugrep pkgs.which pkgs.xorg.xorgserver ]}:$PATH \
          ${kernel.virtualboxGuestAdditions}/bin/VBoxClient-all
      '';

    services.udev.extraRules =
      ''
        # /dev/vboxuser is necessary for VBoxClient to work.  Maybe we
        # should restrict this to logged-in users.
        KERNEL=="vboxuser",  OWNER="root", GROUP="root", MODE="0666"
      '';

    # Make the ACPI Shutdown command to do the right thing.    
    services.acpid.enable = true;
    services.acpid.powerEventCommands = "poweroff";
  };

}
else {}