diff options
| -rw-r--r-- | CLAUDE.md | 72 | ||||
| -rwxr-xr-x | archsetup | 48 | ||||
| -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/dwm.desktop | 11 | ||||
| -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 | ||||
| -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/.Xresources | 87 | ||||
| -rw-r--r-- | dotfiles/common/.config/dunst/dunstrc | 26 | ||||
| -rw-r--r-- | dotfiles/common/.config/gtk-3.0/settings.ini | 4 | ||||
| -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.ini | 44 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/fuzzel/fuzzel.ini | 4 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/gammastep/config.ini | 21 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/hypr/hyprland.conf | 16 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/hypr/hyprlock.conf | 22 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/themes/dupre/Xresources | 4 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/themes/dupre/waybar.css | 24 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/themes/hudson/Xresources | 4 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/themes/hudson/waybar.css | 24 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/waybar/config | 10 | ||||
| -rw-r--r-- | dotfiles/hyprland/.config/waybar/style.css | 59 | ||||
| -rwxr-xr-x | dotfiles/hyprland/.local/bin/screenshot | 23 | ||||
| -rwxr-xr-x | dotfiles/hyprland/.local/bin/waybar-disk | 7 | ||||
| -rwxr-xr-x | dotfiles/hyprland/.local/bin/waybar-netspeed | 2 | ||||
| -rwxr-xr-x | scripts/arch-distrobox (renamed from arch-distrobox) | 0 | ||||
| -rw-r--r-- | scripts/wipedisk (renamed from wipedisk) | 0 | ||||
| -rwxr-xr-x | scripts/wireguard-proton.sh | 2 | ||||
| -rw-r--r-- | todo.org | 375 |
59 files changed, 1075 insertions, 409 deletions
@@ -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 @@ -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 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/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 @@ -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"). |
