From d025d322a11f52a2677880e216b9a278359d33fb Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 3 Dec 2025 18:24:30 -0800 Subject: [PATCH] systems: add digital-ocean base image --- .../systems/digital-ocean.scm | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 infiniteadaptability/systems/digital-ocean.scm diff --git a/infiniteadaptability/systems/digital-ocean.scm b/infiniteadaptability/systems/digital-ocean.scm new file mode 100644 index 0000000..07e0d5b --- /dev/null +++ b/infiniteadaptability/systems/digital-ocean.scm @@ -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))))))))) -- 2.52.0