A DankMaterialShell (Quickshell) plugin that manages your Tailscale network from the bar — a Linux stand-in for the macOS menu-bar app and settings utility.
Bar widget — Tailscale icon showing connection state, with a shield badge when an exit node is active and an error badge when login is required or tailscaled is down.
Drop-down (click the bar icon)
- Connect / disconnect toggle
- Current account, one-click switch to the next account
- Exit node settings dropdown for LAN access and advertising this device as an exit node
- Device list — click any device to copy its Tailscale IP (or MagicDNS name) to the clipboard, or hover and hit the send button to share files via Taildrop
- Click a device's exit node badge to select it as your exit node; click its active badge to stop using an exit node
- Check-for-incoming-files button (when auto-accept is off)
- "Open Manager" button
Manager (popup)
- Devices — filterable list of every device on the tailnet with online status, OS, owner, subnet/exit-node badges; click to copy address, or use the send button to share files via Taildrop
- Click an exit node badge to select that device without switching tabs; click its active badge to stop using an exit node
- Exit Nodes — pick or clear the exit node, allow-LAN-access toggle, advertise this device as an exit node
- Routes — accept-routes toggle, advertise subnet routes from this device, list of subnet routers on the tailnet
- DNS — "Use Tailscale DNS" toggle, current DNS configuration (MagicDNS state, suffix, this device's DNS name, search domains, split-DNS routes), and a DNS lookup tool that resolves names through the tailnet resolver
- Accounts — switch between logged-in accounts, add a new account (opens browser sign-in)
Taildrop (file transfer)
- Send — hover any online device (in the drop-down or the Manager's Devices tab) and click the send button; a dialog lets you add files and send them with
tailscale file cp - Receive — turn on Auto-accept incoming files to save arriving files to your download folder automatically, or leave it off and use the drop-down's check-for-files button to pull them on demand
- Requires Taildrop to be enabled for your tailnet in the Tailscale admin console — it's an alpha, off-by-default feature. Until it's on, the send/receive controls stay hidden.
Control center tile — Tailscale toggle in the DMS control center.
-
DankMaterialShell ≥ 1.4.0
-
tailscaleCLI on DMS'sPATH, withtailscaledrunning -
Your user set as the Tailscale operator for routine controls. Use Grant operator in the widget, or run:
sudo tailscale set --operator=$USER
NixOS and custom installations: Grant operator discovers Tailscale's
absolute path on each click and sets TS_BE_CLI=1 to handle NixOS's combined
CLI/daemon package. It requires pkexec, /usr/bin/env, and a working polkit
authentication agent.
If Tailscale works in a terminal but the widget cannot find it, add its directory
to the PATH of the desktop session or service that launches DMS, then restart
DMS. A terminal-only alias or shell configuration is not enough.
Custom polkit rules: No policy changes are needed with normal administrator
authentication. Rules matching the Tailscale executable may no longer apply to
Grant operator, because polkit now authorizes env. Use the normal password
prompt or the manual command below. Do not change a passwordless Tailscale rule
to allow env; that would permit arbitrary commands. See the
pkexec authorization documentation.
Manual fallback: Run command -v tailscale in your terminal and substitute
its absolute path below:
sudo /usr/bin/env TS_BE_CLI=1 /absolute/path/to/tailscale set --operator="$USER"From the plugin browser — search for Dankscale in DMS Settings → Plugins and install it.
Manually — clone into your DMS plugins directory:
git clone https://github.com/dwright134/dms-dankscale ~/.config/DankMaterialShell/plugins/DankscaleThen enable Dankscale under Settings → Plugins.
- Refresh interval — how often
tailscale statusis polled (default 5 s) - Click copies — Tailscale IPv4 (default) or MagicDNS name
- Show offline devices — include offline devices in the drop-down list
- Auto-accept incoming files — receive Taildrop files in the background (default off)
- Download folder — where received files are saved; blank uses your
~/Downloads
Everything is driven by the tailscale CLI — no daemons, no external helpers:
tailscale status --json— device list, connection state, exit nodetailscale debug prefs— accept-routes, advertised routes, exit-node and accept-dns prefstailscale dns status --json— MagicDNS state, suffix, search domains, split-DNS routestailscale dns query <name> [type]— DNS lookup tooltailscale switch --list/tailscale switch <account>— accountstailscale up/down— connect / disconnecttailscale set --exit-node=… --accept-routes=… --advertise-routes=… --accept-dns=…— settingstailscale login— add account (auth URL opens in your browser automatically)tailscale file cp <files> <device>:— send files with Taildroptailscale file get [--loop] <dir>— receive Taildrop files (auto-accept runs it with--loop)
With the popout and Manager closed, only tailscale status --json is polled
at the configured refresh interval. Preferences, accounts, and DNS details are
loaded at startup, when either UI opens, after actions, and when status detects
a connection or account change. While either UI is open, those details also
refresh at the configured interval.

