dms_tailscalectl/README.md
vybe 0b80f5cdc8 feat: extract UI strings to lib.js; harden clipboard to direct argv, drop clipmanctl (#34, #49)
- safeClipboardTools now only dms + wl-copy (clipmanctl removed as niche optional history manager)
- buildCopyCommand now returns pure argv arrays (no sh -c, no escaping, eliminates future injection risk)
- Added getStrings() for centralised user-facing strings (prep for real i18n)
- Updated all tests (TDD) and README
- All 29 tests pass

Written by AI agent working for @jtmorris. Model: Grok build-0.1.
2026-05-22 06:33:08 +00:00

90 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tailscale Widget Plugin for Dank Material Shell
A lightweight widget plugin that shows Tailscale connectivity status on the Dank Bar with quick controls for toggling connection, switching exit nodes, and copying peer addresses.
![Tailscale Widget v0.1.0](resources/dms_tailscalectl_v0.1.0.png)
## Features
- **Status icon** in the bar — `vpn_key` when connected, `vpn_key_off` when disconnected
- **Right-click** to toggle Tailscale on/off
- **Left-click** to open a popout showing:
- Your current Tailscale IP
- Active exit node (with clear button)
- Peer list with hostnames and IPs
- **Click-to-copy** any hostname or IP to clipboard
- **Exit node selection** — click `↗` on any exit-node-capable peer to route through it
- **Auto-refresh** — status polls every 5 seconds
- **Toast notifications** for all errors
## Requirements
- Dank Material Shell installed and running
- `tailscale` CLI available on `PATH`
- A clipboard tool (`dms` or `wl-copy`)
## Installation
1. Clone or copy this repository so that the `tailscalectl/` directory is available:
```
git clone <repo-url>
```
2. Place the `tailscalectl/` directory into your DMS plugins directory:
```
mv tailscalectl ~/.config/dankmaterialshell/plugins/
```
The directory must contain:
```
tailscalectl/
├── plugin.json
├── TailscaleWidget.qml
└── lib.js
```
3. Reload the plugin:
```
dms ipc call plugins reload tailscalectl
```
4. The Tailscale icon should appear on your Dank Bar. If connected, it shows a filled key icon; if disconnected, an outlined key icon.
## Usage
| Action | How |
|---|---|
| Toggle connection | Right-click the bar icon |
| Open popout | Left-click the bar icon |
| Copy hostname/IP | Click the text in the peer list |
| Set exit node | Click `` next to an exit-node peer |
| Clear exit node | Click `×` next to "Exit node: ..." or click `` on current node |
## Plugin Manifest
```json
{
"id": "tailscalectl",
"name": "Tailscale",
"description": "Tailscale status and controls on the Dank Bar",
"version": "0.1.0",
"author": "John Morris & Vybe (AI Slop... er... Coding Assistant)",
"icon": "vpn_key",
"type": "widget",
"component": "./TailscaleWidget.qml",
"permissions": ["settings_read", "settings_write", "process"]
}
```
## Testing
```bash
node --test test/lib.test.js
```
## License
See [LICENSE](LICENSE).