# ryenski/omarchy-taildrop architecture

> Architecture diagram of the GitHub repository ryenski/omarchy-taildrop, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ryenski/omarchy-taildrop
- Repository: https://github.com/ryenski/omarchy-taildrop
- Video tour (about a minute): https://gitdiagram.com/ryenski/omarchy-taildrop/video

## Overview

Taildrop for Omarchy is a send-only share sheet for sending selected text, clipboard content, images, or files to a Tailscale device. The main workflow is to stage a payload, choose an available device, and send it through Taildrop. The README documents the QML-to-shell boundary and several integrations; source excerpts were provided only for peer parsing and the Nautilus menu, so some internal wiring is intentionally left unspecified.

Main entry points: [`send.sh`](https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh) (Shell commands), [`Taildrop.qml`](https://github.com/ryenski/omarchy-taildrop/blob/master/Taildrop.qml) (Share sheet UI), [`nautilus/taildrop.py`](https://github.com/ryenski/omarchy-taildrop/blob/master/nautilus/taildrop.py) (Nautilus menu), [`Model.js`](https://github.com/ryenski/omarchy-taildrop/blob/master/Model.js) (Peer parsing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sheet["Share sheet"]
  node_overlay["Share sheet UI<br/>[Taildrop.qml]"]
  node_peer_model["Peer parsing<br/>[Model.js]"]
end

subgraph group_payload["Payload handling"]
  node_commands["Shell commands<br/>[send.sh]"]
  node_clipboard_stage["Clipboard staging<br/>[send.sh]"]
  node_image_stage["History image staging<br/>[send.sh]"]
  node_file_picker["File chooser<br/>[send.sh]"]
  node_clipboard["System clipboard"]
  node_clipboard_history["Omarchy clipboard history"]
  node_chooser["System file chooser"]
end

subgraph group_transfer["Taildrop transfer"]
  node_transfer_cmd["File transfer<br/>[send.sh]"]
  node_tailscale["Tailscale CLI"]
end

subgraph group_integration["Desktop integrations"]
  node_nautilus["Nautilus menu<br/>[taildrop.py]"]
  node_setup["Plugin setup<br/>[send.sh]"]
  node_keybind["Shortcut setup<br/>[send.sh]"]
  node_shell["Omarchy shell"]
  node_nautilus_extension["Installed Nautilus extension"]
  node_bindings["Hyprland bindings"]
end

node_user(("User"))

node_user -->|"opens"| node_overlay
node_user -->|"selects files"| node_nautilus
node_nautilus -->|"summons overlay"| node_shell
node_overlay -->|"runs commands"| node_commands
node_commands -->|"parses status"| node_peer_model
node_commands -->|"stages clipboard"| node_clipboard_stage
node_clipboard_stage -->|"reads"| node_clipboard
node_commands -->|"stages image"| node_image_stage
node_image_stage -->|"reads"| node_clipboard_history
node_commands -->|"opens chooser"| node_file_picker
node_file_picker -->|"requests files"| node_chooser
node_commands -->|"sends payload"| node_transfer_cmd
node_transfer_cmd -->|"sends files"| node_tailscale
node_commands -->|"reads device status"| node_tailscale
node_commands -->|"runs setup"| node_setup
node_setup -->|"installs extension"| node_nautilus_extension
node_commands -->|"adds shortcut"| node_keybind
node_keybind -->|"appends binding"| node_bindings
node_overlay -->|"summons after picking"| node_shell

click node_overlay "https://github.com/ryenski/omarchy-taildrop/blob/master/Taildrop.qml"
click node_peer_model "https://github.com/ryenski/omarchy-taildrop/blob/master/Model.js"
click node_commands "https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh"
click node_clipboard_stage "https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh"
click node_image_stage "https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh"
click node_file_picker "https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh"
click node_nautilus "https://github.com/ryenski/omarchy-taildrop/blob/master/nautilus/taildrop.py"
click node_setup "https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh"
click node_keybind "https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh"
click node_transfer_cmd "https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_overlay,node_peer_model,node_user toneBlue
class node_commands,node_clipboard_stage,node_image_stage,node_file_picker,node_clipboard,node_clipboard_history,node_chooser toneAmber
class node_transfer_cmd,node_tailscale toneMint
class node_nautilus,node_setup,node_keybind,node_shell,node_nautilus_extension,node_bindings toneRose
```

## Components

### Share sheet

- [Share sheet UI](https://github.com/ryenski/omarchy-taildrop/blob/master/Taildrop.qml): `Taildrop.qml`
- [Peer parsing](https://github.com/ryenski/omarchy-taildrop/blob/master/Model.js): `Model.js`

### Payload handling

- [Shell commands](https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh): `send.sh`
- [Clipboard staging](https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh): `send.sh`
- [History image staging](https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh): `send.sh`
- [File chooser](https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh): `send.sh`
- **System clipboard**
- **Omarchy clipboard history**
- **System file chooser**

### Taildrop transfer

- [File transfer](https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh): `send.sh`
- **Tailscale CLI**

### Desktop integrations

- [Nautilus menu](https://github.com/ryenski/omarchy-taildrop/blob/master/nautilus/taildrop.py): `nautilus/taildrop.py`
- [Plugin setup](https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh): `send.sh`
- [Shortcut setup](https://github.com/ryenski/omarchy-taildrop/blob/master/send.sh): `send.sh`
- **Omarchy shell**
- **Installed Nautilus extension**
- **Hyprland bindings**

### Other components

- **User**

## Connections

- User → Share sheet UI: opens
- User → Nautilus menu: selects files
- Nautilus menu → Omarchy shell: summons overlay
- Share sheet UI → Shell commands: runs commands
- Shell commands → Peer parsing: parses status
- Shell commands → Clipboard staging: stages clipboard
- Clipboard staging → System clipboard: reads
- Shell commands → History image staging: stages image
- History image staging → Omarchy clipboard history: reads
- Shell commands → File chooser: opens chooser
- File chooser → System file chooser: requests files
- Shell commands → File transfer: sends payload
- File transfer → Tailscale CLI: sends files
- Shell commands → Tailscale CLI: reads device status
- Shell commands → Plugin setup: runs setup
- Plugin setup → Installed Nautilus extension: installs extension
- Shell commands → Shortcut setup: adds shortcut
- Shortcut setup → Hyprland bindings: appends binding
- Share sheet UI → Omarchy shell: summons after picking
