diff options
| author | Craig Jennings <c@cjennings.net> | 2026-01-27 06:17:38 -0600 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-01-27 06:17:38 -0600 |
| commit | de0594dacfcacdd576537c2ce0a3a3c4a11b61b5 (patch) | |
| tree | 19671f15d1e49895d7d7880091a7f0c712ff9086 | |
| parent | aa89a46820f0a27df88a3717c987ac31cbb2f940 (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.org | 230 | ||||
| -rw-r--r-- | assets/color-themes/dupre/dupre-palette.png | bin | 0 -> 110678 bytes | |||
| -rwxr-xr-x | assets/color-themes/generate-palette.sh | 68 | ||||
| -rw-r--r-- | assets/outbox/2025-11-08-keyring-fix-next-steps.org | 75 | ||||
| -rw-r--r-- | assets/outbox/2025-11-08-test-failure-analysis.org | 222 |
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 Binary files differnew file mode 100644 index 0000000..0448508 --- /dev/null +++ b/assets/color-themes/dupre/dupre-palette.png 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]] |
