mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
Reapply "ci: module maintainer review requests; nixos/modules: init meta.teams"
This reverts commit 2cc2e0225f.
This commit is contained in:
parent
c7cbcd9117
commit
b513ab8192
100 changed files with 458 additions and 210 deletions
|
|
@ -123,9 +123,7 @@ let
|
||||||
# - values: lists of `packagePlatformPath`s
|
# - values: lists of `packagePlatformPath`s
|
||||||
diffAttrs = builtins.fromJSON (builtins.readFile "${combined}/combined-diff.json");
|
diffAttrs = builtins.fromJSON (builtins.readFile "${combined}/combined-diff.json");
|
||||||
|
|
||||||
changedPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.changed;
|
|
||||||
rebuildsPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.rebuilds;
|
rebuildsPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.rebuilds;
|
||||||
removedPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.removed;
|
|
||||||
|
|
||||||
changed-paths =
|
changed-paths =
|
||||||
let
|
let
|
||||||
|
|
@ -162,9 +160,10 @@ let
|
||||||
|
|
||||||
inherit
|
inherit
|
||||||
(callPackage ./maintainers.nix {
|
(callPackage ./maintainers.nix {
|
||||||
changedattrs = lib.attrNames (lib.groupBy (a: a.name) changedPackagePlatformAttrs);
|
affectedAttrPaths = map (a: a.packagePath) (
|
||||||
changedpathsjson = touchedFilesJson;
|
convertToPackagePlatformAttrs (diffAttrs.changed ++ diffAttrs.removed)
|
||||||
removedattrs = lib.attrNames (lib.groupBy (a: a.name) removedPackagePlatformAttrs);
|
);
|
||||||
|
changedFiles = lib.importJSON touchedFilesJson;
|
||||||
})
|
})
|
||||||
users
|
users
|
||||||
teams
|
teams
|
||||||
|
|
@ -181,7 +180,7 @@ runCommand "compare"
|
||||||
];
|
];
|
||||||
users = builtins.toJSON users;
|
users = builtins.toJSON users;
|
||||||
teams = builtins.toJSON teams;
|
teams = builtins.toJSON teams;
|
||||||
packages = builtins.toJSON packages;
|
packages = builtins.toJSON (lib.map (lib.concatStringsSep ".") packages);
|
||||||
passAsFile = [
|
passAsFile = [
|
||||||
"users"
|
"users"
|
||||||
"teams"
|
"teams"
|
||||||
|
|
|
||||||
|
|
@ -1,70 +1,54 @@
|
||||||
|
# Figure out which maintainers (users/teams) are relevant for a PR:
|
||||||
|
# - All maintainers that can be linked directly to changedFiles
|
||||||
|
# - Maintainers of affectedAttrPaths if a file directly related to the attribute is in changedFiles
|
||||||
|
#
|
||||||
|
# Files and attributes are linked in various ways:
|
||||||
|
# - pkgs/by-name/<attr>/* is linked to pkgs.<attr>
|
||||||
|
# - The file position of various attributes of pkgs.<attr>
|
||||||
|
# - Explicitly specified file positions in derivations
|
||||||
|
#
|
||||||
|
# Test with
|
||||||
|
# nix-instantiate --eval --strict --json test.nix -A result | jq
|
||||||
|
#
|
||||||
|
# Empty list as an output means success
|
||||||
{
|
{
|
||||||
lib,
|
# Files that were changed
|
||||||
changedattrs,
|
# Type: ListOf (Nixpkgs-root-relative path)
|
||||||
changedpathsjson,
|
changedFiles,
|
||||||
removedattrs,
|
# Attributes whose value was affected by the change
|
||||||
}:
|
# Type: ListOf (ListOf String)
|
||||||
let
|
affectedAttrPaths,
|
||||||
pkgs = import ../../.. {
|
|
||||||
|
pkgs ? import ../../.. {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
# We should never try to ping maintainers through package aliases, this can only lead to errors.
|
# We should never try to ping maintainers through package aliases, this can only lead to errors.
|
||||||
# One example case is, where an attribute is a throw alias, but then re-introduced in a PR.
|
# One example case is, where an attribute is a throw alias, but then re-introduced in a PR.
|
||||||
# This would trigger the throw. By disabling aliases, we can fallback gracefully below.
|
# This would trigger the throw. By disabling aliases, we can fallback gracefully below.
|
||||||
config.allowAliases = false;
|
config.allowAliases = false;
|
||||||
};
|
overlays = [ ];
|
||||||
|
},
|
||||||
|
lib,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
nixpkgsRoot = toString ../../.. + "/";
|
||||||
|
stripNixpkgsRootFromKeys = lib.mapAttrs' (
|
||||||
|
file: value: lib.nameValuePair (lib.removePrefix nixpkgsRoot file) value
|
||||||
|
);
|
||||||
|
|
||||||
changedpaths = lib.importJSON changedpathsjson;
|
moduleMeta = (pkgs.nixos { }).config.meta;
|
||||||
|
|
||||||
# Extract attributes that changed from by-name paths.
|
# Currently just nixos module maintainers, but in the future we can use this for code owners too
|
||||||
# This allows pinging reviewers for pure refactors.
|
fileUsers = stripNixpkgsRootFromKeys moduleMeta.maintainers;
|
||||||
touchedattrs = lib.pipe changedpaths [
|
fileTeams = stripNixpkgsRootFromKeys moduleMeta.teams;
|
||||||
(lib.filter (changed: lib.hasPrefix "pkgs/by-name/" changed && changed != "pkgs/by-name/README.md"))
|
|
||||||
(map (lib.splitString "/"))
|
|
||||||
(map (path: lib.elemAt path 3))
|
|
||||||
lib.unique
|
|
||||||
];
|
|
||||||
|
|
||||||
anyMatchingFile = filename: lib.any (lib.hasPrefix filename) changedpaths;
|
anyMatchingFile = filename: lib.any (lib.hasPrefix filename) changedFiles;
|
||||||
|
|
||||||
anyMatchingFiles = files: lib.any anyMatchingFile files;
|
anyMatchingFiles = files: lib.any anyMatchingFile files;
|
||||||
|
|
||||||
sharded = name: "${lib.substring 0 2 name}/${name}";
|
|
||||||
|
|
||||||
attrsWithMaintainers = lib.pipe (changedattrs ++ removedattrs ++ touchedattrs) [
|
|
||||||
# An attribute can appear in changed/removed *and* touched
|
|
||||||
lib.unique
|
|
||||||
(map (
|
|
||||||
name:
|
|
||||||
let
|
|
||||||
path = lib.splitString "." name;
|
|
||||||
# Some packages might be reported as changed on a different platform, but
|
|
||||||
# not even have an attribute on the platform the maintainers are requested on.
|
|
||||||
# Fallback to `null` for these to filter them out below.
|
|
||||||
package = lib.attrByPath path null pkgs;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
inherit name package;
|
|
||||||
# Adds all files in by-name to each package, no matter whether they are discoverable
|
|
||||||
# via meta attributes below. For example, this allows pinging maintainers for
|
|
||||||
# updates to .json files.
|
|
||||||
# TODO: Support by-name package sets.
|
|
||||||
filenames = lib.optional (lib.length path == 1) "pkgs/by-name/${sharded (lib.head path)}/";
|
|
||||||
# meta.maintainers also contains all individual team members.
|
|
||||||
# We only want to ping individuals if they're added individually as maintainers, not via teams.
|
|
||||||
users = package.meta.nonTeamMaintainers or [ ];
|
|
||||||
teams = package.meta.teams or [ ];
|
|
||||||
}
|
|
||||||
))
|
|
||||||
# No need to match up packages without maintainers with their files.
|
|
||||||
# This also filters out attributes where `package = null`, which is the
|
|
||||||
# case for libintl, for example.
|
|
||||||
(lib.filter (pkg: pkg.users != [ ] || pkg.teams != [ ]))
|
|
||||||
];
|
|
||||||
|
|
||||||
relevantFilenames =
|
relevantFilenames =
|
||||||
drv:
|
drv:
|
||||||
(lib.unique (
|
(lib.unique (
|
||||||
map (pos: lib.removePrefix "${toString ../../..}/" pos.file) (
|
map (pos: lib.removePrefix nixpkgsRoot pos.file) (
|
||||||
lib.filter (x: x != null) [
|
lib.filter (x: x != null) [
|
||||||
(drv.meta.maintainersPosition or null)
|
(drv.meta.maintainersPosition or null)
|
||||||
(drv.meta.teamsPosition or null)
|
(drv.meta.teamsPosition or null)
|
||||||
|
|
@ -87,50 +71,82 @@ let
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
||||||
attrsWithFilenames = map (
|
relevantAffectedAttrPaths = lib.filter (
|
||||||
pkg: pkg // { filenames = pkg.filenames ++ relevantFilenames pkg.package; }
|
attrPath:
|
||||||
) attrsWithMaintainers;
|
# Some packages might be reported as changed on a different platform, but
|
||||||
|
# not even have an attribute on the platform the maintainers are requested on.
|
||||||
|
# Fallback to `null` for these to filter them out
|
||||||
|
let
|
||||||
|
package = lib.attrByPath attrPath null pkgs;
|
||||||
|
in
|
||||||
|
package != null && anyMatchingFiles (relevantFilenames package)
|
||||||
|
) affectedAttrPaths;
|
||||||
|
|
||||||
attrsWithModifiedFiles = lib.filter (pkg: anyMatchingFiles pkg.filenames) attrsWithFilenames;
|
# Extract attributes that changed from by-name paths.
|
||||||
|
# This allows pinging reviewers for pure refactors.
|
||||||
|
changedByNameAttrPaths = lib.pipe changedFiles [
|
||||||
|
(lib.filter (changed: lib.hasPrefix "pkgs/by-name/" changed))
|
||||||
|
(map (lib.splitString "/"))
|
||||||
|
# Filters out e.g. pkgs/by-name/README.md
|
||||||
|
(lib.filter (path: lib.length path > 3))
|
||||||
|
(map (path: lib.elemAt path 3))
|
||||||
|
(map lib.singleton)
|
||||||
|
];
|
||||||
|
|
||||||
|
# An attribute can appear in affected *and* touched
|
||||||
|
attrPathsToGetMaintainersFor = lib.unique (relevantAffectedAttrPaths ++ changedByNameAttrPaths);
|
||||||
|
|
||||||
|
attrPathEntities = lib.concatMap (
|
||||||
|
attrPath:
|
||||||
|
let
|
||||||
|
package = lib.getAttrFromPath attrPath pkgs;
|
||||||
|
in
|
||||||
|
# meta.maintainers also contains all individual team members.
|
||||||
|
# We only want to ping individuals if they're added individually as maintainers, not via teams.
|
||||||
|
userPings { inherit attrPath; } (package.meta.nonTeamMaintainers or [ ])
|
||||||
|
++ lib.concatMap (teamPings { inherit attrPath; }) (package.meta.teams or [ ])
|
||||||
|
) attrPathsToGetMaintainersFor;
|
||||||
|
|
||||||
|
changedFileEntities = lib.concatMap (
|
||||||
|
file:
|
||||||
|
userPings { inherit file; } (fileUsers.${file} or [ ])
|
||||||
|
++ lib.concatMap (teamPings { inherit file; }) (fileTeams.${file} or [ ])
|
||||||
|
) changedFiles;
|
||||||
|
|
||||||
userPings =
|
userPings =
|
||||||
pkg:
|
context:
|
||||||
map (maintainer: {
|
map (maintainer: {
|
||||||
type = "user";
|
type = "user";
|
||||||
userId = maintainer.githubId;
|
userId = maintainer.githubId;
|
||||||
packageName = pkg.name;
|
inherit context;
|
||||||
});
|
});
|
||||||
|
|
||||||
teamPings =
|
teamPings =
|
||||||
pkg: team:
|
context: team:
|
||||||
if team ? github then
|
if team ? githubId then
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
type = "team";
|
type = "team";
|
||||||
teamId = team.githubId;
|
teamId = team.githubId;
|
||||||
packageName = pkg.name;
|
inherit context;
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
else
|
else
|
||||||
userPings pkg team.members;
|
userPings context team.members;
|
||||||
|
|
||||||
maintainersToPing = lib.concatMap (
|
byType = lib.groupBy (ping: ping.type) (attrPathEntities ++ changedFileEntities);
|
||||||
pkg: userPings pkg pkg.users ++ lib.concatMap (teamPings pkg) pkg.teams
|
|
||||||
) attrsWithModifiedFiles;
|
|
||||||
|
|
||||||
byType = lib.groupBy (ping: ping.type) maintainersToPing;
|
|
||||||
|
|
||||||
byUser = lib.pipe (byType.user or [ ]) [
|
byUser = lib.pipe (byType.user or [ ]) [
|
||||||
(lib.groupBy (ping: toString ping.userId))
|
(lib.groupBy (ping: toString ping.userId))
|
||||||
(lib.mapAttrs (_user: lib.map (pkg: pkg.packageName)))
|
(lib.mapAttrs (_user: lib.map (pkg: pkg.context)))
|
||||||
];
|
];
|
||||||
byTeam = lib.pipe (byType.team or [ ]) [
|
byTeam = lib.pipe (byType.team or [ ]) [
|
||||||
(lib.groupBy (ping: toString ping.teamId))
|
(lib.groupBy (ping: toString ping.teamId))
|
||||||
(lib.mapAttrs (_team: lib.map (pkg: pkg.packageName)))
|
(lib.mapAttrs (_team: lib.map (pkg: pkg.context)))
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
users = byUser;
|
users = byUser;
|
||||||
teams = byTeam;
|
teams = byTeam;
|
||||||
packages = lib.catAttrs "name" attrsWithModifiedFiles;
|
packages = attrPathsToGetMaintainersFor;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
228
ci/eval/compare/test.nix
Normal file
228
ci/eval/compare/test.nix
Normal file
|
|
@ -0,0 +1,228 @@
|
||||||
|
{
|
||||||
|
pkgs ? import ../../.. {
|
||||||
|
config = { };
|
||||||
|
overlays = [ ];
|
||||||
|
},
|
||||||
|
lib ? pkgs.lib,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
fun = import ./maintainers.nix;
|
||||||
|
|
||||||
|
mockPkgs =
|
||||||
|
{
|
||||||
|
packages ? [ ],
|
||||||
|
modules ? [ ],
|
||||||
|
githubTeams ? true,
|
||||||
|
}:
|
||||||
|
lib.updateManyAttrsByPath
|
||||||
|
(lib.imap0 (i: p: {
|
||||||
|
path = p;
|
||||||
|
update = _: {
|
||||||
|
meta.maintainersPosition.file = lib.concatStringsSep "/" p;
|
||||||
|
meta.nonTeamMaintainers = [ { githubId = i; } ];
|
||||||
|
meta.teams =
|
||||||
|
if githubTeams then [ { githubId = i + 100; } ] else [ { members = [ { githubId = i + 100; } ]; } ];
|
||||||
|
};
|
||||||
|
}) packages)
|
||||||
|
{
|
||||||
|
nixos =
|
||||||
|
{ }:
|
||||||
|
{
|
||||||
|
config.meta.maintainers = lib.listToAttrs (
|
||||||
|
lib.imap0 (i: m: lib.nameValuePair m [ { githubId = i; } ]) modules
|
||||||
|
);
|
||||||
|
config.meta.teams = lib.listToAttrs (
|
||||||
|
lib.imap0 (
|
||||||
|
i: m:
|
||||||
|
lib.nameValuePair m (
|
||||||
|
if githubTeams then [ { githubId = i + 100; } ] else [ { members = [ { githubId = i + 100; } ]; } ]
|
||||||
|
)
|
||||||
|
) modules
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
tests = {
|
||||||
|
testEmpty = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs { };
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [ ];
|
||||||
|
affectedAttrPaths = [ ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ ];
|
||||||
|
teams = { };
|
||||||
|
users = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testNonExistentAffected = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs { };
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [ "a" ];
|
||||||
|
affectedAttrPaths = [ [ "b" ] ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ ];
|
||||||
|
teams = { };
|
||||||
|
users = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testIrrelevantAffected = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs {
|
||||||
|
packages = [ [ "b" ] ];
|
||||||
|
};
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [ "a" ];
|
||||||
|
affectedAttrPaths = [ [ "b" ] ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ ];
|
||||||
|
teams = { };
|
||||||
|
users = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testRelevantAffected = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs {
|
||||||
|
packages = [ [ "b" ] ];
|
||||||
|
};
|
||||||
|
inherit lib;
|
||||||
|
# Also tests that subpaths work
|
||||||
|
changedFiles = [ "b/c" ];
|
||||||
|
affectedAttrPaths = [ [ "b" ] ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ [ "b" ] ];
|
||||||
|
teams."100" = [
|
||||||
|
{ attrPath = [ "b" ]; }
|
||||||
|
];
|
||||||
|
users."0" = [
|
||||||
|
{ attrPath = [ "b" ]; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testRelevantAffectedNonGitHub = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs {
|
||||||
|
packages = [ [ "b" ] ];
|
||||||
|
githubTeams = false;
|
||||||
|
};
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [ "b/c" ];
|
||||||
|
affectedAttrPaths = [ [ "b" ] ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ [ "b" ] ];
|
||||||
|
teams = { };
|
||||||
|
users."0" = [
|
||||||
|
{ attrPath = [ "b" ]; }
|
||||||
|
];
|
||||||
|
users."100" = [
|
||||||
|
{ attrPath = [ "b" ]; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testByNameChanged = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs {
|
||||||
|
packages = [ [ "hello" ] ];
|
||||||
|
};
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [ "pkgs/by-name/he/hello/sources.json" ];
|
||||||
|
affectedAttrPaths = [ ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ [ "hello" ] ];
|
||||||
|
teams."100" = [
|
||||||
|
{ attrPath = [ "hello" ]; }
|
||||||
|
];
|
||||||
|
users."0" = [
|
||||||
|
{ attrPath = [ "hello" ]; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testByNameReadmeChanged = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs {
|
||||||
|
packages = [ [ "hello" ] ];
|
||||||
|
};
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [ "pkgs/by-name/README.md" ];
|
||||||
|
affectedAttrPaths = [ ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ ];
|
||||||
|
teams = { };
|
||||||
|
users = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testNoDuplicates = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs {
|
||||||
|
packages = [ [ "hello" ] ];
|
||||||
|
};
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [
|
||||||
|
"hello"
|
||||||
|
"pkgs/by-name/he/hello/sources.json"
|
||||||
|
];
|
||||||
|
affectedAttrPaths = [ [ "hello" ] ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ [ "hello" ] ];
|
||||||
|
teams."100" = [
|
||||||
|
{ attrPath = [ "hello" ]; }
|
||||||
|
];
|
||||||
|
users."0" = [
|
||||||
|
{ attrPath = [ "hello" ]; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testModuleMaintainers = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs {
|
||||||
|
modules = [ "a" ];
|
||||||
|
};
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [ "a" ];
|
||||||
|
affectedAttrPaths = [ ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ ];
|
||||||
|
teams."100" = [
|
||||||
|
{ file = "a"; }
|
||||||
|
];
|
||||||
|
users."0" = [
|
||||||
|
{ file = "a"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testModuleMaintainersNonGithub = {
|
||||||
|
expr = fun {
|
||||||
|
pkgs = mockPkgs {
|
||||||
|
modules = [ "a" ];
|
||||||
|
githubTeams = false;
|
||||||
|
};
|
||||||
|
inherit lib;
|
||||||
|
changedFiles = [ "a" ];
|
||||||
|
affectedAttrPaths = [ ];
|
||||||
|
};
|
||||||
|
expected = {
|
||||||
|
packages = [ ];
|
||||||
|
teams = { };
|
||||||
|
users."100" = [
|
||||||
|
{ file = "a"; }
|
||||||
|
];
|
||||||
|
users."0" = [
|
||||||
|
{ file = "a"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
result = lib.runTests tests;
|
||||||
|
}
|
||||||
|
|
@ -4,39 +4,12 @@
|
||||||
let
|
let
|
||||||
inherit (lib)
|
inherit (lib)
|
||||||
mkOption
|
mkOption
|
||||||
mkOptionType
|
|
||||||
types
|
types
|
||||||
;
|
;
|
||||||
|
|
||||||
maintainer = mkOptionType {
|
# The resulting value of this type shows where all values were defined
|
||||||
name = "maintainer";
|
sourceList = types.listOf types.raw // {
|
||||||
check = email: lib.elem email (lib.attrValues lib.maintainers);
|
merge = loc: defs: lib.listToAttrs (lib.map ({ file, value }: lib.nameValuePair file value) defs);
|
||||||
merge = loc: defs: {
|
|
||||||
# lib.last: Perhaps this could be merged instead, if "at most once per module"
|
|
||||||
# is a problem (see option description).
|
|
||||||
${(lib.last defs).file} = (lib.last defs).value;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
listOfMaintainers = types.listOf maintainer // {
|
|
||||||
merge =
|
|
||||||
loc: defs:
|
|
||||||
lib.zipAttrs (
|
|
||||||
lib.flatten (
|
|
||||||
lib.imap1 (
|
|
||||||
n: def:
|
|
||||||
lib.imap1 (
|
|
||||||
m: def':
|
|
||||||
maintainer.merge (loc ++ [ "[${toString n}-${toString m}]" ]) [
|
|
||||||
{
|
|
||||||
inherit (def) file;
|
|
||||||
value = def';
|
|
||||||
}
|
|
||||||
]
|
|
||||||
) def.value
|
|
||||||
) defs
|
|
||||||
)
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
@ -44,7 +17,14 @@ in
|
||||||
options = {
|
options = {
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = mkOption {
|
maintainers = mkOption {
|
||||||
type = listOfMaintainers;
|
type =
|
||||||
|
let
|
||||||
|
allMaintainers = lib.attrValues lib.maintainers;
|
||||||
|
in
|
||||||
|
lib.types.addCheck sourceList (lib.all (v: lib.elem v allMaintainers))
|
||||||
|
// {
|
||||||
|
description = "list of lib.maintainers";
|
||||||
|
};
|
||||||
default = [ ];
|
default = [ ];
|
||||||
example = lib.literalExpression "[ lib.maintainers.alice lib.maintainers.bob ]";
|
example = lib.literalExpression "[ lib.maintainers.alice lib.maintainers.bob ]";
|
||||||
description = ''
|
description = ''
|
||||||
|
|
@ -54,6 +34,22 @@ in
|
||||||
The option value is not a list of maintainers, but an attribute set that maps module file names to lists of maintainers.
|
The option value is not a list of maintainers, but an attribute set that maps module file names to lists of maintainers.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
teams = mkOption {
|
||||||
|
type =
|
||||||
|
let
|
||||||
|
allTeams = lib.attrValues lib.teams;
|
||||||
|
in
|
||||||
|
lib.types.addCheck sourceList (lib.all (v: lib.elem v allTeams))
|
||||||
|
// {
|
||||||
|
description = "list of lib.teams";
|
||||||
|
};
|
||||||
|
default = [ ];
|
||||||
|
example = lib.literalExpression "[ lib.teams.acme lib.teams.haskell ]";
|
||||||
|
description = ''
|
||||||
|
List of team maintainers of each module.
|
||||||
|
This option should be defined at most once per module.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
meta.maintainers = with lib.maintainers; [
|
meta.maintainers = with lib.maintainers; [
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,17 @@ let
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
rec {
|
rec {
|
||||||
lib = import ../../../lib;
|
# Inject ghost into lib.maintainers so it passes the addCheck validation
|
||||||
|
lib = (import ../../../lib).extend (
|
||||||
|
final: prev: {
|
||||||
|
maintainers = prev.maintainers // {
|
||||||
|
inherit ghost;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
example = lib.evalModules {
|
example = lib.evalModules {
|
||||||
|
specialArgs.lib = lib;
|
||||||
modules = [
|
modules = [
|
||||||
../meta-maintainers.nix
|
../meta-maintainers.nix
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ in
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.freedesktop.members;
|
teams = [ lib.teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.freedesktop.members;
|
teams = [ lib.teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.freedesktop.members;
|
teams = [ lib.teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ in
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.freedesktop.members ++ [ ];
|
teams = [ lib.teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ in
|
||||||
];
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.freedesktop.members;
|
teams = [ teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options.xdg.portal = {
|
options.xdg.portal = {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxqt.members;
|
teams = [ lib.teams.lxqt ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options.xdg.portal.lxqt = {
|
options.xdg.portal.lxqt = {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.freedesktop.members;
|
teams = [ lib.teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -49,5 +49,5 @@ in
|
||||||
systemd.user.services.dsearch.wantedBy = mkIf cfg.systemd.enable [ cfg.systemd.target ];
|
systemd.user.services.dsearch.wantedBy = mkIf cfg.systemd.enable [ cfg.systemd.target ];
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.danklinux.members;
|
meta.teams = [ lib.teams.danklinux ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ in
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.freedesktop.members;
|
teams = [ lib.teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options.programs.nm-applet = {
|
options.programs.nm-applet = {
|
||||||
|
|
|
||||||
|
|
@ -285,5 +285,5 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.steam.members;
|
meta.teams = [ lib.teams.steam ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.xfce.members;
|
teams = [ lib.teams.xfce ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -226,5 +226,5 @@ in
|
||||||
hardware.graphics.enable = lib.mkDefault true;
|
hardware.graphics.enable = lib.mkDefault true;
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.danklinux.members;
|
meta.teams = [ lib.teams.danklinux ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -130,5 +130,5 @@ in
|
||||||
] "Nvidia patches are no longer needed")
|
] "Nvidia patches are no longer needed")
|
||||||
];
|
];
|
||||||
|
|
||||||
meta.maintainers = lib.teams.hyprland.members;
|
meta.teams = [ lib.teams.hyprland ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,5 +26,5 @@ in
|
||||||
security.pam.services.hyprlock = { };
|
security.pam.services.hyprlock = { };
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.hyprland.members;
|
meta.teams = [ lib.teams.hyprland ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.xfce.members;
|
teams = [ lib.teams.xfce ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -1218,7 +1218,7 @@ in
|
||||||
];
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.acme.members;
|
teams = [ lib.teams.acme ];
|
||||||
doc = ./default.md;
|
doc = ./default.md;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -272,5 +272,5 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.apparmor.members;
|
meta.teams = [ lib.teams.apparmor ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -962,5 +962,6 @@ in
|
||||||
(import ./rke2.nix args)
|
(import ./rke2.nix args)
|
||||||
];
|
];
|
||||||
|
|
||||||
meta.maintainers = pkgs.rke2.meta.maintainers ++ lib.teams.k3s.members;
|
meta.teams = [ lib.teams.k3s ];
|
||||||
|
meta.maintainers = pkgs.rke2.meta.maintainers;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -313,5 +313,5 @@ in
|
||||||
'')
|
'')
|
||||||
];
|
];
|
||||||
|
|
||||||
meta.maintainers = lib.teams.buildbot.members;
|
meta.teams = [ lib.teams.buildbot ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,6 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.buildbot.members;
|
meta.teams = [ lib.teams.buildbot ];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -893,5 +893,5 @@ in
|
||||||
)
|
)
|
||||||
];
|
];
|
||||||
|
|
||||||
meta.maintainers = teams.gitlab.members;
|
meta.teams = [ teams.gitlab ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
meta.maintainers = [ "thevar1able" ];
|
meta.maintainers = with lib.maintainers; [ thevar1able ];
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ let
|
||||||
notExcluded = pkg: utils.disablePackageByName pkg config.environment.budgie.excludePackages;
|
notExcluded = pkg: utils.disablePackageByName pkg config.environment.budgie.excludePackages;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta.maintainers = lib.teams.budgie.members;
|
meta.teams = [ lib.teams.budgie ];
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
(lib.mkRenamedOptionModule
|
(lib.mkRenamedOptionModule
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ let
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta.maintainers = lib.teams.cosmic.members;
|
meta.teams = [ lib.teams.cosmic ];
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
services.desktopManager.cosmic = {
|
services.desktopManager.cosmic = {
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
doc = ./gnome.md;
|
doc = ./gnome.md;
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -292,5 +292,5 @@ in
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
meta.maintainers = lib.teams.lomiri.members;
|
meta.teams = [ lib.teams.lomiri ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ in
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
doc = ./pantheon.md;
|
doc = ./pantheon.md;
|
||||||
maintainers = teams.pantheon.members;
|
teams = [ teams.pantheon ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.freedesktop.members;
|
teams = [ lib.teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -373,6 +373,6 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = [ ] ++ lib.teams.pantheon.members;
|
teams = [ lib.teams.pantheon ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ in
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.gnome.members;
|
teams = [ teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ in
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ in
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ in
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ in
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ in
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,8 @@ let
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta.maintainers = teams.freedesktop.members ++ [ maintainers.k900 ];
|
meta.teams = [ teams.freedesktop ];
|
||||||
|
meta.maintainers = [ maintainers.k900 ];
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ in
|
||||||
];
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = [ ] ++ lib.teams.pantheon.members;
|
teams = [ lib.teams.pantheon ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = [ ] ++ lib.teams.pantheon.members;
|
teams = [ lib.teams.pantheon ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ let
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
meta.maintainers = lib.teams.cosmic.members;
|
meta.teams = [ lib.teams.cosmic ];
|
||||||
|
|
||||||
options.services.displayManager.cosmic-greeter = {
|
options.services.displayManager.cosmic-greeter = {
|
||||||
enable = lib.mkEnableOption "COSMIC greeter";
|
enable = lib.mkEnableOption "COSMIC greeter";
|
||||||
|
|
|
||||||
|
|
@ -321,5 +321,5 @@ in
|
||||||
services.libinput.enable = mkDefault true;
|
services.libinput.enable = mkDefault true;
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.danklinux.members;
|
meta.teams = [ lib.teams.danklinux ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ in
|
||||||
];
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.gnome.members;
|
teams = [ lib.teams.gnome ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -171,7 +171,7 @@ in
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
buildDocsInSandbox = false;
|
buildDocsInSandbox = false;
|
||||||
maintainers = lib.teams.home-assistant.members;
|
teams = [ lib.teams.home-assistant ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options.services.home-assistant = {
|
options.services.home-assistant = {
|
||||||
|
|
|
||||||
|
|
@ -341,5 +341,5 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
meta.maintainers = lib.teams.matrix.members;
|
meta.teams = [ lib.teams.matrix ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -849,5 +849,5 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.doc = ./forgejo.md;
|
meta.doc = ./forgejo.md;
|
||||||
meta.maintainers = lib.teams.forgejo.members;
|
meta.teams = [ lib.teams.forgejo ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1911,5 +1911,5 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.doc = ./gitlab.md;
|
meta.doc = ./gitlab.md;
|
||||||
meta.maintainers = teams.gitlab.members;
|
meta.teams = [ teams.gitlab ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,5 +63,5 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.beam.members;
|
meta.teams = [ lib.teams.beam ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -444,5 +444,5 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.jitsi.members;
|
meta.teams = [ lib.teams.jitsi ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -166,5 +166,5 @@ in
|
||||||
lib.mkDefault "${pkgs.jicofo}/etc/jitsi/jicofo/logging.properties-journal";
|
lib.mkDefault "${pkgs.jicofo}/etc/jitsi/jicofo/logging.properties-journal";
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.jitsi.members;
|
meta.teams = [ lib.teams.jitsi ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -243,5 +243,5 @@ in
|
||||||
lib.mkDefault "${stateDir}/logging.properties-journal";
|
lib.mkDefault "${stateDir}/logging.properties-journal";
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.jitsi.members;
|
meta.teams = [ lib.teams.jitsi ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -331,5 +331,5 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.jitsi.members;
|
meta.teams = [ lib.teams.jitsi ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.freedesktop.members;
|
teams = [ lib.teams.freedesktop ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = with lib; {
|
options = with lib; {
|
||||||
|
|
|
||||||
|
|
@ -142,9 +142,8 @@ in
|
||||||
{
|
{
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.freedesktop.members ++ [
|
teams = [ lib.teams.freedesktop ];
|
||||||
lib.maintainers.frontear
|
maintainers = [ lib.maintainers.frontear ];
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -299,10 +299,8 @@ in
|
||||||
environment.systemPackages = [ cfg.package ];
|
environment.systemPackages = [ cfg.package ];
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers =
|
meta.teams = [ lib.teams.ngi ];
|
||||||
with lib.maintainers;
|
meta.maintainers = with lib.maintainers; [
|
||||||
[
|
|
||||||
ppom
|
ppom
|
||||||
]
|
];
|
||||||
++ lib.teams.ngi.members;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,5 +28,5 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.hyprland.members;
|
meta.teams = [ lib.teams.hyprland ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -756,5 +756,5 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.doc = ./jitsi-meet.md;
|
meta.doc = ./jitsi-meet.md;
|
||||||
meta.maintainers = lib.teams.jitsi.members;
|
meta.teams = [ lib.teams.jitsi ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1774,5 +1774,5 @@ in
|
||||||
);
|
);
|
||||||
|
|
||||||
meta.doc = ./nextcloud.md;
|
meta.doc = ./nextcloud.md;
|
||||||
meta.maintainers = lib.teams.nextcloud.members;
|
meta.teams = [ lib.teams.nextcloud ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -252,5 +252,5 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.ngi.members;
|
meta.teams = [ lib.teams.ngi ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ in
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.enlightenment.members;
|
teams = [ teams.enlightenment ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ in
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.lumina.members;
|
teams = [ teams.lumina ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ in
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.lxqt.members;
|
teams = [ teams.lxqt ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.xfce.members;
|
teams = [ teams.xfce ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,6 @@ python3.pkgs.buildPythonApplication {
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = [ ] ++ lib.teams.pantheon.members;
|
teams = [ lib.teams.pantheon ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ let
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta.maintainers = lib.teams.lomiri.members;
|
meta.teams = [ lib.teams.lomiri ];
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
services.xserver.displayManager.lightdm.greeters.lomiri = {
|
services.xserver.displayManager.lightdm.greeters.lomiri = {
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = [ ] ++ lib.teams.pantheon.members;
|
teams = [ lib.teams.pantheon ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = [ ] ++ lib.teams.pantheon.members;
|
teams = [ lib.teams.pantheon ];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Note: the order in which lightdm greeter modules are imported
|
# Note: the order in which lightdm greeter modules are imported
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.pantheon.members;
|
teams = [ teams.pantheon ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = [ ] ++ lib.teams.podman.members;
|
teams = [ lib.teams.podman ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options.virtualisation.containers = {
|
options.virtualisation.containers = {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = teams.podman.members;
|
teams = [ teams.podman ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options.virtualisation.cri-o = {
|
options.virtualisation.cri-o = {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxc.members;
|
teams = [ lib.teams.lxc ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxc.members;
|
teams = [ lib.teams.lxc ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxc.members;
|
teams = [ lib.teams.lxc ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxc.members;
|
teams = [ lib.teams.lxc ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ in
|
||||||
];
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxc.members;
|
teams = [ lib.teams.lxc ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxc.members;
|
teams = [ lib.teams.lxc ];
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ in
|
||||||
|
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxc.members;
|
teams = [ lib.teams.lxc ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options.virtualisation.lxc = {
|
options.virtualisation.lxc = {
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.lxc.members;
|
teams = [ lib.teams.lxc ];
|
||||||
};
|
};
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ in
|
||||||
];
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = lib.teams.podman.members;
|
teams = [ lib.teams.podman ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options.virtualisation.podman = {
|
options.virtualisation.podman = {
|
||||||
|
|
|
||||||
|
|
@ -35,5 +35,6 @@ in
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.podman.members ++ [ lib.maintainers.roberth ];
|
meta.teams = [ lib.teams.podman ];
|
||||||
|
meta.maintainers = [ lib.maintainers.roberth ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,5 +95,6 @@ in
|
||||||
networking.firewall.allowedTCPPorts = lib.optional (cfg.enable && cfg.openFirewall) cfg.port;
|
networking.firewall.allowedTCPPorts = lib.optional (cfg.enable && cfg.openFirewall) cfg.port;
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = lib.teams.podman.members ++ [ lib.maintainers.roberth ];
|
meta.teams = [ lib.teams.podman ];
|
||||||
|
meta.maintainers = [ lib.maintainers.roberth ];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -937,6 +937,6 @@ in
|
||||||
};
|
};
|
||||||
meta = {
|
meta = {
|
||||||
doc = ./xen.md;
|
doc = ./xen.md;
|
||||||
maintainers = teams.xen.members;
|
teams = [ teams.xen ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue