{
  description = "My personal website";

  inputs = {
    nixpkgs.url = github:nixos/nixpkgs/release-22.05;
    utils.url = github:numtide/flake-utils;
  };

  outputs = { self, nixpkgs, utils }:
    utils.lib.eachDefaultSystem
      (system:
        let
          pkgs = import nixpkgs {
            inherit system;
          };

          inherit (pkgs.lib.sources) cleanSourceWith cleanSource;

          filterCI = name: type:
            !((type == "directory") && (baseNameOf name == ".woodpecker"));

          cleanSrc = cleanSourceWith {
            filter = filterCI;
            src = cleanSource ./.;
          };

          vars = pkgs.lib.mapAttrsToList (n: v: "export ${n}=${v}") {
            LOCALE_ARCHIVE = "${pkgs.glibcLocales}/lib/locale/locale-archive";
            LANG = "en_US.UTF-8";
          };

          site = pkgs.haskellPackages.callCabal2nix "nattopages" ./src { };
          nattopages = pkgs.stdenv.mkDerivation {
            name = "nattopages";
            src = cleanSrc;
            phases = "unpackPhase buildPhase";
            nativeBuildInputs = [ site ];
            buildPhase = (pkgs.lib.concatStringsSep "\n" vars) + "\n" +
              ''
                site build
                mkdir -p $out
                cp -r _site/* $out
              '';
          };
        in
        rec {
          devShell = with pkgs.haskellPackages; shellFor {
            packages = _: [ site ];
            withHoogle = true;
            buildInputs = [
              cabal-install
              haskell-language-server
              ghcid
            ];
            nativeBuildInputs = with pkgs; [
              zlib
            ];
          };
          packages = {
            inherit nattopages site;
          };
          defaultPackage = packages.nattopages;
        }
      );
}
