Revert "ci: module maintainer review requests; nixos/modules: init meta.teams"

This commit is contained in:
Silvan Mosberger 2026-03-06 08:41:24 +01:00 committed by GitHub
parent 7afd6d60a0
commit 2cc2e0225f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
100 changed files with 210 additions and 458 deletions

View file

@ -123,7 +123,9 @@ let
# - values: lists of `packagePlatformPath`s
diffAttrs = builtins.fromJSON (builtins.readFile "${combined}/combined-diff.json");
changedPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.changed;
rebuildsPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.rebuilds;
removedPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.removed;
changed-paths =
let
@ -160,10 +162,9 @@ let
inherit
(callPackage ./maintainers.nix {
affectedAttrPaths = map (a: a.packagePath) (
convertToPackagePlatformAttrs (diffAttrs.changed ++ diffAttrs.removed)
);
changedFiles = lib.importJSON touchedFilesJson;
changedattrs = lib.attrNames (lib.groupBy (a: a.name) changedPackagePlatformAttrs);
changedpathsjson = touchedFilesJson;
removedattrs = lib.attrNames (lib.groupBy (a: a.name) removedPackagePlatformAttrs);
})
users
teams
@ -180,7 +181,7 @@ runCommand "compare"
];
users = builtins.toJSON users;
teams = builtins.toJSON teams;
packages = builtins.toJSON (lib.map (lib.concatStringsSep ".") packages);
packages = builtins.toJSON packages;
passAsFile = [
"users"
"teams"

View file

@ -1,54 +1,70 @@
# 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
{
# Files that were changed
# Type: ListOf (Nixpkgs-root-relative path)
changedFiles,
# Attributes whose value was affected by the change
# Type: ListOf (ListOf String)
affectedAttrPaths,
pkgs ? import ../../.. {
lib,
changedattrs,
changedpathsjson,
removedattrs,
}:
let
pkgs = import ../../.. {
system = "x86_64-linux";
# 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.
# This would trigger the throw. By disabling aliases, we can fallback gracefully below.
config.allowAliases = false;
overlays = [ ];
},
lib,
}:
let
nixpkgsRoot = toString ../../.. + "/";
stripNixpkgsRootFromKeys = lib.mapAttrs' (
file: value: lib.nameValuePair (lib.removePrefix nixpkgsRoot file) value
);
};
moduleMeta = (pkgs.nixos { }).config.meta;
changedpaths = lib.importJSON changedpathsjson;
# Currently just nixos module maintainers, but in the future we can use this for code owners too
fileUsers = stripNixpkgsRootFromKeys moduleMeta.maintainers;
fileTeams = stripNixpkgsRootFromKeys moduleMeta.teams;
# Extract attributes that changed from by-name paths.
# This allows pinging reviewers for pure refactors.
touchedattrs = lib.pipe changedpaths [
(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) changedFiles;
anyMatchingFile = filename: lib.any (lib.hasPrefix filename) changedpaths;
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 =
drv:
(lib.unique (
map (pos: lib.removePrefix nixpkgsRoot pos.file) (
map (pos: lib.removePrefix "${toString ../../..}/" pos.file) (
lib.filter (x: x != null) [
(drv.meta.maintainersPosition or null)
(drv.meta.teamsPosition or null)
@ -71,82 +87,50 @@ let
)
));
relevantAffectedAttrPaths = lib.filter (
attrPath:
# 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;
attrsWithFilenames = map (
pkg: pkg // { filenames = pkg.filenames ++ relevantFilenames pkg.package; }
) attrsWithMaintainers;
# 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;
attrsWithModifiedFiles = lib.filter (pkg: anyMatchingFiles pkg.filenames) attrsWithFilenames;
userPings =
context:
pkg:
map (maintainer: {
type = "user";
userId = maintainer.githubId;
inherit context;
packageName = pkg.name;
});
teamPings =
context: team:
if team ? githubId then
pkg: team:
if team ? github then
[
{
type = "team";
teamId = team.githubId;
inherit context;
packageName = pkg.name;
}
]
else
userPings context team.members;
userPings pkg team.members;
byType = lib.groupBy (ping: ping.type) (attrPathEntities ++ changedFileEntities);
maintainersToPing = lib.concatMap (
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 [ ]) [
(lib.groupBy (ping: toString ping.userId))
(lib.mapAttrs (_user: lib.map (pkg: pkg.context)))
(lib.mapAttrs (_user: lib.map (pkg: pkg.packageName)))
];
byTeam = lib.pipe (byType.team or [ ]) [
(lib.groupBy (ping: toString ping.teamId))
(lib.mapAttrs (_team: lib.map (pkg: pkg.context)))
(lib.mapAttrs (_team: lib.map (pkg: pkg.packageName)))
];
in
{
users = byUser;
teams = byTeam;
packages = attrPathsToGetMaintainersFor;
packages = lib.catAttrs "name" attrsWithModifiedFiles;
}

View file

@ -1,228 +0,0 @@
{
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;
}

View file

@ -4,12 +4,39 @@
let
inherit (lib)
mkOption
mkOptionType
types
;
# The resulting value of this type shows where all values were defined
sourceList = types.listOf types.raw // {
merge = loc: defs: lib.listToAttrs (lib.map ({ file, value }: lib.nameValuePair file value) defs);
maintainer = mkOptionType {
name = "maintainer";
check = email: lib.elem email (lib.attrValues lib.maintainers);
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
{
@ -17,14 +44,7 @@ in
options = {
meta = {
maintainers = mkOption {
type =
let
allMaintainers = lib.attrValues lib.maintainers;
in
lib.types.addCheck sourceList (lib.all (v: lib.elem v allMaintainers))
// {
description = "list of lib.maintainers";
};
type = listOfMaintainers;
default = [ ];
example = lib.literalExpression "[ lib.maintainers.alice lib.maintainers.bob ]";
description = ''
@ -34,22 +54,6 @@ in
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; [

View file

@ -14,17 +14,9 @@ let
};
in
rec {
# Inject ghost into lib.maintainers so it passes the addCheck validation
lib = (import ../../../lib).extend (
final: prev: {
maintainers = prev.maintainers // {
inherit ghost;
};
}
);
lib = import ../../../lib;
example = lib.evalModules {
specialArgs.lib = lib;
modules = [
../meta-maintainers.nix
{

View file

@ -22,7 +22,7 @@ in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
options = {

View file

@ -1,7 +1,7 @@
{ config, lib, ... }:
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = lib.teams.freedesktop.members;
};
options = {

View file

@ -6,7 +6,7 @@
}:
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = lib.teams.freedesktop.members;
};
options = {

View file

@ -1,7 +1,7 @@
{ config, lib, ... }:
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = lib.teams.freedesktop.members;
};
options = {

View file

@ -13,7 +13,7 @@ in
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = lib.teams.freedesktop.members ++ [ ];
};
options = {

View file

@ -32,7 +32,7 @@ in
];
meta = {
teams = [ teams.freedesktop ];
maintainers = teams.freedesktop.members;
};
options.xdg.portal = {

View file

@ -10,7 +10,7 @@ let
in
{
meta = {
teams = [ lib.teams.lxqt ];
maintainers = lib.teams.lxqt.members;
};
options.xdg.portal.lxqt = {

View file

@ -6,7 +6,7 @@
}:
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = lib.teams.freedesktop.members;
};
options = {

View file

@ -49,5 +49,5 @@ in
systemd.user.services.dsearch.wantedBy = mkIf cfg.systemd.enable [ cfg.systemd.target ];
};
meta.teams = [ lib.teams.danklinux ];
meta.maintainers = lib.teams.danklinux.members;
}

View file

@ -11,7 +11,7 @@ let
in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
options = {

View file

@ -10,7 +10,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -16,7 +16,7 @@ in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
options = {

View file

@ -10,7 +10,7 @@ let
in
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = lib.teams.freedesktop.members;
};
options.programs.nm-applet = {

View file

@ -285,5 +285,5 @@ in
];
};
meta.teams = [ lib.teams.steam ];
meta.maintainers = lib.teams.steam.members;
}

View file

@ -11,7 +11,7 @@ let
in
{
meta = {
teams = [ lib.teams.xfce ];
maintainers = lib.teams.xfce.members;
};
options = {

View file

@ -226,5 +226,5 @@ in
hardware.graphics.enable = lib.mkDefault true;
};
meta.teams = [ lib.teams.danklinux ];
meta.maintainers = lib.teams.danklinux.members;
}

View file

@ -130,5 +130,5 @@ in
] "Nvidia patches are no longer needed")
];
meta.teams = [ lib.teams.hyprland ];
meta.maintainers = lib.teams.hyprland.members;
}

View file

@ -26,5 +26,5 @@ in
security.pam.services.hyprlock = { };
};
meta.teams = [ lib.teams.hyprland ];
meta.maintainers = lib.teams.hyprland.members;
}

View file

@ -11,7 +11,7 @@ let
in
{
meta = {
teams = [ lib.teams.xfce ];
maintainers = lib.teams.xfce.members;
};
options = {

View file

@ -1218,7 +1218,7 @@ in
];
meta = {
teams = [ lib.teams.acme ];
maintainers = lib.teams.acme.members;
doc = ./default.md;
};
}

View file

@ -272,5 +272,5 @@ in
};
};
meta.teams = [ lib.teams.apparmor ];
meta.maintainers = lib.teams.apparmor.members;
}

