Skip to content

Commit 97632cf

Browse files
committed
docs: add feature roadmap from prior-art research
Backlog of widgets the ii fork lacks, derived from a survey of Quickshell/AGS/ eww rices, Raycast/Sketchybar, PowerToys, and KDE/GNOME. Prioritized and sized against the CONTRIBUTING done-checklist: command palette + Quicklinks, clipboard history, PR/issue board, eye-care break overlay, secrets surfacing, bar popups/ graphs, and a recon MCP backend. Allowlist ROADMAP.md in .gitignore.
1 parent c78aa02 commit 97632cf

2 files changed

Lines changed: 153 additions & 0 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
!/CONTRIBUTING.md
2020
!/SECURITY.md
2121
!/CHANGELOG.md
22+
!/ROADMAP.md
2223
!/.github/
2324

2425
# Migration/backup artifacts left by the dots installer

ROADMAP.md

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
# Roadmap
2+
3+
Feature backlog for the widget layer this fork adds on top of
4+
[illogical-impulse](https://github.com/end-4/dots-hyprland). Derived from a survey of prior art
5+
across Quickshell/AGS/eww rices, macOS power tools (Raycast, Sketchybar, Übersicht), Windows
6+
PowerToys, and KDE/GNOME, then filtered to what the `ii` config here does **not** already have.
7+
8+
Each item is sized against the "done" checklist in [CONTRIBUTING.md](CONTRIBUTING.md): an enable
9+
flag in `Config.qml`, gating on `Config.ready && enable`, a **Settings → Custom** entry, and any
10+
shelled-out tool recorded in `setup/dependencies.txt`.
11+
12+
Status legend: `[ ]` queued, `[~]` in progress, `[x]` shipped.
13+
14+
## Build order
15+
16+
| # | Feature | Value | Effort | Keybind |
17+
|---|---------|-------|--------|---------|
18+
| 1 | Command palette + Quicklinks | quick action | M-H | `Super+Alt+Space` |
19+
| 2 | Clipboard history + snippets | quick action / dev | M | `Super+Alt+V` |
20+
| 3 | PR/issue quick-action board | dev | M | `Super+Alt+R` |
21+
| 4 | Eye-care break overlay | ambient | L | `Super+Alt+B` (snooze) |
22+
| 5 | Secrets surfacing (pass/sops) | dev / security | M | `Super+Alt+S` |
23+
| 6 | Bar popups + inline graphs | glanceable | L-M | n/a (bar) |
24+
| 7 | Recon MCP backend (reconLauncher) | security | M | existing `Super+Alt+P` |
25+
26+
---
27+
28+
## 1. Command palette + Quicklinks `[ ]`
29+
30+
One `Super+Alt+Space` fuzzy surface over apps, files, open windows, emoji, a calculator, the
31+
clipboard, and user-defined commands. The single strongest gap: this config has separate launchers
32+
(`serviceLauncher`, `reconLauncher`, homelab glance) but no unified `>`-prefixed palette. The
33+
**Quicklinks** layer is the multiplier: one entry type targeting a URL, file, app deeplink, or
34+
parameterized search, with `{argument}`, `{clipboard}`, date, and calc-result placeholders
35+
substituted at run time (e.g. `gitea repo {argument}`, `recon target {clipboard}`).
36+
37+
- **Module**: `modules/ii/commandPalette/` + `services/CommandPalette.qml`. A search-filtered
38+
`ListView` with a pluggable provider list, each provider a `Process`/`StdioCollector`. Reuse the
39+
existing overview/launcher fuzzy list rather than reimplementing.
40+
- **Providers**: apps (desktop entries), files (`fd`), windows (`hyprctl clients -j`), calc
41+
(`qalc`, already present), clipboard (feature 2), quicklinks (user config).
42+
- **Interim**: shell out to `fuzzel`/`walker`/`rofi` 2.0 to get the workflow before the native core
43+
lands, then swap the backend.
44+
- **Deps**: `fd`, `libqalculate` (qalc). `wl-clipboard` shared with feature 2.
45+
- **Prior art**: DankMaterialShell (Quickshell, ships exactly this), PowerToys Command Palette,
46+
Raycast Quicklinks + dynamic placeholders.
47+
- **Effort**: medium-high core, then each provider is incremental.
48+
49+
## 2. Clipboard history + snippets `[ ]`
50+
51+
Scrollable clipboard history with text and image-thumbnail previews, plus pinned snippets. Front-end
52+
over `cliphist`, which is picker-agnostic by design
53+
(`cliphist list | <picker> | cliphist decode | wl-copy`), so the Quickshell UI replaces the picker.
54+
55+
- **Module**: `modules/ii/clipboard/` + `services/Clipboard.qml`. A `wl-paste --watch cliphist store`
56+
service feeds the history; the module shells `cliphist list`/`decode` and renders entries. Pinned
57+
snippets live in `config.json`.
58+
- **Stretch**: transform-on-paste (plain text / Markdown / JSON), the PowerToys "Advanced Paste"
59+
pattern.
60+
- **Deps**: `cliphist`, `wl-clipboard`.
61+
- **Prior art**: sentriz/cliphist, DankMaterialShell clipboard (image previews in Quickshell),
62+
PowerToys Advanced Paste.
63+
- **Effort**: medium.
64+
65+
## 3. PR/issue quick-action board `[ ]`
66+
67+
A `gh-dash`-style board: per-repo PR/issue sections from `config.json`, with key-bound actions
68+
(diff, comment, checkout, open, approve). Complements `giteaActivity`, which surfaces activity but
69+
does not act.
70+
71+
- **Module**: `modules/ii/prBoard/` + `services/PrBoard.qml`. `Process` runs `gh pr list --json ...`
72+
per configured GitHub repo and `tea` (or the Gitea API) for Gitea; render a list, bind keys to the
73+
CLI subcommands.
74+
- **Deps**: `gh` (present), `tea` (Gitea CLI), `jq`.
75+
- **Prior art**: dlvhdr/gh-dash (per-repo YAML sections, custom workflow actions).
76+
- **Effort**: medium.
77+
78+
## 4. Eye-care break overlay `[ ]`
79+
80+
Tiered break reminders: a 20s micro-break every ~10 min and a longer 5 min break every ~30 min, or
81+
the 20-20-20 full-screen countdown. Lowest-effort item and a good warm-up.
82+
83+
- **Module**: `services/BreakReminder.qml` + a layer-shell overlay window. A `Timer` drives the
84+
schedule; the overlay shows a countdown. Suppress during `gameMode`/fullscreen and reuse the
85+
`idleInhibitor` signal so it never fires mid-presentation. `Super+Alt+B` snoozes.
86+
- **Deps**: none (native Timer + layer-shell).
87+
- **Prior art**: hovancik/stretchly (tiered schedule), nomandhoni-cs/blink-eye (20-20-20 overlay).
88+
- **Effort**: low.
89+
90+
## 5. Secrets surfacing (pass/sops) `[ ]`
91+
92+
Greenfield: the research found no off-the-shelf prior art, but it fits the NixOS `sops-nix` setup.
93+
A palette provider (and/or its own dialog) that lists entries from `pass` or a `sops` file, decrypts
94+
one into the clipboard on select, and **auto-clears after a timeout**. Security-sensitive, so gate
95+
behind explicit opt-in and never log values.
96+
97+
- **Module**: provider inside feature 1, or `modules/ii/secrets/` + `services/Secrets.qml`. Shells
98+
`pass show <name>` / `sops -d`, pipes to `wl-copy`, arms a `Timer` to `wl-copy --clear`.
99+
- **Deps**: `pass` or `sops` + `age` (sops/age already in the NixOS config), `wl-clipboard`.
100+
- **Notes**: keep names out of committed files; this reads from the untracked store only.
101+
- **Effort**: medium.
102+
103+
## 6. Bar popups + inline graphs `[ ]`
104+
105+
Generalize `sensorSparkline` into a reusable pattern: bar items that show a glanceable value and
106+
expand into a small popup with a live graph (network throughput, NAS I/O, HA quick scenes). The
107+
Sketchybar model, where any element changes from a script event.
108+
109+
- **Module**: a shared `BarPopup` + `Sparkline` component (`Canvas`/`ShapePath`) fed by a
110+
`Process` data model; add popup expansions on existing bar delegates.
111+
- **Deps**: none extra.
112+
- **Prior art**: FelixKratz/SketchyBar (event-driven elements, arbitrary graphs, on-demand popups).
113+
- **Effort**: low-medium per widget.
114+
115+
## 7. Recon MCP backend for reconLauncher `[ ]` (optional)
116+
117+
Enhance the existing owner-allowlisted `reconLauncher` to query an authorization-gated MCP server
118+
(`cybersec-toolkit`: 580+ tool registry, `check_installed`, `suggest_for_ctf`, gated
119+
`run_tool`/`run_pipeline` with allowlist + sanitization + rate limits).
120+
121+
- **Caveat**: it speaks JSON-RPC over stdio, not a plain CLI, so wrap/invoke the server rather than
122+
shelling out. Open question whether this beats calling the underlying tools directly, given the
123+
launcher already exists. Evaluate before committing.
124+
- **Deps**: the MCP server (python/uv), kept behind the existing allowlist gate.
125+
- **Prior art**: 26zl/cybersec-toolkit.
126+
- **Effort**: medium.
127+
128+
---
129+
130+
## Notes
131+
132+
- **Quickshell version**: this config is pinned to a 0.2.1-era rev. Quickshell is pre-1.0, so verify
133+
`Process`/`StdioCollector` signal names and `Services.*` type APIs against the installed build
134+
before coding (the survey cited v0.2.1/v0.3.0 docs).
135+
- **Substrate**: every item above is `Process`/`StdioCollector` plus, where useful, native DBus
136+
service bindings (MPRIS, StatusNotifier, Notifications, UPower, PipeWire, PAM). No external glue.
137+
- **Refuted lead**: claims that the sh1zicus `ii` fork ships a Timer Manager and native
138+
ChatGPT/Gemini sidebar did not survive verification. Not prior art for those.
139+
140+
## Sources
141+
142+
- Quickshell docs — https://quickshell.org/docs/guide/introduction/
143+
- DankMaterialShell (Quickshell launcher + clipboard) — https://github.com/AvengeMedia/DankMaterialShell
144+
- PowerToys (Command Palette, Run, Advanced Paste) — https://github.com/microsoft/PowerToys
145+
- Raycast Quicklinks + placeholders — https://manual.raycast.com/quicklinks
146+
- Hyprland launchers — https://wiki.hypr.land/Useful-Utilities/App-Launchers/
147+
- cliphist — https://github.com/sentriz/cliphist
148+
- gh-dash — https://github.com/dlvhdr/gh-dash
149+
- Stretchly — https://github.com/hovancik/stretchly
150+
- Blink Eye — https://github.com/nomandhoni-cs/blink-eye
151+
- SketchyBar — https://github.com/FelixKratz/SketchyBar
152+
- cybersec-toolkit — https://github.com/26zl/cybersec-toolkit

0 commit comments

Comments
 (0)