Skip to content

Commit

Permalink
Add localtime package and nixos module
Browse files Browse the repository at this point in the history
Simple daemon for keeping system timezone up-to-date via geoclue2.

Sadly i3 status needs to be restarted for timezone changes.

(cherry picked from commit d64ba1c)
Signed-off-by: Domen Kožar <domen@dev.si>
  • Loading branch information
domenkozar committed Dec 3, 2017
1 parent 4f75e27 commit b7c8134
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 0 deletions.
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Expand Up @@ -580,6 +580,7 @@
./services/system/cloud-init.nix
./services/system/dbus.nix
./services/system/earlyoom.nix
./services/system/localtime.nix
./services/system/kerberos.nix
./services/system/nscd.nix
./services/system/saslauthd.nix
Expand Down
60 changes: 60 additions & 0 deletions 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";
};
};
};
}
22 changes: 22 additions & 0 deletions pkgs/tools/system/localtime/default.nix
@@ -0,0 +1,22 @@
{ stdenv, go, systemd, polkit, fetchFromGitHub, m4 }:

stdenv.mkDerivation {
name = "localtime-2017-11-07";

src = fetchFromGitHub {
owner = "Stebalien";
repo = "localtime";
rev = "2e7b4317c723406bd75b2a1d640219ab9f8090ce";
sha256 = "04fyna8p7q7skzx9fzmncd6gx7x5pwa9jh8a84hpljlvj0kldfs8";
};

buildInputs = [ go systemd polkit m4 ];

makeFlags = [ "PREFIX=$(out)" ];

meta = {
description = "A daemon for keeping the system timezone up-to-date based on the current location";
homepage = https://github.com/Stebalien/localtime;
platforms = stdenv.lib.platforms.linux;
};
}
2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Expand Up @@ -3115,6 +3115,8 @@ with pkgs;

limesurvey = callPackage ../servers/limesurvey { };

localtime = callPackage ../tools/system/localtime { };

logcheck = callPackage ../tools/system/logcheck {
inherit (perlPackages) mimeConstruct;
};
Expand Down

0 comments on commit b7c8134

Please sign in to comment.