348 lines
7.6 KiB
Markdown
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
|
|
```
|