2.home-manager/lib/python/check-duplicate-maintainers.py
Austin Horstman 94597e670f ci: fix validate-maintainers flake reference
Wasn't actually grabbing from the correct flake.lock revision of
maintainers in nixpkgs. Update to use the revision from the flake.lock
since the nix_path wasn't working.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-01-12 14:08:01 -06:00

69 lines
2.5 KiB
Python
Executable file

#! /usr/bin/env nix-shell
#! nix-shell -i python3 -p python3
"""
Check for duplicate maintainers between home-manager and nixpkgs
This script compares the maintainers in home-manager with those in nixpkgs
to identify duplicates that should be removed from home-manager.
"""
import json
import subprocess
import sys
from pathlib import Path
def main():
print("🔍 Checking for duplicate maintainers between HM and nixpkgs...")
# Get home-manager maintainers
hm_result = subprocess.run(['nix', 'eval', '--file', 'modules/lib/maintainers.nix', '--json'],
capture_output=True, text=True, check=True)
hm_maintainers = json.loads(hm_result.stdout)
hm_github_users = set()
for name, data in hm_maintainers.items():
if 'github' in data:
hm_github_users.add(data['github'])
# Read nixpkgs revision from flake.lock to ensure consistency between local and CI
flake_lock_path = Path('flake.lock')
with open(flake_lock_path, 'r') as f:
flake_lock = json.load(f)
nixpkgs_rev = flake_lock['nodes']['nixpkgs']['locked']['rev']
print(f"📌 Using nixpkgs from flake.lock: {nixpkgs_rev[:7]}")
# Get nixpkgs maintainers from the locked revision
nixpkgs_result = subprocess.run(
['nix', 'eval', f'github:NixOS/nixpkgs/{nixpkgs_rev}#lib.maintainers', '--json'],
capture_output=True, text=True, check=True
)
nixpkgs_maintainers = json.loads(nixpkgs_result.stdout)
nixpkgs_github_users = set()
for name, data in nixpkgs_maintainers.items():
if isinstance(data, dict) and 'github' in data:
nixpkgs_github_users.add(data['github'])
# Find duplicates
duplicates = hm_github_users.intersection(nixpkgs_github_users)
if duplicates:
print(f'❌ Found {len(duplicates)} duplicate maintainers between HM and nixpkgs:')
for github_user in sorted(duplicates):
# Find the HM attribute name for this github user
hm_attr = None
for attr_name, data in hm_maintainers.items():
if data.get('github') == github_user:
hm_attr = attr_name
break
print(f' - {github_user} (HM attribute: {hm_attr})')
print()
print('These maintainers should be removed from HM maintainers file to avoid duplication.')
print('They can be referenced directly from nixpkgs instead.')
sys.exit(1)
else:
print('✅ No duplicate maintainers found')
if __name__ == "__main__":
main()