]> infiniteadaptability.org Git - channel/commitdiff
systems: add digital-ocean base image
authoralex <[email protected]>
Thu, 4 Dec 2025 02:24:30 +0000 (18:24 -0800)
committeralex <[email protected]>
Thu, 4 Dec 2025 02:24:30 +0000 (18:24 -0800)
infiniteadaptability/systems/digital-ocean.scm [new file with mode: 0644]

diff --git a/infiniteadaptability/systems/digital-ocean.scm b/infiniteadaptability/systems/digital-ocean.scm
new file mode 100644 (file)
index 0000000..07e0d5b
--- /dev/null
@@ -0,0 +1,68 @@
+;; 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)))))))))