Hacker News new | ask | show | jobs
by Cyph0n 14 days ago
+1, NixOS makes working with systemd a breeze. Defining units in Nix beats wrangling INI files.

  systemd.services.sync-recyclarr = {
    serviceConfig.Type = "oneshot";
    path = [ pkgs.podman ];
    script = ''
      podman exec -it recyclarr recyclarr sync radarr
      podman exec -it recyclarr recyclarr sync sonarr
    '';
  };
  systemd.timers.sync-recyclarr = {
    timerConfig = {
      OnCalendar = "daily";
      Persistent = true;
      Unit = "sync-recyclarr.service";
    };
    partOf = [ "sync-recyclarr.service" ];
    requires = [ "podman-recyclarr.service" ];
    wantedBy = [ "timers.target" ];
  };
2 comments

I don't currently have a personal use-case for container services, but Quadlets are another example of systemd (and podman) beauty. It looks like someone has gone through the trouble of making the OS+home-manager modules: https://github.com/SEIAROTg/quadlet-nix
I never had the opportunity to try out quadlets, but they seem powerful.

I maintain one of the competitors listed in that README (compose2nix), so I am a bit biased haha.

For now, I prefer the ability to interop with Compose.

is this irony?
No. Is that not readable to you lol? I think anyone with even a passing familiarity with systemd would understand what that chunk of Nix is doing.

Compare it to the alternative of using plain systemd (including command(s) required to enable units).

Also, consider what build-time validation you get prior to starting the unit/timer. Hint: zero.

It's significantly uglier and it also skips the helpful headers / sections in the systemd INI files. `[Unit]` and `[Service]` and `[Timer]` represent different layers of execution. Many Nix people got used to the horrible syntax of Nix, I guess? I still find Bitbake significantly more palatable than Nix.

I do appreciate build-time checking but I think this can be solved at systemd side as a separate tool just as effectively.

Ugliness is subjective :)

But my question was around readability: were you able to understand what the snippet I shared is doing?

Re: build-time checks - but systemd hasn’t done it, and I am also unsure where exactly this verification would even take place given systemd’s configuration model. Unless you’re talking about some kind of language server or IDE integration.