From 43a4ee6234d3a38d6f9853b53c3d03cc67cd3287 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Tue, 22 Oct 2024 18:49:51 -0700 Subject: Write a blog post. --- .../blog/posts/2024-10-22_nix_flakes.html.template | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 templates/blog/posts/2024-10-22_nix_flakes.html.template (limited to 'templates/blog/posts') diff --git a/templates/blog/posts/2024-10-22_nix_flakes.html.template b/templates/blog/posts/2024-10-22_nix_flakes.html.template new file mode 100644 index 0000000..b9b2ca0 --- /dev/null +++ b/templates/blog/posts/2024-10-22_nix_flakes.html.template @@ -0,0 +1,82 @@ +

nix flakes for busy people

+ +

TL;DR

+ +

To enable flakes on a NixOS system

+ +

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.

+ +

To use a flake from github

+ +
+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.

+ +

To create a nix flake for your own project

+ +
+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.

+ +

A philosophical intro to nix flakes

+ +

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.

+ +

The bad parts

+ +

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.

-- cgit v1.3.1