{
  config,
  inputs,
  lib,
  pkgs,
  ...
}:
let
  hostInfo = pkgs.writeShellScript "host-info" ''
    nix_version="$(${config.nix.package}/bin/nix store ping --store daemon --json | ${pkgs.jq}/bin/jq -r '.version')"
    case "$(uname -s)" in
    Darwin)
      os_version="$(/usr/bin/sw_vers --productVersion)_$(/usr/bin/sw_vers --buildVersion)"
      ;;
    Linux)
      os_version="$(uname -r)"
      ;;
    esac
    system="$(${config.nix.package}/bin/nix eval --impure --raw --expr 'builtins.currentSystem')"
    echo "host,nix_version=$nix_version,os_version=$os_version,system=$system info=1"
  '';
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 = [ hostInfo ];
        data_format = "influx";
      }
    ];
    file = [
      {
        data_format = "prometheus";
        files = [ "/etc/flake-inputs.prom" ];
      }
    ];
    prometheus = {
      metric_version = 2;
    };
  };
}