{ description = "A very basic flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; flutils.url = "github:numtide/flake-utils"; nginx = { url = "github:nginx/nginx"; flake = false; }; }; outputs = { self, nixpkgs, flutils, nginx }: flutils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; gems = pkgs.bundlerEnv { name = "blog-pim"; gemdir = ./src; }; patch-feed-date = pkgs.stdenv.mkDerivation { name = "path-feed-date"; propagatedBuildInputs = [ pkgs.python3 ]; dontUnpack = true; installPhase = "install -Dm755 ${./patch-feed-date.py} $out/bin/patch-feed-date"; }; nginxPort = "80"; nginxConf = pkgs.writeText "nginx.conf" '' user nobody nobody; daemon off; error_log /dev/stdout info; pid /dev/null; events {} http { access_log /dev/stdout; include ${nginx.outPath}/conf/mime.types; server { listen ${nginxPort}; index index.html; location / { root ${self.packages.${system}.static-website}; } } } ''; in { packages = { static-website = pkgs.stdenv.mkDerivation { name = "blog-pim"; src = ./src; sourceRoot = "src"; buildInputs = [ gems gems.wrappedRuby patch-feed-date ]; buildPhase = '' bundle exec jekyll build ''; installPhase = '' mkdir -p $out cp -r _site/* $out/ patch-feed-date --file _site/feed.xml > $out/feed.xml ''; }; container-image = pkgs.dockerTools.buildLayeredImage { name = "blog-pim"; tag = "latest"; contents = [ pkgs.fakeNss pkgs.nginx ]; extraCommands = '' mkdir -p tmp/nginx_client_body mkdir -p var/log/nginx ''; config = { Cmd = [ "nginx" "-c" nginxConf ]; ExposedPorts = { "${nginxPort}/tcp" = { }; }; }; }; }; }); }