third_party/nix: move overrides to toolchain-bundle derivation

We have multiple consumers of nixpkgs. The nix-shell for development
and our toolchain-bundle. To reduce the amount of applied overlays
in normal evaluation, we move all overrides/patches that are only
required for the toolchain bundle to its definition. Additionally
all small overrides get inlined as its actually more easy to read.
I also refactored the way the toolchain-bundle is constructed to make
it easier to extend.

Change-Id: If7daafb6de43d26a0b95d0248cfb8c573cc5bbbe
Reviewed-on: https://review.monogon.dev/c/monogon/+/4457
Reviewed-by: Leopold Schabel <leo@monogon.tech>
Tested-by: Jenkins CI
diff --git a/build/toolchain/toolchain-bundle/pkgs/perl/default.nix b/build/toolchain/toolchain-bundle/pkgs/perl/default.nix
new file mode 100644
index 0000000..e8f5a0d
--- /dev/null
+++ b/build/toolchain/toolchain-bundle/pkgs/perl/default.nix
@@ -0,0 +1,28 @@
+{ lib, super, ... }@inputs:
+let
+  # Passthrough default configuration without our custom super attribute. Perl
+  # requires itself which breaks when we don't pass through the default attributes.
+  perl = super.perl.override (_: (lib.filterAttrs (name: _: name != "super") inputs));
+in
+perl.overrideAttrs (old: {
+  patches = old.patches ++ [
+    ./static_build.patch
+  ];
+
+  preConfigure = old.preConfigure + ''
+    cat >> config.over <<EOF
+    osvers="musllinux"
+    EOF
+  '';
+
+  configureFlags = old.configureFlags ++ [
+    "-Dotherlibdirs=.../../lib/perl5/${old.version}" # Tell perl to use a relative libdir
+    # 1. Why isn't this the default?
+    # 2. Apparently nobody uses this option, because it is missing the quotes inside the config_h.SH
+    # 3. Why should a variable called "procselfexe" be used with a different path than /proc/self/exe?
+    # 4. I really dislike perl. - fionera
+    "-Dprocselfexe=\"/proc/self/exe\""
+  ];
+
+  env.NIX_CFLAGS_COMPILE = (old.NIX_CFLAGS_COMPILE or "") + " -Wno-error=implicit-function-declaration";
+})