testsAndMisc/linux_configuration/nix-poc/modules/arch-parity/packages.nix

56 lines
1.9 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.linuxConfigPoc;
readList = file:
let
lines = lib.splitString "\n" (builtins.readFile file);
trimmed = map lib.strings.trim lines;
in
builtins.filter (line: line != "" && !(lib.hasPrefix "#" line)) trimmed;
pacmanPackageFile = "${toString cfg.repoPath}/fresh-install/pacman_packages.txt";
aurPackageFile = "${toString cfg.repoPath}/fresh-install/aur_packages.txt";
pacmanNamesRaw = readList pacmanPackageFile;
aurLinesRaw = readList aurPackageFile;
aurNames = map (line: builtins.head (lib.splitString " " line)) aurLinesRaw;
mappedPacmanNames = map
(name: if builtins.hasAttr name cfg.packageMap then builtins.getAttr name cfg.packageMap else name)
pacmanNamesRaw;
resolvePackage = name: lib.attrByPath (lib.splitString "." name) null pkgs;
resolvedPacmanPkgs = builtins.filter (pkg: pkg != null) (map resolvePackage mappedPacmanNames);
missingPacmanPkgs = builtins.filter (name: (resolvePackage name) == null) mappedPacmanNames;
in {
config = lib.mkIf cfg.enable {
warnings = [
"linuxConfigPoc: ${toString (builtins.length resolvedPacmanPkgs)} pacman packages resolved to nixpkgs attrs."
"linuxConfigPoc: ${toString (builtins.length missingPacmanPkgs)} pacman packages still need mapping/overlays."
"linuxConfigPoc: ${toString (builtins.length aurNames)} AUR packages detected and not yet represented as Nix derivations."
"linuxConfigPoc: pacman-wrapper policy/challenges remain imperative scripts; full Nix-native equivalent requires dedicated policy module."
];
environment.systemPackages =
lib.unique (
(with pkgs; [
acpi
bc
dex
i3blocks
i3lock
i3status
iw
jq
networkmanagerapplet
pavucontrol
terminator
xss-lock
])
++ resolvedPacmanPkgs
);
};
}