One dashboard for software & firmware updates across everything you own
Project description
trackerkeeper
A frosted, cross-platform PySide6 app base — the shared starter every wolfgang warehaus app is baked from.
trackerkeeper is a fork-and-own starter, not a dependency. Clone it, rename it, delete what you don't need, and build. It solves the cross-platform window chrome, the design system, and the platform scaffolding once — so a new app is mostly its own idea plus a thin layer on top.
It boots to a themed, frosted, frameless window with a live Settings dialog —
a blank canvas with the hard parts already done. See
docs/PHILOSOPHY.md for the why.
What you get
AppWindow— a frosted, frameless main window that's borderless on KDE Wayland and Windows (with the native-frame smooth-resize fix), shapes compositor blur to a rounded self-painted body, and falls back to a near-opaque panel where blur isn't available (never see-through).- Design system — a three-family theme (frosted dark/light + solid), accent presets with WCAG-safe glyph contrast, scalable typography tiers, a 4-based spacing/radius scale. Live theme + accent switching, OS-following auto mode.
- Widget kit —
FrostedDialog, theSelectordropdown,IconButtonwith crisp HiDPI icons, keyboard-nav helpers, a top bar that doubles as the titlebar. - Cross-platform scaffolding —
platform_compat, threadedasync_io, the per-platform backend pattern (autostart / notifications / power), a minimalAppBussignal bus, slim persistentSettings, single-instance. - HiDPI done right — PassThrough fractional scaling + device-pixel snapping.
- Languages for free — Qt translation catalogs wired at boot, plural-aware
strings, locale-safe number/date/duration formatting (
trackerkeeper.i18n.fmt), RTL-mirrored chrome. Seedocs/TRANSLATING.md. - Accessible by default — every kit control announces to screen readers
(a test fails the build on unnamed ones), visible keyboard-focus states, a
keyboard path for every mouse path. See
docs/ACCESSIBILITY.md. - Structured logging — an opt-in rotating file log (~1 MB × 3) in the app's
state dir, console noise capped at WARNING,
TRACKERKEEPER_LOG=debugto turn it up. - Settings migrations — a versioned run-once migration runner
(
meta/schema_version), so a renamed key never strands an installed user. - Credentials store —
save_secret/load_secret: OS keyring first, an encrypted per-machine blob (AES-GCM, or DPAPI on Windows) as the fallback — plaintext never touches disk. - Second-launch file forwarding — double-click a document while the app is
open and the running instance raises + receives it (
AppBus.files_received). - Update chip — a quiet daily GitHub release check with a dismissable Download / What's-new pill in the top bar; store/AUR builds stay silent.
- Diagnostics bundle — a "Copy diagnostics" button that snapshots versions, platform, theme/blur state, settings (secrets excluded), and the log tail.
Quick start
git clone https://github.com/wolfgangwarehaus/trackerkeeper.git
cd trackerkeeper
pip install -e .
python -m trackerkeeper # or: trackerkeeper (the console script)
Runs straight from a checkout — the flat layout means no install is strictly
required (python -m trackerkeeper).
Make it yours
- Rename the package + set your identity. Rename the
trackerkeeper/package to your app, then set your identity in one place —trackerkeeper/identity.py(org,app,display_name). It's the single source the QSettings handle, the Qt app/org names, the window title, and the Windows AUMID all read. (Or, for programmatic control, calltrackerkeeper.configure(org=…, app=…, display_name=…)once, before importing the app — the font-scale loader reads identity at import time.) - Boot your content. Call
trackerkeeper.run_app(lambda window: YourWidget(window))— it does the full cross-platform boot (identity, blur, HiDPI, single-instance, persisted theme, window geometry, the settings dialog) and shows your content. (Or, for the quickest start, just edittrackerkeeper/app.py::_placeholder.) - Extend the bus. Add your app's signals by subclassing
AppBus(trackerkeeper/bus.py); the base stays minimal. - Keep it light. Heavy/native deps (a PDF engine, mpv, …) go in
[project.optional-dependencies], never the PySide6-only core.
Layout
trackerkeeper/
app.py # main() + the placeholder you replace
window.py # AppWindow — the frosted cross-platform chrome
top_bar.py # the titlebar / top bar
settings_dialog.py
bus.py # AppBus (signal bus)
settings.py # slim QSettings wrapper
theme.py design_tokens.py color_tokens.py ui_helpers.py # the design system
blur/ win_frameless.py frosted_dialog.py selector.py icon_button.py icons.py
autostart/ notifications/ power/ # per-platform backend pattern
docs/PHILOSOPHY.md
License
GPL-2.0-or-later (matching the warehaus family). It's a starter you own — feel free to relicense your fork.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trackerkeeper-0.1.2.tar.gz.
File metadata
- Download URL: trackerkeeper-0.1.2.tar.gz
- Upload date:
- Size: 649.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7dc51e10615039b38f7fd6f6e002f8e77368c19d5fe788e52b4f1c684d230642
|
|
| MD5 |
b83625f3e8493cde527f492b739f0ecc
|
|
| BLAKE2b-256 |
b9945016ffb229357b725560475c42c0c89bae848acda7a31a30ac970a02a7ff
|
Provenance
The following attestation bundles were made for trackerkeeper-0.1.2.tar.gz:
Publisher:
pypi-publish.yml on wolfgangwarehaus/trackerkeeper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trackerkeeper-0.1.2.tar.gz -
Subject digest:
7dc51e10615039b38f7fd6f6e002f8e77368c19d5fe788e52b4f1c684d230642 - Sigstore transparency entry: 2256378013
- Sigstore integration time:
-
Permalink:
wolfgangwarehaus/trackerkeeper@2f4ba77a9ca796153b0826f8c73fc145ac2e9e97 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/wolfgangwarehaus
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@2f4ba77a9ca796153b0826f8c73fc145ac2e9e97 -
Trigger Event:
release
-
Statement type:
File details
Details for the file trackerkeeper-0.1.2-py3-none-any.whl.
File metadata
- Download URL: trackerkeeper-0.1.2-py3-none-any.whl
- Upload date:
- Size: 371.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82549436621ca70fa3d992811d8feaa8114c66d493d4523e6ae2f0fdcc53a001
|
|
| MD5 |
6cf8d7bd48a15c4fad8b32be62858184
|
|
| BLAKE2b-256 |
7e2efc7815a7055edea4b57c86e55f4b9b2abbb3916344e7bccd1c31bea0a329
|
Provenance
The following attestation bundles were made for trackerkeeper-0.1.2-py3-none-any.whl:
Publisher:
pypi-publish.yml on wolfgangwarehaus/trackerkeeper
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trackerkeeper-0.1.2-py3-none-any.whl -
Subject digest:
82549436621ca70fa3d992811d8feaa8114c66d493d4523e6ae2f0fdcc53a001 - Sigstore transparency entry: 2256378024
- Sigstore integration time:
-
Permalink:
wolfgangwarehaus/trackerkeeper@2f4ba77a9ca796153b0826f8c73fc145ac2e9e97 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/wolfgangwarehaus
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@2f4ba77a9ca796153b0826f8c73fc145ac2e9e97 -
Trigger Event:
release
-
Statement type: