7.6 KiB
Theme Switcher Testing Guide
This guide will help you test the theme switcher module on the nate-work host.
Pre-Testing Checklist
1. Review Current Configuration
Check your current nate-work configuration:
# View current wallpaper rotator settings
grep -A 10 "wallpaperRotator" nate-work/desktop-configuration.nix
# View current GTK/Qt theme settings
grep -A 10 "gtk\|kvantum" nate-work/modules/home-manager/home.nix
2. Files to Modify
You'll need to modify these files:
-
nate-work/desktop-configuration.nix (or wherever you import modules)
- Add themeSwitcher import
- Disable wallpaperRotator if enabled
- Configure themeSwitcher settings
-
nate-work/modules/home-manager/home.nix
- Comment out static GTK theme configuration
- Comment out static Kvantum configuration
- Keep icon and cursor themes
Testing Phase 1: Manual Mode
Start with manual mode to test theme generation before enabling automation.
Step 1: Add Module Configuration
Edit nate-work/desktop-configuration.nix:
{
imports = [
# ... existing imports ...
../../shared/modules/services/theme_switcher
];
# Disable old wallpaper rotator if present
# services.wallpaperRotator.enable = false;
# Enable theme switcher in manual mode
services.themeSwitcher = {
enable = true;
user = "nate";
# Start with manual mode (no auto-switching)
enableAutoSwitch = false;
# Use switch-only mode for testing (no continuous rotation yet)
rotation.mode = "switch-only";
# Configure wpaperd
wpaperd = {
enable = true;
mode = "center";
transition.effect = "fade";
transition.duration = 300;
};
};
}
Step 2: Comment Out Static Themes
Edit nate-work/modules/home-manager/home.nix:
# Comment out these sections:
# gtk.theme = { ... };
# xdg.configFile."Kvantum/kvantum.kvconfig" = ...;
# xdg.configFile."gtk-4.0/..." = ...;
# Keep these (icon and cursor themes are independent):
gtk.iconTheme = { ... }; # Keep
gtk.cursorTheme = { ... }; # Keep
Step 3: Rebuild System
# From /home/nate/nixos directory
sudo nixos-rebuild switch --flake .#nate-work
This will:
- Install pywal16, haishoku, wpaperd
- Install apply-theme.sh to ~/.local/bin/
- Install pywal templates
- Start wpaperd (but with no auto-rotation)
- NOT start any timers (manual mode)
Step 4: Manual Testing
After rebuild, test the script manually:
# Test light theme
~/.local/bin/apply-theme.sh --light
# Verify:
# 1. Wallpaper changed to one from Light/ directory
# 2. Colors extracted: cat ~/.cache/wal/colors.json
# 3. GTK theme generated: ls ~/.config/gtk-3.0/gtk.css
# 4. Kvantum theme generated: ls ~/.config/Kvantum/PywalTheme/
# 5. Open a GTK app (nautilus, calculator) - check colors
# Test dark theme
~/.local/bin/apply-theme.sh --dark
# Verify same things with Dark wallpaper
# Test with specific wallpaper
~/.local/bin/apply-theme.sh --light --wallpaper-path ~/nixos/shared/modules/services/wallpapers/Light/IU-Light.jpg
Step 5: Verify Wpaperd Integration
# Check if wpaperd is running
pgrep wpaperd
# Check wpaperd status
systemctl --user status wpaperd
# Manually change wallpaper using wpaperctl
wpaperctl wallpaper ~/nixos/shared/modules/services/wallpapers/Dark/IU-Dark.jpg
Testing Phase 2: Automatic Switching (Time-Based)
Once manual testing works, enable automatic time-based switching.
Step 1: Enable Auto-Switch
Edit nate-work/desktop-configuration.nix:
services.themeSwitcher = {
enable = true;
user = "nate";
# Enable automatic switching
enableAutoSwitch = true;
# Keep switch-only mode for now
rotation.mode = "switch-only";
# Optional: Adjust times for testing
lightTime = "08:00:00"; # Your preferred time
darkTime = "17:00:00"; # Your preferred time
};
Step 2: Rebuild and Check Timer
sudo nixos-rebuild switch --flake .#nate-work
# Verify timer is installed
systemctl --user list-timers | grep theme
# Should show two entries (one for lightTime, one for darkTime)
systemctl --user status theme-switcher.timer
Step 3: Test Timer Manually
# Manually trigger the service
systemctl --user start theme-switcher.service
# Check logs
journalctl --user -u theme-switcher.service -n 50
# Should show theme being applied based on current time
Testing Phase 3: Continuous Rotation
Once automatic switching works, enable continuous wallpaper rotation.
Step 1: Enable Continuous Mode
Edit nate-work/desktop-configuration.nix:
services.themeSwitcher = {
enable = true;
user = "nate";
enableAutoSwitch = true;
# Enable continuous rotation
rotation = {
mode = "continuous";
interval = "5m"; # Rotate every 5 minutes
};
};
Step 2: Rebuild and Monitor
sudo nixos-rebuild switch --flake .#nate-work
# Check rotation timer
systemctl --user list-timers | grep wallpaper
systemctl --user status wallpaper-rotation.timer
# Watch logs in real-time
journalctl --user -u wallpaper-rotation.service -f
Step 3: Verify Rotation
Wait 5 minutes and verify:
- Wallpaper changes
- Theme regenerates
- Colors match new wallpaper
Troubleshooting
Theme Not Applying
# Check if pywal generated files
ls -la ~/.cache/wal/
# Expected files:
# - colors.json
# - gtk-3.0.css
# - gtk-4.0.css
# - PywalTheme.kvconfig
# - ghostty.conf
Wallpaper Not Changing
# Check wpaperd status
systemctl --user status wpaperd
journalctl --user -u wpaperd -n 50
# Try manual change
wpaperctl wallpaper ~/path/to/wallpaper.jpg
GTK Theme Not Loading
# Check GTK config
ls -la ~/.config/gtk-3.0/
ls -la ~/.config/gtk-4.0/
# Check if files are symlinks
readlink ~/.config/gtk-3.0/gtk.css
# Should point to ~/.cache/wal/gtk-3.0.css
Kvantum Theme Not Loading
# Check Kvantum directory
ls -la ~/.config/Kvantum/PywalTheme/
# Manually set theme
kvantummanager --set PywalTheme
# Restart Qt applications
Service Failures
# Check service logs
journalctl --user -u theme-switcher.service --since today
journalctl --user -u wallpaper-rotation.service --since today
# Check environment
systemctl --user show theme-switcher.service | grep PATH
Performance Monitoring
Resource Usage (Continuous Mode)
# Monitor theme regeneration
watch -n 60 'ls -lh ~/.cache/wal/colors.json'
# Check pywal CPU usage
top -b -n 1 | grep wal
If continuous mode is too resource-intensive, switch to switch-only mode.
Success Criteria
- ✓ Manual theme switching works (--light and --dark)
- ✓ Wallpapers change via wpaperctl
- ✓ GTK apps reflect new colors
- ✓ Qt apps reflect new Kvantum theme
- ✓ Ghostty terminal shows new colors (if installed)
- ✓ Timers appear in systemctl --user list-timers
- ✓ Automatic switching works at configured times
- ✓ Continuous rotation works (if enabled)
- ✓ No service failures in journalctl
Next Steps After Testing
Once everything works on nate-work:
- Consider applying to other hosts (frame12, nate, scrappy)
- Fine-tune rotation interval if needed
- Try different pywal backends (modern_colorthief, etc.)
- Customize wpaperd transition effects
- Add custom pywal templates for other apps
Rollback Plan
If something goes wrong:
# Disable the module
# In nate-work/desktop-configuration.nix:
services.themeSwitcher.enable = false;
# Re-enable old configuration
# services.wallpaperRotator.enable = true;
# Uncomment GTK/Qt theme settings in home.nix
# Rebuild
sudo nixos-rebuild switch --flake .#nate-work