{
  description = "tlater.net web server";

  inputs = {
    nixpkgs.url = "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz";
    dream2nix = {
      url = "github:nix-community/dream2nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    fenix = {
      url = "github:nix-community/fenix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    {
      self,
      nixpkgs,
      dream2nix,
      fenix,
    }:
    let
      # At the moment, we only deploy to x86_64-linux. Update when we
      # care about another platform.
      system = "x86_64-linux";
      pkgs = nixpkgs.legacyPackages.${system};
      fenixPkgs = fenix.packages.${system};
      ownPkgs = self.packages.${system};
    in
    {
      packages.${system} = dream2nix.lib.importPackages {
        projectRoot = ./.;
        projectRootFile = "flake.nix";
        packagesDir = ./packages;
        packageSets = {
          nixpkgs = pkgs;
          fenix = fenixPkgs;
        };
      };

      apps.${system} = {
        default =
          let
            inherit (ownPkgs) server templates;
            inherit (pkgs) writeShellScript;
          in
          {
            type = "app";
            program = builtins.toString (
              writeShellScript "tlaternet-webserver" ''
                ${server}/bin/tlaternet-webserver --template-directory ${templates}
              ''
            );
          };

        update =
          let
            update-script = pkgs.callPackage ./nix/update.nix { inherit self; };
          in
          {
            type = "app";
            program = "${update-script}/bin/update";
          };
      };

      nixosModules.default = import ./nix/module.nix { inherit self system; };

      devShells.${system} = {
        server = pkgs.mkShell {
          packages = [
            (fenixPkgs.stable.withComponents [
              "rustc"
              "cargo"
              "rustfmt"
              "rust-std"
              "rust-docs"
              "clippy"
              "rust-src"
              "rust-analysis"
            ])
            fenixPkgs.rust-analyzer
          ];
        };
      };

      checks.${system} = import ./nix/checks { inherit self pkgs; };
    };
}
