{
  nixConfig = {
    trusted-substituters = "https://cache.nixos.org/";
    trusted-public-keys = "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=";
    extra-experimental-features = "nix-command flakes";
  };
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11-small";
    flake-compat = {
      url = "github:edolstra/flake-compat";
      flake = false;
    };
    flake-utils.url = "github:numtide/flake-utils";
  };
  outputs = {
    self,
    nixpkgs,
    flake-utils,
    ...
  }:
    flake-utils.lib.eachDefaultSystem (system: let
      pkgs = import nixpkgs {inherit system;};
      devDeps = with pkgs; [hugo brotli zopfli parallel];
    in {
      devShells.default = pkgs.mkShell {
        packages = devDeps;
      };

      # TODO: cache
      defaultPackage = pkgs.stdenv.mkDerivation {
        pname = "jakstys.lt";
        version = "1.0.0";

        src = pkgs.lib.cleanSource self;

        buildInputs = [pkgs.hugo];

        buildPhase = ''
          ${pkgs.hugo}/bin/hugo --cleanDestinationDir --printPathWarnings --panicOnWarning --log
          find public \
              -name '*.html' -or \
              -name '*.xml' -or \
              -name '*.txt' -or \
              -name '*.css' -or \
              -name '*.map' | \
                ${pkgs.parallel}/bin/parallel --eta \
                  "${pkgs.zopfli}/bin/zopfli {} && ${pkgs.brotli}/bin/brotli {}"
        '';

        installPhase = ''
          mv public $out
        '';
      };

      formatter = pkgs.alejandra;
    });
}
