La Collection de paquets Nix est grand avec plus de 60 000 colis. Cependant, il y a de fortes chances que parfois le package dont vous avez besoin ne soit pas disponible. Vous devez l’intégrer vous-même.
J’avais besoin de certaines polices qui n’étaient pas déjà présentes à l’intérieur nixpkgs. Dans Nix, une police est distribuée sous forme de package comme n’importe quel autre logiciel. Une des polices à installer est Scénario de danse. Au moment d’écrire ces lignes, en cherchant dans nixpkgs ne révèle aucune correspondance pertinente :
nix search nixpkgs dancing
Que votre système exécute NixOS ou utilise simplement le gestionnaire de packages Nix, comme je le fais avec macOS, la création d’un package Nix n’est pas toujours si difficile. Le package que nous allons créer fonctionne pour chaque déploiement Nix. Je fournis les commandes pour Linux exécutant NixOS et pour macOS utilisant nix-darwin. C’est certainement intimidant. Vous devez vous salir les mains et écrire du code. Cependant, compte tenu de la nature de Nix, la majorité d’entre nous ont déjà quelques fichiers de configuration Nix personnalisés. Je vais illustrer le processus de création et de partage d’un nouveau package Nix avec la communauté.
Installation de polices avec NixOS
NixOS propose de nombreux paquets de polices. Pour qu’une police soit visible par toutes vos applications, elle doit être enregistrée dans le fonts.fonts
liste d’options. Par exemple, à partir de votre configuration.nix
dossier:
config, pkgs, ... :
imports =
[
./david-framework-hardware.nix
];
fonts.enableFontDir = true;
fonts.fonts = with pkgs; [ dejavu_fonts inter ];
Toutes les polices ne sont pas disponibles sur nixpkgs. Voici comment installer une police non encore prise en charge à l’intérieur du fonts.fonts
liste d’options en créant notre package. Une fois le package prêt, nous le publions !
Trouver un exemple approprié
La documentation NixOS est déroutante. Il est réparti entre plusieurs emplacements. Parfois, il manque des informations de base et parfois il va si loin dans les détails qu’il est difficile à comprendre. La lecture du code source est une bonne approche recommandée pour apprendre le langage et personnaliser votre environnement.
Sur chaque système, l’installation d’une police consiste à la télécharger et à la placer à l’emplacement système approprié. Voyons comment les autres polices sont installées. Par exemple, le Police de caractères Inter. Chercher inter
à travers le Aucune recherche. Il y a un source
lien qui pointe vers le package dans le référentiel nixpkgs :
lib, fetchzip :
let
version = "3.19";
in fetchzip
name = "inter-$version";
url = "https://github.com/rsms/inter/releases/download/v$version/Inter-$version.zip";
postFetch = ''
mkdir -p $out/share/fonts/opentype
unzip -j $downloadedFile \*.otf -d $out/share/fonts/opentype
'';
sha256 = "sha256-8p15thg3xyvCA/8dH2jGQoc54nzESFDyv5m47FgWrSI=";
meta = with lib;
homepage = "https://rsms.me/inter/";
description = "A typeface specially designed for user interfaces";
license = licenses.ofl;
platforms = platforms.all;
maintainers = with maintainers; [ demize dtzWill ];
;
Le package contient des métadonnées telles que le nom du package, un lien vers le projet officiel et une description. La url
et sha256
est utilisé par fetchzip
pour télécharger les fichiers de police. Tous .otf
le fichier est extrait de l’archive zip dans le $out/share/fonts/opentype
dossier.
Création d’un paquet
En regardant le Scénario de danse référentiel, aucun téléchargement n’est disponible. À la place du fetchzip
fonction utilisée pour télécharger un .zip
archive, nous utilisons le fetchFromGitHub
fonction pour télécharger l’instantané d’un référentiel GitHub.
Le code est organisé différemment, avec des propriétés différentes, mais il atteint le même objectif. A côté de votre configuration.nix
fichier, créez le dancing-script/default.nix
dossier:
lib, fetchFromGitHub :
let
pname = "dancing-script";
version = "2.0";
in fetchFromGitHub
name = "$pname-$version";
owner = "impallari";
repo = "DancingScript";
rev = "f7f54bc1b8836601dae8696666bfacd306f77e34";
sha256 = "dfFvh8h+oMhAQL9XKMrNr07VUkdQdxAsA8+q27KWWCA=";
postFetch = ''
tar xf $downloadedFile --strip=1
install -m444 -Dt $out/share/fonts/truetype fonts/ttf/*.ttf
'';
meta = with lib;
description = "Dancing Script";
longDescription = "A lively casual script where the letters bounce and change size slightly.";
homepage = "https://github.com/impallari/DancingScript";
license = licenses.ofl;
platforms = platforms.all;
maintainers = with maintainers; [ wdavidw ];
;
Une fois le référentiel GitHub récupéré, nous installons tous les .ttf
fichiers dans le $out/share/fonts/truetype
dossier.
Déclaration de colis
En supposant que nous modifions un configuration.nix
fichier colocalisé avec le dancing-script
dossier, nous importons le nouveau package dans fonts.fonts
liste d’options :
config, pkgs, ... :
let
dancing-script = import ./dancing-script/default.nix inherit lib; fetchFromGitHub = pkgs.fetchFromGitHub; ;in
imports =
[
./david-framework-hardware.nix
];
fonts.enableFontDir = true;
fonts.fonts = with pkgs; [
dancing-script dejavu_fonts
inter
];
Notez comment nous satisfaisons les dépendances du package en injectant lib
et fetchFromGitHub
lors de l’appel import
. Une approche plus courte et plus facile utilise callPackage
:
config, pkgs, ... :
let
dancing-script = pkgs.callPackage ./dancing-script/default.nix ;in
imports =
[
./david-framework-hardware.nix
];
fonts.enableFontDir = true;
fonts.fonts = with pkgs; [
dancing-script dejavu_fonts
inter
];
Fonctionnement nixos-rebuild switch
(ou darwin-rebuild switch
sur macOS) charge la police dans le système. Sous Linux, fc-list
répertorie les polices disponibles dans le système :
fc-list | grep dancing/nix/store/fm8y81bjhcy8p4cp32230xr78807x0ii-dancing-script-2.000/share/fonts/truetype/DancingScript-Bold.ttf: Dancing Script:style=Bold
/nix/store/fm8y81bjhcy8p4cp32230xr78807x0ii-dancing-script-2.000/share/fonts/truetype/DancingScript-Regular.ttf: Dancing Script:style=Regular
Intégration de packages avec nixpkgs
Maintenant que notre package fonctionne, la prochaine étape consiste à partager notre travail avec la communauté.
Commencez par forker le dépôt nixpkgs et clonez le fork sur votre machine :
git clone origin https://github.com/wdavidw/nixpkgs.git
cd nixpkgs
Des idées sur la façon de contribuer au projet sont écrites dans CONTRIBUTING.md
. La création d’une requête de fusion pour proposer un nouveau package implique 3 commits :
- création du fichier package Nix
- mise à jour
pkgs/top-level/all-packages.nix
pour enregistrer le colis - mettre à jour le
maintainers/maintainer-list.nix
à vous inscrire sauf si déjà présent
À l’intérieur pkgs/data/fonts
créer un nouveau dancing-script
dossier et importez le default.nix
fichier présent ci-dessus.
Mettre à jour le all-packages.nix
et maintainer-list.nix
fichiers également. Leur contenu est explicite. En outre, il existe une sorte d’ordre dans ces deux fichiers, mais il n’est pas strictement appliqué.
Les anciens enregistrent notre nouveau forfait :
dancing-script = callPackage ../data/fonts/dancing-script ;
Ce dernier vous inscrira en tant que contributeur :
wdavidw =
name = "David Worms";
email = "[email protected]";
github = "wdavidw";
githubId = 46896;
;
Ton githubId
la valeur est exposée par l’API GitHub à https://api.github.com/users/username
remplaçant username
avec votre pseudo GitHub.
La dancing-script
package est maintenant enregistré dans nixpkgs.
Tester les packages de nixpkgs
Avant de soumettre la pull request, il est possible d’associer et de tester notre configuration Nix avec le local nixpkgs
dépôt. Exécutez le nixos-rebuild switch
commande (ou darwin-rebuild switch
sur macOS) avec le supplément -I
argument pour reconfigurer la machine avec les packages nixpkgs locaux, y compris notre dernier ajout.
Tout d’abord, nous mettons à jour et simplifions notre fichier configuration.nix en conséquence :
config, pkgs, ... :
imports =
[
./david-framework-hardware.nix
];
fonts.enableFontDir = true;
fonts.fonts = with pkgs; [
dancing-script
dejavu_fonts
inter
];
Du nixpkgs
répertoire, la commande pour reconfigurer la machine à l’aide du référentiel nixpkgs local est :
nixos-rebuild switch -I nixpkgs=.
Publication de colis
Le processus de partage des modifications avec la communauté est GitOps standard.
Les modifications sont validées avec :
git add \
maintainers/maintainer-list.nix \
pkgs/data/fonts/dancing-script/default.nix \
pkgs/top-level/all-packages.nix
git commit -m 'dancing-script: init at 2.0'
git push origin master
Le message de validation respecte les directives trouvées dans CONTRIBUTING.md
. Accédez à votre référentiel GitHub et créez la demande d’extraction.
Conclusion
Le résultat final a été publié juste avant cet article. La demande de fusion est visible en ligne sous “PR # 166057, script de danse : init à 2.0”. Il est fusionné en 24 heures et je suis maintenant un mainteneur officiel de NixOS !