Check in with one click. Let automation catch the rest. Always know where your overtime stands.
Install · Store page · User guide · Changelog · Contributing
Shift is a work-hours tracker for the Noctalia shell. Your contract says 35 hours a week: Shift turns it into a daily target, counts your time live from the bar, and keeps a running overtime balance — with public holidays, days off and time-off adjustments taken into account. Forgot to check in? Locked your screen for a meeting? Shift notices, and asks instead of guessing.
No account, no cloud, no timesheet: your data stays in a few JSON files on your machine.
shift-showcase.mp4
| ⏱️ One-click tracking | Check in or out from the bar widget, the control-center tile, the dashboard or a keybind. A live ring shows today's progress toward your target, with the time you're done. |
| 🤖 Automation you stay in control of | Assisted suggests check-ins when you sit down within your work hours; Automatic does it for you. Idle, lock and sleep detection spot absences, and Shift asks whether they were work. |
| 📊 An honest overtime balance | Weekly hours split over your workdays, public holidays for your country, days off, and adjustments for time off or HR corrections. Contract changes never rewrite the past. |
| 🗓️ History you can fix | Week bars and a month calendar. Click any day to edit its sessions (9:30, 930 or 9h30), mark it off, or review a day without sessions. Undo is one click away. |
| 🎨 Theme-native | Built only from Noctalia's palette roles and native controls: it follows your theme, light or dark. |
| 🔒 Private and safe | Local data only, daily backups with automatic restore of a damaged file, and a single optional network call for public holidays. No telemetry. |
Shift needs Noctalia 5.2.0 or newer.
From the plugin store: open Noctalia's settings → Plugins, search for Shift and enable it. See its store page.
From this repository (latest release, before it reaches the store):
noctalia msg plugins source add shift git https://github.com/hbollon/shift
noctalia msg plugins enable hbollon/shiftThen add the Shift widget to a bar, and optionally the Shift shortcut to the control center.
Optional tools: swayidle for idle detection, and gdbus (GLib, libglib2.0-bin on Debian/Ubuntu) or loginctl for lock and sleep detection. Shift works without them, with less automation.
- Set your contract: weekly hours and workdays in the plugin settings (35 h, Monday–Friday by default).
- Check in: right-click the bar widget. Left-click it to open the dashboard.
- Let it run: with the default Assisted preset, Shift suggests checking in when you start working within your work hours (08:00–19:00), and asks about long absences when you come back.
The user guide covers the rest: editing days, the balance, automation rules, notifications, backups and keybinds.
![]() |
Absences, handled honestly. Away for 42 minutes with the screen locked? When you come back, Shift asks: count it as work (a meeting, a call) or remove it. Short breaks always count as work.
|
| User guide | How to use Shift, from the first check-in to the overtime balance. |
| Store page | Shift in the Noctalia plugin store. |
| Plugin page | Entries, settings, IPC, and every file, process and network call (as shown in the store). |
| Changelog | What changed in each release. |
| Specification | Behavior, UX, architecture and the decisions behind them. |
Bug reports, ideas and pull requests are welcome. Shift is written in Luau against Noctalia's plugin API, with a pure core covered by unit tests:
make tools # pinned toolchain, checksum-verified
make check # tests, type-check, store validation
make dev-install # run your checkout on your NoctaliaRead CONTRIBUTING.md for the setup and conventions, then pick an open issue or open a new one. Translations go through Noctalia Translate.
If Shift saves you a timesheet, give it a star: it helps other Noctalia users find it. You can also follow @hbollon for future projects, and share Shift with your team.
MIT © Hugo Bollon




