aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/services/system
diff options
context:
space:
mode:
authorDomen Kožar <domen@dev.si>2017-12-03 11:41:22 +0100
committerDomen Kožar <domen@dev.si>2017-12-03 11:42:51 +0100
commitd64ba1c0604d3d92ec23ac7e62899728045175d4 (patch)
tree16c7598fe231384402e987c62443f196992845fe /nixos/modules/services/system
parentecd0e118516718b83642696bb9bd917761afce76 (diff)
Add localtime package and nixos module
Simple daemon for keeping system timezone up-to-date via geoclue2. Sadly i3 status needs to be restarted for timezone changes.
Diffstat (limited to 'nixos/modules/services/system')
-rw-r--r--nixos/modules/services/system/localtime.nix60
1 files changed, 60 insertions, 0 deletions
diff --git a/nixos/modules/services/system/localtime.nix b/nixos/modules/services/system/localtime.nix
new file mode 100644
index 00000000000..b9355bbb944
--- /dev/null
+++ b/nixos/modules/services/system/localtime.nix
@@ -0,0 +1,60 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.services.localtime;
+in {
+ options = {
+ services.localtime = {
+ enable = mkOption {
+ default = false;
+ description = ''
+ Enable <literal>localtime</literal>, simple daemon for keeping the system
+ timezone up-to-date based on the current location. It uses geoclue2 to
+ determine the current location and systemd-timedated to actually set
+ the timezone.
+ '';
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ services.geoclue2.enable = true;
+
+ security.polkit.extraConfig = ''
+ polkit.addRule(function(action, subject) {
+ if (action.id == "org.freedesktop.timedate1.set-timezone"
+ && subject.user == "localtimed") {
+ return polkit.Result.YES;
+ }
+ });
+ '';
+
+ users.users = [{
+ name = "localtimed";
+ description = "Taskserver user";
+ }];
+
+ systemd.services.localtime = {
+ description = "localtime service";
+ wantedBy = [ "multi-user.target" ];
+ partOf = [ "geoclue.service "];
+
+ serviceConfig = {
+ Restart = "on-failure";
+ # TODO: make it work with dbus
+ #DynamicUser = true;
+ Nice = 10;
+ User = "localtimed";
+ PrivateTmp = "yes";
+ PrivateDevices = true;
+ PrivateNetwork = "yes";
+ NoNewPrivileges = "yes";
+ ProtectSystem = "strict";
+ ProtectHome = true;
+ ExecStart = "${pkgs.localtime}/bin/localtimed";
+ };
+ };
+ };
+}