From 2e34620551b30c099cacc386ba9127f0bd04f77c Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sat, 28 Nov 2020 15:15:03 -0500 Subject: directory nixEnv (renamed from nixDevEnv) --- .gitignore | 4 +- makefile | 16 ++-- mkDub.nix | 2 +- nixDevEnv/dub/mkDub-dmd.nix | 121 -------------------------- nixDevEnv/dub/mkDub-ldc.nix | 121 -------------------------- nixDevEnv/overlays/ldcVersion.nix | 15 ---- nixDevEnv/shells/packages-ldc.nix | 14 --- nixDevEnv/shells/shell-dmd-verNix.nix | 12 --- nixDevEnv/shells/shell-dmd-verUser.nix | 14 --- nixDevEnv/shells/shell-ldc-verNix.nix | 5 -- nixDevEnv/shells/shell-ldc-verUser.nix | 7 -- nixEnv/dub/mkDub-dmd.nix | 121 ++++++++++++++++++++++++++ nixEnv/dub/mkDub-ldc.nix | 121 ++++++++++++++++++++++++++ nixEnv/nixDevEnv/dub/mkDub-dmd.nix | 121 ++++++++++++++++++++++++++ nixEnv/nixDevEnv/dub/mkDub-ldc.nix | 121 ++++++++++++++++++++++++++ nixEnv/nixDevEnv/overlays/ldcVersion.nix | 15 ++++ nixEnv/nixDevEnv/shells/packages-ldc.nix | 14 +++ nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix | 12 +++ nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix | 14 +++ nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix | 5 ++ nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix | 7 ++ nixEnv/overlays/ldcVersion.nix | 15 ++++ nixEnv/shells/packages-ldc.nix | 14 +++ nixEnv/shells/shell-dmd-verNix.nix | 12 +++ nixEnv/shells/shell-dmd-verUser.nix | 14 +++ nixEnv/shells/shell-ldc-verNix.nix | 5 ++ nixEnv/shells/shell-ldc-verUser.nix | 7 ++ org/spine_build_scaffold.org | 72 +++++++-------- shell.nix | 2 +- 29 files changed, 666 insertions(+), 357 deletions(-) delete mode 100644 nixDevEnv/dub/mkDub-dmd.nix delete mode 100644 nixDevEnv/dub/mkDub-ldc.nix delete mode 100644 nixDevEnv/overlays/ldcVersion.nix delete mode 100644 nixDevEnv/shells/packages-ldc.nix delete mode 100644 nixDevEnv/shells/shell-dmd-verNix.nix delete mode 100644 nixDevEnv/shells/shell-dmd-verUser.nix delete mode 100644 nixDevEnv/shells/shell-ldc-verNix.nix delete mode 100644 nixDevEnv/shells/shell-ldc-verUser.nix create mode 100644 nixEnv/dub/mkDub-dmd.nix create mode 100644 nixEnv/dub/mkDub-ldc.nix create mode 100644 nixEnv/nixDevEnv/dub/mkDub-dmd.nix create mode 100644 nixEnv/nixDevEnv/dub/mkDub-ldc.nix create mode 100644 nixEnv/nixDevEnv/overlays/ldcVersion.nix create mode 100644 nixEnv/nixDevEnv/shells/packages-ldc.nix create mode 100644 nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix create mode 100644 nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix create mode 100644 nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix create mode 100644 nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix create mode 100644 nixEnv/overlays/ldcVersion.nix create mode 100644 nixEnv/shells/packages-ldc.nix create mode 100644 nixEnv/shells/shell-dmd-verNix.nix create mode 100644 nixEnv/shells/shell-dmd-verUser.nix create mode 100644 nixEnv/shells/shell-ldc-verNix.nix create mode 100644 nixEnv/shells/shell-ldc-verUser.nix diff --git a/.gitignore b/.gitignore index 5706c86..1236343 100644 --- a/.gitignore +++ b/.gitignore @@ -22,8 +22,8 @@ !misc !misc/** !*.nix -!nixDevEnv -!nixDevEnv/** +!nixEnv +!nixEnv/** !.envrc !src !src/** diff --git a/makefile b/makefile index c75f51a..055ed39 100644 --- a/makefile +++ b/makefile @@ -535,23 +535,23 @@ tangle_maker: (org-babel-tangle) \ (kill-buffer)) '($$ORGFILES)))" 2>&1 nixsh_dmd_nixpkg: - ln -sf nixDevEnv/shells/shell-dmd-verNix.nix shell.nix; \ - ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix; \ + ln -sf nixEnv/shells/shell-dmd-verNix.nix shell.nix; \ + ln -sf nixEnv/dub/mkDub-dmd.nix mkDub.nix; \ ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ nix-shell; nixsh_dmd_user: - ln -sf nixDevEnv/shells/shell-dmd-verUser.nix shell.nix; \ - ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix; \ + ln -sf nixEnv/shells/shell-dmd-verUser.nix shell.nix; \ + ln -sf nixEnv/dub/mkDub-dmd.nix mkDub.nix; \ ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ nix-shell; nixsh_ldc_nixpkg: - ln -sf nixDevEnv/shells/shell-ldc-verNix.nix shell.nix; \ - ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix; \ + ln -sf nixEnv/shells/shell-ldc-verNix.nix shell.nix; \ + ln -sf nixEnv/dub/mkDub-ldc.nix mkDub.nix; \ ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ nix-shell; nixsh_ldc_user: - ln -sf nixDevEnv/shells/shell-ldc-verUser.nix shell.nix; \ - ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix; \ + ln -sf nixEnv/shells/shell-ldc-verUser.nix shell.nix; \ + ln -sf nixEnv/dub/mkDub-ldc.nix mkDub.nix; \ ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ nix-shell; gitsnapshot: distclean tangle diff --git a/mkDub.nix b/mkDub.nix index f3b6966..254bb41 120000 --- a/mkDub.nix +++ b/mkDub.nix @@ -1 +1 @@ -nixDevEnv/dub/mkDub-ldc.nix \ No newline at end of file +nixEnv/dub/mkDub-ldc.nix \ No newline at end of file diff --git a/nixDevEnv/dub/mkDub-dmd.nix b/nixDevEnv/dub/mkDub-dmd.nix deleted file mode 100644 index a35f2d5..0000000 --- a/nixDevEnv/dub/mkDub-dmd.nix +++ /dev/null @@ -1,121 +0,0 @@ -{ pkgs ? import {}, - stdenv ? pkgs.stdenv, - rdmd ? pkgs.rdmd, - dmd ? pkgs.dmd, - dub ? pkgs.dub }: - -with stdenv; -let - # Filter function to remove the .dub package folder from src - filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( - type == "directory" && baseName == ".dub" - ); - - # Convert a GIT rev string (tag) to a simple semver version - rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; - - dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; - - # Fetch a dependency (source only for now) - fromDub = dubDep: mkDerivation rec { - name = "${src.name}-${version}"; - version = rev-to-version dubDep.fetch.rev; - nativeBuildInputs = [ rdmd dmd dub ]; - src = dep2src dubDep; - - buildPhase = '' - runHook preBuild - export HOME=$PWD - dub build -b=release - runHook postBuild - ''; - - # outputs = [ "lib" ]; - - # installPhase = '' - # runHook preInstall - # mkdir -p $out/bin - # runHook postInstall - # ''; - }; - - # Adds a local package directory (e.g. a git repository) to Dub - dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; - - # The target output of the Dub package - targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; - - # Remove reference to build tools and library sources - disallowedReferences = deps: [ dmd rdmd dub ] ++ builtins.map dep2src deps; - - removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; - -in { - inherit fromDub; - - mkDubDerivation = lib.makeOverridable ({ - src, - nativeBuildInputs ? [], - dubJSON ? src + "/dub.json", - selections ? src + "/dub.selections.nix", - deps ? import selections, - passthru ? {}, - package ? lib.importJSON dubJSON, - ... - } @ attrs: stdenv.mkDerivation (attrs // { - - pname = package.name; - - nativeBuildInputs = [ rdmd dmd dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; - disallowedReferences = disallowedReferences deps; - - passthru = passthru // { - inherit dub dmd rdmd pkgs; - }; - - src = lib.cleanSourceWith { - filter = filterDub; - src = lib.cleanSource src; - }; - - preFixup = '' - find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true - ''; - - buildPhase = '' - runHook preBuild - - export HOME=$PWD - ${lib.concatMapStringsSep "\n" dub-add-local deps} - dub build --build=release --combined --skip-registry=all - - runHook postBuild - ''; - - checkPhase = '' - runHook preCheck - - export HOME=$PWD - ${lib.concatMapStringsSep "\n" dub-add-local deps} - dub test --combined --skip-registry=all - - runHook postCheck - ''; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin - cp -r "${targetOf package}" $out/bin - - runHook postInstall - ''; - - meta = lib.optionalAttrs (package ? description) { - description = package.description; - } // attrs.meta or {}; - } // lib.optionalAttrs (!(attrs ? version)) { - # Use name from dub.json, unless pname and version are specified - name = package.name; - })); -} diff --git a/nixDevEnv/dub/mkDub-ldc.nix b/nixDevEnv/dub/mkDub-ldc.nix deleted file mode 100644 index a9cbb82..0000000 --- a/nixDevEnv/dub/mkDub-ldc.nix +++ /dev/null @@ -1,121 +0,0 @@ -{ pkgs ? import {}, - stdenv ? pkgs.stdenv, - ldc ? pkgs.ldc, - dub ? pkgs.dub -}: - -with stdenv; -let - # Filter function to remove the .dub package folder from src - filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( - type == "directory" && baseName == ".dub" - ); - - # Convert a GIT rev string (tag) to a simple semver version - rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; - - dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; - - # Fetch a dependency (source only for now) - fromDub = dubDep: mkDerivation rec { - name = "${src.name}-${version}"; - version = rev-to-version dubDep.fetch.rev; - nativeBuildInputs = [ ldc dub ]; - src = dep2src dubDep; - - buildPhase = '' - runHook preBuild - export HOME=$PWD - dub build -b=release - runHook postBuild - ''; - - # outputs = [ "lib" ]; - - # installPhase = '' - # runHook preInstall - # mkdir -p $out/bin - # runHook postInstall - # ''; - }; - - # Adds a local package directory (e.g. a git repository) to Dub - dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; - - # The target output of the Dub package - targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; - - # Remove reference to build tools and library sources - disallowedReferences = deps: [ ldc dub ] ++ builtins.map dep2src deps; - - removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; - -in { - inherit fromDub; - - mkDubDerivation = lib.makeOverridable ({ - src, - nativeBuildInputs ? [], - dubJSON ? src + "/dub.json", - selections ? src + "/dub.selections.nix", - deps ? import selections, - passthru ? {}, - package ? lib.importJSON dubJSON, - ... - } @ attrs: stdenv.mkDerivation (attrs // { - - pname = package.name; - - nativeBuildInputs = [ ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; - disallowedReferences = disallowedReferences deps; - - passthru = passthru // { - inherit dub ldc pkgs; - }; - - src = lib.cleanSourceWith { - filter = filterDub; - src = lib.cleanSource src; - }; - - preFixup = '' - find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true - ''; - - buildPhase = '' - runHook preBuild - - export HOME=$PWD - ${lib.concatMapStringsSep "\n" dub-add-local deps} - dub build --compiler=ldc2 --build=release --combined --skip-registry=all - - runHook postBuild - ''; - - checkPhase = '' - runHook preCheck - - export HOME=$PWD - ${lib.concatMapStringsSep "\n" dub-add-local deps} - dub test --combined --skip-registry=all - - runHook postCheck - ''; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin - cp -r "${targetOf package}" $out/bin - - runHook postInstall - ''; - - meta = lib.optionalAttrs (package ? description) { - description = package.description; - } // attrs.meta or {}; - } // lib.optionalAttrs (!(attrs ? version)) { - # Use name from dub.json, unless pname and version are specified - name = package.name; - })); -} diff --git a/nixDevEnv/overlays/ldcVersion.nix b/nixDevEnv/overlays/ldcVersion.nix deleted file mode 100644 index 5bc7f7a..0000000 --- a/nixDevEnv/overlays/ldcVersion.nix +++ /dev/null @@ -1,15 +0,0 @@ -self: super: rec { - ldc = super.ldc.overrideAttrs(oldAttrs: rec { - pname = "ldc"; - version = "1.24.0"; - sha256 = "0g5svf55i0kq55q49awmwqj9qi1n907cyrn1vjdjgs8nx6nn35gx"; - name = "${pname}-${version}"; - src = super.fetchurl { - url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"; - sha256 = sha256; - }; - postUnpack = '' - patchShebangs . - ''; - }); -} diff --git a/nixDevEnv/shells/packages-ldc.nix b/nixDevEnv/shells/packages-ldc.nix deleted file mode 100644 index bcef059..0000000 --- a/nixDevEnv/shells/packages-ldc.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ pkgs ? import {} }: -let - dub2nix-src = fetchTarball { - url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; - }; - dub2nix = (import dub2nix-src) { inherit pkgs; }; -in -with pkgs; [ - nix - ldc - sqlite - nix-prefetch-git - validatePkgConfig -] diff --git a/nixDevEnv/shells/shell-dmd-verNix.nix b/nixDevEnv/shells/shell-dmd-verNix.nix deleted file mode 100644 index 7f16efe..0000000 --- a/nixDevEnv/shells/shell-dmd-verNix.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ pkgs ? import {} }: -pkgs.mkShell { - buildInputs = with pkgs; [ - nix - dub - dmd - rdmd - sqlite - dub2nix - nix-prefetch-git - ]; -} diff --git a/nixDevEnv/shells/shell-dmd-verUser.nix b/nixDevEnv/shells/shell-dmd-verUser.nix deleted file mode 100644 index 334aece..0000000 --- a/nixDevEnv/shells/shell-dmd-verUser.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ pkgs ? import - { overlays = [ ]; } -}: -pkgs.mkShell { - buildInputs = with pkgs; [ - nix - dub - dmd - rdmd - sqlite - dub2nix - nix-prefetch-git - ]; -} diff --git a/nixDevEnv/shells/shell-ldc-verNix.nix b/nixDevEnv/shells/shell-ldc-verNix.nix deleted file mode 100644 index 0a6aa9a..0000000 --- a/nixDevEnv/shells/shell-ldc-verNix.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ pkgs ? import {} }: -pkgs.mkShell { - buildInputs = with pkgs; - [ (import ./packages-ldc.nix { inherit pkgs; }) ]; -} diff --git a/nixDevEnv/shells/shell-ldc-verUser.nix b/nixDevEnv/shells/shell-ldc-verUser.nix deleted file mode 100644 index 1c9c092..0000000 --- a/nixDevEnv/shells/shell-ldc-verUser.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ pkgs ? import { - overlays = [ (import ../overlays/ldcVersion.nix) ]; -} }: -pkgs.mkShell { - buildInputs = with pkgs; - [ (import ./packages-ldc.nix { inherit pkgs; }) ]; -} diff --git a/nixEnv/dub/mkDub-dmd.nix b/nixEnv/dub/mkDub-dmd.nix new file mode 100644 index 0000000..a35f2d5 --- /dev/null +++ b/nixEnv/dub/mkDub-dmd.nix @@ -0,0 +1,121 @@ +{ pkgs ? import {}, + stdenv ? pkgs.stdenv, + rdmd ? pkgs.rdmd, + dmd ? pkgs.dmd, + dub ? pkgs.dub }: + +with stdenv; +let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + + # Convert a GIT rev string (tag) to a simple semver version + rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; + + dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; + + # Fetch a dependency (source only for now) + fromDub = dubDep: mkDerivation rec { + name = "${src.name}-${version}"; + version = rev-to-version dubDep.fetch.rev; + nativeBuildInputs = [ rdmd dmd dub ]; + src = dep2src dubDep; + + buildPhase = '' + runHook preBuild + export HOME=$PWD + dub build -b=release + runHook postBuild + ''; + + # outputs = [ "lib" ]; + + # installPhase = '' + # runHook preInstall + # mkdir -p $out/bin + # runHook postInstall + # ''; + }; + + # Adds a local package directory (e.g. a git repository) to Dub + dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; + + # The target output of the Dub package + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + + # Remove reference to build tools and library sources + disallowedReferences = deps: [ dmd rdmd dub ] ++ builtins.map dep2src deps; + + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + +in { + inherit fromDub; + + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + selections ? src + "/dub.selections.nix", + deps ? import selections, + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + + pname = package.name; + + nativeBuildInputs = [ rdmd dmd dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + + passthru = passthru // { + inherit dub dmd rdmd pkgs; + }; + + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + + preFixup = '' + find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + + buildPhase = '' + runHook preBuild + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub build --build=release --combined --skip-registry=all + + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub test --combined --skip-registry=all + + runHook postCheck + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp -r "${targetOf package}" $out/bin + + runHook postInstall + ''; + + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + # Use name from dub.json, unless pname and version are specified + name = package.name; + })); +} diff --git a/nixEnv/dub/mkDub-ldc.nix b/nixEnv/dub/mkDub-ldc.nix new file mode 100644 index 0000000..a9cbb82 --- /dev/null +++ b/nixEnv/dub/mkDub-ldc.nix @@ -0,0 +1,121 @@ +{ pkgs ? import {}, + stdenv ? pkgs.stdenv, + ldc ? pkgs.ldc, + dub ? pkgs.dub +}: + +with stdenv; +let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + + # Convert a GIT rev string (tag) to a simple semver version + rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; + + dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; + + # Fetch a dependency (source only for now) + fromDub = dubDep: mkDerivation rec { + name = "${src.name}-${version}"; + version = rev-to-version dubDep.fetch.rev; + nativeBuildInputs = [ ldc dub ]; + src = dep2src dubDep; + + buildPhase = '' + runHook preBuild + export HOME=$PWD + dub build -b=release + runHook postBuild + ''; + + # outputs = [ "lib" ]; + + # installPhase = '' + # runHook preInstall + # mkdir -p $out/bin + # runHook postInstall + # ''; + }; + + # Adds a local package directory (e.g. a git repository) to Dub + dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; + + # The target output of the Dub package + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + + # Remove reference to build tools and library sources + disallowedReferences = deps: [ ldc dub ] ++ builtins.map dep2src deps; + + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + +in { + inherit fromDub; + + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + selections ? src + "/dub.selections.nix", + deps ? import selections, + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + + pname = package.name; + + nativeBuildInputs = [ ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + + passthru = passthru // { + inherit dub ldc pkgs; + }; + + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + + preFixup = '' + find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + + buildPhase = '' + runHook preBuild + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub build --compiler=ldc2 --build=release --combined --skip-registry=all + + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub test --combined --skip-registry=all + + runHook postCheck + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp -r "${targetOf package}" $out/bin + + runHook postInstall + ''; + + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + # Use name from dub.json, unless pname and version are specified + name = package.name; + })); +} diff --git a/nixEnv/nixDevEnv/dub/mkDub-dmd.nix b/nixEnv/nixDevEnv/dub/mkDub-dmd.nix new file mode 100644 index 0000000..a35f2d5 --- /dev/null +++ b/nixEnv/nixDevEnv/dub/mkDub-dmd.nix @@ -0,0 +1,121 @@ +{ pkgs ? import {}, + stdenv ? pkgs.stdenv, + rdmd ? pkgs.rdmd, + dmd ? pkgs.dmd, + dub ? pkgs.dub }: + +with stdenv; +let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + + # Convert a GIT rev string (tag) to a simple semver version + rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; + + dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; + + # Fetch a dependency (source only for now) + fromDub = dubDep: mkDerivation rec { + name = "${src.name}-${version}"; + version = rev-to-version dubDep.fetch.rev; + nativeBuildInputs = [ rdmd dmd dub ]; + src = dep2src dubDep; + + buildPhase = '' + runHook preBuild + export HOME=$PWD + dub build -b=release + runHook postBuild + ''; + + # outputs = [ "lib" ]; + + # installPhase = '' + # runHook preInstall + # mkdir -p $out/bin + # runHook postInstall + # ''; + }; + + # Adds a local package directory (e.g. a git repository) to Dub + dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; + + # The target output of the Dub package + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + + # Remove reference to build tools and library sources + disallowedReferences = deps: [ dmd rdmd dub ] ++ builtins.map dep2src deps; + + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + +in { + inherit fromDub; + + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + selections ? src + "/dub.selections.nix", + deps ? import selections, + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + + pname = package.name; + + nativeBuildInputs = [ rdmd dmd dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + + passthru = passthru // { + inherit dub dmd rdmd pkgs; + }; + + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + + preFixup = '' + find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + + buildPhase = '' + runHook preBuild + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub build --build=release --combined --skip-registry=all + + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub test --combined --skip-registry=all + + runHook postCheck + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp -r "${targetOf package}" $out/bin + + runHook postInstall + ''; + + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + # Use name from dub.json, unless pname and version are specified + name = package.name; + })); +} diff --git a/nixEnv/nixDevEnv/dub/mkDub-ldc.nix b/nixEnv/nixDevEnv/dub/mkDub-ldc.nix new file mode 100644 index 0000000..a9cbb82 --- /dev/null +++ b/nixEnv/nixDevEnv/dub/mkDub-ldc.nix @@ -0,0 +1,121 @@ +{ pkgs ? import {}, + stdenv ? pkgs.stdenv, + ldc ? pkgs.ldc, + dub ? pkgs.dub +}: + +with stdenv; +let + # Filter function to remove the .dub package folder from src + filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( + type == "directory" && baseName == ".dub" + ); + + # Convert a GIT rev string (tag) to a simple semver version + rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""]; + + dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; }; + + # Fetch a dependency (source only for now) + fromDub = dubDep: mkDerivation rec { + name = "${src.name}-${version}"; + version = rev-to-version dubDep.fetch.rev; + nativeBuildInputs = [ ldc dub ]; + src = dep2src dubDep; + + buildPhase = '' + runHook preBuild + export HOME=$PWD + dub build -b=release + runHook postBuild + ''; + + # outputs = [ "lib" ]; + + # installPhase = '' + # runHook preInstall + # mkdir -p $out/bin + # runHook postInstall + # ''; + }; + + # Adds a local package directory (e.g. a git repository) to Dub + dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}"; + + # The target output of the Dub package + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + + # Remove reference to build tools and library sources + disallowedReferences = deps: [ ldc dub ] ++ builtins.map dep2src deps; + + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + +in { + inherit fromDub; + + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + selections ? src + "/dub.selections.nix", + deps ? import selections, + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + + pname = package.name; + + nativeBuildInputs = [ ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + + passthru = passthru // { + inherit dub ldc pkgs; + }; + + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + + preFixup = '' + find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + + buildPhase = '' + runHook preBuild + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub build --compiler=ldc2 --build=release --combined --skip-registry=all + + runHook postBuild + ''; + + checkPhase = '' + runHook preCheck + + export HOME=$PWD + ${lib.concatMapStringsSep "\n" dub-add-local deps} + dub test --combined --skip-registry=all + + runHook postCheck + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp -r "${targetOf package}" $out/bin + + runHook postInstall + ''; + + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + # Use name from dub.json, unless pname and version are specified + name = package.name; + })); +} diff --git a/nixEnv/nixDevEnv/overlays/ldcVersion.nix b/nixEnv/nixDevEnv/overlays/ldcVersion.nix new file mode 100644 index 0000000..5bc7f7a --- /dev/null +++ b/nixEnv/nixDevEnv/overlays/ldcVersion.nix @@ -0,0 +1,15 @@ +self: super: rec { + ldc = super.ldc.overrideAttrs(oldAttrs: rec { + pname = "ldc"; + version = "1.24.0"; + sha256 = "0g5svf55i0kq55q49awmwqj9qi1n907cyrn1vjdjgs8nx6nn35gx"; + name = "${pname}-${version}"; + src = super.fetchurl { + url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"; + sha256 = sha256; + }; + postUnpack = '' + patchShebangs . + ''; + }); +} diff --git a/nixEnv/nixDevEnv/shells/packages-ldc.nix b/nixEnv/nixDevEnv/shells/packages-ldc.nix new file mode 100644 index 0000000..bcef059 --- /dev/null +++ b/nixEnv/nixDevEnv/shells/packages-ldc.nix @@ -0,0 +1,14 @@ +{ pkgs ? import {} }: +let + dub2nix-src = fetchTarball { + url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; + }; + dub2nix = (import dub2nix-src) { inherit pkgs; }; +in +with pkgs; [ + nix + ldc + sqlite + nix-prefetch-git + validatePkgConfig +] diff --git a/nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix b/nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix new file mode 100644 index 0000000..7f16efe --- /dev/null +++ b/nixEnv/nixDevEnv/shells/shell-dmd-verNix.nix @@ -0,0 +1,12 @@ +{ pkgs ? import {} }: +pkgs.mkShell { + buildInputs = with pkgs; [ + nix + dub + dmd + rdmd + sqlite + dub2nix + nix-prefetch-git + ]; +} diff --git a/nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix b/nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix new file mode 100644 index 0000000..334aece --- /dev/null +++ b/nixEnv/nixDevEnv/shells/shell-dmd-verUser.nix @@ -0,0 +1,14 @@ +{ pkgs ? import + { overlays = [ ]; } +}: +pkgs.mkShell { + buildInputs = with pkgs; [ + nix + dub + dmd + rdmd + sqlite + dub2nix + nix-prefetch-git + ]; +} diff --git a/nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix b/nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix new file mode 100644 index 0000000..0a6aa9a --- /dev/null +++ b/nixEnv/nixDevEnv/shells/shell-ldc-verNix.nix @@ -0,0 +1,5 @@ +{ pkgs ? import {} }: +pkgs.mkShell { + buildInputs = with pkgs; + [ (import ./packages-ldc.nix { inherit pkgs; }) ]; +} diff --git a/nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix b/nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix new file mode 100644 index 0000000..1c9c092 --- /dev/null +++ b/nixEnv/nixDevEnv/shells/shell-ldc-verUser.nix @@ -0,0 +1,7 @@ +{ pkgs ? import { + overlays = [ (import ../overlays/ldcVersion.nix) ]; +} }: +pkgs.mkShell { + buildInputs = with pkgs; + [ (import ./packages-ldc.nix { inherit pkgs; }) ]; +} diff --git a/nixEnv/overlays/ldcVersion.nix b/nixEnv/overlays/ldcVersion.nix new file mode 100644 index 0000000..5bc7f7a --- /dev/null +++ b/nixEnv/overlays/ldcVersion.nix @@ -0,0 +1,15 @@ +self: super: rec { + ldc = super.ldc.overrideAttrs(oldAttrs: rec { + pname = "ldc"; + version = "1.24.0"; + sha256 = "0g5svf55i0kq55q49awmwqj9qi1n907cyrn1vjdjgs8nx6nn35gx"; + name = "${pname}-${version}"; + src = super.fetchurl { + url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz"; + sha256 = sha256; + }; + postUnpack = '' + patchShebangs . + ''; + }); +} diff --git a/nixEnv/shells/packages-ldc.nix b/nixEnv/shells/packages-ldc.nix new file mode 100644 index 0000000..bcef059 --- /dev/null +++ b/nixEnv/shells/packages-ldc.nix @@ -0,0 +1,14 @@ +{ pkgs ? import {} }: +let + dub2nix-src = fetchTarball { + url = "https://github.com/lionello/dub2nix/archive/master.tar.gz"; + }; + dub2nix = (import dub2nix-src) { inherit pkgs; }; +in +with pkgs; [ + nix + ldc + sqlite + nix-prefetch-git + validatePkgConfig +] diff --git a/nixEnv/shells/shell-dmd-verNix.nix b/nixEnv/shells/shell-dmd-verNix.nix new file mode 100644 index 0000000..7f16efe --- /dev/null +++ b/nixEnv/shells/shell-dmd-verNix.nix @@ -0,0 +1,12 @@ +{ pkgs ? import {} }: +pkgs.mkShell { + buildInputs = with pkgs; [ + nix + dub + dmd + rdmd + sqlite + dub2nix + nix-prefetch-git + ]; +} diff --git a/nixEnv/shells/shell-dmd-verUser.nix b/nixEnv/shells/shell-dmd-verUser.nix new file mode 100644 index 0000000..334aece --- /dev/null +++ b/nixEnv/shells/shell-dmd-verUser.nix @@ -0,0 +1,14 @@ +{ pkgs ? import + { overlays = [ ]; } +}: +pkgs.mkShell { + buildInputs = with pkgs; [ + nix + dub + dmd + rdmd + sqlite + dub2nix + nix-prefetch-git + ]; +} diff --git a/nixEnv/shells/shell-ldc-verNix.nix b/nixEnv/shells/shell-ldc-verNix.nix new file mode 100644 index 0000000..0a6aa9a --- /dev/null +++ b/nixEnv/shells/shell-ldc-verNix.nix @@ -0,0 +1,5 @@ +{ pkgs ? import {} }: +pkgs.mkShell { + buildInputs = with pkgs; + [ (import ./packages-ldc.nix { inherit pkgs; }) ]; +} diff --git a/nixEnv/shells/shell-ldc-verUser.nix b/nixEnv/shells/shell-ldc-verUser.nix new file mode 100644 index 0000000..1c9c092 --- /dev/null +++ b/nixEnv/shells/shell-ldc-verUser.nix @@ -0,0 +1,7 @@ +{ pkgs ? import { + overlays = [ (import ../overlays/ldcVersion.nix) ]; +} }: +pkgs.mkShell { + buildInputs = with pkgs; + [ (import ./packages-ldc.nix { inherit pkgs; }) ]; +} diff --git a/org/spine_build_scaffold.org b/org/spine_build_scaffold.org index 02a2dd5..a646763 100644 --- a/org/spine_build_scaffold.org +++ b/org/spine_build_scaffold.org @@ -1002,23 +1002,23 @@ tangle_maker: #+NAME: make_nix_project_shell #+BEGIN_SRC makefile nixsh_dmd_nixpkg: - ln -sf nixDevEnv/shells/shell-dmd-verNix.nix shell.nix; \ - ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix; \ + ln -sf nixEnv/shells/shell-dmd-verNix.nix shell.nix; \ + ln -sf nixEnv/dub/mkDub-dmd.nix mkDub.nix; \ ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ nix-shell; nixsh_dmd_user: - ln -sf nixDevEnv/shells/shell-dmd-verUser.nix shell.nix; \ - ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix; \ + ln -sf nixEnv/shells/shell-dmd-verUser.nix shell.nix; \ + ln -sf nixEnv/dub/mkDub-dmd.nix mkDub.nix; \ ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ nix-shell; nixsh_ldc_nixpkg: - ln -sf nixDevEnv/shells/shell-ldc-verNix.nix shell.nix; \ - ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix; \ + ln -sf nixEnv/shells/shell-ldc-verNix.nix shell.nix; \ + ln -sf nixEnv/dub/mkDub-ldc.nix mkDub.nix; \ ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ nix-shell; nixsh_ldc_user: - ln -sf nixDevEnv/shells/shell-ldc-verUser.nix shell.nix; \ - ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix; \ + ln -sf nixEnv/shells/shell-ldc-verUser.nix shell.nix; \ + ln -sf nixEnv/dub/mkDub-ldc.nix mkDub.nix; \ ls -la shell.nix mkDub.nix | cut -d " " -f 9-; \ nix-shell; #+END_SRC @@ -1809,59 +1809,59 @@ fi ** shells shell.nix SELECT :shell: *** dmd shell :dmd: -- ln -sf nixDevEnv/shells/shell-dmd-verNix.nix shell.nix -- ln -sf nixDevEnv/shells/shell-dmd-verUser.nix shell.nix +- ln -sf nixEnv/shells/shell-dmd-verNix.nix shell.nix +- ln -sf nixEnv/shells/shell-dmd-verUser.nix shell.nix -- ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix +- ln -sf nixEnv/dub/mkDub-dmd.nix mkDub.nix **** nixpkg -- ln -sf nixDevEnv/shells/shell-dmd-verNix.nix shell.nix -- ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix +- ln -sf nixEnv/shells/shell-dmd-verNix.nix shell.nix +- ln -sf nixEnv/dub/mkDub-dmd.nix mkDub.nix -#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/shell-dmd-verNix.nix +#+BEGIN_SRC nix :tangle ../nixEnv/shells/shell-dmd-verNix.nix { pkgs ? import {} }: <> #+END_SRC **** user -- ln -sf nixDevEnv/shells/shell-dmd-verUser.nix shell.nix -- ln -sf nixDevEnv/dub/mkDub-dmd.nix mkDub.nix +- ln -sf nixEnv/shells/shell-dmd-verUser.nix shell.nix +- ln -sf nixEnv/dub/mkDub-dmd.nix mkDub.nix -#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/shell-dmd-verUser.nix +#+BEGIN_SRC nix :tangle ../nixEnv/shells/shell-dmd-verUser.nix <> <> #+END_SRC *** ldc shell :ldc: -- ln -sf nixDevEnv/shells/shell-ldc-verNix.nix shell.nix -- ln -sf nixDevEnv/shells/shell-ldc-verUser.nix shell.nix +- ln -sf nixEnv/shells/shell-ldc-verNix.nix shell.nix +- ln -sf nixEnv/shells/shell-ldc-verUser.nix shell.nix -- ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix +- ln -sf nixEnv/dub/mkDub-ldc.nix mkDub.nix **** nixpkg -- ln -sf nixDevEnv/shells/shell-ldc-verNix.nix shell.nix -- ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix +- ln -sf nixEnv/shells/shell-ldc-verNix.nix shell.nix +- ln -sf nixEnv/dub/mkDub-ldc.nix mkDub.nix -#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/shell-ldc-verNix.nix +#+BEGIN_SRC nix :tangle ../nixEnv/shells/shell-ldc-verNix.nix { pkgs ? import {} }: <> #+END_SRC **** user -- ln -sf nixDevEnv/shells/shell-ldc-verUser.nix shell.nix -- ln -sf nixDevEnv/dub/mkDub-ldc.nix mkDub.nix +- ln -sf nixEnv/shells/shell-ldc-verUser.nix shell.nix +- ln -sf nixEnv/dub/mkDub-ldc.nix mkDub.nix -#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/shell-ldc-verUser.nix +#+BEGIN_SRC nix :tangle ../nixEnv/shells/shell-ldc-verUser.nix <> <> #+END_SRC -***** (import ./nixDevEnv/overlays/ldcVersion.nix) +***** (import ./nixEnv/overlays/ldcVersion.nix) #+NAME: nix_shell_overlay_user_version_ldc #+BEGIN_SRC nix @@ -1900,7 +1900,7 @@ dub2nix = (import dub2nix-src) { inherit pkgs; }; { overlays = [ ]; } #+END_SRC -***** (import ./nixDevEnv/overlays/dmdVersion.nix) +***** (import ./nixEnv/overlays/dmdVersion.nix) no working overlay, default none: @@ -1938,7 +1938,7 @@ pkgs.mkShell { **** build inputs ldc -#+BEGIN_SRC nix :tangle ../nixDevEnv/shells/packages-ldc.nix +#+BEGIN_SRC nix :tangle ../nixEnv/shells/packages-ldc.nix { pkgs ? import {} }: let dub2nix-src = fetchTarball { @@ -1961,7 +1961,7 @@ with pkgs; [ #+BEGIN_SRC nix { pkgs ? import { overlays = [ - (import ./nixDevEnv/overlays/ldcVersion.nix) + (import ./nixEnv/overlays/ldcVersion.nix) ]; } }: let @@ -2033,7 +2033,7 @@ aria2c https://raw.githubusercontent.com/lionello/dub2nix/master/mkDub.nix *** mkDub dmd -#+BEGIN_SRC nix :tangle ../nixDevEnv/dub/mkDub-dmd.nix +#+BEGIN_SRC nix :tangle ../nixEnv/dub/mkDub-dmd.nix { pkgs ? import {}, stdenv ? pkgs.stdenv, rdmd ? pkgs.rdmd, @@ -2159,7 +2159,7 @@ in { *** mkDub ldc HACK -#+BEGIN_SRC nix :tangle ../nixDevEnv/dub/mkDub-ldc.nix +#+BEGIN_SRC nix :tangle ../nixEnv/dub/mkDub-ldc.nix { pkgs ? import {}, stdenv ? pkgs.stdenv, ldc ? pkgs.ldc, @@ -2287,7 +2287,7 @@ in { *** compilers (latest versions) [version information set elsewhere] **** ldcVersion.nix overlay :ldc:version: -#+BEGIN_SRC nix :tangle ../nixDevEnv/overlays/ldcVersion.nix +#+BEGIN_SRC nix :tangle ../nixEnv/overlays/ldcVersion.nix self: super: rec { ldc = super.ldc.overrideAttrs(oldAttrs: rec { pname = "ldc"; @@ -2308,7 +2308,7 @@ self: super: rec { no working overlay, tangle to work on -#+BEGIN_SRC nix :NO-tangle ../nixDevEnv/overlays/dmdVersion.nix +#+BEGIN_SRC nix :NO-tangle ../nixEnv/overlays/dmdVersion.nix self: super: rec { pname = "dmd"; <> @@ -2399,8 +2399,8 @@ year = "2020"; !misc !misc/** !*.nix -!nixDevEnv -!nixDevEnv/** +!nixEnv +!nixEnv/** !.envrc !src !src/** diff --git a/shell.nix b/shell.nix index 7653553..e102643 120000 --- a/shell.nix +++ b/shell.nix @@ -1 +1 @@ -nixDevEnv/shells/shell-ldc-verNix.nix \ No newline at end of file +nixEnv/shells/shell-ldc-verNix.nix \ No newline at end of file -- cgit v1.2.3