View file

@ -962,6 +962,5 @@ in
(import ./rke2.nix args)
];
meta.teams = [ lib.teams.k3s ];
meta.maintainers = pkgs.rke2.meta.maintainers;
meta.maintainers = pkgs.rke2.meta.maintainers ++ lib.teams.k3s.members;
}

View file

@ -313,5 +313,5 @@ in
'')
];
meta.teams = [ lib.teams.buildbot ];
meta.maintainers = lib.teams.buildbot.members;
}

View file

@ -196,6 +196,6 @@ in
};
};
meta.teams = [ lib.teams.buildbot ];
meta.maintainers = lib.teams.buildbot.members;
}

View file

@ -893,5 +893,5 @@ in
)
];
meta.teams = [ teams.gitlab ];
meta.maintainers = teams.gitlab.members;
}

View file

@ -13,7 +13,7 @@ let
in
{
meta.maintainers = with lib.maintainers; [ thevar1able ];
meta.maintainers = [ "thevar1able" ];
###### interface

View file

@ -61,7 +61,7 @@ let
notExcluded = pkg: utils.disablePackageByName pkg config.environment.budgie.excludePackages;
in
{
meta.teams = [ lib.teams.budgie ];
meta.maintainers = lib.teams.budgie.members;
imports = [
(lib.mkRenamedOptionModule

View file

@ -44,7 +44,7 @@ let
];
in
{
meta.teams = [ lib.teams.cosmic ];
meta.maintainers = lib.teams.cosmic.members;
options = {
services.desktopManager.cosmic = {

View file

@ -82,7 +82,7 @@ in
{
meta = {
doc = ./gnome.md;
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
imports = [

View file

@ -292,5 +292,5 @@ in
})
];
meta.teams = [ lib.teams.lomiri ];
meta.maintainers = lib.teams.lomiri.members;
}

View file

@ -25,7 +25,7 @@ in
meta = {
doc = ./pantheon.md;
teams = [ teams.pantheon ];
maintainers = teams.pantheon.members;
};
imports = [

View file

@ -7,7 +7,7 @@
}:
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = lib.teams.freedesktop.members;
};
###### interface

View file

@ -373,6 +373,6 @@ in
};
meta = {
teams = [ lib.teams.pantheon ];
maintainers = [ ] ++ lib.teams.pantheon.members;
};
}

View file

@ -10,7 +10,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -10,7 +10,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -13,7 +13,7 @@ let
in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
options = {

View file

@ -10,7 +10,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -16,7 +16,7 @@ in
{
meta = {
teams = [ teams.gnome ];
maintainers = teams.gnome.members;
};
options = {

View file

@ -48,7 +48,7 @@ in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -12,7 +12,7 @@ in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
options = {

View file

@ -10,7 +10,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -8,7 +8,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -16,7 +16,7 @@ in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -7,7 +7,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
options = {

View file

@ -10,7 +10,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -7,7 +7,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
imports = [

View file

@ -14,7 +14,7 @@ in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -10,7 +10,7 @@
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -10,7 +10,7 @@ let
in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
imports = [

View file

@ -16,7 +16,7 @@ in
{
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -85,8 +85,7 @@ let
};
in
{
meta.teams = [ teams.freedesktop ];
meta.maintainers = [ maintainers.k900 ];
meta.maintainers = teams.freedesktop.members ++ [ maintainers.k900 ];
###### interface
options = {

View file

@ -18,7 +18,7 @@ in
];
meta = {
teams = [ lib.teams.pantheon ];
maintainers = [ ] ++ lib.teams.pantheon.members;
};
###### interface

View file

@ -8,7 +8,7 @@
{
meta = {
teams = [ lib.teams.pantheon ];
maintainers = [ ] ++ lib.teams.pantheon.members;
};
###### interface

View file

@ -16,7 +16,7 @@ let
in
{
meta.teams = [ lib.teams.cosmic ];
meta.maintainers = lib.teams.cosmic.members;
options.services.displayManager.cosmic-greeter = {
enable = lib.mkEnableOption "COSMIC greeter";

View file

@ -321,5 +321,5 @@ in
services.libinput.enable = mkDefault true;
};
meta.teams = [ lib.teams.danklinux ];
meta.maintainers = lib.teams.danklinux.members;
}

View file

@ -105,7 +105,7 @@ in
];
meta = {
teams = [ lib.teams.gnome ];
maintainers = lib.teams.gnome.members;
};
###### interface

View file

@ -171,7 +171,7 @@ in
meta = {
buildDocsInSandbox = false;
teams = [ lib.teams.home-assistant ];
maintainers = lib.teams.home-assistant.members;
};
options.services.home-assistant = {

View file

@ -341,5 +341,5 @@ in
};
};
};
meta.teams = [ lib.teams.matrix ];
meta.maintainers = lib.teams.matrix.members;
}

View file

@ -849,5 +849,5 @@ in
};
meta.doc = ./forgejo.md;
meta.teams = [ lib.teams.forgejo ];
meta.maintainers = lib.teams.forgejo.members;
}

View file

@ -1911,5 +1911,5 @@ in
};
meta.doc = ./gitlab.md;
meta.teams = [ teams.gitlab ];
meta.maintainers = teams.gitlab.members;
}

View file

@ -63,5 +63,5 @@ in
};
};
meta.teams = [ lib.teams.beam ];
meta.maintainers = lib.teams.beam.members;
}

