From 53ea56ccb050b4a72f7919e8ee6b9146cc816251 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Fri, 27 Feb 2026 10:51:03 -0600 Subject: feat(archsetup): add rustup, log-cleanup cron, update configs Add rustup toolchain manager to developer_workstation (before AUR packages that need rust to compile). Add log-cleanup cron job with test validation. Update ISO glob for archangel naming. Add dunst icon theme, hyprlock animations, waybar log filtering. --- archsetup | 12 ++++++++++++ assets/outbox/log-cleanup-cron-setup.txt | 22 ++++++++++++++++++++++ assets/outbox/rebuild-test-vm.txt | 4 ++-- assets/outbox/rustup.txt | 7 +++++++ dotfiles/common/.config/dunst/dunstrc | 2 ++ dotfiles/common/.local/bin/cron/log-cleanup | 13 +++++++++++++ dotfiles/hyprland/.config/hypr/hyprland.conf | 2 +- dotfiles/hyprland/.config/hypr/hyprlock.conf | 13 ++++++++++--- scripts/testing/create-base-vm.sh | 4 ++-- scripts/testing/lib/validation.sh | 10 ++++++++++ 10 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 assets/outbox/log-cleanup-cron-setup.txt create mode 100644 assets/outbox/rustup.txt create mode 100755 dotfiles/common/.local/bin/cron/log-cleanup diff --git a/archsetup b/archsetup index ab9478c..260afdb 100755 --- a/archsetup +++ b/archsetup @@ -1149,6 +1149,12 @@ EOF action="enabling the batch delayed command scheduler" && display "task" "$action" systemctl enable atd >> "$logfile" 2>&1 || error_warn "$action" "$?" + action="installing log cleanup cron job" && display "task" "$action" + (sudo -u "$username" crontab -l 2>/dev/null; \ + echo "0 12 * * * \$HOME/.local/bin/cron/log-cleanup") \ + | sudo -u "$username" crontab - \ + >> "$logfile" 2>&1 || error_warn "$action" "$?" + # Package Repository Cache Maintenance display "subtitle" "Package Repository Cache Maintenance" @@ -1763,6 +1769,12 @@ developer_workstation() { action="Developer Workstation" && display "title" "$action" action="Programming Languages and Utilities" && display "subtitle" "$action" + # Rust (via rustup — must precede AUR packages that compile with rust) + pacman_install rustup # Rust toolchain manager + action="setting default rust toolchain to stable" && display "task" "$action" + (sudo -u "$username" rustup default stable >> "$logfile" 2>&1) || \ + error_warn "$action" "$?" + # C pacman_install clang # C/C++ compiler pacman_install cmake # make system diff --git a/assets/outbox/log-cleanup-cron-setup.txt b/assets/outbox/log-cleanup-cron-setup.txt new file mode 100644 index 0000000..7549bc2 --- /dev/null +++ b/assets/outbox/log-cleanup-cron-setup.txt @@ -0,0 +1,22 @@ +Log Cleanup Cron Job +==================== + +Added: 2026-02-26 + +What: Daily cleanup of session log files in ~/.local/var/log + +Problem: Hyprland, waybar, dunst, hypridle, and gammastep each create a new +timestamped log file per session (e.g., dunst-2026-02-26-050000.log). Without +cleanup these accumulate indefinitely (~270 files / 3MB as of Feb 2026). + +Solution: A cron job runs daily at noon, deleting .log files older than 7 days. + +Files added to archsetup: +- dotfiles/common/.local/bin/cron/log-cleanup (the script) + +Installation on fresh system: +1. Symlink is created by stow/dotfile install (same as checkup, crontog) +2. Add to crontab: + crontab -e + # Add this line: + 0 12 * * * $HOME/.local/bin/cron/log-cleanup diff --git a/assets/outbox/rebuild-test-vm.txt b/assets/outbox/rebuild-test-vm.txt index f143a4d..1bdb410 100644 --- a/assets/outbox/rebuild-test-vm.txt +++ b/assets/outbox/rebuild-test-vm.txt @@ -1,3 +1,3 @@ -New archangel ISO available: archangel-vmlinuz-6.12.70-lts-2026-02-12-x86_64.iso +New archangel ISO available: archangel-vmlinuz-6.12.73-lts-2026-02-22-x86_64.iso Location: ~/downloads/isos/ -Rebuild the base test VM from this ISO to pick up linux-lts 6.12.70. +Rebuild the base test VM from this ISO to pick up the new kernel. diff --git a/assets/outbox/rustup.txt b/assets/outbox/rustup.txt new file mode 100644 index 0000000..4266eea --- /dev/null +++ b/assets/outbox/rustup.txt @@ -0,0 +1,7 @@ +Install rustup instead of the rust pacman package. + +pacman -S rustup +rustup default stable + +This replaces the standalone rust package with rustup-managed toolchains. +Switched on ratio on 2026-02-27 during system health check. diff --git a/dotfiles/common/.config/dunst/dunstrc b/dotfiles/common/.config/dunst/dunstrc index 6f8a3ec..bcfa533 100644 --- a/dotfiles/common/.config/dunst/dunstrc +++ b/dotfiles/common/.config/dunst/dunstrc @@ -40,6 +40,8 @@ icon_position = left min_icon_size = 54 max_icon_size = 80 icon_corner_radius = 4 +icon_theme = "Papirus-Dark" +enable_recursive_icon_lookup = true # Misc/Advanced dmenu = fuzzel --dmenu --prompt 'Open with' diff --git a/dotfiles/common/.local/bin/cron/log-cleanup b/dotfiles/common/.local/bin/cron/log-cleanup new file mode 100755 index 0000000..651982c --- /dev/null +++ b/dotfiles/common/.local/bin/cron/log-cleanup @@ -0,0 +1,13 @@ +#!/bin/sh + +# Deletes log files older than 7 days from ~/.local/var/log +# Services (hyprland, waybar, dunst, hypridle, gammastep) create a new +# timestamped log file per session. Without cleanup these accumulate. +# +# Intended to run daily via crontab. + +LOG_DIR="$HOME/.local/var/log" + +if [ -d "$LOG_DIR" ]; then + find "$LOG_DIR" -name "*.log" -mtime +7 -delete +fi diff --git a/dotfiles/hyprland/.config/hypr/hyprland.conf b/dotfiles/hyprland/.config/hypr/hyprland.conf index b1107bb..0981dfc 100644 --- a/dotfiles/hyprland/.config/hypr/hyprland.conf +++ b/dotfiles/hyprland/.config/hypr/hyprland.conf @@ -15,7 +15,7 @@ exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CUR # Portal restart (not start) reconnects stale portals on Hyprland restart. # Backend portals (GTK, Hyprland) must restart BEFORE the main portal to avoid # a 50s GTK settings proxy timeout. Waybar starts after portals are ready. -exec-once = systemctl --user restart xdg-desktop-portal-hyprland xdg-desktop-portal-gtk && systemctl --user restart xdg-desktop-portal && waybar > ~/.local/var/log/waybar-$(date +%Y-%m-%d-%H%M%S).log 2>&1 +exec-once = systemctl --user restart xdg-desktop-portal-hyprland xdg-desktop-portal-gtk && systemctl --user restart xdg-desktop-portal && waybar 2>&1 | grep -v "LIBDBUSMENU-GLIB-WARNING" > ~/.local/var/log/waybar-$(date +%Y-%m-%d-%H%M%S).log # Core services exec-once = /usr/lib/polkit-kde-authentication-agent-1 diff --git a/dotfiles/hyprland/.config/hypr/hyprlock.conf b/dotfiles/hyprland/.config/hypr/hyprlock.conf index fd85651..a4ce90e 100644 --- a/dotfiles/hyprland/.config/hypr/hyprlock.conf +++ b/dotfiles/hyprland/.config/hypr/hyprlock.conf @@ -4,8 +4,15 @@ general { disable_loading_bar = false hide_cursor = true - grace = 0 - no_fade_in = false +} + +animations { + enabled = true + bezier = linear, 1, 1, 0, 0 + animation = fadeIn, 1, 5, linear + animation = fadeOut, 1, 5, linear + animation = inputFieldDots, 1, 2, linear + animation = inputFieldColors, 1, 3, linear } background { @@ -82,7 +89,7 @@ input-field { check_color = rgb(d7af5f) fail_color = rgb(d47c59) fail_text = $FAIL ($ATTEMPTS) - fail_transition = 300 + capslock_color = rgb(ccc768) numlock_color = -1 bothlock_color = -1 diff --git a/scripts/testing/create-base-vm.sh b/scripts/testing/create-base-vm.sh index 9aa785b..11c40a7 100755 --- a/scripts/testing/create-base-vm.sh +++ b/scripts/testing/create-base-vm.sh @@ -43,10 +43,10 @@ if [ ! -f "$CONFIG_FILE" ]; then fi # Find archangel ISO in vm-images/ -ISO_PATH=$(find "$VM_IMAGES_DIR" -maxdepth 1 -name "archzfs-*.iso" -type f 2>/dev/null | sort -V | tail -1) +ISO_PATH=$(find "$VM_IMAGES_DIR" -maxdepth 1 -name "archangel-*.iso" -type f 2>/dev/null | sort -V | tail -1) if [ -z "$ISO_PATH" ]; then fatal "No archangel ISO found in $VM_IMAGES_DIR/" - info "Copy an archzfs-*.iso file to: $VM_IMAGES_DIR/" + info "Copy an archangel-*.iso file to: $VM_IMAGES_DIR/" fi info "Using ISO: $(basename "$ISO_PATH")" diff --git a/scripts/testing/lib/validation.sh b/scripts/testing/lib/validation.sh index de23809..5fa747d 100644 --- a/scripts/testing/lib/validation.sh +++ b/scripts/testing/lib/validation.sh @@ -689,6 +689,16 @@ validate_all_services() { validate_service "cronie" "enabled" "" validate_service "atd" "enabled" "" + # Cron job: log cleanup + step "Checking log-cleanup cron job" + local crontab_entry=$(ssh_cmd "sudo -u cjennings crontab -l 2>/dev/null | grep log-cleanup") + if [ -n "$crontab_entry" ]; then + validation_pass "log-cleanup cron job installed" + else + validation_fail "log-cleanup cron job not in crontab" + attribute_issue "log-cleanup cron job missing from user crontab" "archsetup" + fi + # Timer services validate_service "reflector.timer" "enabled" "" validate_service "paccache.timer" "enabled" "" -- cgit v1.2.3