#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) !!