guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 4/9] gnu: Add geoclue service.


From: Andy Wingo
Subject: [PATCH 4/9] gnu: Add geoclue service.
Date: Tue, 7 Apr 2015 10:26:25 +0200

* gnu/services/geoclue.scm: New file.
* gnu-system.am (GNU_SYSTEM_MODULES): Add geoclue service.
---
 gnu-system.am            |   1 +
 gnu/services/geoclue.scm | 117 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 118 insertions(+)
 create mode 100644 gnu/services/geoclue.scm

diff --git a/gnu-system.am b/gnu-system.am
index f9befa7..59ee3fa 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -328,6 +328,7 @@ GNU_SYSTEM_MODULES =                                \
   gnu/services/colord.scm                      \
   gnu/services/dbus.scm                                \
   gnu/services/dmd.scm                         \
+  gnu/services/geoclue.scm                     \
   gnu/services/lirc.scm                                \
   gnu/services/networking.scm                  \
   gnu/services/ssh.scm                         \
diff --git a/gnu/services/geoclue.scm b/gnu/services/geoclue.scm
new file mode 100644
index 0000000..518577d
--- /dev/null
+++ b/gnu/services/geoclue.scm
@@ -0,0 +1,117 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2014, 2015 Ludovic Courtès <address@hidden>
+;;; Copyright © 2015 Andy Wingo <address@hidden>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services geoclue)
+  #:use-module (gnu services)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu packages gnome)
+  #:use-module (ice-9 match)
+  #:use-module (guix monads)
+  #:use-module (guix store)
+  #:use-module (guix gexp)
+  #:export (geoclue-application
+            %standard-geoclue-applications
+            geoclue-service))
+
+;;; Commentary:
+;;;
+;;; This module provides service definitions for the Geoclue location service.
+;;;
+;;; Code:
+
+(define (bool value)
+  (if value "true\n" "false\n"))
+
+(define* (geoclue-application name #:key (allowed? #t) system? (users '()))
+  "Configure default access permissions for an application.  NAME is the
+Desktop ID of the application, without the .desktop part.  If ALLOWED? is
+true, the application will have access to location information by default.
+The boolean SYSTEM? value indicates that an application is a system component
+or not.  Finally USERS is a list of UIDs of all users for which this
+application is allowed location info access.  An empty users list means all
+users are allowed."
+  (string-append
+   "[" name "]\n"
+   "allowed=" (bool allowed?)
+   "system=" (bool system?)
+   "users=" (string-join users ";") "\n"))
+
+(define %standard-geoclue-applications
+  (list (geoclue-application "gnome-datetime-panel" #:system? #t)
+        (geoclue-application "epiphany" #:system? #f)
+        (geoclue-application "firefox" #:system? #f)))
+
+(define* (configuration-file #:key whitelist wifi-geolocation-url
+                             submit-data? wifi-submission-url submission-nick
+                             applications)
+  "Return a geoclue configuration file."
+  (text-file "geoclue.conf"
+             (string-append
+              "[agent]\n"
+              "whitelist=" (string-join whitelist ";") "\n"
+              "[wifi]\n"
+              "url=" wifi-geolocation-url "\n"
+              "submit-data=" (bool submit-data?)
+              "submission-url=" wifi-submission-url "\n"
+              "submission-nick=" submission-nick "\n"
+              (string-join applications "\n"))))
+
+(define* (geoclue-service #:key (geoclue geoclue)
+                          (whitelist '())
+                          (wifi-geolocation-url
+                           ;; Mozilla geolocation service:
+                           
"https://location.services.mozilla.com/v1/geolocate?key=geoclue";)
+                          (submit-data? #f)
+                          (wifi-submission-url
+                           
"https://location.services.mozilla.com/v1/submit?key=geoclue";)
+                          (submission-nick "geoclue")
+                          (applications %standard-geoclue-applications))
+  "Return a service that runs the @command{geoclue}, location service."
+  (mlet %store-monad ((config (configuration-file
+                               #:whitelist whitelist
+                               #:wifi-geolocation-url wifi-geolocation-url
+                               #:submit-data? submit-data?
+                               #:wifi-submission-url wifi-submission-url
+                               #:submission-nick submission-nick
+                               #:applications applications)))
+    (return
+     (service
+      (documentation "Run the Geoclue location service.")
+      (provision '(geoclue-daemon))
+      (requirement '(dbus-system))
+
+      (start #~(make-forkexec-constructor
+                (list (string-append #$geoclue "/libexec/geoclue"))
+                #:environment-variables
+                (list (string-append "GEOCLUE_CONFIG_FILE_NAME=" #$config))))
+      (stop #~(make-kill-destructor))
+
+      (user-groups (list (user-group
+                          (name "geoclue")
+                          (system? #t))))
+      (user-accounts (list (user-account
+                            (name "geoclue")
+                            (group "geoclue")
+                            (system? #t)
+                            (comment "Geoclue daemon user")
+                            (home-directory "/var/empty")
+                            (shell
+                             "/run/current-system/profile/sbin/nologin"))))))))
+
+;;; geoclue.scm ends here
-- 
2.2.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]