2.1 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Overview
systab is a single-file Bash script that provides a cron/at/batch-like interface for systemd user timers. It creates, manages, and cleans up systemd .service and .timer unit files in ~/.config/systemd/user/. Managed units are tagged with a # SYSTAB_MANAGED marker comment and a # SYSTAB_ID=<hex> short ID for human-friendly identification.
Running
./systab [OPTIONS]
No build step. The script requires bash, systemctl, and optionally notify-send (for -i) and mail (for -m).
Architecture
The script has two modes controlled by CLI flags:
-
Job creation (
-t <time> [-c <cmd> | -f <script> | stdin]): Generates a systemd.service+.timerpair with a 6-char hex short ID, reloads the daemon, and enables/starts the timer. Time specs are parsed viadate -dor passed through as systemd OnCalendar values. One-time jobs getPersistent=falseandRemainAfterElapse=no(auto-unload after firing). -
Management (
-E,-L,-S,-C— mutually exclusive):-E: Opens$EDITORwith a tab-separated crontab (ID SCHEDULE COMMAND). On save, diffs against the original to apply creates (ID=new), deletes (removed lines), and updates (changed schedule/command). Legacy jobs without IDs get one auto-assigned.-L [filter]: Queryjournalctllogs for managed jobs.-S: Show timer status viasystemctl, including short IDs.-C: Interactively clean up elapsed one-time timers (removes unit files from disk).
Key functions: parse_time (time spec → OnCalendar), create_job (generates unit files), edit_jobs (crontab-style edit with diff-and-apply), get_managed_services/get_managed_timers (find tagged units), ensure_job_id (auto-assign IDs to legacy jobs), clean_jobs (remove elapsed one-time timers).
Testing
There are no automated tests. Test manually with systemd user timers:
./systab -t "in 1 minute" -c "echo test"
./systab -S
./systab -C
Notes
- ShellCheck can be used for linting:
shellcheck systab.