{ description = "Fizz.buzz homepage"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; natter = { url = "git+https://code.fizz.buzz/talexander/natter.git"; inputs.nixpkgs.follows = "nixpkgs"; }; organic_ast_explorer = { url = "git+https://code.fizz.buzz/talexander/organic_ast_explorer.git"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, natter, organic_ast_explorer, }: let forAllSystems = func: builtins.listToAttrs ( map (system: { name = system; value = func system; }) nixpkgs.lib.systems.flakeExposed ); in { devShells = forAllSystems ( system: let overlays = [ natter.overlays.default organic_ast_explorer.overlays.default ]; pkgs = import nixpkgs { inherit system overlays; }; in { default = pkgs.mkShell { nativeBuildInputs = [ ]; buildInputs = with pkgs; [ pkgs.natter.release ]; }; } ); packages = forAllSystems ( system: let overlays = [ natter.overlays.default organic_ast_explorer.overlays.default ]; pkgs = import nixpkgs { inherit system overlays; }; appliedOverlay = self.overlays.default pkgs pkgs; nginx_conf = pkgs.replaceVars "${./docker/server/nginx.conf}" { web_root = appliedOverlay.homepage.release; mime_types = "${pkgs.nginx}/conf/mime.types"; headers_include = "${./docker/server/headers.include}"; }; in rec { default = release; inherit (appliedOverlay.homepage) release ; dependencies = pkgs.symlinkJoin { # This is to enable the docker image to install all the dependencies, cache that layer, and then build the final site after the org source files have been loaded. Without this, every update to the blog posts would result in recompiling everything. name = "homepage-dependencies"; paths = appliedOverlay.homepage.dependencies; }; docker_env = pkgs.stdenv.mkDerivation { pname = "homepage-docker-env"; version = "0.0.0"; dontUnpack = true; installPhase = '' mkdir -p $out cp ${nginx_conf} $out/nginx.conf ln -sf ${pkgs.nginx}/bin/nginx $out/nginx ''; }; } ); overlays.default = final: prev: { homepage = final.lib.makeScope final.newScope ( homepageScope: let homepage_private = fetchGit { url = "git@code.fizz.buzz:talexander/homepage_private.git"; ref = "main"; rev = "89ba9628bf3e596345bc83f59cef5a2943584894"; }; natter' = (natter.overlays.default final final).natter.release; organic_ast_explorer' = (organic_ast_explorer.overlays.default final final).organic_ast_explorer.release; dependencies = { natter = natter'; organic_ast_explorer = organic_ast_explorer'; inherit homepage_private; }; release = homepageScope.callPackage ./nix/package.nix dependencies; in { inherit release; dependencies = (builtins.attrValues dependencies); } ); }; }; }