{{define "title"}}nix flakes for busy people{{end}}
Just put
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
in your configuration.nix. IMO it's a shame that flakes
have been locked behind experimental for so long, it's a large part of
why they have a bad reputation. It's absolutely worth enabling them
since they're so useful.
nix shell github:ggerganov/llama.cpp
or to install a specific flake output:
nix shell github:ggerganov/llama.cpp#rocm
To list the outputs for a specific flake, you can usually type
nix shell github:ggerganov/llama.cpp#<tab> and your
shell may or may not list the outputs. If anyone has a better way to do this,
please let me know.
To install a flake in your system profile, use
nix profile install github:ggerganov/llama.cpp
Here is the greatest power of nix flakes: the ability to install and use them as first-class packages just like anything from nixpkgs. It feels a lot better integrated than something like the AUR.
nix flake init -t templates#go-hello
Replace go-hello with whatever template you want that most closely matches your project configuration. Unfortunately many of these templates have the questionable behavior of also overwriting source files in the current directory, so I recommend only running nix flake init in an empty directory, and copying the flake.nix file over to your existing project.
Flakes are a way to replace the centralized nixpkgs repository with decentralized packages controlled directly by upstream. In many ways Linux packaging has been moving more and more towards upstream with things like appimages or flatpak, and being able to remove many of the distro-specific hacks needed to make things run on various systems. Nix flakes address this same issue, by allowing upstream to control their own flake.nix, and pull in the specific versions of any dependencies they might need. They also give an easy way to install any programs that might not be packaged yet for nixpkgs, as long as anyone has written a flake and published it online.
Nix flakes are still rough around the edges, and the worst part for a new Nix user is the lack of documentation. This is a large part of why I'm writing yet another nix flakes tutorial! https://xeiaso.net/blog/nix-flakes-1-2022-02-21 is really good, but reading this as a new user, I only wanted to know how to install an app packaged with flakes, and I didn't care so much about how to package my own stuff yet.