diff --git a/package.nix b/package.nix index 69116af..6e16ec3 100644 --- a/package.nix +++ b/package.nix @@ -27,18 +27,69 @@ in { doCheck = true; doInstallCheck = true; - src = lib.fileset.toSource { - root = ./.; - fileset = lib.fileset.unions [ - ./Cargo.toml - ./Cargo.lock - ./src - ]; + phases = [ "unpackPhase" "patchPhase" "installPhase" ]; + + src = linkFarm "dynix-source" { + inherit (self) dynixCommand dynixModules; }; - dynixModules = stdenv.mkDerivation (modulesSelf: { - pname = "dynix-modules"; + installPhase = lib.dedent '' + 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) 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 { root = ./modules/dynamicism; fileset = lib.fileset.unions [ @@ -51,27 +102,18 @@ in { modulesOut = "${placeholder "out"}/share/nixos/modules/dynix"; installPhase = lib.dedent '' + runHook preInstall + mkdir -p "$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 = { path,