{
  description = "Content and server config for erambler.co.uk";

  inputs.nixpkgs.url = "github:NixOS/nixpkgs";
  inputs.flake-utils.url = "github:numtide/flake-utils";

  outputs = { self, nixpkgs, flake-utils }:
    {
      overlay = self: super:
        let
          pkgs = nixpkgs.legacyPackages.${super.system};
          buildIosevka = pkgs.callPackage ./nix/iosevka.nix;
        in rec {
          iosevka = buildIosevka { set = "mnemosyne"; };
          iosevka-aile = buildIosevka { set = "aile-mnemosyne"; };
          iosevka-etoile = buildIosevka { set = "etoile-mnemosyne"; };

          fonts = pkgs.symlinkJoin {
            name = "mnemosyne-fonts";
            paths = [ iosevka iosevka-aile iosevka-etoile ];
          };

          erambler = pkgs.callPackage ./nix/build.nix { inherit fonts; };
        };
    } // flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs {
          inherit system;
          overlays = [ self.overlay ];
        };
      in {
        packages = {
          inherit (pkgs) erambler iosevka iosevka-aile iosevka-etoile fonts;
        };
        defaultPackage = pkgs.erambler;

        devShell = pkgs.callPackage ./nix/shell.nix { };
      });
}
