diff options
author | Katharina Fey <kookie@spacekookie.de> | 2019-10-05 12:43:18 +0000 |
---|---|---|
committer | Katharina Fey <kookie@spacekookie.de> | 2019-10-05 12:44:52 +0000 |
commit | cf85056ba64caf3267d43255ef4a1243e9c8ee3b (patch) | |
tree | 3051519e9c8275b870aac43f80af875715c9d124 /nixpkgs/maintainers | |
parent | 1148b1d122bc03e9a3665856c9b7bb96bd4e3994 (diff) | |
parent | 2436c27541b2f52deea3a4c1691216a02152e729 (diff) |
Add 'nixpkgs/' from commit '2436c27541b2f52deea3a4c1691216a02152e729'
git-subtree-dir: nixpkgs
git-subtree-mainline: 1148b1d122bc03e9a3665856c9b7bb96bd4e3994
git-subtree-split: 2436c27541b2f52deea3a4c1691216a02152e729
Diffstat (limited to 'nixpkgs/maintainers')
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/' |