diff --git a/hosts/by-name/moby/default.nix b/hosts/by-name/moby/default.nix index 3911cd83..12ab3062 100644 --- a/hosts/by-name/moby/default.nix +++ b/hosts/by-name/moby/default.nix @@ -14,6 +14,7 @@ imports = [ ./bootloader.nix ./fs.nix + ./gps.nix ./kernel.nix ./polyfill.nix ]; diff --git a/hosts/by-name/moby/gps.nix b/hosts/by-name/moby/gps.nix new file mode 100644 index 00000000..474c6ccb --- /dev/null +++ b/hosts/by-name/moby/gps.nix @@ -0,0 +1,24 @@ +# pinephone GPS happens in EG25 modem +# serial control interface to modem is /dev/ttyUSB2 +# after enabling GPS, readout is /dev/ttyUSB1 +# +# minimal process to enable modem and GPS: +# - `echo 1 > /sys/class/modem-power/modem-power/device/powered` +# - `screen /dev/ttyUSB2 115200` +# - `AT+QGPSCFG="nmeasrc",1` +# - `AT+QGPS=1` +# +# now, something like `gpsd` can directly read from /dev/ttyUSB1. +# +# initial GPS fix can take 15+ minutes. +# meanwhile, services like eg25-manager can speed this up by uploading assisted GPS data to the modem. +# +# geoclue somehow fits in here as a geospatial provider that leverages GPS and also other sources like radio towers + +{ ... }: +{ + services.gpsd.enable = true; + services.gpsd.devices = [ "/dev/ttyUSB1" ]; + + # TODO: enable eg25-manager, and bring online both the modem and GPS on boot +} diff --git a/hosts/common/programs/mepo.nix b/hosts/common/programs/mepo.nix index 1e2421af..ea251456 100644 --- a/hosts/common/programs/mepo.nix +++ b/hosts/common/programs/mepo.nix @@ -9,12 +9,18 @@ persist.private = [ { type = "file"; path = ".cache/mepo/savestate"; } ]; + + # give mepo access to gpsd for location data, if that's enabled. + # same with geoclue2. + suggestedPrograms = lib.optional config.services.gpsd.enable "gpsd" + ++ lib.optional config.services.geoclue2.enable "geoclue2-with-demo-agent" + ; }; - programs.mepo = lib.mkIf config.sane.programs.mepo.enabled { - # enable location services (via geoclue) - enable = true; - # more precise, via gpsd ("may require additional config") - # programs.mepo.gpsd.enable = true - }; + # programs.mepo = lib.mkIf config.sane.programs.mepo.enabled { + # # enable location services (via geoclue) + # enable = true; + # # more precise, via gpsd ("may require additional config") + # # programs.mepo.gpsd.enable = true + # }; }