From 6a5ec7d405e00a17b1ef4669f84e4a8132175725 Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Sun, 7 May 2023 00:36:31 -0300 Subject: [PATCH 1/8] [wip] create maintainers/categories-set.nix with a skeleton As a proof-of-concept for https://github.com/NixOS/rfcs/pull/146 --- lib/default.nix | 1 + maintainers/categories-set.nix | 58 ++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 maintainers/categories-set.nix diff --git a/lib/default.nix b/lib/default.nix index 136f4a4a4637c..605ec77559520 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -25,6 +25,7 @@ let customisation = callLibs ./customisation.nix; derivations = callLibs ./derivations.nix; maintainers = import ../maintainers/maintainer-list.nix; + categories = import ../maintainers/categories-set.nix; teams = callLibs ../maintainers/team-list.nix; meta = callLibs ./meta.nix; versions = callLibs ./versions.nix; diff --git a/maintainers/categories-set.nix b/maintainers/categories-set.nix new file mode 100644 index 0000000000000..b21edc36fa395 --- /dev/null +++ b/maintainers/categories-set.nix @@ -0,0 +1,58 @@ +/* List of categories + ```nix + handle = { + # Required + name = "Category Name"; + description = '' + Description of category + ''; + relatedCategories = [ related01 related02 . . . ]; + }; + ``` + + where + + - `handle` is the handle you are going to use in nixpkgs expressions; + usually the same as the name but in camelCase + - `name` is the category name + - `description` is a description of the category + - `relatedCategories` is a (possibly empty) list of related categories (like + the `handle` above) + + More fields may be added in the future. + + When editing this file: + * do not modify any of + - mainCategories + - additionalCategories + - reservedCategories + except by reasons of force majeure (e.g. an update on the Freedesktop.org + Desktop Menu Specification); + * keep the lists alphabetically sorted; + * test the validity of the format with: + nix-build lib/tests/categories.nix +*/ +{ lib }: + +let + mainCategories = { + }; + + additionalCategories = { + }; + + reservedCategories = { + }; + + # "Custom" list of categories for the use of Nixpkgs + nixpkgsAdditionalCategories = { + }; + + allCategories = lib.foldl lib.recursiveUpdate {} [ + mainCategories + additionalCategories + reservedCategories + nixpkgsAdditionalCategories + ]; +in +allCategories From cbd5790b590cba72863c317f235e968c4aa822f1 Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Wed, 23 Aug 2023 23:02:49 -0300 Subject: [PATCH 2/8] [wip] create base category `software` --- maintainers/categories-set.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/maintainers/categories-set.nix b/maintainers/categories-set.nix index b21edc36fa395..7ae015f608861 100644 --- a/maintainers/categories-set.nix +++ b/maintainers/categories-set.nix @@ -46,6 +46,18 @@ let # "Custom" list of categories for the use of Nixpkgs nixpkgsAdditionalCategories = { + software = { + name = "Software"; + description = '' + Any piece of software, here understood as a set of data, routines and + programs associated with the operation of a computer system. + + This category is a catch-all placeholder for situations in which a more + specific category is not possible or desired - such as automatically + generated packages. + ''; + relatedCategories = [ /* Always empty*/ ]; + }; }; allCategories = lib.foldl lib.recursiveUpdate {} [ From 74405071880c826fdd81b4b62b2368c13db8de14 Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Thu, 10 Aug 2023 08:54:00 -0300 Subject: [PATCH 3/8] [wip][wip] populate maintainers/categories-set.nix As a proof-of-concept for NixOS RFC 146 Double wip because it lacks the descriptions. --- maintainers/categories-set.nix | 859 +++++++++++++++++++++++++++++++++ 1 file changed, 859 insertions(+) diff --git a/maintainers/categories-set.nix b/maintainers/categories-set.nix index 7ae015f608861..3942ef5f50979 100644 --- a/maintainers/categories-set.nix +++ b/maintainers/categories-set.nix @@ -36,12 +36,871 @@ let mainCategories = { + audioVideo = { + name = "audioVideo"; + description = '' + ''; + relatedCategories = []; + }; + audio = { + name = "audio"; + description = '' + ''; + relatedCategories = []; + }; + video = { + name = "video"; + description = '' + ''; + relatedCategories = []; + }; + development = { + name = "development"; + description = '' + ''; + relatedCategories = []; + }; + education = { + name = "education"; + description = '' + ''; + relatedCategories = []; + }; + game = { + name = "game"; + description = '' + ''; + relatedCategories = []; + }; + graphics = { + name = "graphics"; + description = '' + ''; + relatedCategories = []; + }; + network = { + name = "network"; + description = '' + ''; + relatedCategories = []; + }; + office = { + name = "office"; + description = '' + ''; + relatedCategories = []; + }; + science = { + name = "science"; + description = '' + ''; + relatedCategories = []; + }; + settings = { + name = "settings"; + description = '' + ''; + relatedCategories = []; + }; + system = { + name = "system"; + description = '' + ''; + relatedCategories = []; + }; + utility = { + name = "utility"; + description = '' + ''; + relatedCategories = []; + }; }; additionalCategories = { + _2DGraphics = { + name = "2DGraphics"; + description = '' + 2D based graphical application + ''; + relatedCategories = []; + }; + _3DGraphics = { + name = "3DGraphics"; + description = '' + ''; + relatedCategories = []; + }; + accessibility = { + name = "accessibility"; + description = '' + ''; + relatedCategories = []; + }; + actionGame = { + name = "actionGame"; + description = '' + ''; + relatedCategories = []; + }; + adult = { + name = "adult"; + description = '' + ''; + relatedCategories = []; + }; + adventureGame = { + name = "adventureGame"; + description = '' + ''; + relatedCategories = []; + }; + amusement = { + name = "amusement"; + description = '' + ''; + relatedCategories = []; + }; + arcadeGame = { + name = "arcadeGame"; + description = '' + ''; + relatedCategories = []; + }; + archiving = { + name = "archiving"; + description = '' + ''; + relatedCategories = []; + }; + art = { + name = "art"; + description = '' + ''; + relatedCategories = []; + }; + artificialIntelligence = { + name = "artificialIntelligence"; + description = '' + ''; + relatedCategories = []; + }; + astronomy = { + name = "astronomy"; + description = '' + ''; + relatedCategories = []; + }; + audioVideoEditing = { + name = "audioVideoEditing"; + description = '' + ''; + relatedCategories = []; + }; + biology = { + name = "biology"; + description = '' + ''; + relatedCategories = []; + }; + blocksGame = { + name = "blocksGame"; + description = '' + ''; + relatedCategories = []; + }; + boardGame = { + name = "boardGame"; + description = '' + ''; + relatedCategories = []; + }; + building = { + name = "building"; + description = '' + ''; + relatedCategories = []; + }; + calculator = { + name = "calculator"; + description = '' + ''; + relatedCategories = []; + }; + calendar = { + name = "calendar"; + description = '' + ''; + relatedCategories = []; + }; + cardGame = { + name = "cardGame"; + description = '' + ''; + relatedCategories = []; + }; + chart = { + name = "chart"; + description = '' + ''; + relatedCategories = []; + }; + chat = { + name = "chat"; + description = '' + ''; + relatedCategories = []; + }; + chemistry = { + name = "chemistry"; + description = '' + ''; + relatedCategories = []; + }; + clock = { + name = "clock"; + description = '' + ''; + relatedCategories = []; + }; + compression = { + name = "compression"; + description = '' + ''; + relatedCategories = []; + }; + computerScience = { + name = "computerScience"; + description = '' + ''; + relatedCategories = []; + }; + consoleOnly = { + name = "consoleOnly"; + description = '' + ''; + relatedCategories = []; + }; + construction = { + name = "construction"; + description = '' + ''; + relatedCategories = []; + }; + contactManagement = { + name = "contactManagement"; + description = '' + ''; + relatedCategories = []; + }; + core = { + name = "core"; + description = '' + ''; + relatedCategories = []; + }; + dataVisualization = { + name = "dataVisualization"; + description = '' + ''; + relatedCategories = []; + }; + database = { + name = "database"; + description = '' + ''; + relatedCategories = []; + }; + debugger = { + name = "debugger"; + description = '' + ''; + relatedCategories = []; + }; + desktopSettings = { + name = "desktopSettings"; + description = '' + ''; + relatedCategories = []; + }; + dialup = { + name = "dialup"; + description = '' + ''; + relatedCategories = []; + }; + dictionary = { + name = "dictionary"; + description = '' + ''; + relatedCategories = []; + }; + discBurning = { + name = "discBurning"; + description = '' + ''; + relatedCategories = []; + }; + documentation = { + name = "documentation"; + description = '' + ''; + relatedCategories = []; + }; + economy = { + name = "economy"; + description = '' + ''; + relatedCategories = []; + }; + electricity = { + name = "electricity"; + description = '' + ''; + relatedCategories = []; + }; + electronics = { + name = "electronics"; + description = '' + ''; + relatedCategories = []; + }; + email = { + name = "email"; + description = '' + ''; + relatedCategories = []; + }; + emulator = { + name = "emulator"; + description = '' + ''; + relatedCategories = []; + }; + engineering = { + name = "engineering"; + description = '' + ''; + relatedCategories = []; + }; + feed = { + name = "feed"; + description = '' + ''; + relatedCategories = []; + }; + fileManager = { + name = "fileManager"; + description = '' + ''; + relatedCategories = []; + }; + fileTools = { + name = "fileTools"; + description = '' + ''; + relatedCategories = []; + }; + fileTransfer = { + name = "fileTransfer"; + description = '' + ''; + relatedCategories = []; + }; + filesystem = { + name = "filesystem"; + description = '' + ''; + relatedCategories = []; + }; + finance = { + name = "finance"; + description = '' + ''; + relatedCategories = []; + }; + flowChart = { + name = "flowChart"; + description = '' + ''; + relatedCategories = []; + }; + geography = { + name = "geography"; + description = '' + ''; + relatedCategories = []; + }; + geology = { + name = "geology"; + description = '' + ''; + relatedCategories = []; + }; + geoscience = { + name = "geoscience"; + description = '' + ''; + relatedCategories = []; + }; + gnome = { + name = "gnome"; + description = '' + ''; + relatedCategories = []; + }; + gtk = { + name = "gtk"; + description = '' + ''; + relatedCategories = []; + }; + guiDesigner = { + name = "guiDesigner"; + description = '' + ''; + relatedCategories = []; + }; + hamRadio = { + name = "hamRadio"; + description = '' + ''; + relatedCategories = []; + }; + hardwareSettings = { + name = "hardwareSettings"; + description = '' + ''; + relatedCategories = []; + }; + history = { + name = "history"; + description = '' + ''; + relatedCategories = []; + }; + humanities = { + name = "humanities"; + description = '' + ''; + relatedCategories = []; + }; + ide = { + name = "ide"; + description = '' + ''; + relatedCategories = []; + }; + imageProcessing = { + name = "imageProcessing"; + description = '' + ''; + relatedCategories = []; + }; + instantMessaging = { + name = "instantMessaging"; + description = '' + ''; + relatedCategories = []; + }; + ircClient = { + name = "ircClient"; + description = '' + ''; + relatedCategories = []; + }; + java = { + name = "java"; + description = '' + ''; + relatedCategories = []; + }; + kde = { + name = "kde"; + description = '' + ''; + relatedCategories = []; + }; + kidsGame = { + name = "kidsGame"; + description = '' + ''; + relatedCategories = []; + }; + languages = { + name = "languages"; + description = '' + ''; + relatedCategories = []; + }; + literature = { + name = "literature"; + description = '' + ''; + relatedCategories = []; + }; + logicGame = { + name = "logicGame"; + description = '' + ''; + relatedCategories = []; + }; + maps = { + name = "maps"; + description = '' + ''; + relatedCategories = []; + }; + math = { + name = "math"; + description = '' + ''; + relatedCategories = []; + }; + medicalSoftware = { + name = "medicalSoftware"; + description = '' + ''; + relatedCategories = []; + }; + midi = { + name = "midi"; + description = '' + ''; + relatedCategories = []; + }; + mixer = { + name = "mixer"; + description = '' + ''; + relatedCategories = []; + }; + monitor = { + name = "monitor"; + description = '' + ''; + relatedCategories = []; + }; + motif = { + name = "motif"; + description = '' + ''; + relatedCategories = []; + }; + music = { + name = "music"; + description = '' + ''; + relatedCategories = []; + }; + news = { + name = "news"; + description = '' + ''; + relatedCategories = []; + }; + numericalAnalysis = { + name = "numericalAnalysis"; + description = '' + ''; + relatedCategories = []; + }; + ocr = { + name = "ocr"; + description = '' + ''; + relatedCategories = []; + }; + p2p = { + name = "p2p"; + description = '' + ''; + relatedCategories = []; + }; + packageManager = { + name = "packageManager"; + description = '' + ''; + relatedCategories = []; + }; + parallelComputing = { + name = "parallelComputing"; + description = '' + ''; + relatedCategories = []; + }; + pda = { + name = "pda"; + description = '' + ''; + relatedCategories = []; + }; + photography = { + name = "photography"; + description = '' + ''; + relatedCategories = []; + }; + physics = { + name = "physics"; + description = '' + ''; + relatedCategories = []; + }; + player = { + name = "player"; + description = '' + ''; + relatedCategories = []; + }; + presentation = { + name = "presentation"; + description = '' + ''; + relatedCategories = []; + }; + printing = { + name = "printing"; + description = '' + ''; + relatedCategories = []; + }; + profiling = { + name = "profiling"; + description = '' + ''; + relatedCategories = []; + }; + projectManagement = { + name = "projectManagement"; + description = '' + ''; + relatedCategories = []; + }; + publishing = { + name = "publishing"; + description = '' + ''; + relatedCategories = []; + }; + qt = { + name = "qt"; + description = '' + ''; + relatedCategories = []; + }; + rasterGraphics = { + name = "rasterGraphics"; + description = '' + ''; + relatedCategories = []; + }; + recorder = { + name = "recorder"; + description = '' + ''; + relatedCategories = []; + }; + remoteAccess = { + name = "remoteAccess"; + description = '' + ''; + relatedCategories = []; + }; + revisionControl = { + name = "revisionControl"; + description = '' + ''; + relatedCategories = []; + }; + robotics = { + name = "robotics"; + description = '' + ''; + relatedCategories = []; + }; + rolePlaying = { + name = "rolePlaying"; + description = '' + ''; + relatedCategories = []; + }; + scanning = { + name = "scanning"; + description = '' + ''; + relatedCategories = []; + }; + security = { + name = "security"; + description = '' + ''; + relatedCategories = []; + }; + sequencer = { + name = "sequencer"; + description = '' + ''; + relatedCategories = []; + }; + shooter = { + name = "shooter"; + description = '' + ''; + relatedCategories = []; + }; + simulation = { + name = "simulation"; + description = '' + ''; + relatedCategories = []; + }; + spirituality = { + name = "spirituality"; + description = '' + ''; + relatedCategories = []; + }; + sports = { + name = "sports"; + description = '' + ''; + relatedCategories = []; + }; + sportsGame = { + name = "sportsGame"; + description = '' + ''; + relatedCategories = []; + }; + spreadsheet = { + name = "spreadsheet"; + description = '' + ''; + relatedCategories = []; + }; + strategyGame = { + name = "strategyGame"; + description = '' + ''; + relatedCategories = []; + }; + telephony = { + name = "telephony"; + description = '' + ''; + relatedCategories = []; + }; + telephonyTools = { + name = "telephonyTools"; + description = '' + ''; + relatedCategories = []; + }; + terminalEmulator = { + name = "terminalEmulator"; + description = '' + ''; + relatedCategories = []; + }; + textEditor = { + name = "textEditor"; + description = '' + ''; + relatedCategories = []; + }; + textTools = { + name = "textTools"; + description = '' + ''; + relatedCategories = []; + }; + translation = { + name = "translation"; + description = '' + ''; + relatedCategories = []; + }; + tuner = { + name = "tuner"; + description = '' + ''; + relatedCategories = []; + }; + tv = { + name = "tv"; + description = '' + ''; + relatedCategories = []; + }; + vectorGraphics = { + name = "vectorGraphics"; + description = '' + ''; + relatedCategories = []; + }; + videoConference = { + name = "videoConference"; + description = '' + ''; + relatedCategories = []; + }; + viewer = { + name = "viewer"; + description = '' + ''; + relatedCategories = []; + }; + webBrowser = { + name = "webBrowser"; + description = '' + ''; + relatedCategories = []; + }; + webDevelopment = { + name = "webDevelopment"; + description = '' + ''; + relatedCategories = []; + }; + wordProcessor = { + name = "wordProcessor"; + description = '' + ''; + relatedCategories = []; + }; + xfce = { + name = "xfce"; + description = '' + ''; + relatedCategories = []; + }; }; reservedCategories = { + applet = { + name = "applet"; + description = '' + ''; + relatedCategories = []; + }; + screensaver = { + name = "screensaver"; + description = '' + ''; + relatedCategories = []; + }; + shell = { + name = "shell"; + description = '' + ''; + relatedCategories = []; + }; + trayIcon = { + name = "trayIcon"; + description = '' + ''; + relatedCategories = []; + }; }; # "Custom" list of categories for the use of Nixpkgs From 0eb0a48455cd2855829a94b1ca6c29a29b92d8ca Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Fri, 28 Jul 2023 23:04:08 -0300 Subject: [PATCH 4/8] [wip] pkgs/stdenv/generic/check-meta.nix: add categories to metaTypes --- lib/default.nix | 2 +- pkgs/stdenv/generic/check-meta.nix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/default.nix b/lib/default.nix index 605ec77559520..d61b7c64f5116 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -25,7 +25,7 @@ let customisation = callLibs ./customisation.nix; derivations = callLibs ./derivations.nix; maintainers = import ../maintainers/maintainer-list.nix; - categories = import ../maintainers/categories-set.nix; + categories = callLibs ../maintainers/categories-set.nix; teams = callLibs ../maintainers/team-list.nix; meta = callLibs ./meta.nix; versions = callLibs ./versions.nix; diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index 63fd00d266e4e..e0ee28b12d1e7 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -269,6 +269,7 @@ let licenseType = either (attrsOf anything) str; # TODO disallow `str` licenses, use a module in either licenseType (listOf licenseType); sourceProvenance = listOf lib.types.attrs; + categories = listOf lib.types.attrs; maintainers = listOf (attrsOf anything); # TODO use the maintainer type from lib/tests/maintainer-module.nix priority = int; pkgConfigModules = listOf str; From 2b3139b68757e493b6db5a8f0fc85267de4fdb84 Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Wed, 23 Aug 2023 23:05:23 -0300 Subject: [PATCH 5/8] [wip] categories: add `compiler` --- maintainers/categories-set.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/maintainers/categories-set.nix b/maintainers/categories-set.nix index 3942ef5f50979..ff0eda924a09f 100644 --- a/maintainers/categories-set.nix +++ b/maintainers/categories-set.nix @@ -917,6 +917,16 @@ let ''; relatedCategories = [ /* Always empty*/ ]; }; + compiler = { + name = "Compiler"; + description = '' + A program that converts a source from a language to another, usually + from a higher, human-readable level to a lower, machine level. + ''; + relatedCategories = [ + allCategories.development + ]; + }; }; allCategories = lib.foldl lib.recursiveUpdate {} [ From 28f6c0b21a712260160e1ae2f4a6e42a013fcee4 Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Wed, 23 Aug 2023 23:06:44 -0300 Subject: [PATCH 6/8] [wip] categories: add `assembler` --- maintainers/categories-set.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/maintainers/categories-set.nix b/maintainers/categories-set.nix index ff0eda924a09f..b2ad125eaa956 100644 --- a/maintainers/categories-set.nix +++ b/maintainers/categories-set.nix @@ -917,6 +917,16 @@ let ''; relatedCategories = [ /* Always empty*/ ]; }; + assembler = { + name = "Assembler"; + description = '' + A program that converts files written in assembly language to binary + code. + ''; + relatedCategories = [ + allCategories.compiler + ]; + }; compiler = { name = "Compiler"; description = '' From c051ad23c938842f6af6b594bc1c9faedec1fd5e Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Wed, 9 Aug 2023 23:34:17 -0300 Subject: [PATCH 7/8] [wip] xa: set meta.categories --- pkgs/development/compilers/xa/xa.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/compilers/xa/xa.nix b/pkgs/development/compilers/xa/xa.nix index 52be6de0812df..0a676804e5215 100644 --- a/pkgs/development/compilers/xa/xa.nix +++ b/pkgs/development/compilers/xa/xa.nix @@ -62,6 +62,7 @@ stdenv.mkDerivation (finalAttrs: { suite, as well as "bare" plain binary object files - block structure for label scoping ''; + categories = with lib.categories; [ assembler ]; license = lib.licenses.gpl2Plus; maintainers = with lib.maintainers; [ AndersonTorres ]; platforms = with lib.platforms; unix; From b45a1d39355eead61a697d6b3fd72fc003efda4b Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Fri, 28 Jul 2023 23:07:38 -0300 Subject: [PATCH 8/8] [wip] doc/stdenv/meta.chapter.md: document meta.categories --- doc/stdenv/meta.chapter.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/stdenv/meta.chapter.md b/doc/stdenv/meta.chapter.md index f6da0bb84be04..4e99a42d4b021 100644 --- a/doc/stdenv/meta.chapter.md +++ b/doc/stdenv/meta.chapter.md @@ -244,6 +244,10 @@ Unfree package that cannot be redistributed. You can build it yourself, but you This package supplies unfree, redistributable firmware. This is a separate value from `unfree-redistributable` because not everybody cares whether firmware is free. +## Categories {#sec-meta-categories} + +The `meta.categories` attribute of the package should contain a value from `lib.categories` set defined in [`nixpkgs/lib/categories-set.nix`](https://github.com/NixOS/nixpkgs/blob/master/lib/categories-set.nix). + ## Source provenance {#sec-meta-sourceProvenance} The value of a package's `meta.sourceProvenance` attribute specifies the provenance of the package's derivation outputs.