diff options
author | Atemu <atemu.main@gmail.com> | 2021-07-20 21:13:00 +0200 |
---|---|---|
committer | Atemu <atemu.main@gmail.com> | 2021-08-11 19:06:57 +0200 |
commit | 65c605a6623e155ca9d0ed3435e7f1105dc5d945 (patch) | |
tree | e77d7854fb34a7f75069a0d8a3565c919a4e2059 /lib/licenses.nix | |
parent | b59c06dc92f8d03660eb4155754d93a6c34cda83 (diff) |
lib.licenses: refactor common attribute application
This is cleaner and makes common attribute application more expandable
Diffstat (limited to 'lib/licenses.nix')
-rw-r--r-- | lib/licenses.nix | 288 |
1 files changed, 148 insertions, 140 deletions
diff --git a/lib/licenses.nix b/lib/licenses.nix index 4792f1cb5925c..55c6b81041c07 100644 --- a/lib/licenses.nix +++ b/lib/licenses.nix @@ -1,44 +1,52 @@ { lib }: -let - spdx = lic: lic // { - url = "https://spdx.org/licenses/${lic.spdxId}.html"; - }; - -in - -lib.mapAttrs (n: v: v // { shortName = n; }) ({ +lib.mapAttrs (lname: lset: let + defaultLicense = { + shortName = lname; + }; + + mkLicense = licenseDeclaration: let + applyDefaults = license: defaultLicense // license; + applySpdx = license: + if license ? spdxId + then license // { url = "https://spdx.org/licenses/${license.spdxId}.html"; } + else license; + in lib.pipe licenseDeclaration [ + applyDefaults + applySpdx + ]; +in mkLicense lset) ({ /* License identifiers from spdx.org where possible. * If you cannot find your license here, then look for a similar license or * add it to this list. The URL mentioned above is a good source for inspiration. */ - abstyles = spdx { + abstyles = { spdxId = "Abstyles"; fullName = "Abstyles License"; }; - afl20 = spdx { + afl20 = { spdxId = "AFL-2.0"; fullName = "Academic Free License v2.0"; }; - afl21 = spdx { + afl21 = { spdxId = "AFL-2.1"; fullName = "Academic Free License v2.1"; }; - afl3 = spdx { + afl3 = { spdxId = "AFL-3.0"; fullName = "Academic Free License v3.0"; }; - agpl3Only = spdx { + agpl3Only = { spdxId = "AGPL-3.0-only"; fullName = "GNU Affero General Public License v3.0 only"; }; - agpl3Plus = spdx { + agpl3Plus = { spdxId = "AGPL-3.0-or-later"; fullName = "GNU Affero General Public License v3.0 or later"; }; @@ -55,7 +63,7 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - apsl20 = spdx { + apsl20 = { spdxId = "APSL-2.0"; fullName = "Apple Public Source License 2.0"; }; @@ -65,72 +73,72 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://www.freedesktop.org/wiki/Arphic_Public_License/"; }; - artistic1 = spdx { + artistic1 = { spdxId = "Artistic-1.0"; fullName = "Artistic License 1.0"; }; - artistic2 = spdx { + artistic2 = { spdxId = "Artistic-2.0"; fullName = "Artistic License 2.0"; }; - asl20 = spdx { + asl20 = { spdxId = "Apache-2.0"; fullName = "Apache License 2.0"; }; - boost = spdx { + boost = { spdxId = "BSL-1.0"; fullName = "Boost Software License 1.0"; }; - beerware = spdx { + beerware = { spdxId = "Beerware"; fullName = "Beerware License"; }; - blueOak100 = spdx { + blueOak100 = { spdxId = "BlueOak-1.0.0"; fullName = "Blue Oak Model License 1.0.0"; }; - bsd0 = spdx { + bsd0 = { spdxId = "0BSD"; fullName = "BSD Zero Clause License"; }; - bsd1 = spdx { + bsd1 = { spdxId = "BSD-1-Clause"; fullName = "BSD 1-Clause License"; }; - bsd2 = spdx { + bsd2 = { spdxId = "BSD-2-Clause"; fullName = ''BSD 2-clause "Simplified" License''; }; - bsd2Patent = spdx { + bsd2Patent = { spdxId = "BSD-2-Clause-Patent"; fullName = "BSD-2-Clause Plus Patent License"; }; - bsd3 = spdx { + bsd3 = { spdxId = "BSD-3-Clause"; fullName = ''BSD 3-clause "New" or "Revised" License''; }; - bsdOriginal = spdx { + bsdOriginal = { spdxId = "BSD-4-Clause"; fullName = ''BSD 4-clause "Original" or "Old" License''; }; - bsdOriginalUC = spdx { + bsdOriginalUC = { spdxId = "BSD-4-Clause-UC"; fullName = "BSD 4-Clause University of California-Specific"; }; - bsdProtection = spdx { + bsdProtection = { spdxId = "BSD-Protection"; fullName = "BSD Protection License"; }; @@ -141,119 +149,119 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - clArtistic = spdx { + clArtistic = { spdxId = "ClArtistic"; fullName = "Clarified Artistic License"; }; - cc0 = spdx { + cc0 = { spdxId = "CC0-1.0"; fullName = "Creative Commons Zero v1.0 Universal"; }; - cc-by-nc-sa-20 = spdx { + cc-by-nc-sa-20 = { spdxId = "CC-BY-NC-SA-2.0"; fullName = "Creative Commons Attribution Non Commercial Share Alike 2.0"; free = false; }; - cc-by-nc-sa-25 = spdx { + cc-by-nc-sa-25 = { spdxId = "CC-BY-NC-SA-2.5"; fullName = "Creative Commons Attribution Non Commercial Share Alike 2.5"; free = false; }; - cc-by-nc-sa-30 = spdx { + cc-by-nc-sa-30 = { spdxId = "CC-BY-NC-SA-3.0"; fullName = "Creative Commons Attribution Non Commercial Share Alike 3.0"; free = false; }; - cc-by-nc-sa-40 = spdx { + cc-by-nc-sa-40 = { spdxId = "CC-BY-NC-SA-4.0"; fullName = "Creative Commons Attribution Non Commercial Share Alike 4.0"; free = false; }; - cc-by-nc-30 = spdx { + cc-by-nc-30 = { spdxId = "CC-BY-NC-3.0"; fullName = "Creative Commons Attribution Non Commercial 3.0 Unported"; free = false; }; - cc-by-nc-40 = spdx { + cc-by-nc-40 = { spdxId = "CC-BY-NC-4.0"; fullName = "Creative Commons Attribution Non Commercial 4.0 International"; free = false; }; - cc-by-nd-30 = spdx { + cc-by-nd-30 = { spdxId = "CC-BY-ND-3.0"; fullName = "Creative Commons Attribution-No Derivative Works v3.00"; free = false; }; - cc-by-sa-25 = spdx { + cc-by-sa-25 = { spdxId = "CC-BY-SA-2.5"; fullName = "Creative Commons Attribution Share Alike 2.5"; }; - cc-by-30 = spdx { + cc-by-30 = { spdxId = "CC-BY-3.0"; fullName = "Creative Commons Attribution 3.0"; }; - cc-by-sa-30 = spdx { + cc-by-sa-30 = { spdxId = "CC-BY-SA-3.0"; fullName = "Creative Commons Attribution Share Alike 3.0"; }; - cc-by-40 = spdx { + cc-by-40 = { spdxId = "CC-BY-4.0"; fullName = "Creative Commons Attribution 4.0"; }; - cc-by-sa-40 = spdx { + cc-by-sa-40 = { spdxId = "CC-BY-SA-4.0"; fullName = "Creative Commons Attribution Share Alike 4.0"; }; - cddl = spdx { + cddl = { spdxId = "CDDL-1.0"; fullName = "Common Development and Distribution License 1.0"; }; - cecill20 = spdx { + cecill20 = { spdxId = "CECILL-2.0"; fullName = "CeCILL Free Software License Agreement v2.0"; }; - cecill-b = spdx { + cecill-b = { spdxId = "CECILL-B"; fullName = "CeCILL-B Free Software License Agreement"; }; - cecill-c = spdx { + cecill-c = { spdxId = "CECILL-C"; fullName = "CeCILL-C Free Software License Agreement"; }; - cpal10 = spdx { + cpal10 = { spdxId = "CPAL-1.0"; fullName = "Common Public Attribution License 1.0"; }; - cpl10 = spdx { + cpl10 = { spdxId = "CPL-1.0"; fullName = "Common Public License 1.0"; }; - curl = spdx { + curl = { spdxId = "curl"; fullName = "curl License"; }; - doc = spdx { + doc = { spdxId = "DOC"; fullName = "DOC License"; }; @@ -264,12 +272,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - efl10 = spdx { + efl10 = { spdxId = "EFL-1.0"; fullName = "Eiffel Forum License v1.0"; }; - efl20 = spdx { + efl20 = { spdxId = "EFL-2.0"; fullName = "Eiffel Forum License v2.0"; }; @@ -280,12 +288,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - epl10 = spdx { + epl10 = { spdxId = "EPL-1.0"; fullName = "Eclipse Public License 1.0"; }; - epl20 = spdx { + epl20 = { spdxId = "EPL-2.0"; fullName = "Eclipse Public License 2.0"; }; @@ -296,42 +304,42 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - eupl11 = spdx { + eupl11 = { spdxId = "EUPL-1.1"; fullName = "European Union Public License 1.1"; }; - eupl12 = spdx { + eupl12 = { spdxId = "EUPL-1.2"; fullName = "European Union Public License 1.2"; }; - fdl11Only = spdx { + fdl11Only = { spdxId = "GFDL-1.1-only"; fullName = "GNU Free Documentation License v1.1 only"; }; - fdl11Plus = spdx { + fdl11Plus = { spdxId = "GFDL-1.1-or-later"; fullName = "GNU Free Documentation License v1.1 or later"; }; - fdl12Only = spdx { + fdl12Only = { spdxId = "GFDL-1.2-only"; fullName = "GNU Free Documentation License v1.2 only"; }; - fdl12Plus = spdx { + fdl12Plus = { spdxId = "GFDL-1.2-or-later"; fullName = "GNU Free Documentation License v1.2 or later"; }; - fdl13Only = spdx { + fdl13Only = { spdxId = "GFDL-1.3-only"; fullName = "GNU Free Documentation License v1.3 only"; }; - fdl13Plus = spdx { + fdl13Plus = { spdxId = "GFDL-1.3-or-later"; fullName = "GNU Free Documentation License v1.3 or later"; }; @@ -346,7 +354,7 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ fullName = "Unspecified free software license"; }; - ftl = spdx { + ftl = { spdxId = "FTL"; fullName = "Freetype Project License"; }; @@ -362,22 +370,22 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - gpl1Only = spdx { + gpl1Only = { spdxId = "GPL-1.0-only"; fullName = "GNU General Public License v1.0 only"; }; - gpl1Plus = spdx { + gpl1Plus = { spdxId = "GPL-1.0-or-later"; fullName = "GNU General Public License v1.0 or later"; }; - gpl2Only = spdx { + gpl2Only = { spdxId = "GPL-2.0-only"; fullName = "GNU General Public License v2.0 only"; }; - gpl2Classpath = spdx { + gpl2Classpath = { spdxId = "GPL-2.0-with-classpath-exception"; fullName = "GNU General Public License v2.0 only (with Classpath exception)"; }; @@ -392,17 +400,17 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://www.mysql.com/about/legal/licensing/foss-exception"; }; - gpl2Plus = spdx { + gpl2Plus = { spdxId = "GPL-2.0-or-later"; fullName = "GNU General Public License v2.0 or later"; }; - gpl3Only = spdx { + gpl3Only = { spdxId = "GPL-3.0-only"; fullName = "GNU General Public License v3.0 only"; }; - gpl3Plus = spdx { + gpl3Plus = { spdxId = "GPL-3.0-or-later"; fullName = "GNU General Public License v3.0 or later"; }; @@ -412,12 +420,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://fedoraproject.org/wiki/Licensing/GPL_Classpath_Exception"; }; - hpnd = spdx { + hpnd = { spdxId = "HPND"; fullName = "Historic Permission Notice and Disclaimer"; }; - hpndSellVariant = spdx { + hpndSellVariant = { fullName = "Historical Permission Notice and Disclaimer - sell variant"; spdxId = "HPND-sell-variant"; }; @@ -428,12 +436,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://old.calculate-linux.org/packages/licenses/iASL"; }; - ijg = spdx { + ijg = { spdxId = "IJG"; fullName = "Independent JPEG Group License"; }; - imagemagick = spdx { + imagemagick = { fullName = "ImageMagick License"; spdxId = "imagemagick"; }; @@ -450,17 +458,17 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - ipa = spdx { + ipa = { spdxId = "IPA"; fullName = "IPA Font License"; }; - ipl10 = spdx { + ipl10 = { spdxId = "IPL-1.0"; fullName = "IBM Public License v1.0"; }; - isc = spdx { + isc = { spdxId = "ISC"; fullName = "ISC License"; }; @@ -478,52 +486,52 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - lgpl2Only = spdx { + lgpl2Only = { spdxId = "LGPL-2.0-only"; fullName = "GNU Library General Public License v2 only"; }; - lgpl2Plus = spdx { + lgpl2Plus = { spdxId = "LGPL-2.0-or-later"; fullName = "GNU Library General Public License v2 or later"; }; - lgpl21Only = spdx { + lgpl21Only = { spdxId = "LGPL-2.1-only"; fullName = "GNU Lesser General Public License v2.1 only"; }; - lgpl21Plus = spdx { + lgpl21Plus = { spdxId = "LGPL-2.1-or-later"; fullName = "GNU Lesser General Public License v2.1 or later"; }; - lgpl3Only = spdx { + lgpl3Only = { spdxId = "LGPL-3.0-only"; fullName = "GNU Lesser General Public License v3.0 only"; }; - lgpl3Plus = spdx { + lgpl3Plus = { spdxId = "LGPL-3.0-or-later"; fullName = "GNU Lesser General Public License v3.0 or later"; }; - lgpllr = spdx { + lgpllr = { spdxId = "LGPLLR"; fullName = "Lesser General Public License For Linguistic Resources"; }; - libpng = spdx { + libpng = { spdxId = "Libpng"; fullName = "libpng License"; }; - libpng2 = spdx { + libpng2 = { spdxId = "libpng-2.0"; # Used since libpng 1.6.36. fullName = "PNG Reference Library version 2"; }; - libtiff = spdx { + libtiff = { spdxId = "libtiff"; fullName = "libtiff License"; }; @@ -533,22 +541,22 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://opensource.franz.com/preamble.html"; }; - llvm-exception = spdx { + llvm-exception = { spdxId = "LLVM-exception"; fullName = "LLVM Exception"; # LLVM exceptions to the Apache 2.0 License }; - lppl12 = spdx { + lppl12 = { spdxId = "LPPL-1.2"; fullName = "LaTeX Project Public License v1.2"; }; - lppl13c = spdx { + lppl13c = { spdxId = "LPPL-1.3c"; fullName = "LaTeX Project Public License v1.3c"; }; - lpl-102 = spdx { + lpl-102 = { spdxId = "LPL-1.02"; fullName = "Lucent Public License v1.02"; }; @@ -560,43 +568,43 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ # spdx.org does not (yet) differentiate between the X11 and Expat versions # for details see https://en.wikipedia.org/wiki/MIT_License#Various_versions - mit = spdx { + mit = { spdxId = "MIT"; fullName = "MIT License"; }; - mpl10 = spdx { + mpl10 = { spdxId = "MPL-1.0"; fullName = "Mozilla Public License 1.0"; }; - mpl11 = spdx { + mpl11 = { spdxId = "MPL-1.1"; fullName = "Mozilla Public License 1.1"; }; - mpl20 = spdx { + mpl20 = { spdxId = "MPL-2.0"; fullName = "Mozilla Public License 2.0"; }; - mspl = spdx { + mspl = { spdxId = "MS-PL"; fullName = "Microsoft Public License"; }; - nasa13 = spdx { + nasa13 = { spdxId = "NASA-1.3"; fullName = "NASA Open Source Agreement 1.3"; free = false; }; - ncsa = spdx { + ncsa = { spdxId = "NCSA"; fullName = "University of Illinois/NCSA Open Source License"; }; - nposl3 = spdx { + nposl3 = { spdxId = "NPOSL-3.0"; fullName = "Non-Profit Open Software License 3.0"; }; @@ -613,53 +621,53 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - odbl = spdx { + odbl = { spdxId = "ODbL-1.0"; fullName = "Open Data Commons Open Database License v1.0"; }; - ofl = spdx { + ofl = { spdxId = "OFL-1.1"; fullName = "SIL Open Font License 1.1"; }; - openldap = spdx { + openldap = { spdxId = "OLDAP-2.8"; fullName = "Open LDAP Public License v2.8"; }; - openssl = spdx { + openssl = { spdxId = "OpenSSL"; fullName = "OpenSSL License"; }; - osl2 = spdx { + osl2 = { spdxId = "OSL-2.0"; fullName = "Open Software License 2.0"; }; - osl21 = spdx { + osl21 = { spdxId = "OSL-2.1"; fullName = "Open Software License 2.1"; }; - osl3 = spdx { + osl3 = { spdxId = "OSL-3.0"; fullName = "Open Software License 3.0"; }; - parity70 = spdx { + parity70 = { spdxId = "Parity-7.0.0"; fullName = "Parity Public License 7.0.0"; url = "https://paritylicense.com/versions/7.0.0.html"; }; - php301 = spdx { + php301 = { spdxId = "PHP-3.01"; fullName = "PHP License v3.01"; }; - postgresql = spdx { + postgresql = { spdxId = "PostgreSQL"; fullName = "PostgreSQL License"; }; @@ -670,7 +678,7 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - psfl = spdx { + psfl = { spdxId = "Python-2.0"; fullName = "Python Software Foundation License version 2"; url = "https://docs.python.org/license.html"; @@ -691,12 +699,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://prosperitylicense.com/versions/3.0.0.html"; }; - qhull = spdx { + qhull = { spdxId = "Qhull"; fullName = "Qhull License"; }; - qpl = spdx { + qpl = { spdxId = "QPL-1.0"; fullName = "Q Public License 1.0"; }; @@ -706,22 +714,22 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://qwt.sourceforge.io/qwtlicense.html"; }; - ruby = spdx { + ruby = { spdxId = "Ruby"; fullName = "Ruby License"; }; - sendmail = spdx { + sendmail = { spdxId = "Sendmail"; fullName = "Sendmail License"; }; - sgi-b-20 = spdx { + sgi-b-20 = { spdxId = "SGI-B-2.0"; fullName = "SGI Free Software License B v2.0"; }; - sleepycat = spdx { + sleepycat = { spdxId = "Sleepycat"; fullName = "Sleepycat License"; }; @@ -745,7 +753,7 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://github.com/thestk/stk/blob/master/LICENSE"; }; - tcltk = spdx { + tcltk = { spdxId = "TCL"; fullName = "TCL/TK License"; }; @@ -771,17 +779,17 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ # channel and NixOS images. }; - unicode-dfs-2015 = spdx { + unicode-dfs-2015 = { spdxId = "Unicode-DFS-2015"; fullName = "Unicode License Agreement - Data Files and Software (2015)"; }; - unicode-dfs-2016 = spdx { + unicode-dfs-2016 = { spdxId = "Unicode-DFS-2016"; fullName = "Unicode License Agreement - Data Files and Software (2016)"; }; - unlicense = spdx { + unlicense = { spdxId = "Unlicense"; fullName = "The Unlicense"; }; @@ -791,7 +799,7 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://oss.oracle.com/licenses/upl/"; }; - vim = spdx { + vim = { spdxId = "Vim"; fullName = "Vim License"; }; @@ -802,17 +810,17 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ free = false; }; - vsl10 = spdx { + vsl10 = { spdxId = "VSL-1.0"; fullName = "Vovida Software License v1.0"; }; - watcom = spdx { + watcom = { spdxId = "Watcom-1.0"; fullName = "Sybase Open Watcom Public License 1.0"; }; - w3c = spdx { + w3c = { spdxId = "W3C"; fullName = "W3C Software Notice and License"; }; @@ -822,12 +830,12 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "https://fedoraproject.org/wiki/Licensing:Wadalab?rd=Licensing/Wadalab"; }; - wtfpl = spdx { + wtfpl = { spdxId = "WTFPL"; fullName = "Do What The F*ck You Want To Public License"; }; - wxWindows = spdx { + wxWindows = { spdxId = "wxWindows"; fullName = "wxWindows Library Licence, Version 3.1"; }; @@ -837,68 +845,68 @@ lib.mapAttrs (n: v: v // { shortName = n; }) ({ url = "http://mcj.sourceforge.net/authors.html#xfig"; # https is broken }; - zlib = spdx { + zlib = { spdxId = "Zlib"; fullName = "zlib License"; }; - zpl20 = spdx { + zpl20 = { spdxId = "ZPL-2.0"; fullName = "Zope Public License 2.0"; }; - zpl21 = spdx { + zpl21 = { spdxId = "ZPL-2.1"; fullName = "Zope Public License 2.1"; }; } // { # TODO: remove legacy aliases - agpl3 = spdx { + agpl3 = { spdxId = "AGPL-3.0"; fullName = "GNU Affero General Public License v3.0"; deprecated = true; }; - fdl11 = spdx { + fdl11 = { spdxId = "GFDL-1.1"; fullName = "GNU Free Documentation License v1.1"; deprecated = true; }; - fdl12 = spdx { + fdl12 = { spdxId = "GFDL-1.2"; fullName = "GNU Free Documentation License v1.2"; deprecated = true; }; - fdl13 = spdx { + fdl13 = { spdxId = "GFDL-1.3"; fullName = "GNU Free Documentation License v1.3"; deprecated = true; }; - gpl1 = spdx { + gpl1 = { spdxId = "GPL-1.0"; fullName = "GNU General Public License v1.0"; deprecated = true; }; - gpl2 = spdx { + gpl2 = { spdxId = "GPL-2.0"; fullName = "GNU General Public License v2.0"; deprecated = true; }; - gpl3 = spdx { + gpl3 = { spdxId = "GPL-3.0"; fullName = "GNU General Public License v3.0"; deprecated = true; }; - lgpl2 = spdx { + lgpl2 = { spdxId = "LGPL-2.0"; fullName = "GNU Library General Public License v2"; deprecated = true; }; - lgpl21 = spdx { + lgpl21 = { spdxId = "LGPL-2.1"; fullName = "GNU Lesser General Public License v2.1"; deprecated = true; }; - lgpl3 = spdx { + lgpl3 = { spdxId = "LGPL-3.0"; fullName = "GNU Lesser General Public License v3.0"; deprecated = true; |