{
  config,
  inputs,
  lib,
  pkgs,
  ...
}:
let
  hostInfo = pkgs.writeShellApplication {
    name = "host-info";
    runtimeInputs = [
      config.nix.package
      pkgs.gnused
      pkgs.jq
    ];
    text = builtins.readFile ./host-info.bash;
  };
in
{
  environment.etc =
    let
      inputsWithDate = lib.filterAttrs (_: input: input ? lastModified) inputs.self.inputs;
      flakeAttrs =
        input:
        (lib.mapAttrsToList (n: v: ''${n}="${v}"'') (
          lib.filterAttrs (_: v: (builtins.typeOf v) == "string") input
        ));
      lastModified =
        name: input:
        ''flake_input_last_modified{input="${name}",${lib.concatStringsSep "," (flakeAttrs input)}} ${toString input.lastModified}'';
    in
    {
      "flake-inputs.prom" = {
        text = builtins.unsafeDiscardStringContext ''
          # HELP flake_registry_last_modified Last modification date of flake input in unixtime
          # TYPE flake_input_last_modified gauge
          ${lib.concatStringsSep "\n" (lib.mapAttrsToList lastModified inputsWithDate)}
        '';
      };
    };

  services.telegraf.extraConfig.inputs = {
    exec = [
      {
        commands = [ (lib.getExe hostInfo) ];
        data_format = "influx";
      }
    ];
    file = [
      {
        data_format = "prometheus";
        files = [ "/etc/flake-inputs.prom" ];
      }
    ];
    prometheus = {
      metric_version = 2;
    };
  };
}