a13n
AI 에이전트를 만들고 클라우드에서 실행합니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Stream Deck app for Omarchy and Hyprland, written in Rust
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Written in Rust: a tiny background daemon drives the hardware, and a GTK4/libadwaita app lays out your keys.
uwsm-app, the same way Omarchy launches them.pw-play), with per-key volume.hl.dsp.focus({ workspace = "3" })) is passed straight to hyprctl dispatch. Classic syntax (workspace 3, movetoworkspace 2, togglefloating, fullscreen, killactive, exec …) is translated automatically on Hyprland versions that use a Lua config.omarchy theme set … and the deck re-renders instantly.~/.config/omadeck/, and imported icons are copied into it, so you can copy that folder to another machine.curl -LO https://github.com/thewizster/omadeck/releases/download/v0.3.0/omadeck-0.3.0-x86_64-linux.tar.gz
curl -LO https://github.com/thewizster/omadeck/releases/download/v0.3.0/SHA256SUMS
sha256sum -c SHA256SUMS
tar xzf omadeck-0.3.0-x86_64-linux.tar.gz && cd omadeck-0.3.0-x86_64-linux
scripts/install.sh
The installer uses the prebuilt binaries, enables the omadeckd user service and offers to set
up the udev rule (details below). If the deck isn't detected straight away, replug it once.
Coming soon: omarchy pkg add omadeck-bin from the Omarchy Package Repository. The package
is in review.
# Rust toolchain, if you don't have one yet
mise use -g rust@latest
git clone https://github.com/thewizster/omadeck && cd omadeck
scripts/install.sh
The script:
Cargo.lock), or uses the prebuilt ones from a release tarball, and installs omadeck + omadeckd to ~/.local/bin;omadeckd systemd user service, which starts with your graphical session;sudo commands, and runs them only if you answer y.To remove omadeck, run scripts/uninstall.sh. It also removes the Omarchy bar widget, and leaves your config in place.
omadeck speaks to decks through the elgato-streamdeck crate.
| Model | Status |
|---|---|
| Stream Deck (V2), 15 keys | ✅ Tested |
| Stream Deck Original / MK.2, 15 keys | Expected to work |
| Stream Deck Mini / Mini MK.2, 6 keys | Expected to work |
| Stream Deck XL / XL V2, 32 keys | Expected to work |
| Stream Deck Neo, 8 keys | Keys expected to work; info screen and touch keys unsupported |
| Stream Deck +, 8 keys | Keys expected to work; dials and touch strip unsupported |
| Stream Deck Pedal | Not supported (no display) |
Got one of the untested models? Please file a hardware report, whether it works or not.
Open omadeck from the launcher (Super+Space). On first run you get a starter layout:
| Row | Keys |
|---|---|
| 1 | Terminal · Browser · Files · Screenshot · omarchy.org |
| 2 | Workspaces 1–5 (Hyprland) |
| 3 | Mute · Night light · Next wallpaper · a sound · Lock |
Click any key to change it, or clear it with the trash button. The ▶ button tests the action without touching the deck.
The switcher above the deck picks the page you're editing; + adds a page, and the pencil and trash buttons rename or delete it. To make a folder, set a key to Open page and click New page: you get a page with a Back key already in place, and the key gets a folder symbol. Open it with › to fill it.
On the deck, Go back returns to the page you came from, or Home. Renaming a page updates every key that opens it.
A key can also do something when you let go of it: set When released in the editor. With
voxtype (Omarchy's dictation), a key that runs
voxtype record start when pressed and voxtype record stop when released gives you
push-to-talk: hold it, speak to your AI agent, let go. If the deck is unplugged or the service
stops while you're holding a key, it's let go then, so nothing stays switched on.
On Omarchy, the app offers once to add an omadeck icon to the bar. It shows whether your deck
is connected and which page it's on, and opens omadeck when clicked. Turn it on or off any time
with Show in Omarchy bar in the app's settings (or omarchy plugin disable dev.omadeck).
omadeckd run the daemon (normally via systemd)
omadeckd list show connected decks
omadeckd press 3 [PAGE] run key 3's action, then its release action (keys count from 0)
omadeckd snapshot x.png [PAGE] render the layout to an image
omadeckd status [--follow] the deck's state as Waybar-style JSON (keeps printing with --follow)
omadeckd press is handy in Hyprland bindings and scripts, for example to share one action between a key and a keyboard shortcut.
The config file is ~/.config/omadeck/config.toml. The app edits it for you, but it's plain TOML and safe to edit by hand, even while the app is open; the daemon and the app reload it as soon as you save. If the app can't read your edit, it shows the error and leaves the file alone until you fix it. See examples/config.toml.
Each time the app opens, and before it deletes a page, it keeps a copy of config.toml in ~/.local/state/omadeck/backups (the newest 20). Deleting a page or clearing a key can also be undone from the notice that pops up.
brightness = 70
[style]
follow_theme = true # colours from the active Omarchy theme
[[key]]
index = 0 # left-to-right, top-to-bottom, from 0
label = "Terminal"
icon = "icons/utilities-terminal.png" # relative to ~/.config/omadeck
[key.action]
type = "app"
command = "xdg-terminal-exec" # or a desktop id like "firefox.desktop"
[[key]]
index = 10
label = "Mute"
glyph = "\U000F075F" # Nerd Font symbol (or "f075f" / "U+F075F")
[key.action]
type = "app"
command = "omarchy audio output volume mute-toggle"
[[key]]
index = 4
label = "Media"
glyph = "\U000F024B"
[key.action]
type = "page" # open another page
page = "Media"
[[page]] # top-level [[key]]s are the Home page; more pages go here
name = "Media"
[[page.key]]
index = 0
label = "Back"
[page.key.action]
type = "back" # previous page, or Home
Action types:
type | Fields |
|---|---|
app | command |
script | path, terminal |
sound | file, volume (0.0–1.5) |
url | url |
hyprland | dispatch |
page | page (a page name) |
back |
A key's [key.on_release] (or [page.key.on_release]) takes any of these except page and
back, and runs when the key is let go.
Per-key look overrides are background, label_color and show_label.
crates/
omadeck-core/ config, Omarchy theme, key renderer, actions, IPC types
omadeckd/ daemon: owns the USB device, paints keys, runs actions
omadeck-gui/ GTK4 + libadwaita configurator (binary: omadeck)
packaging/ systemd unit, udev rule, desktop entry, AUR PKGBUILDs
scripts/ install / uninstall / package a release
site/ project website: static HTML/CSS/JS with an interactive demo
config.toml (atomically). The daemon watches it, plus Omarchy's theme state in ~/.local/state/omarchy/current, and repaints.omadeck-core is shared, so the previews in the app are rendered by the same code that paints the hardware.$XDG_RUNTIME_DIR/omadeck.sock. The app uses this for its status line, press-to-select and following the deck's page, and sends back the page you're editing so the deck can show it.systemctl --user status omadeckd (press q to leave its pager, or add --no-pager). Logs: journalctl --user -u omadeckd -f.packaging/70-omadeck.rules → /etc/udev/rules.d/), then replug it again.streamdeck-ui first.Ideas, roughly in order; docs/ROADMAP.md has the details. Want one sooner? Open an issue; see CONTRIBUTING.
omadeck was built on Omarchy by Raymond Brady together with Claude Code (Anthropic's AI coding agent), as a showcase of what that pairing can do. Every change goes through the same checks as any contribution: rustfmt, clippy -D warnings, tests, CI and testing on real hardware.
MIT © Raymond Brady