| I've been using flakes exclusively for project dependencies, not for system config. I've been doing this for a year or so but I still feel like a newbie. What I like about flakes is that they (appear to) let you hide complexity. I haven't seen this happen in a real community yet, but one could imagine JimBob's flake for foo-type work. JimBob has put a lot of thought into which tools you need and has his flake up on github for other foo-workers to use. JimBob is kind of a big deal in the foo community. Then you've got Susie, who has been using JimBob's flake, but she doesn't really know all of its ins-and-outs. Eventually she needs something extra, because she specializes in bar (a subset of foo). With flakes, if I understand them, she can use JimBob's flake as an input, add the piece she needs, ad publish her own JimBob-with-Susies-tweaks flake. In this way you can sort of imagine a constellation of flakes (I've been imagining the nix snowflake as a nix flake with three inputs and three outputs) which represent the various needs of the community that's using them. In a config without flakes, my feeling is that there are fewer boundaries, so you have to keep more in your head about what's already in place. If you've enabled a service in /etc/nix/nix.conf and you're using home manager as a module, you can't disable it there because the values will conflict. Granted, I don't actually know what a system configure with flakes looks like, but I hope it lets me compose flakes in a way that mirrors what JimBob and Susie are doing. I want to log in and say: > give me base_system -> my_print_drivers -> image_tools ...and those flakes will compose so that I can use gimp and print photos. But since `my_printer_drivers` is a flake, I can also reference it from a different machine like: > give me other_base_system -> my_print_drivers -> document_tools This is unlikely, but let's suppose my printer is super fancy and can print in silver and gold ink, but in order to make this work the image tools flake has to change something about the printer driver. In a "flat" system config you're going to get a conflict, right? my_print_drivers to be one way, image_tools wants it to be another way, so you're going to have to sort that out. But flakes are portable and composable in a way that lets you ignore the big picture and just focus on what you need. If you take something as an input and make an output where that thing is changed... it's changed. You can get away with ignoring more. Of course that's the real question. can you get away with ignoring that much? I hope so. |