​#nix

- [[NixOS]]

** Configuration
:PROPERTIES:
:CUSTOM_ID: configuration
:END:
- Activer les flakes (experimental) ! Meilleure expérience utilisateur
  ​### WSL2 changer /nix/store Pour accéder à un lecteur US:, rajouter
  dans /etc/fstabl

#+begin_src sh
E: /mnt/e drvfs defaults,uid=1000,gid=1000,metadata 0 0
#+end_src

=metadata= est important car cela nous permet de changer les permissions
! Puis

#+begin_src sh
mount --bind /mnt/e/nix /nix
#+end_src

** Utilisation (nix profile)
:PROPERTIES:
:CUSTOM_ID: utilisation-nix-profile
:END:
Chercher et installer un programme

#+begin_src sh
nix profile search nixpkgs#zoxide
nix profile install nixpkgs#zoxide
#+end_src

NB: Avec nushell, Il faut parfois mettre des guillemets, ex:

#+begin_src sh
nix profile install "nixpkgs#cabal-install"
#+end_src

Tout supprimer

#+begin_src sh
nix profile remove '.*'
#+end_src

*** Améliorer la recherche de paquets
:PROPERTIES:
:CUSTOM_ID: améliorer-la-recherche-de-paquets
:END:
=nix-env= est lent. =nix search= avec les flakes ne fonctionne pas bien
pour certains packages (récursif mais certains paquets désactivent
l'évalution). Meilleures solution : - search.nixos.org - =nix-index= :
installer puis =nix-indx= puis chercher par nom de ficher. Ex:
=nix-locate bin/R=

** Développer un package
:PROPERTIES:
:CUSTOM_ID: développer-un-package
:END:
- Le hash peut être calculé avec
  =nix-prefetch-url --unpack https://...tar.gz=. Ou bien, ne pas mettre
  de hash et copier le résultat de l'erreur ! ### Débugger Voir
  [[file:Débugger%20un%20paquet%20nix.md][Débugger un paquet nix]] ###
  Installer une seule dérivation nix-shell -p 'with import {};
  callPackage pkgs/GenomeRef.nix {}' Ne pas oublier {} ### Ajout d'un
  patch

#+begin_src nix
    nixpkgs.overlays = [
      # Patch to avoid out-of-memory errors in nix
      (final: prev: {
        nix = prev.nix.overrideAttrs (old: {
          patches = (old.patches or []) ++ [./0001-don-t-read-outputs-into-memory-for-output-rewriting.patch ];
        });
      })
      ] ;
#+end_src

* Avertissements
:PROPERTIES:
:CUSTOM_ID: avertissements
:END:
Ne jamais modifier les fichiers dans /nix/store # Langage -
[[file:Environnement%20Python%20avec%20nix.md][Python avec nix]] -
[[file:Environnement%20Haskell%20avec%20Nix.md][Haskell avec Nix]] -
[[file:Environnement%20R%20avec%20Nix.md][R avec Nix]] ## Vérifier les
dépendences à l'exécution

Il faut les mettre dans propagatedBuildInputs (buildInputs ne suffit
pas). On vérifie avec :

#+begin_src sh

$ nix-instantiate -E "with import <nixpkgs> {}; callPackage pkgs/hap-py.nix {}"
/nix/store/scbx1aiadh24qwwjhskp7jdqngsm31x7-hap.py.drv

$ nix-store -r /nix/store/scbx1aiadh24qwwjhskp7jdqngsm31x7-hap.py.drv
(...installation...)
/nix/store/kgxqmk7jdi91jwbrj4qz5q5c4qhh8qzb-hap.py

$ nix-store -q --references /nix/store/kgxqmk7jdi91jwbrj4qz5q5c4qhh8qzb-hap.py
#+end_src

Si le program en a besoin, wrapper le programme en rajoutant dans
nativeBuildInputs makeWrapper :

#+begin_src sh
  nativeBuildInputs = [ pkgs.makeWrapper ];
  postBuild = with lib; with pkgs; ''
    wrapProgram $out/bin/test.sh\
      --prefix PATH : ${makeBinPath [ bcftools samtools]}
  '';
}
#+end_src

* Aide
:PROPERTIES:
:CUSTOM_ID: aide
:END:
** Paquet non trouvé "attribute is missing"
:PROPERTIES:
:CUSTOM_ID: paquet-non-trouvé-attribute-is-missing
:END:
Ex: nix-shell -p rPackages.BSgenome_{HsapiensUCSChs1} error: attribute
'BSgenome_{HsapiensUCSChs1}' missing

1. Mettre à jour le channel
2. Sinon attention à la différence entre le channel de l'utiliser et du
   root. Par défaut, le channel de l'utilisateur n'est pas utilisé sauf
   si la configuration utilise <stable>. Le channel par défaut est
   nixpkgs (sinon nixos) !!