{ description = "mykiwi.blog dev shell"; inputs.multiverse.url = "github:fzakaria/nixpkgs-multiverse"; outputs = { self, multiverse }: let system = "x86_64-linux"; pin = multiverse.multiverse.${system}; pkgs = pin.tip; hugo = pin.version "hugo" "0.166.0"; dart-sass = pin.version "dart-sass" "1.104.0"; opentofu = pin.version "opentofu" "1.12.6"; wrangler = pin.version "wrangler" "4.129.0"; in { packages.${system}.default = pkgs.stdenvNoCC.mkDerivation { name = "mykiwi.blog"; src = ./blog; nativeBuildInputs = [ hugo dart-sass ]; buildPhase = '' HUGO_PARAMS_NIXSTOREPATH="$out" hugo --minify --destination "$out" ''; dontInstall = true; }; devShells.${system} = { default = pkgs.mkShell { name = "mykiwi-blog"; packages = [ hugo dart-sass ]; shellHook = '' dim=$'\033[2m' reset=$'\033[0m' printf '%-11s%-9s%s%s%s\n' "Hugo" "$(hugo version | sed -n 's/.*v\([0-9.]*\)+.*/\1/p')" "$dim" "https://github.com/gohugoio/hugo/releases" "$reset" printf '%-11s%-9s%s%s%s\n' "Dart Sass" "$(sass --version)" "$dim" "https://github.com/sass/dart-sass/releases" "$reset" ''; }; # Cloudflare provisioning (infra/) - kept separate from the default # shell so writing a blog post doesn't require pulling in tofu/wrangler. infra = pkgs.mkShell { name = "mykiwi-blog-infra"; packages = [ opentofu wrangler ]; shellHook = '' dim=$'\033[2m' reset=$'\033[0m' printf '%-11s%-9s%s%s%s\n' "OpenTofu" "$(tofu version | sed -n 's/OpenTofu v\([0-9.]*\)/\1/p')" "$dim" "https://github.com/opentofu/opentofu/releases" "$reset" printf '%-11s%-9s%s%s%s\n' "Wrangler" "$(wrangler --version)" "$dim" "https://github.com/cloudflare/workers-sdk/releases" "$reset" ''; }; }; apps.${system} = { # `nix run .#infra -- plan` / `nix run .#infra -- apply` (or any # other tofu subcommand) against infra/, from wherever in the repo # you happen to be. infra = { type = "app"; program = "${pkgs.writeShellApplication { name = "mykiwi-blog-infra"; runtimeInputs = [ opentofu pkgs.git ]; text = '' root="$(git rev-parse --show-toplevel)" tofu -chdir="$root/infra" init tofu -chdir="$root/infra" "$@" ''; }}/bin/mykiwi-blog-infra"; }; # `nix run .#deploy` - builds the site (the same `packages.default` # derivation `nix build` uses) and pushes each language's output # folder to its matching Cloudflare Pages project. Needs # CLOUDFLARE_API_TOKEN, same as `infra`. deploy = { type = "app"; program = "${pkgs.writeShellApplication { name = "mykiwi-blog-deploy"; runtimeInputs = [ wrangler pkgs.git pkgs.nix ]; text = '' root="$(git rev-parse --show-toplevel)" link="$(mktemp -d)/result" nix build "$root#default" --out-link "$link" for lang in en fr pt ja; do project="mykiwi-blog-$lang" echo "==> deploying $lang -> $project" wrangler pages deploy "$link/$lang" --project-name="$project" --branch=main done ''; }}/bin/mykiwi-blog-deploy"; }; }; }; }