惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
爱范儿
爱范儿
WordPress大学
WordPress大学
V
V2EX
宝玉的分享
宝玉的分享
小众软件
小众软件
B
Blog
博客园 - 叶小钗
U
Unit 42
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
H
Help Net Security
P
Proofpoint News Feed
D
Docker
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
月光博客
月光博客

Lobsters

CIFSwitch: a non-universal Linux local root vulnerability RIPE NCC session fixation: poaching logins with an Atlas probe GNOME 2.20 but its Web Components Agentic Search for Context Engineering – Leonie Monigatti Garnix is shutting down [not OC] akashina.tngl.sh/jjc Concerning Emacs (and Jazz) Nitpicking the shell history scene in ‘Tron: Legacy’ What's cooking on SourceHut? Q2 2026 The tenth OpenPGP email summit Package managers that package package managers Clojure on Fennel part three: parsing WordPress at 23 Finding Miscompiles for Fun, Not Profit GitHub - creusot-rs/creusot: Creusot helps you prove your Rust code is correct. Announcing Rust 1.96.0 | Rust Blog A Love Letter to Neovim sqlite AGENTS.md Am I a Bad Friend? CSS vs. JavaScript • Josh W. Comeau Erlang Ecosystem Foundation - Supporting the BEAM community A brief note about slot access cost in Common Lisp Keyboard latency probe Rethinking the GNOME clipboard issues Back to the Building Blocks’ Building Blocks Tech Notes: Theseus: translating win32 to wasm Fast is better than slow Content-addressed Rust builds (or, what kache actually caches) Intent to Prototype: Embedding API Canada’s Bill C-22 and the security cost of collecting more data
GuixPkgs: every Guix package, as a Nix flake
fzakaria.com · 2026-06-26 · via Lobsters

Published 2026-06-25 on Farid Zakaria's Blog

GuixPkgs Logo

I wrote earlier about what I believe to be an absurd idea, The Guix Nix Abomination: a tool, guix-transfer, that takes any Guix derivation and rewrites it into a Nix derivation, and lets nix-daemon build it.

With this primitive in hand, I pondered what it would mean to import the entire Guix package set into Nix.

That means we could even build a flake that is all of Guix packages available for use.

Well…. Hello GuixPkgs. 🤯

Nixpkgs is famously the largest package repository in the world. GuixPkgs makes it bigger by including in the entire GNU Guix package set so you can mix and match Guix and Nixpkgs packages in the same flake.

{
  description = "A project mixing Nix and Guix";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    guixpkgs.url = "github:fzakaria/guixpkgs";
  };

  outputs = { self, nixpkgs, guixpkgs }:
  let
    system = "x86_64-linux";
    pkgs = nixpkgs.legacyPackages.${system};
    guixPkgs = guixpkgs.packages.${system};
  in {
    devShells.${system}.default = pkgs.mkShell {
      buildInputs = [
        pkgs.git        # from Nixpkgs
        guixPkgs.hello  # from Guix, via GuixPkgs
      ];
    };
  };
}
❯ nix build github:fzakaria/guixpkgs#hello
❯ ./result/bin/hello
Hello, world!

☝ Don’t forget, that hello is built from Guix’s source bootstrap, a 357-byte seed all the way up to GCC and glibc but it lands in /nix/store and behaves like any other Nix package. No guix required on the consuming side.

Is this just a joke or is there anything of value here?

Well, some packages only exist in Guix, notable many GNU Guile built software, like guile-png that are now easily available in Nix. 🤷

How does it work?

  1. Pins a Guix commit and uses guix time-machine to get derivations from that exact Guix thus decoupling the result from whatever guix-daemon version happens to be on the host.
  2. Dumps every package’s .drv and feeds them to guix-transfer --disable-tests --emit-nix-dir pkgs.
  3. Rebuilds the by-name/ index and records the Guix channel + commit + timestamp in guix-metadata.json.

Realising a Guix package under Nix recompiles Guix’s entire source bootstrap. That’s hours per closure. To skip it, GuixPkgs ships a Cachix, cachix use guixpkgs, binary cache that is included in the flake. Thank you @domenkozar for sponsoring me with extra storage. 🙏

What’s next?

We can now do some truly horrendous evil stuff. What about an overlay that replaces every package from Nixpkgs which one that exists in Guix? 😈

We can then build a NixOS machine where every package is the Guix equivalent 😱.

This was a really fun project to pursue during TacoSprint.

taco sprint group photo


Improve this page @ 9991133
The content for this site is CC-BY-SA.