{"id":31498955,"url":"https://github.com/1999azzar/tailscale_receiver","last_synced_at":"2025-10-02T16:16:05.101Z","repository":{"id":309944714,"uuid":"1035611655","full_name":"1999AZZAR/tailscale_receiver","owner":"1999AZZAR","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-14T17:13:50.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-14T19:16:23.464Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/1999AZZAR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-10T19:05:12.000Z","updated_at":"2025-08-14T17:13:53.000Z","dependencies_parsed_at":"2025-08-14T19:17:36.075Z","dependency_job_id":"69f6ee35-85f7-49bf-933b-b5ff96174787","html_url":"https://github.com/1999AZZAR/tailscale_receiver","commit_stats":null,"previous_names":["1999azzar/tailscale_receiver"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/1999AZZAR/tailscale_receiver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1999AZZAR%2Ftailscale_receiver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1999AZZAR%2Ftailscale_receiver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1999AZZAR%2Ftailscale_receiver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1999AZZAR%2Ftailscale_receiver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/1999AZZAR","download_url":"https://codeload.github.com/1999AZZAR/tailscale_receiver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1999AZZAR%2Ftailscale_receiver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278031737,"owners_count":25918421,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-02T02:00:08.890Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-02T16:16:03.131Z","updated_at":"2025-10-02T16:16:05.089Z","avatar_url":"https://github.com/1999AZZAR.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Tailscale Taildrop: Auto‑Receive and Send\n\nAutomated Taildrop file reception as a reliable systemd service, plus a convenient sender with a device picker and Dolphin context‑menu integration.\n\n### Table of Contents\n\n- [Overview](#overview)\n- [Quick Start](#quick-start)\n- [Features](#features)\n- [Comparison of File Sharing Methods](#comparison-of-file-sharing-methods)\n- [Quick Setup Examples](#quick-setup-examples)\n  - [NFS](#nfs)\n  - [SFTP](#sftp)\n  - [SMB](#smb)\n- [Requirements](#requirements)\n- [Taildrop Setup Requirements](#taildrop-setup-requirements)\n- [Install](#install)\n  - [What Gets Installed](#what-gets-installed)\n  - [Verify Installation](#verify-installation)\n  - [Reinstall/Update](#reinstallupdate)\n- [Configuration](#configuration)\n  - [Receiver Settings](#receiver-settings)\n  - [Sender Options](#sender-options)\n- [Usage](#usage)\n  - [Manage the Service](#manage-the-service)\n  - [Send Files](#send-files)\n- [Troubleshooting](#troubleshooting)\n- [Security Notes](#security-notes)\n- [Advanced Configuration](#advanced-configuration)\n- [Uninstall](#uninstall)\n- [Integration with Other Tools](#integration-with-other-tools)\n  - [Contributing](#contributing)\n- [How It Works](#how-it-works)\n- [License](#license)\n- [Changelog](#changelog)\n\n---\n\n### Overview\n\n- Runs a background service that continuously accepts Taildrop files into your `Downloads/tailscale` folder and notifies you.\n- Includes a sender script with GUI picker (kdialog/zenity/whiptail/CLI) and Dolphin right‑click integration.\n- Designed for Linux systems using systemd.\n\n### Quick Start\n\n```bash\n# 1) Make scripts executable\nchmod +x install.sh uninstall.sh tailscale-receive.sh tailscale-send.sh\n\n# 2) Install (you will be asked which user should receive files)\nsudo ./install.sh\n\n# 3) Check service and logs\nsudo systemctl status tailscale-receive.service\nsudo journalctl -u tailscale-receive.service -f\n\n# 4) Optional: test sender\n/usr/local/bin/tailscale-send.sh --help\n```\n\nNotes:\n\n- Taildrop must be enabled in your tailnet admin.\n- Tailscale must be installed and logged in on this device.\n\n### Features\n\n- Automated file reception via Taildrop\n- Reliable systemd service with auto‑restart\n- Desktop notifications on receipt (notify‑send)\n- Automatic ownership correction to your user\n- Health checks (internet + tailscale running)\n- Smart sender with device picker and Dolphin integration\n- Robust error handling and helpful messages\n\n### Comparison of File Sharing Methods\n\n| Feature                 | `tailscale_receiver`                                                                                   | NFS (Network File System)                                                                        | FTP (File Transfer Protocol)                                                         | SMB (Server Message Block)                                                  |\n|:----------------------- |:------------------------------------------------------------------------------------------------------ |:------------------------------------------------------------------------------------------------ |:------------------------------------------------------------------------------------ |:--------------------------------------------------------------------------- |\n| Method Used             | Taildrop (peer‑to‑peer over secure Tailscale network)                                                  | Mounting shares (remote directories appear local)                                                | Client‑server (upload/download to a server)                                          | Network share access (shared folders/resources)                             |\n| Ease of Use             | Easy. Designed for simplicity and automation in a Tailscale network.                                   | Moderate–Difficult. Requires server and client config, `/etc/exports`, firewall, automount, etc. | Easy. Many graphical clients; SFTP/FTPS variants common.                             | Easy. Native on Windows; good support via Samba on Linux and macOS.         |\n| Security                | High. Tailscale’s end‑to‑end encryption and identity.                                                  | Moderate. Can be complex; often relies on LAN isolation, Kerberos, or TLS extensions.            | Low by default (FTP is plaintext). Use SFTP (over SSH) or FTPS for security.         | Moderate–High. SMBv3 supports encryption/signing; depends on configuration. |\n| Performance             | Good. Limited by Tailscale overlay and path between peers.                                             | High. Excellent on LAN; kernel‑level I/O.                                                        | Good. Typically adequate for transfers; latency‑sensitive control channel.           | High. Very fast on LAN; improved with SMBv3 multichannel and modern stacks. |\n| Use Case                | Securely and automatically receive files from your Tailnet devices; personal and small team workflows. | Share directories as if local across Unix/Linux systems; POSIX semantics.                        | Simple uploads/downloads; legacy integrations; public file distribution (anonymous). | Windows file/print shares; mixed‑OS LAN environments; AD integration.       |\n| Platform Support        | Linux (scripts target `systemd`), works with any Tailnet devices as senders.                           | Primarily Linux/Unix; clients exist for other OSes.                                              | Cross‑platform (FTP/SFTP/FTPS clients abundant).                                     | Primarily Windows; widely supported on Linux (Samba) and macOS.             |\n| Setup Complexity        | Low. Install and choose user; no port forwarding or firewall tweaks.                                   | Medium–High. Export lists, uid/gid mapping, firewall rules.                                      | Low–Medium. Stand up an FTP/SFTP server, manage users/keys, open ports.              | Medium. Configure Samba/Windows shares, permissions, and firewall.          |\n| NAT/Firewall Traversal  | Excellent. Uses Tailscale’s NAT traversal; no inbound ports.                                           | Poor–Moderate. Usually LAN only or needs VPN/ports.                                              | Moderate. Requires open ports (20/21 for FTP, 22 for SFTP, 990/989 for FTPS).        | Moderate. Requires open ports (e.g., 445), often LAN or VPN.                |\n| Identity/Access Control | Tailnet identity; access scoped to your devices.                                                       | OS‑level users/groups; Kerberos/LDAP possible.                                                   | Local server accounts or system users/SSH keys.                                      | AD/LDAP or local users; granular share/file ACLs.                           |\n| Offline Behavior        | Queue on sender; receiver processes on next loop when online.                                          | Not applicable; mount must be reachable.                                                         | Server must be reachable; clients retry/reconnect.                                   | Server must be reachable; clients retry/reconnect.                          |\n| Best For                | Quick, secure, zero‑exposure transfers within a personal/team Tailnet.                                 | Seamless remote filesystem access and POSIX workflows.                                           | Interop with legacy systems and simple public distribution via hardened variants.    | Windows‑centric networks needing shared folders and permissions.            |\n\n### Quick Setup Examples\n\nThese are intentionally minimal to illustrate the moving parts. Harden and tailor for your environment.\n\n#### NFS\n\nServer (Linux):\n\n```bash\nsudo apt install nfs-kernel-server\necho \"/srv/share 192.168.0.0/24(rw,sync,no_subtree_check)\" | sudo tee -a /etc/exports\nsudo mkdir -p /srv/share \u0026\u0026 sudo chown $USER:$USER /srv/share\nsudo exportfs -ra\nsudo systemctl enable --now nfs-server\n```\n\nClient (Linux):\n\n```bash\nsudo apt install nfs-common\nsudo mkdir -p /mnt/share\nsudo mount -t nfs4 nfs-server:/srv/share /mnt/share\n# Optional persistent mount in /etc/fstab:\n# nfs-server:/srv/share  /mnt/share  nfs4  defaults,_netdev  0  0\n```\n\n#### SFTP\n\nServer (Linux, OpenSSH):\n\n```bash\nsudo apt install openssh-server\nsudo systemctl enable --now ssh\n# Create a user and directory for uploads\nsudo adduser sftpuser\nsudo -u sftpuser mkdir -p /home/sftpuser/uploads\n# Optional chrooted SFTP subsystem (advanced): edit /etc/ssh/sshd_config and add a Match block\n```\n\nClient:\n\n```bash\n# Upload\nsftp sftpuser@server \u003c\u003c'EOF'\nput /path/to/local/file /home/sftpuser/uploads/\nEOF\n# Or using scp (over SSH)\nscp /path/to/local/file sftpuser@server:/home/sftpuser/uploads/\n```\n\n#### SMB\n\nServer (Linux via Samba):\n\n```bash\nsudo apt install samba\nsudo mkdir -p /srv/samba/share \u0026\u0026 sudo chown $USER:$USER /srv/samba/share\nsudo bash -c 'cat \u003e\u003e/etc/samba/smb.conf' \u003c\u003c'SMB'\n[public]\n   path = /srv/samba/share\n   browseable = yes\n   read only = no\n   guest ok = yes\nSMB\nsudo systemctl restart smbd nmbd\n# Optional user mapping (non-guest):\n# sudo smbpasswd -a $USER\n```\n\nClient:\n\n```bash\n# Linux mount\nsudo apt install cifs-utils\nsudo mkdir -p /mnt/smb\nsudo mount -t cifs //server/public /mnt/smb -o guest,uid=$(id -u),gid=$(id -g)\n\n# Windows\n# Use File Explorer → \\\\server\\public\n```\n\n### Requirements\n\n- Linux with systemd (Ubuntu/Debian/Fedora/Arch, etc.)\n- Tailscale installed and logged in\n- Root privileges for install/uninstall\n- `notify-send` (usually part of libnotify; optional on headless)\n- For sending features:\n  - One of: `kdialog`, `zenity`, or `whiptail` (optional; CLI fallback available)\n  - `jq` (optional) for robust device detection\n  - KDE Plasma + Dolphin (optional) for context menu\n\n### Taildrop Setup Requirements\n\n1) Enable Taildrop in your tailnet admin\n   \n   ```bash\n   # Visit your admin console and enable \"Send Files\"\n   ```\n\n2) Verify Tailscale status\n   \n   ```bash\n   tailscale status\n   ```\n\n3) Optional: basic Taildrop smoke test\n   \n   ```bash\n   # List pending receives\n   tailscale file get\n   \n   # Send to another device (replace device-name)\n   tailscale file cp /path/to/test/file device-name:\n   ```\n\n4) Allow your user to send without sudo (recommended)\n   \n   ```bash\n   sudo tailscale set --operator=$USER\n   ```\n\n### Install\n\n1) Obtain the files (clone or download). Place scripts in one directory.\n2) Make scripts executable:\n   \n   ```bash\n   chmod +x install.sh uninstall.sh tailscale-receive.sh tailscale-send.sh\n   ```\n3) Run the installer (asks for your target user and configures automatically):\n   \n   ```bash\n   sudo ./install.sh\n   ```\n\n#### One‑Line Install (curl/wget)\n\nUsing curl:\n\n```bash\nbash -c 'set -euo pipefail; tmp=$(mktemp -d); cd \"$tmp\"; \\\nfor f in install.sh tailscale-receive.sh tailscale-send.sh; do \\\n  curl -fsSLO \"https://raw.githubusercontent.com/1999AZZAR/tailscale_receiver/master/$f\"; \\\ndone; chmod +x install.sh tailscale-receive.sh tailscale-send.sh; sudo ./install.sh'\n```\n\nUsing wget:\n\n```bash\nbash -c 'set -euo pipefail; tmp=$(mktemp -d); cd \"$tmp\"; \\\nwget -q https://raw.githubusercontent.com/1999AZZAR/tailscale_receiver/master/install.sh \\\n         https://raw.githubusercontent.com/1999AZZAR/tailscale_receiver/master/tailscale-receive.sh \\\n         https://raw.githubusercontent.com/1999AZZAR/tailscale_receiver/master/tailscale-send.sh; \\\nchmod +x install.sh tailscale-receive.sh tailscale-send.sh; sudo ./install.sh'\n```\n\n#### What Gets Installed\n\n| Item               | Path                                                        | Purpose                                      |\n| ------------------ | ----------------------------------------------------------- | -------------------------------------------- |\n| Receiver script    | `/usr/local/bin/tailscale-receive.sh`                       | Auto‑accept Taildrop files                   |\n| Systemd unit       | `/etc/systemd/system/tailscale-receive.service`             | Run service at boot; auto‑restart            |\n| Sender script      | `/usr/local/bin/tailscale-send.sh`                          | Interactive Taildrop sender                  |\n| Dolphin (KF6) menu | `/usr/share/kio/servicemenus/tailscale-send.desktop`        | Right‑click \"Send to device using Tailscale\" |\n| Dolphin (KF5) menu | `/usr/share/kservices5/ServiceMenus/tailscale-send.desktop` | Same for KF5                                 |\n\nSystemd details:\n\n- Type=simple; runs as root; `Restart=on-failure`; `After=network-online.target tailscale.service`.\n- Logs: `journalctl -u tailscale-receive.service`.\n\n#### Verify Installation\n\n```bash\nsudo systemctl status tailscale-receive.service\n/usr/local/bin/tailscale-send.sh --help\nls /usr/share/kio/servicemenus/tailscale-send.desktop || true\nls /usr/share/kservices5/ServiceMenus/tailscale-send.desktop || true\n```\n\n#### Reinstall/Update\n\nInteractive (default):\n\n```bash\nsudo ./install.sh\n```\n\nNon‑interactive:\n\n```bash\nNONINTERACTIVE=true sudo ./install.sh\n```\n\nBackups of prior install are saved to `/tmp/tailscale-receiver-backup-YYYYMMDD-HHMMSS/`.\n\n### Configuration\n\n#### Receiver Settings\n\nThe installer configures these automatically.\n\n| Variable     | Meaning                                         | Example                             |\n| ------------ | ----------------------------------------------- | ----------------------------------- |\n| `TARGET_DIR` | Destination directory for received files        | `/home/\u003cuser\u003e/Downloads/tailscale/` |\n| `FIX_OWNER`  | User to own the files and receive notifications | `\u003cuser\u003e`                            |\n\nTo change later, edit `/usr/local/bin/tailscale-receive.sh` and restart the service.\n\n#### Sender Options\n\nEnvironment variables that influence the sender:\n\n| Variable         | Purpose                                               | Example              |\n| ---------------- | ----------------------------------------------------- | -------------------- |\n| `DIALOG_TOOL`    | Force picker (`kdialog`, `zenity`, `whiptail`, `cli`) | `DIALOG_TOOL=zenity` |\n| `DEBUG`          | Verbose output                                        | `DEBUG=1`            |\n| `NOTIFY_TIMEOUT` | Notification timeout (seconds)                        | `NOTIFY_TIMEOUT=10`  |\n\n### Usage\n\n#### Manage the Service\n\n```bash\n# Status\n  sudo systemctl status tailscale-receive.service\n\n# Live logs\n  sudo journalctl -u tailscale-receive.service -f\n\n# Stop / Start / Restart\n  sudo systemctl stop tailscale-receive.service\n  sudo systemctl start tailscale-receive.service\n  sudo systemctl restart tailscale-receive.service\n\n# Enable/Disable at boot\n  sudo systemctl enable tailscale-receive.service\n  sudo systemctl disable tailscale-receive.service\n```\n\n#### Send Files\n\n##### Via Dolphin Context Menu (recommended)\n\n- Right‑click file(s)/folder in Dolphin → \"Send to device using Tailscale\" → pick device.\n\n##### Via Command Line\n\n```bash\n# Single file\n/usr/local/bin/tailscale-send.sh /path/to/file.txt\n\n# Multiple files\n/usr/local/bin/tailscale-send.sh file1.txt file2.txt file3.txt\n\n# Directory\n/usr/local/bin/tailscale-send.sh /path/to/directory/\n\n# No args → file picker (GUI permitting)\n/usr/local/bin/tailscale-send.sh\n```\n\n##### Device Selection Interface\n\nOrder of preference: `kdialog` → `zenity` → `whiptail` → CLI fallback.\n\n##### Device Detection\n\n- Primary: `tailscale status --json` + `jq`\n- Fallback: parse plain `tailscale status` output\n\n### Troubleshooting\n\n| Symptom                                | Likely Cause                                        | Fix                                                                     |\n| -------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------- |\n| Service fails with \"Exec format error\" | Corrupt/empty `/usr/local/bin/tailscale-receive.sh` | Reinstall: `sudo ./install.sh`                                          |\n| Service running but no files received  | Taildrop disabled; device not logged in             | Enable Taildrop; `tailscale status`; ensure sender targeted this device |\n| \"Access denied\" on send                | Operator not set for your user                      | `sudo tailscale set --operator=$USER`                                   |\n| No desktop notifications               | Headless/no GUI or `notify-send` missing            | Install `libnotify-bin` (Debian/Ubuntu) or ignore on headless           |\n| Dolphin menu missing                   | KDE cache stale or menu files missing               | `kbuildsycoca6`/`kbuildsycoca5`, restart Dolphin                        |\n| Files owned by root                    | Ownership fix not applied yet                       | Service chowns post‑receive; check logs for errors                      |\n\n### Security Notes\n\n- The service runs as root to reliably receive and then chown files. Consider sandboxing/hardening.\n- See `TODO.md` for recommended hardening: systemd sandboxing, environment file for secrets, capability limits, timers, etc.\n\n### Advanced Configuration\n\n#### Customize the Receiver\n\n```bash\n# Edit installed script\nsudo nano /usr/local/bin/tailscale-receive.sh\nsudo systemctl restart tailscale-receive.service\n\n# Or edit original and reinstall\nnano tailscale-receive.sh\nsudo ./install.sh\n```\n\nAvailable variables:\n\n- `TARGET_DIR` (destination dir)\n- `FIX_OWNER` (user to own files)\n- Poll interval (change `sleep 15`)\n\n#### Customize the Sender\n\n```bash\n# Force dialog tool\nexport DIALOG_TOOL=kdialog  # or zenity, whiptail\n# Debug output\nexport DEBUG=1\n# Notification timeout\nexport NOTIFY_TIMEOUT=10\n```\n\n#### Systemd Service Customization\n\n```bash\nsudo nano /etc/systemd/system/tailscale-receive.service\nsudo systemctl daemon-reload\nsudo systemctl restart tailscale-receive.service\n```\n\nCommon tweaks: add env vars, modify restart behavior, dependencies, or apply sandboxing options.\n\n### Uninstall\n\n```bash\nsudo ./uninstall.sh\n```\n\n#### One‑Line Uninstall (curl/wget)\n\nUsing curl:\n\n```bash\nbash -c 'set -euo pipefail; tmp=$(mktemp -d); cd \"$tmp\"; \\\ncurl -fsSLO https://raw.githubusercontent.com/1999AZZAR/tailscale_receiver/master/uninstall.sh; \\\nchmod +x uninstall.sh; sudo ./uninstall.sh'\n```\n\nUsing wget:\n\n```bash\nbash -c 'set -euo pipefail; tmp=$(mktemp -d); cd \"$tmp\"; \\\nwget -q https://raw.githubusercontent.com/1999AZZAR/tailscale_receiver/master/uninstall.sh; \\\nchmod +x uninstall.sh; sudo ./uninstall.sh'\n```\n\nRemoves:\n\n- `/usr/local/bin/tailscale-receive.sh`\n- `/usr/local/bin/tailscale-send.sh`\n- `/etc/systemd/system/tailscale-receive.service`\n- Dolphin service menu files (KF5/KF6)\n\nNote: Does not remove your received files or your original project files.\n\n### Integration with Other Tools\n\n- Nautilus: custom script in `~/.local/share/nautilus/scripts/`\n- Thunar: custom actions\n- Ranger: bind to a key in `~/.config/ranger/rc.conf`\n- Automation: use inotify/cron to call the sender on events\n\n### Contributing\n\n- Test changes thoroughly\n- Keep docs updated\n- Ensure KF5/KF6 compatibility\n- Match existing code style and error handling\n\n### How It Works\n\n- `tailscale-receive.sh`: infinite loop; health checks; `tailscale file get`; diff directory; chown; notify.\n- `tailscale-send.sh`: find devices (`--json` + `jq`, fallback to text); show picker; `tailscale file cp` per item; notify.\n- `install.sh`: copies scripts, creates unit, enables/starts service, installs Dolphin menus, refreshes cache.\n- `uninstall.sh`: stops/disables/removes unit; removes scripts and menus; refreshes cache.\n\n### License\n\n[MIT License](./LICENSE)\n\n### Changelog\n\n#### Version 2.1 (Current)\n\n- Installer now prompts for target user and configures receiver automatically\n- Fixed user capture during install (prompts redirected to stderr) for reliable non-interactive usage\n- Corrected absolute TARGET_DIR paths and ownership handling\n- Added one-line install/uninstall using curl or wget\n- Refined README: clickable TOC, Quick Start, configuration tables, troubleshooting matrix, security notes\n- Added TODO.md with comprehensive hardening and enhancement roadmap\n- Uninstall notes clarify user data is preserved and how to remove it manually\n\n#### Version 2.0\n\n- Added interactive sender with device picker\n- Dolphin context menu integration\n- Expanded documentation and troubleshooting\n- Improved error handling and messaging\n- Multi‑tool GUI support and robust device detection\n\n#### Version 1.0\n\n- Automated file receiver and systemd integration\n- Desktop notifications\n- Basic setup and uninstall scripts\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1999azzar%2Ftailscale_receiver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F1999azzar%2Ftailscale_receiver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1999azzar%2Ftailscale_receiver/lists"}