mirror of
https://github.com/foo-dogsquared/wiki.git
synced 2025-01-31 10:58:28 +00:00
b088086b06
Now, it's all under the notebook umbrella. Seems to be appropriate as it is just my notes after all. I also updated some notes from there. I didn't keep track of what it is this time. Something about more learning notes extracted from my "Learning how to learn" course notes and then some. Lack of time and hurriness just makes it difficult to track but it should be under version control already.
106 lines
4.2 KiB
Org Mode
106 lines
4.2 KiB
Org Mode
:PROPERTIES:
|
|
:ID: 6873de22-9eac-492c-93a8-6cdf8cbfc0f8
|
|
:END:
|
|
#+title: Nix flakes
|
|
#+date: 2021-07-18 22:34:11 +08:00
|
|
#+date_modified: 2021-07-18 22:34:11 +08:00
|
|
#+language: en
|
|
|
|
|
|
#+begin_note
|
|
As of 2021-06-30, the version used for this note is at v2.3 so it needs to be invoked with the unstable version.
|
|
#+end_note
|
|
|
|
- similar to [[https://guix.gnu.org/manual/en/html_node/Channels.html][Guix channels]]
|
|
- a collection of packages and functions while making it easy to configure Nix declaratively
|
|
- replaces the traditional Nix channels since fully reproducing an environment with Nix requires special care in practice;
|
|
plus, there's no standard way of composing projects with Nix
|
|
- as of 2021-06-30, this is on the unstable version of the Nix package manager and needs some additional configuration
|
|
|
|
why flakes?
|
|
|
|
- provides a structure for discoverability
|
|
- makes 100% reproducibility a little easier with Nix
|
|
- in case you're using NixOS, it also provides an easier way to extend it with third-party custom modules
|
|
|
|
Here's an example to interact with a flake.
|
|
It will show the entire outputs of a flake as well as the normalized version of the flake object.
|
|
|
|
#+name: flake-sample-object
|
|
#+begin_src python :results value silent :exports none
|
|
return "github:edolstra/dwarffs"
|
|
#+end_src
|
|
|
|
#+begin_src shell :shebang "#!/usr/bin/env nix-shell"
|
|
#! nix-shell -i bash -p nixUnstable
|
|
nix --experimental-features 'nix-command flakes' flake show <<flake-sample-object()>> | sed -e "s/\x1b\[.\{1,5\}m//g"
|
|
#+end_src
|
|
|
|
#+results:
|
|
#+begin_example
|
|
github:edolstra/dwarffs/f691e2c991e75edb22836f1dbe632c40324215c5
|
|
├───checks
|
|
│ ├───aarch64-linux
|
|
│ │ ├───build: derivation 'dwarffs-0.1.20210121.f691e2c'
|
|
│ │ └───test: derivation 'vm-test-run-unnamed'
|
|
│ ├───i686-linux
|
|
│ │ ├───build: derivation 'dwarffs-0.1.20210121.f691e2c'
|
|
│ │ └───test: derivation 'vm-test-run-unnamed'
|
|
│ └───x86_64-linux
|
|
│ ├───build: derivation 'dwarffs-0.1.20210121.f691e2c'
|
|
│ └───test: derivation 'vm-test-run-unnamed'
|
|
├───defaultPackage
|
|
│ ├───aarch64-linux: package 'dwarffs-0.1.20210121.f691e2c'
|
|
│ ├───i686-linux: package 'dwarffs-0.1.20210121.f691e2c'
|
|
│ └───x86_64-linux: package 'dwarffs-0.1.20210121.f691e2c'
|
|
├───nixosModules
|
|
│ └───dwarffs: NixOS module
|
|
└───overlay: Nixpkgs overlay
|
|
#+end_example
|
|
|
|
Let's build from one of the outputs of call_flake-sample-object().
|
|
|
|
#+begin_src shell :shebang "#!/usr/bin/env nix-shell"
|
|
#! nix-shell -i bash -p nixUnstable
|
|
nix --experimental-features 'nix-command flakes' build 'github:edolstra/dwarffs#checks.aarch64-linux.build'
|
|
|
|
nix --experimental-features 'nix-command flakes' shell 'github:edolstra/dwarffs' --command dwarffs --version
|
|
#+end_src
|
|
|
|
#+results:
|
|
: fusermount version: 2.9.9
|
|
|
|
For full reproducibility, you can refer to specific point of a flake (e.g., commit).
|
|
|
|
#+begin_tip
|
|
To easily get a pinned URL, you can run =flake metadata= subcommand.
|
|
|
|
#+begin_src shell :shebang "#!/usr/bin/env nix-shell"
|
|
#! nix-shell -i bash -p nixUnstable
|
|
nix --experimental-features 'nix-command flakes' flake metadata 'github:edolstra/dwarffs' | sed -e "s/\x1b\[.\{1,5\}m//g"
|
|
#+end_src
|
|
|
|
#+results:
|
|
#+begin_example
|
|
Resolved URL: github:edolstra/dwarffs
|
|
Locked URL: github:edolstra/dwarffs/f691e2c991e75edb22836f1dbe632c40324215c5
|
|
Description: A filesystem that fetches DWARF debug info from the Internet on demand
|
|
Path: /nix/store/769s05vjydmc2lcf6b02az28wsa9ixh1-source
|
|
Revision: f691e2c991e75edb22836f1dbe632c40324215c5
|
|
Last modified: 2021-01-21 22:41:26
|
|
Inputs:
|
|
├───nix: github:NixOS/nix/6254b1f5d298ff73127d7b0f0da48f142bdc753c
|
|
│ ├───lowdown-src: github:kristapsdz/lowdown/1705b4a26fbf065d9574dce47a94e8c7c79e052f
|
|
│ └───nixpkgs: github:NixOS/nixpkgs/ad0d20345219790533ebe06571f82ed6b034db31
|
|
└───nixpkgs follows input 'nix/nixpkgs'
|
|
#+end_example
|
|
#+end_tip
|
|
|
|
#+begin_src shell :shebang "#!/usr/bin/env nix-shell"
|
|
#! nix-shell -i bash -p nixUnstable
|
|
nix --experimental-features 'nix-command flakes' shell github:edolstra/dwarffs/f691e2c991e75edb22836f1dbe632c40324215c5 --command dwarffs --version
|
|
#+end_src
|
|
|
|
#+results:
|
|
: fusermount version: 2.9.9
|