packaging: split derivations correctly to avoid Rust rebuilds for module

changes
This commit is contained in:
Qyriad 2026-02-16 18:02:39 +01:00
parent 26397ccf37
commit da509d97c7

View file

@ -27,18 +27,69 @@ in {
doCheck = true; doCheck = true;
doInstallCheck = true; doInstallCheck = true;
src = lib.fileset.toSource { phases = [ "unpackPhase" "patchPhase" "installPhase" ];
root = ./.;
fileset = lib.fileset.unions [ src = linkFarm "dynix-source" {
./Cargo.toml inherit (self) dynixCommand dynixModules;
./Cargo.lock
./src
];
}; };
dynixModules = stdenv.mkDerivation (modulesSelf: { installPhase = lib.dedent ''
pname = "dynix-modules"; runHook preInstall
mkdir -p "$out"
cp -r --reflink=auto "$dynixCommand/"* "$out/"
mkdir -p "$modules"
cp -r --reflink=auto "$dynixModules/"* "$modules/"
runHook postInstall
'';
#
# SUB-DERIVATONS
#
dynixCommand = stdenv.mkDerivation (finalAttrs: let
commandSelf = finalAttrs.finalPackage;
in {
pname = "${self.pname}-command";
inherit (self) version; inherit (self) version;
inherit (self) strictDeps __structuredAttrs;
inherit (self) doCheck doInstallCheck;
src = lib.fileset.toSource {
root = ./.;
fileset = lib.fileset.unions [
./Cargo.toml
./Cargo.lock
./src
];
};
cargoDeps = rustPlatform.importCargoLock {
lockFile = ./Cargo.lock;
};
nativeBuildInputs = rustHooks.asList ++ [
cargo
];
nativeInstallCheckInputs = [
versionCheckHook
];
meta = {
mainProgram = "dynix";
};
});
dynixModules = stdenv.mkDerivation (finalAttrs: let
modulesSelf = finalAttrs.finalPackage;
in {
pname = "${self.pname}-modules";
inherit (self) version;
inherit (self) strictDeps __structuredAttrs;
inherit (self) doCheck doInstallCheck;
src = lib.fileset.toSource { src = lib.fileset.toSource {
root = ./modules/dynamicism; root = ./modules/dynamicism;
fileset = lib.fileset.unions [ fileset = lib.fileset.unions [
@ -51,27 +102,18 @@ in {
modulesOut = "${placeholder "out"}/share/nixos/modules/dynix"; modulesOut = "${placeholder "out"}/share/nixos/modules/dynix";
installPhase = lib.dedent '' installPhase = lib.dedent ''
runHook preInstall
mkdir -p "$modulesOut" mkdir -p "$modulesOut"
cp -r "$src/"* "$modulesOut/" cp -r "$src/"* "$modulesOut/"
runHook postInstall
''; '';
}); });
cargoDeps = rustPlatform.importCargoLock { #
lockFile = ./Cargo.lock; # ----------------------------------------------------------------------------
}; #
nativeBuildInputs = rustHooks.asList ++ [
cargo
];
nativeInstallCheckInputs = [
versionCheckHook
];
postFixup = lib.dedent ''
mkdir -p "$modules"
cp -r --reflink=auto "$dynixModules/"* "$modules/"
'';
passthru.mkDevShell = { passthru.mkDevShell = {
path, path,