summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CLAUDE.md72
-rwxr-xr-xarchsetup48
-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/dwm.desktop11
-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
-rw-r--r--assets/outbox/2026-01-17-gvfs-smb-feature-request.txt (renamed from assets/2026-01-17-gvfs-smb-feature-request.txt)0
-rw-r--r--assets/outbox/2026-01-17-security-and-hardening-recommendations.txt (renamed from assets/security-and-hardening-recommendations.txt)0
-rw-r--r--assets/outbox/2026-01-17-zfs-sanoid-feature-request.txt (renamed from assets/2026-01-17-zfs-sanoid-feature-request.txt)0
-rw-r--r--assets/outbox/2026-01-19-remove-zfs-scripts-request.md (renamed from assets/2026-01-19-remove-zfs-scripts-request.md)0
-rw-r--r--assets/outbox/2026-01-20-console-display-issues.txt (renamed from assets/2026-01-20-console-display-issues.txt)0
-rw-r--r--assets/outbox/2026-01-21-grub-timeout-request.txt (renamed from assets/2026-01-21-grub-timeout-request.txt)0
-rw-r--r--assets/outbox/2026-01-21-syncthing-service-conflict.org (renamed from assets/2026-01-21-syncthing-service-conflict.org)0
-rw-r--r--assets/outbox/2026-01-23-avahi-mdns-fixes.org (renamed from assets/2026-01-23-avahi-mdns-fixes.org)0
-rw-r--r--assets/spec.org (renamed from spec.org)0
-rw-r--r--assets/wireguard-config/USCALA.conf (renamed from assets/wireguard/USCALA.conf)0
-rw-r--r--assets/wireguard-config/USCASF.conf (renamed from assets/wireguard/USCASF.conf)0
-rw-r--r--assets/wireguard-config/USDC.conf (renamed from assets/wireguard/USDC.conf)0
-rw-r--r--assets/wireguard-config/USGAAT.conf (renamed from assets/wireguard/USGAAT.conf)0
-rw-r--r--assets/wireguard-config/USNY.conf (renamed from assets/wireguard/USNY.conf)0
-rw-r--r--assets/wireguard-config/switzerlan-zurich1.conf (renamed from assets/wireguard/switzerlan-zurich1.conf)0
-rw-r--r--assets/wireguard-config/switzerlan-zurich2.conf (renamed from assets/wireguard/switzerlan-zurich2.conf)0
-rw-r--r--dotfiles/common/.Xresources87
-rw-r--r--dotfiles/common/.config/dunst/dunstrc26
-rw-r--r--dotfiles/common/.config/gtk-3.0/settings.ini4
-rw-r--r--dotfiles/dwm/.gnupg/gpg-agent.conf (renamed from dotfiles/common/.gnupg/gpg-agent.conf)0
-rw-r--r--dotfiles/dwm/.gnupg/pinentry-dmenu.conf (renamed from dotfiles/common/.gnupg/pinentry-dmenu.conf)0
-rw-r--r--dotfiles/dwm/.local/share/applications/dwm.desktop (renamed from dotfiles/common/.local/share/applications/dwm.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/emacsclient-mail.desktop (renamed from dotfiles/common/.local/share/applications/emacsclient-mail.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/file.desktop (renamed from dotfiles/common/.local/share/applications/file.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/img.desktop (renamed from dotfiles/common/.local/share/applications/img.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/lock-screen.desktop (renamed from dotfiles/common/.local/share/applications/lock-screen.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/logout.desktop (renamed from dotfiles/common/.local/share/applications/logout.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/mail.desktop (renamed from dotfiles/common/.local/share/applications/mail.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/pdf.desktop (renamed from dotfiles/common/.local/share/applications/pdf.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/reboot.desktop (renamed from dotfiles/common/.local/share/applications/reboot.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/shutdown.desktop (renamed from dotfiles/common/.local/share/applications/shutdown.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/suspend.desktop (renamed from dotfiles/common/.local/share/applications/suspend.desktop)0
-rw-r--r--dotfiles/dwm/.local/share/applications/text.desktop (renamed from dotfiles/common/.local/share/applications/text.desktop)0
-rw-r--r--dotfiles/hyprland/.config/foot/foot.ini44
-rw-r--r--dotfiles/hyprland/.config/fuzzel/fuzzel.ini4
-rw-r--r--dotfiles/hyprland/.config/gammastep/config.ini21
-rw-r--r--dotfiles/hyprland/.config/hypr/hyprland.conf16
-rw-r--r--dotfiles/hyprland/.config/hypr/hyprlock.conf22
-rw-r--r--dotfiles/hyprland/.config/themes/dupre/Xresources4
-rw-r--r--dotfiles/hyprland/.config/themes/dupre/waybar.css24
-rw-r--r--dotfiles/hyprland/.config/themes/hudson/Xresources4
-rw-r--r--dotfiles/hyprland/.config/themes/hudson/waybar.css24
-rw-r--r--dotfiles/hyprland/.config/waybar/config10
-rw-r--r--dotfiles/hyprland/.config/waybar/style.css59
-rwxr-xr-xdotfiles/hyprland/.local/bin/screenshot23
-rwxr-xr-xdotfiles/hyprland/.local/bin/waybar-disk7
-rwxr-xr-xdotfiles/hyprland/.local/bin/waybar-netspeed2
-rwxr-xr-xscripts/arch-distrobox (renamed from arch-distrobox)0
-rw-r--r--scripts/wipedisk (renamed from wipedisk)0
-rwxr-xr-xscripts/wireguard-proton.sh2
-rw-r--r--todo.org375
59 files changed, 1075 insertions, 409 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 846c26f..f0c3f2a 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -4,13 +4,29 @@
Arch Linux installation and configuration scripts with dotfiles managed via GNU Stow. Supports both X11 (DWM) and Wayland (Hyprland) setups.
## Project Structure
-- `archsetup` - Main installation script with functions for packages, configs, services
-- `dotfiles/common/` - Shared dotfiles for all desktop environments (stowed to ~)
-- `dotfiles/dwm/` - DWM/X11-specific dotfiles (8 scripts)
-- `dotfiles/hyprland/` - Hyprland-specific dotfiles (7 scripts)
-- `docs/` - Documentation and package lists
-- `reference-repos/` - External dotfile references
-- `Makefile` - GNU Stow operations for dotfile management
+```
+archsetup Main installation script
+archsetup.conf.example Configuration template
+init Bootstrap script for live ISO
+Makefile GNU Stow operations for dotfile management
+todo.org Active task list
+
+dotfiles/common/ Shared dotfiles for all desktop environments (stowed to ~)
+dotfiles/dwm/ DWM/X11-specific dotfiles
+dotfiles/hyprland/ Hyprland-specific dotfiles
+
+scripts/ Utility scripts (wireguard, post-install, wipedisk, etc.)
+assets/ Reference documents and archived files
+ color-themes/ Theme palettes, generation scripts
+ outbox/ Processed inbox items
+ wireguard-config/ Proton VPN configs
+docs/ Session docs, workflows, protocols (gitignored)
+inbox/ Unprocessed documents for session review
+reference-repos/ External dotfile references
+scripts/testing/ VM-based integration test framework
+test-results/ Test run output
+vm-images/ VM disk images for testing
+```
## Makefile Targets
```
@@ -24,23 +40,13 @@ make import dwm # fzf select → import to dwm/
make import hyprland # fzf select → import to hyprland/
```
-## Script Counts
+## Dotfile Script Counts
```
dotfiles/common/.local/bin/ → 33 universal scripts
dotfiles/dwm/.local/bin/ → 8 X11/DWM scripts
dotfiles/hyprland/.local/bin/ → 7 Hyprland scripts
```
-### DWM Scripts (8)
-Scripts bound in ~/code/dwm/config.def.h (on velox):
-- brightness (XF86 keys), toggle-touchpad (Mod+F9), dmenuexitmenu (Mod+Shift+Q)
-- Plus: airplanemodetoggle, colorpick, dmenuunicode, screenshotmenu, wallsearch
-
-### Hyprland Scripts (7)
-All actively used in configs:
-- cycle-layout, layout-navigate, pinentry-fuzzel, set-theme
-- toggle-scratchpad, waybar-layout, waybar-netspeed
-
## Shell Configuration
```
~/.profile → Environment variables only (POSIX compatible)
@@ -52,38 +58,28 @@ All actively used in configs:
~/.zshrc.d/ → Modular zsh configs (same + arch-downgrade)
```
-## Current Theme (Dupre)
+## Theme System
+Two themes available: dupre (default) and hudson. Switched via `set-theme` script.
+
+Full palette reference: `assets/color-themes/dupre/dupre-palette.org`
+
- **GTK**: Adwaita-dark
- **Qt**: Adwaita-Dark (via adwaita-qt5/qt6, QT_STYLE_OVERRIDE)
- **Icons**: Papirus-Dark
- **Cursors**: capitaine-cursors-light (size 24)
-- **Color palette**: bg #151311, gold #d7af5f, steel #969385, blue #67809c
+- **Font**: BerkeleyMono Nerd Font (13pt terminal, 14px waybar)
+- **Theme configs**: `dotfiles/hyprland/.config/themes/dupre/`
## Key Configuration Files
- `dotfiles/hyprland/.config/hypr/hyprland.conf` - Main Hyprland config
-- `dotfiles/hyprland/.config/themes/dupre/` - Dupre theme files
+- `dotfiles/hyprland/.config/themes/dupre/` - Dupre theme files (foot, fuzzel, waybar, dunst, hyprlock, Xresources)
- `dotfiles/common/.profile.d/` - Shell environment scripts
- `dotfiles/common/.config/qt5ct/qt5ct.conf` - Qt5 theming
- `dotfiles/common/.config/qt6ct/qt6ct.conf` - Qt6 theming
-## Pending Work
-- Task #4: Evaluate Euphonica MPD client (May 2026)
-
-## Recent Changes (Jan 2026)
-- Added Makefile for GNU Stow operations (stow, restow, reset, unstow, import)
-- Renamed dotfiles/system/ to dotfiles/common/ for clarity
-- Cleaned up scripts: common 44→33, dwm 50→8, hyprland 8→7
-- Deleted unused configs: ghostty, lf, mopidy, nitrogen, pychess, JetBrains, youtube-dl, sublime-merge
-- Added yt-dlp config and org-protocol-setup script
-- Fixed yt-dlp aliases: --add-metadata → --embed-metadata
-- Refactored shell configs: proper .profile/.bashrc/.zshrc separation
-- Created .bashrc.d/ and .zshrc.d/ for modular configs
-- Added Qt theming with adwaita-qt5/qt6
-- Pruned ~90 desktop files from app menu with NoDisplay=true overrides
-
## Notes
- Desktop file overrides go in `dotfiles/hyprland/.local/share/applications/`
- MPD is configured but mpv handles audio file associations
-- BerkeleyMono Nerd Font is the primary monospace font
- DWM keybindings defined in ~/code/dwm/config.def.h on velox
-- audacious config kept in common/ for potential future use
+- Remote repository on cjennings.net
+- docs/ is gitignored; living project context is in docs/NOTES.org
diff --git a/archsetup b/archsetup
index faffda2..0779d2b 100755
--- a/archsetup
+++ b/archsetup
@@ -493,14 +493,6 @@ is_btrfs_root() {
[ "$(findmnt -n -o FSTYPE /)" = "btrfs" ]
}
-# CPU Detection
-is_amd_zen5() {
- # Returns 0 (true) if CPU is AMD Zen 5 (family 26/0x1a)
- # Used to detect CPUs affected by RDSEED32 bug (CVE-2025-62626)
- grep -q "AuthenticAMD" /proc/cpuinfo && \
- grep -E "^cpu family" /proc/cpuinfo | head -1 | grep -q ": 26$"
-}
-
# Encryption Detection
is_encrypted_root() {
# Returns 0 (true) if root filesystem is on an encrypted volume
@@ -1089,6 +1081,24 @@ EOF
action="enabling geoclue geolocation service" && display "task" "$action"
systemctl enable geoclue.service >> "$logfile" 2>&1 || error_warn "$action" "$?"
+ # Enable BeaconDB as geoclue wifi location provider (default MLS/Ichnaea API is defunct)
+ action="configuring geoclue to use BeaconDB location service" && display "task" "$action"
+ if grep -q '^#url=https://api.beacondb.net/v1/geolocate' /etc/geoclue/geoclue.conf 2>/dev/null; then
+ sed -i 's|^#url=https://api.beacondb.net/v1/geolocate|url=https://api.beacondb.net/v1/geolocate|' /etc/geoclue/geoclue.conf
+ fi
+
+ # Whitelist gammastep in geoclue config (geoclue demo agent is started via hyprland.conf exec-once)
+ action="whitelisting gammastep in geoclue" && display "task" "$action"
+ if ! grep -q "^\[gammastep\]" /etc/geoclue/geoclue.conf 2>/dev/null; then
+ cat >> /etc/geoclue/geoclue.conf << 'EOF'
+
+[gammastep]
+allowed=true
+system=false
+users=
+EOF
+ fi
+
# Fix dbus-broker race condition with sysusers (geoclue user must exist before dbus parses service files)
action="configuring dbus-broker to wait for sysusers" && display "task" "$action"
mkdir -p /etc/systemd/system/dbus-broker.service.d
@@ -1602,7 +1612,7 @@ desktop_environment() {
pacman_install "$software"
done
- for software in vimix-cursors \
+ for software in bibata-cursor-theme-bin \
papirus-icon-theme qt6ct qt5ct; do
aur_install "$software"
done
@@ -1951,26 +1961,6 @@ EOF
sed -i "s/.*GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"rw loglevel=2 rd.systemd.show_status=auto rd.udev.log_level=2 nvme.noacpi=1 mem_sleep_default=deep nowatchdog random.trust_cpu=off quiet splash\"/g" /etc/default/grub
fi
- # Hardware-specific workarounds
- display "subtitle" "Hardware Workarounds"
-
- # AMD Zen 5 RDSEED32 bug (CVE-2025-62626)
- # Zen 5 CPUs have a broken RDSEED instruction that causes kernel warnings at boot.
- # Adding clearcpuid=rdseed disables the instruction via CPUID masking, suppressing
- # the "RDSEED32 is broken. Disabling the corresponding CPUID bit." message.
- # This is cosmetic - the kernel already disables RDSEED when it detects the bug.
- if is_amd_zen5; then
- action="applying AMD Zen 5 RDSEED32 workaround (CVE-2025-62626)" && display "task" "$action"
- if [ -f /etc/default/grub ]; then
- # Add clearcpuid=rdseed if not already present
- if ! grep -q "clearcpuid=rdseed" /etc/default/grub; then
- sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 clearcpuid=rdseed"/' /etc/default/grub
- fi
- fi
- else
- display "task" "no hardware workarounds needed"
- fi
-
# Regenerate GRUB config after all modifications
if [ -f /etc/default/grub ]; then
action="generating grub configuration" && display "task" "$action"
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/dwm.desktop b/assets/dwm.desktop
deleted file mode 100644
index 16ba7b9..0000000
--- a/assets/dwm.desktop
+++ /dev/null
@@ -1,11 +0,0 @@
-[Desktop Entry]
-Name=DWM
-Comment=It's DWM, asshole
-Terminal=false
-Exec=/usr/local/bin/startdwm
-TryExec=/usr/local/bin/startdwm
-Icon=dwm
-Type=Application
-
-[X-Window Manager]
-SessionManaged=True \ No newline at end of file
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]]
diff --git a/assets/2026-01-17-gvfs-smb-feature-request.txt b/assets/outbox/2026-01-17-gvfs-smb-feature-request.txt
index 79892f7..79892f7 100644
--- a/assets/2026-01-17-gvfs-smb-feature-request.txt
+++ b/assets/outbox/2026-01-17-gvfs-smb-feature-request.txt
diff --git a/assets/security-and-hardening-recommendations.txt b/assets/outbox/2026-01-17-security-and-hardening-recommendations.txt
index 22a0c53..22a0c53 100644
--- a/assets/security-and-hardening-recommendations.txt
+++ b/assets/outbox/2026-01-17-security-and-hardening-recommendations.txt
diff --git a/assets/2026-01-17-zfs-sanoid-feature-request.txt b/assets/outbox/2026-01-17-zfs-sanoid-feature-request.txt
index 87207f2..87207f2 100644
--- a/assets/2026-01-17-zfs-sanoid-feature-request.txt
+++ b/assets/outbox/2026-01-17-zfs-sanoid-feature-request.txt
diff --git a/assets/2026-01-19-remove-zfs-scripts-request.md b/assets/outbox/2026-01-19-remove-zfs-scripts-request.md
index f67aa47..f67aa47 100644
--- a/assets/2026-01-19-remove-zfs-scripts-request.md
+++ b/assets/outbox/2026-01-19-remove-zfs-scripts-request.md
diff --git a/assets/2026-01-20-console-display-issues.txt b/assets/outbox/2026-01-20-console-display-issues.txt
index f8dc710..f8dc710 100644
--- a/assets/2026-01-20-console-display-issues.txt
+++ b/assets/outbox/2026-01-20-console-display-issues.txt
diff --git a/assets/2026-01-21-grub-timeout-request.txt b/assets/outbox/2026-01-21-grub-timeout-request.txt
index fa03f62..fa03f62 100644
--- a/assets/2026-01-21-grub-timeout-request.txt
+++ b/assets/outbox/2026-01-21-grub-timeout-request.txt
diff --git a/assets/2026-01-21-syncthing-service-conflict.org b/assets/outbox/2026-01-21-syncthing-service-conflict.org
index 7f86b39..7f86b39 100644
--- a/assets/2026-01-21-syncthing-service-conflict.org
+++ b/assets/outbox/2026-01-21-syncthing-service-conflict.org
diff --git a/assets/2026-01-23-avahi-mdns-fixes.org b/assets/outbox/2026-01-23-avahi-mdns-fixes.org
index 89b005e..89b005e 100644
--- a/assets/2026-01-23-avahi-mdns-fixes.org
+++ b/assets/outbox/2026-01-23-avahi-mdns-fixes.org
diff --git a/spec.org b/assets/spec.org
index 9cbaf11..9cbaf11 100644
--- a/spec.org
+++ b/assets/spec.org
diff --git a/assets/wireguard/USCALA.conf b/assets/wireguard-config/USCALA.conf
index 7d902d4..7d902d4 100644
--- a/assets/wireguard/USCALA.conf
+++ b/assets/wireguard-config/USCALA.conf
diff --git a/assets/wireguard/USCASF.conf b/assets/wireguard-config/USCASF.conf
index 7948ae4..7948ae4 100644
--- a/assets/wireguard/USCASF.conf
+++ b/assets/wireguard-config/USCASF.conf
diff --git a/assets/wireguard/USDC.conf b/assets/wireguard-config/USDC.conf
index 62ede76..62ede76 100644
--- a/assets/wireguard/USDC.conf
+++ b/assets/wireguard-config/USDC.conf
diff --git a/assets/wireguard/USGAAT.conf b/assets/wireguard-config/USGAAT.conf
index b4cfc7d..b4cfc7d 100644
--- a/assets/wireguard/USGAAT.conf
+++ b/assets/wireguard-config/USGAAT.conf
diff --git a/assets/wireguard/USNY.conf b/assets/wireguard-config/USNY.conf
index ddf43a6..ddf43a6 100644
--- a/assets/wireguard/USNY.conf
+++ b/assets/wireguard-config/USNY.conf
diff --git a/assets/wireguard/switzerlan-zurich1.conf b/assets/wireguard-config/switzerlan-zurich1.conf
index 4d7908e..4d7908e 100644
--- a/assets/wireguard/switzerlan-zurich1.conf
+++ b/assets/wireguard-config/switzerlan-zurich1.conf
diff --git a/assets/wireguard/switzerlan-zurich2.conf b/assets/wireguard-config/switzerlan-zurich2.conf
index c2d390f..c2d390f 100644
--- a/assets/wireguard/switzerlan-zurich2.conf
+++ b/assets/wireguard-config/switzerlan-zurich2.conf
diff --git a/dotfiles/common/.Xresources b/dotfiles/common/.Xresources
index d149a72..96e4803 100644
--- a/dotfiles/common/.Xresources
+++ b/dotfiles/common/.Xresources
@@ -1,68 +1,69 @@
-!! X Resources - Dupre theme
-!! Warm, earthy colors from dupre-theme.el
+!! X Resources - Hudson theme
+!! Tomorrow Night + Goldenrod accent
!! For X11 applications (st, xterm, etc.) and Emacs
!! X Font Settings
Xft.dpi: 109
-Xcursor.size: 32
-Xcursor.theme: Vimix-white-cursors
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintfull
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb
+Xcursor.size: 32
+Xcursor.theme: Vimix-white-cursors
!! Emacs
Emacs*toolBar: 0
!! ============================================================================
-!! Dupre Theme Colors
+!! Hudson Theme Colors (Tomorrow Night + Goldenrod)
!! ============================================================================
-#define dupre_fg #f0fef0
-#define dupre_bg #151311
-#define dupre_black #252321
-#define dupre_red #d47c59
-#define dupre_green #a4ac64
-#define dupre_yellow #d7af5f
-#define dupre_blue #67809c
-#define dupre_magenta #b294bb
-#define dupre_cyan #8a9496
-#define dupre_white #d0cbc0
-#define dupre_br_black #474544
-#define dupre_br_red #edb08f
-#define dupre_br_green #ccc768
-#define dupre_br_yellow #ffd75f
-#define dupre_br_blue #b2c3cc
-#define dupre_br_magenta #c397d8
-#define dupre_br_cyan #acb0b3
-#define dupre_br_white #f0fef0
+#define hudson_fg #eeeeee
+#define hudson_bg #222222
+#define hudson_black #222222
+#define hudson_red #cc6666
+#define hudson_green #b5bd68
+#define hudson_yellow #f0c674
+#define hudson_blue #81a2be
+#define hudson_magenta #b294bb
+#define hudson_cyan #8abeb7
+#define hudson_white #c5c8c6
+#define hudson_br_black #444444
+#define hudson_br_red #d54e53
+#define hudson_br_green #b9ca4a
+#define hudson_br_yellow #e0b040
+#define hudson_br_blue #7aa6da
+#define hudson_br_magenta #c397d8
+#define hudson_br_cyan #70c0b1
+#define hudson_br_white #eeeeee
!! Active theme aliases
-#define theme_fg dupre_fg
-#define theme_bg dupre_bg
-#define theme_black dupre_black
-#define theme_red dupre_red
-#define theme_green dupre_green
-#define theme_yellow dupre_yellow
-#define theme_blue dupre_blue
-#define theme_magenta dupre_magenta
-#define theme_cyan dupre_cyan
-#define theme_white dupre_white
-#define theme_br_black dupre_br_black
-#define theme_br_red dupre_br_red
-#define theme_br_green dupre_br_green
-#define theme_br_yellow dupre_br_yellow
-#define theme_br_blue dupre_br_blue
-#define theme_br_magenta dupre_br_magenta
-#define theme_br_cyan dupre_br_cyan
-#define theme_br_white dupre_br_white
+#define theme_fg hudson_fg
+#define theme_bg hudson_bg
+#define theme_black hudson_black
+#define theme_red hudson_red
+#define theme_green hudson_green
+#define theme_yellow hudson_yellow
+#define theme_blue hudson_blue
+#define theme_magenta hudson_magenta
+#define theme_cyan hudson_cyan
+#define theme_white hudson_white
+#define theme_br_black hudson_br_black
+#define theme_br_red hudson_br_red
+#define theme_br_green hudson_br_green
+#define theme_br_yellow hudson_br_yellow
+#define theme_br_blue hudson_br_blue
+#define theme_br_magenta hudson_br_magenta
+#define theme_br_cyan hudson_br_cyan
+#define theme_br_white hudson_br_white
!! ============================================================================
!! ST (suckless terminal) settings
-st.font: BerkeleyMono Nerd Font:size=12
+!! size is in points (fontconfig syntax)
+st.font: BerkeleyMono Nerd Font:size=13
st.background: theme_bg
st.foreground: theme_fg
st.color0: theme_black
@@ -83,7 +84,7 @@ st.color14: theme_br_cyan
st.color15: theme_br_white
!! XTerm settings
-XTerm*faceName: BerkeleyMono Nerd Font:size=12
+XTerm*faceName: BerkeleyMono Nerd Font:size=13
XTerm*selectToClipboard: true
XTerm*background: theme_bg
XTerm*foreground: theme_fg
diff --git a/dotfiles/common/.config/dunst/dunstrc b/dotfiles/common/.config/dunst/dunstrc
index 104df28..2cbf0e6 100644
--- a/dotfiles/common/.config/dunst/dunstrc
+++ b/dotfiles/common/.config/dunst/dunstrc
@@ -1,5 +1,5 @@
-# Dunst config - Dupre theme
-# Warm, earthy colors from dupre-theme.el
+# Dunst config - Hudson theme
+# Tomorrow Night + Goldenrod accent
[global]
# Display
@@ -21,13 +21,13 @@ corner_radius = 10
progress_bar_frame_width = 0
progress_bar_corner_radius = 3
-# Colors - Dupre theme
-foreground = "#f0fef0"
-frame_color = "#d7af5f"
-highlight = "#d7af5f, #ccc768"
+# Colors - Hudson theme
+foreground = "#eeeeee"
+frame_color = "#daa520"
+highlight = "#daa520, #f0c674"
-# Text
-font = BerkeleyMono Nerd Font 11
+# Text (size in points, Pango syntax)
+font = BerkeleyMono Nerd Font 13
markup = full
format = "<small>%a</small>\n<b>%s</b>\n%b"
alignment = left
@@ -50,18 +50,18 @@ mouse_middle_click = do_action, close_current
mouse_right_click = close_all
[urgency_low]
-background = "#151311f0"
+background = "#222222f0"
timeout = 3
[urgency_normal]
-background = "#151311f0"
+background = "#222222f0"
timeout = 8
[urgency_critical]
-background = "#7c2a09f0"
-frame_color = "#d47c59"
+background = "#cc6666f0"
+frame_color = "#d54e53"
highlight = "#ff2a00"
-foreground = "#f0fef0"
+foreground = "#eeeeee"
timeout = 0
[fullscreen_delay_everything]
diff --git a/dotfiles/common/.config/gtk-3.0/settings.ini b/dotfiles/common/.config/gtk-3.0/settings.ini
index 2023ae6..5b2ba74 100644
--- a/dotfiles/common/.config/gtk-3.0/settings.ini
+++ b/dotfiles/common/.config/gtk-3.0/settings.ini
@@ -3,8 +3,8 @@ gtk-print-backends=file,cups,pdf
gtk-theme-name=Adwaita-dark
gtk-icon-theme-name=Papirus-Dark
gtk-font-name=Cantarell 11
-gtk-cursor-theme-name=Vimix-white-cursors
-gtk-cursor-theme-size=0
+gtk-cursor-theme-name=Bibata-Modern-Ice
+gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_BOTH
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=1
diff --git a/dotfiles/common/.gnupg/gpg-agent.conf b/dotfiles/dwm/.gnupg/gpg-agent.conf
index 6448665..6448665 100644
--- a/dotfiles/common/.gnupg/gpg-agent.conf
+++ b/dotfiles/dwm/.gnupg/gpg-agent.conf
diff --git a/dotfiles/common/.gnupg/pinentry-dmenu.conf b/dotfiles/dwm/.gnupg/pinentry-dmenu.conf
index ccd4d55..ccd4d55 100644
--- a/dotfiles/common/.gnupg/pinentry-dmenu.conf
+++ b/dotfiles/dwm/.gnupg/pinentry-dmenu.conf
diff --git a/dotfiles/common/.local/share/applications/dwm.desktop b/dotfiles/dwm/.local/share/applications/dwm.desktop
index ba3bd00..ba3bd00 100644
--- a/dotfiles/common/.local/share/applications/dwm.desktop
+++ b/dotfiles/dwm/.local/share/applications/dwm.desktop
diff --git a/dotfiles/common/.local/share/applications/emacsclient-mail.desktop b/dotfiles/dwm/.local/share/applications/emacsclient-mail.desktop
index 6efcf61..6efcf61 100644
--- a/dotfiles/common/.local/share/applications/emacsclient-mail.desktop
+++ b/dotfiles/dwm/.local/share/applications/emacsclient-mail.desktop
diff --git a/dotfiles/common/.local/share/applications/file.desktop b/dotfiles/dwm/.local/share/applications/file.desktop
index 5df1633..5df1633 100644
--- a/dotfiles/common/.local/share/applications/file.desktop
+++ b/dotfiles/dwm/.local/share/applications/file.desktop
diff --git a/dotfiles/common/.local/share/applications/img.desktop b/dotfiles/dwm/.local/share/applications/img.desktop
index 42aa81e..42aa81e 100644
--- a/dotfiles/common/.local/share/applications/img.desktop
+++ b/dotfiles/dwm/.local/share/applications/img.desktop
diff --git a/dotfiles/common/.local/share/applications/lock-screen.desktop b/dotfiles/dwm/.local/share/applications/lock-screen.desktop
index 2bd7afa..2bd7afa 100644
--- a/dotfiles/common/.local/share/applications/lock-screen.desktop
+++ b/dotfiles/dwm/.local/share/applications/lock-screen.desktop
diff --git a/dotfiles/common/.local/share/applications/logout.desktop b/dotfiles/dwm/.local/share/applications/logout.desktop
index 8c3bc3a..8c3bc3a 100644
--- a/dotfiles/common/.local/share/applications/logout.desktop
+++ b/dotfiles/dwm/.local/share/applications/logout.desktop
diff --git a/dotfiles/common/.local/share/applications/mail.desktop b/dotfiles/dwm/.local/share/applications/mail.desktop
index d24aea2..d24aea2 100644
--- a/dotfiles/common/.local/share/applications/mail.desktop
+++ b/dotfiles/dwm/.local/share/applications/mail.desktop
diff --git a/dotfiles/common/.local/share/applications/pdf.desktop b/dotfiles/dwm/.local/share/applications/pdf.desktop
index 8c38677..8c38677 100644
--- a/dotfiles/common/.local/share/applications/pdf.desktop
+++ b/dotfiles/dwm/.local/share/applications/pdf.desktop
diff --git a/dotfiles/common/.local/share/applications/reboot.desktop b/dotfiles/dwm/.local/share/applications/reboot.desktop
index ae2c76e..ae2c76e 100644
--- a/dotfiles/common/.local/share/applications/reboot.desktop
+++ b/dotfiles/dwm/.local/share/applications/reboot.desktop
diff --git a/dotfiles/common/.local/share/applications/shutdown.desktop b/dotfiles/dwm/.local/share/applications/shutdown.desktop
index 2d93aa0..2d93aa0 100644
--- a/dotfiles/common/.local/share/applications/shutdown.desktop
+++ b/dotfiles/dwm/.local/share/applications/shutdown.desktop
diff --git a/dotfiles/common/.local/share/applications/suspend.desktop b/dotfiles/dwm/.local/share/applications/suspend.desktop
index ab8addf..ab8addf 100644
--- a/dotfiles/common/.local/share/applications/suspend.desktop
+++ b/dotfiles/dwm/.local/share/applications/suspend.desktop
diff --git a/dotfiles/common/.local/share/applications/text.desktop b/dotfiles/dwm/.local/share/applications/text.desktop
index 41ee05f..41ee05f 100644
--- a/dotfiles/common/.local/share/applications/text.desktop
+++ b/dotfiles/dwm/.local/share/applications/text.desktop
diff --git a/dotfiles/hyprland/.config/foot/foot.ini b/dotfiles/hyprland/.config/foot/foot.ini
index 8fe19b3..4e9681c 100644
--- a/dotfiles/hyprland/.config/foot/foot.ini
+++ b/dotfiles/hyprland/.config/foot/foot.ini
@@ -1,5 +1,5 @@
-# foot terminal configuration - Dupre theme
-# Warm, earthy colors from dupre-theme.el
+# foot terminal configuration - Hudson theme
+# Tomorrow Night + Goldenrod accent
[main]
term=xterm-256color
@@ -10,29 +10,29 @@ pad=8x8
lines=10000
[colors]
-# Dupre theme colors (from Emacs dupre-theme.el)
-background=151311
-foreground=f0fef0
+# Hudson theme - Tomorrow Night + Goldenrod accent
+background=222222
+foreground=eeeeee
-# Regular colors (0-7) - dupre palette
-regular0=252321 # black (dupre-bg+1)
-regular1=d47c59 # red (dupre-red)
-regular2=a4ac64 # green (dupre-green)
-regular3=d7af5f # yellow (dupre-yellow)
-regular4=67809c # blue (dupre-blue)
+# Regular colors (0-7)
+regular0=222222 # black
+regular1=cc6666 # red
+regular2=b5bd68 # green
+regular3=f0c674 # yellow
+regular4=81a2be # blue
regular5=b294bb # magenta
-regular6=8a9496 # cyan (dupre-steel)
-regular7=d0cbc0 # white (dupre-gray+2)
+regular6=8abeb7 # cyan
+regular7=c5c8c6 # white
# Bright colors (8-15)
-bright0=474544 # bright black (dupre-bg+2)
-bright1=edb08f # bright red (dupre-red+1)
-bright2=ccc768 # bright green (dupre-green+1)
-bright3=ffd75f # bright yellow (dupre-yellow+1)
-bright4=b2c3cc # bright blue (dupre-blue+1)
+bright0=444444 # bright black
+bright1=d54e53 # bright red
+bright2=b9ca4a # bright green
+bright3=e0b040 # bright yellow (adjusted for gold)
+bright4=7aa6da # bright blue
bright5=c397d8 # bright magenta
-bright6=acb0b3 # bright cyan (dupre-steel+1)
-bright7=f0fef0 # bright white (dupre-fg)
+bright6=70c0b1 # bright cyan
+bright7=eeeeee # bright white
-# Cursor: muted gold on dark
-cursor=151311 d7af5f
+# Cursor: goldenrod on dark
+cursor=222222 daa520
diff --git a/dotfiles/hyprland/.config/fuzzel/fuzzel.ini b/dotfiles/hyprland/.config/fuzzel/fuzzel.ini
index 0efda0d..39dabc0 100644
--- a/dotfiles/hyprland/.config/fuzzel/fuzzel.ini
+++ b/dotfiles/hyprland/.config/fuzzel/fuzzel.ini
@@ -1,5 +1,5 @@
-# Fuzzel config - matching waybar DWM-inspired theme
-# Colors from waybar: bg=#222222, cpu=#bbbbbb, clock=#eeeeee, accent=#daa520
+# Fuzzel config - Hudson theme
+# Tomorrow Night + Goldenrod accent
[main]
# size is in points (fontconfig syntax)
diff --git a/dotfiles/hyprland/.config/gammastep/config.ini b/dotfiles/hyprland/.config/gammastep/config.ini
index f50a701..bbb15ee 100644
--- a/dotfiles/hyprland/.config/gammastep/config.ini
+++ b/dotfiles/hyprland/.config/gammastep/config.ini
@@ -1,25 +1,8 @@
-[gammastep]
-; Color temperature in Kelvin (same as redshift)
+[general]
temp-day=6500
temp-night=4500
-
-; Brightness (1.0 = full, 0.8 = 20% dimmed)
brightness-day=1.0
brightness-night=1.0
-
-; Gamma correction
gamma=1.0
-
-; Fade between day/night
fade=1
-
-; Wayland adjustment method (not randr)
-adjustment-method=wayland
-
-; Location for sunrise/sunset calculation
-location-provider=manual
-
-[manual]
-; New Orleans, LA
-lat=29.951065
-lon=-90.071533
+location-provider=geoclue2
diff --git a/dotfiles/hyprland/.config/hypr/hyprland.conf b/dotfiles/hyprland/.config/hypr/hyprland.conf
index 390d905..a279ced 100644
--- a/dotfiles/hyprland/.config/hypr/hyprland.conf
+++ b/dotfiles/hyprland/.config/hypr/hyprland.conf
@@ -10,12 +10,13 @@ monitor=,preferred,auto,auto
# ============================================================================
# Startup Applications
# ============================================================================
-exec-once = hyprpm reload
+exec-once = hyprpm reload && sleep 1 && hyprctl dismissnotify -1
exec-once = waybar
exec-once = swww-daemon && sleep 1 && swww img ~/pictures/wallpaper/trondheim-norway.jpg
exec-once = dunst
exec-once = hypridle
-exec-once = gammastep-indicator
+exec-once = /usr/lib/geoclue-2.0/demos/agent
+exec-once = gammastep
exec-once = blueman-applet
exec-once = /usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
@@ -28,7 +29,7 @@ exec-once = insync start
# Environment Variables
# ============================================================================
env = XCURSOR_SIZE,24
-env = XCURSOR_THEME,capitaine-cursors-light
+env = XCURSOR_THEME,Bibata-Modern-Ice
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
@@ -73,7 +74,7 @@ animations {
# Layout (master-stack like DWM tile)
# ============================================================================
master {
- new_status = slave
+ new_status = master
mfact = 0.55
}
@@ -100,6 +101,7 @@ input {
misc {
force_default_wallpaper = 0
disable_hyprland_logo = true
+ focus_on_activate = true
}
# ============================================================================
@@ -294,9 +296,9 @@ bind = CTRL ALT, SPACE, exec, amixer set Capture toggle && amixer get Capture |
# Bluetooth (from DWM and sxhkdrc)
bind = $mod SHIFT, B, exec, blueman-manager
-# Screenshots (grim + slurp + satty for annotation)
-bind = $mod, S, exec, grim -g "$(slurp)" - | satty --filename - --output-filename ~/pictures/screenshots/$(date +%Y.%m.%d-%H%M%S).png
-bind = , Print, exec, grim - | satty --filename - --output-filename ~/pictures/screenshots/$(date +%Y.%m.%d-%H%M%S).png
+# Screenshots (grim + slurp + fuzzel menu)
+bind = $mod, S, exec, screenshot region
+bind = $mod, Print, exec, screenshot fullscreen
# Lock screen (from sxhkdrc: super+Escape)
bind = $mod, ESCAPE, exec, hyprlock
diff --git a/dotfiles/hyprland/.config/hypr/hyprlock.conf b/dotfiles/hyprland/.config/hypr/hyprlock.conf
index fd85651..f9c08bb 100644
--- a/dotfiles/hyprland/.config/hypr/hyprlock.conf
+++ b/dotfiles/hyprland/.config/hypr/hyprlock.conf
@@ -1,5 +1,5 @@
-# Hyprlock configuration - Dupre theme
-# Warm, earthy colors from dupre-theme.el
+# Hyprlock configuration - Hudson theme
+# Tomorrow Night + Goldenrod accent
general {
disable_loading_bar = false
@@ -25,7 +25,7 @@ label {
monitor =
text = $TIME12
text_align = center
- color = rgb(969385)
+ color = rgb(bbbbbb)
font_size = 64
font_family = BerkeleyMono Nerd Font
position = 0, 15%
@@ -40,7 +40,7 @@ image {
size = 120
rounding = -1
border_size = 3
- border_color = rgb(d7af5f)
+ border_color = rgb(daa520)
position = 0, 0%
halign = center
valign = center
@@ -54,7 +54,7 @@ label {
monitor =
text = $USER
text_align = center
- color = rgb(d7af5f)
+ color = rgb(daa520)
font_size = 36
font_family = BerkeleyMono Nerd Font
position = 0, -7%
@@ -71,19 +71,19 @@ input-field {
dots_spacing = 0.15
dots_center = true
dots_rounding = -1
- outer_color = rgb(151311)
- inner_color = rgb(151311)
- font_color = rgb(969385)
+ outer_color = rgb(222222)
+ inner_color = rgb(222222)
+ font_color = rgb(bbbbbb)
fade_on_empty = true
fade_timeout = 1000
placeholder_text = <i>Password...</i>
hide_input = false
rounding = 8
- check_color = rgb(d7af5f)
- fail_color = rgb(d47c59)
+ check_color = rgb(daa520)
+ fail_color = rgb(d54e53)
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
fail_transition = 300
- capslock_color = rgb(ccc768)
+ capslock_color = rgb(e0b040)
numlock_color = -1
bothlock_color = -1
invert_numlock = false
diff --git a/dotfiles/hyprland/.config/themes/dupre/Xresources b/dotfiles/hyprland/.config/themes/dupre/Xresources
index be8f7f4..1646b87 100644
--- a/dotfiles/hyprland/.config/themes/dupre/Xresources
+++ b/dotfiles/hyprland/.config/themes/dupre/Xresources
@@ -4,8 +4,8 @@
!! X Font Settings
Xft.dpi: 109
-Xcursor.size: 32
-Xcursor.theme: Vimix-white-cursors
+Xcursor.size: 24
+Xcursor.theme: Bibata-Modern-Ice
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintfull
diff --git a/dotfiles/hyprland/.config/themes/dupre/waybar.css b/dotfiles/hyprland/.config/themes/dupre/waybar.css
index e83f851..18ba0f1 100644
--- a/dotfiles/hyprland/.config/themes/dupre/waybar.css
+++ b/dotfiles/hyprland/.config/themes/dupre/waybar.css
@@ -49,7 +49,7 @@ window#waybar {
#cpu,
#temperature,
#memory,
-#disk,
+#custom-disk,
#custom-netspeed,
#battery,
#wireplumber,
@@ -73,7 +73,7 @@ window#waybar {
#cpu:hover,
#temperature:hover,
#memory:hover,
-#disk:hover,
+#custom-disk:hover,
#custom-netspeed:hover,
#wireplumber:hover,
#sysmonitor:hover,
@@ -90,8 +90,24 @@ window#waybar {
color: #969385;
}
-#wireplumber.muted {
- color: #58574e;
+#custom-netspeed.disconnected {
+ color: #d47c59;
+}
+
+#temperature.warning {
+ color: #d7af5f;
+}
+
+#temperature.critical {
+ color: #d47c59;
+}
+
+#custom-disk.warning {
+ color: #d7af5f;
+}
+
+#custom-disk.critical {
+ color: #d47c59;
}
#battery.warning {
diff --git a/dotfiles/hyprland/.config/themes/hudson/Xresources b/dotfiles/hyprland/.config/themes/hudson/Xresources
index 96e4803..4b35809 100644
--- a/dotfiles/hyprland/.config/themes/hudson/Xresources
+++ b/dotfiles/hyprland/.config/themes/hudson/Xresources
@@ -10,8 +10,8 @@ Xft.hintstyle: hintfull
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb
-Xcursor.size: 32
-Xcursor.theme: Vimix-white-cursors
+Xcursor.size: 24
+Xcursor.theme: Bibata-Modern-Ice
!! Emacs
Emacs*toolBar: 0
diff --git a/dotfiles/hyprland/.config/themes/hudson/waybar.css b/dotfiles/hyprland/.config/themes/hudson/waybar.css
index 9056529..299f1c2 100644
--- a/dotfiles/hyprland/.config/themes/hudson/waybar.css
+++ b/dotfiles/hyprland/.config/themes/hudson/waybar.css
@@ -49,7 +49,7 @@ window#waybar {
#cpu,
#temperature,
#memory,
-#disk,
+#custom-disk,
#custom-netspeed,
#battery,
#wireplumber,
@@ -73,7 +73,7 @@ window#waybar {
#cpu:hover,
#temperature:hover,
#memory:hover,
-#disk:hover,
+#custom-disk:hover,
#custom-netspeed:hover,
#wireplumber:hover,
#sysmonitor:hover,
@@ -90,8 +90,24 @@ window#waybar {
color: #bbbbbb;
}
-#wireplumber.muted {
- color: #666666;
+#custom-netspeed.disconnected {
+ color: #ff5858;
+}
+
+#temperature.warning {
+ color: #daa520;
+}
+
+#temperature.critical {
+ color: #ff5858;
+}
+
+#custom-disk.warning {
+ color: #daa520;
+}
+
+#custom-disk.critical {
+ color: #ff5858;
}
#battery.warning {
diff --git a/dotfiles/hyprland/.config/waybar/config b/dotfiles/hyprland/.config/waybar/config
index 5b9879e..fdff160 100644
--- a/dotfiles/hyprland/.config/waybar/config
+++ b/dotfiles/hyprland/.config/waybar/config
@@ -28,7 +28,7 @@
"cpu",
"temperature",
"memory",
- "disk",
+ "custom/disk",
"battery"
]
},
@@ -62,6 +62,7 @@
"interval": 10,
"hwmon-path-abs": "/sys/devices/pci0000:00/0000:00:18.3/hwmon",
"input-filename": "temp1_input",
+ "warning-threshold": 70,
"critical-threshold": 80,
"format": "<span size='large'>󰔏</span> {temperatureC}°C",
"format-critical": "<span size='large'>󰸁</span> {temperatureC}°C",
@@ -74,10 +75,11 @@
"on-click": "toggle-scratchpad monitor"
},
- "disk": {
+ "custom/disk": {
+ "exec": "waybar-disk",
+ "return-type": "json",
"interval": 30,
- "format": "<span size='large'>󰆼</span> {percentage_used}%",
- "path": "/",
+ "format": "<span size='large'>󰆼</span> {}",
"on-click": "toggle-scratchpad monitor"
},
diff --git a/dotfiles/hyprland/.config/waybar/style.css b/dotfiles/hyprland/.config/waybar/style.css
index 03b11b6..299f1c2 100644
--- a/dotfiles/hyprland/.config/waybar/style.css
+++ b/dotfiles/hyprland/.config/waybar/style.css
@@ -1,5 +1,5 @@
-/* Waybar style - Dupre theme */
-/* Warm, earthy colors from dupre-theme.el */
+/* Waybar style - Hudson theme */
+/* Tomorrow Night + Goldenrod accent */
* {
border: none;
@@ -22,53 +22,48 @@ window#waybar {
padding: 0.5rem;
margin: 0.2rem;
background-color: transparent;
- color: #969385;
+ color: #bbbbbb;
border-radius: 1rem;
transition: all 0.3s ease;
}
#workspaces button.active {
- background: #d7af5f;
- color: #151311;
+ background: #daa520;
+ color: #222222;
border-radius: 1rem;
}
#workspaces button.urgent {
- background-color: rgba(212, 124, 89, 0.4);
+ background-color: rgba(255, 88, 88, 0.4);
}
.modules-right, .modules-left {
- background-color: #151311;
+ background-color: #222222;
border-radius: 1rem;
padding: 0.2rem 0.6rem;
margin: 0.3rem;
- border: 0.095rem solid #d7af5f;
+ border: 0.095rem solid #daa520;
box-shadow: 0rem 0.2rem 0.4rem rgba(0,0,0,0.5);
}
#cpu,
#temperature,
#memory,
-#disk,
+#custom-disk,
#custom-netspeed,
#battery,
#wireplumber,
-#idle_inhibitor,
#tray,
#clock,
#custom-layout,
#window {
padding: 0.4rem;
margin: 0.3rem;
- color: #969385;
+ color: #bbbbbb;
background-color: transparent;
border-radius: 1rem;
}
-#idle_inhibitor {
- margin-right: 0.8rem;
-}
-
#sysmonitor {
margin: 0.3rem;
background-color: transparent;
@@ -78,33 +73,49 @@ window#waybar {
#cpu:hover,
#temperature:hover,
#memory:hover,
-#disk:hover,
+#custom-disk:hover,
#custom-netspeed:hover,
#wireplumber:hover,
#sysmonitor:hover,
#custom-layout:hover {
- background-color: #474544;
+ background-color: #444444;
border-radius: 1rem;
}
#clock {
- color: #f0fef0;
+ color: #eeeeee;
}
#wireplumber {
- color: #969385;
+ color: #bbbbbb;
+}
+
+#custom-netspeed.disconnected {
+ color: #ff5858;
+}
+
+#temperature.warning {
+ color: #daa520;
+}
+
+#temperature.critical {
+ color: #ff5858;
+}
+
+#custom-disk.warning {
+ color: #daa520;
}
-#wireplumber.muted {
- color: #58574e;
+#custom-disk.critical {
+ color: #ff5858;
}
#battery.warning {
- color: #d7af5f;
+ color: #daa520;
}
#battery.critical {
- color: #d47c59;
+ color: #ff5858;
}
#tray > .passive {
@@ -113,5 +124,5 @@ window#waybar {
#tray > .needs-attention {
-gtk-icon-effect: highlight;
- background-color: #d7af5f;
+ background-color: #daa520;
}
diff --git a/dotfiles/hyprland/.local/bin/screenshot b/dotfiles/hyprland/.local/bin/screenshot
new file mode 100755
index 0000000..45925c6
--- /dev/null
+++ b/dotfiles/hyprland/.local/bin/screenshot
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Screenshot tool with fuzzel menu
+# Usage: screenshot [region|fullscreen]
+
+DIR="$HOME/pictures/screenshots"
+mkdir -p "$DIR"
+FILE="$DIR/$(date +%Y-%m-%d_%H%M%S).png"
+
+# Capture
+case "${1:-region}" in
+ region) grim -g "$(slurp)" "$FILE" || exit 1 ;;
+ fullscreen) grim "$FILE" || exit 1 ;;
+esac
+
+# Menu
+CHOICE=$(printf '󰅍 Copy Path\n󰋩 Copy Image\n󰏫 Annotate' | \
+ fuzzel --dmenu --prompt "Screenshot: " --width 20 --lines 3)
+
+case "$CHOICE" in
+ *"Copy Path"*) echo -n "$FILE" | wl-copy --type text/plain ;;
+ *"Copy Image"*) wl-copy --type image/png < "$FILE" ;;
+ *"Annotate"*) satty --filename "$FILE" --output-filename "$FILE" --copy-command wl-copy ;;
+esac
diff --git a/dotfiles/hyprland/.local/bin/waybar-disk b/dotfiles/hyprland/.local/bin/waybar-disk
new file mode 100755
index 0000000..6050653
--- /dev/null
+++ b/dotfiles/hyprland/.local/bin/waybar-disk
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Waybar disk usage module with warning/critical states
+PCT=$(df --output=pcent / | tail -1 | tr -d ' %')
+CLASS=""
+[ "$PCT" -ge 80 ] && CLASS="warning"
+[ "$PCT" -ge 90 ] && CLASS="critical"
+printf '{"text": "%s%%", "class": "%s", "tooltip": "Root: %s%% used"}\n' "$PCT" "$CLASS" "$PCT"
diff --git a/dotfiles/hyprland/.local/bin/waybar-netspeed b/dotfiles/hyprland/.local/bin/waybar-netspeed
index 97e8e5e..a6296b0 100755
--- a/dotfiles/hyprland/.local/bin/waybar-netspeed
+++ b/dotfiles/hyprland/.local/bin/waybar-netspeed
@@ -6,7 +6,7 @@
INTERFACE=$(ip route | awk '/default/ {print $5; exit}')
if [ -z "$INTERFACE" ]; then
- echo '{"text": "󰤭 Disconnected", "tooltip": "No network connection", "class": "disconnected"}'
+ echo '{"text": "󰤭 Offline", "tooltip": "No network connection", "class": "disconnected"}'
exit 0
fi
diff --git a/arch-distrobox b/scripts/arch-distrobox
index 4afe3d1..4afe3d1 100755
--- a/arch-distrobox
+++ b/scripts/arch-distrobox
diff --git a/wipedisk b/scripts/wipedisk
index 0c08c72..0c08c72 100644
--- a/wipedisk
+++ b/scripts/wipedisk
diff --git a/scripts/wireguard-proton.sh b/scripts/wireguard-proton.sh
index 564a9f8..afafd0e 100755
--- a/scripts/wireguard-proton.sh
+++ b/scripts/wireguard-proton.sh
@@ -4,7 +4,7 @@
sudo pacman -S --noconfirm wireguard-tools systemd-resolved
# copy all Proton Wireguard config files
-sudo cp ../assets/wireguard/*.conf /etc/wireguard/
+sudo cp ../assets/wireguard-config/*.conf /etc/wireguard/
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved
diff --git a/todo.org b/todo.org
index 877a35f..59eeff2 100644
--- a/todo.org
+++ b/todo.org
@@ -120,83 +120,56 @@ The script handles edge cases gracefully, provides detailed error messages with
*Why this is Method 1:* Can't build testing infrastructure or maintain packages if the script doesn't work. This is the foundation—everything else depends on reliable execution.
*** TODO [#A] Make Hyprland Bulletproof and Comfy
-**** DONE [#A] Fix Hyprland Configuration Issues
-CLOSED: [2026-01-25 Sun]
-All critical issues resolved. Remaining sub-items are "consider" tasks for future enhancements.
-
-***** DONE [#B] Consider Hyprland Plugins
-CLOSED: [2026-01-25 Sun]
-Official plugins: https://github.com/hyprwm/hyprland-plugins
-Install via hyprpm (added cpio dependency to archsetup).
-
-Interesting plugins:
-
-****** hyprscrolling (INTERESTED)
-Arranges windows in vertical columns that scroll horizontally - like a paper tape.
-Instead of tiling in a grid, windows line up side-by-side and you scroll through them.
-Note: Still marked "work in progress" - may have rough edges.
-
-Options:
-- column_width: default column width (0.5 = half monitor)
-- explicit_column_widths: widths to cycle through ("0.333, 0.5, 0.667, 1.0")
-- fullscreen_on_one_column: maximize when only one column
-- focus_fit_method: 0=center focused column, 1=just fit on screen
-- follow_focus: auto-scroll when focusing a window
-****** xtra-dispatchers (INTERESTED)
-Adds 4 new dispatcher commands:
+**** DONE [#B] waybar's temperature monitor should change color when hot.
+Consider the temperature at which the CPU is getting "too hot". define two temperature thresholds that are "approaching too hot" (when the user should begin paying attention) and "nearly too hot" (when it's approaching a temperature where the user should take action). have the color change to yellow when it's approaching the first threshold, and red when it approaches the second. we'll be using themed colors from the dupre theme.
-| Dispatcher | What it does |
-|-------------------------------------+-----------------------------------------------|
-| plugin:xtd:moveorexec WINDOW,CMD | Move window here, or launch if not running |
-| plugin:xtd:throwunfocused WORKSPACE | Send all unfocused windows away (focus mode!) |
-| plugin:xtd:bringallfrom WORKSPACE | Bring all windows from another workspace |
-| plugin:xtd:closeunfocused | Close all unfocused windows |
+**** DONE [#B] waybar's storage monitor should change color when approaching full.
+waybar's storage monitor should change color when it approaches full, to allow the user to take action. note that since this system could be running on zfs, btrfs, and ext4 file systems, this should work no matter which of these filesystems we are running on. When storage is at or over 80% full, the color of the storage icon on the waybar panel should turn yellow. When the storage is at or over 90$ full, it should be red. we'll be using themed colors form the dupre theme.
-throwunfocused is useful for focus mode - declutter workspace, then bringallfrom to restore.
-closeunfocused is handy for cleaning up.
-
-****** Other official plugins
-- hyprbars: window title bars
-- hyprexpo: workspace overview (like macOS Mission Control)
-- hyprfocus: flash effect when changing focus
-- hyprtrails: window trail effects (eye candy)
-- borders-plus-plus: extra border layers (cosmetic)
-- hyprwinwrap: use any app as wallpaper
+**** TODO [#D] Consider Customizing Hyprland Animations
+Current: windows pop in, scratchpads slide from bottom.
-***** DONE [#C] Evaluate Hyprland Layout Options
-CLOSED: [2026-01-25 Sun]
-Current layouts: master (left/top/center), dwindle. No deck layout available natively.
+Customizable animations:
+- windows / windowsOut / windowsMove - window open/close/move
+- fade - opacity changes
+- border / borderangle - border color and gradient angle
+- workspaces - workspace switching
+- specialWorkspace - scratchpads (currently slidevert)
+- layers - waybar, notifications, etc.
-Options to consider:
-1. Restrict to commonly used layouts only (remove unused from cycle)
-2. Add hy3 plugin for i3-style manual tiling (horizontal/vertical/tab groups)
+Styles: slide, slidevert, popin X%, fade
+Parameters: animation = NAME, ON/OFF, SPEED, BEZIER, STYLE
+Speed: lower = faster (1-10 typical)
-hy3 plugin:
-- URL: https://github.com/outfoxxed/hy3
-- Provides: horizontal splits, vertical splits, tab groups, autotiling
-- Does NOT provide deck layout
-- Requires different dispatchers (hy3:movefocus, hy3:makegroup, etc.)
+Example tweaks:
+#+begin_src conf
+animation = windows, 1, 2, myBezier, popin 80%
+animation = workspaces, 1, 4, default, slide
+animation = fade, 1, 2, default
+animation = layers, 1, 2, default, fade
+#+end_src
-Other layout plugins (none have deck):
-- hyprNStack: N-stack tiling
-- hyprscroller: PaperWM-style scrolling
-- hyprRiver: River-inspired layouts
+**** VERIFY [#D] Test wlogout menu on laptop
+Test wlogout exit menu on laptop to verify sizing works on different display.
+Current config uses fixed pixel margins - may need adjustment for laptop screen.
-Decision: Keep current setup or adopt hy3 for more flexible manual tiling.
+**** VERIFY [#D] Test hy3 tab bar theming colors
+Test the monocle/tab group mode to verify hy3 tab bar colors look correct with dupre and hudson themes.
+Run =set-theme dupre= and =set-theme hudson= while in tab group mode ($mod SHIFT M).
-***** CANCELLED [#C] Consider Pywal for Dynamic Theming
+**** CANCELLED [#C] Consider Pywal for Dynamic Theming
CLOSED: [2026-01-26 Mon]
Use pywal to generate color schemes from wallpaper. Reference: reference-repos/kastrbl4nik-dots/
Tools: swww (wallpaper), wal (colors), pywalfox (Firefox), pywal-spicetify (Spotify)
-****** How pywal works
+***** How pywal works
1. Run =wal -i /path/to/wallpaper.jpg=
2. Analyzes image and extracts 16-color palette
3. Colors written to =~/.cache/wal/colors.json= (and other formats)
4. Apps read from these files or use templates that pywal fills in
-****** Reverting to original theme
+***** Reverting to original theme
Pywal doesn't overwrite original configs - you either:
- Use templates (pywal fills in colors, copies to config locations)
- Have configs that source from =~/.cache/wal/= files
@@ -205,14 +178,14 @@ Pywal doesn't overwrite original configs - you either:
Save/restore themes: =wal --theme= lists saved themes, =wal -f theme-name= restores.
Could save current goldenrod scheme and switch back anytime.
-****** Emacs integration
+***** Emacs integration
- Pywal works with Emacs but requires extra setup
- =ewal= package reads pywal colors from =~/.cache/wal/colors.json= and creates Emacs theme
- Terminal Emacs (=-nw=) inherits terminal colors automatically
- GUI Emacs (emacsclient -c) needs ewal or similar explicit integration
- Adds complexity; replaces carefully-tuned theme with auto-generated colors
-****** Auto-trigger on wallpaper change
+***** Auto-trigger on wallpaper change
Option 1 - Wrapper script (simplest):
#+begin_src sh
#!/bin/sh
@@ -228,13 +201,13 @@ Waypaper has post-command setting in config - set to run =wal -i= after wallpape
Option 3 - File watcher:
Watch =~/.cache/swww/= for changes and trigger wal automatically. More complex.
-****** Considerations
+***** Considerations
- Best for: unified colors across apps, variety, matching wallpaper
- Less ideal for: specific color scheme you love, consistency, carefully tuned app colors
- Some wallpapers produce great palettes; others produce muddy low-contrast results
- Current goldenrod/dark gray theme works well - pywal would replace it
-***** CANCELLED [#D] Consider improving waybar netspeed click responsiveness
+**** CANCELLED [#D] Consider improving waybar netspeed click responsiveness
CLOSED: [2026-01-26 Mon]
The network module has a 1-second sleep to measure throughput, causing occasional
missed clicks when toggling the scratchpad. Options if this becomes annoying:
@@ -242,30 +215,7 @@ missed clicks when toggling the scratchpad. Options if this becomes annoying:
2. Background daemon approach (separate process writes to file, script just reads it)
Current interval: 2 seconds. Script runtime: ~1 second.
-***** TODO [#C] Consider Customizing Hyprland Animations
-Current: windows pop in, scratchpads slide from bottom.
-
-Customizable animations:
-- windows / windowsOut / windowsMove - window open/close/move
-- fade - opacity changes
-- border / borderangle - border color and gradient angle
-- workspaces - workspace switching
-- specialWorkspace - scratchpads (currently slidevert)
-- layers - waybar, notifications, etc.
-
-Styles: slide, slidevert, popin X%, fade
-Parameters: animation = NAME, ON/OFF, SPEED, BEZIER, STYLE
-Speed: lower = faster (1-10 typical)
-
-Example tweaks:
-#+begin_src conf
-animation = windows, 1, 2, myBezier, popin 80%
-animation = workspaces, 1, 4, default, slide
-animation = fade, 1, 2, default
-animation = layers, 1, 2, default, fade
-#+end_src
-
-***** CANCELLED [#D] Consider "show desktop" toggle via empty special workspace
+**** CANCELLED [#D] Consider "show desktop" toggle via empty special workspace
CLOSED: [2026-01-25 Sun 21:13]
I think what I really want is the throw to other workspace dispatcher.
@@ -276,34 +226,133 @@ Implementation:
bind = $mod, Z, togglespecialworkspace, desktop
#+end_src
-***** DONE Scratchpads not spawning on keybind
+**** DONE [#A] Change cursor theme (curren theme's cross too small for screenshots)
+CLOSED: [2026-01-27 Tue]
+Switched to Bibata-Modern-Ice across all configs (hyprland, Xresources, GTK, archsetup).
+**** DONE [#B] new master windows do not have focus
+CLOSED: [2026-01-27 Tue]
+Added focus_on_activate = true to misc section in hyprland.conf.
+
+**** DONE [#B] screenshot functionality should leave path of last image in the clipboard ready to paste.
+CLOSED: [2026-01-27 Tue]
+Created screenshot script with fuzzel menu offering Copy Path, Copy Image, and Annotate.
+**** DONE [#B] screenshot functionality should also bind shift printscreen to select region.
+CLOSED: [2026-01-27 Tue]
+Replaced with $mod+S (region) and $mod+Print (fullscreen), both using fuzzel menu.
+**** DONE [#B] waybar's network monitor should change color when there's no network available.
+CLOSED: [2026-01-27 Tue]
+Added #custom-netspeed.disconnected CSS rule with themed red color across
+base, dupre, and hudson waybar CSS. Changed label from "Disconnected" to "Offline".
+
+**** DONE [#C] Verify gammastep and geoclue fix
+CLOSED: [2026-01-27 Tue 07:18]
+Ensure after reboot there is no error.
+Ensure gamma changes at night
+**** DONE [#B] hyprland: new windows should open in master area in tile layout
+CLOSED: [2026-01-27 Tue]
+Changed master layout new_status from slave to master in hyprland.conf.
+**** DONE [#B] waybar's volume module should not change color when muted.
+CLOSED: [2026-01-27 Tue]
+Removed #wireplumber.muted color overrides from all waybar CSS files.
+Icon and "Muted" text provide sufficient visual cue without darkening.
+
+**** DONE [#B] Review scripts and configs in dotfiles
+CLOSED: [2026-01-27 Tue 05:34]
+112 scripts across system and hyprland dotfiles. Many are from DWM/X11 era.
+- Identify scripts still in use vs obsolete
+- Migrate useful dmenu scripts to fuzzel for Wayland
+- Remove or archive unused scripts
+- Remove config files for apps no longer installed
+
+**** DONE [#B] Consider Hyprland Plugins
+CLOSED: [2026-01-25 Sun]
+Official plugins: https://github.com/hyprwm/hyprland-plugins
+Install via hyprpm (added cpio dependency to archsetup).
+
+Interesting plugins:
+
+***** hyprscrolling (INTERESTED)
+Arranges windows in vertical columns that scroll horizontally - like a paper tape.
+Instead of tiling in a grid, windows line up side-by-side and you scroll through them.
+Note: Still marked "work in progress" - may have rough edges.
+
+Options:
+- column_width: default column width (0.5 = half monitor)
+- explicit_column_widths: widths to cycle through ("0.333, 0.5, 0.667, 1.0")
+- fullscreen_on_one_column: maximize when only one column
+- focus_fit_method: 0=center focused column, 1=just fit on screen
+- follow_focus: auto-scroll when focusing a window
+
+***** xtra-dispatchers (INTERESTED)
+Adds 4 new dispatcher commands:
+
+| Dispatcher | What it does |
+|-------------------------------------+-----------------------------------------------|
+| plugin:xtd:moveorexec WINDOW,CMD | Move window here, or launch if not running |
+| plugin:xtd:throwunfocused WORKSPACE | Send all unfocused windows away (focus mode!) |
+| plugin:xtd:bringallfrom WORKSPACE | Bring all windows from another workspace |
+| plugin:xtd:closeunfocused | Close all unfocused windows |
+
+throwunfocused is useful for focus mode - declutter workspace, then bringallfrom to restore.
+closeunfocused is handy for cleaning up.
+
+***** Other official plugins
+- hyprbars: window title bars
+- hyprexpo: workspace overview (like macOS Mission Control)
+- hyprfocus: flash effect when changing focus
+- hyprtrails: window trail effects (eye candy)
+- borders-plus-plus: extra border layers (cosmetic)
+- hyprwinwrap: use any app as wallpaper
+
+**** DONE [#C] Evaluate Hyprland Layout Options
+CLOSED: [2026-01-25 Sun]
+Current layouts: master (left/top/center), dwindle. No deck layout available natively.
+
+Options to consider:
+1. Restrict to commonly used layouts only (remove unused from cycle)
+2. Add hy3 plugin for i3-style manual tiling (horizontal/vertical/tab groups)
+
+hy3 plugin:
+- URL: https://github.com/outfoxxed/hy3
+- Provides: horizontal splits, vertical splits, tab groups, autotiling
+- Does NOT provide deck layout
+- Requires different dispatchers (hy3:movefocus, hy3:makegroup, etc.)
+
+Other layout plugins (none have deck):
+- hyprNStack: N-stack tiling
+- hyprscroller: PaperWM-style scrolling
+- hyprRiver: River-inspired layouts
+
+Decision: Keep current setup or adopt hy3 for more flexible manual tiling.
+
+**** DONE Scratchpads not spawning on keybind
mod+shift+return toggles special workspace (screen dims) but foot terminal doesn't spawn.
- Manual spawn works: =foot -T spterm tmux=
- Fixed pgrep self-match issue (bracket trick)
- Fixed windowrule syntax (match:class first, then rule)
- Still not working - need further investigation
-***** DONE Wofi launcher can't be dismissed
+**** DONE Wofi launcher can't be dismissed
CLOSED: [2026-01-25 Sun 20:50]
mod+space launches wofi but mod+space and mod+shift+c don't dismiss it.
Need to configure proper dismiss keybinding.
-***** DONE No wallpaper displaying
+**** DONE No wallpaper displaying
Desktop has no wallpaper. Need to set up swww or similar.
-***** DONE Verify foot -T flag sets window title correctly
+**** DONE Verify foot -T flag sets window title correctly
Need to confirm foot uses -T for title (vs -t or --title).
-***** DONE Pulsemixer scratchpad sizing different from others
+**** DONE Pulsemixer scratchpad sizing different from others
mod+a pulsemixer scratchpad appears to be sized differently than other scratchpads.
All use same rules: size (monitor_w*0.6) (monitor_h*0.6). Investigate why it differs.
-***** DONE Waybar wireplumber volume control not working
+**** DONE Waybar wireplumber volume control not working
CLOSED: [2026-01-25 Sun 20:50]
Click to mute and scroll to adjust not responding. Config uses wpctl commands.
May need to verify wpctl is working or try different approach.
-***** DONE Waybar clock not displaying
+**** DONE Waybar clock not displaying
Clock module is configured correctly but not showing on bar.
- Config and style.css are stowed correctly
- Font (FiraCode Nerd Font Mono) is installed
@@ -311,122 +360,67 @@ Clock module is configured correctly but not showing on bar.
- Other modules (tray, disk, workspaces) appear to work
- Reference config in reference-repos/hyprland-dotfiles/waybar/
-***** DONE [#B] Add caffeine replacement for Hyprland
+**** DONE [#B] Add caffeine replacement for Hyprland
CLOSED: [2026-01-26 Sun]
Added waybar idle_inhibitor module as caffeine replacement.
Click to toggle; prevents screen lock/sleep when activated.
-***** DONE [#B] Fill out the exit menu for Hyprland
+**** DONE [#B] Fill out the exit menu for Hyprland
CLOSED: [2026-01-26 Sun]
Created wlogout exit menu with dupre theme and nerd font icons.
Keybinding: $mod SHIFT Q. Uses pgrep to prevent multiple instances.
-***** TODO [#C] Test wlogout menu on laptop
-Test wlogout exit menu on laptop to verify sizing works on different display.
-Current config uses fixed pixel margins - may need adjustment for laptop screen.
-
-***** DONE [#B] Fix rseed32 issue in console at boot
+**** DONE [#B] Fix rseed32 issue in console at boot
CLOSED: [2026-01-26 Mon]
-Added clearcpuid=rdseed kernel parameter to suppress "RDSEED32 is broken" message.
-Also added is_amd_zen5() detection and Hardware Workarounds section to archsetup.
+Attempted clearcpuid=rdseed kernel parameter but it doesn't suppress the message.
+The kernel detection runs separately and still logs the warning. Proper fix requires
+a BIOS update from Framework with newer AGESA microcode. Reverted the workaround
+since it's cosmetic only - the kernel already mitigates the actual security issue.
-***** DONE [#B] Prune desktop files from application menu
+**** DONE [#B] Prune desktop files from application menu
CLOSED: [2026-01-26 Mon]
Hide unwanted .desktop entries from fuzzel/app launcher. Created ~90 NoDisplay=true overrides
in dotfiles/hyprland/.local/share/applications/.
-***** TODO [#B] Review scripts and configs in dotfiles
-112 scripts across system and hyprland dotfiles. Many are from DWM/X11 era.
-- Identify scripts still in use vs obsolete
-- Migrate useful dmenu scripts to fuzzel for Wayland
-- Remove or archive unused scripts
-- Remove config files for apps no longer installed
-
-***** DONE [#C] Standardize font size and name across theme configs
+**** DONE [#C] Standardize font size and name across theme configs
CLOSED: [2026-01-26 Mon]
- Changed font to BerkeleyMono Nerd Font (patched version) across all configs
- Standardized point-based configs (foot, fuzzel, dunstrc, Xresources) to 13pt
- Added comments explaining unit type (points vs pixels) in each config
- Waybar CSS kept at 14px with explanatory comment
-***** DONE [#B] Color theming the hy3 tab bar in monocle view
+**** DONE [#B] Color theming the hy3 tab bar in monocle view
CLOSED: [2026-01-26 Mon]
Added hy3 plugin tab bar colors to set-theme script for both dupre and hudson themes.
Replaces default bright cyan with theme-appropriate colors.
Dupre: active bg+2/steel, inactive gray+2, urgent red, locked cyan.
Hudson: active #444/#bbb, inactive #c5c8c6, urgent red, locked cyan.
-***** TODO [#C] Test hy3 tab bar theming colors
-Test the monocle/tab group mode to verify hy3 tab bar colors look correct with dupre and hudson themes.
-Run =set-theme dupre= and =set-theme hudson= while in tab group mode ($mod SHIFT M).
-
-***** TODO [#C] Consider breaking out Hardware Workarounds as separate section
-The Hardware Workarounds section in archsetup could be its own optional step with user prompt to skip.
-Would allow users to opt-out if workarounds don't apply or cause issues.
-
-Current workaround:
-- AMD Zen 5 RDSEED32 bug (CVE-2025-62626): clearcpuid=rdseed kernel parameter
-
-Candidate for future inclusion:
-- AMD GPU VPE issue: potential video processing engine problem on newer AMD GPUs (not yet encountered)
+**** DONE [#C] Consider breaking out Hardware Workarounds as separate section
+CLOSED: [2026-01-26 Mon]
+Removed the Hardware Workarounds section from archsetup entirely. The only workaround
+(AMD Zen 5 RDSEED32) didn't actually suppress the warning message - the kernel detection
+runs separately. Proper fix requires BIOS updates from vendors with AGESA microcode.
-*** TODO [#A] Fix sleep/suspend on Framework Laptop (velox only)
+*** TODO [#A] Ensure sleep/suspend works on laptops
Critical functionality for laptop use - current battery drain unacceptable
**NOTE:** This applies to Framework Laptop (velox), not Framework Desktop (ratio)
Add kernel parameter: ~rtc_cmos.use_acpi_alarm=1~ (will become systemd default)
Consider: ~acpi_mask_gpe=0x1A~ for battery drain, suspend-then-hibernate config
See Framework community notes on logind.conf and sleep.conf settings
-*** TODO [#B] Review slow and failed packages from 8GB RAM test
-See [[file:docs/slow-failed-packages.org][Slow and Failed Packages Analysis]]
-
-Test run from 2025-11-09 with 8GB RAM, 50GB disk identified:
-- 2 packages that hang indefinitely (anki, tageditor)
-- 4 packages that fail to install (nitrogen, gtk-engine-murrine, adwaita-color-schemes, vagrant)
-- Several slow but successful packages (multimarkdown, ptyxis, thunderbird, etc.)
-
-High priority actions:
-- Remove or make optional: anki (hangs 98 min), tageditor (hangs on qt5-webengine)
-- Investigate repository/build issues for failing packages
-
-*** TODO [#B] Improve error handling: UFW firewall, rmmod pcspkr, mkdir missing quotes
-**** DONE [#B] Fix UFW firewall error handling (archsetup:395,410)
-CLOSED: [2026-01-21 Wed]
-Firewall failures use ~|| error "error"~ which logs but continues - system may be left exposed
-Should use ~|| error "crash"~ or validate rules were applied successfully
-RESOLVED: Added firewall verification after setup (checks "ufw status | grep Status: active").
-If verification fails, displays CRITICAL SECURITY WARNING in outro with manual fix commands.
-**** DONE [#B] Fix rmmod pcspkr error (archsetup:588)
-CLOSED: [2026-01-21 Wed]
-~rmmod pcspkr~ doesn't check if module is loaded, produces error if already unloaded
-Should use ~rmmod pcspkr 2>/dev/null || true~ or check with ~lsmod~
-RESOLVED: Changed to ~rmmod pcspkr 2>/dev/null || true~
-**** DONE [#B] Fix mkdir missing quotes (archsetup:247)
-CLOSED: [2026-01-21 Wed]
-Line 247: ~mkdir -p $source_dir~ should be ~mkdir -p "$source_dir"~ - fails if path contains spaces
-RESOLVED: Current code at line 577 properly quotes: ~(mkdir -p "$source_dir")~
-
-*** TODO [#B] Test complete end-to-end run on fresh VM
-Validates the script actually works in a clean environment (blocks claiming Method 1 complete)
-
-*** TODO [#B] Make all error messages actionable with recovery steps
+*** TODO [#B] All error messages should be actionable with recovery steps
Currently just reports errors without guidance on how to fix them
-*** TODO [#B] Improve progress indicators throughout install
-Enhance existing indicators to show what's happening in real-time
-
-*** TODO [#B] Check that full install logs have timestamps
+*** TODO [#B] Full install logs should contain timestamps
Verify timestamps exist for debugging failures
-*** TODO [#B] Add retry logic to git_install function
-pacman_install and aur_install have retry logic, but git_install doesn't
-
*** TODO [#B] Add input validation for username and paths
Variables like ~$username~, ~$source_dir~, and paths are not validated
Special characters or malicious input could break the script or cause security issues
Should validate inputs match expected patterns (alphanumeric, valid paths, etc.)
-*** TODO [#B] Enable TLP power management for Framework Laptop
+*** TODO [#B] Enable TLP power management for laptops
TLP manages power-saving modes for Wi-Fi, USB, PCIe, Bluetooth, CPU scheduler
Install tlp, enable service, add custom Framework 13 config to /etc/tlp.d/01-custom.conf
Improves battery life and prevents power-related issues during install/post-install
@@ -436,14 +430,20 @@ Some operations log to ~$logfile~, others don't - standardize logging
All package installs should log, all system modifications should log, all errors should log with context
Makes debugging failed installations easier
-*** TODO [#C] Add backup before system file modifications
+*** TODO [#B] Add backup before system file modifications
Safety net for /etc/X11/xorg.conf.d and other system file edits
Files like ~/etc/sudoers~, ~/etc/pacman.conf~, ~/etc/default/grub~ modified without backup
If modifications fail or are incorrect, difficult to recover - should backup files to ~.backup~ before modifying
-*** TODO [#C] Parse and improve AUR error reporting
+*** TODO [#D] Parse and improve AUR error reporting
Parse yay errors and provide specific, actionable fixes instead of generic error messages
+*** TODO [#D] Improve progress indicators throughout install
+Enhance existing indicators to show what's happening in real-time
+
+*** TODO [#D] Add retry logic to git_install function
+pacman_install and aur_install have retry logic, but git_install doesn't
+
*** TODO [#D] Add cpupower installation and enabling to archsetup
cpupower service configures the default CPU scheduler (powersave or performance)
Install cpupower, configure /etc/default/cpupower, enable service: ~systemctl enable --now cpupower.service~
@@ -451,6 +451,19 @@ Install cpupower, configure /etc/default/cpupower, enable service: ~systemctl en
*** VERIFY [#C] FZF works everywhere
Especially the ** expander for all files - may already be fixed, needs verification
+*** CANCELLED [#B] Review slow and failed packages from 8GB RAM test
+CLOSED: [2026-01-27 Tue 06:24]
+See [[file:docs/slow-failed-packages.org][Slow and Failed Packages Analysis]]
+
+Test run from 2025-11-09 with 8GB RAM, 50GB disk identified:
+- 2 packages that hang indefinitely (anki, tageditor)
+- 4 packages that fail to install (nitrogen, gtk-engine-murrine, adwaita-color-schemes, vagrant)
+- Several slow but successful packages (multimarkdown, ptyxis, thunderbird, etc.)
+
+High priority actions:
+- Remove or make optional: anki (hangs 98 min), tageditor (hangs on qt5-webengine)
+- Investigate repository/build issues for failing packages
+
*** DONE [#A] Fix: no dotfiles were set up on last run
CLOSED: [2025-11-13 Wed]
RESOLVED - VM test confirms dotfiles are properly stowed as symlinks; all configs and scripts in place
@@ -502,6 +515,28 @@ CLOSED: [2026-01-20 Mon]
NVMe devices weren't available when ZFS hook tried to import pool at boot.
RESOLVED: Added has_nvme_drives() detection and auto-add nvme to mkinitcpio MODULES.
+*** DONE [#B] Improve error handling: UFW firewall, rmmod pcspkr, mkdir missing quotes
+CLOSED: [2026-01-27 Tue 06:24]
+**** DONE [#B] Fix UFW firewall error handling (archsetup:395,410)
+CLOSED: [2026-01-21 Wed]
+Firewall failures use ~|| error "error"~ which logs but continues - system may be left exposed
+Should use ~|| error "crash"~ or validate rules were applied successfully
+RESOLVED: Added firewall verification after setup (checks "ufw status | grep Status: active").
+If verification fails, displays CRITICAL SECURITY WARNING in outro with manual fix commands.
+**** DONE [#B] Fix rmmod pcspkr error (archsetup:588)
+CLOSED: [2026-01-21 Wed]
+~rmmod pcspkr~ doesn't check if module is loaded, produces error if already unloaded
+Should use ~rmmod pcspkr 2>/dev/null || true~ or check with ~lsmod~
+RESOLVED: Changed to ~rmmod pcspkr 2>/dev/null || true~
+**** DONE [#B] Fix mkdir missing quotes (archsetup:247)
+CLOSED: [2026-01-21 Wed]
+Line 247: ~mkdir -p $source_dir~ should be ~mkdir -p "$source_dir"~ - fails if path contains spaces
+RESOLVED: Current code at line 577 properly quotes: ~(mkdir -p "$source_dir")~
+
+*** DONE [#B] Test complete end-to-end run on fresh VM
+CLOSED: [2026-01-27 Tue 06:24]
+Validates the script actually works in a clean environment (blocks claiming Method 1 complete)
+
*** DONE [#B] Add random.trust_cpu=off to kernel parameters
CLOSED: [2026-01-20 Mon]
AMD RDSEED warnings appearing at boot ("RDSEED32 is broken").