70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
let
 | 
						|
  cfg = config.virtualisation.digitalOceanImage;
 | 
						|
in
 | 
						|
{
 | 
						|
 | 
						|
  imports = [ ./digital-ocean-config.nix ];
 | 
						|
 | 
						|
  options = {
 | 
						|
    virtualisation.digitalOceanImage.diskSize = mkOption {
 | 
						|
      type = with types; int;
 | 
						|
      default = 4096;
 | 
						|
      description = ''
 | 
						|
        Size of disk image. Unit is MB.
 | 
						|
      '';
 | 
						|
    };
 | 
						|
 | 
						|
    virtualisation.digitalOceanImage.configFile = mkOption {
 | 
						|
      type = with types; nullOr path;
 | 
						|
      default = null;
 | 
						|
      description = ''
 | 
						|
        A path to a configuration file which will be placed at
 | 
						|
        <literal>/etc/nixos/configuration.nix</literal> and be used when switching
 | 
						|
        to a new configuration. If set to <literal>null</literal>, a default
 | 
						|
        configuration is used that imports
 | 
						|
        <literal>(modulesPath + "/virtualisation/digital-ocean-config.nix")</literal>.
 | 
						|
      '';
 | 
						|
    };
 | 
						|
 | 
						|
    virtualisation.digitalOceanImage.compressionMethod = mkOption {
 | 
						|
      type = types.enum [ "gzip" "bzip2" ];
 | 
						|
      default = "gzip";
 | 
						|
      example = "bzip2";
 | 
						|
      description = ''
 | 
						|
        Disk image compression method. Choose bzip2 to generate smaller images that
 | 
						|
        take longer to generate but will consume less metered storage space on your
 | 
						|
        Digital Ocean account.
 | 
						|
      '';
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  #### implementation
 | 
						|
  config = {
 | 
						|
 | 
						|
    system.build.digitalOceanImage = import ../../lib/make-disk-image.nix {
 | 
						|
      name = "digital-ocean-image";
 | 
						|
      format = "qcow2";
 | 
						|
      postVM = let
 | 
						|
        compress = {
 | 
						|
          "gzip" = "${pkgs.gzip}/bin/gzip";
 | 
						|
          "bzip2" = "${pkgs.bzip2}/bin/bzip2";
 | 
						|
        }.${cfg.compressionMethod};
 | 
						|
      in ''
 | 
						|
        ${compress} $diskImage
 | 
						|
      '';
 | 
						|
      configFile = if cfg.configFile == null
 | 
						|
        then config.virtualisation.digitalOcean.defaultConfigFile
 | 
						|
        else cfg.configFile;
 | 
						|
      inherit (cfg) diskSize;
 | 
						|
      inherit config lib pkgs;
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
  meta.maintainers = with maintainers; [ arianvp eamsden ];
 | 
						|
 | 
						|
}
 |