+

+ Mirrors are a very good idea for project to have. +

+
    +
  • +

    + Increases project resiliance as all servers go down so ideally something should be online to fallback to +

    +
  • +
  • +

    + Helps accessibility as some regions block users based on sanctions & others might not agree to the terms of service or privacy laws in the jurisdiction of some options +

    +
  • +
  • +

    + If self-hosted, then you/your project owns the code — which can help with potential censorship +

    +
  • +
+

+ At the time of writing, Nix flakes does not & cannot support mirrors in input pinning requiring an input pinner like Nixtamal to automate it. +

+
+

+ How to pin a repository with mirrors in Nix + Nixtamal +

+

+ Mirrors are not supported on all kinds (fetcher limitations) however these can be supported: +

+
    +
  • +

    + File +

    +
  • +
  • +

    + Archive +

    +
  • +
  • +

    + Darcs +

    +
  • +
  • +

    + Pijul +

    +
  • +
  • +

    + Git (only in eval time fetching using builtins.fetchGit) +

    +
  • +
+

+ Let’s show the way using the Soupault repository, but if it’s one of the supported kinds, any will work. +

+

+ Latest revision +

+
// manifest.kdl
+inputs {
+	soupault {
+		archive {
+			url "https://codeberg.org/PataphysicalSociety/soupault/archive/{{fresh-value}}.tar.gz"
+			mirrors "https://github.com/PataphysicalSociety/soupault/archive/{{fresh-value}}.tar.gz"
+		}
+	}
+	fresh-cmd {
+		$ git ls-remote --branches main "https://codeberg.org/PataphysicalSociety/soupault.git"
+		| cut -f1
+	}
+}
+
+