====== NIX ======
===== Documentation =====
* https://github.com/shajra/example-nix/tree/master/tutorials/
* https://nokomprendo.gitlab.io/index.html
* https://www.sam.today/blog/environments-with-nix-shell-learning-nix-pt-1/
* Nix:
* [[https://nixos.org/nixos/nix-pills/index.html|Pills]]
* [[https://nixos.org/nixos/manual/|NixOS]]
* [[https://nixos.org/nixos/options.html|Options]]
* [[https://nixos.org/nixos/packages.html?channel=nixos-19.09|Packages]]
* [[https://nixos.org/nix/manual/|Nix]]
* [[https://nixos.org/nixpkgs/manual/|Nixpkgs]]
* [[https://nixos.org/nixops/manual/|NixOPS]]
* [[https://discourse.nixos.org/|Forum]]
* [[https://nixos.wiki/index.php?title=Cheatsheet&useskin=vector|Cheatsheet]]
===== nix-user-chroot =====
https://github.com/nix-community/nix-user-chroot
Outil qui permet de donner un répertoire qui sera présenter comme point de montage ''/nix'' grâce au namespace en espace utilisateur:
$ mkdir -m 0755 ~/.nix
$ nix-user-chroot ~/.nix ${SHELL=bash} -l
===== Installation =====
$ sh <(curl https://nixos.org/nix/install)
Pour 1 utilisateur:
$ sh <(curl https://nixos.org/nix/install) --no-daemon
Multi-utilisateurs:
$ sh <(curl https://nixos.org/nix/install) --daemon
===== Variables =====
==== NIX_PATH ====
NIX_PATH=nixpkgs=/home/gigix/.nix-defexpr/channels/nixpkgs
==== NIX_PAGER ====
export NIX_PAGER=
==== nixpkgs ====
nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-15.09.tar.gz
nixpkgs=channel:nixos-15.09
===== Fichiers =====
==== config.nix ====
Fichier utilisateur: ''~/.nixpkgs/config.nix''
===== Commandes =====
==== nox ====
$ nix-env -i nox
$ nox emacs
==== nix-env ====
$ nix-env -qasP hello --description
$ nix-env -iA nixpkgs.hello
$ nix-env -q
$ nix-env -qc
$ nix-env -u
$ nix-env -u --dry-run
$ nix-env -e hello
Force a specific channel (master in this example):
$ nix-env -f https://github.com/NixOS/nixpkgs/archive/master.tar.gz -iA hello
$ nix-env --list-generations
$ nix-env --rollback
switching from generation 3 to 2
$ nix-env -G 3
switching from generation 2 to 3
$ nix-env --switch-profile /nix/var/nix/profiles/gigix
$ nix-env --switch-profile /nix/var/nix/profiles/default
{
packageOverrides = pkgs:
rec {
homeEnv = pkgs.buildEnv {
name = "homeEnv";
paths = [ pkgs.emacs24 pkgs.bsdgames ];
};
workEnv = pkgs.buildEnv {
name = "workEnv";
paths = [ pkgs.emacs23 pkgs.perl ];
};
};
}
$ nix-env -p /nix/var/nix/profiles/per-user/gigix/workEnv -i workEnv
$ nix-env -p /nix/var/nix/profiles/per-user/gigix/homeEnv -i homeEnv
$ nix-env -p /nix/var/nix/profiles/other-profile -i subversion
$ nix-env --delete-generations old
...
removing generation 73
removing generation 74
removing generation 75
removing generation 76
==== nix-build ====
Builder psmisc en 32 bits:
$ nix-build -A psmisc --argstr system i686-linux
$ nix-build '' -A stdenv
==== nix-shell ====
* https://www.sam.today/blog/environments-with-nix-shell-learning-nix-pt-1/
{ pkgs ? import {} }:
with pkgs;
mkShell {
buildInputs = [
elixir_1_10
nodejs-12_x
];
}
$ nix-shell
$ nix-shell shell.nix
$ nix-shell --pure -E 'import {}' -A hello
$ nix-shell --pure -p hello --run hello
$ nix-shell '' -A pan
[nix-shell]$ tar xf $src
[nix-shell]$ cd pan-*
[nix-shell]$ ./configure
[nix-shell]$ make
[nix-shell]$ ./pan/gui/pan
$ nix-shell '' -A emacs --command 'unpackPhase; patchPhase'
Force a specific channel:
$ nix-shell -p hello -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/master.tar.gz
Custom interpreter:
#! /usr/bin/env nix-shell
#! nix-shell -i real-interpreter -p packages
#! /usr/bin/env nix-shell
#! nix-shell -i python -p python pythonPackages.prettytable
import prettytable
# Print a simple table.
t = prettytable.PrettyTable(["N", "N^2"])
for n in range(1, 10): t.add_row([n, n * n])
print t
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p "terraform.withPlugins (plugins: [ plugins.openstack ])"
terraform apply
#! /usr/bin/env nix-shell
#! nix-shell -i runghc -p "haskellPackages.ghcWithPackages (ps: [ps.HTTP ps.tagsoup])"
#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-18.03.tar.gz
import Network.HTTP
import Text.HTML.TagSoup
-- Fetch nixos.org and print all hrefs.
main = do
resp <- Network.HTTP.simpleHTTP (getRequest "http://nixos.org/")
body <- getResponseBody resp
let tags = filter (isTagOpenName "a") $ parseTags body
let tags' = map (fromAttrib "href") tags
mapM_ putStrLn $ filter (/= "") tags'
==== nix-channel ====
$ nix-channel --list
nixpkgs http://nixos.org/channels/nixpkgs-unstable
$ nix-channel --add https://nixos.org/channels/nixos-19.09 nixpkgs_19_09
$ nix-channel --remove nixpkgs_19_09
Master channel:
$ nix-channel --add https://github.com/NixOS/nixpkgs/archive/master.tar.gz master
$ nix-channel --update
==== nix-store ====
$ nix-store -q --references `which hello`
/nix/store/1ncwrl8bplq3xhmj8pxfkx4y0i90vmnx-glibc-2.30
/nix/store/77gczr7dc287sqdc13gi2zcpwl7960yz-hello-2.10
$ nix-store -qR `which hello`
/nix/store/mxaxvp33wg9sim8qh2kkw041v492bvxj-libunistring-0.9.10
/nix/store/hjng28vbd73qq9iz9j8r397x19aa8fp9-libidn2-2.3.0
/nix/store/1ncwrl8bplq3xhmj8pxfkx4y0i90vmnx-glibc-2.30
/nix/store/77gczr7dc287sqdc13gi2zcpwl7960yz-hello-2.10
$ nix-store -q --tree `which hello`
/nix/store/77gczr7dc287sqdc13gi2zcpwl7960yz-hello-2.10
+---/nix/store/1ncwrl8bplq3xhmj8pxfkx4y0i90vmnx-glibc-2.30
| +---/nix/store/hjng28vbd73qq9iz9j8r397x19aa8fp9-libidn2-2.3.0
| | +---/nix/store/mxaxvp33wg9sim8qh2kkw041v492bvxj-libunistring-0.9.10
| | | +---/nix/store/mxaxvp33wg9sim8qh2kkw041v492bvxj-libunistring-0.9.10 [...]
| | +---/nix/store/hjng28vbd73qq9iz9j8r397x19aa8fp9-libidn2-2.3.0 [...]
| +---/nix/store/1ncwrl8bplq3xhmj8pxfkx4y0i90vmnx-glibc-2.30 [...]
+---/nix/store/77gczr7dc287sqdc13gi2zcpwl7960yz-hello-2.10 [...]
$ nix-store -q --referrers `which hello`
/nix/store/77gczr7dc287sqdc13gi2zcpwl7960yz-hello-2.10
/nix/store/mbd3a74yrg7qvlv5jqz9fss6lkqd314c-env-manifest.nix
/nix/store/x3asfl3l7zn7lnwkbz5iahs789zk9lx1-user-environment
Show all paths that depend on the same OpenSSL library as svn:
Afficher tous les chemins qui dépendent de la même bibliothèque OpenSSL que svn:
$ nix-store -q --referrers $(nix-store -q --binding openssl $(nix-store -qd $(which svn)))
/nix/store/23ny9l9wixx21632y2wi4p585qhva1q8-sylpheed-1.0.0
/nix/store/5mbglq5ldqld8sj57273aljwkfvj22mc-subversion-1.1.4
/nix/store/dpmvp969yhdqs7lm2r1a3gng7pyq6vy4-subversion-1.1.3
/nix/store/l51240xqsgg8a7yrbqdx1rfzyv6l26fx-lynx-2.8.5
Pour un paquet non installé:
$ nix-store --query --references $(nix-instantiate '' -A emacs)
Vérifier le store:
$ nix-store --verify --check-contents
reading the Nix store...
checking path existence...
checking hashes...
Réparer le store:
$ nix-store --verify --check-contents --repair
Il est parfois nécessaire de modifier le store manuellement:
$ nix-store --add-fixed sha256 /path/to/file
Optimiser le store pour gagner en place:
$ nix-store --optimise
Suppression d'une dérivation non désirée:
$ nix-store --delete /nix/store/31icg8jxiyxkcmx8gwak3fvq9shi6fd8-hello-2.8
finding garbage collector roots...
removing stale link from '/nix/var/nix/gcroots/auto/8m1kkl216mxi8yn9pgn009838qil7mlv' to '/etc/nixos/result'
deleting '/nix/store/31icg8jxiyxkcmx8gwak3fvq9shi6fd8-hello-2.8'
deleting '/nix/store/trash'
deleting unused links...
note: currently hard linking saves -0.00 MiB
1 store paths deleted, 0.18 MiB freed
==== nix-collect-garbage ====
C'est un alias de ''nix-store --gc''.
$ nix-collect-garbage
...
deleting '/nix/store/gazpv90zhld15svbkbfi17nd182f63nm-webencodings-0.5.1.tar.gz.drv'
deleting '/nix/store/la6n976p7nmk9ijkjff2i040nc24knql-setenv-0.1.1.3-r1.cabal.drv'
deleting '/nix/store/g85ssgjv1i5djy8589444fhlyxnhnqcp-splitmix-0.0.3-r1.cabal.drv'
deleting '/nix/store/trash'
deleting unused links...
note: currently hard linking saves -0.00 MiB
2419 store paths deleted, 2308.54 MiB freed
$ nix-collect-garbage--delete-older-than 30d
==== nix-prefetch-url ====
$ nix-prefetch-url --unpack https://github.com/gigi206/salt/archive/742781c358d65c8849a6a6f5b8f4bb3dcefc203a.tar.gz
unpacking...
[14.5 MiB DL]
path is '/nix/store/2l5az5rvkkavrr7zgghgqpmsqj3vn1yp-742781c358d65c8849a6a6f5b8f4bb3dcefc203a.tar.gz'
02cgs6b1rmh8hmcwm5wpxxg32p3km9c05606pykv49qq1spd6p38
==== nix-instantiate ====
$ nix-instantiate --eval -E '(import {}).vscode.version'
"1.43.0"
$ nix-instantiate --eval -E '(import {}).lib.version'
"20.09pre216928.991bbef6835"
==== nix ====
=== nix show-derivation ===
$ nix show-derivation '((import {}).hello)'
{
"/nix/store/17abmzvc6qq1yhi01aac11jpznrnndqv-hello-2.10.drv": {
"outputs": {
"out": {
"path": "/nix/store/77gczr7dc287sqdc13gi2zcpwl7960yz-hello-2.10"
}
},
"inputSrcs": [
"/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh"
],
"inputDrvs": {
"/nix/store/7cipdvw2s5sz1px8x3hv41j40753969s-bash-4.4-p23.drv": [
"out"
],
"/nix/store/hzd53xaaqkh0jib90hv31ixjgxrlppi9-stdenv-linux.drv": [
"out"
],
"/nix/store/j5zjn5ymk44wyf27gfgfwgs4yj2pylnz-hello-2.10.tar.gz.drv": [
"out"
]
},
"platform": "x86_64-linux",
"builder": "/nix/store/1iaxkm0941nj1m4m5g4fxgg4cq5jckf0-bash-4.4-p23/bin/bash",
"args": [
"-e",
"/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh"
],
"env": {
"buildInputs": "",
"builder": "/nix/store/1iaxkm0941nj1m4m5g4fxgg4cq5jckf0-bash-4.4-p23/bin/bash",
"configureFlags": "",
"depsBuildBuild": "",
"depsBuildBuildPropagated": "",
"depsBuildTarget": "",
"depsBuildTargetPropagated": "",
"depsHostHost": "",
"depsHostHostPropagated": "",
"depsTargetTarget": "",
"depsTargetTargetPropagated": "",
"doCheck": "1",
"doInstallCheck": "",
"name": "hello-2.10",
"nativeBuildInputs": "",
"out": "/nix/store/77gczr7dc287sqdc13gi2zcpwl7960yz-hello-2.10",
"outputs": "out",
"patches": "",
"pname": "hello",
"propagatedBuildInputs": "",
"propagatedNativeBuildInputs": "",
"src": "/nix/store/3x7dwzq014bblazs7kq20p9hyzz0qh8g-hello-2.10.tar.gz",
"stdenv": "/nix/store/0w5454az7vwcq60yqvcsv8fs9q7r4zrx-stdenv-linux",
"strictDeps": "",
"system": "x86_64-linux",
"version": "2.10"
}
}
}
=== nix run ===
$ nix run nixpkgs.hello --command hello
Equivalent à:
$ nix-shell --pure -p hello --run hello
=== nix search ===
$ nix search hello
=== nix path-info ===
$ nix path-info --recursive --closure-size nixpkgs.hello | sort --numeric-sort --key 2
/nix/store/mxaxvp33wg9sim8qh2kkw041v492bvxj-libunistring-0.9.10 1634416
/nix/store/hjng28vbd73qq9iz9j8r397x19aa8fp9-libidn2-2.3.0 1857088
/nix/store/1ncwrl8bplq3xhmj8pxfkx4y0i90vmnx-glibc-2.30 32939352
/nix/store/77gczr7dc287sqdc13gi2zcpwl7960yz-hello-2.10 33145320
$ readlink -f $(which hello)
=== nix repl ===
* https://nixos.wiki/wiki/Nix-repl
* https://nixos.org/nixos/nix-pills/our-first-derivation.html
* https://nixos.org/nixos/nix-pills/working-derivation.html
$ nix repl ''
Welcome to Nix version 2.3.3. Type :? for help.
nix-repl> builtins.currentSystem
"x86_64-linux"
$ nix repl
nix-repl> :l
nix-repl> simple = derivation { name = "simple"; builder = "${bash}/bin/bash"; args = [ ./simple_builder.sh ]; gcc = gcc; coreutils = coreutils; src = ./simple.c; system = builtins.currentSystem; }
nix-repl> :b simple
this derivation produced the following outputs: out -> /nix/store/ni66p4jfqksbmsl616llx3fbs1d232d4-simple
nix-repl> (builtins.parseDrvName "NUnit.Console-3.0.1").name
"NUnit.Console"
=== nix edit ===
Permet d'éditer un build avant de l'installer ([|https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-edit.html|nix edit]]):
$ EDITOR=vim nix edit -f "" samba --extra-experimental-features nix-command
On install ensuite le paquet:
$ nix-env -i samba
===== nix language =====
==== Nombres (int / float) ====
$ nix eval '(1 + 1)'
$ nix eval '(builtins.typeOf 1)'
"int"
$ nix eval '(builtins.typeOf 1.0)'
"float"
==== Chaines (string) ====
$ nix eval "(''
line 1
line 2
line 3
'')"
$ nix eval '("a" + "b")'
"ab"
==== variables (let) ====
$ nix eval '(let a = 1; b = 2; in a + b)'
3
$ nix eval '(
let foo = "Foo";
bar = "Bar";
in "${foo + bar} is a terrible name")'
"FooBar is a terrible name"
==== Conditions (if) ====
nix-repl> a = 3
nix-repl> b = 4
nix-repl> if a > b then "yes" else "no"
"no"
==== Fonctions (lambda) ====
$ nix eval '((a: a + 1) 2)'
3
==== Listes (list) ====
$ nix eval '([1 2] ++ [3 4])'
[ 1 2 3 4 ]
==== Set ====
$ nix eval '({ foo = 1; bar = 2; }.bar)'
2
$ nix eval '({ foo = 1; bar = 2; } // { bar = 3; baz = 4; })'
{ bar = 3; baz = 4; foo = 1; }
$ nix eval '(rec { foo = bar; bar = 2; }.foo)'
2
$ nix eval '(({ foo, bar }: foo + bar ) { foo = 1; bar = 2; })'
3
$ nix eval '(({ foo, ...}: foo + 2 ) { foo = 3; bar = 4; })'
5
$ nix eval '((s@{ foo, bar }: foo + s.bar ) { foo = 2; bar = 3; })
5
$ nix eval '(let a = 3; in { a = a; })'
{ a = 3; }
$ let a = 3; in { b = a; inherit a; })'
{ a = 3; b = 3; }
==== Chemins (path) ====
$ nix eval '(some/path)'
/home/gigix/some/path
$ nix eval '(./some/path)'
/home/gigix/some/path
$ nix eval '(/some/path)'
/some/path
$ nix eval '()'
/home/gigix/.nix-defexpr/channels/nixpkgs
==== Imports ====
$ nix eval '(import )'
===== Restaurer le binaire nix (recovery) =====
$ nix-env -e '*'
uninstalling 'hello-2.10'
uninstalling 'nix-2.1.3'
[...]
$ ls -l /nix/store/*-nix-*/bin/nix-env
lrwxrwxrwx. 1 gigix gigix 3 1 janv. 1970 /nix/store/ddmmzn4ggz1f66lwxjy64n89864yj9w9-nix-2.3.3/bin/nix-env -> nix
$ /nix/store/ddmmzn4ggz1f66lwxjy64n89864yj9w9-nix-2.3.3/bin/nix-env -i /nix/store/ddmmzn4ggz1f66lwxjy64n89864yj9w9-nix-2.3.3/bin/nix-env
===== Dérivations =====
==== Simple dérivation ====
with (import {});
derivation {
name = "simple";
builder = "${bash}/bin/bash";
args = [ ./simple_builder.sh ];
inherit gcc coreutils;
src = ./simple.c;
system = builtins.currentSystem;
}
with (import {});
derivation {
name = "hello";
builder = "${bash}/bin/bash";
args = [ ./hello_builder.sh ];
inherit gnutar gzip gnumake gcc coreutils gawk gnused gnugrep;
binutils = binutils-unwrapped;
src = ./hello-2.10.tar.gz;
system = builtins.currentSystem;
}
Créer un fichier de fonction ''autotools.nix'':
pkgs: attrs:
with pkgs;
let defaultAttrs = {
builder = "${bash}/bin/bash";
args = [ ./builder.sh ];
baseInputs = [ gnutar gzip gnumake gcc binutils-unwrapped coreutils gawk gnused gnugrep ];
buildInputs = [];
system = builtins.currentSystem;
};
in
derivation (defaultAttrs // attrs)
pkgs: attrs:
with pkgs;
let defaultAttrs = {
builder = "${bash}/bin/bash";
args = [ ./builder.sh ];
baseInputs = [ gnutar gzip gnumake gcc binutils-unwrapped coreutils gawk gnused gnugrep ];
buildInputs = [];
system = builtins.currentSystem;
};
in
derivation (defaultAttrs // attrs)
nix-repl> { a = "b"; } // { c = "d"; }
{ a = "b"; c = "d"; }
nix-repl> { a = "b"; } // { a = "c"; }
{ a = "c"; }
let
pkgs = import {};
mkDerivation = import ./autotools.nix pkgs;
in mkDerivation {
name = "hello";
src = ./hello-2.10.tar.gz;
}
==== Override ====
$ nix repl
nix-repl> :l
Added 4360 variables.
nix-repl> :b graphviz.override { xlibs = null; }
{
packageOverrides = pkgs: {
graphviz = pkgs.graphviz.override { xlibs = null; };
};
}
==== buildInputs ====
$ nix-build exemple1.nix
let
nixpkgs = import {};
inherit (nixpkgs) stdenv fetchurl which;
actualHello = stdenv.mkDerivation {
name = "hello-2.3";
src = fetchurl {
url = mirror://gnu/hello/hello-2.3.tar.bz2;
sha256 = "0c7vijq8y68bpr7g6dh1gny0bff8qq81vnp4ch8pjzvg56wb3js1";
};
};
wrappedHello = stdenv.mkDerivation {
name = "hello-wrapper";
buildInputs = [ actualHello which ];
unpackPhase = "true";
installPhase = ''
mkdir -p "$out/bin"
echo "#! ${stdenv.shell}" >> "$out/bin/hello"
echo "exec $(which hello)" >> "$out/bin/hello"
'';
};
in wrappedHell
==== propagatedBuildInputs ====
$ nix-build exemple2.nix
let
nixpkgs = import {};
inherit (nixpkgs) stdenv fetchurl which;
actualHello = stdenv.mkDerivation {
name = "hello-2.3";
src = fetchurl {
url = mirror://gnu/hello/hello-2.3.tar.bz2;
sha256 = "0c7vijq8y68bpr7g6dh1gny0bff8qq81vnp4ch8pjzvg56wb3js1";
};
};
intermediary = stdenv.mkDerivation {
name = "middle-man";
propagatedBuildInputs = [ actualHello ];
unpackPhase = "true";
installPhase = ''
mkdir -p "$out"
'';
};
wrappedHello = stdenv.mkDerivation {
name = "hello-wrapper";
buildInputs = [ intermediary which ];
unpackPhase = "true";
installPhase = ''
mkdir -p "$out/bin"
echo "#! ${stdenv.shell}" >> "$out/bin/hello"
echo "exec $(which hello)" >> "$out/bin/hello"
'';
};
in wrappedHello
==== shellHook ====
with import {};
stdenv.mkDerivation {
name = "my-environment";
buildInputs = [
pkgs.figlet
pkgs.lolcat
];
# The '' quotes are 2 single quote characters
# They are used for multi-line strings
shellHook = ''
figlet "Welcome!" | lolcat --freq 0.5
'';
}
$ nix-shell test.nix
__ __ _ _
\ \ / /__| | ___ ___ _ __ ___ ___| |
\ \ /\ / / _ \ |/ __/ _ \| '_ ` _ \ / _ \ |
\ V V / __/ | (_| (_) | | | | | | __/_|
\_/\_/ \___|_|\___\___/|_| |_| |_|\___(_)
==== builder ====
{ stdenv, fetchurl, openmpi }:
stdenv.mkDerivation rec {
name = "oned";
src = fetchurl {
url = "https://www.pdc.kth.se/education/tutorials/mpi/hybrid-lab/oned.c";
sha256 = "";
};
buildInputs = [ openmpi ];
builder = builtins.toFile "builder.sh"
"
source $stdenv/setup
mpicc -w -o oned.exe $src
mkdir $out
mkdir $out/bin
cp oned.exe $out/bin
";
meta = {
description = "JDEV 2017 Nix tutoriel";
license = stdenv.lib.licenses.gpl2;
platforms = stdenv.lib.platforms.unix;
};
}
===== Overlays =====
Pour ajouter un paquet personnel ou pour modifier un paquet déjà existant, Nix permet d'ajouter des overlays.
Il s'agit de fichiers Nix que l'on place dans le dossier ''~/.config/nixpkgs/overlays/''. Ces overlays sont alors appliqués automatiquement sur la logithèque.
Si on ajoute le fichier ''~/.config/nixpkgs/overlays/monOverlay1.nix'' suivant, on modifie le paquet **boost** de la logithèque et on y ajoute un paquet **monAppli**:
self: super: {
boost = super.boost.override {
python = self.python3;
};
monAppli = super.callPackage ./pkgs/monAppli.nix {};
}
Dans cet overlay, ''self'' et ''super'' sont les paramètres de la fonction à appliquer sur la logithèque d’entrée, ''super'' est la version initiale de la logithèque et ''self'' la version modifiée.
Ces modifications seront alors automatiquement appliquées, par exemple si on installe un de ces paquets ou si on lance un nix-shell qui les utilisent.
self: super: {
nano-no-nls = super.nano.override {
enableNls = false;
};
}
Nix permet de modifier les paquets encore plus profondément. Par exemple, on peut modifier le paquet existant nano de façon à utiliser la version 4.5 du code source de nano:
self: super: {
nano = super.nano.overrideAttrs (oldAttrs: rec {
pname = oldAttrs.pname;
version = "4.5";
src = super.fetchurl {
url = "mirror://gnu/nano/${pname}-${version}.tar.xz";
sha256 = "0czmz1yq8s5qcxcmfjdxzg9nkhbmlc9q1nz04jvf57fdbs7w7mfy";
};
});
}
===== home-manager =====
Le but d'**home-manager** est de fournir l'équivalent du fichier ''/etc/nixos/configuration.nix'' mais pour l'environnement utilisateur (au lieu de l'environnement système). Plus précisemment, l'utilisateur décrit sa configuration via un fichier ''~/.config/nixpkgs/home.nix'' et lance une commande **home-manager** pour construire et installer la configuration correspondante.
$ nix-env -iA nixos.home-manager
{ pkgs, ... }: {
home.packages = with pkgs; [
geany
meld
vlc
];
home.keyboard = {
layout = "fr";
variant = "bepo";
};
}
Prise en compte de la configuration:
$ home-manager switch
Séparer:
{ pkgs, ... }: {
home.packages = with pkgs; [
geany
meld
vlc
];
}
{ pkgs, ... }: {
imports = [
./packages.nix
];
home.keyboard = {
layout = "fr";
variant = "bepo";
};
}
Autre exemple:
{ pkgs, ... }: {
programs = {
firefox.enable = true;
.git = {
enable = true;
userName = "gigix";
userEmail = "gigix@example.com";
ignores = [
"*~"
"*.swp"
];
};
bash = {
enable = true;
shellAliases = {
ll = "ls -lh";
la = "ls -a";
};
};
};
}