--- /dev/null
+;; This vm image is meant to be used as an image template
+;; to be deployed on cloud providers that use cloud-init.
+(define-module (infiniteadaptability systems digital-ocean)
+ #:use-module (gnu)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages bootloaders)
+ #:use-module (gnu packages package-management)
+ #:use-module (gnu packages python-web)
+ #:use-module (gnu packages ssh)
+ #:use-module (gnu services base)
+ #:use-module (gnu services networking)
+ #:use-module (gnu services ssh)
+ #:use-module (guix)
+ #:use-module (guix gexp)
+ #:use-module (infiniteadaptability services cloud-init)
+ #:use-module (srfi srfi-1)
+ #:export (%digital-ocean-operating-system))
+
+(define %digital-ocean-operating-system
+ (operating-system
+ (host-name "gnu")
+ (timezone "Etc/UTC")
+ (locale "en_US.utf8")
+ (keyboard-layout (keyboard-layout "us"))
+
+ (firmware '())
+
+ ;; Below we assume /dev/vda is the VM's hard disk.
+ ;; Adjust as needed.
+ (bootloader (bootloader-configuration
+ (bootloader grub-bootloader)
+ (targets '("/dev/vda"))
+ (terminal-outputs '(console))))
+ (file-systems (cons (file-system
+ (mount-point "/")
+ (device "/dev/vda1")
+ (type "ext4")) %base-file-systems))
+
+ ;; The cloud-utils packages provides some utilities to allow
+ ;; us to piggyback off ubuntu's cloud-init modules/integrations
+ ;; without having to write guix specific functionality.
+ ;;
+ ;; The python-cloud-init package is not strictly required to be
+ ;; in system-wide packages.
+ (packages (append (list cloud-utils python-cloud-init) %base-packages))
+
+ (services
+ (append (list (service cloud-init-service-type
+ ;; An example of extra configuration files. This specific
+ ;; file is required for properly running cloud-init on DigitalOcean
+ (cloud-init-configuration (extra-configuration-files `
+ (("99-digitalocean.cfg" ,
+ (plain-file
+ "99-digitalocean.cfg"
+ "datasource_list: [ ConfigDrive, DigitalOcean, NoCloud, None ]"))))))
+
+ (service network-manager-service-type)
+ (service wpa-supplicant-service-type)
+ (service openssh-service-type
+ (openssh-configuration (openssh openssh-sans-x)
+ (permit-root-login #t))))
+ (modify-services %base-services
+ (guix-service-type config =>
+ (guix-configuration (inherit config)
+ (authorized-keys (append
+ (list (local-file
+ "/etc/guix/signing-key.pub"))
+ %default-authorized-guix-keys)))))))))