View file

@ -444,5 +444,5 @@ in
};
};
meta.teams = [ lib.teams.jitsi ];
meta.maintainers = lib.teams.jitsi.members;
}

View file

@ -166,5 +166,5 @@ in
lib.mkDefault "${pkgs.jicofo}/etc/jitsi/jicofo/logging.properties-journal";
};
meta.teams = [ lib.teams.jitsi ];
meta.maintainers = lib.teams.jitsi.members;
}

View file

@ -243,5 +243,5 @@ in
lib.mkDefault "${stateDir}/logging.properties-journal";
};
meta.teams = [ lib.teams.jitsi ];
meta.maintainers = lib.teams.jitsi.members;
}

View file

@ -331,5 +331,5 @@ in
];
};
meta.teams = [ lib.teams.jitsi ];
meta.maintainers = lib.teams.jitsi.members;
}

View file

@ -9,7 +9,7 @@ let
in
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = lib.teams.freedesktop.members;
};
options = with lib; {

View file

@ -142,8 +142,9 @@ in
{
meta = {
teams = [ lib.teams.freedesktop ];
maintainers = [ lib.maintainers.frontear ];
maintainers = teams.freedesktop.members ++ [
lib.maintainers.frontear
];
};
###### interface

View file

@ -299,8 +299,10 @@ in
environment.systemPackages = [ cfg.package ];
};
meta.teams = [ lib.teams.ngi ];
meta.maintainers = with lib.maintainers; [
ppom
];
meta.maintainers =
with lib.maintainers;
[
ppom
]
++ lib.teams.ngi.members;
}

