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.

Changed files
+85
nixos
modules
services
system
pkgs
tools
system
localtime
top-level
+1
nixos/modules/module-list.nix
···
./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
+60
nixos/modules/services/system/localtime.nix
···
+
{ 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
pkgs/tools/system/localtime/default.nix
···
+
{ 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
pkgs/top-level/all-packages.nix
···
limesurvey = callPackage ../servers/limesurvey { };
+
localtime = callPackage ../tools/system/localtime { };
+
logcheck = callPackage ../tools/system/logcheck {
inherit (perlPackages) mimeConstruct;
};