{
  description = "tlater.net web server contents";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-22.05";
    nix-filter.url = "github:numtide/nix-filter";
    npmlock2nix = {
      url = "github:nix-community/npmlock2nix";
      flake = false;
    };
  };

  outputs = {
    self,
    nixpkgs,
    nix-filter,
    npmlock2nix,
  }: let
    # At the moment, we only deploy to x86_64-linux. Update when we
    # care about another platform.
    system = "x86_64-linux";
    overlays = [
      (final: prev: {
        npmlock2nix = import npmlock2nix {pkgs = prev;};
      })
    ];
    pkgs = import nixpkgs {inherit system overlays;};
  in {
    packages.${system} = rec {
      tlaternet-templates = pkgs.npmlock2nix.build {
        src = pkgs.lib.cleanSource self;

        buildInputs = with pkgs; [
          util-linux
        ];

        installPhase = ''
          cp -r dist $out/
        '';

        node_modules_attrs = {
          buildInputs = with pkgs; [
            pkg-config
            python3
            vips
            glib
          ];
        };
      };

      default = tlaternet-templates;
    };

    devShells.${system} = {
      default = pkgs.npmlock2nix.shell {
        src = nix-filter.lib {
          root = self;
          include = [
            "package.json"
            "package-lock.json"
          ];
        };

        buildInputs = with pkgs.nodePackages; [
          npm-check-updates
          prettier
        ];

        node_modules_attrs = {
          buildInputs = with pkgs; [
            pkg-config
            python3
            vips
            glib
          ];
        };
      };
    };
  };
}