summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-01-27 06:17:38 -0600
committerCraig Jennings <c@cjennings.net>2026-01-27 06:17:38 -0600
commitde0594dacfcacdd576537c2ce0a3a3c4a11b61b5 (patch)
tree19671f15d1e49895d7d7880091a7f0c712ff9086
parentaa89a46820f0a27df88a3717c987ac31cbb2f940 (diff)
feat(assets): add dupre color theme reference and palette generator
Add color-themes/ with dupre palette org doc, PNG swatch image, and ImageMagick generation script. Move old docs to outbox.
-rw-r--r--assets/color-themes/dupre/dupre-palette.org230
-rw-r--r--assets/color-themes/dupre/dupre-palette.pngbin0 -> 110678 bytes
-rwxr-xr-xassets/color-themes/generate-palette.sh68
-rw-r--r--assets/outbox/2025-11-08-keyring-fix-next-steps.org75
-rw-r--r--assets/outbox/2025-11-08-test-failure-analysis.org222
5 files changed, 595 insertions, 0 deletions
diff --git a/assets/color-themes/dupre/dupre-palette.org b/assets/color-themes/dupre/dupre-palette.org
new file mode 100644
index 0000000..1293c02
--- /dev/null
+++ b/assets/color-themes/dupre/dupre-palette.org
@@ -0,0 +1,230 @@
+#+TITLE: Dupre Theme Color Palette
+#+AUTHOR: Craig Jennings
+#+DATE: 2026-01-27
+#+DESCRIPTION: Complete color reference for the Dupre theme across all applications.
+
+* Color Palette
+
+The Dupre theme originates from =dupre-theme.el= in Emacs. It is a warm, earthy dark theme built around goldenrod/amber accents on a near-black background.
+
+** Core Colors
+
+| Name | Hex | Role |
+|-----------+-----------+-------------------------------------|
+| bg | =#151311= | Background |
+| bg+2 | =#474544= | Elevated surfaces, inactive borders |
+| fg | =#f0fef0= | Primary foreground text |
+| gray+2 | =#d0cbc0= | Secondary text, muted foreground |
+| yellow | =#d7af5f= | Primary accent (gold/amber) |
+| steel | =#969385= | Tertiary text, status bar labels |
+| muted | =#58574e= | Disabled/dimmed elements |
+| black | =#252321= | Dark surface (bg+1) |
+
+** Full 16-Color Terminal Palette
+
+| Index | Name | Hex | Alias |
+|-------+----------------+-----------+-------------------|
+| 0 | black | =#252321= | bg+1 |
+| 1 | red | =#d47c59= | dupre-red |
+| 2 | green | =#a4ac64= | dupre-green |
+| 3 | yellow | =#d7af5f= | dupre-yellow |
+| 4 | blue | =#67809c= | dupre-blue |
+| 5 | magenta | =#b294bb= | |
+| 6 | cyan | =#8a9496= | dupre-steel |
+| 7 | white | =#d0cbc0= | gray+2 |
+| 8 | bright black | =#474544= | bg+2 |
+| 9 | bright red | =#edb08f= | dupre-red+1 |
+| 10 | bright green | =#ccc768= | dupre-green+1 |
+| 11 | bright yellow | =#ffd75f= | dupre-yellow+1 |
+| 12 | bright blue | =#b2c3cc= | dupre-blue+1 |
+| 13 | bright magenta | =#c397d8= | |
+| 14 | bright cyan | =#acb0b3= | dupre-steel+1 |
+| 15 | bright white | =#f0fef0= | fg |
+
+** Semantic Colors
+
+| Purpose | Hex | Source Color |
+|-----------------+-----------+----------------|
+| Accent/active | =#d7af5f= | yellow (gold) |
+| Error/fail | =#d47c59= | red |
+| Warning | =#d7af5f= | yellow |
+| Success | =#a4ac64= | green |
+| Caps lock | =#ccc768= | bright green |
+| Critical bg | =#7c2a09= | dark red |
+| Placeholder | =#6c6a60= | muted variant |
+
+* Application Color Mappings
+
+** Hyprland Window Manager
+
+Source: =dotfiles/hyprland/.config/themes/dupre/hyprland.conf=
+
+| Element | Color | Format |
+|-----------------+-----------+--------------------|
+| Active border | =#d7af5f= | =rgba(d7af5fff)= |
+| Inactive border | =#474544= | =rgba(474544ff)= |
+
+** hy3 Plugin (Tab Bar / Monocle Mode)
+
+Applied at runtime via =set-theme= and =hyprctl keyword=.
+
+| Element | Color | Format |
+|---------------+-----------+------------------|
+| Active tab bg | =#474544= | =rgba(474544ff)= |
+| Active text | =#969385= | =rgba(969385ff)= |
+| Inactive tab | =#d0cbc0= | =rgba(d0cbc0ff)= |
+| Inactive text | =#d0cbc0= | =rgba(d0cbc0ff)= |
+| Urgent tab | =#d47c59= | =rgba(d47c59ff)= |
+| Locked tab | =#8a9496= | =rgba(8a9496ff)= |
+
+** Hyprlock (Lock Screen)
+
+Source: =dotfiles/hyprland/.config/themes/dupre/hyprlock.conf=
+
+| Element | Color | Format |
+|-------------------+-----------+-----------------|
+| Clock text | =#969385= | =rgb(969385)= |
+| Profile border | =#d7af5f= | =rgb(d7af5f)= |
+| Username | =#d7af5f= | =rgb(d7af5f)= |
+| Input outer/inner | =#151311= | =rgb(151311)= |
+| Input text | =#969385= | =rgb(969385)= |
+| Check (success) | =#d7af5f= | =rgb(d7af5f)= |
+| Fail | =#d47c59= | =rgb(d47c59)= |
+| Caps lock | =#ccc768= | =rgb(ccc768)= |
+
+** Waybar
+
+Source: =dotfiles/hyprland/.config/themes/dupre/waybar.css=
+
+| Element | Color | CSS |
+|----------------------+-----------+-------------------|
+| Bar background | =#151311= | =background-color= |
+| Bar border | =#d7af5f= | =border= |
+| Module text | =#969385= | =color= |
+| Clock text | =#f0fef0= | =color= |
+| Active workspace bg | =#d7af5f= | =background= |
+| Active workspace fg | =#151311= | =color= |
+| Inactive workspace | =#969385= | =color= |
+| Urgent workspace | =#d47c59= | 40% opacity |
+| Hover bg | =#474544= | =background-color= |
+| Volume muted | =#58574e= | =color= |
+| Battery warning | =#d7af5f= | =color= |
+| Battery critical | =#d47c59= | =color= |
+| Tray needs-attention | =#d7af5f= | =background-color= |
+
+** Foot Terminal
+
+Source: =dotfiles/hyprland/.config/themes/dupre/foot.ini=
+
+Uses the full 16-color terminal palette (see table above).
+
+| Element | Color |
+|------------+-----------|
+| Background | =#151311= |
+| Foreground | =#f0fef0= |
+| Cursor fg | =#151311= |
+| Cursor bg | =#d7af5f= |
+
+** Fuzzel (Application Launcher)
+
+Source: =dotfiles/hyprland/.config/themes/dupre/fuzzel.ini=
+
+Format: =RRGGBBAA= (no =#= prefix).
+
+| Element | Color |
+|----------------+---------------|
+| Background | =151311f0= |
+| Text | =f0fef0ff= |
+| Selection bg | =d7af5fff= |
+| Selection text | =151311ff= |
+| Border | =d7af5fff= |
+| Match | =d7af5fff= |
+| Prompt | =969385ff= |
+| Placeholder | =6c6a60ff= |
+| Input | =f0fef0ff= |
+
+** Dunst (Notifications)
+
+Source: =dotfiles/hyprland/.config/themes/dupre/dunstrc=
+
+| Element | Color |
+|--------------------+-------------|
+| Foreground | =#f0fef0= |
+| Frame | =#d7af5f= |
+| Highlight | =#d7af5f= |
+| Normal/low bg | =#151311f0= |
+| Critical bg | =#7c2a09f0= |
+| Critical frame | =#d47c59= |
+| Critical highlight | =#ff2a00= |
+
+** Xresources (X11 / Emacs / st / xterm)
+
+Source: =dotfiles/hyprland/.config/themes/dupre/Xresources=
+
+Uses C preprocessor =#define= macros for the 16-color palette, then applies via =theme_*= aliases to st and xterm resources. Emacs reads these via =xrdb=.
+
+** GTK and Qt
+
+| Setting | Value |
+|---------------------+--------------------|
+| GTK theme | Adwaita-dark |
+| Qt theme | Adwaita-Dark |
+| Qt method | adwaita-qt5/qt6, QT_STYLE_OVERRIDE |
+| Icon theme | Papirus-Dark |
+| Cursor theme | capitaine-cursors-light |
+| Cursor size | 24 |
+
+GTK and Qt use system dark themes rather than custom Dupre colors. This provides consistent widget styling from well-maintained themes while Dupre handles terminal, bar, and compositor colors.
+
+* Font
+
+| Setting | Value |
+|---------+----------------------------|
+| Family | BerkeleyMono Nerd Font |
+| Size | 13pt (terminal, launcher, notifications) |
+| Waybar | 14px (CSS pixels) |
+
+Point-based configs (foot, fuzzel, dunst, Xresources) use 13pt. Waybar CSS uses 14px. Hyprlock uses 64pt (clock) and 36pt (username) for lock screen readability.
+
+* Theme Infrastructure
+
+** Theme Directory
+
+=~/.config/themes/dupre/= contains per-application config files:
+
+| File | Application |
+|----------------+-------------------|
+| =foot.ini= | Foot terminal |
+| =fuzzel.ini= | Fuzzel launcher |
+| =waybar.css= | Waybar status bar |
+| =dunstrc= | Dunst notifications |
+| =hyprland.conf= | Hyprland borders |
+| =hyprlock.conf= | Hyprlock screen |
+| =Xresources= | X11 apps / Emacs |
+
+** Switching Themes
+
+=set-theme= (=~/.local/bin/set-theme=) copies theme configs into place, applies Hyprland/hy3 colors via =hyprctl=, merges Xresources, and reloads waybar and dunst.
+
+#+begin_src sh
+set-theme dupre # apply dupre
+set-theme --toggle # toggle between dupre and hudson
+set-theme --pick # fuzzel picker
+set-theme --current # print current theme name
+#+end_src
+
+Keybindings: =$mod+Y= toggles, =$mod+Shift+Y= opens picker.
+
+** Adding a New Theme
+
+1. Create =~/.config/themes/<name>/= with all seven config files
+2. Add a case block in =set-theme= for Hyprland/hy3 runtime colors
+3. The theme will appear automatically in =set-theme --list= and the fuzzel picker
+
+* Palette Image
+
+=assets/color-themes/dupre/dupre-palette.png= is a visual reference of the palette. Regenerate with:
+
+#+begin_src sh
+assets/color-themes/generate-palette.sh
+#+end_src
diff --git a/assets/color-themes/dupre/dupre-palette.png b/assets/color-themes/dupre/dupre-palette.png
new file mode 100644
index 0000000..0448508
--- /dev/null
+++ b/assets/color-themes/dupre/dupre-palette.png
Binary files differ
diff --git a/assets/color-themes/generate-palette.sh b/assets/color-themes/generate-palette.sh
new file mode 100755
index 0000000..456d1a4
--- /dev/null
+++ b/assets/color-themes/generate-palette.sh
@@ -0,0 +1,68 @@
+#!/bin/sh
+# Generate dupre-palette.png from color definitions using ImageMagick.
+# Output: assets/color-themes/dupre/dupre-palette.png
+
+set -e
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+OUTPUT="$SCRIPT_DIR/dupre/dupre-palette.png"
+
+SWATCH_W=140
+SWATCH_H=80
+LABEL_H=20
+GAP=16
+HEADING_X=20
+SWATCH_X0=120
+
+# Canvas
+CANVAS_W=760
+CANVAS_H=1120
+
+# We build an MVG (Magick Vector Graphics) draw string
+MVG=""
+
+# Title
+MVG="$MVG fill '#f0fef0' font-size 22 font 'Liberation-Sans-Bold' text 20,38 'Dupre Theme Color Palette' "
+
+Y=70
+
+draw_group() {
+ heading="$1"
+ shift
+
+ # Heading label (vertically centered with swatches)
+ head_y=$((Y + SWATCH_H / 2 + 6))
+ MVG="$MVG fill '#969385' font-size 16 font 'Liberation-Sans-Bold' text ${HEADING_X},${head_y} '${heading}' "
+
+ X=$SWATCH_X0
+ while [ $# -gt 0 ]; do
+ name="$1"; hex="$2"; shift 2
+
+ # Swatch
+ x2=$((X + SWATCH_W - 1))
+ y2=$((Y + SWATCH_H - 1))
+ MVG="$MVG fill '${hex}' roundrectangle ${X},${Y} ${x2},${y2} 8,8 "
+
+ # Label
+ label_y=$((Y + SWATCH_H + 14))
+ MVG="$MVG fill '#969385' font-size 13 font 'Liberation-Mono' text ${X},${label_y} '${name} : ${hex}' "
+
+ X=$((X + SWATCH_W + GAP))
+ done
+
+ Y=$((Y + SWATCH_H + LABEL_H + GAP))
+}
+
+draw_group "BG" bg "#151311" bg+2 "#474544"
+draw_group "FG" fg "#f0fef0" gray+2 "#d0cbc0"
+draw_group "Neutrals" black "#252321" muted "#58574e" steel "#969385"
+draw_group "Yellows" yellow "#d7af5f" yellow+1 "#ffd75f"
+draw_group "Reds" red "#d47c59" red+1 "#edb08f"
+draw_group "Greens" green "#a4ac64" green+1 "#ccc768"
+draw_group "Blues" blue "#67809c" blue+1 "#b2c3cc"
+draw_group "Cyans" cyan "#8a9496" cyan+1 "#acb0b3"
+draw_group "Magentas" magenta "#b294bb" magenta+1 "#c397d8"
+
+magick -size "${CANVAS_W}x${CANVAS_H}" "xc:#1a1a1a" -draw "$MVG" "$OUTPUT"
+
+echo "Generated: $OUTPUT"
diff --git a/assets/outbox/2025-11-08-keyring-fix-next-steps.org b/assets/outbox/2025-11-08-keyring-fix-next-steps.org
new file mode 100644
index 0000000..e478ac3
--- /dev/null
+++ b/assets/outbox/2025-11-08-keyring-fix-next-steps.org
@@ -0,0 +1,75 @@
+#+TITLE: GNOME Keyring Authentication Fix - Next Steps
+#+DATE: 2025-11-08
+#+AUTHOR: Craig Jennings & Claude
+
+* URGENT: Complete Keyring Fix on Next Login
+
+** What Was Done
+- ✅ Identified the problem: Apps (nm-applet, signal-desktop, protonmail-bridge, insync) need keyring access
+- ✅ Updated =/etc/pam.d/system-login= to unlock keyring on console login
+- ✅ Created backup: =/etc/pam.d/system-login.backup=
+
+** What Needs to Be Done
+
+The PAM fix only works if your keyring password matches your login password.
+
+*** Option 1: Delete Old Keyring (RECOMMENDED - Fresh Start)
+
+#+begin_src bash
+# Backup the old keyring
+mv ~/.local/share/keyrings/login.keyring ~/.local/share/keyrings/login.keyring.backup
+
+# On next login, a new keyring will be created automatically with your login password
+# The PAM integration will unlock it automatically
+#+end_src
+
+*Caveat:* You'll need to re-enter saved passwords:
+- WiFi passwords (nm-applet)
+- Signal encryption password
+- ProtonMail Bridge credentials
+- Insync cloud sync credentials
+
+*** Option 2: Change Keyring Password to Match Login Password
+
+#+begin_src bash
+# Install seahorse if needed
+sudo pacman -S seahorse
+
+# Launch seahorse GUI
+seahorse
+
+# Then: Right-click "Login" keyring → "Change Password"
+# Set it to your current login password
+#+end_src
+
+** Testing the Fix
+
+After choosing one option above:
+
+1. Logout completely (=logout= or Ctrl+D)
+2. Login at console (PAM will now unlock the keyring using your password)
+3. Type =startx=
+4. The "Authentication Required" dialog should NOT appear
+
+** Rollback Instructions (If Needed)
+
+If something goes wrong:
+
+#+begin_src bash
+# Restore original PAM configuration
+sudo cp /etc/pam.d/system-login.backup /etc/pam.d/system-login
+#+end_src
+
+** Files Modified
+
+- =/etc/pam.d/system-login= - Added pam_gnome_keyring.so integration
+- =/etc/pam.d/system-login.backup= - Original backup
+
+** PAM Changes Made
+
+Added two lines to =/etc/pam.d/system-login=:
+
+#+begin_example
+auth optional pam_gnome_keyring.so # Line 5 - unlock keyring with login password
+session optional pam_gnome_keyring.so auto_start # Line 14 - start daemon if needed
+#+end_example
diff --git a/assets/outbox/2025-11-08-test-failure-analysis.org b/assets/outbox/2025-11-08-test-failure-analysis.org
new file mode 100644
index 0000000..56453c3
--- /dev/null
+++ b/assets/outbox/2025-11-08-test-failure-analysis.org
@@ -0,0 +1,222 @@
+#+TITLE: Test Failure Analysis - VM Test Run 20251108-204202
+#+AUTHOR: Craig Jennings & Claude
+#+DATE: 2025-11-08
+
+* Test Overview
+
+Test ID: 20251108-204202
+Date: 2025-11-08 21:16:11
+VM: archsetup-test-20251108-204202
+Result: **FAILED** (archsetup exited 0 but validation failed)
+
+* Critical Findings
+
+** PRIMARY ROOT CAUSE: Disk Space Exhausted
+
+The 20GB VM disk ran out of space during package installation:
+
+#+begin_example
+error: Partition / too full: 90773 blocks needed, 9323 blocks free
+error: not enough free disk space
+error: failed to commit transaction (not enough free disk space)
+#+end_example
+
+This caused cascading failures of ~100+ packages after initial packages filled the disk.
+
+*Impact:* Most package installation failures
+*Severity:* CRITICAL
+*Resolution:* ✅ FIXED - Increased VM disk size to 50GB (was 20GB)
+
+** SECONDARY ROOT CAUSE: git.cjennings.net Server Unavailable
+
+DWM, dmenu, and st failed to build due to 504 Gateway Timeout errors:
+
+#+begin_example
+Cloning into '/home/cjennings/.local/src/dwm'...
+fatal: unable to access 'https://git.cjennings.net/dwm.git/': The requested URL returned error: 504
+ERROR: cloning source code for dwm failed with error code 0
+#+end_example
+
+*Impact:* DWM validation check failed (critical)
+*Severity:* HIGH
+*Resolution:* ✅ RESOLVED - git.cjennings.net is working (verified 2025-11-08, transient 504 errors)
+
+** VALIDATION FAILURE: DWM Not Found
+
+Test validation checks:
+- ✅ yay is installed
+- ❌ DWM not found at /usr/local/bin/dwm
+
+*Cause:* git.cjennings.net 504 errors prevented DWM build
+*Impact:* Test marked as FAILED
+
+* Error Summary
+
+Total errors: 134
+
+** Error Categories
+
+*** Git Repository Access (3 errors)
+- dwm clone/pull failed (504 error)
+- dmenu clone/pull failed (504 error)
+- st clone partially succeeded (permission warning)
+
+*** Package Installation Failures (~100+ errors)
+All caused by disk space exhaustion after initial packages installed.
+
+Examples:
+- emacs
+- code (VS Code)
+- virtualbox
+- Many AUR packages (obsidian, warpinator, etc.)
+- Standard packages (aspell, imagemagick, ffmpegthumbnailer, etc.)
+
+*** Configuration Failures (2 errors)
+- Dotfile restoration failed (error 128)
+- Boot menu regeneration failed
+- Blue light filter configuration failed
+
+*** Other Errors
+- prep to workaround tidal-dl issue failed
+
+* Timeline of Failure
+
+1. **20:44** - Dotfile restoration error (early warning sign)
+2. **20:46** - Boot menu regeneration failed
+3. **20:47-20:49** - git.cjennings.net 504 errors (DWM/dmenu/st)
+4. **20:56** - First package failures start (nitrogen)
+5. **21:03** - adwaita-color-schemes fails
+6. **21:11** - Major package failures begin (disk full):
+ - emacs
+ - code
+ - virtualbox
+ - exercism-bin
+ - And ~100+ more packages
+7. **21:16** - archsetup completes (exit 0)
+8. **21:16** - Validation fails (DWM not found)
+
+* Affected Components
+
+** Window Manager (Critical)
+- ❌ DWM - Not built (git server error)
+- ❌ dmenu - Not built (git server error)
+- ⚠️ st - Partially built? (permission warning)
+
+** Development Tools
+- ❌ emacs
+- ❌ code (VS Code)
+- ❌ virtualbox
+- ❌ exercism-bin
+- ❌ libvips
+- ❌ isync
+
+** Desktop Applications
+- ❌ obsidian
+- ❌ warpinator
+- ❌ valent
+- ❌ nitrogen (wallpaper setter)
+- ❌ foliate
+- ❌ mcomix
+- ❌ nsxiv
+
+** System Utilities
+- ❌ aspell / aspell-en
+- ❌ imagemagick
+- ❌ ffmpegthumbnailer
+- ❌ 7zip
+- ❌ fd
+- ❌ And many more...
+
+* Resolution Plan
+
+** Immediate Actions (Before Next Test)
+
+1. **✅ DONE - Increase VM Disk Size**
+ - ✅ Changed from 20GB → 50GB
+ - ✅ Updated create-base-vm.sh
+ - ✅ Updated lib/vm-utils.sh
+ - ✅ Updated scripts/testing/README.org
+ - ✅ Updated docs/testing-strategy.org
+ - ⏳ TODO: Re-create base VM
+
+2. **✅ DONE - Verify git.cjennings.net Access**
+ - ✅ Server is working (dwm cloned successfully)
+ - ✅ 504 errors were transient network issues
+
+3. **TODO - Re-run Test**
+ - Re-create base VM with 50GB disk: ./scripts/testing/create-base-vm.sh
+ - Run full test: ./scripts/testing/run-test.sh
+ - Expected: Much fewer errors, all critical components should build
+
+** Long-term Improvements
+
+1. **Disk Space Monitoring**
+ - Add disk usage checks during archsetup run
+ - Warn if disk space < 5GB free
+ - Fail fast if insufficient space detected early
+
+2. **Repository Fallbacks**
+ - Mirror critical repos to GitHub
+ - Auto-fallback if primary git server unavailable
+ - Document required repositories
+
+3. **Better Error Reporting**
+ - Distinguish "disk full" from "package doesn't exist"
+ - Report root cause clearly
+ - Group related failures
+
+4. **Test Scenarios**
+ - Add "minimum disk space" test
+ - Add "offline installation" test (local package cache)
+ - Add "repository unavailable" resilience test
+
+* Lessons Learned
+
+1. **20GB is insufficient** for full archsetup with all packages
+ - Base system: ~3-5GB
+ - Package downloads: ~5-10GB
+ - AUR builds: ~5-10GB (tmpfs in VM?)
+ - Installed packages: ~10-15GB
+ - **Total needed: 40-50GB minimum**
+ - **✅ FIXED: Increased to 50GB**
+
+2. **External dependencies are fragile**
+ - git.cjennings.net unavailability blocked critical components
+ - Need fallback mechanisms
+ - Consider hosting mirrors
+
+3. **Cascading failures mask root cause**
+ - Disk full caused 100+ package errors
+ - Easy to miss the root cause in noise
+ - Better error aggregation needed
+
+4. **Validation checks are essential**
+ - archsetup exited 0 (success) but system was broken
+ - Validation caught DWM failure
+ - Need more validation checks
+
+* Next Test Expectations
+
+After increasing disk to 50GB (git server was working, just transient 504s):
+
+** Expected Results (with 50GB disk)
+- ✅ archsetup exits with code 0
+- ✅ User 'cjennings' created
+- ✅ Dotfiles are stowed
+- ✅ yay is installed
+- ✅ DWM is built and installed
+- ✅ Most/all packages installed successfully
+- ✅ No disk space errors
+
+** Acceptable Failures
+- Some deprecated AUR packages may still fail
+- Some optional packages may have build issues
+- These should be < 10 errors, not 134
+
+* Files Referenced
+
+- Test report: [[file:../test-results/20251108-204202/test-report.txt]]
+- Test log: [[file:../test-results/20251108-204202/test.log]]
+- archsetup log: [[file:../test-results/20251108-204202/archsetup-2025-11-08-20-42-27.log]]
+- Base VM creation: [[file:../test-results/create-base-vm-20251108-182022.log]]
+- Auto-install script: [[file:../vm-images/auto-install.sh]]