8 Jul 2025 |
dmjio | is there a function to parse a flake lockfile into a set?
let sources = parseFlakeLock (builtins.readFile ./flake.lock);
something like this
| 16:07:35 |
ners | Yes, in fact flake-compat is based on this principle. See examples here: https://github.com/nix-community/flake-compat | 16:13:58 |
ners | * Yes, in fact flake-compat is based on this principle. See examples here: https://github.com/nix-community/flake-compat
Basically: builtins.fromJSON (builtins.readFile ./flake.lock);
| 16:14:48 |
dmjio | so I'm just doing this rn
# fetch from flake.lock
with (builtins.fromJSON (builtins.readFile ../flake.lock));
fetchFromFlakeLock = args:
fetchFromGitHub {
inherit (args.locked) owner repo rev;
hash = args.locked.narHash;
};
servant = fetchFromFlake (nodes.servant);
| 19:50:58 |
dmjio | does fetchFromFlakeLock already exist somewhere | 19:51:18 |
dmjio | okay will check it out, we'll see | 19:54:50 |
dmjio | Also, is there a way to generate a flake.nix on the fly, similar to how callCabal2nix works | 19:55:07 |
dmjio | not all my repos have flakes and I'd have to add it to each one basically | 19:55:29 |
dmjio | but I'm going to just override the nixpkgs with nixpkgs.follows anyways | 19:55:39 |
dmjio | otherwise the flakes will be mutually recursive | 20:02:12 |
dmjio | * otherwise the flakes will be mutually recursive (some of them) | 20:02:23 |
dmjio | Also | 21:19:51 |
dmjio | Who is the CEO of Flakeroku | 21:19:57 |
dmjio | What is the flake heroku equivalent | 21:20:15 |
sellout | I’m having a hell of a time caching this one project, I think it must be related to Haskell / IFD. I follow the Cachix instructions for caching build & runtime deps (https://docs.cachix.org/pushing#pushing-build-and-runtime-dependencies), I do that on all three supported systems, and then I expect in this CI run (https://github.com/sellout/unison/actions/runs/16144540250), that it won’t have to build anything. But that’s never what happens. You can see the two macOS runs are 2-3 hours, and the linux one gets “canceled” for some reason I can’t deduce (but not before trying to build a ton of stuff). It’s on this branch (https://github.com/sellout/unison/tree/update-nix), but I feel like I run into this every time I update Nix at all. When I run it on a different machine locally, I just see “evaluating derivation '…#all'” for ages before anything else happens, which is what makes me think it’s IFD. | 22:58:47 |
| @vigress9:matrix.org left the room. | 23:21:02 |
9 Jul 2025 |
| jonhermansen joined the room. | 01:18:54 |
Patrick Steele | Does anyone have an example of how to structure a flake to allow builds to run with profiling enabled? If I add -prof to my cabal file, I get Failed to load dynamic interface file for Prelude errors, even in a simple project with no dependencies. | 02:18:05 |
Patrick Steele | My flake is https://pastebin.com/hUxz89uA right now. I've tried various incantations from https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/haskell.section.md to try to coerce profiling to work. | 02:20:01 |
Patrick Steele | I'm wondering whether my use of pkgs.haskellPackages , as opposed to e.g. pkgs.haskell.packages.ghc984 , is somehow an issue | 02:21:34 |
eldritchcookie | for those that use the nixpkgs haskell infrastructure on ghc 9.12.2 do you have rename capability with hls? i am trying to narrow down where the issue is and while it seems that version 2.11.0.0 has full support i was unable to find if the version 2.10.0.0 has the hls-rename-plugin | 11:35:17 |
chreekat | i've thought about this | 12:33:53 |
maralorn | I am pretty sure unison uses haskell.nix yes, that is a ton of IFD. However of course building the exact derivation twice should work. | 14:04:09 |
maralorn | On which plattform is this? | 14:04:32 |
maralorn | Generally the nixpkgs infrastructure is already profiling enabled no intervention required. | 14:05:09 |
maralorn | Maybe however you don’t want to use -prof and instead --enable-library-profiling. Not sure. | 14:05:54 |
maralorn | Yeah, 2.10 had a lot of plugins disabled on 9.12 and had that documented wrongly in the support matrix in their user guide. | 14:07:00 |
sellout | Yeah, building the derivation twice on the same machine works. The trouble (I think) is figuring out what to push to the cache so that when a fresh machine (e.g., CI runner) does nix build .#all , it can relatively quickly download the cached all closure. But (again, I think) it ends up building the world just to evaluate all.drv , when it should be able to pull all.drv from the cache as well … which, uh, I guess makes it clear that I should just need to push all.drv as well … which I’m pretty sure I have been. So now some more digging to see how I messed that up. | 16:48:52 |
sellout | I know the Cachix incantation removes the .drv s before pushing, but I had added those back in. | 16:49:42 |
sellout | Thanks for the response – it at least gives me more to explore. | 16:51:15 |