-
-
Notifications
You must be signed in to change notification settings - Fork 10
Description
Are you a consumer of zig2nix? Getting errors?
This documents migration steps required after commit b548020
Flake structure changes
Before this, the zig2nix wasn't a valid flake. It had rather weird structure. Now zig2nix doesn't use nested trees to hide its derivations, but rather all outputs can be seen with nix flake show github:Cloudef/zig2nix.
However while zig2nix is now a valid flake, projects using zig2nix may not pass nix flake check --all-systems due to zig2nix relying on IFD. The use of IFD may be removed in future see #33
The structure changes means package names are now different:
zig-master
zig-latest
zig-0_14_0
zig-0_13_0
zig-src-master
zig-src-latest
zig-src-0_14_0
zig-src-0_13_0
The flake no longer provides a default package. Refer to the version of the zig you need explicitly.
If your flake created zig-env with zig.bin.master it is now simply zig-master.
The src variants of zig may not build for every version yet. #34
Apps
The default app in the flake is now zig2nix (for zig-latest) which is a tool for bridging nix and zig together. It now merges all the tools zon2json, zon2json-lock and zon2nix into a single executable, plus offers some new functionality that simplifies zig2nix project as a whole.
zon2json, zon2json-lock and zon2nix aliases are still provided for backwards compatibility in the zig2nix main flake, but are removed from the templates.
To run a specific version of a zig compiler using the flake url, explicitly specify the zig version instead without the zig- prefix as seen in the packages: nix run github:Cloudef/zig2nix#latest version
The multimedia variants are prefixed with multimedia-: nix run github:Cloudef/zig2nix#multimedia-latest version
Devshells
Same changes as with apps.
Overlays
Overlays were never really tested and are removed. I don't personally use them, and such if overlays are required I'd ask from someone to contribute them back with a automated testing that they work.
Templates
The template flake is simplified. It no longer covers advanced use cases, but simply offers the typical zig project and packaging setup for nix.
zig-env
The following arguments from the constructors are removed:
customRuntimeDepsandcustomRuntimeLibs, instead providenativeBuildInputs,zigWrapperBinsandzigWrapperLibsdirectly topackageormkShell.depsgiven toappandapp-no-rootare automatically added to the correct search paths. This was very akward api and it requirednixpkgsbefore the construction of zig-env, it also would add lots of implicit state which was ugly.customAppHook, instead wrap the app helpers directlycustomShellHook, givemkShella shellHook insteadenableVulkanand friends. Removed, setup thenativeBuildInputs,zigWrapperBinsandzigWrapperLibsyourself for your environment.
The following keys are removed from the attribute set:
packageForTarget, usezigTargetattribute for thepackageinstead if you want to cross-compile from a flake.pkgsForTargethaven't been removed. This was removed, because cross-compiling within flakes like this is unusual. The package itself does correctly build usingstdenvNoCCand usestargetPlatformas a target, so it should work even when using a cross-compilingstdenv.lib,fromZonandderiveFromLockFileare now in the root of zig-env, other keys are removed.targetis a new function that can be used to querytargetinformation (accepts zig target triple, nix target or crosstool toolchain target)
Zig 0.14 package management changes
Zig 0.14 changed its package hashes. If you are targeting a older zig version then make sure you are running the correct zig2nix when generating a lock file, otherwise the lock file generation will fail. You can use nix run github:Cloudef/zig2nix#zig2nix-0_13_0 -- zon2lock for 0.13 for example.
zon2json-lock changes
The format now stores a rev field for git packages. If you used git packages, remove your old zon2json-lock file and regenerate it.
Examples
Lastly, as always you can look for some example setups in here:
Future changes
In future, I may introduce automatic zls/zigscient integration