feat(nixos): add iOS interop (localsend, uxplay, libimobiledevice)
Adds Mac-style iPhone interop to the GNOME host: - LocalSend for AirDrop-style file transfer (programs.localsend opens TCP 53317) - UxPlay AirPlay receiver with Avahi mDNS publishing so iOS Screen Mirroring discovers the host; opens UxPlay's TCP 7000/7001/7100 and UDP 6000/6001/7011 - usbmuxd + libimobiledevice + ifuse so GVfs auto-mounts iPhone over USB in GNOME Files Constraint: Continuity / Handoff / Universal Clipboard / iMessage have no FOSS impl on Linux and are out of scope Rejected: KDE Connect | iOS app cannot send SMS or share clipboard due to iOS sandbox, no parity with macOS Rejected: shairport-sync AirPlay audio receiver | user opted out Confidence: high Scope-risk: narrow Directive: Avahi publish.userServices = true is required for UxPlay discovery; do not narrow without retesting iOS Screen Mirroring Not-tested: behavior when networking.firewall.enable is later flipped to true (currently disabled at line 128)
This commit is contained in:
+28
-2
@@ -105,6 +105,10 @@
|
|||||||
adwaita-icon-theme
|
adwaita-icon-theme
|
||||||
pkgs-unstable.claude-code # Use unstable for latest version
|
pkgs-unstable.claude-code # Use unstable for latest version
|
||||||
yubikey-manager
|
yubikey-manager
|
||||||
|
# iOS interop
|
||||||
|
uxplay
|
||||||
|
libimobiledevice
|
||||||
|
ifuse
|
||||||
];
|
];
|
||||||
|
|
||||||
# Some programs need SUID wrappers, can be configured further or are
|
# Some programs need SUID wrappers, can be configured further or are
|
||||||
@@ -116,6 +120,12 @@
|
|||||||
pinentryPackage = pkgs.pinentry-gnome3;
|
pinentryPackage = pkgs.pinentry-gnome3;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# AirDrop-style file transfer (LocalSend)
|
||||||
|
programs.localsend = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
|
||||||
# List services that you want to enable:
|
# List services that you want to enable:
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
# Enable the OpenSSH daemon.
|
||||||
@@ -225,11 +235,12 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# Open firewall for Tailscale
|
# Open firewall for Tailscale + UxPlay AirPlay receiver
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
checkReversePath = "loose";
|
checkReversePath = "loose";
|
||||||
trustedInterfaces = [ "tailscale0" "wg0" ];
|
trustedInterfaces = [ "tailscale0" "wg0" ];
|
||||||
allowedUDPPorts = [ config.services.tailscale.port ];
|
allowedTCPPorts = [ 7000 7001 7100 ];
|
||||||
|
allowedUDPPorts = [ config.services.tailscale.port 6000 6001 7011 ];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Auto-connect tailscale on boot
|
# Auto-connect tailscale on boot
|
||||||
@@ -267,6 +278,21 @@
|
|||||||
|
|
||||||
services.pcscd.enable = true;
|
services.pcscd.enable = true;
|
||||||
|
|
||||||
|
# iPhone USB mount (libimobiledevice)
|
||||||
|
services.usbmuxd.enable = true;
|
||||||
|
|
||||||
|
# mDNS for AirPlay receiver (UxPlay) discovery from iPhone
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns4 = true;
|
||||||
|
openFirewall = true;
|
||||||
|
publish = {
|
||||||
|
enable = true;
|
||||||
|
addresses = true;
|
||||||
|
userServices = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
security.pam.services = {
|
security.pam.services = {
|
||||||
login.u2fAuth = true;
|
login.u2fAuth = true;
|
||||||
sudo.u2fAuth = true;
|
sudo.u2fAuth = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user