Commit graph

21 commits

Author SHA1 Message Date
3c31209ff1 feat: add buildCopyCommand for safe clipboard command construction
Uses validateClipboardCmd to reject untrusted input and properly escapes
single quotes in text to prevent shell injection.
2026-05-20 10:11:57 +00:00
a86d5e279d feat: add validateClipboardCmd with whitelist-based input validation
Prevents shell injection by only allowing known-safe clipboard commands
(dms cl copy, wl-copy, clipmanctl copy, none).
2026-05-20 10:08:59 +00:00
0083fe7dc2 docs: document intentional propagateComposedEvents: true on right-click MouseArea 2026-05-19 04:40:49 +00:00
bd9df03b5b fix: find active exit node from Peer map instead of CurrentExitNode 2026-05-18 22:10:37 +00:00
303256d646 Write README with install instructions and update author 2026-05-18 21:17:54 +00:00
6129b09943 feat: add error handling and toast notifications (#8)
- Add errorMessage() utility for user-friendly toast messages
- Show toast on tailscale up/down/set/status failures
- Detect missing tailscale binary (exit code 127)
- Guard toggleTailscale and setExitNode when binary unavailable
- Show 'Tailscale not available' in popout when binary missing
2026-05-18 20:53:32 +00:00
c9d1baf7c4 fix: remove ESM export from lib.js for QML compatibility
QML's JS engine does not support ES module export/import syntax.
Replace bare export with a CommonJS guard that only runs under Node.js,
so the plugin loads in QML while tests still work.
2026-05-18 18:39:39 +00:00
0c2376b3bb feat: add exit node selection to Tailscale widget
- Extract peer parsing and exit-node command logic into lib.js
- Add ↗ button on peers that are ExitNodeOption candidates
- Highlight active exit node in primary color
- Add clear (×) button next to current exit node label
- Add unit tests for parsePeers and makeExitNodeCommand
2026-05-18 18:27:41 +00:00
2d438415ee fix: use single-arg ToastService.showInfo for copy toast 2026-05-18 05:33:42 +00:00
d8bd3c6c30 feat: auto-detect clipboard tool at startup (#6)\n\n- Priority: dms cl copy → wl-copy → clipmanctl copy → none\n- Show error toast if no clipboard tool is found\n- statusCheck runs after clipboard detection completes 2026-05-18 05:08:15 +00:00
2c29fcc0b6 feat: add click-to-copy for peer hostname and IP (#6)\n\n- Use Process (copyProcess) instead of unimported Quickshell.execDetached\n- MouseArea on hostname and IP in peer list delegate\n- Toast confirmation on copy 2026-05-17 23:00:22 +00:00
3a8fa8abd1 fix: parse Peer (singular) key, remove clipboard for now 2026-05-17 22:36:10 +00:00
0d3f500a2c feat: add peer list with click-to-copy (#6)
- Parse Peers from tailscale status --json into a model
- Add ListView with hostname/IP rows below status row
- Click hostname or IP to copy via wl-copy + toast confirmation
- Increase popout height to 400 to accommodate peer list
- Online peers shown in primary color, offline in surfaceVariantText
2026-05-17 21:59:59 +00:00
f980f4da21 fix(tailscalectl): apply all three click/layout fixes from working config 2026-05-17 21:32:46 +00:00
0743f5450e fix(tailscalectl): remove MouseArea from pills, add root-level right-click handler 2026-05-17 21:23:01 +00:00
821ede2bea fix(tailscalectl): let PluginComponent handle left-click for popout 2026-05-17 21:18:02 +00:00
c3f63873ac feat(tailscalectl): add popout skeleton with header row 2026-05-17 21:11:14 +00:00
77430ec0d4 fix(tailscalectl): propagate left-click through MouseArea to open popout
Add propagateComposedEvents and left-button handling to both
horizontal and vertical MouseArea blocks. Left-click is forwarded
to PluginComponent (mouse.accepted = false) so it opens popoutContent.
Right-click still toggles Tailscale connection.

Closes #10
2026-05-15 19:28:37 -07:00
8dd7562d35 feat(tailscalectl): add periodic status polling and reactive state
Add Timer (5s interval) that runs tailscale status --json, parsing
BackendState, Self.TailscaleIPs[0], and CurrentExitNode.HostName into
isConnected, tailscaleIP, and currentExitNode properties. Parse errors
surface via ToastService.showError. Initial check runs on load.

Closes #4
2026-05-15 19:19:01 -07:00
9c691ccc64 feat(tailscalectl): add bar pill with icon and right-click toggle
Implement connected/disconnected icon (vpn_key/vpn_key_off) in
both horizontal and vertical bar orientations. Right-click triggers
tailscale up / tailscale down via Process. Icon color follows
DMS theme (primary when connected, surfaceText when disconnected).

Closes #3
2026-05-15 19:14:49 -07:00
778f1969e0 feat(tailscalectl): add initial DMS widget plugin scaffolding
Minimal loadable DMS widget skeleton with plugin.json manifest
and TailscaleWidget.qml component. Symlinked, enabled, and loaded
cleanly in Dank Material Shell.

References #1, #2
2026-05-15 19:10:50 -07:00