Scripts to (interactively) demonstrate capabilities of Nix. Mirror of https://gitlab.com/SFrijters/nix-container-demo
{
  description = "Example for cross-compiling a Windows binary executable";

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

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs {
          inherit system;
          overlays = [
            (final: prev: {
              # Disable some CURL features
              curl-minimal = (prev.curl.overrideAttrs (finalAttrs: prevAttrs: {
                # Force static build
                configureFlags = (prevAttrs.configureFlags or [ ]) ++ [ "--enable-static" "--disable-shared" ];
              })).override {
                brotliSupport = false;
                # krb5 fails to build with mingw
                gssSupport = false;
                zstdSupport = false;
                scpSupport = false;

                # Force static build
                nghttp2 = ((prev.nghttp2.overrideAttrs (finalAttrs: prevAttrs: {
                  configureFlags = (prevAttrs.configureFlags or [ ]) ++ [ "--enable-static" "--disable-shared" ];
                  postPatch = ''
                    sed -i '1i #define NGHTTP2_STATICLIB' lib/includes/nghttp2/nghttp2.h
                  '';
                })).override {
                  # tzdata fails to build with mingw: undefined reference to setenv
                  enableTests = false;
                });

                # Force static build
                libidn2 = prev.libidn2.overrideAttrs (finalAttrs: prevAttrs: {
                  configureFlags = (prevAttrs.configureFlags or [ ]) ++ [ "--enable-static" "--disable-shared" ];
                });
                zlib = prev.zlib.override { static = true; shared = false; };
              };

              wttr-delft = (prev.callPackage ./wttr-delft.nix { curl = final.curl-minimal; }).overrideAttrs (finalAttrs: prevAttrs: {
                # Force static build
                cmakeFlags = [
                  "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"
                  "-DCMAKE_EXE_LINKER_FLAGS=-static"
                ];

                # This is just so we don't get colour output, it looks bad when running through wine
                postPatch = ''
                  sed -i 's|https://gitlab.com/SFrijters/nix-container-demo/-/raw/master/data/weather-static|https://wttr.in/Delft?T|' simple.c
                  sed -i '44i curl_easy_setopt(curl, CURLOPT_USERAGENT, "curl");' simple.c
                '';
              });
            })
          ];
        };
      in
      {
        packages.default = pkgs.pkgsCross.mingwW64.wttr-delft;
        devShells.default = import ./podman-devshell.nix { inherit pkgs; };
        formatter = pkgs.nixpkgs-fmt;
      }
    );
}