diff --git a/os/common.nix b/os/common.nix index f0b61d5..f0a2b1f 100644 --- a/os/common.nix +++ b/os/common.nix @@ -80,12 +80,6 @@ # Enable the OpenSSH daemon openssh.enable = true; - # Time sychronisation - chrony = { - enable = true; - servers = map (n: "${toString n}.europe.pool.ntp.org") (lib.lists.range 0 3); - }; - # Prevent power button from shutting down the computer. # On Pinebook it's too easy to hit, # on others I sometimes turn it off when unsuspending. diff --git a/os/default.nix b/os/default.nix index 44a68b8..644245e 100644 --- a/os/default.nix +++ b/os/default.nix @@ -6,8 +6,8 @@ ./battery.nix ./boot ./ccc - ./cuda ./common.nix + ./cuda ./desktop ./dev disko.nixosModules.disko @@ -18,6 +18,7 @@ ./remote-builds ./style ./syncthing + ./time ./wireless ]; } diff --git a/os/time/default.nix b/os/time/default.nix new file mode 100644 index 0000000..c61be7a --- /dev/null +++ b/os/time/default.nix @@ -0,0 +1,47 @@ +{ + lib, + config, + ... +}: +{ + config = { + # Apparently better than reference implementation + services.chrony.enable = true; + + networking = { + # Using community provided service + timeServers = map (n: "${toString n}.europe.pool.ntp.org") (lib.lists.range 0 3); + + # Only try to sync time when we have internet connection + dhcpcd.runHook = '' + if $if_up + then + /run/wrappers/bin/sudo ${config.services.chrony.package}/bin/chronyc online + elif $if_down + then + /run/wrappers/bin/sudo ${config.services.chrony.package}/bin/chronyc offline + fi + ''; + }; + + # Allow dhcpcd to control chrony + security.sudo.extraRules = [ + { + users = [ "dhcpcd" ]; + commands = + builtins.map + (arg: { + command = "${config.services.chrony.package}/bin/chronyc ${arg}"; + options = [ "NOPASSWD" ]; + + }) + [ + "online" + "offline" + ]; + } + ]; + systemd.services.dhcpcd.serviceConfig.NoNewPrivileges = false; + + }; +} diff --git a/os/wireless/default.nix b/os/wireless/default.nix index 75c81f8..31afc58 100644 --- a/os/wireless/default.nix +++ b/os/wireless/default.nix @@ -54,15 +54,6 @@ in ]; # wireless support via wpa_supplicant networking = { - # Tell the time synchronisation service when we got/lost the connection - dhcpcd.runHook = '' - if $if_up; then - ${config.services.chrony.package}/bin/chronyc online - elif $if_down; then - ${config.services.chrony.package}/bin/chronyc offline - fi - ''; - wireless = { enable = true; extraConfig = ''