From d0d623da15bd1c87da68a9b5b140185df90d6707 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 20 Jun 2024 08:40:36 +0000 Subject: [PATCH] programs: ship geoclue2 as an actual program moby probably needs its gps.nix file removed. also this is incomplete due to Mozilla terminating their location services API --- hosts/common/programs/default.nix | 2 + hosts/common/programs/geoclue2/default.nix | 50 +++++++++++++++++++++ hosts/common/programs/geoclue2/geoclue.conf | 43 ++++++++++++++++++ hosts/common/programs/gnome-maps.nix | 4 ++ hosts/common/programs/where-am-i.nix | 11 +++++ pkgs/additional/where-am-i/default.nix | 9 ---- pkgs/default.nix | 1 - 7 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 hosts/common/programs/geoclue2/default.nix create mode 100644 hosts/common/programs/geoclue2/geoclue.conf create mode 100644 hosts/common/programs/where-am-i.nix delete mode 100644 pkgs/additional/where-am-i/default.nix diff --git a/hosts/common/programs/default.nix b/hosts/common/programs/default.nix index fc70de80..e00bdfb9 100644 --- a/hosts/common/programs/default.nix +++ b/hosts/common/programs/default.nix @@ -53,6 +53,7 @@ ./gdb.nix ./gdbus.nix ./geary.nix + ./geoclue2 ./git.nix ./gnome-clocks.nix ./gnome-feeds.nix @@ -147,6 +148,7 @@ ./vlc.nix ./waybar ./waylock.nix + ./where-am-i.nix ./wike.nix ./wine.nix ./wireplumber.nix diff --git a/hosts/common/programs/geoclue2/default.nix b/hosts/common/programs/geoclue2/default.nix new file mode 100644 index 00000000..338cca1d --- /dev/null +++ b/hosts/common/programs/geoclue2/default.nix @@ -0,0 +1,50 @@ +# geoclue location services daemon. +# +# HOW TO TEST (hopefully): +# - build `geoclue2-with-demo-agent` +# - run the service: `systemctl start geoclue` or "${geoclue2-with-demo-agent}/libexec/geoclue" +# - run "${geoclue2-with-demo-agent}/libexec/geoclue-2.0/demos/agent" +# - keep this running in the background +# - run "${geoclue2-with-demo-agent}/libexec/geoclue-2.0/demos/where-am-i" +{ config, lib, pkgs, ... }: +let + cfg = config.sane.programs.geoclue2; +in +{ + sane.programs.geoclue2 = { + # packageUnwrapped = pkgs.rmDbusServices pkgs.geoclue2; + # packageUnwrapped = pkgs.geoclue2.override { withDemoAgent = true; }; + packageUnwrapped = pkgs.geoclue2-with-demo-agent; + suggestedPrograms = [ + "where-am-i" + ]; + }; + + sane.programs.geoclue2.enableFor.system = lib.mkIf (builtins.any (en: en) (builtins.attrValues cfg.enableFor.user)) true; + + systemd.packages = lib.mkIf cfg.enableFor.system [ cfg.package ]; + services.dbus.packages = lib.mkIf cfg.enableFor.system [ cfg.package ]; + + # TODO: i should be able to run this as an ordinary user + users = lib.mkIf cfg.enableFor.system { + users.geoclue = { + isSystemUser = true; + home = "/var/lib/geoclue"; + group = "geoclue"; + description = "Geoinformation service"; + }; + + groups.geoclue = {}; + }; + + systemd.services.geoclue = lib.mkIf cfg.enableFor.system { + restartTriggers = [ + config.environment.etc."geoclue/geoclue.conf".source + ]; + serviceConfig.StateDirectory = "geoclue"; + }; + + environment.etc."geoclue/geoclue.conf" = lib.mkIf cfg.enableFor.system { + source = ./geoclue.conf; + }; +} diff --git a/hosts/common/programs/geoclue2/geoclue.conf b/hosts/common/programs/geoclue2/geoclue.conf new file mode 100644 index 00000000..fcfb2c45 --- /dev/null +++ b/hosts/common/programs/geoclue2/geoclue.conf @@ -0,0 +1,43 @@ +[3g] +enable=true + +[agent] +whitelist=geoclue-demo-agent;gnome-shell;io.elementary.desktop.agent-geoclue2 + +[cdma] +enable=true + +[epiphany] +allowed=true +system=false +users= + +[firefox] +allowed=true +system=false +users= + +[geoclue-where-am-i] +allowed=true +system=false +users=1000 + +[modem-gps] +enable=true + +[network-nmea] +enable=true + +# i think this one is wrong, and is supposed to be `geoclue-where-am-i` +[where-am-i] +allowed=true +system=false +users=1000 + +[wifi] +enable=true +submission-nick=geoclue +submission-url=https://location.services.mozilla.com/v1/submit?key=geoclue +submit-data=false +# url=https://location.services.mozilla.com/v1/geolocate?key=geoclue + diff --git a/hosts/common/programs/gnome-maps.nix b/hosts/common/programs/gnome-maps.nix index 9849835a..7c110e16 100644 --- a/hosts/common/programs/gnome-maps.nix +++ b/hosts/common/programs/gnome-maps.nix @@ -2,6 +2,10 @@ { sane.programs."gnome.gnome-maps" = { packageUnwrapped = pkgs.rmDbusServices pkgs.gnome.gnome-maps; + suggestedPrograms = [ + "geoclue2" + ]; + sandbox.method = "bwrap"; sandbox.whitelistDri = true; # for perf sandbox.whitelistDbus = [ diff --git a/hosts/common/programs/where-am-i.nix b/hosts/common/programs/where-am-i.nix new file mode 100644 index 00000000..699a788e --- /dev/null +++ b/hosts/common/programs/where-am-i.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: +{ + sane.programs.where-am-i = { + # packageUnwrapped = pkgs.linkIntoOwnPackage config.sane.programs.geoclue2.packageUnwrapped "libexec/geoclue-2.0/demos/where-am-i"; + packageUnwrapped = pkgs.linkFarm "where-am-i" [{ + # bring the `where-am-i` tool into a `bin/` directory so it can be invokable via PATH + name = "bin/where-am-i"; + path = "${config.sane.programs.geoclue2.packageUnwrapped}/libexec/geoclue-2.0/demos/where-am-i"; + }]; + }; +} diff --git a/pkgs/additional/where-am-i/default.nix b/pkgs/additional/where-am-i/default.nix deleted file mode 100644 index 85578a38..00000000 --- a/pkgs/additional/where-am-i/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ linkFarm -, geoclue2 -}: -linkFarm "where-am-i" [{ - # bring the `where-am-i` tool into a `bin/` directory so it can be invokable via PATH - name = "bin/where-am-i"; - path = "${geoclue2}/libexec/geoclue-2.0/demos/where-am-i"; -}] - diff --git a/pkgs/default.nix b/pkgs/default.nix index 16571625..471f7366 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -113,7 +113,6 @@ let runCommandLocalOverridable ; unftp = callPackage ./additional/unftp { }; - where-am-i = callPackage ./additional/where-am-i { }; zecwallet-light-cli = callPackage ./additional/zecwallet-light-cli { }; # packages i haven't used for a while, may or may not still work