Networking & Sync
AirDrop-like capabilities, device mesh, and encrypted sync.
Overview
Floppy.WTF devices form a local mesh with AirDrop-like file transfer, continuous folder sync, encrypted tunnels, and automatic device discovery. All capabilities are declaratively configured in NixOS modules.
Capability Stack
┌─────────────────────────────────────────────┐
│ User Experience │
│ floppy send / floppy devices │
└─────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────┐
│ File Transfer │ Folder Sync │
│ LocalSend │ Syncthing │
│ (on-demand) │ (continuous) │
└─────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────┐
│ Encrypted Transport │
│ WireGuard (device-to-device tunnels) │
└─────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────┐
│ Discovery │
│ Avahi / mDNS (automatic LAN detection) │
└─────────────────────────────────────────────┘LocalSend — AirDrop-Like Transfer
- LAN-based encrypted file transfer
- Cross-platform (Linux, macOS, Windows, iOS, Android)
- No account required, TLS encrypted
- Automatic device discovery via mDNS
{
environment.systemPackages = with pkgs; [ localsend ];
services.avahi = {
enable = true;
nssmdns4 = true;
publish = { enable = true; addresses = true; };
};
networking.firewall.allowedTCPPorts = [ 53317 ];
networking.firewall.allowedUDPPorts = [ 53317 ];
}CLI Shortcut
floppy send ./file.pdf
# → Discovers nearby devices
# → User selects target
# → Transfers via LocalSend protocolSyncthing — Continuous Sync
- Continuous folder synchronization between devices
- Decentralized (no central server)
- Block-level hashing for integrity
- Conflict resolution and versioning
{
services.syncthing = {
enable = true;
user = "jeremy";
dataDir = "/home/jeremy";
configDir = "/home/jeremy/.config/syncthing";
overrideDevices = false;
overrideFolders = false;
settings.gui.theme = "dark";
};
networking.firewall.allowedTCPPorts = [ 8384 22000 ];
networking.firewall.allowedUDPPorts = [ 22000 21027 ];
}Default Sync Folders
| Folder | Path | Purpose |
|---|---|---|
| Documents | ~/Documents | General files |
| Projects | ~/Projects | Code and work |
| Shared | ~/Shared | Cross-device drop zone |
WireGuard — Encrypted Mesh
- Modern VPN tunnels between devices
- Minimal overhead, kernel-level performance
- Simple key management
{
networking.wg-quick.interfaces.wg0 = {
address = [ "10.100.0.X/24" ];
listenPort = 51820;
privateKeyFile = "/etc/wireguard/private.key";
peers = [{
publicKey = "...";
allowedIPs = [ "10.100.0.0/24" ];
}];
};
networking.firewall.allowedUDPPorts = [ 51820 ];
}IP Allocation
| Device | WireGuard IP |
|---|---|
| dell-dev-01 | 10.100.0.1 |
| dell-dev-02 | 10.100.0.2 |
| dell-lab-01 | 10.100.0.10 |
Managed via device registry metadata.
Avahi / mDNS — Device Discovery
Automatic LAN device detection with .local hostname resolution.
{
services.avahi = {
enable = true;
nssmdns4 = true;
publish = {
enable = true;
addresses = true;
domain = true;
userServices = true;
workstation = true;
};
};
}Devices discoverable as {hostname}.local:
ping dell-dev-01.local
ssh jeremy@dell-lab-01.localRole-Based Networking
| Feature | dev | node | minimal | lab | kiosk |
|---|---|---|---|---|---|
| LocalSend | Yes | No | No | Yes | No |
| Syncthing | Yes | No | No | Yes | No |
| WireGuard | Yes | Yes | No | Yes | No |
| Avahi/mDNS | Yes | Yes | Yes | Yes | Yes |
| SSH | Yes | Yes | Yes | Yes | Admin only |
Security
| Concern | Mitigation |
|---|---|
| WireGuard keys | Generated on device, private key never leaves |
| LocalSend traffic | TLS encrypted by default |
| Syncthing traffic | TLS + device ID verification |
| mDNS exposure | LAN only, no WAN advertisement |
| Firewall | Only required ports opened per role |
Last updated on