Systemd Services & Timers#

Immutablue includes several systemd services and timers for system automation.

System Services#

ServiceDescription
immutablue-first-boot.serviceRuns first-boot setup wizard
immutablue-onboot.serviceRuns on-boot scripts
immutablue-hourly.serviceHourly maintenance scripts
immutablue-daily.serviceDaily maintenance scripts
immutablue-weekly.serviceWeekly maintenance scripts
immutablue-monthly.serviceMonthly maintenance scripts
lima-guest-ready.serviceLima VM guest agent

System Timers#

TimerScheduleTriggers
immutablue-hourly.timerEvery hourimmutablue-hourly.service
immutablue-daily.timerDailyimmutablue-daily.service
immutablue-weekly.timerWeeklyimmutablue-weekly.service
immutablue-monthly.timerMonthlyimmutablue-monthly.service

User Services#

ServiceDescription
immutablue-first-login.serviceFirst-login user setup
immutablue-onboot.serviceUser on-login scripts
syncthing-override.serviceSyncthing with Tailscale integration

User Timers#

TimerScheduleTriggers
immutablue-hourly.timerEvery hourimmutablue-hourly.service
immutablue-daily.timerDailyimmutablue-daily.service
immutablue-weekly.timerWeeklyimmutablue-weekly.service
immutablue-monthly.timerMonthlyimmutablue-monthly.service

Managing Services#

Check service status#

# System service
systemctl status immutablue-onboot.service

# User service
systemctl --user status syncthing-override.service

List all timers#

# System timers
systemctl list-timers --all | grep immutablue

# User timers
systemctl --user list-timers | grep immutablue

View service logs#

# System service logs
journalctl -u immutablue-daily.service

# User service logs
journalctl --user -u immutablue-daily.service

# Follow logs in real-time
journalctl -u immutablue-weekly.service -f

Manually trigger a service#

# Run daily maintenance now
sudo systemctl start immutablue-daily.service

# Run user weekly maintenance now
systemctl --user start immutablue-weekly.service

First Boot Service#

The immutablue-first-boot.service runs once after installation to:

  1. Display the graphical setup wizard (if enabled)
  2. Run first-boot scripts
  3. Mark first-boot as complete

Re-running First Boot#

To re-run the first boot setup:

immutablue initial_setup

Or to fully reset first-boot state:

# Remove the completion marker
rm ~/.config/.immutablue_did_first_login

# Re-enable and reboot
sudo systemctl unmask immutablue-first-boot.service
sudo reboot

Syncthing Override Service#

The syncthing-override.service wraps Syncthing with Tailscale integration:

  • Detects Tailscale IP if available
  • Configures Syncthing to listen on Tailscale interface
  • Falls back to standard binding if Tailscale unavailable

Configuration:

# settings.yaml
services:
  syncthing:
    tailscale_mode: true  # Enable Tailscale integration

Quadlet Container Services#

Immutablue uses Podman Quadlet for containerized services:

immutablue-docs.container#

Runs the documentation server:

# Check status
systemctl --user status immutablue-docs.service

# View at http://localhost:1313

Disabling Services#

# Disable a system timer
sudo systemctl disable immutablue-weekly.timer

# Disable a user service
systemctl --user disable syncthing-override.service

See Also#