View file

@ -28,5 +28,5 @@ in
};
};
meta.teams = [ lib.teams.hyprland ];
meta.maintainers = lib.teams.hyprland.members;
}

View file

@ -756,5 +756,5 @@ in
};
meta.doc = ./jitsi-meet.md;
meta.teams = [ lib.teams.jitsi ];
meta.maintainers = lib.teams.jitsi.members;
}

View file

@ -1774,5 +1774,5 @@ in
);
meta.doc = ./nextcloud.md;
meta.teams = [ lib.teams.nextcloud ];
meta.maintainers = lib.teams.nextcloud.members;
}

View file

@ -252,5 +252,5 @@ in
};
};
meta.teams = [ lib.teams.ngi ];
meta.maintainers = lib.teams.ngi.members;
}

View file

@ -25,7 +25,7 @@ in
{
meta = {
teams = [ teams.enlightenment ];
maintainers = teams.enlightenment.members;
};
imports = [

View file

@ -16,7 +16,7 @@ in
{
meta = {
teams = [ teams.lumina ];
maintainers = teams.lumina.members;
};
options = {

View file

@ -15,7 +15,7 @@ in
{
meta = {
teams = [ teams.lxqt ];
maintainers = teams.lxqt.members;
};
options = {

View file

@ -15,7 +15,7 @@ let
in
{
meta = {
teams = [ teams.xfce ];
maintainers = teams.xfce.members;
};
imports = [

View file

@ -40,6 +40,6 @@ python3.pkgs.buildPythonApplication {
'';
meta = {
teams = [ lib.teams.pantheon ];
maintainers = [ ] ++ lib.teams.pantheon.members;
};
}

View file

@ -13,7 +13,7 @@ let
in
{
meta.teams = [ lib.teams.lomiri ];
meta.maintainers = lib.teams.lomiri.members;
options = {
services.xserver.displayManager.lightdm.greeters.lomiri = {

View file

@ -16,7 +16,7 @@ let
in
{
meta = {
teams = [ lib.teams.pantheon ];
maintainers = [ ] ++ lib.teams.pantheon.members;
};
options = {

View file

@ -73,7 +73,7 @@ let
in
{
meta = {
teams = [ lib.teams.pantheon ];
maintainers = [ ] ++ lib.teams.pantheon.members;
};
# Note: the order in which lightdm greeter modules are imported

View file

@ -13,7 +13,7 @@ let
in
{
meta = {
teams = [ teams.pantheon ];
maintainers = teams.pantheon.members;
};
###### interface

View file

@ -13,7 +13,7 @@ let
in
{
meta = {
teams = [ lib.teams.podman ];
maintainers = [ ] ++ lib.teams.podman.members;
};
options.virtualisation.containers = {

View file

@ -21,7 +21,7 @@ let
in
{
meta = {
teams = [ teams.podman ];
maintainers = teams.podman.members;
};
options.virtualisation.cri-o = {

View file

@ -10,7 +10,7 @@ let
in
{
meta = {
teams = [ lib.teams.lxc ];
maintainers = lib.teams.lxc.members;
};
options = {

View file

@ -10,7 +10,7 @@ let
in
{
meta = {
teams = [ lib.teams.lxc ];
maintainers = lib.teams.lxc.members;
};
imports = [

View file

@ -176,7 +176,7 @@ let
in
{
meta = {
teams = [ lib.teams.lxc ];
maintainers = lib.teams.lxc.members;
};
options = {

View file

@ -7,7 +7,7 @@
{
meta = {
teams = [ lib.teams.lxc ];
maintainers = lib.teams.lxc.members;
};
imports = [

View file

@ -71,7 +71,7 @@ in
];
meta = {
teams = [ lib.teams.lxc ];
maintainers = lib.teams.lxc.members;
};
options = {

View file

@ -2,7 +2,7 @@
{
meta = {
teams = [ lib.teams.lxc ];
maintainers = lib.teams.lxc.members;
};
imports = [

View file

@ -13,7 +13,7 @@ in
{
meta = {
teams = [ lib.teams.lxc ];
maintainers = lib.teams.lxc.members;
};
options.virtualisation.lxc = {

View file

@ -12,7 +12,7 @@ let
in
{
meta = {
teams = [ lib.teams.lxc ];
maintainers = lib.teams.lxc.members;
};
###### interface

View file

@ -63,7 +63,7 @@ in
];
meta = {
teams = [ lib.teams.podman ];
maintainers = lib.teams.podman.members;
};
options.virtualisation.podman = {

View file

@ -35,6 +35,5 @@ in
};
meta.teams = [ lib.teams.podman ];
meta.maintainers = [ lib.maintainers.roberth ];
meta.maintainers = lib.teams.podman.members ++ [ lib.maintainers.roberth ];
}

View file

@ -95,6 +95,5 @@ in
networking.firewall.allowedTCPPorts = lib.optional (cfg.enable && cfg.openFirewall) cfg.port;
};
meta.teams = [ lib.teams.podman ];
meta.maintainers = [ lib.maintainers.roberth ];
meta.maintainers = lib.teams.podman.members ++ [ lib.maintainers.roberth ];
}

View file

@ -937,6 +937,6 @@ in
};
meta = {
doc = ./xen.md;
teams = [ teams.xen ];
maintainers = teams.xen.members;
};
}