1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# deck-it
Turns an Android tablet into a second monitor, a stream-deck and an always-on
control surface for a Slackware Hyprland desktop.
A web page on the tablet has tabs for system stats, music, windows, OBS and
LLM/build status. A second headless output is streamed to AVNC as an extra
monitor. Everything runs on the PC and reaches the tablet through `adb reverse`;
there is no cloud, account or app-store install.
## Requirements
**PC**
- Slackware-current with Hyprland (Lua or classic config)
- Python 3.11+ (`python3`)
- `websocket-client` (obs-websocket)
- `adb`, `wayvnc`, `openssl`
- `playerctl`, `wpctl` (PipeWire), `wtype`
- optional: `qrencode` for Wi-Fi pairing
**Tablet**
- Android with USB debugging or Wireless debugging
- [AVNC](https://github.com/gujjwal00/avnc) for the extended display
- a Chromium-based browser for the web app (install it from the menu)
## Install
```sh
git clone https://git.danix.xyz/deck-it ~/Programming/GIT/deck-it
ln -s ~/Programming/GIT/deck-it/deck-it ~/bin/deck-it
deck-it
```
The launcher creates the headless output, starts wayvnc and the server, tunnels
them to the tablet, and opens the dashboard and AVNC. `deck-it stop` tears it
down. For the dashboard alone, set `enabled = false` under `[display]`: no
headless output, wayvnc or AVNC.
Over Wi-Fi, pair once and pass the tablet's Wireless debugging address:
```sh
deck-it pair
deck-it wifi 192.168.1.50:41234
```
Keystone's settings window has a deck-it page: a Start at login switch (it
adds `deck-it wifi --wait` to hypr-theme's autostart) and every config key,
launchers included, with a Restart button to apply a save.
## Usage
- Tabs: **Dashboard** (draggable/resizable cards, each foldable to its title
bar), **Windows**, **OBS**, **K1C**. Swipe the content sideways to change
tab; ⟳ at the top right reloads the page.
- `deck-it install` prints the `exec-once` line for USB autostart.
- `config.toml` holds the defaults: display, Wi-Fi address, workspaces,
launchers (desktop ids), OBS websocket, llm-cost-dashboard URL, build VM
host, hardware overrides. `~/.config/deck-it/config.toml` overrides any of
them key by key and needs only what differs; keystone writes it.
- The OBS tab is a stream-deck: scenes, sources, audio sliders, transitions.
Long-press a source to open its properties dialog in OBS.
- The Windows tab has workspaces, icon launchers, and a per-window `⋮` menu to
close it or move it to another desktop.
- The K1C tab follows a Klipper printer through Moonraker (`[k1c] url`):
state, progress with the slicer's model preview, temperatures, camera, and
a red emergency stop that fires on a press and hold.
- The screen stays on while the dashboard is in front.
## License
Copyright (C) 2026 Danilo M. <danix@danix.xyz>
GPLv2 only. See [LICENSE](LICENSE) for the full text. Portions derived from
tabdeck (MIT) are noted in [LICENSE.tabdeck](LICENSE.tabdeck) and
[NOTICE](NOTICE).
## Development Approach
This project is developed using AI-assisted tools. Code is generated with the help of AI based on human-provided specifications, design decisions, and iterative feedback.
All contributions are reviewed, tested, and curated by the maintainer before being included in the codebase. AI is used as a productivity and exploration tool, while human oversight remains central to all decisions.
The goal is to combine the flexibility of AI-assisted development with standard open-source practices such as transparency, review, and accountability.
|