for lazy people who don't give upis.
LazyNevis is a privacy-first desktop focus tool. It watches the active window during a session, classifies your time as focused or distracted, and nudges you when you drift — without ever blocking an app or sending data anywhere.
LazyNevis is a pun on Lazy + Never, filtered through the comedic speech of Mussum (Os Trapalhões), Brazil's beloved comedy group from the 70s–90s. Mussum had a signature quirk: he added -is to words that didn't need it — Cacildis, Horrivis, and so on — turning ordinary sentences into something unmistakably his own. Run that filter on Never and you get Nevis.
So LazyNevis phonetically reads as Lazy Never — the lazy one who never gives up on focusing.
The logo pays tribute with two of Mussum's trademarks: his signature red hat and a smile tucked beneath the -is at the end of Nevis, nodding to his comedic spirit.
For non-Brazilian readers, LazyNevis just reads as a short, invented word — which isn't a bad thing. Names like Figma, Trello, and Bun mean nothing outside their own context either.
Release screenshots are kept in docs/screenshots. Screenshots are produced from release candidates so documentation never substitutes mockups for real application output.
Most focus apps block distracting websites or lock you into a timer. LazyNevis takes a different approach: it watches, classifies, and nudges — then gets out of the way.
During a session, LazyNevis polls the active window every second and classifies that second as focused, distracted, or idle according to rules you define. If distraction accumulates past a threshold you set, it fires an alert: a native notification, a fullscreen overlay, or a sound. You decide what to do next. Nothing is blocked.
Local-first and private by design. All session data, settings, and audio files live in your operating system's application-data directory. There is no cloud sync, no account, no analytics, and no telemetry. The only outbound request is a manual "Check for updates" button that reads public release metadata from GitHub — it never downloads or executes anything automatically.
Visible but not intrusive. The tray icon keeps LazyNevis out of your way while giving you one-click access. Global shortcuts let you start, pause, and stop a session without switching windows. The fullscreen overlay is the most assertive alert type — and even it is dismissed with a single keypress.
LazyNevis is for people who want to understand their focus patterns, get a gentle push when they drift, and keep their data on their own machine.
- You start a session from the Dashboard or with a global shortcut.
- The monitor polls the active window every second. On macOS this uses Accessibility APIs; on Windows, Win32; on Linux, the active window APIs available on your desktop.
- The rule engine classifies each window as focused or distracted based on your allowlist or blocklist rules. Browser tab titles can be matched separately from the host app, so you can distinguish a work document in Chrome from a social media tab.
- Timers accumulate. Focus, distraction, and idle totals update in real time on the Dashboard.
- When distraction crosses a threshold, an alert fires. If a cooldown is still active from the last alert, the alert waits.
- Everything is saved to local SQLite. If the app crashes, the session is recovered in a paused state on next launch — no time is lost.
- The History page lets you review what actually happened: a visual timeline of window changes, top apps by time, and charts for any date range.
- Start, pause, resume, and stop — no time counted during pauses
- Manual checkpoints to mark meaningful moments inside a session
- Crash-safe recovery: sessions are snapshotted every five seconds and restored after a crash
- Live timers showing focus, distraction, and idle totals
- Current active app displayed on the Dashboard
- Allowlist mode — only matching windows count as focused; everything else is distraction
- Blocklist mode — matching windows count as distracting; everything else is focused
- Match by application name or browser tab title
- Built-in protection so LazyNevis never flags itself
- Native OS notification alerts
- Fullscreen overlay alerts (shown above all other windows; press Escape to dismiss)
- Configurable distraction threshold and cooldown per alert type
- Multiple alert types can be active simultaneously
- Built-in alert sounds
- Custom audio files: MP3, WAV, OGG
- Looping overlay sound that stops automatically when the overlay is dismissed
- Recent custom audio files remembered
- Configurable break interval based on cumulative focused time
- Break countdown timer on the Dashboard
- Start and end break controls (break pauses the main session timer)
- Break history tracked per session
- Session list with date range filters
- Session detail view with visual timeline, top-apps chart, and focus percentage chart
- Delete individual sessions or clear all history
- Export as JSON (full detail) or CSV (summary table)
- Language: English (US) and Brazilian Portuguese
- Theme: light and dark
- Global shortcuts: configurable with conflict detection and automatic rollback
- Autostart at login (optional, toggled in Settings)
- Tray-first operation: hides to tray on window close
- No accounts, cloud sync, analytics, or telemetry
- All data stored locally in the OS application-data directory
- Manual update check only — no background pings
- Accessibility permission on macOS is used only to read window titles, never for keylogging
Download only from GitHub Releases. Do not use unofficial mirrors.
| Platform | Architecture | Package | Install guide |
|---|---|---|---|
| macOS 12+ | Apple Silicon (ARM64) | DMG | docs/install/macos.md |
| Windows 10+ | x64, ARM64 | NSIS installer | docs/install/windows.md |
| Linux | x64 | AppImage, DEB, RPM | docs/install/linux.md |
RC builds may be unsigned while signing credentials are being established. See macOS Gatekeeper and Windows SmartScreen for the one-time bypass steps, and docs/release/installation.md for checksum verification.
After installing, follow the Getting Started guide.
macOS:
- Accessibility (required) — used to read the active application name and window title. LazyNevis does not read keystrokes or any other input.
- Notifications (optional) — needed only for native notification alerts. Fullscreen and audio alerts work without it.
Windows:
- No special permissions are required beyond running the installer.
Linux:
- WebKit2GTK and a system tray library are required system dependencies. See the Linux install guide.
Network:
- There is no telemetry, analytics, or background update check.
- The explicit Check for updates button in About reads public release metadata from the official GitHub API, caches the result for 15 minutes, and never downloads or executes anything.
All session data and settings stay in your OS application-data directory. See PRIVACY.md, platform data locations and uninstall, and known limitations.
Prerequisites: Bun, stable Rust, and the Tauri v2 system dependencies for your OS.
git clone https://github.com/lazy-nevis/lazy-nevis.git
cd lazy-nevis
bun install --frozen-lockfile
bun run tauri devValidation:
bun run test
bun run build
cargo fmt --manifest-path src-tauri/Cargo.toml --all -- --check
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets --all-features --locked -- -D warnings
cargo test --manifest-path src-tauri/Cargo.toml --locked
bun run qualityProduction bundles: bun run tauri build.
Contributor workflow: CONTRIBUTING.md — Architecture: docs/architecture/overview.md — Release process: docs/architecture/release.md.
| Topic | Guide |
|---|---|
| macOS Gatekeeper | docs/troubleshooting/gatekeeper.md |
| Windows SmartScreen | docs/troubleshooting/smartscreen.md |
| Permissions | docs/troubleshooting/permissions.md |
| Audio | docs/troubleshooting/audio.md |
| Tray icon | docs/troubleshooting/tray.md |
| Global shortcuts | docs/troubleshooting/shortcuts.md |
| Linux libraries | docs/troubleshooting/linux-libraries.md |
Usage questions belong in Discussions. Bugs use the issue form. Security vulnerabilities follow SECURITY.md.
| Term | Meaning |
|---|---|
| Session | A measured focus period started and stopped explicitly. |
| Focus rule | An app name or browser title pattern used for classification. |
| Allowlist | A mode where only matching windows count as focused. |
| Blocklist | A mode where matching windows count as distracting. |
| Distraction | Time spent in a window classified as outside the focus policy. |
| Idle | Time with no detected keyboard or mouse activity. |
| Checkpoint | A timestamped note added manually inside a session. |
| Overlay | A fullscreen alert window shown above all other windows. |
| Cooldown | The minimum delay enforced between repeated alerts of the same type. |
| Break | A deliberate rest interval associated with a session; pauses the main timer. |
| Timeline | A chronological log of window changes recorded during a session. |
| Rule engine | The Rust component that classifies each active window as focused or distracted. |
| Tray | The system tray icon; LazyNevis can be operated entirely from here. |
This is direction, not a delivery promise.
Near term: complete release-readiness, clean-machine RC testing, signing setup, and verified installers. Harden the privacy-preserving manual release check without adding automatic updates.
Later: Linux ARM64 and macOS x64 evaluation. Homebrew Cask and Winget after stable signed artifact URLs exist. Accessibility, localization, rule diagnostics, and richer exports.
Not committed: cloud sync, mobile apps, team monitoring, browser extensions, package repositories, Snap/Flatpak, or app-store releases.
Read CONTRIBUTING.md and CODE_OF_CONDUCT.md. LazyNevis is MIT licensed.