nixos/shared/modules/services/theme_switcher/TESTING_GUIDE.md
2026-01-23 13:44:07 -07:00

348 lines
7.6 KiB
Markdown

# 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:
```bash
# 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:
1. **nate-work/desktop-configuration.nix** (or wherever you import modules)
- Add themeSwitcher import
- Disable wallpaperRotator if enabled
- Configure themeSwitcher settings
2. **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`:
```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`:
```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
```bash
# 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:
```bash
# 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
```
```bash
# Test dark theme
~/.local/bin/apply-theme.sh --dark
# Verify same things with Dark wallpaper
```
```bash
# 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
```bash
# 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`:
```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
```bash
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
```bash
# 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`:
```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
```bash
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
```bash
# 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
```bash
# 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
```bash
# 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
```bash
# Check Kvantum directory
ls -la ~/.config/Kvantum/PywalTheme/
# Manually set theme
kvantummanager --set PywalTheme
# Restart Qt applications
```
### Service Failures
```bash
# 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)
```bash
# 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:
1. Consider applying to other hosts (frame12, nate, scrappy)
2. Fine-tune rotation interval if needed
3. Try different pywal backends (modern_colorthief, etc.)
4. Customize wpaperd transition effects
5. Add custom pywal templates for other apps
## Rollback Plan
If something goes wrong:
```bash
# 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
```