Commit Graph

9 Commits

Author SHA1 Message Date
Bjørn Forsman
a29010fe79 nixos: improve many 'enable' descriptions 2024-04-09 07:10:17 +02:00
Maximilian Bosch
57de6a8550
nixos/rust-motd: refactor assertion and TOML generation
* `sort (<)` also works for strings (TIL!), so no need for comparing
  length and whether all keys from `cfg.settings` exist in `cfg.order`
  (slightly less overhead).

* Don't build another piece of JSON (`orderedSections`), simply use
  `cfg.settings`/`cfg.order` with `__structuredAttrs` to ensure a
  properly ordered TOML.

  This also has the upside of not having to do quote hackery.

* Also, a freeform submodule isn't strictly needed because we don't have
  any special options defined, so replacing that with
  `attrsOf format.type`.

Co-authored-by: Silvan Mosberger <github@infinisil.com>
2023-09-29 11:13:27 +02:00
Maximilian Bosch
d77b59b41d
nixos/rust-motd: use a second attribute (order) for the of sections in TOML
Rather than using `priority` with `sortProperties`, a new option called
`order` defines the ordering of the sections. I.e.

    order = [ "global" "uptime" "banner" ]

means that `uptime` comes before `banner`. Please note that `global` is
for global settings and not a section. I figured that it'd be too much
magic to hide this in the implementation and ask the user to specify the
order of _each_ section in `settings` instead.

OTOH this makes the intent way clearer than priorities. Also, this
remains opt-in, the option defaults to `attrNames cfg.settings`, i.e.
all sections ordered alphabetically.
2023-09-26 23:28:40 +02:00
Maximilian Bosch
214cf0b934
nixos/rust-motd: .attrs.json -> "$NIX_ATTRS_JSON_FILE"
That way the derivation can also be built in a `nix-shell` where
`.attrs.json` isn't under "$NIX_BUILD_TOP".
2023-09-21 13:17:13 +02:00
Maximilian Bosch
11376df6d4
nixos/rust-motd: allow ordering sections by priority
Closes #234802

The problem here is that with e.g.

    {
      uptime.prefix = "Up";
      banner.command = "hostname | figlet -f slant";
    }

`banner` still appears before `uptime` in the final motd text because
Nix sorts attribute names alphabetically internally.

To work around this without breaking compatibility or losing the
property to override individual sections in other modules - e.g.

    {
      banner.color = mkForce "blue";
    }

I decided to introduce an option `priority` here, similar to the
priority field for `nginx`[1] and with the same semantics (i.e. higher
value means lower priority).

Internally a bunch of env vars are generated, i.e. `env0` to `envN` for
`N` sections with each of them containing a declaration for the TOML,
i.e. `env0` contains `{ uptime.prefix = "Up"; }` and `env1` contains
`{ banner.command = "hostname | figlet -f slant"; }` if `uptime.priority`
is set to a value below 1000.

In this order, the declarations are concatenated together by `jq(1)`
which doesn't sort keys alphabetically which results in a JSON
representation with `uptime` before `banner`. This is finally piped to
`json2toml` which converts this into TOML for rust-motd.

[1] https://nixos.org/manual/nixos/unstable/options#opt-services.nginx.virtualHosts._name_.locations._name_.priority
2023-09-21 13:17:13 +02:00
Maximilian Bosch
0a71cf07a8
nixos/rust-motd: run once on bootup
That way e.g. the last login and uptime isn't completely bogus when
accessing a machine for the first time after a reboot.
2023-09-20 22:16:03 +02:00
Jakub Okoński
1655d5ab7a
nixos/rust-motd: fix systemd service checks
By completely locking down RestrictAddressFamilies, the service
was unable to talk to systemd to check .service statuses.
2022-09-18 23:17:50 +02:00
pennae
d98322834b nixos/*: fix docbook deprecation notices
mostly no rendering changes except in buildkite, which used markdown
where docbook was expected without marking up its markdown.
2022-09-10 18:23:13 +02:00
Maximilian Bosch
0178db0da3
nixos/rust-motd: init
Makes it easier to configure `rust-motd`. Currently, it takes care of
the following things:

* Creating a timer to regularly refresh the `motd`-text and a hardened
  service (which is still root to get access to e.g. fs-mounts, but
  read-only because of hardening flags).
* Disabling `PrintLastLog` in `sshd.conf` if the last-login feature of
  `rust-motd` is supposed to be used.
* Ensure that the banner is actually shown when connecting via `ssh(1)`
  to a remote server with this being enabled.
2022-08-29 15:27:14 +02:00