aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/maintainers
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2019-10-05 12:43:18 +0000
committerKatharina Fey <kookie@spacekookie.de>2019-10-05 12:44:52 +0000
commitcf85056ba64caf3267d43255ef4a1243e9c8ee3b (patch)
tree3051519e9c8275b870aac43f80af875715c9d124 /nixpkgs/maintainers
parent1148b1d122bc03e9a3665856c9b7bb96bd4e3994 (diff)
parent2436c27541b2f52deea3a4c1691216a02152e729 (diff)
Add 'nixpkgs/' from commit '2436c27541b2f52deea3a4c1691216a02152e729'
git-subtree-dir: nixpkgs git-subtree-mainline: 1148b1d122bc03e9a3665856c9b7bb96bd4e3994 git-subtree-split: 2436c27541b2f52deea3a4c1691216a02152e729
Diffstat (limited to 'nixpkgs/maintainers')
-rw-r--r--nixpkgs/maintainers/maintainer-list.nix7190
-rw-r--r--nixpkgs/maintainers/scripts/all-tarballs.nix16
-rwxr-xr-xnixpkgs/maintainers/scripts/check-maintainer-github-handles.sh66
-rwxr-xr-xnixpkgs/maintainers/scripts/copy-tarballs.pl226
-rwxr-xr-xnixpkgs/maintainers/scripts/debian-patches.sh34
-rwxr-xr-xnixpkgs/maintainers/scripts/dep-licenses.sh57
-rw-r--r--nixpkgs/maintainers/scripts/eval-release.nix24
-rwxr-xr-xnixpkgs/maintainers/scripts/eval-release.sh11
-rwxr-xr-xnixpkgs/maintainers/scripts/fetch-kde-qt.sh61
-rw-r--r--nixpkgs/maintainers/scripts/find-tarballs.nix50
-rwxr-xr-xnixpkgs/maintainers/scripts/hydra-eval-failures.py112
-rwxr-xr-xnixpkgs/maintainers/scripts/hydra_eval_check13
-rw-r--r--nixpkgs/maintainers/scripts/luarocks-config.lua4
-rw-r--r--nixpkgs/maintainers/scripts/luarocks-packages.csv70
-rwxr-xr-xnixpkgs/maintainers/scripts/nix-call-package5
-rwxr-xr-xnixpkgs/maintainers/scripts/nix-diff.sh277
-rw-r--r--nixpkgs/maintainers/scripts/nix-generate-from-cpan.nix25
-rwxr-xr-xnixpkgs/maintainers/scripts/nix-generate-from-cpan.pl471
-rw-r--r--nixpkgs/maintainers/scripts/nixpkgs-lint.nix23
-rwxr-xr-xnixpkgs/maintainers/scripts/nixpkgs-lint.pl173
-rwxr-xr-xnixpkgs/maintainers/scripts/patchelf-hints.sh84
-rwxr-xr-xnixpkgs/maintainers/scripts/rebuild-amount.sh127
-rwxr-xr-xnixpkgs/maintainers/scripts/update-channel-branches.sh112
-rwxr-xr-xnixpkgs/maintainers/scripts/update-discord36
-rwxr-xr-xnixpkgs/maintainers/scripts/update-luarocks-packages136
-rw-r--r--nixpkgs/maintainers/scripts/update-luarocks-shell.nix9
-rwxr-xr-xnixpkgs/maintainers/scripts/update-python-libraries5
-rwxr-xr-xnixpkgs/maintainers/scripts/update-ruby-packages13
-rwxr-xr-xnixpkgs/maintainers/scripts/update.nix157
-rw-r--r--nixpkgs/maintainers/scripts/update.py79
-rw-r--r--nixpkgs/maintainers/scripts/vanity-manual-equalities.txt7
-rwxr-xr-xnixpkgs/maintainers/scripts/vanity.sh122
32 files changed, 9795 insertions, 0 deletions
diff --git a/nixpkgs/maintainers/maintainer-list.nix b/nixpkgs/maintainers/maintainer-list.nix
new file mode 100644
index 00000000000..9e5138497ef
--- /dev/null
+++ b/nixpkgs/maintainers/maintainer-list.nix
@@ -0,0 +1,7190 @@
+/* List of NixOS maintainers.
+
+ handle = {
+ # Required
+ name = "Your name";
+ email = "address@example.org";
+
+ # Optional
+ github = "GithubUsername";
+ githubId = your-github-id;
+ keys = [{
+ longkeyid = "rsa2048/0x0123456789ABCDEF";
+ fingerprint = "AAAA BBBB CCCC DDDD EEEE FFFF 0000 1111 2222 3333";
+ }];
+ };
+
+ where
+
+ - `handle` is the handle you are going to use in nixpkgs expressions,
+ - `name` is your, preferably real, name,
+ - `email` is your maintainer email address, and
+ - `github` is your GitHub handle (as it appears in the URL of your profile page, `https://github.com/<userhandle>`),
+ - `githubId` is your GitHub user ID, which can be found at `https://api.github.com/users/<userhandle>`,
+ - `keys` is a list of your PGP/GPG key IDs and fingerprints.
+
+ `handle == github` is strongly preferred whenever `github` is an acceptable attribute name and is short and convenient.
+
+ Add PGP/GPG keys only if you actually use them to sign commits and/or mail.
+
+ To get the required PGP/GPG values for a key run
+ ```shell
+ gpg --keyid-format 0xlong --fingerprint <email> | head -n 2
+ ```
+
+ !!! Note that PGP/GPG values stored here are for informational purposes only, don't use this file as a source of truth.
+
+ More fields may be added in the future.
+
+ Please keep the list alphabetically sorted.
+ See `./scripts/check-maintainer-github-handles.sh` for an example on how to work with this data.
+ */
+{
+ "00-matt" = {
+ name = "Matt Smith";
+ email = "matt@offtopica.uk";
+ github = "00-matt";
+ githubId = 48835712;
+ };
+ "0x4A6F" = {
+ email = "0x4A6F@shackspace.de";
+ name = "Joachim Ernst";
+ github = "0x4A6F";
+ githubId = 9675338;
+ keys = [{
+ longkeyid = "rsa8192/0x87027528B006D66D";
+ fingerprint = "F466 A548 AD3F C1F1 8C88 4576 8702 7528 B006 D66D";
+ }];
+ };
+ "1000101" = {
+ email = "jan.hrnko@satoshilabs.com";
+ github = "1000101";
+ githubId = 791309;
+ name = "Jan Hrnko";
+ };
+ a1russell = {
+ email = "adamlr6+pub@gmail.com";
+ github = "a1russell";
+ githubId = 241628;
+ name = "Adam Russell";
+ };
+ aanderse = {
+ email = "aaron@fosslib.net";
+ github = "aanderse";
+ githubId = 7755101;
+ name = "Aaron Andersen";
+ };
+ aaronjanse = {
+ email = "aaron@ajanse.me";
+ github = "aaronjanse";
+ githubId = 16829510;
+ name = "Aaron Janse";
+ };
+ aaronschif = {
+ email = "aaronschif@gmail.com";
+ github = "aaronschif";
+ githubId = 2258953;
+ name = "Aaron Schif";
+ };
+ abaldeau = {
+ email = "andreas@baldeau.net";
+ github = "baldo";
+ githubId = 178750;
+ name = "Andreas Baldeau";
+ };
+ abbe = {
+ email = "ashish.is@lostca.se";
+ github = "wahjava";
+ githubId = 2255192;
+ name = "Ashish SHUKLA";
+ keys = [{
+ longkeyid = "rsa4096/0xC746CFA9E74FA4B0";
+ fingerprint = "F682 CDCC 39DC 0FEA E116 20B6 C746 CFA9 E74F A4B0";
+ }];
+ };
+ abbradar = {
+ email = "ab@fmap.me";
+ github = "abbradar";
+ name = "Nikolay Amiantov";
+ };
+ abhi18av = {
+ email = "abhi18av@gmail.com";
+ github = "abhi18av";
+ githubId = 12799326;
+ name = "Abhinav Sharma";
+ };
+ abigailbuccaneer = {
+ email = "abigailbuccaneer@gmail.com";
+ github = "abigailbuccaneer";
+ githubId = 908758;
+ name = "Abigail Bunyan";
+ };
+ aborsu = {
+ email = "a.borsu@gmail.com";
+ github = "aborsu";
+ githubId = 5033617;
+ name = "Augustin Borsu";
+ };
+ aboseley = {
+ email = "adam.boseley@gmail.com";
+ github = "aboseley";
+ githubId = 13504599;
+ name = "Adam Boseley";
+ };
+ abuibrahim = {
+ email = "ruslan@babayev.com";
+ github = "abuibrahim";
+ githubId = 2321000;
+ name = "Ruslan Babayev";
+ };
+ acowley = {
+ email = "acowley@gmail.com";
+ github = "acowley";
+ githubId = 124545;
+ name = "Anthony Cowley";
+ };
+ adamt = {
+ email = "mail@adamtulinius.dk";
+ github = "adamtulinius";
+ name = "Adam Tulinius";
+ };
+ adelbertc = {
+ email = "adelbertc@gmail.com";
+ github = "adelbertc";
+ githubId = 1332980;
+ name = "Adelbert Chang";
+ };
+ adev = {
+ email = "adev@adev.name";
+ github = "adevress";
+ githubId = 1773511;
+ name = "Adrien Devresse";
+ };
+ adisbladis = {
+ email = "adis@blad.is";
+ github = "adisbladis";
+ githubId = 63286;
+ name = "Adam Hose";
+ };
+ Adjective-Object = {
+ email = "mhuan13@gmail.com";
+ github = "Adjective-Object";
+ githubId = 1174858;
+ name = "Maxwell Huang-Hobbs";
+ };
+ adnelson = {
+ email = "ithinkican@gmail.com";
+ github = "adnelson";
+ githubId = 5091511;
+ name = "Allen Nelson";
+ };
+ adolfogc = {
+ email = "adolfo.garcia.cr@gmail.com";
+ github = "adolfogc";
+ githubId = 1250775;
+ name = "Adolfo E. García Castro";
+ };
+ aepsil0n = {
+ email = "eduard.bopp@aepsil0n.de";
+ github = "aepsil0n";
+ githubId = 3098430;
+ name = "Eduard Bopp";
+ };
+ aerialx = {
+ email = "aaron+nixos@aaronlindsay.com";
+ github = "AerialX";
+ githubId = 117295;
+ name = "Aaron Lindsay";
+ };
+ aespinosa = {
+ email = "allan.espinosa@outlook.com";
+ github = "aespinosa";
+ githubId = 58771;
+ name = "Allan Espinosa";
+ };
+ aethelz = {
+ email = "aethelz@protonmail.com";
+ github = "aethelz";
+ githubId = 10677343;
+ name = "Eugene";
+ };
+ aflatter = {
+ email = "flatter@fastmail.fm";
+ github = "aflatter";
+ githubId = 168;
+ name = "Alexander Flatter";
+ };
+ afldcr = {
+ email = "alex@fldcr.com";
+ github = "afldcr";
+ githubId = 335271;
+ name = "James Alexander Feldman-Crough";
+ };
+ aforemny = {
+ email = "alexanderforemny@googlemail.com";
+ github = "aforemny";
+ name = "Alexander Foremny";
+ };
+ afranchuk = {
+ email = "alex.franchuk@gmail.com";
+ github = "afranchuk";
+ githubId = 4296804;
+ name = "Alex Franchuk";
+ };
+ aherrmann = {
+ email = "andreash87@gmx.ch";
+ github = "aherrmann";
+ githubId = 732652;
+ name = "Andreas Herrmann";
+ };
+ ahmedtd = {
+ email = "ahmed.taahir@gmail.com";
+ github = "ahmedtd";
+ githubId = 1017202;
+ name = "Taahir Ahmed";
+ };
+ ahuzik = {
+ email = "ales.guzik@gmail.com";
+ github = "alesguzik";
+ githubId = 209175;
+ name = "Ales Huzik";
+ };
+ aij = {
+ email = "aij+git@mrph.org";
+ github = "aij";
+ githubId = 4732885;
+ name = "Ivan Jager";
+ };
+ ajs124 = {
+ email = "nix@ajs124.de";
+ github = "ajs124";
+ githubId = 1229027;
+ name = "Andreas Schrägle";
+ };
+ ajgrf = {
+ email = "a@ajgrf.com";
+ github = "ajgrf";
+ githubId = 10733175;
+ name = "Alex Griffin";
+ };
+ ak = {
+ email = "ak@formalprivacy.com";
+ github = "alexanderkjeldaas";
+ name = "Alexander Kjeldaas";
+ };
+ akavel = {
+ email = "czapkofan@gmail.com";
+ github = "akavel";
+ githubId = 273837;
+ name = "Mateusz Czapliński";
+ };
+ akaWolf = {
+ email = "akawolf0@gmail.com";
+ github = "akaWolf";
+ githubId = 5836586;
+ name = "Artjom Vejsel";
+ };
+ akc = {
+ email = "akc@akc.is";
+ github = "akc";
+ githubId = 1318982;
+ name = "Anders Claesson";
+ };
+ akru = {
+ email = "mail@akru.me";
+ github = "akru";
+ githubId = 786394;
+ name = "Alexander Krupenkin ";
+ };
+ alexarice = {
+ email = "alexrice999@hotmail.co.uk";
+ github = "alexarice";
+ githubId = 17208985;
+ name = "Alex Rice";
+ };
+ alexbakker = {
+ email = "ab@alexbakker.me";
+ github = "alexbakker";
+ name = "Alexander Bakker";
+ };
+ alexchapman = {
+ email = "alex@farfromthere.net";
+ github = "AJChapman";
+ githubId = 8316672;
+ name = "Alex Chapman";
+ };
+ alexfmpe = {
+ email = "alexandre.fmp.esteves@gmail.com";
+ github = "alexfmpe";
+ githubId = 2335822;
+ name = "Alexandre Esteves";
+ };
+ alexvorobiev = {
+ email = "alexander.vorobiev@gmail.com";
+ github = "alexvorobiev";
+ githubId = 782180;
+ name = "Alex Vorobiev";
+ };
+ algorith = {
+ email = "dries_van_daele@telenet.be";
+ name = "Dries Van Daele";
+ };
+ alibabzo = {
+ email = "alistair.bill@gmail.com";
+ github = "alibabzo";
+ githubId = 2822871;
+ name = "Alistair Bill";
+ };
+ alkeryn = {
+ email = "plbraundev@gmail.com";
+ github = "Alkeryn";
+ githubId = 11599075;
+ name = "Pierre-Louis Braun";
+ };
+ all = {
+ email = "nix-commits@lists.science.uu.nl";
+ name = "Nix Committers";
+ };
+ allonsy = {
+ email = "linuxbash8@gmail.com";
+ github = "allonsy";
+ githubId = 5892756;
+ name = "Alec Snyder";
+ };
+ alunduil = {
+ email = "alunduil@gmail.com";
+ github = "alunduil";
+ name = "Alex Brandt";
+ };
+ amar1729 = {
+ email = "amar.paul16@gmail.com";
+ github = "amar1729";
+ githubId = 15623522;
+ name = "Amar Paul";
+ };
+ ambrop72 = {
+ email = "ambrop7@gmail.com";
+ github = "ambrop72";
+ name = "Ambroz Bizjak";
+ };
+ amiddelk = {
+ email = "amiddelk@gmail.com";
+ github = "amiddelk";
+ githubId = 1358320;
+ name = "Arie Middelkoop";
+ };
+ amiloradovsky = {
+ email = "miloradovsky@gmail.com";
+ github = "amiloradovsky";
+ githubId = 20530052;
+ name = "Andrew Miloradovsky";
+ };
+ aminb = {
+ email = "amin@aminb.org";
+ github = "aminb";
+ name = "Amin Bandali";
+ };
+ aminechikhaoui = {
+ email = "amine.chikhaoui91@gmail.com";
+ github = "AmineChikhaoui";
+ githubId = 5149377;
+ name = "Amine Chikhaoui";
+ };
+ amorsillo = {
+ email = "andrew.morsillo@gmail.com";
+ github = "AndrewMorsillo";
+ githubId = 858965;
+ name = "Andrew Morsillo";
+ };
+ andersk = {
+ email = "andersk@mit.edu";
+ github = "andersk";
+ githubId = 26471;
+ name = "Anders Kaseorg";
+ };
+ anderslundstedt = {
+ email = "git@anderslundstedt.se";
+ github = "anderslundstedt";
+ githubId = 4514101;
+ name = "Anders Lundstedt";
+ };
+ AndersonTorres = {
+ email = "torres.anderson.85@protonmail.com";
+ github = "AndersonTorres";
+ githubId = 5954806;
+ name = "Anderson Torres";
+ };
+ anderspapitto = {
+ email = "anderspapitto@gmail.com";
+ github = "anderspapitto";
+ githubId = 1388690;
+ name = "Anders Papitto";
+ };
+ andir = {
+ email = "andreas@rammhold.de";
+ github = "andir";
+ githubId = 638836;
+ name = "Andreas Rammhold";
+ };
+ andreabedini = {
+ email = "andrea@kzn.io";
+ github = "andreabedini";
+ name = "Andrea Bedini";
+ };
+ andres = {
+ email = "ksnixos@andres-loeh.de";
+ github = "kosmikus";
+ name = "Andres Loeh";
+ };
+ andrestylianos = {
+ email = "andre.stylianos@gmail.com";
+ github = "andrestylianos";
+ githubId = 7112447;
+ name = "Andre S. Ramos";
+ };
+ andrew-d = {
+ email = "andrew@du.nham.ca";
+ github = "andrew-d";
+ githubId = 1079173;
+ name = "Andrew Dunham";
+ };
+ andrewchambers = {
+ email = "ac@acha.ninja";
+ github = "andrewchambers";
+ githubId = 962885;
+ name = "Andrew Chambers";
+ };
+ andrewrk = {
+ email = "superjoe30@gmail.com";
+ github = "andrewrk";
+ githubId = 106511;
+ name = "Andrew Kelley";
+ };
+ andsild = {
+ email = "andsild@gmail.com";
+ github = "andsild";
+ name = "Anders Sildnes";
+ };
+ aneeshusa = {
+ email = "aneeshusa@gmail.com";
+ github = "aneeshusa";
+ githubId = 2085567;
+ name = "Aneesh Agrawal";
+ };
+ angristan = {
+ email = "angristan@pm.me";
+ github = "angristan";
+ githubId = 11699655;
+ name = "Stanislas Lange";
+ };
+ ankhers = {
+ email = "me@ankhers.dev";
+ github = "ankhers";
+ githubId = 750786;
+ name = "Justin Wood";
+ };
+ anpryl = {
+ email = "anpryl@gmail.com";
+ github = "anpryl";
+ githubId = 5327697;
+ name = "Anatolii Prylutskyi";
+ };
+ anton-dessiatov = {
+ email = "anton.dessiatov@gmail.com";
+ github = "anton-dessiatov";
+ githubId = 2873280;
+ name = "Anton Desyatov";
+ };
+ Anton-Latukha = {
+ email = "anton.latuka+nixpkgs@gmail.com";
+ github = "Anton-Latukha";
+ githubId = 20933385;
+ name = "Anton Latukha";
+ };
+ antono = {
+ email = "self@antono.info";
+ github = "antono";
+ name = "Antono Vasiljev";
+ };
+ antonxy = {
+ email = "anton.schirg@posteo.de";
+ github = "antonxy";
+ githubId = 4194320;
+ name = "Anton Schirg";
+ };
+ apeschar = {
+ email = "albert@peschar.net";
+ github = "apeschar";
+ githubId = 122977;
+ name = "Albert Peschar";
+ };
+ apeyroux = {
+ email = "alex@px.io";
+ github = "apeyroux";
+ githubId = 1078530;
+ name = "Alexandre Peyroux";
+ };
+ ar1a = {
+ email = "aria@ar1as.space";
+ github = "ar1a";
+ githubId = 8436007;
+ name = "Aria Edmonds";
+ };
+ arcadio = {
+ email = "arc@well.ox.ac.uk";
+ github = "arcadio";
+ githubId = 56009;
+ name = "Arcadio Rubio García";
+ };
+ ardumont = {
+ email = "eniotna.t@gmail.com";
+ github = "ardumont";
+ githubId = 718812;
+ name = "Antoine R. Dumont";
+ };
+ aristid = {
+ email = "aristidb@gmail.com";
+ github = "aristidb";
+ githubId = 30712;
+ name = "Aristid Breitkreuz";
+ };
+ ariutta = {
+ email = "anders.riutta@gmail.com";
+ github = "ariutta";
+ githubId = 1296771;
+ name = "Anders Riutta";
+ };
+ arobyn = {
+ email = "shados@shados.net";
+ github = "shados";
+ githubId = 338268;
+ name = "Alexei Robyn";
+ };
+ artemist = {
+ email = "me@artem.ist";
+ github = "artemist";
+ githubId = 1226638;
+ name = "Artemis Tosini";
+ keys = [{
+ longkeyid = "rsa4096/0x4FDC96F161E7BA8A";
+ fingerprint = "3D2B B230 F9FA F0C5 1832 46DD 4FDC 96F1 61E7 BA8A";
+ }];
+ };
+ artuuge = {
+ email = "artuuge@gmail.com";
+ github = "artuuge";
+ githubId = 10285250;
+ name = "Artur E. Ruuge";
+ };
+ ashalkhakov = {
+ email = "artyom.shalkhakov@gmail.com";
+ github = "ashalkhakov";
+ githubId = 1270502;
+ name = "Artyom Shalkhakov";
+ };
+ ashgillman = {
+ email = "gillmanash@gmail.com";
+ github = "ashgillman";
+ githubId = 816777;
+ name = "Ashley Gillman";
+ };
+ ashkitten = {
+ email = "ashlea@protonmail.com";
+ github = "ashkitten";
+ githubId = 9281956;
+ name = "ash lea";
+ };
+ aske = {
+ email = "aske@fmap.me";
+ github = "aske";
+ githubId = 869771;
+ name = "Kirill Boltaev";
+ };
+ asppsa = {
+ email = "asppsa@gmail.com";
+ github = "asppsa";
+ githubId = 453170;
+ name = "Alastair Pharo";
+ };
+ astro = {
+ email = "astro@spaceboyz.net";
+ github = "astro";
+ githubId = 12923;
+ name = "Astro";
+ };
+ astsmtl = {
+ email = "astsmtl@yandex.ru";
+ github = "astsmtl";
+ githubId = 2093941;
+ name = "Alexander Tsamutali";
+ };
+ asymmetric = {
+ email = "lorenzo@mailbox.org";
+ github = "asymmetric";
+ githubId = 101816;
+ name = "Lorenzo Manacorda";
+ };
+ aszlig = {
+ email = "aszlig@nix.build";
+ github = "aszlig";
+ githubId = 192147;
+ name = "aszlig";
+ };
+ athas = {
+ email = "athas@sigkill.dk";
+ github = "athas";
+ githubId = 55833;
+ name = "Troels Henriksen";
+ };
+ atnnn = {
+ email = "etienne@atnnn.com";
+ github = "atnnn";
+ githubId = 706854;
+ name = "Etienne Laurin";
+ };
+ auntie = {
+ email = "auntieNeo@gmail.com";
+ github = "auntie";
+ name = "Jonathan Glines";
+ };
+ avaq = {
+ email = "avaq+nixos@xs4all.nl";
+ github = "avaq";
+ githubId = 1217745;
+ name = "Aldwin Vlasblom";
+ };
+ avery = {
+ email = "averyl+nixos@protonmail.com";
+ github = "AveryLychee";
+ githubId = 9147625;
+ name = "Avery Lychee";
+ };
+ averelld = {
+ email = "averell+nixos@rxd4.com";
+ github = "averelld";
+ name = "averelld";
+ };
+ avitex = {
+ email = "theavitex@gmail.com";
+ github = "avitex";
+ githubId = 5110816;
+ name = "avitex";
+ keys = [{
+ longkeyid = "rsa4096/0x8B366C443CABE942";
+ fingerprint = "271E 136C 178E 06FA EA4E B854 8B36 6C44 3CAB E942";
+ }];
+ };
+ avnik = {
+ email = "avn@avnik.info";
+ github = "avnik";
+ githubId = 153538;
+ name = "Alexander V. Nikolaev";
+ };
+ aw = {
+ email = "aw-nixos@meterriblecrew.net";
+ github = "herrwiese";
+ githubId = 206242;
+ name = "Andreas Wiese";
+ };
+ aycanirican = {
+ email = "iricanaycan@gmail.com";
+ github = "aycanirican";
+ githubId = 135230;
+ name = "Aycan iRiCAN";
+ };
+ babariviere = {
+ email = "babathriviere@gmail.com";
+ github = "babariviere";
+ githubId = 12128029;
+ name = "babariviere";
+ };
+ bachp = {
+ email = "pascal.bach@nextrem.ch";
+ github = "bachp";
+ githubId = 333807;
+ name = "Pascal Bach";
+ };
+ backuitist = {
+ email = "biethb@gmail.com";
+ github = "backuitist";
+ name = "Bruno Bieth";
+ };
+ badi = {
+ email = "abdulwahidc@gmail.com";
+ github = "badi";
+ name = "Badi' Abdul-Wahid";
+ };
+ balajisivaraman = {
+ email = "sivaraman.balaji@gmail.com";
+ name = "Balaji Sivaraman";
+ };
+ balsoft = {
+ email = "balsoft75@gmail.com";
+ github = "balsoft";
+ githubId = 18467667;
+ name = "Alexander Bantyev";
+ };
+ bandresen = {
+ email = "bandresen@gmail.com";
+ github = "bandresen";
+ githubId = 80325;
+ name = "Benjamin Andresen";
+ };
+ baracoder = {
+ email = "baracoder@googlemail.com";
+ github = "baracoder";
+ githubId = 127523;
+ name = "Herman Fries";
+ };
+ barrucadu = {
+ email = "mike@barrucadu.co.uk";
+ github = "barrucadu";
+ githubId = 75235;
+ name = "Michael Walker";
+ };
+ basvandijk = {
+ email = "v.dijk.bas@gmail.com";
+ github = "basvandijk";
+ githubId = 576355;
+ name = "Bas van Dijk";
+ };
+ Baughn = {
+ email = "sveina@gmail.com";
+ github = "Baughn";
+ githubId = 45811;
+ name = "Svein Ove Aas";
+ };
+ bb010g = {
+ email = "me@bb010g.com";
+ github = "bb010g";
+ githubId = 340132;
+ name = "Brayden Banks";
+ };
+ bbarker = {
+ email = "brandon.barker@gmail.com";
+ github = "bbarker";
+ githubId = 916366;
+ name = "Brandon Elam Barker";
+ };
+ bbigras = {
+ email = "bigras.bruno@gmail.com";
+ github = "bbigras";
+ githubId = 24027;
+ name = "Bruno Bigras";
+ };
+ bcarrell = {
+ email = "brandoncarrell@gmail.com";
+ github = "bcarrell";
+ githubId = 1015044;
+ name = "Brandon Carrell";
+ };
+ bcdarwin = {
+ email = "bcdarwin@gmail.com";
+ github = "bcdarwin";
+ githubId = 164148;
+ name = "Ben Darwin";
+ };
+ bdesham = {
+ email = "benjamin@esham.io";
+ github = "bdesham";
+ githubId = 354230;
+ name = "Benjamin Esham";
+ };
+ bdimcheff = {
+ email = "brandon@dimcheff.com";
+ github = "bdimcheff";
+ githubId = 14111;
+ name = "Brandon Dimcheff";
+ };
+ bendlas = {
+ email = "herwig@bendlas.net";
+ github = "bendlas";
+ githubId = 214787;
+ name = "Herwig Hochleitner";
+ };
+ benley = {
+ email = "benley@gmail.com";
+ github = "benley";
+ githubId = 1432730;
+ name = "Benjamin Staffin";
+ };
+ bennofs = {
+ email = "benno.fuenfstueck@gmail.com";
+ github = "bennofs";
+ githubId = 3192959;
+ name = "Benno Fünfstück";
+ };
+ benpye = {
+ email = "ben@curlybracket.co.uk";
+ github = "benpye";
+ githubId = 442623;
+ name = "Ben Pye";
+ };
+ benwbooth = {
+ email = "benwbooth@gmail.com";
+ github = "benwbooth";
+ githubId = 75972;
+ name = "Ben Booth";
+ };
+ berce = {
+ email = "bert.moens@gmail.com";
+ github = "berce";
+ githubId = 10439709;
+ name = "Bert Moens";
+ };
+ berdario = {
+ email = "berdario@gmail.com";
+ github = "berdario";
+ name = "Dario Bertini";
+ };
+ bergey = {
+ email = "bergey@teallabs.org";
+ github = "bergey";
+ githubId = 251106;
+ name = "Daniel Bergey";
+ };
+ betaboon = {
+ email = "betaboon@0x80.ninja";
+ github = "betaboon";
+ githubId = 7346933;
+ name = "betaboon";
+ };
+ bfortz = {
+ email = "bernard.fortz@gmail.com";
+ github = "bfortz";
+ githubId = 16426882;
+ name = "Bernard Fortz";
+ };
+ bgamari = {
+ email = "ben@smart-cactus.org";
+ github = "bgamari";
+ githubId = 1010174;
+ name = "Ben Gamari";
+ };
+ bhall = {
+ email = "brendan.j.hall@bath.edu";
+ github = "brendan-hall";
+ githubId = 34919100;
+ name = "Brendan Hall";
+ };
+ bhipple = {
+ email = "bhipple@protonmail.com";
+ github = "bhipple";
+ githubId = 2071583;
+ name = "Benjamin Hipple";
+ };
+ binarin = {
+ email = "binarin@binarin.ru";
+ github = "binarin";
+ githubId = 185443;
+ name = "Alexey Lebedeff";
+ };
+ bjg = {
+ email = "bjg@gnu.org";
+ name = "Brian Gough";
+ };
+ bjornfor = {
+ email = "bjorn.forsman@gmail.com";
+ github = "bjornfor";
+ githubId = 133602;
+ name = "Bjørn Forsman";
+ };
+ bkchr = {
+ email = "nixos@kchr.de";
+ github = "bkchr";
+ githubId = 5718007;
+ name = "Bastian Köcher";
+ };
+ bluescreen303 = {
+ email = "mathijs@bluescreen303.nl";
+ github = "bluescreen303";
+ name = "Mathijs Kwik";
+ };
+ bobakker = {
+ email = "bobakk3r@gmail.com";
+ github = "bobakker";
+ githubId = 10221570;
+ name = "Bo Bakker";
+ };
+ bobvanderlinden = {
+ email = "bobvanderlinden@gmail.com";
+ github = "bobvanderlinden";
+ githubId = 6375609;
+ name = "Bob van der Linden";
+ };
+ bodil = {
+ email = "nix@bodil.org";
+ github = "bodil";
+ githubId = 17880;
+ name = "Bodil Stokke";
+ };
+ boj = {
+ email = "brian@uncannyworks.com";
+ github = "boj";
+ githubId = 50839;
+ name = "Brian Jones";
+ };
+ boothead = {
+ email = "ben@perurbis.com";
+ github = "boothead";
+ name = "Ben Ford";
+ };
+ borisbabic = {
+ email = "boris.ivan.babic@gmail.com";
+ github = "borisbabic";
+ githubId = 1743184;
+ name = "Boris Babić";
+ };
+ bosu = {
+ email = "boriss@gmail.com";
+ github = "bosu";
+ githubId = 3465841;
+ name = "Boris Sukholitko";
+ };
+ bradediger = {
+ email = "brad@bradediger.com";
+ github = "bradediger";
+ githubId = 4621;
+ name = "Brad Ediger";
+ };
+ brainrape = {
+ email = "martonboros@gmail.com";
+ github = "brainrape";
+ githubId = 302429;
+ name = "Marton Boros";
+ };
+ bramd = {
+ email = "bram@bramd.nl";
+ github = "bramd";
+ githubId = 86652;
+ name = "Bram Duvigneau";
+ };
+ braydenjw = {
+ email = "nixpkgs@willenborg.ca";
+ github = "braydenjw";
+ githubId = 2506621;
+ name = "Brayden Willenborg";
+ };
+ brian-dawn = {
+ email = "brian.t.dawn@gmail.com";
+ github = "brian-dawn";
+ githubId = 1274409;
+ name = "Brian Dawn";
+ };
+ brianhicks = {
+ email = "brian@brianthicks.com";
+ github = "BrianHicks";
+ githubId = 355401;
+ name = "Brian Hicks";
+ };
+ bricewge = {
+ email = "bricewge@gmail.com";
+ github = "bricewge";
+ githubId = 5525646;
+ name = "Brice Waegeneire";
+ };
+ bstrik = {
+ email = "dutchman55@gmx.com";
+ github = "bstrik";
+ githubId = 7716744;
+ name = "Berno Strik";
+ };
+ buffet = {
+ email = "niclas@countingsort.com";
+ github = "buffet";
+ githubId = 33751841;
+ name = "Niclas Meyer";
+ };
+ bugworm = {
+ email = "bugworm@zoho.com";
+ github = "bugworm";
+ githubId = 7214361;
+ name = "Roman Gerasimenko";
+ };
+ bzizou = {
+ email = "Bruno@bzizou.net";
+ github = "bzizou";
+ githubId = 2647566;
+ name = "Bruno Bzeznik";
+ };
+ c0bw3b = {
+ email = "c0bw3b@gmail.com";
+ github = "c0bw3b";
+ githubId = 24417923;
+ name = "Renaud";
+ };
+ c0deaddict = {
+ email = "josvanbakel@protonmail.com";
+ github = "c0deaddict";
+ githubId = 510553;
+ name = "Jos van Bakel";
+ };
+ calbrecht = {
+ email = "christian.albrecht@mayflower.de";
+ github = "calbrecht";
+ githubId = 1516457;
+ name = "Christian Albrecht";
+ };
+ callahad = {
+ email = "dan.callahan@gmail.com";
+ github = "callahad";
+ githubId = 24193;
+ name = "Dan Callahan";
+ };
+ calvertvl = {
+ email = "calvertvl@gmail.com";
+ github = "calvertvl";
+ githubId = 7435854;
+ name = "Victor Calvert";
+ };
+ campadrenalin = {
+ email = "campadrenalin@gmail.com";
+ github = "campadrenalin";
+ githubId = 289492;
+ name = "Philip Horger";
+ };
+ candeira = {
+ email = "javier@candeira.com";
+ github = "candeira";
+ githubId = 91694;
+ name = "Javier Candeira";
+ };
+ canndrew = {
+ email = "shum@canndrew.org";
+ github = "canndrew";
+ githubId = 5555066;
+ name = "Andrew Cann";
+ };
+ carlosdagos = {
+ email = "m@cdagostino.io";
+ github = "carlosdagos";
+ githubId = 686190;
+ name = "Carlos D'Agostino";
+ };
+ carlsverre = {
+ email = "accounts@carlsverre.com";
+ github = "carlsverre";
+ githubId = 82591;
+ name = "Carl Sverre";
+ };
+ cartr = {
+ email = "carter.sande@duodecima.technology";
+ github = "cartr";
+ githubId = 5241813;
+ name = "Carter Sande";
+ };
+ casey = {
+ email = "casey@rodarmor.net";
+ github = "casey";
+ githubId = 1945;
+ name = "Casey Rodarmor";
+ };
+ catern = {
+ email = "sbaugh@catern.com";
+ github = "catern";
+ githubId = 5394722;
+ name = "Spencer Baugh";
+ };
+ caugner = {
+ email = "nixos@caugner.de";
+ github = "caugner";
+ githubId = 495429;
+ name = "Claas Augner";
+ };
+ cbley = {
+ email = "claudio.bley@gmail.com";
+ github = "avdv";
+ githubId = 3471749;
+ name = "Claudio Bley";
+ };
+ cdepillabout = {
+ email = "cdep.illabout@gmail.com";
+ github = "cdepillabout";
+ githubId = 64804;
+ name = "Dennis Gosnell";
+ };
+ ceedubs = {
+ email = "ceedubs@gmail.com";
+ github = "ceedubs";
+ githubId = 977929;
+ name = "Cody Allen";
+ };
+ cfouche = {
+ email = "chaddai.fouche@gmail.com";
+ github = "Chaddai";
+ githubId = 5771456;
+ name = "Chaddaï Fouché";
+ };
+ chaduffy = {
+ email = "charles@dyfis.net";
+ github = "charles-dyfis-net";
+ githubId = 22370;
+ name = "Charles Duffy";
+ };
+ changlinli = {
+ email = "mail@changlinli.com";
+ github = "changlinli";
+ githubId = 1762540;
+ name = "Changlin Li";
+ };
+ CharlesHD = {
+ email = "charleshdespointes@gmail.com";
+ github = "CharlesHD";
+ githubId = 6608071;
+ name = "Charles Huyghues-Despointes";
+ };
+ chaoflow = {
+ email = "flo@chaoflow.net";
+ github = "chaoflow";
+ githubId = 89596;
+ name = "Florian Friesdorf";
+ };
+ chattered = {
+ email = "me@philscotted.com";
+ name = "Phil Scott";
+ };
+ ChengCat = {
+ email = "yu@cheng.cat";
+ github = "ChengCat";
+ githubId = 33503784;
+ name = "Yucheng Zhang";
+ };
+ chessai = {
+ email = "chessai1996@gmail.com";
+ github = "chessai";
+ githubId = 18648043;
+ name = "Daniel Cartwright";
+ };
+ chiiruno = {
+ email = "okinan@protonmail.com";
+ github = "chiiruno";
+ githubId = 30435868;
+ name = "Okina Matara";
+ };
+ choochootrain = {
+ email = "hurshal@imap.cc";
+ github = "choochootrain";
+ githubId = 803961;
+ name = "Hurshal Patel";
+ };
+ chpatrick = {
+ email = "chpatrick@gmail.com";
+ github = "chpatrick";
+ githubId = 832719;
+ name = "Patrick Chilton";
+ };
+ chreekat = {
+ email = "b@chreekat.net";
+ github = "chreekat";
+ githubId = 538538;
+ name = "Bryan Richter";
+ };
+ chris-martin = {
+ email = "ch.martin@gmail.com";
+ github = "chris-martin";
+ githubId = 399718;
+ name = "Chris Martin";
+ };
+ chrisaw = {
+ email = "home@chrisaw.com";
+ github = "cawilliamson";
+ githubId = 1141769;
+ name = "Christopher A. Williamson";
+ };
+ chrisjefferson = {
+ email = "chris@bubblescope.net";
+ github = "chrisjefferson";
+ githubId = 811527;
+ name = "Christopher Jefferson";
+ };
+ chrisrosset = {
+ email = "chris@rosset.org.uk";
+ github = "chrisrosset";
+ githubId = 1103294;
+ name = "Christopher Rosset";
+ };
+ christopherpoole = {
+ email = "mail@christopherpoole.net";
+ github = "christopherpoole";
+ githubId = 2245737;
+ name = "Christopher Mark Poole";
+ };
+ ciil = {
+ email = "simon@lackerbauer.com";
+ github = "ciil";
+ githubId = 3956062;
+ name = "Simon Lackerbauer";
+ };
+ cizra = {
+ email = "todurov+nix@gmail.com";
+ github = "cizra";
+ githubId = 2131991;
+ name = "Elmo Todurov";
+ };
+ ck3d = {
+ email = "ck3d@gmx.de";
+ github = "ck3d";
+ githubId = 25088352;
+ name = "Christian Kögler";
+ };
+ kampka = {
+ email = "christian@kampka.net";
+ github = "kampka";
+ githubId = 422412;
+ name = "Christian Kampka";
+ keys = [{
+ longkeyid = "ed25519/0x1CBE9645DD68E915";
+ fingerprint = "F7FA 0BD0 8775 337C F6AB 4A14 1CBE 9645 DD68 E915";
+ }];
+ };
+ ckauhaus = {
+ email = "kc@flyingcircus.io";
+ github = "ckauhaus";
+ githubId = 1448923;
+ name = "Christian Kauhaus";
+ };
+ cko = {
+ email = "christine.koppelt@gmail.com";
+ github = "cko";
+ githubId = 68239;
+ name = "Christine Koppelt";
+ };
+ clacke = {
+ email = "claes.wallin@greatsinodevelopment.com";
+ github = "clacke";
+ githubId = 199180;
+ name = "Claes Wallin";
+ };
+ cleverca22 = {
+ email = "cleverca22@gmail.com";
+ github = "cleverca22";
+ githubId = 848609;
+ name = "Michael Bishop";
+ };
+ cmcdragonkai = {
+ email = "roger.qiu@matrix.ai";
+ github = "cmcdragonkai";
+ githubId = 640797;
+ name = "Roger Qiu";
+ };
+ cmfwyp = {
+ email = "cmfwyp@riseup.net";
+ github = "cmfwyp";
+ githubId = 20808761;
+ name = "cmfwyp";
+ };
+ cobbal = {
+ email = "andrew.cobb@gmail.com";
+ github = "cobbal";
+ githubId = 180339;
+ name = "Andrew Cobb";
+ };
+ coconnor = {
+ email = "coreyoconnor@gmail.com";
+ github = "coreyoconnor";
+ name = "Corey O'Connor";
+ };
+ codsl = {
+ email = "codsl@riseup.net";
+ github = "codsl";
+ githubId = 6402559;
+ name = "codsl";
+ };
+ codyopel = {
+ email = "codyopel@gmail.com";
+ github = "codyopel";
+ githubId = 5561189;
+ name = "Cody Opel";
+ };
+ cohencyril = {
+ email = "cyril.cohen@inria.fr";
+ github = "CohenCyril";
+ githubId = 298705;
+ name = "Cyril Cohen";
+ };
+ colemickens = {
+ email = "cole.mickens@gmail.com";
+ github = "colemickens";
+ githubId = 327028;
+ name = "Cole Mickens";
+ };
+ colescott = {
+ email = "colescottsf@gmail.com";
+ github = "colescott";
+ githubId = 5684605;
+ name = "Cole Scott";
+ };
+ copumpkin = {
+ email = "pumpkingod@gmail.com";
+ github = "copumpkin";
+ githubId = 2623;
+ name = "Dan Peebles";
+ };
+ corngood = {
+ email = "corngood@gmail.com";
+ github = "corngood";
+ githubId = 3077118;
+ name = "David McFarland";
+ };
+ coroa = {
+ email = "jonas@chaoflow.net";
+ github = "coroa";
+ githubId = 2552981;
+ name = "Jonas Hörsch";
+ };
+ costrouc = {
+ email = "chris.ostrouchov@gmail.com";
+ github = "costrouc";
+ githubId = 1740337;
+ name = "Chris Ostrouchov";
+ };
+ couchemar = {
+ email = "couchemar@yandex.ru";
+ github = "couchemar";
+ githubId = 1573344;
+ name = "Andrey Pavlov";
+ };
+ cpages = {
+ email = "page@ruiec.cat";
+ github = "cpages";
+ githubId = 411324;
+ name = "Carles Pagès";
+ };
+ cransom = {
+ email = "cransom@hubns.net";
+ github = "cransom";
+ name = "Casey Ransom";
+ };
+ CrazedProgrammer = {
+ email = "crazedprogrammer@gmail.com";
+ github = "CrazedProgrammer";
+ githubId = 12202789;
+ name = "CrazedProgrammer";
+ };
+ cryptix = {
+ email = "cryptix@riseup.net";
+ github = "cryptix";
+ githubId = 111202;
+ name = "Henry Bubert";
+ };
+ CrystalGamma = {
+ email = "nixos@crystalgamma.de";
+ github = "CrystalGamma";
+ githubId = 6297001;
+ name = "Jona Stubbe";
+ };
+ csingley = {
+ email = "csingley@gmail.com";
+ github = "csingley";
+ githubId = 398996;
+ name = "Christopher Singley";
+ };
+ cstrahan = {
+ email = "charles@cstrahan.com";
+ github = "cstrahan";
+ githubId = 143982;
+ name = "Charles Strahan";
+ };
+ cwoac = {
+ email = "oliver@codersoffortune.net";
+ github = "cwoac";
+ githubId = 1382175;
+ name = "Oliver Matthews";
+ };
+ cypherpunk2140 = {
+ email = "stefan.mihaila@pm.me";
+ github = "cypherpunk2140";
+ githubId = 2217136;
+ name = "Ștefan D. Mihăilă";
+ keys = [
+ { longkeyid = "rsa4096/6E68A39BF16A3ECB";
+ fingerprint = "CBC9 C7CC 51F0 4A61 3901 C723 6E68 A39B F16A 3ECB";
+ }
+ { longkeyid = "rsa4096/6220AD7846220A52";
+ fingerprint = "7EAB 1447 5BBA 7DDE 7092 7276 6220 AD78 4622 0A52";
+ }
+ ];
+ };
+ dalance = {
+ email = "dalance@gmail.com";
+ github = "dalance";
+ githubId = 4331004;
+ name = "Naoya Hatta";
+ };
+ DamienCassou = {
+ email = "damien@cassou.me";
+ github = "DamienCassou";
+ githubId = 217543;
+ name = "Damien Cassou";
+ };
+ danbst = {
+ email = "abcz2.uprola@gmail.com";
+ github = "danbst";
+ githubId = 743057;
+ name = "Danylo Hlynskyi";
+ };
+ dancek = {
+ email = "hannu.hartikainen@gmail.com";
+ github = "dancek";
+ githubId = 245394;
+ name = "Hannu Hartikainen";
+ };
+ danharaj = {
+ email = "dan@obsidian.systems";
+ github = "danharaj";
+ githubId = 23366017;
+ name = "Dan Haraj";
+ };
+ danieldk = {
+ email = "me@danieldk.eu";
+ github = "danieldk";
+ githubId = 49398;
+ name = "Daniël de Kok";
+ };
+ danielfullmer = {
+ email = "danielrf12@gmail.com";
+ github = "danielfullmer";
+ githubId = 1298344;
+ name = "Daniel Fullmer";
+ };
+ das-g = {
+ email = "nixpkgs@raphael.dasgupta.ch";
+ github = "das-g";
+ githubId = 97746;
+ name = "Raphael Das Gupta";
+ };
+ das_j = {
+ email = "janne@hess.ooo";
+ github = "dasJ";
+ githubId = 4971975;
+ name = "Janne Heß";
+ };
+ dasuxullebt = {
+ email = "christoph.senjak@googlemail.com";
+ name = "Christoph-Simon Senjak";
+ };
+ david50407 = {
+ email = "me@davy.tw";
+ github = "david50407";
+ githubId = 841969;
+ name = "David Kuo";
+ };
+ davidak = {
+ email = "post@davidak.de";
+ github = "davidak";
+ githubId = 91113;
+ name = "David Kleuker";
+ };
+ davidrusu = {
+ email = "davidrusu.me@gmail.com";
+ github = "davidrusu";
+ name = "David Rusu";
+ };
+ davorb = {
+ email = "davor@davor.se";
+ github = "davorb";
+ githubId = 798427;
+ name = "Davor Babic";
+ };
+ dawidsowa = {
+ email = "dawid_sowa@posteo.net";
+ github = "dawidsowa";
+ githubId = 49904992;
+ name = "Dawid Sowa";
+ };
+ dbohdan = {
+ email = "dbohdan@dbohdan.com";
+ github = "dbohdan";
+ githubId = 3179832;
+ name = "D. Bohdan";
+ };
+ dbrock = {
+ email = "daniel@brockman.se";
+ github = "dbrock";
+ githubId = 14032;
+ name = "Daniel Brockman";
+ };
+ deepfire = {
+ email = "_deepfire@feelingofgreen.ru";
+ github = "deepfire";
+ githubId = 452652;
+ name = "Kosyrev Serge";
+ };
+ delan = {
+ name = "Delan Azabani";
+ email = "delan@azabani.com";
+ github = "delan";
+ githubId = 465303;
+ };
+ delroth = {
+ email = "delroth@gmail.com";
+ github = "delroth";
+ githubId = 202798;
+ name = "Pierre Bourdon";
+ };
+ deltaevo = {
+ email = "deltaduartedavid@gmail.com";
+ github = "DeltaEvo";
+ githubId = 8864716;
+ name = "Duarte David";
+ };
+ demin-dmitriy = {
+ email = "demindf@gmail.com";
+ github = "demin-dmitriy";
+ githubId = 5503422;
+ name = "Dmitriy Demin";
+ };
+ demize = {
+ email = "johannes@kyriasis.com";
+ github = "kyrias";
+ githubId = 2285387;
+ name = "Johannes Löthberg";
+ };
+ demyanrogozhin = {
+ email = "demyan.rogozhin@gmail.com";
+ github = "demyanrogozhin";
+ githubId = 62989;
+ name = "Demyan Rogozhin";
+ };
+ derchris = {
+ email = "derchris@me.com";
+ github = "derchrisuk";
+ githubId = 706758;
+ name = "Christian Gerbrandt";
+ };
+ DerGuteMoritz = {
+ email = "moritz@twoticketsplease.de";
+ github = "DerGuteMoritz";
+ name = "Moritz Heidkamp";
+ };
+ dermetfan = {
+ email = "serverkorken@gmail.com";
+ github = "dermetfan";
+ githubId = 4956158;
+ name = "Robin Stumm";
+ };
+ DerTim1 = {
+ email = "tim.digel@active-group.de";
+ github = "DerTim1";
+ githubId = 21953890;
+ name = "Tim Digel";
+ };
+ desiderius = {
+ email = "didier@devroye.name";
+ github = "desiderius";
+ name = "Didier J. Devroye";
+ };
+ devhell = {
+ email = "\"^\"@regexmail.net";
+ github = "devhell";
+ githubId = 896182;
+ name = "devhell";
+ };
+ dezgeg = {
+ email = "tuomas.tynkkynen@iki.fi";
+ github = "dezgeg";
+ githubId = 579369;
+ name = "Tuomas Tynkkynen";
+ };
+ dfordivam = {
+ email = "dfordivam+nixpkgs@gmail.com";
+ github = "dfordivam";
+ githubId = 681060;
+ name = "Divam";
+ };
+ dfoxfranke = {
+ email = "dfoxfranke@gmail.com";
+ github = "dfoxfranke";
+ githubId = 4708206;
+ name = "Daniel Fox Franke";
+ };
+ dgonyeo = {
+ email = "derek@gonyeo.com";
+ github = "dgonyeo";
+ name = "Derek Gonyeo";
+ };
+ dhkl = {
+ email = "david@davidslab.com";
+ github = "dhl";
+ githubId = 265220;
+ name = "David Leung";
+ };
+ dipinhora = {
+ email = "dipinhora+github@gmail.com";
+ github = "dipinhora";
+ githubId = 11946442;
+ name = "Dipin Hora";
+ };
+ disassembler = {
+ email = "disasm@gmail.com";
+ github = "disassembler";
+ githubId = 651205;
+ name = "Samuel Leathers";
+ };
+ disserman = {
+ email = "disserman@gmail.com";
+ github = "divi255";
+ githubId = 40633781;
+ name = "Sergei S.";
+ };
+ dizfer = {
+ email = "david@izquierdofernandez.com";
+ github = "dizfer";
+ githubId = 8852888;
+ name = "David Izquierdo";
+ };
+ Dje4321 = {
+ email = "dje4321@gmail.com";
+ github = "dje4321";
+ githubId = 10913120;
+ name = "Dje4321";
+ };
+ dkabot = {
+ email = "dkabot@dkabot.com";
+ github = "dkabot";
+ githubId = 1316469;
+ name = "Naomi Morse";
+ };
+ dmalikov = {
+ email = "malikov.d.y@gmail.com";
+ github = "dmalikov";
+ githubId = 997543;
+ name = "Dmitry Malikov";
+ };
+ DmitryTsygankov = {
+ email = "dmitry.tsygankov@gmail.com";
+ github = "DmitryTsygankov";
+ githubId = 425354;
+ name = "Dmitry Tsygankov";
+ };
+ dmjio = {
+ email = "djohnson.m@gmail.com";
+ github = "dmjio";
+ githubId = 875324;
+ name = "David Johnson";
+ };
+ dmvianna = {
+ email = "dmlvianna@gmail.com";
+ github = "dmvianna";
+ githubId = 1708810;
+ name = "Daniel Vianna";
+ };
+ dochang = {
+ email = "dochang@gmail.com";
+ github = "dochang";
+ githubId = 129093;
+ name = "Desmond O. Chang";
+ };
+ domenkozar = {
+ email = "domen@dev.si";
+ github = "domenkozar";
+ githubId = 126339;
+ name = "Domen Kozar";
+ };
+ doronbehar = {
+ email = "me@doronbehar.com";
+ github = "doronbehar";
+ githubId = 10998835;
+ name = "Doron Behar";
+ };
+ dotlambda = {
+ email = "rschuetz17@gmail.com";
+ github = "dotlambda";
+ githubId = 6806011;
+ name = "Robert Schütz";
+ };
+ doublec = {
+ email = "chris.double@double.co.nz";
+ github = "doublec";
+ name = "Chris Double";
+ };
+ dpaetzel = {
+ email = "david.a.paetzel@gmail.com";
+ github = "dpaetzel";
+ githubId = 974130;
+ name = "David Pätzel";
+ };
+ dpflug = {
+ email = "david@pflug.email";
+ github = "dpflug";
+ githubId = 108501;
+ name = "David Pflug";
+ };
+ drets = {
+ email = "dmitryrets@gmail.com";
+ github = "drets";
+ githubId = 6199462;
+ name = "Dmytro Rets";
+ };
+ drewkett = {
+ email = "burkett.andrew@gmail.com";
+ name = "Andrew Burkett";
+ };
+ dsferruzza = {
+ email = "david.sferruzza@gmail.com";
+ github = "dsferruzza";
+ githubId = 1931963;
+ name = "David Sferruzza";
+ };
+ dtzWill = {
+ email = "w@wdtz.org";
+ github = "dtzWill";
+ githubId = 817330;
+ name = "Will Dietz";
+ keys = [{
+ longkeyid = "rsa4096/0xFD42C7D0D41494C8";
+ fingerprint = "389A 78CB CD88 5E0C 4701 DEB9 FD42 C7D0 D414 94C8";
+ }];
+ };
+ dump_stack = {
+ email = "root@dumpstack.io";
+ github = "jollheef";
+ githubId = 1749762;
+ name = "Mikhail Klementev";
+ keys = [{
+ longkeyid = "rsa4096/0x1525585D1B43C62A";
+ fingerprint = "5DD7 C6F6 0630 F08E DAE7 4711 1525 585D 1B43 C62A";
+ }];
+ };
+ dxf = {
+ email = "dingxiangfei2009@gmail.com";
+ github = "dingxiangfei2009";
+ name = "Ding Xiang Fei";
+ };
+ dysinger = {
+ email = "tim@dysinger.net";
+ github = "dysinger";
+ githubId = 447;
+ name = "Tim Dysinger";
+ };
+ dywedir = {
+ email = "dywedir@gra.red";
+ github = "dywedir";
+ githubId = 399312;
+ name = "Vladyslav M.";
+ };
+ dzabraev = {
+ email = "dzabraew@gmail.com";
+ github = "dzabraev";
+ githubId = 15128988;
+ name = "Maksim Dzabraev";
+ };
+ e-user = {
+ email = "nixos@sodosopa.io";
+ github = "e-user";
+ githubId = 93086;
+ name = "Alexander Kahl";
+ };
+ eadwu = {
+ email = "edmund.wu@protonmail.com";
+ github = "eadwu";
+ githubId = 22758444;
+ name = "Edmund Wu";
+ };
+ ealasu = {
+ email = "emanuel.alasu@gmail.com";
+ github = "ealasu";
+ githubId = 1362096;
+ name = "Emanuel Alasu";
+ };
+ eamsden = {
+ email = "edward@blackriversoft.com";
+ github = "eamsden";
+ githubId = 54573;
+ name = "Edward Amsden";
+ };
+ earldouglas = {
+ email = "james@earldouglas.com";
+ github = "earldouglas";
+ githubId = 424946;
+ name = "James Earl Douglas";
+ };
+ earvstedt = {
+ email = "erik.arvstedt@gmail.com";
+ github = "erikarvstedt";
+ githubId = 36110478;
+ name = "Erik Arvstedt";
+ };
+ ebzzry = {
+ email = "ebzzry@ebzzry.io";
+ github = "ebzzry";
+ githubId = 7875;
+ name = "Rommel Martinez";
+ };
+ edanaher = {
+ email = "nixos@edanaher.net";
+ github = "edanaher";
+ name = "Evan Danaher";
+ };
+ edef = {
+ email = "edef@edef.eu";
+ github = "edef1c";
+ githubId = 50854;
+ name = "edef";
+ };
+ embr = {
+ email = "hi@liclac.eu";
+ github = "liclac";
+ githubId = 428026;
+ name = "embr";
+ };
+ emily = {
+ email = "nixpkgs@emily.moe";
+ github = "emilazy";
+ githubId = 18535642;
+ name = "Emily";
+ };
+ endocrimes = {
+ email = "dani@builds.terrible.systems";
+ github = "endocrimes";
+ githubId = 1330683;
+ name = "Danielle Lancashire";
+ };
+ ederoyd46 = {
+ email = "matt@ederoyd.co.uk";
+ github = "ederoyd46";
+ githubId = 119483;
+ name = "Matthew Brown";
+ };
+ eduarrrd = {
+ email = "e.bachmakov@gmail.com";
+ github = "eduarrrd";
+ githubId = 1181393;
+ name = "Eduard Bachmakov";
+ };
+ edude03 = {
+ email = "michael@melenion.com";
+ github = "edude03";
+ githubId = 494483;
+ name = "Michael Francis";
+ };
+ edwtjo = {
+ email = "ed@cflags.cc";
+ github = "edwtjo";
+ githubId = 54799;
+ name = "Edward Tjörnhammar";
+ };
+ eelco = {
+ email = "eelco.dolstra@logicblox.com";
+ github = "edolstra";
+ githubId = 1148549;
+ name = "Eelco Dolstra";
+ };
+ ehegnes = {
+ email = "eric.hegnes@gmail.com";
+ github = "ehegnes";
+ githubId = 884970;
+ name = "Eric Hegnes";
+ };
+ ehmry = {
+ email = "emery@vfemail.net";
+ name = "Emery Hemingway";
+ };
+ eikek = {
+ email = "eike.kettner@posteo.de";
+ github = "eikek";
+ githubId = 701128;
+ name = "Eike Kettner";
+ };
+ ekleog = {
+ email = "leo@gaspard.io";
+ github = "ekleog";
+ githubId = 411447;
+ name = "Leo Gaspard";
+ };
+ elasticdog = {
+ email = "aaron@elasticdog.com";
+ github = "elasticdog";
+ githubId = 4742;
+ name = "Aaron Bull Schaefer";
+ };
+ eleanor = {
+ email = "dejan@proteansec.com";
+ github = "proteansec";
+ githubId = 1753498;
+ name = "Dejan Lukan";
+ };
+ eliasp = {
+ email = "mail@eliasprobst.eu";
+ github = "eliasp";
+ githubId = 48491;
+ name = "Elias Probst";
+ };
+ elijahcaine = {
+ email = "elijahcainemv@gmail.com";
+ github = "pop";
+ githubId = 1897147;
+ name = "Elijah Caine";
+ };
+ elitak = {
+ email = "elitak@gmail.com";
+ github = "elitak";
+ githubId = 769073;
+ name = "Eric Litak";
+ };
+ ellis = {
+ email = "nixos@ellisw.net";
+ github = "ellis";
+ githubId = 97852;
+ name = "Ellis Whitehead";
+ };
+ elohmeier = {
+ email = "elo-nixos@nerdworks.de";
+ github = "elohmeier";
+ githubId = 2536303;
+ name = "Enno Lohmeier";
+ };
+ elseym = {
+ email = "elseym@me.com";
+ github = "elseym";
+ githubId = 907478;
+ name = "Simon Waibl";
+ };
+ elvishjerricco = {
+ email = "elvishjerricco@gmail.com";
+ github = "ElvishJerricco";
+ githubId = 1365692;
+ name = "Will Fancher";
+ };
+ emmanuelrosa = {
+ email = "emmanuel_rosa@aol.com";
+ github = "emmanuelrosa";
+ name = "Emmanuel Rosa";
+ };
+ endgame = {
+ email = "jack@jackkelly.name";
+ github = "endgame";
+ githubId = 231483;
+ name = "Jack Kelly";
+ };
+ enorris = {
+ name = "Eric Norris";
+ email = "erictnorris@gmail.com";
+ github = "ericnorris";
+ githubId = 1906605;
+ };
+ enzime = {
+ email = "enzime@users.noreply.github.com";
+ github = "enzime";
+ githubId = 10492681;
+ name = "Michael Hoang";
+ };
+ eperuffo = {
+ email = "info@emanueleperuffo.com";
+ github = "emanueleperuffo";
+ githubId = 5085029;
+ name = "Emanuele Peruffo";
+ };
+ epitrochoid = {
+ email = "mpcervin@uncg.edu";
+ name = "Mabry Cervin";
+ };
+ eqyiel = {
+ email = "ruben@maher.fyi";
+ github = "eqyiel";
+ githubId = 3422442;
+ name = "Ruben Maher";
+ };
+ eraserhd = {
+ email = "jason.m.felice@gmail.com";
+ github = "eraserhd";
+ githubId = 147284;
+ name = "Jason Felice";
+ };
+ ericbmerritt = {
+ email = "eric@afiniate.com";
+ github = "ericbmerritt";
+ githubId = 4828;
+ name = "Eric Merritt";
+ };
+ ericsagnes = {
+ email = "eric.sagnes@gmail.com";
+ github = "ericsagnes";
+ name = "Eric Sagnes";
+ };
+ ericson2314 = {
+ email = "John.Ericson@Obsidian.Systems";
+ github = "ericson2314";
+ githubId = 1055245;
+ name = "John Ericson";
+ };
+ erictapen = {
+ email = "justin.humm@posteo.de";
+ github = "erictapen";
+ githubId = 11532355;
+ name = "Justin Humm";
+ keys = [{
+ longkeyid = "rsa4096/0x438871E000AA178E";
+ fingerprint = "984E 4BAD 9127 4D0E AE47 FF03 4388 71E0 00AA 178E";
+ }];
+ };
+ erikryb = {
+ email = "erik.rybakken@math.ntnu.no";
+ github = "erikryb";
+ githubId = 3787281;
+ name = "Erik Rybakken";
+ };
+ erosennin = {
+ email = "ag@sologoc.com";
+ github = "erosennin";
+ githubId = 1583484;
+ name = "Andrey Golovizin";
+ };
+ ertes = {
+ email = "esz@posteo.de";
+ github = "ertes";
+ name = "Ertugrul Söylemez";
+ };
+ Esteth = {
+ email = "adam.copp@gmail.com";
+ name = "Adam Copp";
+ };
+ ethercrow = {
+ email = "ethercrow@gmail.com";
+ github = "ethercrow";
+ githubId = 222467;
+ name = "Dmitry Ivanov";
+ };
+ etu = {
+ email = "elis@hirwing.se";
+ github = "etu";
+ githubId = 461970;
+ name = "Elis Hirwing";
+ keys = [{
+ longkeyid = "rsa4096/0xD57EFA625C9A925F";
+ fingerprint = "67FE 98F2 8C44 CF22 1828 E12F D57E FA62 5C9A 925F";
+ }];
+ };
+ evanjs = {
+ email = "evanjsx@gmail.com";
+ github = "evanjs";
+ githubId = 1847524;
+ name = "Evan Stoll";
+ };
+ evck = {
+ email = "eric@evenchick.com";
+ github = "ericevenchick";
+ githubId = 195032;
+ name = "Eric Evenchick";
+ };
+ exfalso = {
+ email = "0slemi0@gmail.com";
+ github = "exfalso";
+ githubId = 1042674;
+ name = "Andras Slemmer";
+ };
+ exi = {
+ email = "nixos@reckling.org";
+ github = "exi";
+ githubId = 449463;
+ name = "Reno Reckling";
+ };
+ exlevan = {
+ email = "exlevan@gmail.com";
+ github = "exlevan";
+ githubId = 873530;
+ name = "Alexey Levan";
+ };
+ expipiplus1 = {
+ email = "nix@monoid.al";
+ github = "expipiplus1";
+ githubId = 857308;
+ name = "Joe Hermaszewski";
+ };
+ eyjhb = {
+ email = "eyjhbb@gmail.com";
+ github = "eyJhb";
+ githubId = 25955146;
+ name = "eyJhb";
+ };
+ f--t = {
+ email = "git@f-t.me";
+ github = "f--t";
+ githubId = 2817965;
+ name = "f--t";
+ };
+ fleaz = {
+ email = "mail@felixbreidenstein.de";
+ github = "fleaz";
+ githubId = 2489598;
+ name = "Felix Breidenstein";
+ };
+ fadenb = {
+ email = "tristan.helmich+nixos@gmail.com";
+ github = "fadenb";
+ githubId = 878822;
+ name = "Tristan Helmich";
+ };
+ falsifian = {
+ email = "james.cook@utoronto.ca";
+ github = "falsifian";
+ githubId = 225893;
+ name = "James Cook";
+ };
+ fare = {
+ email = "fahree@gmail.com";
+ github = "fare";
+ name = "Francois-Rene Rideau";
+ };
+ farlion = {
+ email = "florian.peter@gmx.at";
+ github = "workflow";
+ githubId = 1276854;
+ name = "Florian Peter";
+ };
+ fdns = {
+ email = "fdns02@gmail.com";
+ github = "fdns";
+ name = "Felipe Espinoza";
+ };
+ ffinkdevs = {
+ email = "fink@h0st.space";
+ github = "ffinkdevs";
+ githubId = 45924649;
+ name = "Fabian Fink";
+ };
+ fgaz = {
+ email = "fgaz@fgaz.me";
+ github = "fgaz";
+ githubId = 8182846;
+ name = "Francesco Gazzetta";
+ };
+ FireyFly = {
+ email = "nix@firefly.nu";
+ github = "FireyFly";
+ githubId = 415760;
+ name = "Jonas Höglund";
+ };
+ flexw = {
+ email = "felix.weilbach@t-online.de";
+ github = "FlexW";
+ githubId = 19961516;
+ name = "Felix Weilbach";
+ };
+ flokli = {
+ email = "flokli@flokli.de";
+ github = "flokli";
+ githubId = 183879;
+ name = "Florian Klink";
+ };
+ FlorianFranzen = {
+ email = "Florian.Franzen@gmail.com";
+ github = "FlorianFranzen";
+ githubId = 781077;
+ name = "Florian Franzen";
+ };
+ florianjacob = {
+ email = "projects+nixos@florianjacob.de";
+ github = "florianjacob";
+ githubId = 1109959;
+ name = "Florian Jacob";
+ };
+ flosse = {
+ email = "mail@markus-kohlhase.de";
+ github = "flosse";
+ githubId = 276043;
+ name = "Markus Kohlhase";
+ };
+ fluffynukeit = {
+ email = "dan@fluffynukeit.com";
+ github = "fluffynukeit";
+ githubId = 844574;
+ name = "Daniel Austin";
+ };
+ fmthoma = {
+ email = "f.m.thoma@googlemail.com";
+ github = "fmthoma";
+ githubId = 5918766;
+ name = "Franz Thoma";
+ };
+ forkk = {
+ email = "forkk@forkk.net";
+ github = "forkk";
+ githubId = 1300078;
+ name = "Andrew Okin";
+ };
+ fornever = {
+ email = "friedrich@fornever.me";
+ github = "fornever";
+ githubId = 92793;
+ name = "Friedrich von Never";
+ };
+ fpletz = {
+ email = "fpletz@fnordicwalking.de";
+ github = "fpletz";
+ githubId = 114159;
+ name = "Franz Pletz";
+ keys = [{
+ longkeyid = "rsa4096/0x846FDED7792617B4";
+ fingerprint = "8A39 615D CE78 AF08 2E23 F303 846F DED7 7926 17B4";
+ }];
+ };
+ fps = {
+ email = "mista.tapas@gmx.net";
+ github = "fps";
+ githubId = 84968;
+ name = "Florian Paul Schmidt";
+ };
+
+ fragamus = {
+ email = "innovative.engineer@gmail.com";
+ github = "fragamus";
+ name = "Michael Gough";
+ };
+
+ fredeb = {
+ email = "im@fredeb.dev";
+ github = "fredeeb";
+ githubId = 7551358;
+ name = "Frede Emil";
+ };
+ freepotion = {
+ email = "free.potion@yandex.ru";
+ github = "freepotion";
+ githubId = 42352817;
+ name = "Free Potion";
+ };
+ freezeboy = {
+ email = "freezeboy@users.noreply.github.com";
+ github = "freezeboy";
+ name = "freezeboy";
+ };
+ Fresheyeball = {
+ email = "fresheyeball@gmail.com";
+ github = "fresheyeball";
+ name = "Isaac Shapira";
+ };
+ fridh = {
+ email = "fridh@fridh.nl";
+ github = "fridh";
+ githubId = 2129135;
+ name = "Frederik Rietdijk";
+ };
+ frlan = {
+ email = "frank@frank.uvena.de";
+ github = "frlan";
+ githubId = 1010248;
+ name = "Frank Lanitz";
+ };
+ fro_ozen = {
+ email = "fro_ozen@gmx.de";
+ github = "froozen";
+ githubId = 1943632;
+ name = "fro_ozen";
+ };
+ frontsideair = {
+ email = "photonia@gmail.com";
+ github = "frontsideair";
+ githubId = 868283;
+ name = "Fatih Altinok";
+ };
+ ftrvxmtrx = {
+ email = "ftrvxmtrx@gmail.com";
+ github = "ftrvxmtrx";
+ githubId = 248148;
+ name = "Siarhei Zirukin";
+ };
+ fuerbringer = {
+ email = "severin@fuerbringer.info";
+ github = "fuerbringer";
+ githubId = 10528737;
+ name = "Severin Fürbringer";
+ };
+ funfunctor = {
+ email = "eocallaghan@alterapraxis.com";
+ name = "Edward O'Callaghan";
+ };
+ fusion809 = {
+ email = "brentonhorne77@gmail.com";
+ github = "fusion809";
+ githubId = 4717341;
+ name = "Brenton Horne";
+ };
+ fuuzetsu = {
+ email = "fuuzetsu@fuuzetsu.co.uk";
+ github = "fuuzetsu";
+ githubId = 893115;
+ name = "Mateusz Kowalczyk";
+ };
+ fuwa = {
+ email = "echowss@gmail.com";
+ github = "fuwa0529";
+ githubId = 40521440;
+ name = "Haruka Akiyama";
+ };
+ fuzzy-id = {
+ email = "hacking+nixos@babibo.de";
+ name = "Thomas Bach";
+ };
+ fxfactorial = {
+ email = "edgar.factorial@gmail.com";
+ github = "fxfactorial";
+ githubId = 3036816;
+ name = "Edgar Aroutiounian";
+ };
+ gabesoft = {
+ email = "gabesoft@gmail.com";
+ github = "gabesoft";
+ githubId = 606000;
+ name = "Gabriel Adomnicai";
+ };
+ gal_bolle = {
+ email = "florent.becker@ens-lyon.org";
+ github = "FlorentBecker";
+ githubId = 7047019;
+ name = "Florent Becker";
+ };
+ garbas = {
+ email = "rok@garbas.si";
+ github = "garbas";
+ name = "Rok Garbas";
+ };
+ garrison = {
+ email = "jim@garrison.cc";
+ github = "garrison";
+ githubId = 91987;
+ name = "Jim Garrison";
+ };
+ gavin = {
+ email = "gavin.rogers@holo.host";
+ github = "gavinrogers";
+ name = "Gavin Rogers";
+ };
+ gebner = {
+ email = "gebner@gebner.org";
+ github = "gebner";
+ githubId = 313929;
+ name = "Gabriel Ebner";
+ };
+ geistesk = {
+ email = "post@0x21.biz";
+ github = "geistesk";
+ githubId = 8402811;
+ name = "Alvar Penning";
+ };
+ genesis = {
+ email = "ronan@aimao.org";
+ github = "bignaux";
+ githubId = 149484;
+ name = "Ronan Bignaux";
+ };
+ georgewhewell = {
+ email = "georgerw@gmail.com";
+ github = "georgewhewell";
+ githubId = 1176131;
+ name = "George Whewell";
+ };
+ gerschtli = {
+ email = "tobias.happ@gmx.de";
+ github = "Gerschtli";
+ githubId = 10353047;
+ name = "Tobias Happ";
+ };
+ ggpeti = {
+ email = "ggpeti@gmail.com";
+ github = "ggpeti";
+ githubId = 3217744;
+ name = "Peter Ferenczy";
+ };
+ gilligan = {
+ email = "tobias.pflug@gmail.com";
+ github = "gilligan";
+ githubId = 27668;
+ name = "Tobias Pflug";
+ };
+ giogadi = {
+ email = "lgtorres42@gmail.com";
+ github = "giogadi";
+ githubId = 1713676;
+ name = "Luis G. Torres";
+ };
+ gleber = {
+ email = "gleber.p@gmail.com";
+ github = "gleber";
+ githubId = 33185;
+ name = "Gleb Peregud";
+ };
+ glenns = {
+ email = "glenn.searby@gmail.com";
+ github = "glenns";
+ githubId = 615606;
+ name = "Glenn Searby";
+ };
+ gloaming = {
+ email = "ch9871@gmail.com";
+ github = "gloaming";
+ githubId = 10156748;
+ name = "Craig Hall";
+ };
+ globin = {
+ email = "mail@glob.in";
+ github = "globin";
+ githubId = 1447245;
+ name = "Robin Gloster";
+ };
+ gnidorah = {
+ email = "gnidorah@yandex.com";
+ github = "gnidorah";
+ githubId = 12064730;
+ name = "Alex Ivanov";
+ };
+ goibhniu = {
+ email = "cillian.deroiste@gmail.com";
+ github = "cillianderoiste";
+ githubId = 643494;
+ name = "Cillian de Róiste";
+ };
+ Gonzih = {
+ email = "gonzih@gmail.com";
+ github = "Gonzih";
+ githubId = 266275;
+ name = "Max Gonzih";
+ };
+ goodrone = {
+ email = "goodrone@gmail.com";
+ github = "goodrone";
+ githubId = 1621335;
+ name = "Andrew Trachenko";
+ };
+ gpyh = {
+ email = "yacine.hmito@gmail.com";
+ github = "yacinehmito";
+ githubId = 6893840;
+ name = "Yacine Hmito";
+ };
+ grahamc = {
+ email = "graham@grahamc.com";
+ github = "grahamc";
+ githubId = 76716;
+ name = "Graham Christensen";
+ };
+ grburst = {
+ email = "grburst@openmailbox.org";
+ github = "grburst";
+ name = "Julius Elias";
+ };
+ greydot = {
+ email = "lanablack@amok.cc";
+ github = "greydot";
+ githubId = 7385287;
+ name = "Lana Black";
+ };
+ gridaphobe = {
+ email = "eric@seidel.io";
+ github = "gridaphobe";
+ name = "Eric Seidel";
+ };
+ guibert = {
+ email = "david.guibert@gmail.com";
+ github = "dguibert";
+ githubId = 1178864;
+ name = "David Guibert";
+ };
+ groodt = {
+ email = "groodt@gmail.com";
+ github = "groodt";
+ githubId = 343415;
+ name = "Greg Roodt";
+ };
+ guibou = {
+ email = "guillaum.bouchard@gmail.com";
+ github = "guibou";
+ githubId = 9705357;
+ name = "Guillaume Bouchard";
+ };
+ guillaumekoenig = {
+ email = "guillaume.edward.koenig@gmail.com";
+ github = "guillaumekoenig";
+ githubId = 10654650;
+ name = "Guillaume Koenig";
+ };
+ guyonvarch = {
+ email = "joris@guyonvarch.me";
+ github = "guyonvarch";
+ githubId = 6768842;
+ name = "Joris Guyonvarch";
+ };
+ hakuch = {
+ email = "hakuch@gmail.com";
+ github = "hakuch";
+ githubId = 1498782;
+ name = "Jesse Haber-Kucharsky";
+ };
+ hamhut1066 = {
+ email = "github@hamhut1066.com";
+ github = "moredhel";
+ githubId = 1742172;
+ name = "Hamish Hutchings";
+ };
+ hansjoergschurr = {
+ email = "commits@schurr.at";
+ github = "hansjoergschurr";
+ githubId = 9850776;
+ name = "Hans-Jörg Schurr";
+ };
+ HaoZeke = {
+ email = "r95g10@gmail.com";
+ github = "haozeke";
+ githubId = 4336207;
+ name = "Rohit Goswami";
+ };
+ haslersn = {
+ email = "haslersn@fius.informatik.uni-stuttgart.de";
+ github = "haslersn";
+ githubId = 33969028;
+ name = "Sebastian Hasler";
+ };
+ havvy = {
+ email = "ryan.havvy@gmail.com";
+ github = "havvy";
+ githubId = 731722;
+ name = "Ryan Scheel";
+ };
+ hax404 = {
+ email = "hax404foogit@hax404.de";
+ github = "hax404";
+ githubId = 1379411;
+ name = "Georg Haas";
+ };
+ hbunke = {
+ email = "bunke.hendrik@gmail.com";
+ github = "hbunke";
+ githubId = 1768793;
+ name = "Hendrik Bunke";
+ };
+ hce = {
+ email = "hc@hcesperer.org";
+ github = "hce";
+ githubId = 147689;
+ name = "Hans-Christian Esperer";
+ };
+ hectorj = {
+ email = "hector.jusforgues+nixos@gmail.com";
+ github = "hectorj";
+ githubId = 2427959;
+ name = "Hector Jusforgues";
+ };
+ hedning = {
+ email = "torhedinbronner@gmail.com";
+ github = "hedning";
+ githubId = 71978;
+ name = "Tor Hedin Brønner";
+ };
+ heel = {
+ email = "parizhskiy@gmail.com";
+ github = "heel";
+ githubId = 287769;
+ name = "Sergii Paryzhskyi";
+ };
+ helkafen = {
+ email = "arnaudpourseb@gmail.com";
+ github = "Helkafen";
+ githubId = 2405974;
+ name = "Sébastian Méric de Bellefon";
+ };
+ henrytill = {
+ email = "henrytill@gmail.com";
+ github = "henrytill";
+ githubId = 6430643;
+ name = "Henry Till";
+ };
+ herberteuler = {
+ email = "herberteuler@gmail.com";
+ github = "herberteuler";
+ githubId = 1401179;
+ name = "Guanpeng Xu";
+ };
+ hhm = {
+ email = "heehooman+nixpkgs@gmail.com";
+ github = "hhm0";
+ githubId = 3656888;
+ name = "hhm";
+ };
+ hinton = {
+ email = "t@larkery.com";
+ name = "Tom Hinton";
+ };
+ hkjn = {
+ email = "me@hkjn.me";
+ name = "Henrik Jonsson";
+ github = "hkjn";
+ keys = [{
+ longkeyid = "rsa4096/0x03EFBF839A5FDC15";
+ fingerprint = "D618 7A03 A40A 3D56 62F5 4B46 03EF BF83 9A5F DC15";
+ }];
+ };
+ hlolli = {
+ email = "hlolli@gmail.com";
+ github = "hlolli";
+ githubId = 6074754;
+ name = "Hlodver Sigurdsson";
+ };
+ hugoreeves = {
+ email = "hugolreeves@gmail.com";
+ github = "hugoreeves";
+ githubId = 20039091;
+ name = "Hugo Reeves";
+ };
+ hodapp = {
+ email = "hodapp87@gmail.com";
+ github = "Hodapp87";
+ githubId = 896431;
+ name = "Chris Hodapp";
+ };
+ hrdinka = {
+ email = "c.nix@hrdinka.at";
+ github = "hrdinka";
+ githubId = 1436960;
+ name = "Christoph Hrdinka";
+ };
+ hschaeidt = {
+ email = "he.schaeidt@gmail.com";
+ github = "hschaeidt";
+ githubId = 1614615;
+ name = "Hendrik Schaeidt";
+ };
+ htr = {
+ email = "hugo@linux.com";
+ github = "htr";
+ githubId = 39689;
+ name = "Hugo Tavares Reis";
+ };
+ hyphon81 = {
+ email = "zero812n@gmail.com";
+ github = "hyphon81";
+ githubId = 12491746;
+ name = "Masato Yonekawa";
+ };
+ iand675 = {
+ email = "ian@iankduncan.com";
+ github = "iand675";
+ githubId = 69209;
+ name = "Ian Duncan";
+ };
+ ianwookim = {
+ email = "ianwookim@gmail.com";
+ github = "wavewave";
+ githubId = 1031119;
+ name = "Ian-Woo Kim";
+ };
+ iblech = {
+ email = "iblech@speicherleck.de";
+ github = "iblech";
+ githubId = 3661115;
+ name = "Ingo Blechschmidt";
+ };
+ idontgetoutmuch = {
+ email = "dominic@steinitz.org";
+ github = "idontgetoutmuch";
+ githubId = 1550265;
+ name = "Dominic Steinitz";
+ };
+ igsha = {
+ email = "igor.sharonov@gmail.com";
+ github = "igsha";
+ githubId = 5345170;
+ name = "Igor Sharonov";
+ };
+ iimog = {
+ email = "iimog@iimog.org";
+ github = "iimog";
+ githubId = 7403236;
+ name = "Markus J. Ankenbrand";
+ };
+ ikervagyok = {
+ email = "ikervagyok@gmail.com";
+ github = "ikervagyok";
+ githubId = 7481521;
+ name = "Balázs Lengyel";
+ };
+ ilikeavocadoes = {
+ email = "ilikeavocadoes@hush.com";
+ github = "ilikeavocadoes";
+ githubId = 36193715;
+ name = "Lassi Haasio";
+ };
+ illegalprime = {
+ email = "themichaeleden@gmail.com";
+ github = "illegalprime";
+ githubId = 4401220;
+ name = "Michael Eden";
+ };
+ ilya-kolpakov = {
+ email = "ilya.kolpakov@gmail.com";
+ github = "ilya-kolpakov";
+ githubId = 592849;
+ name = "Ilya Kolpakov";
+ };
+ imalison = {
+ email = "IvanMalison@gmail.com";
+ github = "IvanMalison";
+ githubId = 1246619;
+ name = "Ivan Malison";
+ };
+ imalsogreg = {
+ email = "imalsogreg@gmail.com";
+ github = "imalsogreg";
+ githubId = 993484;
+ name = "Greg Hale";
+ };
+ imuli = {
+ email = "i@imu.li";
+ github = "imuli";
+ githubId = 4085046;
+ name = "Imuli";
+ };
+ infinisil = {
+ email = "contact@infinisil.com";
+ github = "infinisil";
+ name = "Silvan Mosberger";
+ };
+ ingenieroariel = {
+ email = "ariel@nunez.co";
+ github = "ingenieroariel";
+ githubId = 54999;
+ name = "Ariel Nunez";
+ };
+ ironpinguin = {
+ email = "michele@catalano.de";
+ github = "ironpinguin";
+ githubId = 137306;
+ name = "Michele Catalano";
+ };
+ ivan = {
+ email = "ivan@ludios.org";
+ github = "ivan";
+ githubId = 4458;
+ name = "Ivan Kozik";
+ };
+ ivan-tkatchev = {
+ email = "tkatchev@gmail.com";
+ name = "Ivan Tkatchev";
+ };
+ ivanbrennan = {
+ email = "ivan.brennan@gmail.com";
+ github = "ivanbrennan";
+ githubId = 1672874;
+ name = "Ivan Brennan";
+ keys = [{
+ longkeyid = "rsa4096/0x79C3C47DC652EA54";
+ fingerprint = "7311 2700 AB4F 4CDF C68C F6A5 79C3 C47D C652 EA54";
+ }];
+ };
+ ivegotasthma = {
+ email = "ivegotasthma@protonmail.com";
+ github = "ivegotasthma";
+ githubId = 2437675;
+ name = "John Doe";
+ keys = [{
+ longkeyid = "rsa4096/09AC52AEA87817A4";
+ fingerprint = "4008 2A5B 56A4 79B9 83CB 95FD 09AC 52AE A878 17A4";
+ }];
+ };
+ ixmatus = {
+ email = "parnell@digitalmentat.com";
+ github = "ixmatus";
+ githubId = 30714;
+ name = "Parnell Springmeyer";
+ };
+ ixxie = {
+ email = "matan@fluxcraft.net";
+ github = "ixxie";
+ githubId = 20320695;
+ name = "Matan Bendix Shenhav";
+ };
+ izorkin = {
+ email = "Izorkin@gmail.com";
+ github = "izorkin";
+ githubId = 26877687;
+ name = "Yurii Izorkin";
+ };
+ jasoncarr = {
+ email = "jcarr250@gmail.com";
+ github = "jasoncarr0";
+ name = "Jason Carr";
+ };
+ j-keck = {
+ email = "jhyphenkeck@gmail.com";
+ github = "j-keck";
+ githubId = 3081095;
+ name = "Jürgen Keck";
+ };
+ j03 = {
+ email = "github@johannesloetzsch.de";
+ github = "johannesloetzsch";
+ name = "Johannes Lötzsch";
+ };
+ jagajaga = {
+ email = "ars.seroka@gmail.com";
+ github = "jagajaga";
+ githubId = 2179419;
+ name = "Arseniy Seroka";
+ };
+ jakelogemann = {
+ email = "jake.logemann@gmail.com";
+ github = "jakelogemann";
+ githubId = 820715;
+ name = "Jake Logemann";
+ };
+ jakewaksbaum = {
+ email = "jake.waksbaum@gmail.com";
+ github = "jbaum98";
+ githubId = 5283991;
+ name = "Jake Waksbaum";
+ };
+ jammerful = {
+ email = "jammerful@gmail.com";
+ github = "jammerful";
+ githubId = 20176306;
+ name = "jammerful";
+ };
+ jansol = {
+ email = "jan.solanti@paivola.fi";
+ github = "jansol";
+ githubId = 2588851;
+ name = "Jan Solanti";
+ };
+ javaguirre = {
+ email = "contacto@javaguirre.net";
+ github = "javaguirre";
+ githubId = 488556;
+ name = "Javier Aguirre";
+ };
+ jb55 = {
+ email = "jb55@jb55.com";
+ github = "jb55";
+ githubId = 45598;
+ name = "William Casarin";
+ };
+ jbedo = {
+ email = "cu@cua0.org";
+ github = "jbedo";
+ githubId = 372912;
+ name = "Justin Bedő";
+ };
+ jbgi = {
+ email = "jb@giraudeau.info";
+ github = "jbgi";
+ githubId = 221929;
+ name = "Jean-Baptiste Giraudeau";
+ };
+ jchw = {
+ email = "johnwchadwick@gmail.com";
+ github = "jchv";
+ githubId = 938744;
+ name = "John Chadwick";
+ };
+ jcumming = {
+ email = "jack@mudshark.org";
+ name = "Jack Cummings";
+ };
+ jD91mZM2 = {
+ email = "me@krake.one";
+ github = "jD91mZM2";
+ githubId = 12830969;
+ name = "jD91mZM2";
+ };
+ jdagilliland = {
+ email = "jdagilliland@gmail.com";
+ github = "jdagilliland";
+ githubId = 1383440;
+ name = "Jason Gilliland";
+ };
+ jdanek = {
+ email = "jdanek@redhat.com";
+ github = "jdanekrh";
+ keys = [{
+ longkeyid = "ed25519/0x69275CADF15D872E";
+ fingerprint = "D4A6 F051 AD58 2E7C BCED 5439 6927 5CAD F15D 872E";
+ }];
+ name = "Jiri Daněk";
+ };
+ jdehaas = {
+ email = "qqlq@nullptr.club";
+ github = "jeroendehaas";
+ githubId = 117874;
+ name = "Jeroen de Haas";
+ };
+ jefdaj = {
+ email = "jefdaj@gmail.com";
+ github = "jefdaj";
+ githubId = 1198065;
+ name = "Jeffrey David Johnson";
+ };
+ jensbin = {
+ email = "jensbin+git@pm.me";
+ github = "jensbin";
+ githubId = 1608697;
+ name = "Jens Binkert";
+ };
+ jerith666 = {
+ email = "github@matt.mchenryfamily.org";
+ github = "jerith666";
+ githubId = 854319;
+ name = "Matt McHenry";
+ };
+ jeschli = {
+ email = "jeschli@gmail.com";
+ github = "jeschli";
+ name = "Markus Hihn";
+ };
+ jethro = {
+ email = "jethrokuan95@gmail.com";
+ github = "jethrokuan";
+ githubId = 1667473;
+ name = "Jethro Kuan";
+ };
+ jfb = {
+ email = "james@yamtime.com";
+ github = "tftio";
+ name = "James Felix Black";
+ };
+ jflanglois = {
+ email = "yourstruly@julienlanglois.me";
+ github = "jflanglois";
+ githubId = 18501;
+ name = "Julien Langlois";
+ };
+ jfrankenau = {
+ email = "johannes@frankenau.net";
+ github = "jfrankenau";
+ githubId = 2736480;
+ name = "Johannes Frankenau";
+ };
+ jgeerds = {
+ email = "jascha@geerds.org";
+ github = "jgeerds";
+ githubId = 1473909;
+ name = "Jascha Geerds";
+ };
+ jgertm = {
+ email = "jger.tm@gmail.com";
+ github = "jgertm";
+ githubId = 6616642;
+ name = "Tim Jaeger";
+ };
+ jgillich = {
+ email = "jakob@gillich.me";
+ github = "jgillich";
+ githubId = 347965;
+ name = "Jakob Gillich";
+ };
+ jglukasik = {
+ email = "joseph@jgl.me";
+ github = "jglukasik";
+ githubId = 6445082;
+ name = "Joseph Lukasik";
+ };
+ jhhuh = {
+ email = "jhhuh.note@gmail.com";
+ github = "jhhuh";
+ githubId = 5843245;
+ name = "Ji-Haeng Huh";
+ };
+ jhillyerd = {
+ email = "james+nixos@hillyerd.com";
+ github = "jhillyerd";
+ githubId = 2502736;
+ name = "James Hillyerd";
+ };
+ jirkamarsik = {
+ email = "jiri.marsik89@gmail.com";
+ github = "jirkamarsik";
+ githubId = 184898;
+ name = "Jirka Marsik";
+ };
+ jlesquembre = {
+ email = "jl@lafuente.me";
+ github = "jlesquembre";
+ githubId = 1058504;
+ name = "José Luis Lafuente";
+ };
+ jluttine = {
+ email = "jaakko.luttinen@iki.fi";
+ github = "jluttine";
+ githubId = 2195834;
+ name = "Jaakko Luttinen";
+ };
+ jmagnusj = {
+ email = "jmagnusj@gmail.com";
+ github = "magnusjonsson";
+ githubId = 8900;
+ name = "Johan Magnus Jonsson";
+ };
+ jmettes = {
+ email = "jonathan@jmettes.com";
+ github = "jmettes";
+ githubId = 587870;
+ name = "Jonathan Mettes";
+ };
+ joachifm = {
+ email = "joachifm@fastmail.fm";
+ github = "joachifm";
+ githubId = 41977;
+ name = "Joachim Fasting";
+ };
+ joamaki = {
+ email = "joamaki@gmail.com";
+ github = "joamaki";
+ name = "Jussi Maki";
+ };
+ joelburget = {
+ email = "joelburget@gmail.com";
+ github = "joelburget";
+ githubId = 310981;
+ name = "Joel Burget";
+ };
+ joelmo = {
+ email = "joel.moberg@gmail.com";
+ github = "joelmo";
+ githubId = 336631;
+ name = "Joel Moberg";
+ };
+ joelteon = {
+ email = "me@joelt.io";
+ name = "Joel Taylor";
+ };
+ joepie91 = {
+ email = "admin@cryto.net";
+ name = "Sven Slootweg";
+ github = "joepie91";
+ };
+ joesalisbury = {
+ email = "salisbury.joseph@gmail.com";
+ github = "JosephSalisbury";
+ name = "Joe Salisbury";
+ };
+ johanot = {
+ email = "write@ownrisk.dk";
+ github = "johanot";
+ githubId = 998763;
+ name = "Johan Thomsen";
+ };
+ johbo = {
+ email = "johannes@bornhold.name";
+ github = "johbo";
+ githubId = 117805;
+ name = "Johannes Bornhold";
+ };
+ johnazoidberg = {
+ email = "git@danielschaefer.me";
+ github = "johnazoidberg";
+ githubId = 5307138;
+ name = "Daniel Schäfer";
+ };
+ johnchildren = {
+ email = "john.a.children@gmail.com";
+ github = "johnchildren";
+ githubId = 32305209;
+ name = "John Children";
+ };
+ johnmh = {
+ email = "johnmh@openblox.org";
+ github = "johnmh";
+ githubId = 2576152;
+ name = "John M. Harris, Jr.";
+ };
+ johnramsden = {
+ email = "johnramsden@riseup.net";
+ github = "johnramsden";
+ githubId = 8735102;
+ name = "John Ramsden";
+ };
+ jojosch = {
+ name = "Johannes Schleifenbaum";
+ email = "johannes@js-webcoding.de";
+ github = "jojosch";
+ githubId = 327488;
+ keys = [{
+ longkeyid = "ed25519/059093B1A278BCD0";
+ fingerprint = "7249 70E6 A661 D84E 8B47 678A 0590 93B1 A278 BCD0";
+ }];
+ };
+ joko = {
+ email = "ioannis.koutras@gmail.com";
+ github = "jokogr";
+ githubId = 1252547;
+ keys = [{
+ # compare with https://keybase.io/joko
+ longkeyid = "rsa2048/0x85EAE7D9DF56C5CA";
+ fingerprint = "B154 A8F9 0610 DB45 0CA8 CF39 85EA E7D9 DF56 C5CA";
+ }];
+ name = "Ioannis Koutras";
+ };
+ jonafato = {
+ email = "jon@jonafato.com";
+ github = "jonafato";
+ githubId = 392720;
+ name = "Jon Banafato";
+ };
+ jonathanreeve = {
+ email = "jon.reeve@gmail.com";
+ github = "JonathanReeve";
+ githubId = 1843676;
+ name = "Jonathan Reeve";
+ };
+ joncojonathan = {
+ email = "joncojonathan@gmail.com";
+ github = "joncojonathan";
+ githubId = 11414454;
+ name = "Jonathan Haddock";
+ };
+ jonringer = {
+ email = "jonringer117@gmail.com";
+ github = "jonringer";
+ githubId = 7673602;
+ name = "Jonathan Ringer";
+ };
+ jorise = {
+ email = "info@jorisengbers.nl";
+ github = "JorisE";
+ githubId = 1767283;
+ name = "Joris Engbers";
+ };
+ jorsn = {
+ name = "Johannes Rosenberger";
+ email = "johannes@jorsn.eu";
+ github = "jorsn";
+ githubId = 4646725;
+ };
+ jpdoyle = {
+ email = "joethedoyle@gmail.com";
+ github = "jpdoyle";
+ githubId = 1918771;
+ name = "Joe Doyle";
+ };
+ jpierre03 = {
+ email = "nix@prunetwork.fr";
+ github = "jpierre03";
+ githubId = 954536;
+ name = "Jean-Pierre PRUNARET";
+ };
+ jpotier = {
+ email = "jpo.contributes.to.nixos@marvid.fr";
+ github = "jpotier";
+ githubId = 752510;
+ name = "Martin Potier";
+ };
+ jqueiroz = {
+ email = "nixos@johnjq.com";
+ github = "jqueiroz";
+ githubId = 4968215;
+ name = "Jonathan Queiroz";
+ };
+ jraygauthier = {
+ email = "jraygauthier@gmail.com";
+ github = "jraygauthier";
+ githubId = 4611077;
+ name = "Raymond Gauthier";
+ };
+ jtobin = {
+ email = "jared@jtobin.io";
+ github = "jtobin";
+ githubId = 1414434;
+ name = "Jared Tobin";
+ };
+ jtojnar = {
+ email = "jtojnar@gmail.com";
+ github = "jtojnar";
+ githubId = 705123;
+ name = "Jan Tojnar";
+ };
+ juaningan = {
+ email = "juaningan@gmail.com";
+ github = "juaningan";
+ githubId = 810075;
+ name = "Juan Rodal";
+ };
+ juliendehos = {
+ email = "dehos@lisic.univ-littoral.fr";
+ github = "juliendehos";
+ name = "Julien Dehos";
+ };
+ justinwoo = {
+ email = "moomoowoo@gmail.com";
+ github = "justinwoo";
+ githubId = 2396926;
+ name = "Justin Woo";
+ };
+ jwiegley = {
+ email = "johnw@newartisans.com";
+ github = "jwiegley";
+ githubId = 8460;
+ name = "John Wiegley";
+ };
+ jwilberding = {
+ email = "jwilberding@afiniate.com";
+ name = "Jordan Wilberding";
+ };
+ jyp = {
+ email = "jeanphilippe.bernardy@gmail.com";
+ github = "jyp";
+ name = "Jean-Philippe Bernardy";
+ };
+ jzellner = {
+ email = "jeffz@eml.cc";
+ github = "sofuture";
+ githubId = 66669;
+ name = "Jeff Zellner";
+ };
+ kaiha = {
+ email = "kai.harries@gmail.com";
+ github = "kaiha";
+ githubId = 6544084;
+ name = "Kai Harries";
+ };
+ kalbasit = {
+ email = "wael.nasreddine@gmail.com";
+ github = "kalbasit";
+ githubId = 87115;
+ name = "Wael Nasreddine";
+ };
+ kamilchm = {
+ email = "kamil.chm@gmail.com";
+ github = "kamilchm";
+ githubId = 1621930;
+ name = "Kamil Chmielewski";
+ };
+ kampfschlaefer = {
+ email = "arnold@arnoldarts.de";
+ github = "kampfschlaefer";
+ name = "Arnold Krille";
+ };
+ karolchmist = {
+ email = "info+nix@chmist.com";
+ name = "karolchmist";
+ };
+ kazcw = {
+ email = "kaz@lambdaverse.org";
+ github = "kazcw";
+ githubId = 1047859;
+ name = "Kaz Wesley";
+ };
+ kcalvinalvin = {
+ email = "calvin@kcalvinalvin.info";
+ github = "kcalvinalvin";
+ githubId = 37185887;
+ name = "Calvin Kim";
+ };
+ kentjames = {
+ email = "jameschristopherkent@gmail.com";
+ github = "kentjames";
+ githubId = 2029444;
+ name = "James Kent";
+ };
+ kevincox = {
+ email = "kevincox@kevincox.ca";
+ github = "kevincox";
+ githubId = 494012;
+ name = "Kevin Cox";
+ };
+ khumba = {
+ email = "bog@khumba.net";
+ github = "khumba";
+ githubId = 788813;
+ name = "Bryan Gardiner";
+ };
+ KibaFox = {
+ email = "kiba.fox@foxypossibilities.com";
+ github = "KibaFox";
+ githubId = 16481032;
+ name = "Kiba Fox";
+ };
+ kierdavis = {
+ email = "kierdavis@gmail.com";
+ github = "kierdavis";
+ githubId = 845652;
+ name = "Kier Davis";
+ };
+ killercup = {
+ email = "killercup@gmail.com";
+ github = "killercup";
+ githubId = 20063;
+ name = "Pascal Hertleif";
+ };
+ kiloreux = {
+ email = "kiloreux@gmail.com";
+ github = "kiloreux";
+ githubId = 6282557;
+ name = "Kiloreux Emperex";
+ };
+ kim0 = {
+ email = "email.ahmedkamal@googlemail.com";
+ github = "kim0";
+ name = "Ahmed Kamal";
+ };
+ kimburgess = {
+ email = "kim@acaprojects.com";
+ github = "kimburgess";
+ githubId = 843652;
+ name = "Kim Burgess";
+ };
+ kini = {
+ email = "keshav.kini@gmail.com";
+ github = "kini";
+ githubId = 691290;
+ name = "Keshav Kini";
+ };
+ kirelagin = {
+ email = "kirelagin@gmail.com";
+ github = "kirelagin";
+ githubId = 451835;
+ name = "Kirill Elagin";
+ };
+ kirikaza = {
+ email = "k@kirikaza.ru";
+ github = "kirikaza";
+ name = "Kirill Kazakov";
+ };
+ kisonecat = {
+ email = "kisonecat@gmail.com";
+ github = "kisonecat";
+ githubId = 148352;
+ name = "Jim Fowler";
+ };
+ kiwi = {
+ email = "envy1988@gmail.com";
+ github = "Kiwi";
+ githubId = 35715;
+ name = "Robert Djubek";
+ keys = [{
+ longkeyid = "rsa4096/0x156C88A5B0A04B2A";
+ fingerprint = "8992 44FC D291 5CA2 0A97 802C 156C 88A5 B0A0 4B2A";
+ }];
+ };
+ kjuvi = {
+ email = "quentin.vaucher@pm.me";
+ github = "kjuvi";
+ githubId = 17534323;
+ name = "Quentin Vaucher";
+ };
+ kkallio = {
+ email = "tierpluspluslists@gmail.com";
+ name = "Karn Kallio";
+ };
+ klntsky = {
+ email = "klntsky@gmail.com";
+ name = "Vladimir Kalnitsky";
+ github = "klntsky";
+ githubId = 18447310;
+ };
+ kmeakin = {
+ email = "karlwfmeakin@gmail.com";
+ name = "Karl Meakin";
+ github = "Kmeakin";
+ githubId = 19665139;
+ };
+
+ kmein = {
+ email = "kieran.meinhardt@gmail.com";
+ name = "Kierán Meinhardt";
+ github = "kmein";
+ githubId = 10352507;
+ };
+
+ knedlsepp = {
+ email = "josef.kemetmueller@gmail.com";
+ github = "knedlsepp";
+ githubId = 3287933;
+ name = "Josef Kemetmüller";
+ };
+ knl = {
+ email = "nikola@knezevic.co";
+ github = "knl";
+ githubId = 361496;
+ name = "Nikola Knežević";
+ };
+ kolaente = {
+ email = "k@knt.li";
+ github = "kolaente";
+ githubId = 13721712;
+ name = "Konrad Langenberg";
+ };
+ konimex = {
+ email = "herdiansyah@netc.eu";
+ github = "konimex";
+ githubId = 15692230;
+ name = "Muhammad Herdiansyah";
+ };
+ koral = {
+ email = "koral@mailoo.org";
+ github = "k0ral";
+ name = "Koral";
+ };
+ kovirobi = {
+ email = "kovirobi@gmail.com";
+ github = "kovirobi";
+ githubId = 1903418;
+ name = "Kovacsics Robert";
+ };
+ kquick = {
+ email = "quick@sparq.org";
+ github = "kquick";
+ githubId = 787421;
+ name = "Kevin Quick";
+ };
+ kragniz = {
+ email = "louis@kragniz.eu";
+ github = "kragniz";
+ githubId = 735008;
+ name = "Louis Taylor";
+ };
+ krav = {
+ email = "kristoffer@microdisko.no";
+ github = "krav";
+ githubId = 4032;
+ name = "Kristoffer Thømt Ravneberg";
+ };
+ kroell = {
+ email = "nixosmainter@makroell.de";
+ github = "rokk4";
+ githubId = 17659803;
+ name = "Matthias Axel Kröll";
+ };
+ kristoff3r = {
+ email = "k.soeholm@gmail.com";
+ github = "kristoff3r";
+ githubId = 160317;
+ name = "Kristoffer Søholm";
+ };
+ ktf = {
+ email = "giulio.eulisse@cern.ch";
+ github = "ktf";
+ githubId = 10544;
+ name = "Giuluo Eulisse";
+ };
+ ktor = {
+ email = "kruszewsky@gmail.com";
+ github = "ktor";
+ name = "Pawel Kruszewski";
+ };
+ ktosiek = {
+ email = "tomasz.kontusz@gmail.com";
+ github = "ktosiek";
+ githubId = 278013;
+ name = "Tomasz Kontusz";
+ };
+ kuznero = {
+ email = "roman@kuznero.com";
+ github = "kuznero";
+ githubId = 449813;
+ name = "Roman Kuznetsov";
+ };
+ kylewlacy = {
+ email = "kylelacy+nix@pm.me";
+ github = "kylewlacy";
+ githubId = 1362179;
+ name = "Kyle Lacy";
+ };
+ lasandell = {
+ email = "lasandell@gmail.com";
+ github = "lasandell";
+ githubId = 2034420;
+ name = "Luke Sandell";
+ };
+ lambda-11235 = {
+ email = "taranlynn0@gmail.com";
+ github = "lambda-11235";
+ githubId = 16354815;
+ name = "Taran Lynn";
+ };
+ lassulus = {
+ email = "lassulus@gmail.com";
+ github = "Lassulus";
+ name = "Lassulus";
+ };
+ layus = {
+ email = "layus.on@gmail.com";
+ github = "layus";
+ githubId = 632767;
+ name = "Guillaume Maudoux";
+ };
+ lblasc = {
+ email = "lblasc@znode.net";
+ github = "lblasc";
+ githubId = 32152;
+ name = "Luka Blaskovic";
+ };
+ ldesgoui = {
+ email = "ldesgoui@gmail.com";
+ github = "ldesgoui";
+ githubId = 2472678;
+ name = "Lucas Desgouilles";
+ };
+ league = {
+ email = "league@contrapunctus.net";
+ github = "league";
+ githubId = 50286;
+ name = "Christopher League";
+ };
+ leahneukirchen = {
+ email = "leah@vuxu.org";
+ github = "leahneukirchen";
+ githubId = 139;
+ name = "Leah Neukirchen";
+ };
+ lebastr = {
+ email = "lebastr@gmail.com";
+ github = "lebastr";
+ name = "Alexander Lebedev";
+ };
+ ledif = {
+ email = "refuse@gmail.com";
+ github = "ledif";
+ githubId = 307744;
+ name = "Adam Fidel";
+ };
+ leemachin = {
+ email = "me@mrl.ee";
+ github = "leemachin";
+ githubId = 736291;
+ name = "Lee Machin";
+ };
+ leenaars = {
+ email = "ml.software@leenaa.rs";
+ github = "leenaars";
+ githubId = 4158274;
+ name = "Michiel Leenaars";
+ };
+ lejonet = {
+ email = "daniel@kuehn.se";
+ github = "lejonet";
+ githubId = 567634;
+ name = "Daniel Kuehn";
+ };
+ leo60228 = {
+ email = "iakornfeld@gmail.com";
+ github = "leo60228";
+ githubId = 8355305;
+ name = "leo60228";
+ };
+ leonardoce = {
+ email = "leonardo.cecchi@gmail.com";
+ github = "leonardoce";
+ name = "Leonardo Cecchi";
+ };
+ lethalman = {
+ email = "lucabru@src.gnome.org";
+ github = "lethalman";
+ githubId = 480920;
+ name = "Luca Bruno";
+ };
+ lewo = {
+ email = "lewo@abesis.fr";
+ github = "nlewo";
+ githubId = 3425311;
+ name = "Antoine Eiche";
+ };
+ lheckemann = {
+ email = "git@sphalerite.org";
+ github = "lheckemann";
+ githubId = 341954;
+ name = "Linus Heckemann";
+ };
+ lhvwb = {
+ email = "nathaniel.baxter@gmail.com";
+ github = "nathanielbaxter";
+ githubId = 307589;
+ name = "Nathaniel Baxter";
+ };
+ lightbulbjim = {
+ email = "chris@killred.net";
+ github = "lightbulbjim";
+ name = "Chris Rendle-Short";
+ };
+ lightdiscord = {
+ email = "root@arnaud.sh";
+ github = "lightdiscord";
+ githubId = 24509182;
+ name = "Arnaud Pascal";
+ };
+ lihop = {
+ email = "nixos@leroy.geek.nz";
+ github = "lihop";
+ githubId = 3696783;
+ name = "Leroy Hopson";
+ };
+ lilyball = {
+ email = "lily@sb.org";
+ github = "lilyball";
+ githubId = 714;
+ name = "Lily Ballard";
+ };
+ limeytexan = {
+ email = "limeytexan@gmail.com";
+ github = "limeytexan";
+ githubId = 36448130;
+ name = "Michael Brantley";
+ };
+ linarcx = {
+ email = "linarcx@gmail.com";
+ github = "linarcx";
+ githubId = 10884422;
+ name = "Kaveh Ahangar";
+ };
+ linc01n = {
+ email = "git@lincoln.hk";
+ github = "linc01n";
+ githubId = 667272;
+ name = "Lincoln Lee";
+ };
+ linquize = {
+ email = "linquize@yahoo.com.hk";
+ github = "linquize";
+ githubId = 791115;
+ name = "Linquize";
+ };
+ linus = {
+ email = "linusarver@gmail.com";
+ github = "listx";
+ githubId = 725613;
+ name = "Linus Arver";
+ };
+ livnev = {
+ email = "lev@liv.nev.org.uk";
+ github = "livnev";
+ githubId = 3964494;
+ name = "Lev Livnev";
+ keys = [{
+ longkeyid = "rsa2048/0x68FF81E6A7850F49";
+ fingerprint = "74F5 E5CC 19D3 B5CB 608F 6124 68FF 81E6 A785 0F49";
+ }];
+ };
+ luis = {
+ email = "luis.nixos@gmail.com";
+ github = "Luis-Hebendanz";
+ githubId = 22085373;
+ name = "Luis Hebendanz";
+ };
+ lionello = {
+ email = "lio@lunesu.com";
+ github = "lionello";
+ githubId = 591860;
+ name = "Lionello Lunesu";
+ };
+ lluchs = {
+ email = "lukas.werling@gmail.com";
+ github = "lluchs";
+ githubId = 516527;
+ name = "Lukas Werling";
+ };
+ lnl7 = {
+ email = "daiderd@gmail.com";
+ github = "lnl7";
+ githubId = 689294;
+ name = "Daiderd Jordan";
+ };
+ lo1tuma = {
+ email = "schreck.mathias@gmail.com";
+ github = "lo1tuma";
+ githubId = 169170;
+ name = "Mathias Schreck";
+ };
+ loewenheim = {
+ email = "loewenheim@mailbox.org";
+ github = "loewenheim";
+ githubId = 7622248;
+ name = "Sebastian Zivota";
+ };
+ lopsided98 = {
+ email = "benwolsieffer@gmail.com";
+ github = "lopsided98";
+ githubId = 5624721;
+ name = "Ben Wolsieffer";
+ };
+ loskutov = {
+ email = "ignat.loskutov@gmail.com";
+ github = "loskutov";
+ githubId = 1202012;
+ name = "Ignat Loskutov";
+ };
+ lovek323 = {
+ email = "jason@oconal.id.au";
+ github = "lovek323";
+ name = "Jason O'Conal";
+ };
+ lowfatcomputing = {
+ email = "andreas.wagner@lowfatcomputing.org";
+ github = "lowfatcomputing";
+ githubId = 10626;
+ name = "Andreas Wagner";
+ };
+ lschuermann = {
+ email = "leon.git@is.currently.online";
+ github = "lschuermann";
+ githubId = 5341193;
+ name = "Leon Schuermann";
+ };
+ lsix = {
+ email = "lsix@lancelotsix.com";
+ github = "lsix";
+ githubId = 724339;
+ name = "Lancelot SIX";
+ };
+ ltavard = {
+ email = "laure.tavard@univ-grenoble-alpes.fr";
+ github = "ltavard";
+ name = "Laure Tavard";
+ };
+ lucas8 = {
+ email = "luc.linux@mailoo.org";
+ github = "lucas8";
+ githubId = 2025623;
+ name = "Luc Chabassier";
+ };
+ lucus16 = {
+ email = "lars.jellema@gmail.com";
+ github = "Lucus16";
+ githubId = 2487922;
+ name = "Lars Jellema";
+ };
+ ludo = {
+ email = "ludo@gnu.org";
+ github = "civodul";
+ githubId = 1168435;
+ name = "Ludovic Courtès";
+ };
+ lufia = {
+ email = "lufia@lufia.org";
+ github = "lufia";
+ githubId = 1784379;
+ name = "Kyohei Kadota";
+ };
+ luispedro = {
+ email = "luis@luispedro.org";
+ github = "luispedro";
+ githubId = 79334;
+ name = "Luis Pedro Coelho";
+ };
+ lukeadams = {
+ email = "luke.adams@belljar.io";
+ github = "lukeadams";
+ githubId = 3508077;
+ name = "Luke Adams";
+ };
+ lukebfox = {
+ email = "lbentley-fox1@sheffield.ac.uk";
+ github = "lukebfox";
+ githubId = 34683288;
+ name = "Luke Bentley-Fox";
+ };
+ lukego = {
+ email = "luke@snabb.co";
+ github = "lukego";
+ githubId = 13791;
+ name = "Luke Gorrie";
+ };
+ luz = {
+ email = "luz666@daum.net";
+ github = "Luz";
+ githubId = 208297;
+ name = "Luz";
+ };
+ lw = {
+ email = "lw@fmap.me";
+ github = "lolwat97";
+ githubId = 2057309;
+ name = "Sergey Sofeychuk";
+ };
+ lyt = {
+ email = "wheatdoge@gmail.com";
+ name = "Tim Liou";
+ };
+ m3tti = {
+ email = "mathaeus.peter.sander@gmail.com";
+ name = "Mathaeus Sander";
+ };
+ ma27 = {
+ email = "maximilian@mbosch.me";
+ github = "ma27";
+ githubId = 6025220;
+ name = "Maximilian Bosch";
+ };
+ ma9e = {
+ email = "sean@lfo.team";
+ github = "furrycatherder";
+ githubId = 36235154;
+ name = "Sean Haugh";
+ };
+ madjar = {
+ email = "georges.dubus@compiletoi.net";
+ github = "madjar";
+ githubId = 109141;
+ name = "Georges Dubus";
+ };
+ mafo = {
+ email = "Marc.Fontaine@gmx.de";
+ github = "MarcFontaine";
+ githubId = 1433367;
+ name = "Marc Fontaine";
+ };
+ magenbluten = {
+ email = "magenbluten@codemonkey.cc";
+ github = "magenbluten";
+ githubId = 1140462;
+ name = "magenbluten";
+ };
+ magnetophon = {
+ email = "bart@magnetophon.nl";
+ github = "magnetophon";
+ githubId = 7645711;
+ name = "Bart Brouns";
+ };
+ mahe = {
+ email = "matthias.mh.herrmann@gmail.com";
+ github = "2chilled";
+ githubId = 1238350;
+ name = "Matthias Herrmann";
+ };
+ makefu = {
+ email = "makefu@syntax-fehler.de";
+ github = "makefu";
+ githubId = 115218;
+ name = "Felix Richter";
+ };
+ malyn = {
+ email = "malyn@strangeGizmo.com";
+ github = "malyn";
+ githubId = 346094;
+ name = "Michael Alyn Miller";
+ };
+ manveru = {
+ email = "m.fellinger@gmail.com";
+ github = "manveru";
+ githubId = 3507;
+ name = "Michael Fellinger";
+ };
+ marcweber = {
+ email = "marco-oweber@gmx.de";
+ github = "marcweber";
+ githubId = 34086;
+ name = "Marc Weber";
+ };
+ marenz = {
+ email = "marenz@arkom.men";
+ github = "marenz2569";
+ githubId = 12773269;
+ name = "Markus Schmidl";
+ };
+ markus1189 = {
+ email = "markus1189@gmail.com";
+ github = "markus1189";
+ githubId = 591567;
+ name = "Markus Hauck";
+ };
+ markuskowa = {
+ email = "markus.kowalewski@gmail.com";
+ github = "markuskowa";
+ githubId = 26470037;
+ name = "Markus Kowalewski";
+ };
+ markWot = {
+ email = "markus@wotringer.de";
+ name = "Markus Wotringer";
+ };
+ marius851000 = {
+ email = "mariusdavid@laposte.net";
+ name = "Marius David";
+ github = "marius851000";
+ githubId = 22586596;
+ };
+ marsam = {
+ email = "marsam@users.noreply.github.com";
+ github = "marsam";
+ githubId = 65531;
+ name = "Mario Rodas";
+ };
+ martijnvermaat = {
+ email = "martijn@vermaat.name";
+ github = "martijnvermaat";
+ githubId = 623509;
+ name = "Martijn Vermaat";
+ };
+ martingms = {
+ email = "martin@mg.am";
+ github = "martingms";
+ githubId = 458783;
+ name = "Martin Gammelsæter";
+ };
+ marzipankaiser = {
+ email = "nixos@gaisseml.de";
+ github = "marzipankaiser";
+ githubId = 2551444;
+ name = "Marcial Gaißert";
+ keys = [{
+ longkeyid = "rsa2048/0xB629036BE399EEE9";
+ fingerprint = "B573 5118 0375 A872 FBBF 7770 B629 036B E399 EEE9";
+ }];
+ };
+ matejc = {
+ email = "cotman.matej@gmail.com";
+ github = "matejc";
+ githubId = 854770;
+ name = "Matej Cotman";
+ };
+ mathnerd314 = {
+ email = "mathnerd314.gph+hs@gmail.com";
+ github = "mathnerd314";
+ githubId = 322214;
+ name = "Mathnerd314";
+ };
+ matklad = {
+ email = "aleksey.kladov@gmail.com";
+ github = "matklad";
+ githubId = 1711539;
+ name = "matklad";
+ };
+ matthewbauer = {
+ email = "mjbauer95@gmail.com";
+ github = "matthewbauer";
+ name = "Matthew Bauer";
+ };
+ matthiasbeyer = {
+ email = "mail@beyermatthias.de";
+ github = "matthiasbeyer";
+ githubId = 427866;
+ name = "Matthias Beyer";
+ };
+ matti-kariluoma = {
+ email = "matti@kariluo.ma";
+ github = "matti-kariluoma";
+ name = "Matti Kariluoma";
+ };
+ maurer = {
+ email = "matthew.r.maurer+nix@gmail.com";
+ github = "maurer";
+ githubId = 136037;
+ name = "Matthew Maurer";
+ };
+ mbakke = {
+ email = "mbakke@fastmail.com";
+ github = "mbakke";
+ githubId = 1269099;
+ name = "Marius Bakke";
+ };
+ mbbx6spp = {
+ email = "me@susanpotter.net";
+ github = "mbbx6spp";
+ githubId = 564;
+ name = "Susan Potter";
+ };
+ mbe = {
+ email = "brandonedens@gmail.com";
+ github = "brandonedens";
+ githubId = 396449;
+ name = "Brandon Edens";
+ };
+ mbode = {
+ email = "maxbode@gmail.com";
+ github = "mbode";
+ githubId = 9051309;
+ name = "Maximilian Bode";
+ };
+ mboes = {
+ email = "mboes@tweag.net";
+ github = "mboes";
+ githubId = 51356;
+ name = "Mathieu Boespflug";
+ };
+ mbrgm = {
+ email = "marius@yeai.de";
+ github = "mbrgm";
+ githubId = 2971615;
+ name = "Marius Bergmann";
+ };
+ mcmtroffaes = {
+ email = "matthias.troffaes@gmail.com";
+ github = "mcmtroffaes";
+ githubId = 158568;
+ name = "Matthias C. M. Troffaes";
+ };
+ mdaiter = {
+ email = "mdaiter8121@gmail.com";
+ github = "mdaiter";
+ githubId = 1377571;
+ name = "Matthew S. Daiter";
+ };
+ mdevlamynck = {
+ email = "matthias.devlamynck@mailoo.org";
+ github = "mdevlamynck";
+ githubId = 4378377;
+ name = "Matthias Devlamynck";
+ };
+ meditans = {
+ email = "meditans@gmail.com";
+ github = "meditans";
+ githubId = 4641445;
+ name = "Carlo Nucera";
+ };
+ megheaiulian = {
+ email = "iulian.meghea@gmail.com";
+ github = "megheaiulian";
+ githubId = 1788114;
+ name = "Meghea Iulian";
+ };
+ mehandes = {
+ email = "niewskici@gmail.com";
+ github = "mehandes";
+ githubId = 32581276;
+ name = "Matt Deming";
+ };
+ meisternu = {
+ email = "meister@krutt.org";
+ github = "meisternu";
+ githubId = 8263431;
+ name = "Matt Miemiec";
+ };
+ melchips = {
+ email = "truphemus.francois@gmail.com";
+ github = "melchips";
+ githubId = 365721;
+ name = "Francois Truphemus";
+ };
+ melsigl = {
+ email = "melanie.bianca.sigl@gmail.com";
+ github = "melsigl";
+ name = "Melanie B. Sigl";
+ };
+ melkor333 = {
+ email = "samuel@ton-kunst.ch";
+ github = "melkor333";
+ githubId = 6412377;
+ name = "Samuel Ruprecht";
+ };
+ metabar = {
+ email = "softs@metabarcoding.org";
+ name = "Celine Mercier";
+ };
+ metadark = {
+ email = "kira.bruneau@gmail.com";
+ name = "Kira Bruneau";
+ github = "metadark";
+ githubId = 382041;
+ };
+ mfossen = {
+ email = "msfossen@gmail.com";
+ github = "mfossen";
+ githubId = 3300322;
+ name = "Mitchell Fossen";
+ };
+ mgdelacroix = {
+ email = "mgdelacroix@gmail.com";
+ github = "mgdelacroix";
+ githubId = 223323;
+ name = "Miguel de la Cruz";
+ };
+ mgregoire = {
+ email = "gregoire@martinache.net";
+ github = "M-Gregoire";
+ githubId = 9469313;
+ name = "Gregoire Martinache";
+ };
+ mgttlinger = {
+ email = "megoettlinger@gmail.com";
+ github = "mgttlinger";
+ githubId = 5120487;
+ name = "Merlin Göttlinger";
+ };
+ mguentner = {
+ email = "code@klandest.in";
+ github = "mguentner";
+ githubId = 668926;
+ name = "Maximilian Güntner";
+ };
+ mhaselsteiner = {
+ email = "magdalena.haselsteiner@gmx.at";
+ github = "mhaselsteiner";
+ githubId = 20536514;
+ name = "Magdalena Haselsteiner";
+ };
+ mic92 = {
+ email = "joerg@thalheim.io";
+ github = "mic92";
+ githubId = 96200;
+ name = "Jörg Thalheim";
+ keys = [{
+ # compare with https://keybase.io/Mic92
+ longkeyid = "rsa4096/0x003F2096411B5F92";
+ fingerprint = "3DEE 1C55 6E1C 3DC5 54F5 875A 003F 2096 411B 5F92";
+ }];
+ };
+ michaelpj = {
+ email = "michaelpj@gmail.com";
+ github = "michaelpj";
+ name = "Michael Peyton Jones";
+ };
+ michalrus = {
+ email = "m@michalrus.com";
+ github = "michalrus";
+ githubId = 4366292;
+ name = "Michal Rus";
+ };
+ michelk = {
+ email = "michel@kuhlmanns.info";
+ github = "michelk";
+ name = "Michel Kuhlmann";
+ };
+ michojel = {
+ email = "mic.liamg@gmail.com";
+ github = "michojel";
+ githubId = 21156022;
+ name = "Michal Minář";
+ };
+ mickours = {
+ email = "mickours@gmail.com<";
+ github = "mickours";
+ githubId = 837312;
+ name = "Michael Mercier";
+ };
+ midchildan = {
+ email = "midchildan+nix@gmail.com";
+ github = "midchildan";
+ githubId = 7343721;
+ name = "midchildan";
+ };
+ mikefaille = {
+ email = "michael@faille.io";
+ github = "mikefaille";
+ githubId = 978196;
+ name = "Michaël Faille";
+ };
+ mikoim = {
+ email = "ek@esh.ink";
+ github = "mikoim";
+ githubId = 3958340;
+ name = "Eshin Kunishima";
+ };
+ miltador = {
+ email = "miltador@yandex.ua";
+ name = "Vasiliy Solovey";
+ };
+ mimame = {
+ email = "miguel.madrid.mencia@gmail.com";
+ github = "mimame";
+ githubId = 3269878;
+ name = "Miguel Madrid Mencía";
+ };
+ minijackson = {
+ email = "minijackson@riseup.net";
+ github = "minijackson";
+ name = "Rémi Nicole";
+ };
+ mirdhyn = {
+ email = "mirdhyn@gmail.com";
+ github = "mirdhyn";
+ name = "Merlin Gaillard";
+ };
+ mirrexagon = {
+ email = "mirrexagon@mirrexagon.com";
+ github = "mirrexagon";
+ githubId = 1776903;
+ name = "Andrew Abbott";
+ };
+ mjanczyk = {
+ email = "m@dragonvr.pl";
+ github = "mjanczyk";
+ githubId = 1001112;
+ name = "Marcin Janczyk";
+ };
+ mjp = {
+ email = "mike@mythik.co.uk";
+ github = "MikePlayle";
+ githubId = 16974598;
+ name = "Mike Playle";
+ };
+ mkazulak = {
+ email = "kazulakm@gmail.com";
+ github = "mulderr";
+ githubId = 5698461;
+ name = "Maciej Kazulak";
+ };
+ mkg = {
+ email = "mkg@vt.edu";
+ github = "mkgvt";
+ githubId = 22477669;
+ name = "Mark K Gardner";
+ };
+ mlieberman85 = {
+ email = "mlieberman85@gmail.com";
+ github = "mlieberman85";
+ githubId = 622577;
+ name = "Michael Lieberman";
+ };
+ mmahut = {
+ email = "marek.mahut@gmail.com";
+ github = "mmahut";
+ githubId = 104795;
+ name = "Marek Mahut";
+ };
+ mmlb = {
+ email = "me.mmlb@mmlb.me";
+ github = "mmlb";
+ name = "Manuel Mendez";
+ };
+ mnacamura = {
+ email = "m.nacamura@gmail.com";
+ github = "mnacamura";
+ githubId = 45770;
+ name = "Mitsuhiro Nakamura";
+ };
+ moaxcp = {
+ email = "moaxcp@gmail.com";
+ github = "moaxcp";
+ githubId = 7831184;
+ name = "John Mercier";
+ };
+ modulistic = {
+ email = "modulistic@gmail.com";
+ github = "modulistic";
+ githubId = 1902456;
+ name = "Pablo Costa";
+ };
+ mog = {
+ email = "mog-lists@rldn.net";
+ github = "mogorman";
+ githubId = 64710;
+ name = "Matthew O'Gorman";
+ };
+ Mogria = {
+ email = "m0gr14@gmail.com";
+ github = "mogria";
+ name = "Mogria";
+ };
+ monsieurp = {
+ email = "monsieurp@gentoo.org";
+ github = "monsieurp";
+ githubId = 350116;
+ name = "Patrice Clement";
+ };
+ montag451 = {
+ email = "montag451@laposte.net";
+ github = "montag451";
+ githubId = 249317;
+ name = "montag451";
+ };
+ moosingin3space = {
+ email = "moosingin3space@gmail.com";
+ github = "moosingin3space";
+ githubId = 830082;
+ name = "Nathan Moos";
+ };
+ moredread = {
+ email = "code@apb.name";
+ github = "moredread";
+ githubId = 100848;
+ name = "André-Patrick Bubel";
+ };
+ moretea = {
+ email = "maarten@moretea.nl";
+ github = "moretea";
+ githubId = 99988;
+ name = "Maarten Hoogendoorn";
+ };
+ MostAwesomeDude = {
+ email = "cds@corbinsimpson.com";
+ github = "MostAwesomeDude";
+ githubId = 118035;
+ name = "Corbin Simpson";
+ };
+ mounium = {
+ email = "muoniurn@gmail.com";
+ github = "mounium";
+ githubId = 20026143;
+ name = "Katona László";
+ };
+ MP2E = {
+ email = "MP2E@archlinux.us";
+ github = "MP2E";
+ name = "Cray Elliott";
+ };
+ mpcsh = {
+ email = "m@mpc.sh";
+ github = "mpcsh";
+ githubId = 2894019;
+ name = "Mark Cohen";
+ };
+ mpickering = {
+ email = "matthewtpickering@gmail.com";
+ github = "mpickering";
+ githubId = 1216657;
+ name = "Matthew Pickering";
+ };
+ mpoquet = {
+ email = "millian.poquet@gmail.com";
+ github = "mpoquet";
+ githubId = 3502831;
+ name = "Millian Poquet";
+ };
+ mpscholten = {
+ email = "marc@mpscholten.de";
+ github = "mpscholten";
+ name = "Marc Scholten";
+ };
+ mpsyco = {
+ email = "fr.st-amour@gmail.com";
+ github = "fstamour";
+ githubId = 2881922;
+ name = "Francis St-Amour";
+ };
+ mredaelli = {
+ email = "massimo@typish.io";
+ github = "mredaelli";
+ name = "Massimo Redaelli";
+ };
+ mrkkrp = {
+ email = "markkarpov92@gmail.com";
+ github = "mrkkrp";
+ githubId = 8165792;
+ name = "Mark Karpov";
+ };
+ mrmebelman = {
+ email = "burzakovskij@protonmail.com";
+ github = "MrMebelMan";
+ githubId = 15896005;
+ name = "Vladyslav Burzakovskyy";
+ };
+ mrVanDalo = {
+ email = "contact@ingolf-wagner.de";
+ github = "mrVanDalo";
+ githubId = 839693;
+ name = "Ingolf Wanger";
+ };
+ msackman = {
+ email = "matthew@wellquite.org";
+ name = "Matthew Sackman";
+ };
+ mschneider = {
+ email = "markus.schneider.sic+nix@gmail.com";
+ name = "Markus Schneider";
+ };
+ mschristiansen = {
+ email = "mikkel@rheosystems.com";
+ github = "mschristiansen";
+ githubId = 437005;
+ name = "Mikkel Christiansen";
+ };
+ msiedlarek = {
+ email = "mikolaj@siedlarek.pl";
+ github = "msiedlarek";
+ githubId = 133448;
+ name = "Mikołaj Siedlarek";
+ };
+ mstarzyk = {
+ email = "mstarzyk@gmail.com";
+ github = "mstarzyk";
+ githubId = 111304;
+ name = "Maciek Starzyk";
+ };
+ msteen = {
+ email = "emailmatthijs@gmail.com";
+ github = "msteen";
+ githubId = 788953;
+ name = "Matthijs Steen";
+ };
+ mt-caret = {
+ email = "mtakeda.enigsol@gmail.com";
+ github = "mt-caret";
+ githubId = 4996739;
+ name = "Masayuki Takeda";
+ };
+ MtP = {
+ email = "marko.nixos@poikonen.de";
+ github = "MtP76";
+ name = "Marko Poikonen";
+ };
+ mtreskin = {
+ email = "zerthurd@gmail.com";
+ github = "Zert";
+ githubId = 39034;
+ name = "Max Treskin";
+ };
+ mudri = {
+ email = "lamudri@gmail.com";
+ github = "laMudri";
+ githubId = 5139265;
+ name = "James Wood";
+ };
+ muflax = {
+ email = "mail@muflax.com";
+ github = "muflax";
+ githubId = 69918;
+ name = "Stefan Dorn";
+ };
+ mvnetbiz = {
+ email = "mvnetbiz@gmail.com";
+ github = "mvnetbiz";
+ githubId = 6455574;
+ name = "Matt Votava";
+ };
+ mwilsoninsight = {
+ email = "max.wilson@insight.com";
+ github = "mwilsoninsight";
+ githubId = 47782621;
+ name = "Max Wilson";
+ };
+ myrl = {
+ email = "myrl.0xf@gmail.com";
+ github = "myrl";
+ githubId = 9636071;
+ name = "Myrl Hex";
+ };
+ nadrieril = {
+ email = "nadrieril@gmail.com";
+ github = "nadrieril";
+ githubId = 6783654;
+ name = "Nadrieril Feneanar";
+ };
+ nalbyuites = {
+ email = "ashijit007@gmail.com";
+ github = "nalbyuites";
+ githubId = 1009523;
+ name = "Ashijit Pramanik";
+ };
+ namore = {
+ email = "namor@hemio.de";
+ github = "namore";
+ githubId = 1222539;
+ name = "Roman Naumann";
+ };
+ nand0p = {
+ email = "nando@hex7.com";
+ github = "nand0p";
+ name = "Fernando Jose Pando";
+ };
+ Nate-Devv = {
+ email = "natedevv@gmail.com";
+ name = "Nathan Moore";
+ };
+ nathan-gs = {
+ email = "nathan@nathan.gs";
+ github = "nathan-gs";
+ githubId = 330943;
+ name = "Nathan Bijnens";
+ };
+ nathyong = {
+ email = "nathyong@noreply.github.com";
+ github = "nathyong";
+ githubId = 818502;
+ name = "Nathan Yong";
+ };
+ nckx = {
+ email = "github@tobias.gr";
+ github = "nckx";
+ githubId = 364510;
+ name = "Tobias Geerinckx-Rice";
+ };
+ ndowens = {
+ email = "ndowens04@gmail.com";
+ github = "ndowens";
+ githubId = 117743;
+ name = "Nathan Owens";
+ };
+ neeasade = {
+ email = "nathanisom27@gmail.com";
+ github = "neeasade";
+ githubId = 3747396;
+ name = "Nathan Isom";
+ };
+ neonfuz = {
+ email = "neonfuz@gmail.com";
+ github = "neonfuz";
+ githubId = 2590830;
+ name = "Sage Raflik";
+ };
+ nequissimus = {
+ email = "tim@nequissimus.com";
+ github = "nequissimus";
+ githubId = 628342;
+ name = "Tim Steinbach";
+ };
+ netixx = {
+ email = "dev.espinetfrancois@gmail.com";
+ github = "netixx";
+ githubId = 1488603;
+ name = "François Espinet";
+ };
+ nikitavoloboev = {
+ email = "nikita.voloboev@gmail.com";
+ github = "nikitavoloboev";
+ githubId = 6391776;
+ name = "Nikita Voloboev";
+ };
+ nfjinjing = {
+ email = "nfjinjing@gmail.com";
+ name = "Jinjing Wang";
+ };
+ nh2 = {
+ email = "mail@nh2.me";
+ github = "nh2";
+ githubId = 399535;
+ name = "Niklas Hambüchen";
+ };
+ nhooyr = {
+ email = "anmol@aubble.com";
+ github = "nhooyr";
+ githubId = 10180857;
+ name = "Anmol Sethi";
+ };
+ nickhu = {
+ email = "me@nickhu.co.uk";
+ github = "nickhu";
+ githubId = 450276;
+ name = "Nick Hu";
+ };
+ nicknovitski = {
+ email = "nixpkgs@nicknovitski.com";
+ github = "nicknovitski";
+ githubId = 151337;
+ name = "Nick Novitski";
+ };
+ nico202 = {
+ email = "anothersms@gmail.com";
+ github = "nico202";
+ githubId = 8214542;
+ name = "Nicolò Balzarotti";
+ };
+ NikolaMandic = {
+ email = "nikola@mandic.email";
+ github = "NikolaMandic";
+ githubId = 4368690;
+ name = "Ratko Mladic";
+ };
+ ninjatrappeur = {
+ email = "felix@alternativebit.fr";
+ github = "ninjatrappeur";
+ githubId = 1219785;
+ name = "Félix Baylac-Jacqué";
+ };
+ nioncode = {
+ email = "nioncode+github@gmail.com";
+ github = "nioncode";
+ githubId = 3159451;
+ name = "Nicolas Schneider";
+ };
+ nipav = {
+ email = "niko.pavlinek@gmail.com";
+ github = "nipav";
+ githubId = 16385648;
+ name = "Niko Pavlinek";
+ };
+ nixy = {
+ email = "nixy@nixy.moe";
+ github = "nixy";
+ githubId = 7588406;
+ name = "Andrew R. M.";
+ };
+ nmattia = {
+ email = "nicolas@nmattia.com";
+ github = "nmattia";
+ githubId = 6930756;
+ name = "Nicolas Mattia";
+ };
+ nocent = {
+ email = "nocent@protonmail.ch";
+ github = "nocent";
+ githubId = 25505957;
+ name = "nocent";
+ };
+ nocoolnametom = {
+ email = "nocoolnametom@gmail.com";
+ github = "nocoolnametom";
+ githubId = 810877;
+ name = "Tom Doggett";
+ };
+ nomeata = {
+ email = "mail@joachim-breitner.de";
+ github = "nomeata";
+ githubId = 148037;
+ name = "Joachim Breitner";
+ };
+ noneucat = {
+ email = "andy@lolc.at";
+ github = "noneucat";
+ githubId = 40049608;
+ name = "Andy Chun";
+ };
+ notthemessiah = {
+ email = "brian.cohen.88@gmail.com";
+ github = "notthemessiah";
+ githubId = 2946283;
+ name = "Brian Cohen";
+ };
+ np = {
+ email = "np.nix@nicolaspouillard.fr";
+ github = "np";
+ githubId = 5548;
+ name = "Nicolas Pouillard";
+ };
+ nphilou = {
+ email = "nphilou@gmail.com";
+ github = "nphilou";
+ githubId = 9939720;
+ name = "Philippe Nguyen";
+ };
+ nrdxp = {
+ email = "tim.deh@pm.me";
+ github = "nrdxp";
+ githubId = 34083928;
+ name = "Tim DeHerrera";
+ };
+ nshalman = {
+ email = "nahamu@gmail.com";
+ github = "nshalman";
+ githubId = 20391;
+ name = "Nahum Shalman";
+ };
+ nslqqq = {
+ email = "nslqqq@gmail.com";
+ name = "Nikita Mikhailov";
+ };
+ nthorne = {
+ email = "notrupertthorne@gmail.com";
+ github = "nthorne";
+ githubId = 1839979;
+ name = "Niklas Thörne";
+ };
+ numinit = {
+ email = "me@numin.it";
+ github = "numinit";
+ githubId = 369111;
+ name = "Morgan Jones";
+ };
+ nyanloutre = {
+ email = "paul@nyanlout.re";
+ github = "nyanloutre";
+ githubId = 7677321;
+ name = "Paul Trehiou";
+ };
+ nyarly = {
+ email = "nyarly@gmail.com";
+ github = "nyarly";
+ githubId = 127548;
+ name = "Judson Lester";
+ };
+ nzhang-zh = {
+ email = "n.zhang.hp.au@gmail.com";
+ github = "nzhang-zh";
+ githubId = 30825096;
+ name = "Ning Zhang";
+ };
+ obadz = {
+ email = "obadz-nixos@obadz.com";
+ github = "obadz";
+ githubId = 3359345;
+ name = "obadz";
+ };
+ ocharles = {
+ email = "ollie@ocharles.org.uk";
+ github = "ocharles";
+ githubId = 20878;
+ name = "Oliver Charles";
+ };
+ odi = {
+ email = "oliver.dunkl@gmail.com";
+ github = "odi";
+ githubId = 158758;
+ name = "Oliver Dunkl";
+ };
+ offline = {
+ email = "jaka@x-truder.net";
+ github = "offlinehacker";
+ githubId = 585547;
+ name = "Jaka Hudoklin";
+ };
+ oida = {
+ email = "oida@posteo.de";
+ github = "oida";
+ githubId = 7249506;
+ name = "oida";
+ };
+ okasu = {
+ email = "oka.sux@gmail.com";
+ name = "Okasu";
+ };
+ olcai = {
+ email = "dev@timan.info";
+ github = "olcai";
+ githubId = 20923;
+ name = "Erik Timan";
+ };
+ olejorgenb = {
+ email = "olejorgenb@yahoo.no";
+ github = "olejorgenb";
+ githubId = 72201;
+ name = "Ole Jørgen Brønner";
+ };
+ olynch = {
+ email = "owen@olynch.me";
+ github = "olynch";
+ name = "Owen Lynch";
+ };
+ omnipotententity = {
+ email = "omnipotententity@gmail.com";
+ github = "omnipotententity";
+ githubId = 1538622;
+ name = "Michael Reilly";
+ };
+ OPNA2608 = {
+ email = "christoph.neidahl@gmail.com";
+ github = "OPNA2608";
+ githubId = 23431373;
+ name = "Christoph Neidahl";
+ };
+ orbekk = {
+ email = "kjetil.orbekk@gmail.com";
+ github = "orbekk";
+ githubId = 19862;
+ name = "KJ Ørbekk";
+ };
+ orbitz = {
+ email = "mmatalka@gmail.com";
+ github = "orbitz";
+ name = "Malcolm Matalka";
+ };
+ orivej = {
+ email = "orivej@gmx.fr";
+ github = "orivej";
+ githubId = 101514;
+ name = "Orivej Desh";
+ };
+ osener = {
+ email = "ozan@ozansener.com";
+ github = "osener";
+ githubId = 111265;
+ name = "Ozan Sener";
+ };
+ otwieracz = {
+ email = "slawek@otwiera.cz";
+ github = "otwieracz";
+ githubId = 108072;
+ name = "Slawomir Gonet";
+ };
+ oxij = {
+ email = "oxij@oxij.org";
+ github = "oxij";
+ githubId = 391919;
+ name = "Jan Malakhovski";
+ keys = [{
+ longkeyid = "rsa2048/0x0E6CA66E5C557AA8";
+ fingerprint = "514B B966 B46E 3565 0508 86E8 0E6C A66E 5C55 7AA8";
+ }];
+ };
+ oyren = {
+ email = "m.scheuren@oyra.eu";
+ github = "oyren";
+ githubId = 15930073;
+ name = "Moritz Scheuren";
+ };
+ pacien = {
+ email = "b4gx3q.nixpkgs@pacien.net";
+ github = "pacien";
+ githubId = 1449319;
+ name = "Pacien Tran-Girard";
+ };
+ paddygord = {
+ email = "pgpatrickgordon@gmail.com";
+ github = "paddygord";
+ githubId = 10776658;
+ name = "Patrick Gordon";
+ };
+ paholg = {
+ email = "paho@paholg.com";
+ github = "paholg";
+ githubId = 4908217;
+ name = "Paho Lurie-Gregg";
+ };
+ pakhfn = {
+ email = "pakhfn@gmail.com";
+ github = "pakhfn";
+ githubId = 11016164;
+ name = "Fedor Pakhomov";
+ };
+ pamplemousse = {
+ email = "xav.maso@gmail.com";
+ github = "Pamplemousse";
+ githubId = 2647236;
+ name = "Xavier Maso";
+ };
+ panaeon = {
+ email = "vitalii.voloshyn@gmail.com";
+ github = "panaeon";
+ githubId = 686076;
+ name = "Vitalii Voloshyn";
+ };
+ pandaman = {
+ email = "kointosudesuyo@infoseek.jp";
+ github = "pandaman64";
+ githubId = 1788628;
+ name = "pandaman";
+ };
+ paperdigits = {
+ email = "mica@silentumbrella.com";
+ github = "paperdigits";
+ githubId = 71795;
+ name = "Mica Semrick";
+ };
+ paraseba = {
+ email = "paraseba@gmail.com";
+ github = "paraseba";
+ githubId = 20792;
+ name = "Sebastian Galkin";
+ };
+ pashev = {
+ email = "pashev.igor@gmail.com";
+ github = "ip1981";
+ githubId = 131844;
+ name = "Igor Pashev";
+ };
+ patternspandemic = {
+ email = "patternspandemic@live.com";
+ github = "patternspandemic";
+ githubId = 15645854;
+ name = "Brad Christensen";
+ };
+ pawelpacana = {
+ email = "pawel.pacana@gmail.com";
+ github = "pawelpacana";
+ githubId = 116740;
+ name = "Paweł Pacana";
+ };
+ pbogdan = {
+ email = "ppbogdan@gmail.com";
+ github = "pbogdan";
+ githubId = 157610;
+ name = "Piotr Bogdan";
+ };
+ pcarrier = {
+ email = "pc@rrier.ca";
+ github = "pcarrier";
+ name = "Pierre Carrier";
+ };
+ periklis = {
+ email = "theopompos@gmail.com";
+ github = "periklis";
+ githubId = 152312;
+ name = "Periklis Tsirakidis";
+ };
+ pesterhazy = {
+ email = "pesterhazy@gmail.com";
+ github = "pesterhazy";
+ githubId = 106328;
+ name = "Paulus Esterhazy";
+ };
+ petabyteboy = {
+ email = "me@pbb.lc";
+ github = "petabyteboy";
+ githubId = 3250809;
+ name = "Milan Pässler";
+ };
+ peterhoeg = {
+ email = "peter@hoeg.com";
+ github = "peterhoeg";
+ githubId = 722550;
+ name = "Peter Hoeg";
+ };
+ peterromfeldhk = {
+ email = "peter.romfeld.hk@gmail.com";
+ github = "peterromfeldhk";
+ githubId = 5515707;
+ name = "Peter Romfeld";
+ };
+ peti = {
+ email = "simons@cryp.to";
+ github = "peti";
+ githubId = 28323;
+ name = "Peter Simons";
+ };
+ philandstuff = {
+ email = "philip.g.potter@gmail.com";
+ github = "philandstuff";
+ githubId = 581269;
+ name = "Philip Potter";
+ };
+ phile314 = {
+ email = "nix@314.ch";
+ github = "phile314";
+ githubId = 1640697;
+ name = "Philipp Hausmann";
+ };
+ Phlogistique = {
+ email = "noe.rubinstein@gmail.com";
+ github = "Phlogistique";
+ githubId = 421510;
+ name = "Noé Rubinstein";
+ };
+ phreedom = {
+ email = "phreedom@yandex.ru";
+ github = "phreedom";
+ githubId = 62577;
+ name = "Evgeny Egorochkin";
+ };
+ phryneas = {
+ email = "mail@lenzw.de";
+ github = "phryneas";
+ githubId = 4282439;
+ name = "Lenz Weber";
+ };
+ phunehehe = {
+ email = "phunehehe@gmail.com";
+ github = "phunehehe";
+ githubId = 627831;
+ name = "Hoang Xuan Phu";
+ };
+ pierrechevalier83 = {
+ email = "pierrechevalier83@gmail.com";
+ github = "pierrechevalier83";
+ githubId = 5790907;
+ name = "Pierre Chevalier";
+ };
+ pierreis = {
+ email = "pierre@pierre.is";
+ github = "pierreis";
+ githubId = 203973;
+ name = "Pierre Matri";
+ };
+ pierrer = {
+ email = "pierrer@pi3r.be";
+ github = "pierrer";
+ githubId = 93115;
+ name = "Pierre Radermecker";
+ };
+ pierron = {
+ email = "nixos@nbp.name";
+ github = "nbp";
+ githubId = 1179566;
+ name = "Nicolas B. Pierron";
+ };
+ piotr = {
+ email = "ppietrasa@gmail.com";
+ name = "Piotr Pietraszkiewicz";
+ };
+ pjbarnoy = {
+ email = "pjbarnoy@gmail.com";
+ github = "pjbarnoy";
+ githubId = 119460;
+ name = "Perry Barnoy";
+ };
+ pjones = {
+ email = "pjones@devalot.com";
+ github = "pjones";
+ githubId = 3737;
+ name = "Peter Jones";
+ };
+ pkmx = {
+ email = "pkmx.tw@gmail.com";
+ github = "pkmx";
+ githubId = 610615;
+ name = "Chih-Mao Chen";
+ };
+ plchldr = {
+ email = "mail@oddco.de";
+ github = "plchldr";
+ name = "Jonas Beyer";
+ };
+ plcplc = {
+ email = "plcplc@gmail.com";
+ github = "plcplc";
+ githubId = 358550;
+ name = "Philip Lykke Carlsen";
+ };
+ plumps = {
+ email = "maks.bronsky@web.de";
+ github = "plumps";
+ githubId = 13000278;
+ name = "Maksim Bronsky";
+ };
+ pmahoney = {
+ email = "pat@polycrystal.org";
+ github = "pmahoney";
+ githubId = 103822;
+ name = "Patrick Mahoney";
+ };
+ pmeunier = {
+ email = "pierre-etienne.meunier@inria.fr";
+ github = "P-E-Meunier";
+ name = "Pierre-Étienne Meunier";
+ };
+ pmiddend = {
+ email = "pmidden@secure.mailbox.org";
+ github = "pmiddend";
+ githubId = 178496;
+ name = "Philipp Middendorf";
+ };
+ pmyjavec = {
+ email = "pauly@myjavec.com";
+ github = "pmyjavec";
+ githubId = 315096;
+ name = "Pauly Myjavec";
+ };
+ pnelson = {
+ email = "me@pnelson.ca";
+ github = "pnelson";
+ githubId = 579773;
+ name = "Philip Nelson";
+ };
+ pneumaticat = {
+ email = "kevin@potatofrom.space";
+ github = "pneumaticat";
+ githubId = 11365056;
+ name = "Kevin Liu";
+ };
+ polyrod = {
+ email = "dc1mdp@gmail.com";
+ github = "polyrod";
+ name = "Maurizio Di Pietro";
+ };
+ pombeirp = {
+ email = "nix@endgr.33mail.com";
+ github = "PombeirP";
+ githubId = 138074;
+ name = "Pedro Pombeiro";
+ };
+ pradeepchhetri = {
+ email = "pradeep.chhetri89@gmail.com";
+ github = "pradeepchhetri";
+ githubId = 2232667;
+ name = "Pradeep Chhetri";
+ };
+ pradyuman = {
+ email = "me@pradyuman.co";
+ github = "pradyuman";
+ githubId = 9904569;
+ name = "Pradyuman Vig";
+ keys = [
+ { longkeyid = "rsa4096/4F74D5361C4CA31E";
+ fingerprint = "240B 57DE 4271 2480 7CE3 EAC8 4F74 D536 1C4C A31E";
+ }
+ ];
+ };
+ prikhi = {
+ email = "pavan.rikhi@gmail.com";
+ github = "prikhi";
+ githubId = 1304102;
+ name = "Pavan Rikhi";
+ };
+ primeos = {
+ email = "dev.primeos@gmail.com";
+ github = "primeos";
+ githubId = 7537109;
+ name = "Michael Weiss";
+ keys = [
+ { longkeyid = "ed25519/0x130826A6C2A389FD"; # Git only
+ fingerprint = "86A7 4A55 07D0 58D1 322E 37FD 1308 26A6 C2A3 89FD";
+ }
+ { longkeyid = "rsa3072/0xBCA9943DD1DF4C04"; # Email, etc.
+ fingerprint = "AF85 991C C950 49A2 4205 1933 BCA9 943D D1DF 4C04";
+ }
+ ];
+ };
+ Profpatsch = {
+ email = "mail@profpatsch.de";
+ github = "Profpatsch";
+ githubId = 3153638;
+ name = "Profpatsch";
+ };
+ proglodyte = {
+ email = "proglodyte23@gmail.com";
+ github = "proglodyte";
+ githubId = 18549627;
+ name = "Proglodyte";
+ };
+ protoben = {
+ email = "protob3n@gmail.com";
+ github = "protoben";
+ githubId = 4633847;
+ name = "Ben Hamlin";
+ };
+ prusnak = {
+ email = "pavol@rusnak.io";
+ github = "prusnak";
+ githubId = 42201;
+ name = "Pavol Rusnak";
+ keys = [{
+ longkeyid = "rsa4096/0x91F3B339B9A02A3D";
+ fingerprint = "86E6 792F C27B FD47 8860 C110 91F3 B339 B9A0 2A3D";
+ }];
+ };
+ pshendry = {
+ email = "paul@pshendry.com";
+ github = "pshendry";
+ githubId = 1829032;
+ name = "Paul Hendry";
+ };
+ psibi = {
+ email = "sibi@psibi.in";
+ github = "psibi";
+ githubId = 737477;
+ name = "Sibi";
+ };
+ pstn = {
+ email = "philipp@xndr.de";
+ name = "Philipp Steinpaß";
+ };
+ pSub = {
+ email = "mail@pascal-wittmann.de";
+ github = "pSub";
+ githubId = 83842;
+ name = "Pascal Wittmann";
+ };
+ psyanticy = {
+ email = "iuns@outlook.fr";
+ github = "PsyanticY";
+ githubId = 20524473;
+ name = "Psyanticy";
+ };
+ ptival = {
+ email = "valentin.robert.42@gmail.com";
+ github = "Ptival";
+ githubId = 478606;
+ name = "Valentin Robert";
+ };
+ ptrhlm = {
+ email = "ptrhlm0@gmail.com";
+ github = "ptrhlm";
+ githubId = 9568176;
+ name = "Piotr Halama";
+ };
+ puckipedia = {
+ email = "puck@puckipedia.com";
+ github = "puckipedia";
+ githubId = 488734;
+ name = "Puck Meerburg";
+ };
+ puffnfresh = {
+ email = "brian@brianmckenna.org";
+ github = "puffnfresh";
+ githubId = 37715;
+ name = "Brian McKenna";
+ };
+ pxc = {
+ email = "patrick.callahan@latitudeengineering.com";
+ name = "Patrick Callahan";
+ };
+ pyrolagus = {
+ email = "pyrolagus@gmail.com";
+ github = "PyroLagus";
+ githubId = 4579165;
+ name = "Danny Bautista";
+ };
+ q3k = {
+ email = "q3k@q3k.org";
+ github = "q3k";
+ githubId = 315234;
+ name = "Serge Bazanski";
+ };
+ qknight = {
+ email = "js@lastlog.de";
+ github = "qknight";
+ githubId = 137406;
+ name = "Joachim Schiele";
+ };
+ qoelet = {
+ email = "kenny@machinesung.com";
+ github = "qoelet";
+ githubId = 115877;
+ name = "Kenny Shen";
+ };
+ qyliss = {
+ email = "hi@alyssa.is";
+ github = "alyssais";
+ githubId = 2768870;
+ name = "Alyssa Ross";
+ keys = [{
+ longkeyid = "rsa4096/736CCDF9EF51BD97";
+ fingerprint = "7573 56D7 79BB B888 773E 415E 736C CDF9 EF51 BD97";
+ }];
+ };
+ rafaelgg = {
+ email = "rafael.garcia.gallego@gmail.com";
+ github = "rafaelgg";
+ name = "Rafael García";
+ };
+ raquelgb = {
+ email = "raquel.garcia.bautista@gmail.com";
+ github = "raquelgb";
+ githubId = 1246959;
+ name = "Raquel García";
+ };
+ ragge = {
+ email = "r.dahlen@gmail.com";
+ github = "ragnard";
+ githubId = 882;
+ name = "Ragnar Dahlen";
+ };
+ ralith = {
+ email = "ben.e.saunders@gmail.com";
+ github = "ralith";
+ githubId = 104558;
+ name = "Benjamin Saunders";
+ };
+ ramkromberg = {
+ email = "ramkromberg@mail.com";
+ github = "ramkromberg";
+ githubId = 14829269;
+ name = "Ram Kromberg";
+ };
+ rardiol = {
+ email = "ricardo.ardissone@gmail.com";
+ github = "rardiol";
+ githubId = 11351304;
+ name = "Ricardo Ardissone";
+ };
+ rasendubi = {
+ email = "rasen.dubi@gmail.com";
+ github = "rasendubi";
+ githubId = 1366419;
+ name = "Alexey Shmalko";
+ };
+ raskin = {
+ email = "7c6f434c@mail.ru";
+ github = "7c6f434c";
+ githubId = 1891350;
+ name = "Michael Raskin";
+ };
+ ravloony = {
+ email = "ravloony@gmail.com";
+ name = "Tom Macdonald";
+ };
+ rawkode = {
+ email = "david.andrew.mckay@gmail.com";
+ github = "rawkode";
+ githubId = 145816;
+ name = "David McKay";
+ };
+ razvan = {
+ email = "razvan.panda@gmail.com";
+ github = "razvan-panda";
+ githubId = 1758708;
+ name = "Răzvan Flavius Panda";
+ };
+ rbasso = {
+ email = "rbasso@sharpgeeks.net";
+ github = "rbasso";
+ githubId = 16487165;
+ name = "Rafael Basso";
+ };
+ rbrewer = {
+ email = "rwb123@gmail.com";
+ github = "rbrewer123";
+ githubId = 743058;
+ name = "Rob Brewer";
+ };
+ rdnetto = {
+ email = "rdnetto@gmail.com";
+ github = "rdnetto";
+ githubId = 1973389;
+ name = "Reuben D'Netto";
+ };
+ redbaron = {
+ email = "ivanov.maxim@gmail.com";
+ github = "redbaron";
+ githubId = 16624;
+ name = "Maxim Ivanov";
+ };
+ redfish64 = {
+ email = "engler@gmail.com";
+ github = "redfish64";
+ githubId = 1922770;
+ name = "Tim Engler";
+ };
+ redvers = {
+ email = "red@infect.me";
+ github = "redvers";
+ githubId = 816465;
+ name = "Redvers Davies";
+ };
+ refnil = {
+ email = "broemartino@gmail.com";
+ github = "refnil";
+ githubId = 1142322;
+ name = "Martin Lavoie";
+ };
+ regnat = {
+ email = "regnat@regnat.ovh";
+ github = "regnat";
+ githubId = 7226587;
+ name = "Théophane Hufschmitt";
+ };
+ relrod = {
+ email = "ricky@elrod.me";
+ github = "relrod";
+ githubId = 43930;
+ name = "Ricky Elrod";
+ };
+ rembo10 = {
+ email = "rembo10@users.noreply.github.com";
+ github = "rembo10";
+ githubId = 801525;
+ name = "rembo10";
+ };
+ renatoGarcia = {
+ email = "fgarcia.renato@gmail.com";
+ github = "renatoGarcia";
+ githubId = 220211;
+ name = "Renato Garcia";
+ };
+ rencire = {
+ email = "546296+rencire@users.noreply.github.com";
+ github = "rencire";
+ githubId = 546296;
+ name = "Eric Ren";
+ };
+ renzo = {
+ email = "renzocarbonara@gmail.com";
+ github = "k0001";
+ githubId = 3302;
+ name = "Renzo Carbonara";
+ };
+ retrry = {
+ email = "retrry@gmail.com";
+ github = "retrry";
+ githubId = 500703;
+ name = "Tadas Barzdžius";
+ };
+ rexim = {
+ email = "reximkut@gmail.com";
+ github = "rexim";
+ githubId = 165283;
+ name = "Alexey Kutepov";
+ };
+ rht = {
+ email = "rhtbot@protonmail.com";
+ github = "rht";
+ githubId = 395821;
+ name = "rht";
+ };
+ richardipsum = {
+ email = "richardipsum@fastmail.co.uk";
+ github = "richardipsum";
+ githubId = 10631029;
+ name = "Richard Ipsum";
+ };
+ rick68 = {
+ email = "rick68@gmail.com";
+ github = "rick68";
+ githubId = 42619;
+ name = "Wei-Ming Yang";
+ };
+ rickynils = {
+ email = "rickynils@gmail.com";
+ github = "rickynils";
+ name = "Rickard Nilsson";
+ };
+ rileyinman = {
+ email = "rileyminman@gmail.com";
+ github = "rileyinman";
+ githubId = 37246692;
+ name = "Riley Inman";
+ };
+ ris = {
+ email = "code@humanleg.org.uk";
+ github = "risicle";
+ githubId = 807447;
+ name = "Robert Scott";
+ };
+ rittelle = {
+ email = "rittelle@posteo.de";
+ github = "rittelle";
+ githubId = 33598633;
+ name = "Lennart Rittel";
+ };
+ rixed = {
+ email = "rixed-github@happyleptic.org";
+ github = "rixed";
+ githubId = 449990;
+ name = "Cedric Cellier";
+ };
+ rkoe = {
+ email = "rk@simple-is-better.org";
+ github = "rkoe";
+ githubId = 2507744;
+ name = "Roland Koebler";
+ };
+ rlupton20 = {
+ email = "richard.lupton@gmail.com";
+ github = "rlupton20";
+ githubId = 13752145;
+ name = "Richard Lupton";
+ };
+ rnhmjoj = {
+ email = "rnhmjoj@inventati.org";
+ github = "rnhmjoj";
+ githubId = 2817565;
+ name = "Michele Guerini Rocco";
+ keys =
+ [
+ { longkeyid = "ed25519/0xBFBAF4C975F76450";
+ fingerprint = "92B2 904F D293 C94D C4C9 3E6B BFBA F4C9 75F7 6450";
+ }
+ ];
+ };
+ rob = {
+ email = "rob.vermaas@gmail.com";
+ github = "rbvermaa";
+ name = "Rob Vermaas";
+ };
+ robberer = {
+ email = "robberer@freakmail.de";
+ github = "robberer";
+ name = "Longrin Wischnewski";
+ };
+ robbinch = {
+ email = "robbinch33@gmail.com";
+ github = "robbinch";
+ githubId = 12312980;
+ name = "Robbin C.";
+ };
+ roberth = {
+ email = "nixpkgs@roberthensing.nl";
+ github = "roberth";
+ githubId = 496447;
+ name = "Robert Hensing";
+ };
+ robertodr = {
+ email = "roberto.diremigio@gmail.com";
+ github = "robertodr";
+ githubId = 3708689;
+ name = "Roberto Di Remigio";
+ };
+ robgssp = {
+ email = "robgssp@gmail.com";
+ github = "robgssp";
+ githubId = 521306;
+ name = "Rob Glossop";
+ };
+ roblabla = {
+ email = "robinlambertz+dev@gmail.com";
+ github = "roblabla";
+ githubId = 1069318;
+ name = "Robin Lambertz";
+ };
+ roconnor = {
+ email = "roconnor@theorem.ca";
+ github = "roconnor";
+ githubId = 852967;
+ name = "Russell O'Connor";
+ };
+ roelvandijk = {
+ email = "roel@lambdacube.nl";
+ github = "roelvandijk";
+ githubId = 710906;
+ name = "Roel van Dijk";
+ };
+ romildo = {
+ email = "malaquias@gmail.com";
+ github = "romildo";
+ githubId = 1217934;
+ name = "José Romildo Malaquias";
+ };
+ rongcuid = {
+ email = "rongcuid@outlook.com";
+ github = "rongcuid";
+ githubId = 1312525;
+ name = "Rongcui Dong";
+ };
+ roosemberth = {
+ email = "roosembert.palacios+nixpkgs@gmail.com";
+ github = "roosemberth";
+ githubId = 3621083;
+ name = "Roosembert (Roosemberth) Palacios";
+ };
+ royneary = {
+ email = "christian@ulrich.earth";
+ github = "royneary";
+ githubId = 1942810;
+ name = "Christian Ulrich";
+ };
+ rprospero = {
+ email = "rprospero+nix@gmail.com";
+ github = "rprospero";
+ githubId = 1728853;
+ name = "Adam Washington";
+ };
+ rps = {
+ email = "robbpseaton@gmail.com";
+ github = "robertseaton";
+ githubId = 221121;
+ name = "Robert P. Seaton";
+ };
+ rszibele = {
+ email = "richard@szibele.com";
+ github = "rszibele";
+ githubId = 1387224;
+ name = "Richard Szibele";
+ };
+ rtreffer = {
+ email = "treffer+nixos@measite.de";
+ github = "rtreffer";
+ githubId = 61306;
+ name = "Rene Treffer";
+ };
+ rushmorem = {
+ email = "rushmore@webenchanter.com";
+ github = "rushmorem";
+ githubId = 4958190;
+ name = "Rushmore Mushambi";
+ };
+ ruuda = {
+ email = "dev+nix@veniogames.com";
+ github = "ruuda";
+ githubId = 506953;
+ name = "Ruud van Asseldonk";
+ };
+ rvl = {
+ email = "dev+nix@rodney.id.au";
+ github = "rvl";
+ githubId = 1019641;
+ name = "Rodney Lorrimar";
+ };
+ rvlander = {
+ email = "rvlander@gaetanandre.eu";
+ github = "rvlander";
+ githubId = 5236428;
+ name = "Gaëtan André";
+ };
+ rvolosatovs = {
+ email = "rvolosatovs@riseup.net";
+ github = "rvolosatovs";
+ name = "Roman Volosatovs";
+ };
+ ryanartecona = {
+ email = "ryanartecona@gmail.com";
+ github = "ryanartecona";
+ githubId = 889991;
+ name = "Ryan Artecona";
+ };
+ ryansydnor = {
+ email = "ryan.t.sydnor@gmail.com";
+ github = "ryansydnor";
+ name = "Ryan Sydnor";
+ };
+ ryantm = {
+ email = "ryan@ryantm.com";
+ github = "ryantm";
+ githubId = 4804;
+ name = "Ryan Mulligan";
+ };
+ ryantrinkle = {
+ email = "ryan.trinkle@gmail.com";
+ github = "ryantrinkle";
+ githubId = 1156448;
+ name = "Ryan Trinkle";
+ };
+ rybern = {
+ email = "ryan.bernstein@columbia.edu";
+ github = "rybern";
+ githubId = 4982341;
+ name = "Ryan Bernstein";
+ };
+ rycee = {
+ email = "robert@rycee.net";
+ github = "rycee";
+ githubId = 798147;
+ name = "Robert Helgesson";
+ keys = [{
+ longkeyid = "rsa4096/0x3573356C25C424D4";
+ fingerprint = "36CA CF52 D098 CC0E 78FB 0CB1 3573 356C 25C4 24D4";
+ }];
+ };
+ ryneeverett = {
+ email = "ryneeverett@gmail.com";
+ github = "ryneeverett";
+ githubId = 3280280;
+ name = "Ryne Everett";
+ };
+ rzetterberg = {
+ email = "richard.zetterberg@gmail.com";
+ github = "rzetterberg";
+ githubId = 766350;
+ name = "Richard Zetterberg";
+ };
+ samdroid-apps = {
+ email = "sam@sam.today";
+ github = "samdroid-apps";
+ githubId = 6022042;
+ name = "Sam Parkinson";
+ };
+ samrose = {
+ email = "samuel.rose@gmail.com";
+ github = "samrose";
+ githubId = 115821;
+ name = "Sam Rose";
+ };
+ samueldr = {
+ email = "samuel@dionne-riel.com";
+ github = "samueldr";
+ githubId = 132835;
+ name = "Samuel Dionne-Riel";
+ };
+ samuelrivas = {
+ email = "samuelrivas@gmail.com";
+ github = "samuelrivas";
+ githubId = 107703;
+ name = "Samuel Rivas";
+ };
+ sander = {
+ email = "s.vanderburg@tudelft.nl";
+ github = "svanderburg";
+ name = "Sander van der Burg";
+ };
+ sargon = {
+ email = "danielehlers@mindeye.net";
+ github = "sargon";
+ githubId = 178904;
+ name = "Daniel Ehlers";
+ };
+ saschagrunert = {
+ email = "mail@saschagrunert.de";
+ github = "saschagrunert";
+ githubId = 695473;
+ name = "Sascha Grunert";
+ };
+ sauyon = {
+ email = "s@uyon.co";
+ github = "sauyon";
+ githubId = 2347889;
+ name = "Sauyon Lee";
+ };
+ sb0 = {
+ email = "sb@m-labs.hk";
+ github = "sbourdeauducq";
+ githubId = 720864;
+ name = "Sébastien Bourdeauducq";
+ };
+ sboosali = {
+ email = "SamBoosalis@gmail.com";
+ github = "sboosali";
+ githubId = 2320433;
+ name = "Sam Boosalis";
+ };
+ scalavision = {
+ email = "scalavision@gmail.com";
+ github = "scalavision";
+ name = "Tom Sorlie";
+ };
+ schmitthenner = {
+ email = "development@schmitthenner.eu";
+ github = "fkz";
+ githubId = 354463;
+ name = "Fabian Schmitthenner";
+ };
+ schmittlauch = {
+ email = "t.schmittlauch+nixos@orlives.de";
+ github = "schmittlauch";
+ };
+ schneefux = {
+ email = "schneefux+nixos_pkg@schneefux.xyz";
+ github = "schneefux";
+ githubId = 15379000;
+ name = "schneefux";
+ };
+ schristo = {
+ email = "schristopher@konputa.com";
+ name = "Scott Christopher";
+ };
+ scode = {
+ email = "peter.schuller@infidyne.com";
+ github = "scode";
+ githubId = 59476;
+ name = "Peter Schuller";
+ };
+ scolobb = {
+ email = "sivanov@colimite.fr";
+ github = "scolobb";
+ githubId = 11320;
+ name = "Sergiu Ivanov";
+ };
+ screendriver = {
+ email = "nix@echooff.de";
+ github = "screendriver";
+ githubId = 149248;
+ name = "Christian Rackerseder";
+ };
+ Scriptkiddi = {
+ email = "nixos@scriptkiddi.de";
+ github = "scriptkiddi";
+ githubId = 3598650;
+ name = "Fritz Otlinghaus";
+ };
+ scubed2 = {
+ email = "scubed2@gmail.com";
+ github = "scubed2";
+ name = "Sterling Stein";
+ };
+ sdll = {
+ email = "sasha.delly@gmail.com";
+ github = "sdll";
+ githubId = 17913919;
+ name = "Sasha Illarionov";
+ };
+ SeanZicari = {
+ email = "sean.zicari@gmail.com";
+ github = "SeanZicari";
+ githubId = 2343853;
+ name = "Sean Zicari";
+ };
+ sellout = {
+ email = "greg@technomadic.org";
+ github = "sellout";
+ githubId = 33031;
+ name = "Greg Pfeil";
+ };
+ sengaya = {
+ email = "tlo@sengaya.de";
+ github = "sengaya";
+ githubId = 1286668;
+ name = "Thilo Uttendorfer";
+ };
+ sephalon = {
+ email = "me@sephalon.net";
+ github = "sephalon";
+ githubId = 893474;
+ name = "Stefan Wiehler";
+ };
+ sepi = {
+ email = "raffael@mancini.lu";
+ github = "sepi";
+ githubId = 529649;
+ name = "Raffael Mancini";
+ };
+ seppeljordan = {
+ email = "sebastian.jordan.mail@googlemail.com";
+ github = "seppeljordan";
+ githubId = 4805746;
+ name = "Sebastian Jordan";
+ };
+ seqizz = {
+ email = "seqizz@gmail.com";
+ github = "seqizz";
+ githubId = 307899;
+ name = "Gurkan Gur";
+ };
+ sfrijters = {
+ email = "sfrijters@gmail.com";
+ github = "sfrijters";
+ githubId = 918365;
+ name = "Stefan Frijters";
+ };
+ sgo = {
+ email = "stig@stig.io";
+ github = "stigtsp";
+ githubId = 75371;
+ name = "Stig Palmquist";
+ };
+ sgraf = {
+ email = "sgraf1337@gmail.com";
+ github = "sgraf812";
+ githubId = 1151264;
+ name = "Sebastian Graf";
+ };
+ shanemikel = {
+ email = "shanemikel1@gmail.com";
+ github = "shanemikel";
+ githubId = 6720672;
+ name = "Shane Pearlman";
+ };
+ shawndellysse = {
+ email = "sdellysse@gmail.com";
+ github = "shawndellysse";
+ githubId = 293035;
+ name = "Shawn Dellysse";
+ };
+ shazow = {
+ email = "andrey.petrov@shazow.net";
+ github = "shazow";
+ name = "Andrey Petrov";
+ };
+ sheenobu = {
+ email = "sheena.artrip@gmail.com";
+ github = "sheenobu";
+ githubId = 1443459;
+ name = "Sheena Artrip";
+ };
+ sheganinans = {
+ email = "sheganinans@gmail.com";
+ github = "sheganinans";
+ githubId = 2146203;
+ name = "Aistis Raulinaitis";
+ };
+ shell = {
+ email = "cam.turn@gmail.com";
+ github = "VShell";
+ githubId = 251028;
+ name = "Shell Turner";
+ };
+ shlevy = {
+ email = "shea@shealevy.com";
+ github = "shlevy";
+ name = "Shea Levy";
+ };
+ shmish111 = {
+ email = "shmish111@gmail.com";
+ github = "shmish111";
+ name = "David Smith";
+ };
+ shou = {
+ email = "x+g@shou.io";
+ github = "Shou";
+ githubId = 819413;
+ name = "Benedict Aas";
+ };
+ siddharthist = {
+ email = "langston.barrett@gmail.com";
+ github = "langston-barrett";
+ githubId = 4294323;
+ name = "Langston Barrett";
+ };
+ siers = {
+ email = "veinbahs+nixpkgs@gmail.com";
+ github = "siers";
+ githubId = 235147;
+ name = "Raitis Veinbahs";
+ };
+ sifmelcara = {
+ email = "ming@culpring.com";
+ github = "sifmelcara";
+ githubId = 10496191;
+ name = "Ming Chuan";
+ };
+ sigma = {
+ email = "yann.hodique@gmail.com";
+ github = "sigma";
+ githubId = 16090;
+ name = "Yann Hodique";
+ };
+ sikmir = {
+ email = "sikmir@gmail.com";
+ github = "sikmir";
+ githubId = 688044;
+ name = "Nikolay Korotkiy";
+ keys = [{
+ longkeyid = "rsa2048/0xD1DE6D7F693663A5";
+ fingerprint = "ADF4 C13D 0E36 1240 BD01 9B51 D1DE 6D7F 6936 63A5";
+ }];
+ };
+ simonvandel = {
+ email = "simon.vandel@gmail.com";
+ github = "simonvandel";
+ githubId = 2770647;
+ name = "Simon Vandel Sillesen";
+ };
+ sivteck = {
+ email = "sivaram1992@gmail.com";
+ github = "sivteck";
+ githubId = 8017899;
+ name = "Sivaram Balakrishnan";
+ };
+ sjagoe = {
+ email = "simon@simonjagoe.com";
+ github = "sjagoe";
+ githubId = 80012;
+ name = "Simon Jagoe";
+ };
+ sjau = {
+ email = "nixos@sjau.ch";
+ github = "sjau";
+ githubId = 848812;
+ name = "Stephan Jau";
+ };
+ sjmackenzie = {
+ email = "setori88@gmail.com";
+ github = "sjmackenzie";
+ name = "Stewart Mackenzie";
+ };
+ sjourdois = {
+ email = "sjourdois@gmail.com";
+ name = "Stéphane ‘kwisatz’ Jourdois";
+ };
+ skeidel = {
+ email = "svenkeidel@gmail.com";
+ github = "svenkeidel";
+ githubId = 266500;
+ name = "Sven Keidel";
+ };
+ skrzyp = {
+ email = "jot.skrzyp@gmail.com";
+ name = "Jakub Skrzypnik";
+ };
+ sleexyz = {
+ email = "freshdried@gmail.com";
+ github = "sleexyz";
+ githubId = 1505617;
+ name = "Sean Lee";
+ };
+ smakarov = {
+ email = "setser200018@gmail.com";
+ github = "setser";
+ githubId = 12733495;
+ name = "Sergey Makarov";
+ keys = [{
+ longkeyid = "rsa2048/6AA23A1193B7064B";
+ fingerprint = "6F8A 18AE 4101 103F 3C54 24B9 6AA2 3A11 93B7 064B";
+ }];
+ };
+ smaret = {
+ email = "sebastien.maret@icloud.com";
+ github = "smaret";
+ githubId = 95471;
+ name = "Sébastien Maret";
+ keys = [{
+ longkeyid = "rsa4096/0x86E30E5A0F5FC59C";
+ fingerprint = "4242 834C D401 86EF 8281 4093 86E3 0E5A 0F5F C59C";
+ }];
+ };
+ smironov = {
+ email = "grrwlf@gmail.com";
+ github = "grwlf";
+ githubId = 4477729;
+ name = "Sergey Mironov";
+ };
+ sna = {
+ email = "abouzahra.9@wright.edu";
+ github = "s-na";
+ githubId = 20214715;
+ name = "S. Nordin Abouzahra";
+ };
+ snaar = {
+ email = "snaar@snaar.net";
+ github = "snaar";
+ githubId = 602439;
+ name = "Serguei Narojnyi";
+ };
+ snyh = {
+ email = "snyh@snyh.org";
+ github = "snyh";
+ githubId = 1437166;
+ name = "Xia Bin";
+ };
+ solson = {
+ email = "scott@solson.me";
+ github = "solson";
+ githubId = 26806;
+ name = "Scott Olson";
+ };
+ sondr3 = {
+ email = "nilsen.sondre@gmail.com";
+ github = "sondr3";
+ githubId = 2280539;
+ name = "Sondre Nilsen";
+ keys = [{
+ longkeyid = "ed25519/0x25676BCBFFAD76B1";
+ fingerprint = "0EC3 FA89 EFBA B421 F82E 40B0 2567 6BCB FFAD 76B1";
+ }];
+ };
+ sorki = {
+ email = "srk@48.io";
+ github = "sorki";
+ githubId = 115308;
+ name = "Richard Marko";
+ };
+ sorpaas = {
+ email = "hi@that.world";
+ github = "sorpaas";
+ githubId = 6277322;
+ name = "Wei Tang";
+ };
+ spacefrogg = {
+ email = "spacefrogg-nixos@meterriblecrew.net";
+ github = "spacefrogg";
+ githubId = 167881;
+ name = "Michael Raitza";
+ };
+ spacekookie = {
+ email = "kookie@spacekookie.de";
+ github = "spacekookie";
+ githubId = 7669898;
+ name = "Katharina Fey";
+ };
+ spencerjanssen = {
+ email = "spencerjanssen@gmail.com";
+ github = "spencerjanssen";
+ githubId = 2600039;
+ name = "Spencer Janssen";
+ };
+ spinus = {
+ email = "tomasz.czyz@gmail.com";
+ github = "spinus";
+ githubId = 950799;
+ name = "Tomasz Czyż";
+ };
+ sprock = {
+ email = "rmason@mun.ca";
+ github = "sprock";
+ name = "Roger Mason";
+ };
+ spwhitt = {
+ email = "sw@swhitt.me";
+ github = "spwhitt";
+ githubId = 1414088;
+ name = "Spencer Whitt";
+ };
+ srghma = {
+ email = "srghma@gmail.com";
+ github = "srghma";
+ name = "Sergei Khoma";
+ };
+ srgom = {
+ email = "srgom@users.noreply.github.com";
+ github = "srgom";
+ githubId = 8103619;
+ name = "SRGOM";
+ };
+ srhb = {
+ email = "sbrofeldt@gmail.com";
+ github = "srhb";
+ githubId = 219362;
+ name = "Sarah Brofeldt";
+ };
+ SShrike = {
+ email = "severen@shrike.me";
+ github = "severen";
+ githubId = 4061736;
+ name = "Severen Redwood";
+ };
+ steell = {
+ email = "steve@steellworks.com";
+ github = "Steell";
+ githubId = 1699155;
+ name = "Steve Elliott";
+ };
+ stephenmw = {
+ email = "stephen@q5comm.com";
+ github = "stephenmw";
+ githubId = 231788;
+ name = "Stephen Weinberg";
+ };
+ sterfield = {
+ email = "sterfield@gmail.com";
+ github = "sterfield";
+ githubId = 5747061;
+ name = "Guillaume Loetscher";
+ };
+ sternenseemann = {
+ email = "post@lukasepple.de";
+ github = "sternenseemann";
+ githubId = 3154475;
+ name = "Lukas Epple";
+ };
+ steshaw = {
+ name = "Steven Shaw";
+ email = "steven@steshaw.org";
+ github = "steshaw";
+ githubId = 45735;
+ keys = [{
+ longkeyid = "rsa4096/0x1D9A17DFD23DCB91";
+ fingerprint = "0AFE 77F7 474D 1596 EE55 7A29 1D9A 17DF D23D CB91";
+ }];
+ };
+ stesie = {
+ email = "stesie@brokenpipe.de";
+ github = "stesie";
+ githubId = 113068;
+ name = "Stefan Siegl";
+ };
+ steve-chavez = {
+ email = "stevechavezast@gmail.com";
+ github = "steve-chavez";
+ githubId = 1829294;
+ name = "Steve Chávez";
+ };
+ steveej = {
+ email = "mail@stefanjunker.de";
+ github = "steveej";
+ githubId = 1181362;
+ name = "Stefan Junker";
+ };
+ StijnDW = {
+ email = "stekke@airmail.cc";
+ github = "StijnDW";
+ githubId = 1751956;
+ name = "Stijn DW";
+ };
+ StillerHarpo = {
+ email = "florianengel39@gmail.com";
+ github = "StillerHarpo";
+ githubId = 25526706;
+ name = "Florian Engel";
+ };
+ stites = {
+ email = "sam@stites.io";
+ github = "stites";
+ githubId = 1694705;
+ name = "Sam Stites";
+ };
+ stumoss = {
+ email = "samoss@gmail.com";
+ github = "stumoss";
+ githubId = 638763;
+ name = "Stuart Moss";
+ };
+ suhr = {
+ email = "suhr@i2pmail.org";
+ github = "suhr";
+ githubId = 65870;
+ name = "Сухарик";
+ };
+ SuprDewd = {
+ email = "suprdewd@gmail.com";
+ github = "SuprDewd";
+ githubId = 187109;
+ name = "Bjarki Ágúst Guðmundsson";
+ };
+ suvash = {
+ email = "suvash+nixpkgs@gmail.com";
+ github = "suvash";
+ githubId = 144952;
+ name = "Suvash Thapaliya";
+ };
+ sveitser = {
+ email = "sveitser@gmail.com";
+ github = "sveitser";
+ githubId = 1040871;
+ name = "Mathis Antony";
+ };
+ svsdep = {
+ email = "svsdep@gmail.com";
+ github = "svsdep";
+ githubId = 36695359;
+ name = "Vasyl Solovei";
+ };
+ swarren83 = {
+ email = "shawn.w.warren@gmail.com";
+ github = "swarren83";
+ githubId = 4572854;
+ name = "Shawn Warren";
+ };
+ swdunlop = {
+ email = "swdunlop@gmail.com";
+ github = "swdunlop";
+ githubId = 120188;
+ name = "Scott W. Dunlop";
+ };
+ swflint = {
+ email = "swflint@flintfam.org";
+ github = "swflint";
+ githubId = 1771109;
+ name = "Samuel W. Flint";
+ };
+ swistak35 = {
+ email = "me@swistak35.com";
+ github = "swistak35";
+ githubId = 332289;
+ name = "Rafał Łasocha";
+ };
+ symphorien = {
+ email = "symphorien_nixpkgs@xlumurb.eu";
+ github = "symphorien";
+ githubId = 12595971;
+ name = "Guillaume Girol";
+ };
+ synthetica = {
+ email = "nix@hilhorst.be";
+ github = "Synthetica9";
+ githubId = 7075751;
+ name = "Patrick Hilhorst";
+ };
+ szczyp = {
+ email = "qb@szczyp.com";
+ github = "szczyp";
+ githubId = 203195;
+ name = "Szczyp";
+ };
+ sztupi = {
+ email = "attila.sztupak@gmail.com";
+ github = "sztupi";
+ githubId = 143103;
+ name = "Attila Sztupak";
+ };
+ t184256 = {
+ email = "monk@unboiled.info";
+ github = "t184256";
+ githubId = 5991987;
+ name = "Alexander Sosedkin";
+ };
+ tadeokondrak = {
+ email = "me@tadeo.ca";
+ github = "tadeokondrak";
+ githubId = 4098453;
+ name = "Tadeo Kondrak";
+ keys = [{
+ longkeyid = "ed25519/0xFBE607FCC49516D3";
+ fingerprint = "0F2B C0C7 E77C 5B42 AC5B 4C18 FBE6 07FC C495 16D3";
+ }];
+ };
+ tadfisher = {
+ email = "tadfisher@gmail.com";
+ github = "tadfisher";
+ githubId = 129148;
+ name = "Tad Fisher";
+ };
+ taeer = {
+ email = "taeer@necsi.edu";
+ github = "Radvendii";
+ githubId = 1239929;
+ name = "Taeer Bar-Yam";
+ };
+ taha = {
+ email = "xrcrod@gmail.com";
+ github = "tgharib";
+ name = "Taha Gharib";
+ };
+ tailhook = {
+ email = "paul@colomiets.name";
+ github = "tailhook";
+ githubId = 321799;
+ name = "Paul Colomiets";
+ };
+ taketwo = {
+ email = "alexandrov88@gmail.com";
+ github = "taketwo";
+ githubId = 1241736;
+ name = "Sergey Alexandrov";
+ };
+ takikawa = {
+ email = "asumu@igalia.com";
+ github = "takikawa";
+ githubId = 64192;
+ name = "Asumu Takikawa";
+ };
+ taktoa = {
+ email = "taktoa@gmail.com";
+ github = "taktoa";
+ githubId = 553443;
+ name = "Remy Goldschmidt";
+ };
+ taku0 = {
+ email = "mxxouy6x3m_github@tatapa.org";
+ github = "taku0";
+ githubId = 870673;
+ name = "Takuo Yonezawa";
+ };
+ talyz = {
+ email = "kim.lindberger@gmail.com";
+ github = "talyz";
+ githubId = 63433;
+ name = "Kim Lindberger";
+ };
+ taneb = {
+ email = "nvd1234@gmail.com";
+ github = "Taneb";
+ githubId = 1901799;
+ name = "Nathan van Doorn";
+ };
+ tari = {
+ email = "peter@taricorp.net";
+ github = "tari";
+ githubId = 506181;
+ name = "Peter Marheine";
+ };
+ tavyc = {
+ email = "octavian.cerna@gmail.com";
+ github = "tavyc";
+ githubId = 3650609;
+ name = "Octavian Cerna";
+ };
+ tazjin = {
+ email = "mail@tazj.in";
+ github = "tazjin";
+ githubId = 1552853;
+ name = "Vincent Ambo";
+ };
+ tbenst = {
+ email = "nix@tylerbenster.com";
+ github = "tbenst";
+ githubId = 863327;
+ name = "Tyler Benster";
+ };
+ teh = {
+ email = "tehunger@gmail.com";
+ github = "teh";
+ githubId = 139251;
+ name = "Tom Hunger";
+ };
+ telotortium = {
+ email = "rirelan@gmail.com";
+ github = "telotortium";
+ githubId = 1755789;
+ name = "Robert Irelan";
+ };
+ teozkr = {
+ email = "teo@nullable.se";
+ github = "teozkr";
+ githubId = 649832;
+ name = "Teo Klestrup Röijezon";
+ };
+ terlar = {
+ email = "terlar@gmail.com";
+ github = "terlar";
+ githubId = 280235;
+ name = "Terje Larsen";
+ };
+ tesq0 = {
+ email = "mikolaj.galkowski@gmail.com";
+ github = "tesq0";
+ name = "Mikolaj Galkowski";
+ };
+ teto = {
+ email = "mcoudron@hotmail.com";
+ github = "teto";
+ name = "Matthieu Coudron";
+ };
+ tex = {
+ email = "milan.svoboda@centrum.cz";
+ github = "tex";
+ githubId = 27386;
+ name = "Milan Svoboda";
+ };
+ tg-x = {
+ email = "*@tg-x.net";
+ github = "tg-x";
+ githubId = 378734;
+ name = "TG ⊗ Θ";
+ };
+ thall = {
+ email = "niclas.thall@gmail.com";
+ github = "thall";
+ githubId = 102452;
+ name = "Niclas Thall";
+ };
+ thammers = {
+ email = "jawr@gmx.de";
+ github = "tobias-hammerschmidt";
+ githubId = 2543259;
+ name = "Tobias Hammerschmidt";
+ };
+ thanegill = {
+ email = "me@thanegill.com";
+ github = "thanegill";
+ githubId = 1141680;
+ name = "Thane Gill";
+ };
+ the-kenny = {
+ email = "moritz@tarn-vedra.de";
+ github = "the-kenny";
+ name = "Moritz Ulrich";
+ };
+ thedavidmeister = {
+ email = "thedavidmeister@gmail.com";
+ github = "thedavidmeister";
+ githubId = 629710;
+ name = "David Meister";
+ };
+ thefloweringash = {
+ email = "lorne@cons.org.nz";
+ github = "thefloweringash";
+ githubId = 42933;
+ name = "Andrew Childs";
+ };
+ thesola10 = {
+ email = "thesola10@bobile.fr";
+ github = "thesola10";
+ githubId = 7287268;
+ keys = [{
+ longkeyid = "rsa4096/0x89245619BEBB95BA";
+ fingerprint = "1D05 13A6 1AC4 0D8D C6D6 5F2C 8924 5619 BEBB 95BA";
+ }];
+ name = "Karim Vergnes";
+ };
+ theuni = {
+ email = "ct@flyingcircus.io";
+ github = "ctheune";
+ githubId = 1220572;
+ name = "Christian Theune";
+ };
+ thiagokokada = {
+ email = "thiagokokada@gmail.com";
+ github = "thiagokokada";
+ githubId = 844343;
+ name = "Thiago K. Okada";
+ };
+ ThomasMader = {
+ email = "thomas.mader@gmail.com";
+ github = "ThomasMader";
+ githubId = 678511;
+ name = "Thomas Mader";
+ };
+ thoughtpolice = {
+ email = "aseipp@pobox.com";
+ github = "thoughtpolice";
+ githubId = 3416;
+ name = "Austin Seipp";
+ };
+ thpham = {
+ email = "thomas.pham@ithings.ch";
+ github = "thpham";
+ githubId = 224674;
+ name = "Thomas Pham";
+ };
+ tilpner = {
+ email = "till@hoeppner.ws";
+ github = "tilpner";
+ githubId = 4322055;
+ name = "Till Höppner";
+ };
+ timbertson = {
+ email = "tim@gfxmonk.net";
+ github = "timbertson";
+ name = "Tim Cuthbertson";
+ };
+ timokau = {
+ email = "timokau@zoho.com";
+ github = "timokau";
+ githubId = 3799330;
+ name = "Timo Kaufmann";
+ };
+ timor = {
+ email = "timor.dd@googlemail.com";
+ github = "timor";
+ githubId = 174156;
+ name = "timor";
+ };
+ timput = {
+ email = "tim@timput.com";
+ github = "TimPut";
+ githubId = 2845239;
+ name = "Tim Put";
+ };
+ tiramiseb = {
+ email = "sebastien@maccagnoni.eu";
+ github = "tiramiseb";
+ githubId = 1292007;
+ name = "Sébastien Maccagnoni";
+ };
+ titanous = {
+ email = "jonathan@titanous.com";
+ github = "titanous";
+ githubId = 13026;
+ name = "Jonathan Rudenberg";
+ };
+ tmplt = {
+ email = "tmplt@dragons.rocks";
+ github = "tmplt";
+ githubId = 6118602;
+ name = "Viktor";
+ };
+ tnias = {
+ email = "phil@grmr.de";
+ github = "tnias";
+ name = "Philipp Bartsch";
+ };
+ tobim = {
+ email = "nix@tobim.fastmail.fm";
+ github = "tobim";
+ githubId = 858790;
+ name = "Tobias Mayer";
+ };
+ tobiasBora = {
+ email = "tobias.bora.list@gmail.com";
+ github = "tobiasBora";
+ githubId = 2164118;
+ name = "Tobias Bora";
+ };
+ tohl = {
+ email = "tom@logand.com";
+ github = "tohl";
+ githubId = 12159013;
+ name = "Tomas Hlavaty";
+ };
+ tokudan = {
+ email = "git@danielfrank.net";
+ github = "tokudan";
+ githubId = 692610;
+ name = "Daniel Frank";
+ };
+ tomahna = {
+ email = "kevin.rauscher@tomahna.fr";
+ github = "Tomahna";
+ githubId = 8577941;
+ name = "Kevin Rauscher";
+ };
+ tomberek = {
+ email = "tomberek@gmail.com";
+ github = "tomberek";
+ githubId = 178444;
+ name = "Thomas Bereknyei";
+ };
+ tomsmeets = {
+ email = "tom.tsmeets@gmail.com";
+ github = "tomsmeets";
+ githubId = 6740669;
+ name = "Tom Smeets";
+ };
+ toonn = {
+ email = "nnoot@toonn.io";
+ github = "toonn";
+ githubId = 1486805;
+ name = "Toon Nolten";
+ };
+ travisbhartwell = {
+ email = "nafai@travishartwell.net";
+ github = "travisbhartwell";
+ githubId = 10110;
+ name = "Travis B. Hartwell";
+ };
+ treemo = {
+ email = "matthieu.chevrier@treemo.fr";
+ github = "treemo";
+ githubId = 207457;
+ name = "Matthieu Chevrier";
+ };
+ trevorj = {
+ email = "nix@trevor.joynson.io";
+ github = "akatrevorjay";
+ githubId = 1312290;
+ name = "Trevor Joynson";
+ };
+ trino = {
+ email = "muehlhans.hubert@ekodia.de";
+ github = "hmuehlhans";
+ githubId = 9870613;
+ name = "Hubert Mühlhans";
+ };
+ troydm = {
+ email = "d.geurkov@gmail.com";
+ github = "troydm";
+ githubId = 483735;
+ name = "Dmitry Geurkov";
+ };
+ tstrobel = {
+ email = "4ZKTUB6TEP74PYJOPWIR013S2AV29YUBW5F9ZH2F4D5UMJUJ6S@hash.domains";
+ name = "Thomas Strobel";
+ };
+ ttuegel = {
+ email = "ttuegel@mailbox.org";
+ github = "ttuegel";
+ githubId = 563054;
+ name = "Thomas Tuegel";
+ };
+ tv = {
+ email = "tv@krebsco.de";
+ github = "4z3";
+ githubId = 427872;
+ name = "Tomislav Viljetić";
+ };
+ tvestelind = {
+ email = "tomas.vestelind@fripost.org";
+ github = "tvestelind";
+ name = "Tomas Vestelind";
+ };
+ tvorog = {
+ email = "marszaripov@gmail.com";
+ github = "tvorog";
+ githubId = 1325161;
+ name = "Marsel Zaripov";
+ };
+ tweber = {
+ email = "tw+nixpkgs@360vier.de";
+ github = "thorstenweber83";
+ name = "Thorsten Weber";
+ };
+ twey = {
+ email = "twey@twey.co.uk";
+ github = "twey";
+ name = "James ‘Twey’ Kay";
+ };
+ twhitehead = {
+ name = "Tyson Whitehead";
+ email = "twhitehead@gmail.com";
+ github = "twhitehead";
+ githubId = 787843;
+ keys = [{
+ longkeyid = "rsa2048/0x594258F0389D2802";
+ fingerprint = "E631 8869 586F 99B4 F6E6 D785 5942 58F0 389D 2802";
+ }];
+ };
+ typetetris = {
+ email = "ericwolf42@mail.com";
+ github = "typetetris";
+ githubId = 1983821;
+ name = "Eric Wolf";
+ };
+ udono = {
+ email = "udono@virtual-things.biz";
+ github = "udono";
+ githubId = 347983;
+ name = "Udo Spallek";
+ };
+ unode = {
+ email = "alves.rjc@gmail.com";
+ github = "unode";
+ githubId = 122319;
+ name = "Renato Alves";
+ };
+ uralbash = {
+ email = "root@uralbash.ru";
+ github = "uralbash";
+ githubId = 619015;
+ name = "Svintsov Dmitry";
+ };
+ uri-canva = {
+ email = "uri@canva.com";
+ github = "uri-canva";
+ githubId = 33242106;
+ name = "Uri Baghin";
+ };
+ uskudnik = {
+ email = "urban.skudnik@gmail.com";
+ github = "uskudnik";
+ githubId = 120451;
+ name = "Urban Skudnik";
+ };
+ utdemir = {
+ email = "me@utdemir.com";
+ github = "utdemir";
+ githubId = 928084;
+ name = "Utku Demir";
+ };
+ uvnikita = {
+ email = "uv.nikita@gmail.com";
+ github = "uvNikita";
+ githubId = 1084748;
+ name = "Nikita Uvarov";
+ };
+ uwap = {
+ email = "me@uwap.name";
+ github = "uwap";
+ name = "uwap";
+ };
+ va1entin = {
+ email = "github@valentinsblog.com";
+ github = "va1entin";
+ githubId = 31535155;
+ name = "Valentin Heidelberger";
+ };
+ vaibhavsagar = {
+ email = "vaibhavsagar@gmail.com";
+ github = "vaibhavsagar";
+ githubId = 1525767;
+ name = "Vaibhav Sagar";
+ };
+ valebes = {
+ email = "valebes@gmail.com";
+ github = "valebes";
+ githubid = 10956211;
+ name = "Valerio Besozzi";
+ };
+ valeriangalliat = {
+ email = "val@codejam.info";
+ github = "valeriangalliat";
+ name = "Valérian Galliat";
+ };
+ vandenoever = {
+ email = "jos@vandenoever.info";
+ github = "vandenoever";
+ githubId = 608417;
+ name = "Jos van den Oever";
+ };
+ vanschelven = {
+ email = "klaas@vanschelven.com";
+ github = "vanschelven";
+ githubId = 223833;
+ name = "Klaas van Schelven";
+ };
+ vanzef = {
+ email = "vanzef@gmail.com";
+ github = "vanzef";
+ githubId = 12428837;
+ name = "Ivan Solyankin";
+ };
+ varunpatro = {
+ email = "varun.kumar.patro@gmail.com";
+ github = "varunpatro";
+ githubId = 6943308;
+ name = "Varun Patro";
+ };
+ vbgl = {
+ email = "Vincent.Laporte@gmail.com";
+ github = "vbgl";
+ githubId = 2612464;
+ name = "Vincent Laporte";
+ };
+ vbmithr = {
+ email = "vb@luminar.eu.org";
+ github = "vbmithr";
+ githubId = 797581;
+ name = "Vincent Bernardoff";
+ };
+ vcunat = {
+ name = "Vladimír Čunát";
+ email = "v@cunat.cz"; # vcunat@gmail.com predominated in commits before 2019/03
+ github = "vcunat";
+ githubId = 1785925;
+ keys = [{
+ longkeyid = "rsa4096/0xE747DF1F9575A3AA";
+ fingerprint = "B600 6460 B60A 80E7 8206 2449 E747 DF1F 9575 A3AA";
+ }];
+ };
+ vdemeester = {
+ email = "vincent@sbr.pm";
+ github = "vdemeester";
+ githubId = 6508;
+ name = "Vincent Demeester";
+ };
+ velovix = {
+ email = "xaviosx@gmail.com";
+ github = "velovix";
+ githubId = 2856634;
+ name = "Tyler Compton";
+ };
+ veprbl = {
+ email = "veprbl@gmail.com";
+ github = "veprbl";
+ githubId = 245573;
+ name = "Dmitry Kalinkin";
+ };
+ vidbina = {
+ email = "vid@bina.me";
+ github = "vidbina";
+ githubId = 335406;
+ name = "David Asabina";
+ };
+ vifino = {
+ email = "vifino@tty.sh";
+ github = "vifino";
+ githubId = 5837359;
+ name = "Adrian Pistol";
+ };
+ vika_nezrimaya = {
+ email = "vika@fireburn.ru";
+ github = "kisik21";
+ githubId = 7953163;
+ name = "Vika Shleina";
+ keys = [{
+ longkeyid = "rsa4096/0x5402B9B5497BACDB";
+ fingerprint = "A03C D09C 36CF D9F6 1ADF AF11 5402 B9B5 497B ACDB";
+ }];
+ };
+ vinymeuh = {
+ email = "vinymeuh@gmail.com";
+ github = "vinymeuh";
+ githubId = 118959;
+ name = "VinyMeuh";
+ };
+ viric = {
+ email = "viric@viric.name";
+ github = "viric";
+ name = "Lluís Batlle i Rossell";
+ };
+ virusdave = {
+ email = "dave.nicponski@gmail.com";
+ github = "virusdave";
+ githubId = 6148271;
+ name = "Dave Nicponski";
+ };
+ vizanto = {
+ email = "danny@prime.vc";
+ github = "vizanto";
+ name = "Danny Wilson";
+ };
+ vklquevs = {
+ email = "vklquevs@gmail.com";
+ github = "vklquevs";
+ githubId = 1771234;
+ name = "vklquevs";
+ };
+ vlaci = {
+ email = "laszlo.vasko@outlook.com";
+ github = "vlaci";
+ githubId = 1771332;
+ name = "László Vaskó";
+ };
+ vlstill = {
+ email = "xstill@fi.muni.cz";
+ github = "vlstill";
+ githubId = 4070422;
+ name = "Vladimír Štill";
+ };
+ vmandela = {
+ email = "venkat.mandela@gmail.com";
+ github = "vmandela";
+ githubId = 849772;
+ name = "Venkateswara Rao Mandela";
+ };
+ vmchale = {
+ email = "tmchale@wisc.edu";
+ github = "vmchale";
+ name = "Vanessa McHale";
+ };
+ volhovm = {
+ email = "volhovm.cs@gmail.com";
+ github = "volhovm";
+ githubId = 5604643;
+ name = "Mikhail Volkhov";
+ };
+ volth = {
+ email = "jaroslavas@volth.com";
+ github = "volth";
+ githubId = 508305;
+ name = "Jaroslavas Pocepko";
+ };
+ vozz = {
+ email = "oliver.huntuk@gmail.com";
+ name = "Oliver Hunt";
+ };
+ vrthra = {
+ email = "rahul@gopinath.org";
+ github = "vrthra";
+ githubId = 70410;
+ name = "Rahul Gopinath";
+ };
+ vskilet = {
+ email = "victor@sene.ovh";
+ github = "vskilet";
+ githubId = 7677567;
+ name = "Victor SENE";
+ };
+ vyorkin = {
+ email = "vasiliy.yorkin@gmail.com";
+ github = "vyorkin";
+ githubId = 988849;
+ name = "Vasiliy Yorkin";
+ };
+ vyp = {
+ email = "elisp.vim@gmail.com";
+ github = "vyp";
+ githubId = 3889405;
+ name = "vyp";
+ };
+ waynr = {
+ name = "Wayne Warren";
+ email = "wayne.warren.s@gmail.com";
+ github = "waynr";
+ githubId = 1441126;
+ };
+ wchresta = {
+ email = "wchresta.nix@chrummibei.ch";
+ github = "wchresta";
+ githubId = 34962284;
+ name = "wchresta";
+ };
+ wedens = {
+ email = "kirill.wedens@gmail.com";
+ name = "wedens";
+ };
+ willibutz = {
+ email = "willibutz@posteo.de";
+ github = "willibutz";
+ githubId = 20464732;
+ name = "Willi Butz";
+ };
+ willtim = {
+ email = "tim.williams.public@gmail.com";
+ name = "Tim Philip Williams";
+ };
+ winden = {
+ email = "windenntw@gmail.com";
+ name = "Antonio Vargas Gonzalez";
+ };
+ winpat = {
+ email = "patrickwinter@posteo.ch";
+ github = "winpat";
+ githubId = 6016963;
+ name = "Patrick Winter";
+ };
+ wizeman = {
+ email = "rcorreia@wizy.org";
+ github = "wizeman";
+ githubId = 168610;
+ name = "Ricardo M. Correia";
+ };
+ wjlroe = {
+ email = "willroe@gmail.com";
+ github = "wjlroe";
+ githubId = 43315;
+ name = "William Roe";
+ };
+ wmertens = {
+ email = "Wout.Mertens@gmail.com";
+ github = "wmertens";
+ githubId = 54934;
+ name = "Wout Mertens";
+ };
+ woffs = {
+ email = "github@woffs.de";
+ github = "woffs";
+ githubId = 895853;
+ name = "Frank Doepper";
+ };
+ womfoo = {
+ email = "kranium@gikos.net";
+ github = "womfoo";
+ githubId = 1595132;
+ name = "Kranium Gikos Mendoza";
+ };
+ worldofpeace = {
+ email = "worldofpeace@protonmail.ch";
+ github = "worldofpeace";
+ githubId = 28888242;
+ name = "Worldofpeace";
+ };
+ wscott = {
+ email = "wsc9tt@gmail.com";
+ github = "wscott";
+ name = "Wayne Scott";
+ };
+ wucke13 = {
+ email = "info@wucke13.de";
+ github = "wucke13";
+ githubId = 20400405;
+ name = "Wucke";
+ };
+ wykurz = {
+ email = "wykurz@gmail.com";
+ github = "wykurz";
+ githubId = 483465;
+ name = "Mateusz Wykurz";
+ };
+ wyvie = {
+ email = "elijahrum@gmail.com";
+ github = "wyvie";
+ githubId = 3992240;
+ name = "Elijah Rum";
+ };
+ xaverdh = {
+ email = "hoe.dom@gmx.de";
+ github = "xaverdh";
+ githubId = 11050617;
+ name = "Dominik Xaver Hörl";
+ };
+ xbreak = {
+ email = "xbreak@alphaware.se";
+ github = "xbreak";
+ githubId = 13489144;
+ name = "Calle Rosenquist";
+ };
+ xeji = {
+ email = "xeji@cat3.de";
+ github = "xeji";
+ githubId = 36407913;
+ name = "Uli Baum";
+ };
+ xnaveira = {
+ email = "xnaveira@gmail.com";
+ github = "xnaveira";
+ name = "Xavier Naveira";
+ };
+ xnwdd = {
+ email = "nwdd+nixos@no.team";
+ github = "xnwdd";
+ githubId = 3028542;
+ name = "Guillermo NWDD";
+ };
+ xrelkd = {
+ email = "46590321+xrelkd@users.noreply.github.com";
+ github = "xrelkd";
+ githubId = 46590321;
+ name = "xrelkd";
+ };
+ xurei = {
+ email = "olivier.bourdoux@gmail.com";
+ github = "xurei";
+ githubId = 621695;
+ name = "Olivier Bourdoux";
+ };
+ xvapx = {
+ email = "marti.serra.coscollano@gmail.com";
+ github = "xvapx";
+ githubId = 11824817;
+ name = "Marti Serra";
+ };
+ xwvvvvwx = {
+ email = "davidterry@posteo.de";
+ github = "xwvvvvwx";
+ githubId = 6689924;
+ name = "David Terry";
+ };
+ xzfc = {
+ email = "xzfcpw@gmail.com";
+ github = "xzfc";
+ githubId = 5121426;
+ name = "Albert Safin";
+ };
+ y0no = {
+ email = "y0no@y0no.fr";
+ github = "y0no";
+ name = "Yoann Ono";
+ };
+ yarny = {
+ email = "41838844+Yarny0@users.noreply.github.com";
+ github = "Yarny0";
+ githubId = 41838844;
+ name = "Yarny";
+ };
+ yarr = {
+ email = "savraz@gmail.com";
+ github = "Eternity-Yarr";
+ githubId = 3705333;
+ name = "Dmitry V.";
+ };
+ yegortimoshenko = {
+ email = "yegortimoshenko@riseup.net";
+ github = "yegortimoshenko";
+ githubId = 1643293;
+ name = "Yegor Timoshenko";
+ };
+ yesbox = {
+ email = "jesper.geertsen.jonsson@gmail.com";
+ github = "yesbox";
+ githubId = 4113027;
+ name = "Jesper Geertsen Jonsson";
+ };
+ ylwghst = {
+ email = "ylwghst@onionmail.info";
+ github = "ylwghst";
+ githubId = 26011724;
+ name = "Burim Augustin Berisa";
+ };
+ yochai = {
+ email = "yochai@titat.info";
+ github = "yochai";
+ githubId = 1322201;
+ name = "Yochai";
+ };
+ yorickvp = {
+ email = "yorickvanpelt@gmail.com";
+ github = "yorickvp";
+ githubId = 647076;
+ name = "Yorick van Pelt";
+ };
+ yrashk = {
+ email = "yrashk@gmail.com";
+ github = "yrashk";
+ githubId = 452;
+ name = "Yurii Rashkovskii";
+ };
+ ysndr = {
+ email = "me@ysndr.de";
+ github = "ysndr";
+ githubId = 7040031;
+ name = "Yannik Sander";
+ };
+ yuriaisaka = {
+ email = "yuri.aisaka+nix@gmail.com";
+ github = "yuriaisaka";
+ githubId = 687198;
+ name = "Yuri Aisaka";
+ };
+ yurrriq = {
+ email = "eric@ericb.me";
+ github = "yurrriq";
+ githubId = 1866448;
+ name = "Eric Bailey";
+ };
+ z77z = {
+ email = "maggesi@math.unifi.it";
+ github = "maggesi";
+ githubId = 1809783;
+ name = "Marco Maggesi";
+ };
+ zachcoyle = {
+ email = "zach.coyle@gmail.com";
+ github = "zachcoyle";
+ githubId = 908716;
+ name = "Zach Coyle";
+ };
+ zagy = {
+ email = "cz@flyingcircus.io";
+ github = "zagy";
+ githubId = 568532;
+ name = "Christian Zagrodnick";
+ };
+ zalakain = {
+ email = "ping@umazalakain.info";
+ github = "umazalakain";
+ name = "Uma Zalakain";
+ };
+ zaninime = {
+ email = "francesco@zanini.me";
+ github = "zaninime";
+ githubId = 450885;
+ name = "Francesco Zanini";
+ };
+ zarelit = {
+ email = "david@zarel.net";
+ github = "zarelit";
+ githubId = 3449926;
+ name = "David Costa";
+ };
+ zauberpony = {
+ email = "elmar@athmer.org";
+ github = "zauberpony";
+ githubId = 250877;
+ name = "Elmar Athmer";
+ };
+ zef = {
+ email = "zef@zef.me";
+ name = "Zef Hemel";
+ };
+ zgrannan = {
+ email = "zgrannan@gmail.com";
+ github = "zgrannan";
+ githubId = 1141948;
+ name = "Zack Grannan";
+ };
+ zimbatm = {
+ email = "zimbatm@zimbatm.com";
+ github = "zimbatm";
+ githubId = 3248;
+ name = "zimbatm";
+ };
+ Zimmi48 = {
+ email = "theo.zimmermann@univ-paris-diderot.fr";
+ github = "Zimmi48";
+ githubId = 1108325;
+ name = "Théo Zimmermann";
+ };
+ zohl = {
+ email = "zohl@fmap.me";
+ github = "zohl";
+ githubId = 6067895;
+ name = "Al Zohali";
+ };
+ zookatron = {
+ email = "tim@zookatron.com";
+ github = "zookatron";
+ githubId = 1772064;
+ name = "Tim Zook";
+ };
+ zoomulator = {
+ email = "zoomulator@gmail.com";
+ github = "zoomulator";
+ githubId = 1069303;
+ name = "Kim Simmons";
+ };
+ zraexy = {
+ email = "zraexy@gmail.com";
+ github = "zraexy";
+ githubId = 8100652;
+ name = "David Mell";
+ };
+ zx2c4 = {
+ email = "Jason@zx2c4.com";
+ github = "zx2c4";
+ githubId = 10643;
+ name = "Jason A. Donenfeld";
+ };
+ zzamboni = {
+ email = "diego@zzamboni.org";
+ github = "zzamboni";
+ githubId = 32876;
+ name = "Diego Zamboni";
+ };
+ turbomack = {
+ email = "marek.faj@gmail.com";
+ github = "turboMaCk";
+ githubId = 2130305;
+ name = "Marek Fajkus";
+ };
+ melling = {
+ email = "mattmelling@fastmail.com";
+ github = "mattmelling";
+ githubId = 1215331;
+ name = "Matt Melling";
+ };
+ wd15 = {
+ email = "daniel.wheeler2@gmail.com";
+ github = "wd15";
+ githubId = 1986844;
+ name = "Daniel Wheeler";
+ };
+}
diff --git a/nixpkgs/maintainers/scripts/all-tarballs.nix b/nixpkgs/maintainers/scripts/all-tarballs.nix
new file mode 100644
index 00000000000..6a4de8a4b95
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/all-tarballs.nix
@@ -0,0 +1,16 @@
+/* Helper expression for copy-tarballs. This returns (nearly) all
+ tarballs used the free packages in Nixpkgs.
+
+ Typical usage:
+
+ $ copy-tarballs.pl --expr 'import <nixpkgs/maintainers/scripts/all-tarballs.nix>'
+*/
+
+import ../../pkgs/top-level/release.nix
+ { # Don't apply ‘hydraJob’ to jobs, because then we can't get to the
+ # dependency graph.
+ scrubJobs = false;
+ # No need to evaluate on i686.
+ supportedSystems = [ "x86_64-linux" ];
+ limitedSupportedSystems = [];
+ }
diff --git a/nixpkgs/maintainers/scripts/check-maintainer-github-handles.sh b/nixpkgs/maintainers/scripts/check-maintainer-github-handles.sh
new file mode 100755
index 00000000000..879a2e452cb
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/check-maintainer-github-handles.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p jq parallel
+
+# Example how to work with the `lib.maintainers` attrset.
+# Can be used to check whether all user handles are still valid.
+
+set -e
+
+# nixpkgs='<nixpkgs>'
+# if [ -n "$1" ]; then
+
+function checkCommits {
+ local user="$1"
+ local tmp=$(mktemp)
+ curl --silent -w "%{http_code}" \
+ "https://github.com/NixOS/nixpkgs/commits?author=$user" \
+ > "$tmp"
+ # the last line of tmp contains the http status
+ local status=$(tail -n1 "$tmp")
+ local ret=
+ case $status in
+ 200) if <"$tmp" grep -i "no commits found" > /dev/null; then
+ ret=1
+ else
+ ret=0
+ fi
+ ;;
+ # because of github’s hard request limits, this can take some time
+ 429) sleep 2
+ printf "."
+ checkCommits "$user"
+ ret=$?
+ ;;
+ *) printf "BAD STATUS: $(tail -n1 $tmp) for %s\n" "$user"; ret=1
+ ret=1
+ ;;
+ esac
+ rm "$tmp"
+ return $ret
+}
+export -f checkCommits
+
+function checkUser {
+ local user="$1"
+ local status=
+ status="$(curl --silent --head "https://github.com/${user}" | grep Status)"
+ # checks whether a user handle can be found on github
+ if [[ "$status" =~ 404 ]]; then
+ printf "%s\t\t\t\t%s\n" "$status" "$user"
+ # checks whether the user handle has any nixpkgs commits
+ elif checkCommits "$user"; then
+ printf "OK!\t\t\t\t%s\n" "$user"
+ else
+ printf "No Commits!\t\t\t%s\n" "$user"
+ fi
+}
+export -f checkUser
+
+# output the maintainers set as json
+# and filter out the github username of each maintainer (if it exists)
+# then check some at the same time
+nix-instantiate -A lib.maintainers --eval --strict --json \
+ | jq -r '.[]|.github|select(.)' \
+ | parallel -j5 checkUser
+
+# parallel -j100 checkUser ::: "eelco" "profpatsch" "Profpatsch" "a"
diff --git a/nixpkgs/maintainers/scripts/copy-tarballs.pl b/nixpkgs/maintainers/scripts/copy-tarballs.pl
new file mode 100755
index 00000000000..59696a4432d
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/copy-tarballs.pl
@@ -0,0 +1,226 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i perl -p perl perlPackages.NetAmazonS3 perlPackages.FileSlurp perlPackages.JSON perlPackages.LWPProtocolHttps nixUnstable nixUnstable.perl-bindings
+
+# This command uploads tarballs to tarballs.nixos.org, the
+# content-addressed cache used by fetchurl as a fallback for when
+# upstream tarballs disappear or change. Usage:
+#
+# 1) To upload one or more files:
+#
+# $ copy-tarballs.pl --file /path/to/tarball.tar.gz
+#
+# 2) To upload all files obtained via calls to fetchurl in a Nix derivation:
+#
+# $ copy-tarballs.pl --expr '(import <nixpkgs> {}).hello'
+
+use strict;
+use warnings;
+use File::Basename;
+use File::Path;
+use File::Slurp;
+use JSON;
+use Net::Amazon::S3;
+use Nix::Store;
+
+isValidPath("/nix/store/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-foo"); # FIXME: forces Nix::Store initialisation
+
+sub usage {
+ die "Syntax: $0 [--dry-run] [--exclude REGEXP] [--expr EXPR | --file FILES...]\n";
+}
+
+my $dryRun = 0;
+my $expr;
+my @fileNames;
+my $exclude;
+
+while (@ARGV) {
+ my $flag = shift @ARGV;
+
+ if ($flag eq "--expr") {
+ $expr = shift @ARGV or die "--expr requires an argument";
+ } elsif ($flag eq "--file") {
+ @fileNames = @ARGV;
+ last;
+ } elsif ($flag eq "--dry-run") {
+ $dryRun = 1;
+ } elsif ($flag eq "--exclude") {
+ $exclude = shift @ARGV or die "--exclude requires an argument";
+ } else {
+ usage();
+ }
+}
+
+
+# S3 setup.
+my $aws_access_key_id = $ENV{'AWS_ACCESS_KEY_ID'} or die "AWS_ACCESS_KEY_ID not set\n";
+my $aws_secret_access_key = $ENV{'AWS_SECRET_ACCESS_KEY'} or die "AWS_SECRET_ACCESS_KEY not set\n";
+
+my $s3 = Net::Amazon::S3->new(
+ { aws_access_key_id => $aws_access_key_id,
+ aws_secret_access_key => $aws_secret_access_key,
+ retry => 1,
+ host => "s3-eu-west-1.amazonaws.com",
+ });
+
+my $bucket = $s3->bucket("nixpkgs-tarballs") or die;
+
+my $doWrite = 0;
+my $cacheFile = ($ENV{"HOME"} or die "\$HOME is not set") . "/.cache/nix/copy-tarballs";
+my %cache;
+$cache{$_} = 1 foreach read_file($cacheFile, err_mode => 'quiet', chomp => 1);
+$doWrite = 1;
+
+END() {
+ File::Path::mkpath(dirname($cacheFile), 0, 0755);
+ write_file($cacheFile, map { "$_\n" } keys %cache) if $doWrite;
+}
+
+sub alreadyMirrored {
+ my ($algo, $hash) = @_;
+ my $key = "$algo/$hash";
+ return 1 if defined $cache{$key};
+ my $res = defined $bucket->get_key($key);
+ $cache{$key} = 1 if $res;
+ return $res;
+}
+
+sub uploadFile {
+ my ($fn, $name) = @_;
+
+ my $md5_16 = hashFile("md5", 0, $fn) or die;
+ my $sha1_16 = hashFile("sha1", 0, $fn) or die;
+ my $sha256_32 = hashFile("sha256", 1, $fn) or die;
+ my $sha256_16 = hashFile("sha256", 0, $fn) or die;
+ my $sha512_32 = hashFile("sha512", 1, $fn) or die;
+ my $sha512_16 = hashFile("sha512", 0, $fn) or die;
+
+ my $mainKey = "sha512/$sha512_16";
+
+ # Create redirects from the other hash types.
+ sub redirect {
+ my ($name, $dest) = @_;
+ #print STDERR "linking $name to $dest...\n";
+ $bucket->add_key($name, "", {
+ 'x-amz-website-redirect-location' => "/" . $dest,
+ 'x-amz-acl' => "public-read"
+ })
+ or die "failed to create redirect from $name to $dest\n";
+ $cache{$name} = 1;
+ }
+ redirect "md5/$md5_16", $mainKey;
+ redirect "sha1/$sha1_16", $mainKey;
+ redirect "sha256/$sha256_32", $mainKey;
+ redirect "sha256/$sha256_16", $mainKey;
+ redirect "sha512/$sha512_32", $mainKey;
+
+ # Upload the file as sha512/<hash-in-base-16>.
+ print STDERR "uploading $fn to $mainKey...\n";
+ $bucket->add_key_filename($mainKey, $fn, {
+ 'x-amz-meta-original-name' => $name,
+ 'x-amz-acl' => "public-read"
+ })
+ or die "failed to upload $fn to $mainKey\n";
+ $cache{$mainKey} = 1;
+}
+
+if (scalar @fileNames) {
+ my $res = 0;
+ foreach my $fn (@fileNames) {
+ eval {
+ if (alreadyMirrored("sha512", hashFile("sha512", 0, $fn))) {
+ print STDERR "$fn is already mirrored\n";
+ } else {
+ uploadFile($fn, basename $fn);
+ }
+ };
+ if ($@) {
+ warn "$@";
+ $res = 1;
+ }
+ }
+ exit $res;
+}
+
+elsif (defined $expr) {
+
+ # Evaluate find-tarballs.nix.
+ my $pid = open(JSON, "-|", "nix-instantiate", "--eval", "--json", "--strict",
+ "<nixpkgs/maintainers/scripts/find-tarballs.nix>",
+ "--arg", "expr", $expr);
+ my $stdout = <JSON>;
+ waitpid($pid, 0);
+ die "$0: evaluation failed\n" if $?;
+ close JSON;
+
+ my $fetches = decode_json($stdout);
+
+ print STDERR "evaluation returned ", scalar(@{$fetches}), " tarballs\n";
+
+ # Check every fetchurl call discovered by find-tarballs.nix.
+ my $mirrored = 0;
+ my $have = 0;
+ foreach my $fetch (sort { $a->{url} cmp $b->{url} } @{$fetches}) {
+ my $url = $fetch->{url};
+ my $algo = $fetch->{type};
+ my $hash = $fetch->{hash};
+ my $name = $fetch->{name};
+
+ if (defined $ENV{DEBUG}) {
+ print "$url $algo $hash\n";
+ next;
+ }
+
+ if ($url !~ /^http:/ && $url !~ /^https:/ && $url !~ /^ftp:/ && $url !~ /^mirror:/) {
+ print STDERR "skipping $url (unsupported scheme)\n";
+ next;
+ }
+
+ next if defined $exclude && $url =~ /$exclude/;
+
+ if (alreadyMirrored($algo, $hash)) {
+ $have++;
+ next;
+ }
+
+ my $storePath = makeFixedOutputPath(0, $algo, $hash, $name);
+
+ print STDERR "mirroring $url ($storePath)...\n";
+
+ if ($dryRun) {
+ $mirrored++;
+ next;
+ }
+
+ # Substitute the output.
+ if (!isValidPath($storePath)) {
+ system("nix-store", "-r", $storePath);
+ }
+
+ # Otherwise download the file using nix-prefetch-url.
+ if (!isValidPath($storePath)) {
+ $ENV{QUIET} = 1;
+ $ENV{PRINT_PATH} = 1;
+ my $fh;
+ my $pid = open($fh, "-|", "nix-prefetch-url", "--type", $algo, $url, $hash) or die;
+ waitpid($pid, 0) or die;
+ if ($? != 0) {
+ print STDERR "failed to fetch $url: $?\n";
+ next;
+ }
+ <$fh>; my $storePath2 = <$fh>; chomp $storePath2;
+ if ($storePath ne $storePath2) {
+ warn "strange: $storePath != $storePath2\n";
+ next;
+ }
+ }
+
+ uploadFile($storePath, $url);
+ $mirrored++;
+ }
+
+ print STDERR "mirrored $mirrored files, already have $have files\n";
+}
+
+else {
+ usage();
+}
diff --git a/nixpkgs/maintainers/scripts/debian-patches.sh b/nixpkgs/maintainers/scripts/debian-patches.sh
new file mode 100755
index 00000000000..b4923fb537e
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/debian-patches.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# Download patches from debian project
+# Usage $0 debian-patches.txt debian-patches.nix
+# An example input and output files can be found in applications/graphics/xara/
+
+DEB_URL=https://sources.debian.org/data/main
+declare -a deb_patches
+mapfile -t deb_patches < $1
+
+# First letter
+deb_prefix="${deb_patches[0]:0:1}"
+prefix="${DEB_URL}/${deb_prefix}/${deb_patches[0]}/debian/patches"
+
+if [[ -n "$2" ]]; then
+ exec 1> $2
+fi
+
+cat <<EOF
+# Generated by $(basename $0) from $(basename $1)
+let
+ prefix = "${prefix}";
+in
+[
+EOF
+for ((i=1;i < ${#deb_patches[@]}; ++i)); do
+ url="${prefix}/${deb_patches[$i]}"
+ sha256=$(nix-prefetch-url $url)
+ echo " {"
+ echo " url = \"\${prefix}/${deb_patches[$i]}\";"
+ echo " sha256 = \"$sha256\";"
+ echo " }"
+done
+echo "]"
diff --git a/nixpkgs/maintainers/scripts/dep-licenses.sh b/nixpkgs/maintainers/scripts/dep-licenses.sh
new file mode 100755
index 00000000000..28ad22c334f
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/dep-licenses.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+attr=$1
+
+: ${NIXPKGS=/etc/nixos/nixpkgs}
+
+tmp=$(mktemp --tmpdir -d nixpkgs-dep-license.XXXXXX)
+
+exitHandler() {
+ exitCode=$?
+ rm -rf "$tmp"
+ exit $exitCode
+}
+
+trap "exitHandler" EXIT
+
+# fetch the trace and the drvPath of the attribute.
+nix-instantiate $NIXPKGS -A $attr --show-trace > "$tmp/drvPath" 2> "$tmp/trace" || {
+ cat 1>&2 - "$tmp/trace" <<EOF
+An error occurred while evaluating $attr.
+EOF
+ exit 1
+}
+
+# generate a sed script based on the trace output.
+sed '
+ \,@:.*:@, {
+ # \1 *.drv file
+ # \2 License terms
+ s,.*@:drv:\(.*\):\(.*\):@.*,s!\1!\1: \2!; t;,
+ s!Str(\\\"\([^,]*\)\\\",\[\])!\1!g
+ b
+ }
+ d
+' "$tmp/trace" > "$tmp/filter.sed"
+
+if test $(wc -l "$tmp/filter.sed" | sed 's/ .*//') == 0; then
+ echo 1>&2 "
+No derivation mentionned in the stack trace. Either your derivation does
+not use stdenv.mkDerivation or you forgot to use the stdenv adapter named
+traceDrvLicenses.
+
+- defaultStdenv = allStdenvs.stdenv;
++ defaultStdenv = traceDrvLicenses allStdenvs.stdenv;
+"
+ exit 1
+fi
+
+
+# remove all dependencies which are using stdenv.mkDerivation
+echo '
+d
+' >> "$tmp/filter.sed"
+
+nix-store -q --tree $(cat "$tmp/drvPath") | sed -f "$tmp/filter.sed"
+
+exit 0;
diff --git a/nixpkgs/maintainers/scripts/eval-release.nix b/nixpkgs/maintainers/scripts/eval-release.nix
new file mode 100644
index 00000000000..bb9572cbc79
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/eval-release.nix
@@ -0,0 +1,24 @@
+# Evaluate `release.nix' like Hydra would. Too bad nix-instantiate
+# can't to do this.
+
+with import ../../lib;
+
+let
+ trace = if builtins.getEnv "VERBOSE" == "1" then builtins.trace else (x: y: y);
+
+ rel = removeAttrs (import ../../pkgs/top-level/release.nix { }) [ "tarball" "unstable" "xbursttools" ];
+
+ # Add the ‘recurseForDerivations’ attribute to ensure that
+ # nix-instantiate recurses into nested attribute sets.
+ recurse = path: attrs:
+ if (builtins.tryEval attrs).success then
+ if isDerivation attrs
+ then
+ if (builtins.tryEval attrs.drvPath).success
+ then { inherit (attrs) name drvPath; }
+ else { failed = true; }
+ else { recurseForDerivations = true; } //
+ mapAttrs (n: v: let path' = path ++ [n]; in trace path' (recurse path' v)) attrs
+ else { };
+
+in recurse [] rel
diff --git a/nixpkgs/maintainers/scripts/eval-release.sh b/nixpkgs/maintainers/scripts/eval-release.sh
new file mode 100755
index 00000000000..e0dfaf1de74
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/eval-release.sh
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+if [[ -z "$VERBOSE" ]]; then
+ echo "You may set VERBOSE=1 to see debug output or to any other non-empty string to make this script completely silent"
+fi
+unset HOME NIXPKGS_CONFIG # Force empty config
+
+# With the default heap size (380MB), nix-instantiate fails:
+# Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS
+export GC_INITIAL_HEAP_SIZE=${GC_INITIAL_HEAP_SIZE:-2000000000} # 2GB
+nix-instantiate --strict --eval-only --xml --show-trace "$(dirname "$0")"/eval-release.nix 2>&1 > /dev/null
diff --git a/nixpkgs/maintainers/scripts/fetch-kde-qt.sh b/nixpkgs/maintainers/scripts/fetch-kde-qt.sh
new file mode 100755
index 00000000000..a267a5fa871
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/fetch-kde-qt.sh
@@ -0,0 +1,61 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils findutils gnused nix wget
+
+set -efuo pipefail
+
+SRCS=
+if [ -d "$1" ]; then
+ SRCS="$(pwd)/$1/srcs.nix"
+ . "$1/fetch.sh"
+else
+ SRCS="$(pwd)/$(dirname $1)/srcs.nix"
+ . "$1"
+fi
+
+tmp=$(mktemp -d)
+pushd $tmp >/dev/null
+wget -nH -r -c --no-parent "${WGET_ARGS[@]}" -A '*.tar.xz.sha256' -A '*.mirrorlist' >/dev/null
+find -type f -name '*.mirrorlist' -delete
+
+csv=$(mktemp)
+find . -type f | while read src; do
+ # Sanitize file name
+ filename=$(gawk '{ print $2 }' "$src" | tr '@' '_')
+ nameVersion="${filename%.tar.*}"
+ name=$(echo "$nameVersion" | sed -e 's,-[[:digit:]].*,,' | sed -e 's,-opensource-src$,,' | sed -e 's,-everywhere-src$,,')
+ version=$(echo "$nameVersion" | sed -e 's,^\([[:alpha:]][[:alnum:]]*-\)\+,,')
+ echo "$name,$version,$src,$filename" >>$csv
+done
+
+cat >"$SRCS" <<EOF
+# DO NOT EDIT! This file is generated automatically by fetch-kde-qt.sh
+{ fetchurl, mirror }:
+
+{
+EOF
+
+gawk -F , "{ print \$1 }" $csv | sort | uniq | while read name; do
+ versions=$(gawk -F , "/^$name,/ { print \$2 }" $csv)
+ latestVersion=$(echo "$versions" | sort -rV | head -n 1)
+ src=$(gawk -F , "/^$name,$latestVersion,/ { print \$3 }" $csv)
+ filename=$(gawk -F , "/^$name,$latestVersion,/ { print \$4 }" $csv)
+ url="$(dirname "${src:2}")/$filename"
+ sha256=$(gawk '{ print $1 }' "$src")
+ cat >>"$SRCS" <<EOF
+ $name = {
+ version = "$latestVersion";
+ src = fetchurl {
+ url = "\${mirror}/$url";
+ sha256 = "$sha256";
+ name = "$filename";
+ };
+ };
+EOF
+done
+
+echo "}" >>"$SRCS"
+
+popd >/dev/null
+rm -fr $tmp >/dev/null
+
+rm -f $csv >/dev/null
diff --git a/nixpkgs/maintainers/scripts/find-tarballs.nix b/nixpkgs/maintainers/scripts/find-tarballs.nix
new file mode 100644
index 00000000000..52cce909918
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/find-tarballs.nix
@@ -0,0 +1,50 @@
+# This expression returns a list of all fetchurl calls used by ‘expr’.
+
+with import ../.. { };
+with lib;
+
+{ expr }:
+
+let
+
+ root = expr;
+
+ uniqueUrls = map (x: x.file) (genericClosure {
+ startSet = map (file: { key = file.url; inherit file; }) urls;
+ operator = const [ ];
+ });
+
+ urls = map (drv: { url = head (drv.urls or [ drv.url ]); hash = drv.outputHash; type = drv.outputHashAlgo; name = drv.name; }) fetchurlDependencies;
+
+ fetchurlDependencies =
+ filter
+ (drv: drv.outputHash or "" != "" && drv.outputHashMode or "flat" == "flat"
+ && drv.postFetch or "" == "" && (drv ? url || drv ? urls))
+ dependencies;
+
+ dependencies = map (x: x.value) (genericClosure {
+ startSet = map keyDrv (derivationsIn' root);
+ operator = { key, value }: map keyDrv (immediateDependenciesOf value);
+ });
+
+ derivationsIn' = x:
+ if !canEval x then []
+ else if isDerivation x then optional (canEval x.drvPath) x
+ else if isList x then concatLists (map derivationsIn' x)
+ else if isAttrs x then concatLists (mapAttrsToList (n: v: addErrorContext "while finding tarballs in '${n}':" (derivationsIn' v)) x)
+ else [ ];
+
+ keyDrv = drv: if canEval drv.drvPath then { key = drv.drvPath; value = drv; } else { };
+
+ immediateDependenciesOf = drv:
+ concatLists (mapAttrsToList (n: v: derivationsIn v) (removeAttrs drv ["meta" "passthru"]));
+
+ derivationsIn = x:
+ if !canEval x then []
+ else if isDerivation x then optional (canEval x.drvPath) x
+ else if isList x then concatLists (map derivationsIn x)
+ else [ ];
+
+ canEval = val: (builtins.tryEval val).success;
+
+in uniqueUrls
diff --git a/nixpkgs/maintainers/scripts/hydra-eval-failures.py b/nixpkgs/maintainers/scripts/hydra-eval-failures.py
new file mode 100755
index 00000000000..6e7ec2dbc00
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/hydra-eval-failures.py
@@ -0,0 +1,112 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p 'python3.withPackages(ps: with ps; [ requests pyquery click ])'
+
+# To use, just execute this script with --help to display help.
+
+import subprocess
+import json
+import sys
+
+import click
+import requests
+from pyquery import PyQuery as pq
+
+def map_dict (f, d):
+ for k,v in d.items():
+ d[k] = f(v)
+
+maintainers_json = subprocess.check_output([
+ 'nix-instantiate', '-A', 'lib.maintainers', '--eval', '--strict', '--json'
+])
+maintainers = json.loads(maintainers_json)
+MAINTAINERS = map_dict(lambda v: v.get('github', None), maintainers)
+
+def get_response_text(url):
+ return pq(requests.get(url).text) # IO
+
+EVAL_FILE = {
+ 'nixos': 'nixos/release.nix',
+ 'nixpkgs': 'pkgs/top-level/release.nix',
+}
+
+
+def get_maintainers(attr_name):
+ try:
+ nixname = attr_name.split('.')
+ meta_json = subprocess.check_output([
+ 'nix-instantiate',
+ '--eval',
+ '--strict',
+ '-A',
+ '.'.join(nixname[1:]) + '.meta',
+ EVAL_FILE[nixname[0]],
+ '--arg',
+ 'nixpkgs',
+ './.',
+ '--json'])
+ meta = json.loads(meta_json)
+ return meta.get('maintainers', [])
+ except:
+ return []
+
+def filter_github_users(maintainers):
+ github_only = []
+ for i in maintainers:
+ if i.get('github'):
+ github_only.append(i)
+ return github_only
+
+def print_build(table_row):
+ a = pq(table_row)('a')[1]
+ print("- [ ] [{}]({})".format(a.text, a.get('href')), flush=True)
+
+ job_maintainers = filter_github_users(get_maintainers(a.text))
+ if job_maintainers:
+ print(" - maintainers: {}".format(" ".join(map(lambda u: '@' + u.get('github'), job_maintainers))))
+ # TODO: print last three persons that touched this file
+ # TODO: pinpoint the diff that broke this build, or maybe it's transient or maybe it never worked?
+
+ sys.stdout.flush()
+
+@click.command()
+@click.option(
+ '--jobset',
+ default="nixos/release-19.09",
+ help='Hydra project like nixos/release-19.09')
+def cli(jobset):
+ """
+ Given a Hydra project, inspect latest evaluation
+ and print a summary of failed builds
+ """
+
+ url = "http://hydra.nixos.org/jobset/{}".format(jobset)
+
+ # get the last evaluation
+ click.echo(click.style(
+ 'Getting latest evaluation for {}'.format(url), fg='green'))
+ d = get_response_text(url)
+ evaluations = d('#tabs-evaluations').find('a[class="row-link"]')
+ latest_eval_url = evaluations[0].get('href')
+
+ # parse last evaluation page
+ click.echo(click.style(
+ 'Parsing evaluation {}'.format(latest_eval_url), fg='green'))
+ d = get_response_text(latest_eval_url + '?full=1')
+
+ # TODO: aborted evaluations
+ # TODO: dependency failed without propagated builds
+ print('\nFailures:')
+ for tr in d('img[alt="Failed"]').parents('tr'):
+ print_build(tr)
+
+ print('\nDependency failures:')
+ for tr in d('img[alt="Dependency failed"]').parents('tr'):
+ print_build(tr)
+
+
+
+if __name__ == "__main__":
+ try:
+ cli()
+ except Exception as e:
+ import pdb;pdb.post_mortem()
diff --git a/nixpkgs/maintainers/scripts/hydra_eval_check b/nixpkgs/maintainers/scripts/hydra_eval_check
new file mode 100755
index 00000000000..c8e03424f32
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/hydra_eval_check
@@ -0,0 +1,13 @@
+#! /bin/sh
+
+# give absolute path of release.nix as argument
+hydra_eval_jobs \
+ --argstr system x86_64-linux \
+ --argstr system i686-linux \
+ --argstr system x86_64-darwin \
+ --argstr system i686-cygwin \
+ --argstr system x86_64-cygwin \
+ --argstr system i686-freebsd \
+ --arg officialRelease false \
+ --arg nixpkgs "{ outPath = builtins.storePath ./. ; rev = 1234; }" \
+ $@
diff --git a/nixpkgs/maintainers/scripts/luarocks-config.lua b/nixpkgs/maintainers/scripts/luarocks-config.lua
new file mode 100644
index 00000000000..89e74c00ea8
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/luarocks-config.lua
@@ -0,0 +1,4 @@
+rocks_servers = {
+ "https://luarocks.org"
+}
+version_check_on_fail = false
diff --git a/nixpkgs/maintainers/scripts/luarocks-packages.csv b/nixpkgs/maintainers/scripts/luarocks-packages.csv
new file mode 100644
index 00000000000..a6fbcd5a0be
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/luarocks-packages.csv
@@ -0,0 +1,70 @@
+# nix name, luarocks name, server, version,luaversion,maintainers
+alt-getopt,,,,,arobyn
+ansicolors,,,,,
+argparse,,,,,
+basexx,,,,,
+binaryheap,,,,,vcunat
+bit32,,,,lua5_1,lblasc
+busted,,,,,
+cjson,lua-cjson,,,,
+compat53,,,,,vcunat
+coxpcall,,,1.17.0-1,,
+cqueues,,,,,vcunat
+cyrussasl,,,,,vcunat
+digestif,,http://luarocks.org/dev,,lua5_3,
+dkjson,,,,,
+fifo,,,,,
+http,,,,,vcunat
+inspect,,,,,
+ldoc,,,,,
+lgi,,,,,
+ljsyscall,,,,lua5_1,lblasc
+lpeg,,,,,vyp
+lpeg_patterns,,,,,
+lpeglabel,,,,,
+lpty,,,,,
+lrexlib-gnu,,,,,
+lrexlib-pcre,,,,,vyp
+lrexlib-posix,,,,,
+ltermbox,,,,,
+lua-cmsgpack,,,,,
+lua-iconv,,,,,
+lua-lsp,,http://luarocks.org/dev,,,
+lua-messagepack,,,,,
+lua-term,,,,,
+lua-toml,,,,,
+lua-zlib,,,,,koral
+lua_cliargs,,,,,
+luabitop,,,,,
+luacheck,,,,,
+luadbi,,,,,
+luadbi-mysql,,,,,
+luadbi-postgresql,,,,,
+luadbi-sqlite3,,,,,
+luaevent,,,,,
+luaexpat,,,1.3.0-1,,arobyn flosse
+luaffi,,http://luarocks.org/dev,,,
+luafilesystem,,,1.7.0-2,,flosse vcunat
+luaossl,,,,lua5_1,vcunat
+luaposix,,,,,vyp lblasc
+luasec,,,,,flosse
+luasocket,,,,,
+luasql-sqlite3,,,,,vyp
+luassert,,,,,
+luasystem,,,,,
+luautf8,,,,,pstn
+luazip,,,,,
+lua-yajl,,,,,pstn
+luuid,,,,,
+luv,,,,,
+markdown,,,,,
+mediator_lua,,,,,
+mpack,,,,,
+moonscript,,,,,arobyn
+nvim-client,,,,,
+penlight,,,,,
+rapidjson,,,,,
+say,,,,,
+std__debug,std._debug,,,,
+std_normalize,std.normalize,,,,
+stdlib,,,,,vyp
diff --git a/nixpkgs/maintainers/scripts/nix-call-package b/nixpkgs/maintainers/scripts/nix-call-package
new file mode 100755
index 00000000000..be478fca2b7
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/nix-call-package
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+echo "let pkgs = import <nixpkgs$2> {}; x = pkgs.callPackage $1 { $3 }; in ${4:-x}" |
+nix-instantiate --show-trace - |
+xargs nix-store -r -K
diff --git a/nixpkgs/maintainers/scripts/nix-diff.sh b/nixpkgs/maintainers/scripts/nix-diff.sh
new file mode 100755
index 00000000000..0c65e29cf43
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/nix-diff.sh
@@ -0,0 +1,277 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils gnugrep gnused
+
+################################################################################
+# nix-diff.sh #
+################################################################################
+# This script "diffs" Nix profile generations. #
+# #
+# Example: #
+################################################################################
+# > nix-diff.sh 90 92 #
+# + gnumake-4.2.1 #
+# + gnumake-4.2.1-doc #
+# - htmldoc-1.8.29 #
+################################################################################
+# The example shows that as of generation 92 and since generation 90, #
+# gnumake-4.2.1 and gnumake-4.2.1-doc have been installed, while #
+# htmldoc-1.8.29 has been removed. #
+# #
+# The example above shows the default, minimal output mode of this script. #
+# For more features, run `nix-diff.sh -h` for usage instructions. #
+################################################################################
+
+usage() {
+ cat <<EOF
+usage: nix-diff.sh [-h | [-p profile | -s] [-q] [-l] [range]]
+-h: print this message before exiting
+-q: list the derivations installed in the parent generation
+-l: diff every available intermediate generation between parent and
+ child
+-p profile: specify the Nix profile to use
+ * defaults to ~/.nix-profile
+-s: use the system profile
+ * equivalent to: -p /nix/var/nix/profiles/system
+profile: * should be something like /nix/var/nix/profiles/default, not a
+ generation link like /nix/var/nix/profiles/default-2-link
+range: the range of generations to diff
+ * the following patterns are allowed, where A, B, and N are positive
+ integers, and G is the currently active generation:
+ A..B => diffs from generation A to generation B
+ ~N => diffs from the Nth newest generation (older than G) to G
+ A => diffs from generation A to G
+ * defaults to ~1
+EOF
+}
+
+usage_tip() {
+ echo 'run `nix-diff.sh -h` for usage instructions' >&2
+ exit 1
+}
+
+while getopts :hqlp:s opt; do
+ case $opt in
+ h)
+ usage
+ exit
+ ;;
+ q)
+ opt_query=1
+ ;;
+ l)
+ opt_log=1
+ ;;
+ p)
+ opt_profile=$OPTARG
+ ;;
+ s)
+ opt_profile=/nix/var/nix/profiles/system
+ ;;
+ \?)
+ echo "error: invalid option -$OPTARG" >&2
+ usage_tip
+ ;;
+ esac
+done
+shift $((OPTIND-1))
+
+if [ -n "$opt_profile" ]; then
+ if ! [ -L "$opt_profile" ]; then
+ echo "error: expecting \`$opt_profile\` to be a symbolic link" >&2
+ usage_tip
+ fi
+else
+ opt_profile=$(readlink ~/.nix-profile)
+ if (( $? != 0 )); then
+ echo 'error: unable to dereference `~/.nix-profile`' >&2
+ echo 'specify the profile manually with the `-p` flag' >&2
+ usage_tip
+ fi
+fi
+
+list_gens() {
+ nix-env -p "$opt_profile" --list-generations \
+ | sed -r 's:^\s*::' \
+ | cut -d' ' -f1
+}
+
+current_gen() {
+ nix-env -p "$opt_profile" --list-generations \
+ | grep -E '\(current\)\s*$' \
+ | sed -r 's:^\s*::' \
+ | cut -d' ' -f1
+}
+
+neg_gen() {
+ local i=0 from=$1 n=$2 tmp
+ for gen in $(list_gens | sort -rn); do
+ if ((gen < from)); then
+ tmp=$gen
+ ((i++))
+ ((i == n)) && break
+ fi
+ done
+ if ((i < n)); then
+ echo -n "error: there aren't $n generation(s) older than" >&2
+ echo " generation $from" >&2
+ return 1
+ fi
+ echo $tmp
+}
+
+match() {
+ argv=("$@")
+ for i in $(seq $(($#-1))); do
+ if grep -E "^${argv[$i]}\$" <(echo "$1") >/dev/null; then
+ echo $i
+ return
+ fi
+ done
+ echo 0
+}
+
+case $(match "$1" '' '[0-9]+' '[0-9]+\.\.[0-9]+' '~[0-9]+') in
+ 1)
+ diffTo=$(current_gen)
+ diffFrom=$(neg_gen $diffTo 1)
+ (($? == 1)) && usage_tip
+ ;;
+ 2)
+ diffFrom=$1
+ diffTo=$(current_gen)
+ ;;
+ 3)
+ diffFrom=${1%%.*}
+ diffTo=${1##*.}
+ ;;
+ 4)
+ diffTo=$(current_gen)
+ diffFrom=$(neg_gen $diffTo ${1#*~})
+ (($? == 1)) && usage_tip
+ ;;
+ 0)
+ echo 'error: invalid invocation' >&2
+ usage_tip
+ ;;
+esac
+
+dirA="${opt_profile}-${diffFrom}-link"
+dirB="${opt_profile}-${diffTo}-link"
+
+declare -a temp_files
+temp_length() {
+ echo -n ${#temp_files[@]}
+}
+temp_make() {
+ temp_files[$(temp_length)]=$(mktemp)
+}
+temp_clean() {
+ rm -f ${temp_files[@]}
+}
+temp_name() {
+ echo -n "${temp_files[$(($(temp_length)-1))]}"
+}
+trap 'temp_clean' EXIT
+
+temp_make
+versA=$(temp_name)
+refs=$(nix-store -q --references "$dirA")
+(( $? != 0 )) && exit 1
+echo "$refs" \
+ | grep -v env-manifest.nix \
+ | sort \
+ > "$versA"
+
+print_tag() {
+ local gen=$1
+ nix-env -p "$opt_profile" --list-generations \
+ | grep -E "^\s*${gen}" \
+ | sed -r 's:^\s*::' \
+ | sed -r 's:\s*$::'
+}
+
+if [ -n "$opt_query" ]; then
+ print_tag $diffFrom
+ cat "$versA" \
+ | sed -r 's:^[^-]+-(.*)$: \1:'
+
+ print_line=1
+fi
+
+if [ -n "$opt_log" ]; then
+ gens=$(for gen in $(list_gens); do
+ ((diffFrom < gen && gen < diffTo)) && echo $gen
+ done)
+ # Force the $diffTo generation to be included in this list, instead of using
+ # `gen <= diffTo` in the preceding loop, so we encounter an error upon the
+ # event of its nonexistence.
+ gens=$(echo "$gens"
+ echo $diffTo)
+else
+ gens=$diffTo
+fi
+
+temp_make
+add=$(temp_name)
+temp_make
+rem=$(temp_name)
+temp_make
+out=$(temp_name)
+
+for gen in $gens; do
+
+ [ -n "$print_line" ] && echo
+
+ temp_make
+ versB=$(temp_name)
+
+ dirB="${opt_profile}-${gen}-link"
+ refs=$(nix-store -q --references "$dirB")
+ (( $? != 0 )) && exit 1
+ echo "$refs" \
+ | grep -v env-manifest.nix \
+ | sort \
+ > "$versB"
+
+ in=$(comm -3 -1 "$versA" "$versB")
+ sed -r 's:^[^-]*-(.*)$:\1+:' <(echo "$in") \
+ | sort -f \
+ > "$add"
+
+ un=$(comm -3 -2 "$versA" "$versB")
+ sed -r 's:^[^-]*-(.*)$:\1-:' <(echo "$un") \
+ | sort -f \
+ > "$rem"
+
+ cat "$rem" "$add" \
+ | sort -f \
+ | sed -r 's:(.*)-$:- \1:' \
+ | sed -r 's:(.*)\+$:\+ \1:' \
+ | grep -v '^$' \
+ > "$out"
+
+ if [ -n "$opt_query" -o -n "$opt_log" ]; then
+
+ lines=$(wc -l "$out" | cut -d' ' -f1)
+ tag=$(print_tag "$gen")
+ (( $? != 0 )) && exit 1
+ if [ $lines -eq 0 ]; then
+ echo "$tag (no change)"
+ else
+ echo "$tag"
+ fi
+ cat "$out" \
+ | sed 's:^: :'
+
+ print_line=1
+
+ else
+ echo "diffing from generation $diffFrom to $diffTo"
+ cat "$out"
+ fi
+
+ versA=$versB
+
+done
+
+exit 0
diff --git a/nixpkgs/maintainers/scripts/nix-generate-from-cpan.nix b/nixpkgs/maintainers/scripts/nix-generate-from-cpan.nix
new file mode 100644
index 00000000000..5c4cf0f6c55
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/nix-generate-from-cpan.nix
@@ -0,0 +1,25 @@
+{ stdenv, makeWrapper, perl, perlPackages }:
+
+stdenv.mkDerivation {
+ name = "nix-generate-from-cpan-3";
+
+ buildInputs = with perlPackages; [
+ makeWrapper perl GetoptLongDescriptive CPANPLUS Readonly LogLog4perl
+ ];
+
+ phases = [ "installPhase" ];
+
+ installPhase =
+ ''
+ mkdir -p $out/bin
+ cp ${./nix-generate-from-cpan.pl} $out/bin/nix-generate-from-cpan
+ patchShebangs $out/bin/nix-generate-from-cpan
+ wrapProgram $out/bin/nix-generate-from-cpan --set PERL5LIB $PERL5LIB
+ '';
+
+ meta = {
+ maintainers = with stdenv.lib.maintainers; [ eelco rycee ];
+ description = "Utility to generate a Nix expression for a Perl package from CPAN";
+ platforms = stdenv.lib.platforms.unix;
+ };
+}
diff --git a/nixpkgs/maintainers/scripts/nix-generate-from-cpan.pl b/nixpkgs/maintainers/scripts/nix-generate-from-cpan.pl
new file mode 100755
index 00000000000..e04d3713e9a
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/nix-generate-from-cpan.pl
@@ -0,0 +1,471 @@
+#!/usr/bin/env perl
+
+use utf8;
+use strict;
+use warnings;
+
+use CPAN::Meta();
+use CPANPLUS::Backend();
+use Getopt::Long::Descriptive qw( describe_options );
+use JSON::PP qw( encode_json );
+use Log::Log4perl qw(:easy);
+use Readonly();
+
+# Readonly hash that maps CPAN style license strings to information
+# necessary to generate a Nixpkgs style license attribute.
+Readonly::Hash my %LICENSE_MAP => (
+
+ # The Perl 5 License (Artistic 1 & GPL 1 or later).
+ perl_5 => {
+ licenses => [qw( artistic1 gpl1Plus )]
+ },
+
+ # GNU Affero General Public License, Version 3.
+ agpl_3 => {
+ licenses => [qw( agpl3Plus )],
+ amb => 1
+ },
+
+ # Apache Software License, Version 1.1.
+ apache_1_1 => {
+ licenses => ["Apache License 1.1"],
+ in_set => 0
+ },
+
+ # Apache License, Version 2.0.
+ apache_2_0 => {
+ licenses => [qw( asl20 )]
+ },
+
+ # Artistic License, (Version 1).
+ artistic_1 => {
+ licenses => [qw( artistic1 )]
+ },
+
+ # Artistic License, Version 2.0.
+ artistic_2 => {
+ licenses => [qw( artistic2 )]
+ },
+
+ # BSD License (three-clause).
+ bsd => {
+ licenses => [qw( bsd3 )],
+ amb => 1
+ },
+
+ # FreeBSD License (two-clause).
+ freebsd => {
+ licenses => [qw( bsd2 )]
+ },
+
+ # GNU Free Documentation License, Version 1.2.
+ gfdl_1_2 => {
+ licenses => [qw( fdl12 )]
+ },
+
+ # GNU Free Documentation License, Version 1.3.
+ gfdl_1_3 => {
+ licenses => [qw( fdl13 )]
+ },
+
+ # GNU General Public License, Version 1.
+ gpl_1 => {
+ licenses => [qw( gpl1Plus )],
+ amb => 1
+ },
+
+ # GNU General Public License, Version 2. Note, we will interpret
+ # "gpl" alone as GPL v2+.
+ gpl_2 => {
+ licenses => [qw( gpl2Plus )],
+ amb => 1
+ },
+
+ # GNU General Public License, Version 3.
+ gpl_3 => {
+ licenses => [qw( gpl3Plus )],
+ amb => 1
+ },
+
+ # GNU Lesser General Public License, Version 2.1. Note, we will
+ # interpret "gpl" alone as LGPL v2.1+.
+ lgpl_2_1 => {
+ licenses => [qw( lgpl21Plus )],
+ amb => 1
+ },
+
+ # GNU Lesser General Public License, Version 3.0.
+ lgpl_3_0 => {
+ licenses => [qw( lgpl3Plus )],
+ amb => 1
+ },
+
+ # MIT (aka X11) License.
+ mit => {
+ licenses => [qw( mit )]
+ },
+
+ # Mozilla Public License, Version 1.0.
+ mozilla_1_0 => {
+ licenses => [qw( mpl10 )]
+ },
+
+ # Mozilla Public License, Version 1.1.
+ mozilla_1_1 => {
+ licenses => [qw( mpl11 )]
+ },
+
+ # OpenSSL License.
+ openssl => {
+ licenses => [qw( openssl )]
+ },
+
+ # Q Public License, Version 1.0.
+ qpl_1_0 => {
+ licenses => [qw( qpl )]
+ },
+
+ # Original SSLeay License.
+ ssleay => {
+ licenses => ["Original SSLeay License"],
+ in_set => 0
+ },
+
+ # Sun Internet Standards Source License (SISSL).
+ sun => {
+ licenses => ["Sun Industry Standards Source License v1.1"],
+ in_set => 0
+ },
+
+ # zlib License.
+ zlib => {
+ licenses => [qw( zlib )]
+ },
+
+ # Other Open Source Initiative (OSI) approved license.
+ open_source => {
+ licenses => [qw( free )],
+ amb => 1
+ },
+
+ # Requires special permission from copyright holder.
+ restricted => {
+ licenses => [qw( unfree )],
+ amb => 1
+ },
+
+ # Not an OSI approved license, but not restricted. Note, we
+ # currently map this to unfreeRedistributable, which is a
+ # conservative choice.
+ unrestricted => {
+ licenses => [qw( unfreeRedistributable )],
+ amb => 1
+ },
+
+ # License not provided in metadata.
+ unknown => {
+ licenses => [qw( unknown )],
+ amb => 1
+ }
+);
+
+sub handle_opts {
+ my ( $opt, $usage ) = describe_options(
+ 'usage: $0 %o MODULE',
+ [ 'maintainer|m=s', 'the package maintainer' ],
+ [ 'debug|d', 'enable debug output' ],
+ [ 'help', 'print usage message and exit' ]
+ );
+
+ if ( $opt->help ) {
+ print $usage->text;
+ exit;
+ }
+
+ my $module_name = $ARGV[0];
+
+ if ( !defined $module_name ) {
+ print STDERR "Missing module name\n";
+ print STDERR $usage->text;
+ exit 1;
+ }
+
+ return ( $opt, $module_name );
+}
+
+# Takes a Perl package attribute name and returns 1 if the name cannot
+# be referred to as a bareword. This typically happens if the package
+# name is a reserved Nix keyword.
+sub is_reserved {
+ my ($pkg) = @_;
+
+ return $pkg =~ /^(?: assert |
+ else |
+ if |
+ import |
+ in |
+ inherit |
+ let |
+ rec |
+ then |
+ while |
+ with )$/x;
+}
+
+sub pkg_to_attr {
+ my ($module) = @_;
+ my $attr_name = $module->package_name;
+ if ( $attr_name eq "libwww-perl" ) {
+ return "LWP";
+ }
+ else {
+ $attr_name =~ s/-//g;
+ return $attr_name;
+ }
+}
+
+sub get_pkg_name {
+ my ($module) = @_;
+ return ( $module->package_name, $module->package_version =~ s/^v(\d)/$1/r );
+}
+
+sub read_meta {
+ my ($pkg_path) = @_;
+
+ my $yaml_path = "$pkg_path/META.yml";
+ my $json_path = "$pkg_path/META.json";
+ my $meta;
+
+ if ( -r $json_path ) {
+ $meta = CPAN::Meta->load_file($json_path);
+ }
+ elsif ( -r $yaml_path ) {
+ $meta = CPAN::Meta->load_file($yaml_path);
+ }
+ else {
+ WARN("package has no META.yml or META.json");
+ }
+
+ return $meta;
+}
+
+# Map a module to the attribute corresponding to its package
+# (e.g. HTML::HeadParser will be mapped to HTMLParser, because that
+# module is in the HTML-Parser package).
+sub module_to_pkg {
+ my ( $cb, $module_name ) = @_;
+ my @modules = $cb->search( type => "name", allow => [$module_name] );
+ if ( scalar @modules == 0 ) {
+
+ # Fallback.
+ $module_name =~ s/:://g;
+ return $module_name;
+ }
+ my $module = $modules[0];
+ my $attr_name = pkg_to_attr($module);
+ DEBUG("mapped dep $module_name to $attr_name");
+ return $attr_name;
+}
+
+sub get_deps {
+ my ( $cb, $meta, $type ) = @_;
+
+ return if !defined $meta;
+
+ my $prereqs = $meta->effective_prereqs;
+ my $deps = $prereqs->requirements_for( $type, "requires" );
+ my @res;
+ foreach my $n ( $deps->required_modules ) {
+ next if $n eq "perl";
+
+ # Figure out whether the module is a core module by attempting
+ # to `use` the module in a pure Perl interpreter and checking
+ # whether it succeeded. Note, $^X is a magic variable holding
+ # the path to the running Perl interpreter.
+ if ( system("env -i $^X -M$n -e1 >/dev/null 2>&1") == 0 ) {
+ DEBUG("skipping Perl-builtin module $n");
+ next;
+ }
+
+ my $pkg = module_to_pkg( $cb, $n );
+
+ # If the package name is reserved then we need to refer to it
+ # through the "self" variable.
+ $pkg = "self.\"$pkg\"" if is_reserved($pkg);
+
+ push @res, $pkg;
+ }
+ return @res;
+}
+
+sub uniq {
+ return keys %{ { map { $_ => 1 } @_ } };
+}
+
+sub render_license {
+ my ($cpan_license) = @_;
+
+ return if !defined $cpan_license;
+
+ my $licenses;
+
+ # If the license is ambiguous then we'll print an extra warning.
+ # For example, "gpl_2" is ambiguous since it may refer to exactly
+ # "GPL v2" or to "GPL v2 or later".
+ my $amb = 0;
+
+ # Whether the license is available inside `stdenv.lib.licenses`.
+ my $in_set = 1;
+
+ my $nix_license = $LICENSE_MAP{$cpan_license};
+ if ( !$nix_license ) {
+ WARN("Unknown license: $cpan_license");
+ $licenses = [$cpan_license];
+ $in_set = 0;
+ }
+ else {
+ $licenses = $nix_license->{licenses};
+ $amb = $nix_license->{amb};
+ $in_set = !$nix_license->{in_set};
+ }
+
+ my $license_line;
+
+ if ( @$licenses == 0 ) {
+
+ # Avoid defining the license line.
+ }
+ elsif ($in_set) {
+ my $lic = 'stdenv.lib.licenses';
+ if ( @$licenses == 1 ) {
+ $license_line = "$lic.$licenses->[0]";
+ }
+ else {
+ $license_line = "with $lic; [ " . join( ' ', @$licenses ) . " ]";
+ }
+ }
+ else {
+ if ( @$licenses == 1 ) {
+ $license_line = $licenses->[0];
+ }
+ else {
+ $license_line = '[ ' . join( ' ', @$licenses ) . ' ]';
+ }
+ }
+
+ INFO("license: $cpan_license");
+ WARN("License '$cpan_license' is ambiguous, please verify") if $amb;
+
+ return $license_line;
+}
+
+my ( $opt, $module_name ) = handle_opts();
+
+Log::Log4perl->easy_init(
+ {
+ level => $opt->debug ? $DEBUG : $INFO,
+ layout => '%m%n'
+ }
+);
+
+my $cb = CPANPLUS::Backend->new;
+
+my @modules = $cb->search( type => "name", allow => [$module_name] );
+die "module $module_name not found\n" if scalar @modules == 0;
+die "multiple packages that match module $module_name\n" if scalar @modules > 1;
+my $module = $modules[0];
+
+my ($pkg_name, $pkg_version) = get_pkg_name $module;
+my $attr_name = pkg_to_attr $module;
+
+INFO( "attribute name: ", $attr_name );
+INFO( "module: ", $module->module );
+INFO( "version: ", $module->version );
+INFO( "package: ", $module->package, " (", "$pkg_name-$pkg_version", ", ", $attr_name, ")" );
+INFO( "path: ", $module->path );
+
+my $tar_path = $module->fetch();
+INFO( "downloaded to: ", $tar_path );
+INFO( "sha-256: ", $module->status->checksum_value );
+
+my $pkg_path = $module->extract();
+INFO( "unpacked to: ", $pkg_path );
+
+my $meta = read_meta($pkg_path);
+
+DEBUG( "metadata: ", encode_json( $meta->as_struct ) ) if defined $meta;
+
+my @runtime_deps = sort( uniq( get_deps( $cb, $meta, "runtime" ) ) );
+INFO("runtime deps: @runtime_deps");
+
+my @build_deps = sort( uniq(
+ get_deps( $cb, $meta, "configure" ),
+ get_deps( $cb, $meta, "build" ),
+ get_deps( $cb, $meta, "test" )
+) );
+
+# Filter out runtime dependencies since those are already handled.
+my %in_runtime_deps = map { $_ => 1 } @runtime_deps;
+@build_deps = grep { not $in_runtime_deps{$_} } @build_deps;
+
+INFO("build deps: @build_deps");
+
+my $homepage = $meta ? $meta->resources->{homepage} : undef;
+INFO("homepage: $homepage") if defined $homepage;
+
+my $description = $meta ? $meta->abstract : undef;
+if ( defined $description ) {
+ $description = uc( substr( $description, 0, 1 ) )
+ . substr( $description, 1 ); # capitalise first letter
+ $description =~ s/\.$//; # remove period at the end
+ $description =~ s/\s*$//;
+ $description =~ s/^\s*//;
+ $description =~ s/\n+/ /; # Replace new lines by space.
+ INFO("description: $description");
+}
+
+#print(Data::Dumper::Dumper($meta->licenses) . "\n");
+my $license = $meta ? render_license( $meta->licenses ) : undef;
+
+INFO( "RSS feed: https://metacpan.org/feed/distribution/",
+ $module->package_name );
+
+my $build_fun = -e "$pkg_path/Build.PL"
+ && !-e "$pkg_path/Makefile.PL" ? "buildPerlModule" : "buildPerlPackage";
+
+print STDERR "===\n";
+
+print <<EOF;
+ ${\(is_reserved($attr_name) ? "\"$attr_name\"" : $attr_name)} = $build_fun {
+ pname = "$pkg_name";
+ version = "$pkg_version";
+ src = fetchurl {
+ url = "mirror://cpan/${\$module->path}/${\$module->package}";
+ sha256 = "${\$module->status->checksum_value}";
+ };
+EOF
+print <<EOF if scalar @build_deps > 0;
+ buildInputs = [ @build_deps ];
+EOF
+print <<EOF if scalar @runtime_deps > 0;
+ propagatedBuildInputs = [ @runtime_deps ];
+EOF
+print <<EOF;
+ meta = {
+EOF
+print <<EOF if defined $homepage;
+ homepage = $homepage;
+EOF
+print <<EOF if defined $description && $description ne "Unknown";
+ description = "$description";
+EOF
+print <<EOF if defined $license;
+ license = $license;
+EOF
+print <<EOF if $opt->maintainer;
+ maintainers = [ maintainers.${\$opt->maintainer} ];
+EOF
+print <<EOF;
+ };
+ };
+EOF
diff --git a/nixpkgs/maintainers/scripts/nixpkgs-lint.nix b/nixpkgs/maintainers/scripts/nixpkgs-lint.nix
new file mode 100644
index 00000000000..6d99c94bf33
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/nixpkgs-lint.nix
@@ -0,0 +1,23 @@
+{ stdenv, makeWrapper, perl, perlPackages }:
+
+stdenv.mkDerivation {
+ name = "nixpkgs-lint-1";
+
+ buildInputs = [ makeWrapper perl perlPackages.XMLSimple ];
+
+ dontUnpack = true;
+ buildPhase = "true";
+
+ installPhase =
+ ''
+ mkdir -p $out/bin
+ cp ${./nixpkgs-lint.pl} $out/bin/nixpkgs-lint
+ wrapProgram $out/bin/nixpkgs-lint --set PERL5LIB $PERL5LIB
+ '';
+
+ meta = {
+ maintainers = [ stdenv.lib.maintainers.eelco ];
+ description = "A utility for Nixpkgs contributors to check Nixpkgs for common errors";
+ platforms = stdenv.lib.platforms.unix;
+ };
+}
diff --git a/nixpkgs/maintainers/scripts/nixpkgs-lint.pl b/nixpkgs/maintainers/scripts/nixpkgs-lint.pl
new file mode 100755
index 00000000000..638d1b2aaa1
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/nixpkgs-lint.pl
@@ -0,0 +1,173 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i perl -p perl perlPackages.XMLSimple
+
+use strict;
+use List::Util qw(min);
+use XML::Simple qw(:strict);
+use Getopt::Long qw(:config gnu_getopt);
+
+# Parse the command line.
+my $path = "<nixpkgs>";
+my $filter = "*";
+my $maintainer;
+
+sub showHelp {
+ print <<EOF;
+Usage: $0 [--package=NAME] [--maintainer=REGEXP] [--file=PATH]
+
+Check Nixpkgs for common errors/problems.
+
+ -p, --package filter packages by name (default is ‘*’)
+ -m, --maintainer filter packages by maintainer (case-insensitive regexp)
+ -f, --file path to Nixpkgs (default is ‘<nixpkgs>’)
+
+Examples:
+ \$ nixpkgs-lint -f /my/nixpkgs -p firefox
+ \$ nixpkgs-lint -f /my/nixpkgs -m eelco
+EOF
+ exit 0;
+}
+
+GetOptions("package|p=s" => \$filter,
+ "maintainer|m=s" => \$maintainer,
+ "file|f=s" => \$path,
+ "help" => sub { showHelp() }
+ ) or exit 1;
+
+# Evaluate Nixpkgs into an XML representation.
+my $xml = `nix-env -f '$path' -qa '$filter' --xml --meta --drv-path`;
+die "$0: evaluation of ‘$path’ failed\n" if $? != 0;
+
+my $info = XMLin($xml, KeyAttr => { 'item' => '+attrPath', 'meta' => 'name' }, ForceArray => 1, SuppressEmpty => '' ) or die "cannot parse XML output";
+
+# Check meta information.
+print "=== Package meta information ===\n\n";
+my $nrBadNames = 0;
+my $nrMissingMaintainers = 0;
+my $nrMissingPlatforms = 0;
+my $nrMissingDescriptions = 0;
+my $nrBadDescriptions = 0;
+my $nrMissingLicenses = 0;
+
+foreach my $attr (sort keys %{$info->{item}}) {
+ my $pkg = $info->{item}->{$attr};
+
+ my $pkgName = $pkg->{name};
+ my $pkgVersion = "";
+ if ($pkgName =~ /(.*)(-[0-9].*)$/) {
+ $pkgName = $1;
+ $pkgVersion = $2;
+ }
+
+ # Check the maintainers.
+ my @maintainers;
+ my $x = $pkg->{meta}->{maintainers};
+ if (defined $x && $x->{type} eq "strings") {
+ @maintainers = map { $_->{value} } @{$x->{string}};
+ } elsif (defined $x->{value}) {
+ @maintainers = ($x->{value});
+ }
+
+ if (defined $maintainer && scalar(grep { $_ =~ /$maintainer/i } @maintainers) == 0) {
+ delete $info->{item}->{$attr};
+ next;
+ }
+
+ if (scalar @maintainers == 0) {
+ print "$attr: Lacks a maintainer\n";
+ $nrMissingMaintainers++;
+ }
+
+ # Check the platforms.
+ if (!defined $pkg->{meta}->{platforms}) {
+ print "$attr: Lacks a platform\n";
+ $nrMissingPlatforms++;
+ }
+
+ # Package names should not be capitalised.
+ if ($pkgName =~ /^[A-Z]/) {
+ print "$attr: package name ‘$pkgName’ should not be capitalised\n";
+ $nrBadNames++;
+ }
+
+ if ($pkgVersion eq "") {
+ print "$attr: package has no version\n";
+ $nrBadNames++;
+ }
+
+ # Check the license.
+ if (!defined $pkg->{meta}->{license}) {
+ print "$attr: Lacks a license\n";
+ $nrMissingLicenses++;
+ }
+
+ # Check the description.
+ my $description = $pkg->{meta}->{description}->{value};
+ if (!$description) {
+ print "$attr: Lacks a description\n";
+ $nrMissingDescriptions++;
+ } else {
+ my $bad = 0;
+ if ($description =~ /^\s/) {
+ print "$attr: Description starts with whitespace\n";
+ $bad = 1;
+ }
+ if ($description =~ /\s$/) {
+ print "$attr: Description ends with whitespace\n";
+ $bad = 1;
+ }
+ if ($description =~ /\.$/) {
+ print "$attr: Description ends with a period\n";
+ $bad = 1;
+ }
+ if (index(lc($description), lc($attr)) != -1) {
+ print "$attr: Description contains package name\n";
+ $bad = 1;
+ }
+ $nrBadDescriptions++ if $bad;
+ }
+}
+
+print "\n";
+
+# Find packages that have the same name.
+print "=== Package name collisions ===\n\n";
+
+my %pkgsByName;
+
+foreach my $attr (sort keys %{$info->{item}}) {
+ my $pkg = $info->{item}->{$attr};
+ #print STDERR "attr = $attr, name = $pkg->{name}\n";
+ $pkgsByName{$pkg->{name}} //= [];
+ push @{$pkgsByName{$pkg->{name}}}, $pkg;
+}
+
+my $nrCollisions = 0;
+foreach my $name (sort keys %pkgsByName) {
+ my @pkgs = @{$pkgsByName{$name}};
+
+ # Filter attributes that are aliases of each other (e.g. yield the
+ # same derivation path).
+ my %drvsSeen;
+ @pkgs = grep { my $x = $drvsSeen{$_->{drvPath}}; $drvsSeen{$_->{drvPath}} = 1; !defined $x } @pkgs;
+
+ # Filter packages that have a lower priority.
+ my $highest = min (map { $_->{meta}->{priority}->{value} // 0 } @pkgs);
+ @pkgs = grep { ($_->{meta}->{priority}->{value} // 0) == $highest } @pkgs;
+
+ next if scalar @pkgs == 1;
+
+ $nrCollisions++;
+ print "The following attributes evaluate to a package named ‘$name’:\n";
+ print " ", join(", ", map { $_->{attrPath} } @pkgs), "\n\n";
+}
+
+print "=== Bottom line ===\n";
+print "Number of packages: ", scalar(keys %{$info->{item}}), "\n";
+print "Number of bad names: $nrBadNames\n";
+print "Number of missing maintainers: $nrMissingMaintainers\n";
+print "Number of missing platforms: $nrMissingPlatforms\n";
+print "Number of missing licenses: $nrMissingLicenses\n";
+print "Number of missing descriptions: $nrMissingDescriptions\n";
+print "Number of bad descriptions: $nrBadDescriptions\n";
+print "Number of name collisions: $nrCollisions\n";
diff --git a/nixpkgs/maintainers/scripts/patchelf-hints.sh b/nixpkgs/maintainers/scripts/patchelf-hints.sh
new file mode 100755
index 00000000000..5fdfc15dc23
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/patchelf-hints.sh
@@ -0,0 +1,84 @@
+
+usage() {
+ echo "
+$0 <path to unpacked binary distribution directory>
+
+This program return the list of libraries and where to find them based on
+your currently installed programs.
+";
+ exit 1
+}
+
+if test $# -ne 1; then
+ usage
+fi
+
+binaryDist=$1
+
+hasBinaries=false
+for bin in $(find $binaryDist -executable -type f) :; do
+ if test $bin = ":"; then
+ $hasBinaries || \
+ echo "No patchable found in this directory."
+ break
+ fi
+ hasBinaries=true
+
+ echo ""
+ echo "$bin:"
+ hasLibraries=false
+ unset interpreter
+ unset addRPath
+ for lib in $(strings $bin | grep '^\(/\|\)lib.*\.so' | sort | uniq) :; do
+ if test $lib = ":"; then
+ $hasLibraries || \
+ echo " This program is a script or it is statically linked."
+ break
+ fi
+ hasLibraries=true
+
+ echo " $lib:";
+
+ libPath=$lib
+ lib=$(basename $lib)
+
+ #versionLessLib=$(echo $lib | sed 's,[.][.0-9]*$,,')
+
+ libs="$(
+ find /nix/store/*/lib* \( -type f -or -type l \) -name $lib |
+ grep -v '\(bootstrap-tools\|system-path\|user-environment\|extra-utils\)'
+ )"
+
+ echo "$libs" |
+ sed 's,^/nix/store/[a-z0-9]*-\([^/]*\)/.*/\([^/]*\)$, \1 -> \2,' |
+ sort |
+ uniq;
+
+ names=$(
+ echo "$libs" |
+ sed 's,^/nix/store/[a-z0-9]*-\([^/]*\)-[.0-9]*/.*$,\1,' |
+ sort |
+ uniq;
+ )
+
+ if test "$names" = "glibc"; then names="stdenv.glibc"; fi
+ if echo $names | grep -c "gcc" &> /dev/null; then names="stdenv.cc.cc"; fi
+
+ if test $lib != $libPath; then
+ interpreter="--interpreter \${$names}/lib/$lib"
+ elif echo $addRPath | grep -c "$names" &> /dev/null; then
+ :
+ else
+ addRPath=${addRPath+$addRPath:}"\${$names}/lib"
+ fi
+ done;
+ $hasLibraries && \
+ echo "
+ Patchelf command:
+
+ patchelf $interpreter \\
+ ${addRPath+--set-rpath $addRPath \\
+} \$out/$bin
+
+"
+done;
diff --git a/nixpkgs/maintainers/scripts/rebuild-amount.sh b/nixpkgs/maintainers/scripts/rebuild-amount.sh
new file mode 100755
index 00000000000..1a54cada8af
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/rebuild-amount.sh
@@ -0,0 +1,127 @@
+#!/usr/bin/env bash
+set -e
+
+# --print: avoid dependency on environment
+optPrint=
+if [ "$1" == "--print" ]; then
+ optPrint=true
+ shift
+fi
+
+if [ "$#" != 1 ] && [ "$#" != 2 ]; then
+ cat <<-EOF
+ Usage: $0 [--print] commit-spec [commit-spec]
+ You need to be in a git-controlled nixpkgs tree.
+ The current state of the tree will be used if the second commit is missing.
+ EOF
+ exit 1
+fi
+
+# A slightly hacky way to get the config.
+parallel="$(echo 'config.rebuild-amount.parallel or false' | nix-repl . 2>/dev/null \
+ | grep -v '^\(nix-repl.*\)\?$' | tail -n 1 || true)"
+
+echo "Estimating rebuild amount by counting changed Hydra jobs."
+
+toRemove=()
+
+cleanup() {
+ rm -rf "${toRemove[@]}"
+}
+trap cleanup EXIT SIGINT SIGQUIT ERR
+
+MKTEMP='mktemp --tmpdir nix-rebuild-amount-XXXXXXXX'
+
+nixexpr() {
+ cat <<-EONIX
+ let
+ lib = import $1/lib;
+ hydraJobs = import $1/pkgs/top-level/release.nix
+ # Compromise: accuracy vs. resources needed for evaluation.
+ { supportedSystems = cfg.systems or [ "x86_64-linux" "x86_64-darwin" ]; };
+ cfg = (import $1 {}).config.rebuild-amount or {};
+
+ recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };
+
+ # hydraJobs leaves recurseForDerivations as empty attrmaps;
+ # that would break nix-env and we also need to recurse everywhere.
+ tweak = lib.mapAttrs
+ (name: val:
+ if name == "recurseForDerivations" then true
+ else if lib.isAttrs val && val.type or null != "derivation"
+ then recurseIntoAttrs (tweak val)
+ else val
+ );
+
+ # Some of these contain explicit references to platform(s) we want to avoid;
+ # some even (transitively) depend on ~/.nixpkgs/config.nix (!)
+ blacklist = [
+ "tarball" "metrics" "manual"
+ "darwin-tested" "unstable" "stdenvBootstrapTools"
+ "moduleSystem" "lib-tests" # these just confuse the output
+ ];
+
+ in
+ tweak (builtins.removeAttrs hydraJobs blacklist)
+ EONIX
+}
+
+# Output packages in tree $2 that weren't in $1.
+# Changing the output hash or name is taken as a change.
+# Extra nix-env parameters can be in $3
+newPkgs() {
+ # We use files instead of pipes, as running multiple nix-env processes
+ # could eat too much memory for a standard 4GiB machine.
+ local -a list
+ for i in 1 2; do
+ local l="$($MKTEMP)"
+ list[$i]="$l"
+ toRemove+=("$l")
+
+ local expr="$($MKTEMP)"
+ toRemove+=("$expr")
+ nixexpr "${!i}" > "$expr"
+
+ nix-env -f "$expr" -qaP --no-name --out-path --show-trace $3 \
+ | sort > "${list[$i]}" &
+
+ if [ "$parallel" != "true" ]; then
+ wait
+ fi
+ done
+
+ wait
+ comm -13 "${list[@]}"
+}
+
+# Prepare nixpkgs trees.
+declare -a tree
+for i in 1 2; do
+ if [ -n "${!i}" ]; then # use the given commit
+ dir="$($MKTEMP -d)"
+ tree[$i]="$dir"
+ toRemove+=("$dir")
+
+ git clone --shared --no-checkout --quiet . "${tree[$i]}"
+ (cd "${tree[$i]}" && git checkout --quiet "${!i}")
+ else #use the current tree
+ tree[$i]="$(pwd)"
+ fi
+done
+
+newlist="$($MKTEMP)"
+toRemove+=("$newlist")
+# Notes:
+# - the evaluation is done on x86_64-linux, like on Hydra.
+# - using $newlist file so that newPkgs() isn't in a sub-shell (because of toRemove)
+newPkgs "${tree[1]}" "${tree[2]}" '--argstr system "x86_64-linux"' > "$newlist"
+
+# Hacky: keep only the last word of each attribute path and sort.
+sed -n 's/\([^. ]*\.\)*\([^. ]*\) .*$/\2/p' < "$newlist" \
+ | sort | uniq -c
+
+if [ -n "$optPrint" ]; then
+ echo
+ cat "$newlist"
+fi
+
diff --git a/nixpkgs/maintainers/scripts/update-channel-branches.sh b/nixpkgs/maintainers/scripts/update-channel-branches.sh
new file mode 100755
index 00000000000..d65cf3ec5f6
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/update-channel-branches.sh
@@ -0,0 +1,112 @@
+#!/bin/sh
+set -e
+
+: ${NIXOS_CHANNELS:=https://nixos.org/channels/}
+: ${CHANNELS_NAMESPACE:=refs/heads/channels/}
+
+# List all channels which are currently in the repository which we would
+# have to remove if they are not found again.
+deadChannels=$(git for-each-ref --format="%(refname)" "$CHANNELS_NAMESPACE")
+
+updateRef() {
+ local channelName=$1
+ local newRev=$2
+
+ # if the inputs are not valid, then we do not update any branch.
+ test -z "$newRev" -o -z "$channelName" && return;
+
+ # Update the local refs/heads/channels/* branches to be in-sync with the
+ # channel references.
+ local branch=$CHANNELS_NAMESPACE$channelName
+ oldRev=$(git rev-parse --short "$branch" 2>/dev/null || true)
+ if test "$oldRev" != "$newRev"; then
+ if git update-ref "$branch" "$newRev" 2>/dev/null; then
+ if test -z "$oldRev"; then
+ echo " * [new branch] $newRev -> ${branch#refs/heads/}"
+ else
+ echo " $oldRev..$newRev -> ${branch#refs/heads/}"
+ fi
+ else
+ if test -z "$oldRev"; then
+ echo " * [missing rev] $newRev -> ${branch#refs/heads/}"
+ else
+ echo " [missing rev] $oldRev..$newRev -> ${branch#refs/heads/}"
+ fi
+ fi
+ fi
+
+ # Filter out the current channel from the list of dead channels.
+ deadChannels=$(grep -v "$CHANNELS_NAMESPACE$channelName" <<EOF
+$deadChannels
+EOF
+) ||true
+}
+
+# Find the name of all channels which are listed in the directory.
+echo "Fetching channels from $NIXOS_CHANNELS:"
+for channelName in : $(curl -s "$NIXOS_CHANNELS" | sed -n '/folder/ { s,.*href=",,; s,/".*,,; p }'); do
+ test "$channelName" = : && continue;
+
+ # Do not follow redirections, such that we can extract the
+ # short-changeset from the name of the directory where we are
+ # redirected to.
+ sha1=$(curl -sI "$NIXOS_CHANNELS$channelName" | sed -n '/Location/ { s,.*\.\([a-f0-9]*\)[ \r]*$,\1,; p; }')
+
+ updateRef "remotes/$channelName" "$sha1"
+done
+
+echo "Fetching channels from nixos-version:"
+if currentSystem=$(nixos-version 2>/dev/null); then
+ # If the system is entirely build from a custom nixpkgs version,
+ # then the version is not annotated in git version. This sed
+ # expression is basically matching that the expressions end with
+ # ".<sha1> (Name)" to extract the sha1.
+ sha1=$(echo "$currentSystem" | sed -n 's,^.*\.\([a-f0-9]*\) *(.*)$,\1,; T skip; p; :skip;')
+
+ updateRef current-system "$sha1"
+fi
+
+echo "Fetching channels from $HOME/.nix-defexpr:"
+for revFile in : $(find -L "$HOME/.nix-defexpr/" -maxdepth 4 -name svn-revision); do
+ test "$revFile" = : && continue;
+
+ # Deconstruct a path such as, into:
+ #
+ # /home/luke/.nix-defexpr/channels_root/nixos/nixpkgs/svn-revision
+ # channelName = root/nixos
+ #
+ # /home/luke/.nix-defexpr/channels/nixpkgs/svn-revision
+ # channelName = nixpkgs
+ #
+ user=${revFile#*.nix-defexpr/channels}
+ repo=${user#*/}
+ repo=${repo%%/*}
+ user=${user%%/*}
+ user=${user#_}
+ test -z "$user" && user=$USER
+ channelName="$user${user:+/}$repo"
+
+ sha1=$(sed -n 's,^.*\.\([a-f0-9]*\)$,\1,; T skip; p; :skip;' "$revFile")
+
+ updateRef "$channelName" "$sha1"
+done
+
+# Suggest to remove channel branches which are no longer found by this
+# script. This is to handle the cases where a local/remote channel
+# disappear. We should not attempt to remove manually any branches, as they
+# might be user branches.
+if test -n "$deadChannels"; then
+
+ echo "
+Some old channel branches are still in your repository, if you
+want to remove them, run the following command(s):
+"
+
+ while read branch; do
+ echo " git update-ref -d $branch"
+ done <<EOF
+$deadChannels
+EOF
+
+ echo
+fi
diff --git a/nixpkgs/maintainers/scripts/update-discord b/nixpkgs/maintainers/scripts/update-discord
new file mode 100755
index 00000000000..23ec6e401be
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/update-discord
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# script to generate `pkgs/networking/instant-messengers/discord/default.nix`
+
+set -e
+exec >${1:?usage: $0 <output-file>}
+
+cat <<EOF
+{ branch ? "stable", pkgs }:
+
+let
+ inherit (pkgs) callPackage fetchurl;
+in {
+EOF
+
+for branch in "" ptb canary; do
+ url=$(curl -sI "https://discordapp.com/api/download${branch:+/}${branch}?platform=linux&format=tar.gz" | grep -oP 'location: \K\S+')
+ version=${url##https://dl*.discordapp.net/apps/linux/}
+ version=${version%%/*.tar.gz}
+ echo " ${branch:-stable} = callPackage ./base.nix {"
+ echo " pname = \"discord${branch:+-}${branch}\";"
+ case $branch in
+ "") suffix="" ;;
+ ptb) suffix="PTB" ;;
+ canary) suffix="Canary" ;;
+ esac
+ echo " binaryName = \"Discord${suffix}\";"
+ echo " desktopName = \"Discord${suffix:+ }${suffix}\";"
+ echo " version = \"${version}\";"
+ echo " src = fetchurl {"
+ echo " url = \"${url}\";"
+ echo " sha256 = \"$(nix-prefetch-url "$url")\";"
+ echo " };"
+ echo " };"
+done
+
+echo "}.\${branch}"
diff --git a/nixpkgs/maintainers/scripts/update-luarocks-packages b/nixpkgs/maintainers/scripts/update-luarocks-packages
new file mode 100755
index 00000000000..1a31d71086f
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/update-luarocks-packages
@@ -0,0 +1,136 @@
+#!/usr/bin/env nix-shell
+#!nix-shell update-luarocks-shell.nix -i bash
+
+# You'll likely want to use
+# ``
+# nixpkgs $ maintainers/scripts/update-luarocks-packages pkgs/development/lua-modules/generated-packages.nix
+# ``
+# to update all libraries in that folder.
+# to debug, redirect stderr to stdout with 2>&1
+
+# stop the script upon C-C
+set -eu -o pipefail
+
+CSV_FILE="maintainers/scripts/luarocks-packages.csv"
+TMP_FILE="$(mktemp)"
+# Set in the update-luarocks-shell.nix
+NIXPKGS_PATH="$LUAROCKS_NIXPKGS_PATH"
+export LUAROCKS_CONFIG="$NIXPKGS_PATH/maintainers/scripts/luarocks-config.lua"
+
+# 10 is a pretty arbitrary number of simultaneous jobs, but it is generally
+# impolite to hit a webserver with *too* many simultaneous connections :)
+PARALLEL_JOBS=10
+
+exit_trap() {
+ local lc="$BASH_COMMAND" rc=$?
+ test $rc -eq 0 || echo -e "*** error $rc: $lc.\nGenerated temporary file in $TMP_FILE" >&2
+}
+
+print_help() {
+ echo "Usage: $0 <GENERATED_FILE>"
+ echo "(most likely pkgs/development/lua-modules/generated-packages.nix)"
+ echo ""
+ echo " -c <CSV_FILE> to set the list of luarocks package to generate"
+ exit 1
+}
+
+if [ $# -lt 1 ]; then
+ print_help
+ exit 1
+fi
+
+trap exit_trap EXIT
+
+while getopts ":hc:" opt; do
+ case $opt in
+ h)
+ print_help
+ ;;
+ c)
+ echo "Loading package list from $OPTARG !" >&2
+ CSV_FILE="$OPTARG"
+ ;;
+ \?)
+ echo "Invalid option: -$OPTARG" >&2
+ ;;
+ esac
+ shift $((OPTIND - 1))
+done
+
+GENERATED_NIXFILE="$1"
+
+HEADER="
+/* ${GENERATED_NIXFILE} is an auto-generated file -- DO NOT EDIT!
+Regenerate it with:
+nixpkgs$ ${0} ${GENERATED_NIXFILE}
+
+These packages are manually refined in lua-overrides.nix
+*/
+{ self, stdenv, fetchurl, fetchgit, pkgs, ... } @ args:
+self: super:
+with self;
+{
+"
+
+FOOTER="
+}
+/* GENERATED */
+"
+
+function convert_pkg() {
+ nix_pkg_name="$1"
+ lua_pkg_name="$2"
+ server="$3"
+ pkg_version="$4"
+ lua_version="$5"
+ maintainers="$6"
+
+ if [ "${nix_pkg_name:0:1}" == "#" ]; then
+ echo "Skipping comment ${*}" >&2
+ return
+ fi
+ if [ -z "$lua_pkg_name" ]; then
+ echo "Using nix_name as lua_pkg_name for '$nix_pkg_name'" >&2
+ lua_pkg_name="$nix_pkg_name"
+ fi
+
+ echo "Building expression for $lua_pkg_name (version $pkg_version) from server [$server]" >&2
+ luarocks_args=(nix)
+ if [[ -n $server ]]; then
+ luarocks_args+=("--only-server=$server")
+ fi
+ if [[ -n $maintainers ]]; then
+ luarocks_args+=("--maintainers=$maintainers")
+ fi
+ if [[ -n $lua_version ]]; then
+ lua_drv_path=$(nix-build --no-out-link "$NIXPKGS_PATH" -A "$lua_version")
+ luarocks_args+=("--lua-dir=$lua_drv_path/bin")
+ fi
+ luarocks_args+=("$lua_pkg_name")
+ if [[ -n $pkg_version ]]; then
+ luarocks_args+=("$pkg_version")
+ fi
+ echo "Running 'luarocks ${luarocks_args[*]}'" >&2
+ if drv="$nix_pkg_name = $(luarocks "${luarocks_args[@]}")"; then
+ echo "$drv"
+ else
+ echo "Failed to convert $nix_pkg_name" >&2
+ return 1
+ fi
+}
+
+# params needed when called via callPackage
+echo "$HEADER" | tee "$TMP_FILE"
+
+# Ensure parallel can run our bash function
+export -f convert_pkg
+export SHELL=bash
+# Read each line in the csv file and run convert_pkg for each, in parallel
+parallel --group --keep-order --halt now,fail=1 --jobs "$PARALLEL_JOBS" --colsep ',' convert_pkg {} <"$CSV_FILE" | tee -a "$TMP_FILE"
+
+# close the set
+echo "$FOOTER" | tee -a "$TMP_FILE"
+
+cp "$TMP_FILE" "$GENERATED_NIXFILE"
+
+# vim: set ts=4 sw=4 ft=sh:
diff --git a/nixpkgs/maintainers/scripts/update-luarocks-shell.nix b/nixpkgs/maintainers/scripts/update-luarocks-shell.nix
new file mode 100644
index 00000000000..23a940b3691
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/update-luarocks-shell.nix
@@ -0,0 +1,9 @@
+{ nixpkgs ? import ../.. { }
+}:
+with nixpkgs;
+mkShell {
+ buildInputs = [
+ bash luarocks-nix nix-prefetch-scripts parallel
+ ];
+ LUAROCKS_NIXPKGS_PATH = toString nixpkgs.path;
+}
diff --git a/nixpkgs/maintainers/scripts/update-python-libraries b/nixpkgs/maintainers/scripts/update-python-libraries
new file mode 100755
index 00000000000..4a6024c4038
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/update-python-libraries
@@ -0,0 +1,5 @@
+#!/bin/sh
+build=`nix-build -E "with import (fetchTarball "channel:nixpkgs-unstable") {}; python3.withPackages(ps: with ps; [ packaging requests toolz ])"`
+python=${build}/bin/python
+exec ${python} pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py $@
+
diff --git a/nixpkgs/maintainers/scripts/update-ruby-packages b/nixpkgs/maintainers/scripts/update-ruby-packages
new file mode 100755
index 00000000000..fef6b75ded0
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/update-ruby-packages
@@ -0,0 +1,13 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p bundler bundix
+
+set -euf -o pipefail
+
+(
+ cd pkgs/development/ruby-modules/with-packages
+ rm -f gemset.nix Gemfile.lock
+ bundle lock
+ bundix
+ mv gemset.nix ../../../top-level/ruby-packages.nix
+ rm -f Gemfile.lock
+)
diff --git a/nixpkgs/maintainers/scripts/update.nix b/nixpkgs/maintainers/scripts/update.nix
new file mode 100755
index 00000000000..04723cb8a36
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/update.nix
@@ -0,0 +1,157 @@
+{ package ? null
+, maintainer ? null
+, path ? null
+, max-workers ? null
+, keep-going ? null
+}:
+
+# TODO: add assert statements
+
+let
+ /* Remove duplicate elements from the list based on some extracted value. O(n^2) complexity.
+ */
+ nubOn = f: list:
+ if list == [] then
+ []
+ else
+ let
+ x = pkgs.lib.head list;
+ xs = pkgs.lib.filter (p: f x != f p) (pkgs.lib.drop 1 list);
+ in
+ [x] ++ nubOn f xs;
+
+ pkgs = import ./../../default.nix {
+ overlays = [];
+ };
+
+ packagesWith = cond: return: set:
+ nubOn (pkg: pkg.updateScript)
+ (pkgs.lib.flatten
+ (pkgs.lib.mapAttrsToList
+ (name: pkg:
+ let
+ result = builtins.tryEval (
+ if pkgs.lib.isDerivation pkg && cond name pkg
+ then [(return name pkg)]
+ else if pkg.recurseForDerivations or false || pkg.recurseForRelease or false
+ then packagesWith cond return pkg
+ else []
+ );
+ in
+ if result.success then result.value
+ else []
+ )
+ set
+ )
+ );
+
+ packagesWithUpdateScriptAndMaintainer = maintainer':
+ let
+ maintainer =
+ if ! builtins.hasAttr maintainer' pkgs.lib.maintainers then
+ builtins.throw "Maintainer with name `${maintainer'} does not exist in `maintainers/maintainer-list.nix`."
+ else
+ builtins.getAttr maintainer' pkgs.lib.maintainers;
+ in
+ packagesWith (name: pkg: builtins.hasAttr "updateScript" pkg &&
+ (if builtins.hasAttr "maintainers" pkg.meta
+ then (if builtins.isList pkg.meta.maintainers
+ then builtins.elem maintainer pkg.meta.maintainers
+ else maintainer == pkg.meta.maintainers
+ )
+ else false
+ )
+ )
+ (name: pkg: pkg)
+ pkgs;
+
+ packagesWithUpdateScript = path:
+ let
+ attrSet = pkgs.lib.attrByPath (pkgs.lib.splitString "." path) null pkgs;
+ in
+ if attrSet == null then
+ builtins.throw "Attribute path `${path}` does not exists."
+ else
+ packagesWith (name: pkg: builtins.hasAttr "updateScript" pkg)
+ (name: pkg: pkg)
+ attrSet;
+
+ packageByName = name:
+ let
+ package = pkgs.lib.attrByPath (pkgs.lib.splitString "." name) null pkgs;
+ in
+ if package == null then
+ builtins.throw "Package with an attribute name `${name}` does not exists."
+ else if ! builtins.hasAttr "updateScript" package then
+ builtins.throw "Package with an attribute name `${name}` does not have a `passthru.updateScript` attribute defined."
+ else
+ package;
+
+ packages =
+ if package != null then
+ [ (packageByName package) ]
+ else if maintainer != null then
+ packagesWithUpdateScriptAndMaintainer maintainer
+ else if path != null then
+ packagesWithUpdateScript path
+ else
+ builtins.throw "No arguments provided.\n\n${helpText}";
+
+ helpText = ''
+ Please run:
+
+ % nix-shell maintainers/scripts/update.nix --argstr maintainer garbas
+
+ to run all update scripts for all packages that lists \`garbas\` as a maintainer
+ and have \`updateScript\` defined, or:
+
+ % nix-shell maintainers/scripts/update.nix --argstr package garbas
+
+ to run update script for specific package, or
+
+ % nix-shell maintainers/scripts/update.nix --argstr path gnome3
+
+ to run update script for all package under an attribute path.
+
+ You can also add
+
+ --argstr max-workers 8
+
+ to increase the number of jobs in parallel, or
+
+ --argstr keep-going true
+
+ to continue running when a single update fails.
+ '';
+
+ packageData = package: {
+ name = package.name;
+ pname = (builtins.parseDrvName package.name).name;
+ updateScript = map builtins.toString (pkgs.lib.toList package.updateScript);
+ };
+
+ packagesJson = pkgs.writeText "packages.json" (builtins.toJSON (map packageData packages));
+
+ optionalArgs =
+ pkgs.lib.optional (max-workers != null) "--max-workers=${max-workers}"
+ ++ pkgs.lib.optional (keep-going == "true") "--keep-going";
+
+ args = [ packagesJson ] ++ optionalArgs;
+
+in pkgs.stdenv.mkDerivation {
+ name = "nixpkgs-update-script";
+ buildCommand = ''
+ echo ""
+ echo "----------------------------------------------------------------"
+ echo ""
+ echo "Not possible to update packages using \`nix-build\`"
+ echo ""
+ echo "${helpText}"
+ echo "----------------------------------------------------------------"
+ exit 1
+ '';
+ shellHook = ''
+ unset shellHook # do not contaminate nested shells
+ exec ${pkgs.python3.interpreter} ${./update.py} ${builtins.concatStringsSep " " args}
+ '';
+}
diff --git a/nixpkgs/maintainers/scripts/update.py b/nixpkgs/maintainers/scripts/update.py
new file mode 100644
index 00000000000..eb7d0ef2647
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/update.py
@@ -0,0 +1,79 @@
+import argparse
+import concurrent.futures
+import json
+import os
+import subprocess
+import sys
+
+updates = {}
+
+def eprint(*args, **kwargs):
+ print(*args, file=sys.stderr, **kwargs)
+
+def run_update_script(package):
+ eprint(f" - {package['name']}: UPDATING ...")
+
+ subprocess.run(package['updateScript'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, check=True)
+
+
+def main(max_workers, keep_going, packages):
+ with open(sys.argv[1]) as f:
+ packages = json.load(f)
+
+ eprint()
+ eprint('Going to be running update for following packages:')
+ for package in packages:
+ eprint(f" - {package['name']}")
+ eprint()
+
+ confirm = input('Press Enter key to continue...')
+ if confirm == '':
+ eprint()
+ eprint('Running update for:')
+
+ with concurrent.futures.ProcessPoolExecutor(max_workers=max_workers) as executor:
+ for package in packages:
+ updates[executor.submit(run_update_script, package)] = package
+
+ for future in concurrent.futures.as_completed(updates):
+ package = updates[future]
+
+ try:
+ future.result()
+ eprint(f" - {package['name']}: DONE.")
+ except subprocess.CalledProcessError as e:
+ eprint(f" - {package['name']}: ERROR")
+ eprint()
+ eprint(f"--- SHOWING ERROR LOG FOR {package['name']} ----------------------")
+ eprint()
+ eprint(e.stdout.decode('utf-8'))
+ with open(f"{package['pname']}.log", 'wb') as f:
+ f.write(e.stdout)
+ eprint()
+ eprint(f"--- SHOWING ERROR LOG FOR {package['name']} ----------------------")
+
+ if not keep_going:
+ sys.exit(1)
+
+ eprint()
+ eprint('Packages updated!')
+ sys.exit()
+ else:
+ eprint('Aborting!')
+ sys.exit(130)
+
+parser = argparse.ArgumentParser(description='Update packages')
+parser.add_argument('--max-workers', '-j', dest='max_workers', type=int, help='Number of updates to run concurrently', nargs='?', default=4)
+parser.add_argument('--keep-going', '-k', dest='keep_going', action='store_true', help='Do not stop after first failure')
+parser.add_argument('packages', help='JSON file containing the list of package names and their update scripts')
+
+if __name__ == '__main__':
+ args = parser.parse_args()
+
+ try:
+ main(args.max_workers, args.keep_going, args.packages)
+ except (KeyboardInterrupt, SystemExit) as e:
+ for update in updates:
+ update.cancel()
+
+ sys.exit(e.code if isinstance(e, SystemExit) else 130)
diff --git a/nixpkgs/maintainers/scripts/vanity-manual-equalities.txt b/nixpkgs/maintainers/scripts/vanity-manual-equalities.txt
new file mode 100644
index 00000000000..4a7bc3aea44
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/vanity-manual-equalities.txt
@@ -0,0 +1,7 @@
+viric viriketo@gmail.com
+Pjotr Prins pjotr.public01@thebird.nl
+Pjotr Prins pjotr.public05@thebird.nl
+Wouter den Breejen wbreejen
+MarcWeber marcweber
+Ricardo Correia Ricardo M. Correia
+ertesx@gmx.de ertes
diff --git a/nixpkgs/maintainers/scripts/vanity.sh b/nixpkgs/maintainers/scripts/vanity.sh
new file mode 100755
index 00000000000..aa7d4ec967d
--- /dev/null
+++ b/nixpkgs/maintainers/scripts/vanity.sh
@@ -0,0 +1,122 @@
+#! /bin/sh
+
+export LANG=C LC_ALL=C LC_COLLATE=C
+
+# Load git log
+raw_git_log="$(git log)"
+git_data="$(echo "$raw_git_log" | grep 'Author:' |
+ sed -e 's/^ *Author://; s/\\//g; s/^ *//; s/ *$//;
+ s/ @ .*//; s/ *[<]/\t/; s/[>]//')"
+
+# Name - nick - email correspondence from log and from maintainer list
+# Also there are a few manual entries
+maintainers="$(cat "$(dirname "$0")/../maintainer-list.nix" |
+ grep '=' | sed -re 's/\\"/''/g;
+ s/[ ]*([^ =]*)[ ]*=[ ]*" *(.*[^ ]) *[<](.*)[>] *".*/\1\t\2\t\3/')"
+git_lines="$( ( echo "$git_data";
+ cat "$(dirname "$0")/vanity-manual-equalities.txt") | sort |uniq)"
+
+emails="$(
+ ( echo "$maintainers" | cut -f 3; echo "$git_data" | cut -f 2 ) |
+ sort | uniq | grep -E ".+@.+[.].+"
+ )"
+
+fetchGithubName () {
+ commitid="$(
+ echo "$raw_git_log" | grep -B3 "Author: .*[<]$1[>]" | head -n 3 |
+ grep '^commit ' | tail -n 1 | sed -e 's/^commit //'
+ )"
+ userid="$(
+ curl https://github.com/NixOS/nixpkgs/commit/"$commitid" 2>/dev/null |
+ grep committed -B10 | grep 'href="/' |
+ sed -re 's@.* href="/@@; s@".*@@' |
+ grep -v "/commit/"
+ )";
+ echo "$userid"
+}
+
+[ -n "$NIXPKGS_GITHUB_NAME_CACHE" ] && {
+ echo "$emails" | while read email; do
+ line="$(grep "$email " "$NIXPKGS_GITHUB_NAME_CACHE")"
+ [ -z "$line" ] && {
+ echo "$email $(fetchGithubName "$email")" >> \
+ "$NIXPKGS_GITHUB_NAME_CACHE"
+ }
+ done
+}
+
+# For RDF
+normalize_name () {
+ sed -e 's/%/%25/g; s/ /%20/g; s/'\''/%27/g; s/"/%22/g; s/`/%60/g; s/\^/%5e/g; '
+}
+
+denormalize_name () {
+ sed -e 's/%20/ /g; s/%27/'\''/g; s/%22/"/g; s/%60/`/g; s/%5e/^/g; s/%25/%/g;';
+}
+
+n3="$(mktemp --suffix .n3)"
+
+# «The same person» relation and a sorting hint
+# Full name is something with a space
+(
+echo "$git_lines" | sed -re 's@(.*)\t(.*)@<my://name/\1> <my://can-be> <my://name/\2>.@'
+echo "$git_lines" | sed -re 's@(.*)\t(.*)@<my://name/\2> <my://can-be> <my://name/\1>.@'
+echo "$maintainers" | sed -re 's@(.*)\t(.*)\t(.*)@<my://name/\1> <my://can-be> <my://name/\2>.@'
+echo "$maintainers" | sed -re 's@(.*)\t(.*)\t(.*)@<my://name/\2> <my://can-be> <my://name/\3>.@'
+echo "$maintainers" | sed -re 's@(.*)\t(.*)\t(.*)@<my://name/\3> <my://can-be> <my://name/\1>.@'
+echo "$git_lines" | grep ' ' | cut -f 1 | sed -e 's@.*@<my://name/&> <my://is-name> <my://0>.@'
+echo "$git_lines" | grep -v ' ' | cut -f 1 | sed -e 's@.*@<my://name/&> <my://is-name> <my://1>.@'
+echo "$maintainers" | cut -f 2 | sed -e 's@.*@<my://name/&> <my://is-name> <my://0>.@'
+[ -n "$NIXPKGS_GITHUB_NAME_CACHE" ] && cat "$NIXPKGS_GITHUB_NAME_CACHE" |
+ grep -v " $" |
+ sed -re 's@(.*)\t(.*)@<my://name/\1> <my://at-github> <my://github/\2>.@'
+) | normalize_name | grep -E '<my://[-a-z]+>' | sort | uniq > "$n3"
+
+# Get transitive closure
+sparql="$(nix-build '<nixpkgs>' -Q -A apache-jena --no-out-link)/bin/sparql"
+name_list="$(
+ "$sparql" --results=TSV --data="$n3" "
+ select ?x ?y ?g where {
+ ?x <my://can-be>+ ?y.
+ ?x <my://is-name> ?g.
+ }
+ " | tail -n +2 |
+ sed -re 's@<my://name/@@g; s@<my://@@g; s@>@@g;' |
+ sort -k 2,3 -t ' '
+)"
+github_name_list="$(
+ "$sparql" --results=TSV --data="$n3" "
+ select ?x ?y where {
+ ?x (<my://can-be>+ / <my://at-github>) ?y.
+ }
+ " | tail -n +2 |
+ sed -re 's@<my://(name|github)/@@g; s@<my://@@g; s@>@@g;'
+)"
+
+# Take first spelling option for every person
+name_list_canonical="$(echo "$name_list" | cut -f 1,2 | uniq -f1)"
+
+cleaner_script="$(echo "$name_list_canonical" | denormalize_name |
+ sed -re 's/(.*)\t(.*)/s#^\2$#\1#g/g')"
+
+# Add github usernames
+if [ -n "$NIXPKGS_GITHUB_NAME_CACHE" ]; then
+ github_adder_script="$(mktemp)"
+ echo "$github_name_list" |
+ grep -E "$(echo "$name_list_canonical" | cut -f 2 |
+ tr '\n' '|' )" |
+ sort | uniq |
+ sed -re 's/(.*)\t(.*)/s| \1$| \1\t\2|g;/' |
+ denormalize_name > "$github_adder_script"
+else
+ github_adder_script='/dev/null'
+fi
+
+echo "$name_list" | denormalize_name
+
+echo
+
+echo "$git_data" | cut -f 1 |
+ sed -e "$cleaner_script" |
+ sort | uniq -c | sort -k1n | sed -rf "$github_adder_script" |
+ sed -re 's/^ *([0-9]+) /\1\t/'