Repository navigation
Expand file tree
/
Copy pathtool.json
More file actions
256 lines (256 loc) · 9.97 KB
/
Copy pathtool.json
File metadata and controls
256 lines (256 loc) · 9.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
{
"schemaVersion": 1,
"name": "tui-cron",
"binary": "tui-cron",
"tagline": "Every scheduled job on one screen, systemd timers and cron together",
"description": "A terminal UI for everything scheduled on a machine. systemd timers and cron are two schedulers with two syntaxes and two ways of reporting what happened; tui-cron puts them on one list — the name, the schedule as written, the next run, the last run and how it went.\n\nNext to every expression is what it means, in English. `17 3 * * 1` and `*-*-01..07 12:00:00` are both precise and neither is readable, and the mistakes people make with them are mistakes of reading. The reading comes from the tool's own describer, and the detail screen adds the next five runs as `systemd-analyze calendar` computes them.\n\nChanges are previewed. A timer's schedule goes to a drop-in, checked with `systemd-analyze calendar` first; the unit file is never rewritten. A crontab is replaced through `crontab <file>`, cron's own interface, with the diff on screen; as root, into another account's table or /etc/cron.d. A cron line can become a timer, written but not enabled. A timer this tool wrote says so in its files, and only those can be re-pointed or deleted.\n\nRun `tui-cron --demo` to drive a sample machine: every key works, every command is built and previewed for real, and nothing touches your system.",
"category": "scheduling",
"homepage": "https://github.com/tui-tools/tui-cron",
"repo": "https://github.com/tui-tools/tui-cron",
"license": "MIT",
"platforms": [
"linux/amd64",
"linux/arm64"
],
"icon": "assets/icon.svg",
"logo": "assets/logo.png",
"screenshots": [
{
"path": "docs/screenshots/tui-cron-main.png",
"caption": "Every scheduled job on one list: systemd timers and cron together, with the schedule as written and how the last run went"
},
{
"path": "docs/screenshots/tui-cron-timers.png",
"caption": "The systemd timers, with what each activates and whether a run missed while the machine was off is caught up"
},
{
"path": "docs/screenshots/tui-cron-cron.png",
"caption": "The cron jobs: whose table each line is in, which file and line, and the command it runs"
},
{
"path": "docs/screenshots/tui-cron-detail.png",
"caption": "One job in full: the schedule in English, the next runs systemd computed, the unit as written, and its log"
},
{
"path": "docs/screenshots/tui-cron-edit.png",
"caption": "The schedule editor, reading the expression back in English as it is typed"
},
{
"path": "docs/screenshots/tui-cron-help.png",
"caption": "The help screen, generated from the same key table as the hint bar"
}
],
"keys": [
{
"key": "tab / 1-4",
"action": "Move between all jobs, timers, cron and the schedulers themselves"
},
{
"key": "enter",
"action": "Open the selected job: its unit or table, the next runs, and its log"
},
{
"key": "e",
"action": "Change when the selected job runs — and what it runs, for a timer this tool wrote"
},
{
"key": "a",
"action": "Add a cron line: your own table, or as root another account's or /etc/cron.d"
},
{
"key": "d",
"action": "Remove the selected cron line, or a timer this tool wrote, after typing its name"
},
{
"key": "c",
"action": "Create a systemd timer and the service it runs"
},
{
"key": "t",
"action": "Write a timer for the selected cron line, not enabled"
},
{
"key": "E / D",
"action": "Enable or disable the selected timer at boot"
},
{
"key": "n",
"action": "Run the selected job now, off its schedule"
},
{
"key": "/",
"action": "Filter the rows of the current screen"
},
{
"key": "?",
"action": "Help"
},
{
"key": "q",
"action": "Quit"
}
],
"backends": [
{
"name": "systemd",
"binary": "systemctl",
"versionCommand": [
"systemctl",
"--version"
],
"versionRegex": "systemd (\\d+)",
"minimum": "245",
"searchPaths": [
"/usr/bin/systemctl",
"/bin/systemctl"
],
"features": [
{
"name": "timers-json",
"since": "250"
}
],
"notes": [
{
"range": "<250",
"impact": "`systemctl list-timers --output=json` does not exist, so the timers are enumerated from `systemctl list-units --type=timer` instead; nothing is lost, because every column shown is read from `systemctl show` either way"
},
{
"range": ">=245",
"impact": "`systemd-analyze calendar --iterations` is what computes the next runs and validates a new OnCalendar. It arrived in 242, below this minimum, so it is not gated: on every version this tool supports it is simply there"
},
{
"range": ">=245",
"impact": "a timer in your own manager is read through `systemctl --user`, which needs a user bus; over a serial console or a bare `sudo -i` shell there is none, and the tool says the user timers were not read rather than that there are none"
}
],
"tested": [
"255",
"259",
"261"
]
},
{
"name": "cron",
"binary": "crontab",
"searchPaths": [
"/usr/bin/crontab",
"/bin/crontab"
],
"notes": [
{
"range": ">=1",
"impact": "cron declares no version command. cronie answers `crontab -V` with \"cronie 1.7.2\"; Debian's vixie cron has no such flag and no sibling program that prints one, so a version would appear on Fedora and be blank on Ubuntu. The header shows cron without a number"
},
{
"range": ">=1",
"impact": "there is no portable way to have cron check a table: cronie ships `crontab -T`, Debian's cron ships nothing equivalent. A line is therefore parsed by this tool before it is written, with the same check on every machine"
},
{
"range": ">=1",
"impact": "cron records that a command started, and cronie also that it returned; neither records an exit status anywhere. A cron job's last result is therefore \"it ran\" at best, and the screen says so rather than implying it worked"
},
{
"range": ">=1",
"impact": "a machine may have no cron at all — Omarchy Server is one — and that is a normal machine, not a failure: the timers are listed, and cron reports itself as absent with the reason"
},
{
"range": ">=1",
"impact": "a machine with no cron may still carry run-parts scripts: Omarchy Server ships /etc/cron.hourly/snapper and nothing that walks the directory. They are listed anyway, and each row says nothing runs it rather than showing a file that looks scheduled as active"
}
],
"tested": []
}
],
"install": {
"repo_url": "https://pkgs.tui.tools",
"pacman": {
"available": true,
"package": "tui-cron",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo pacman -S tui-cron",
"url": "https://pkgs.tui.tools/arch",
"note": "Upgrades then arrive with the rest of your system updates."
},
"aur": {
"available": false,
"package": "tui-cron-bin",
"repo": "aur",
"command": "paru -S tui-cron-bin",
"url": "https://aur.archlinux.org/packages/tui-cron-bin",
"note": "The -bin package installs the released static binary."
},
"apt": {
"available": true,
"package": "tui-cron",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo apt install tui-cron",
"url": "https://pkgs.tui.tools/deb",
"note": "Upgrades then arrive with the rest of your system updates."
},
"dnf": {
"available": true,
"package": "tui-cron",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo dnf install tui-cron",
"url": "https://pkgs.tui.tools/rpm",
"note": "Upgrades then arrive with the rest of your system updates."
},
"zypper": {
"available": false,
"package": "tui-cron",
"repo": "tui-tools",
"requires_repo_setup": true,
"command": "sudo zypper install tui-cron",
"url": "https://pkgs.tui.tools/rpm",
"note": "The rpm repository is shared with dnf; zypper support is not tested yet."
},
"binary": {
"available": true,
"pattern": "tui-cron_{version}_linux_{arch}.tar.gz",
"command": "curl -fsSL https://github.com/tui-tools/tui-cron/releases/download/v{version}/tui-cron_{version}_linux_{arch}.tar.gz | tar -xz tui-cron\nsudo install -m0755 tui-cron /usr/local/bin/tui-cron",
"url": "https://github.com/tui-tools/tui-cron/releases",
"note": "One static binary. Verify it against checksums.txt from the same release."
},
"source": {
"available": true,
"command": "git clone https://github.com/tui-tools/tui-cron\ncd tui-cron && make build\nsudo install -m0755 bin/tui-cron /usr/local/bin/tui-cron",
"url": "https://github.com/tui-tools/tui-cron",
"note": "Needs Go 1.27 or newer."
}
},
"security": {
"needs_sudo": "Reading needs nothing: `systemctl show`, `crontab -l` for your own table and the journal all answer to any user. Every change escalates through `sudo -n`, which never prompts — installing a drop-in, replacing a crontab, enabling a timer or running one now.",
"preview_before_run": true,
"no_daemon": true,
"no_network": true,
"static_binary": true,
"signed_releases": true,
"config_paths": [
"/etc/tui-cron/config.toml",
"~/.config/tui-cron/config.toml"
]
},
"maintainers": [
{
"name": "Edimar Cardoso",
"github": "edimarlnx"
}
],
"since": "2026-08-30",
"keywords": [
"cron",
"crontab",
"systemd",
"timers",
"oncalendar",
"scheduling",
"anacron",
"cronie",
"tui",
"bubbletea"
]
}