something-x-dev 1.8.1.dev25__tar.gz → 1.8.2.dev27__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/PKG-INFO +1 -1
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/PKGBUILD +6 -1
- something_x_dev-1.8.2.dev27/ROADMAP.md +107 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/_version.py +2 -2
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/PKG-INFO +1 -1
- something_x_dev-1.8.1.dev25/ROADMAP.md +0 -69
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/.github/CODEOWNERS +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/.github/workflows/ci.yml +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/.github/workflows/release-dev.yml +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/.github/workflows/release.yml +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/.gitignore +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/DEVICES.md +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/LICENSE +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/README.md +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/cliff.toml +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/docs/RELEASING.md +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/docs/docs.html +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/docs/index.html +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/flake.nix +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/__init__.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/application.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/bluetooth.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/data/__init__.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/data/com.something.x.omarchy.desktop +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/data/style.css +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/pages/__init__.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/pages/device.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/pages/home.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/profiles.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/protocol.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/splash.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/tray.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/nothing_app/window.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/pyproject.toml +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/setup.cfg +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/SOURCES.txt +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/dependency_links.txt +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/entry_points.txt +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/requires.txt +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/top_level.txt +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/somethingx +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/tests/__init__.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/tests/conftest.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/tests/test_bluetooth.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/tests/test_crc.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/tests/test_profiles.py +0 -0
- {something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/tests/test_protocol.py +0 -0
|
@@ -7,11 +7,16 @@ arch=('any')
|
|
|
7
7
|
url="https://github.com/SoaOaoS/nothingonmarchy"
|
|
8
8
|
license=('MIT')
|
|
9
9
|
depends=('python' 'python-gobject' 'gtk4' 'libadwaita')
|
|
10
|
-
makedepends=('python-build' 'python-installer' 'python-wheel' 'python-setuptools'
|
|
10
|
+
makedepends=('python-build' 'python-installer' 'python-wheel' 'python-setuptools')
|
|
11
11
|
optdepends=('libpulse: volume control via pactl')
|
|
12
12
|
source=("https://files.pythonhosted.org/packages/source/s/something-x/something_x-${pkgver}.tar.gz")
|
|
13
13
|
sha256sums=('SKIP')
|
|
14
14
|
|
|
15
|
+
prepare() {
|
|
16
|
+
cd "something_x-${pkgver}"
|
|
17
|
+
sed -i 's/, "setuptools-scm>=8"//' pyproject.toml
|
|
18
|
+
}
|
|
19
|
+
|
|
15
20
|
build() {
|
|
16
21
|
cd "something_x-${pkgver}"
|
|
17
22
|
python -m build --wheel --no-isolation
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Something X — Roadmap
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Current release — v1.8
|
|
6
|
+
|
|
7
|
+
### Shipped
|
|
8
|
+
- [x] **GitHub Pages** — project landing page + full documentation site (`docs/`)
|
|
9
|
+
- [x] **AUR package** — Arch users can install without pip
|
|
10
|
+
- [x] **NixOS flake** — `flake.nix` for Nix users
|
|
11
|
+
- [x] **`.desktop` file** — ships and auto-installs so the app appears in Walker/Rofi/GNOME launcher
|
|
12
|
+
- [x] **Low battery notification** — `notify-send` when any bud drops below 20 %
|
|
13
|
+
- [x] **Background mode** — closing the window hides it; relaunch shows it again (Gio single-instance)
|
|
14
|
+
- [x] **Per-device profiles** — ANC + EQ saved per device address to `~/.config/something-x/profiles.json`, restored on reconnect
|
|
15
|
+
- [x] **CLI quick-toggle** — `something-x --anc off|on|transparency`, `something-x --eq bass`, `something-x --battery`
|
|
16
|
+
- [x] **System tray icon** — battery on hover via StatusNotifierItem (Waybar/SNI)
|
|
17
|
+
- [x] **Wearing detection display** — L/R in-ear status shown on the earbud visual
|
|
18
|
+
- [x] **Auto-connect RFCOMM** — connects as soon as BlueZ reports the device connected
|
|
19
|
+
- [x] **Async BlueZ** — native `Gio` async D-Bus, no `dbus-python` dependency
|
|
20
|
+
- [x] **Unit tests** — 65 tests covering CRC, protocol parsing, battery dedup, profiles, BluetoothManager
|
|
21
|
+
- [x] **Debug mode** — `SOMETHING_X_DEBUG=1` dumps raw RFCOMM frames for contributors
|
|
22
|
+
- [x] **Graceful ANC mode detection** — infer supported modes from RFCOMM response; hide unsupported buttons
|
|
23
|
+
- [x] **Dynamic versioning** — version sourced from git tags at build time
|
|
24
|
+
- [x] **Liquid glass dark UI** — overhauled aesthetic for the app window
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1.9 — Quality of life
|
|
29
|
+
|
|
30
|
+
### Features
|
|
31
|
+
- [ ] **Device nickname** — rename a paired device in the UI; stored in profiles
|
|
32
|
+
- [ ] **Profile import / export** — share `.json` profile files between machines or with other users
|
|
33
|
+
- [ ] **Wear-detect MPRIS actions** — pause media when both buds are removed; resume when reinserted (opt-in)
|
|
34
|
+
- [ ] **Notification preferences** — per-event toggles (battery low, connect, disconnect) in settings
|
|
35
|
+
- [ ] **Theming** — user-selectable accent color and light/dark mode toggle; theme stored in config
|
|
36
|
+
|
|
37
|
+
### Tech
|
|
38
|
+
- [ ] **Improved test coverage** — device page, tray, profiles round-trip, CLI flags
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 1.10 — Desktop integration
|
|
43
|
+
|
|
44
|
+
### Features
|
|
45
|
+
- [ ] **D-Bus API** — expose ANC, EQ, battery, and connect/disconnect over a session-bus interface so scripts and status bars can consume it without spawning a CLI process
|
|
46
|
+
- [ ] **Global keybind support** — register a configurable shortcut (e.g. `Super+F1`) to cycle ANC modes without opening the window
|
|
47
|
+
- [ ] **Quick-settings overlay** — small floating panel triggered by keybind or tray click; ANC toggle + battery at a glance
|
|
48
|
+
- [ ] **Waybar module documentation** — sample `custom/somethingx` block wired to the D-Bus API
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 1.11 — Multi-device
|
|
53
|
+
|
|
54
|
+
### Features
|
|
55
|
+
- [ ] **Multiple devices simultaneously** — open a page per device, manage both at once without switching
|
|
56
|
+
- [ ] **Battery overview** — compact summary card on the home page showing all connected devices and their battery levels
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 1.12 — EQ overhaul
|
|
61
|
+
|
|
62
|
+
### Features
|
|
63
|
+
- [ ] **Visual EQ graph** — interactive SVG/Cairo curve instead of preset pills
|
|
64
|
+
- [ ] **Custom EQ presets** — per-band sliders, save with a user-defined name, stored in profiles
|
|
65
|
+
- [ ] **Preset sharing** — export / import individual EQ presets as `.json`
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 1.13 — Protocol depth
|
|
70
|
+
|
|
71
|
+
### Features
|
|
72
|
+
- [ ] **Touch controls remapping** — reassign tap/hold actions if the protocol exposes it (command IDs found in APK, not yet wired up)
|
|
73
|
+
- [ ] **Firmware version display** — read firmware string from RFCOMM and show it in the device page
|
|
74
|
+
- [ ] **Firmware update check** — compare device firmware against latest known version, show a badge when outdated
|
|
75
|
+
|
|
76
|
+
### Protocol / devices
|
|
77
|
+
- [ ] **CMF Buds / Buds Pro validation** — confirm command IDs and ship explicit support
|
|
78
|
+
- [ ] **Nothing Ear (1) / (a) / (stick) community testing** — collect field reports, fix edge cases
|
|
79
|
+
- [ ] **Structured debug logger** — `SOMETHING_X_DEBUG=1` writes a structured `.jsonl` capture file for easier issue reproduction
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 1.14 — Additional devices
|
|
84
|
+
|
|
85
|
+
### Features
|
|
86
|
+
- [ ] **Nothing Ear (open) support** — ANC not applicable; validate battery and EQ commands
|
|
87
|
+
- [ ] **CMF Watch support** — separate protocol; requires fresh APK reverse-engineering
|
|
88
|
+
- [ ] **Nothing Phone glyph integration** — notification mirroring and glyph lighting (depends on BlueZ + glyph API availability)
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Long term / ideas
|
|
93
|
+
|
|
94
|
+
These have no version target yet — they need either upstream work, a contributor, or significant scoping.
|
|
95
|
+
|
|
96
|
+
- [ ] **GNOME Shell extension** — battery indicator in the GNOME top bar
|
|
97
|
+
- [ ] **KDE Plasma widget** — same idea for KDE users
|
|
98
|
+
- [ ] **macOS port** — replace BlueZ D-Bus with CoreBluetooth via `pyobjc` (long shot)
|
|
99
|
+
- [ ] **Battery history graph** — plot battery level over time, persisted across sessions
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Won't do
|
|
104
|
+
|
|
105
|
+
- **Windows** — no BlueZ; RFCOMM access requires a completely different stack
|
|
106
|
+
- **Wayland screen capture control** — out of scope
|
|
107
|
+
- **Streaming / media playback control** — MPRIS already handles this system-wide
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.8.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 8,
|
|
21
|
+
__version__ = version = '1.8.2.dev27'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 8, 2, 'dev27')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# Something X — Roadmap
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
## Known Issues
|
|
6
|
-
|
|
7
|
-
- Window control buttons (close/minimize/maximize) in the headerbar had a double-hover effect on non-tiling desktops due to app CSS overriding the system theme — fixed on `feat/fix-headerbar-window-controls`.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## v1.x — Near term
|
|
12
|
-
|
|
13
|
-
### Docs
|
|
14
|
-
- [x] **GitHub Pages** — project landing page + full documentation site (`docs/`)
|
|
15
|
-
|
|
16
|
-
### Distribution
|
|
17
|
-
- [x] AUR package — AUR package for Arch users to replace pip
|
|
18
|
-
- [x] **NixOS flake** — `flake.nix` for Nix users
|
|
19
|
-
- [x] **`.desktop` file** — ships and auto-installs so the app appears in Walker/Rofi/GNOME launcher
|
|
20
|
-
|
|
21
|
-
### Features
|
|
22
|
-
- [x] **Low battery desktop notification** — `notify-send` when any bud drops below 20 %
|
|
23
|
-
- [x] **Background mode** — closing the window hides it; relaunch shows it again (Gio single-instance)
|
|
24
|
-
- [x] **Per-device profiles** — ANC + EQ saved per device address to `~/.config/something-x/profiles.json`, restored automatically on reconnect
|
|
25
|
-
- [x] **CLI quick-toggle** — `something-x --anc off|on|transparency`, `something-x --eq bass`, `something-x --battery`
|
|
26
|
-
- [x] **System tray icon** — show battery on hover via StatusNotifierItem (Waybar/SNI)
|
|
27
|
-
- [x] **Wearing detection display** — show L/R in-ear status on the earbud visual
|
|
28
|
-
- [x] **Auto-connect RFCOMM** — connect as soon as BlueZ reports the device connected, no tap needed
|
|
29
|
-
|
|
30
|
-
### Fixes
|
|
31
|
-
- [x] **Headerbar button hover** — window controls now respect the system theme on all desktops
|
|
32
|
-
|
|
33
|
-
### Protocol
|
|
34
|
-
- [x] **Debug mode** — `SOMETHING_X_DEBUG=1` env var dumps raw RFCOMM frames for contributors
|
|
35
|
-
- [x] **Graceful ANC mode detection** — infer supported modes from RFCOMM level response; hide unsupported buttons
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## v2.x — Medium term
|
|
40
|
-
|
|
41
|
-
### Features
|
|
42
|
-
- [ ] **Multiple devices simultaneously** — open two device pages, manage both at once
|
|
43
|
-
- [ ] **Quick-settings panel** — small floating overlay triggered by keybind
|
|
44
|
-
- [ ] **Touch controls remapping** — if the protocol exposes it (found in APK, not yet implemented)
|
|
45
|
-
- [ ] **Equalizer graph** — visual EQ curve instead of preset pills; custom presets with sliders
|
|
46
|
-
- [ ] **Firmware update check** — compare device firmware against latest known version, show badge
|
|
47
|
-
|
|
48
|
-
### Tech
|
|
49
|
-
- [x] **Async BlueZ** — replaced `dbus-python` with native `Gio` async D-Bus (non-blocking, no extra dependency)
|
|
50
|
-
- [x] **Unit tests** — 65 tests covering CRC, protocol parsing, battery dedup, profiles, and BluetoothManager
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## v3.x — Long term / ideas
|
|
55
|
-
|
|
56
|
-
- [ ] **CMF Watch support** — different protocol; would need fresh APK reverse-engineering
|
|
57
|
-
- [ ] **Nothing Phone integration** — glyph control, notification mirroring
|
|
58
|
-
- [ ] **GNOME Shell extension** — battery indicator in the top bar
|
|
59
|
-
- [ ] **KDE Plasma widget** — same idea for KDE users
|
|
60
|
-
- [ ] **macOS port** — replace BlueZ D-Bus with CoreBluetooth via `pyobjc` (long shot)
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## Won't do
|
|
65
|
-
|
|
66
|
-
- **Windows** — no BlueZ, RFCOMM access requires a different stack entirely
|
|
67
|
-
- **Wayland screenshot / screen capture control** — out of scope
|
|
68
|
-
- **Streaming / media playback control** — MPRIS already handles this system-wide
|
|
69
|
-
|
|
File without changes
|
|
File without changes
|
{something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/.github/workflows/release-dev.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/requires.txt
RENAMED
|
File without changes
|
{something_x_dev-1.8.1.dev25 → something_x_dev-1.8.2.dev27}/something_x_dev.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|