Metadata-Version: 2.4
Name: 56k-screech
Version: 1.0.1
Summary: Retro dial-up style internet connection manager for macOS menu bar
Author-email: "Ondřej \"Muzzug\" Kadlec" <kadlec.ondrej@protonmail.com>
License: MIT
Project-URL: Repository, https://github.com/muzzug/screech
Project-URL: Homepage, https://github.com/muzzug/screech
Project-URL: Issues, https://github.com/muzzug/screech/issues
Keywords: macos,menu-bar,internet,retro,dial-up,productivity
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: MacOS X
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Utilities
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.md
Requires-Dist: rumps<0.5,>=0.4.0
Requires-Dist: psutil>=5.9
Requires-Dist: numpy>=1.24
Requires-Dist: sounddevice>=0.4
Requires-Dist: pyobjc-framework-UserNotifications>=10
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Dynamic: license-file

# 📵 56k Screech

> Retro dial-up internet manager for the macOS menu bar — because connecting
> to the internet should be a deliberate act, not an automatic reflex.

![Python](https://img.shields.io/badge/Python-3.11%2B-yellow)
![License](https://img.shields.io/badge/license-MIT-green)

---

## What it does

56k Screech lives in the menu bar and **actually controls your Mac's Wi-Fi**.
When the internet isn't turned on via DialUp, it simply doesn't work. No
silent syncs, no background notifications, no cloud quietly refreshing
without your knowledge.

And of course — connecting is accompanied by an authentic **dial-up sound
ritual**. 📟

56k Screech is menu-bar-only: it never shows a Dock icon or a Cmd+Tab entry.

### Features

| | |
|---|---|
| 📡 | Real Wi-Fi on/off (`networksetup`), reconciled every second against the actual radio state (catches manual toggles from the system menu too) |
| 🔊 | Dial-up handshake sound — bundled recording, with a ~12s procedurally generated fallback if it (or `afplay`) is unavailable |
| ⏱  | Live connection timer |
| ⚡ | Real-time download / upload speed |
| 📦 | Data transferred in the current session |
| 💰 | Cost per session — currency and price/hour are live-editable in Settings |
| 📊 | Stats: today / 7 days / 30 days / all time, plus the last 5 sessions |
| 🔔 | Notification Center alert (with a chime) after you've been online past a configurable time limit — includes a one-tap "Disconnect" button |
| 😴 | Billing and the alert timer pause across system sleep — waking up doesn't inflate your session cost or fire an overdue alert the instant you're back |
| ⚙️ | In-menu Settings: currency, price/hour, modem sound on/off, alerts on/off + limit, Wi-Fi interface picker |
| 🚀 | LaunchAgent for automatic startup |

The menu bar icon itself reflects connection state: 📵 offline, 📡
connecting, 📶 connected (idle), 🌐 connected (actively transferring data).

---

## Installation

### pip

```bash
pip install 56k-screech
```

### From source

```bash
git clone https://github.com/muzzug/screech.git
cd screech
pip install -e .
```

---

## Running

```bash
screech
# or, without the installed entry point:
python -m screech.app
```

The 📵 icon appears in the menu bar. Click → "Connect to internet".

The modem sound plays in full *before* Wi-Fi actually turns on — that's the
ritual, not a hang. Expect a several-second delay between clicking Connect
and the radio (and the status row) actually going live.

---

## Automatic startup (LaunchAgent)

```bash
screech install-launchagent
```

Uninstall:
```bash
screech uninstall-launchagent
```

---

## Configuration

Most settings are edited live from the app itself — click the **Settings**
section in the menu to expand it:

- **Currency** and **Price/hour** — used to compute the cost shown live and
  recorded per session
- **Modem sound** — turn the dial-up handshake on/off
- **Alerts** — toggle on/off, plus a **Limit (min)** for how often you get a
  Notification Center reminder while connected
- **Wi-Fi Interface** — pick the right Wi-Fi device from a submenu populated
  from `networksetup -listallhardwareports`, instead of editing code; this is
  the fix if 56k Screech "does nothing" (or reports it couldn't turn Wi-Fi on)
  when you click Connect

Alerts use macOS Notification Center, so the first time you connect you'll
be asked to grant 56k Screech permission under System Settings → Notifications.
Each alert plays the standard notification chime — if you'd rather it stayed
silent, turn off the sound for 56k Screech there.

Settings are persisted to:
```
~/Library/Application Support/56k Screech/config.json
```

Session history (used for the Stats section) is stored in:
```
~/Library/Application Support/56k Screech/sessions.db
```

A **Reset Stats…** item at the bottom of the Stats section permanently
erases all recorded session history.

---

## License

MIT © Ondřej "Muzzug" Kadlec
