From db45f9a2f0e45d8070c28698b1376ea52b456660 Mon Sep 17 00:00:00 2001 From: Matthias Thym Date: Mon, 4 Mar 2024 14:59:37 +0100 Subject: [PATCH 1/4] Add support for specifying JavaScript root directory --- examples/javascript-directory/.gitignore | 8 ++++++ examples/javascript-directory/.test.sh | 5 ++++ examples/javascript-directory/devenv.nix | 18 ++++++++++++ examples/javascript-directory/devenv.yaml | 3 ++ .../directory/package.json | 14 ++++++++++ src/modules/languages/javascript.nix | 28 +++++++++++++++---- 6 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 examples/javascript-directory/.gitignore create mode 100755 examples/javascript-directory/.test.sh create mode 100644 examples/javascript-directory/devenv.nix create mode 100644 examples/javascript-directory/devenv.yaml create mode 100644 examples/javascript-directory/directory/package.json diff --git a/examples/javascript-directory/.gitignore b/examples/javascript-directory/.gitignore new file mode 100644 index 000000000..b4ef00b71 --- /dev/null +++ b/examples/javascript-directory/.gitignore @@ -0,0 +1,8 @@ +# Devenv +.devenv* +devenv.local.nix + +# Node.js and bun +node_modules/ +package-lock.json +bun.lockb diff --git a/examples/javascript-directory/.test.sh b/examples/javascript-directory/.test.sh new file mode 100755 index 000000000..a927b140d --- /dev/null +++ b/examples/javascript-directory/.test.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -ex +cd directory +node -e "require('axios')" diff --git a/examples/javascript-directory/devenv.nix b/examples/javascript-directory/devenv.nix new file mode 100644 index 000000000..793570f8c --- /dev/null +++ b/examples/javascript-directory/devenv.nix @@ -0,0 +1,18 @@ +{ pkgs, lib, ... }: + +{ + languages.javascript = { + enable = true; + directory = "directory"; + package = pkgs.nodejs-slim; + bun = { + enable = true; + install.enable = true; + }; + # npm = { + # enable = true; + # install.enable = true; + # }; + corepack.enable = true; + }; +} diff --git a/examples/javascript-directory/devenv.yaml b/examples/javascript-directory/devenv.yaml new file mode 100644 index 000000000..c7cb5ceda --- /dev/null +++ b/examples/javascript-directory/devenv.yaml @@ -0,0 +1,3 @@ +inputs: + nixpkgs: + url: github:NixOS/nixpkgs/nixpkgs-unstable diff --git a/examples/javascript-directory/directory/package.json b/examples/javascript-directory/directory/package.json new file mode 100644 index 000000000..8d2cce0b7 --- /dev/null +++ b/examples/javascript-directory/directory/package.json @@ -0,0 +1,14 @@ +{ + "name": "javascript", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^1.4.0" + } +} diff --git a/src/modules/languages/javascript.nix b/src/modules/languages/javascript.nix index 6f7ecaaa5..366e1bc3a 100644 --- a/src/modules/languages/javascript.nix +++ b/src/modules/languages/javascript.nix @@ -3,7 +3,7 @@ let cfg = config.languages.javascript; - nodeModulesPath = "node_modules"; + nodeModulesPath = "${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}node_modules"; initNpmScript = pkgs.writeShellScript "init-npm.sh" '' function _devenv-npm-install() @@ -11,7 +11,7 @@ let # Avoid running "npm install" for every shell. # Only run it when the "package-lock.json" file or nodejs version has changed. # We do this by storing the nodejs version and a hash of "package-lock.json" in node_modules. - local ACTUAL_NPM_CHECKSUM="${cfg.package.version}:$(${pkgs.nix}/bin/nix-hash --type sha256 package-lock.json)" + local ACTUAL_NPM_CHECKSUM="${cfg.package.version}:$(${pkgs.nix}/bin/nix-hash --type sha256 ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}package-lock.json)" local NPM_CHECKSUM_FILE="${nodeModulesPath}/package-lock.json.checksum" if [ -f "$NPM_CHECKSUM_FILE" ] then @@ -22,18 +22,18 @@ let if [ "$ACTUAL_NPM_CHECKSUM" != "$EXPECTED_NPM_CHECKSUM" ] then - if ${cfg.package}/bin/npm install + if ${cfg.package}/bin/npm install ${lib.optionalString (cfg.directory != config.devenv.root) "--prefix ${cfg.directory}"} then echo "$ACTUAL_NPM_CHECKSUM" > "$NPM_CHECKSUM_FILE" else - echo "Npm install failed. Run 'npm install' manually." + echo "Install failed. Run 'npm install' manually." fi fi } - if [ ! -f package.json ] + if [ ! -f ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}package.json ] then - echo "No package.json found. Run 'npm init' to create one." >&2 + echo "No package.json found${lib.optionalString (cfg.directory != config.devenv.root) ''"in ${cfg.directory}"''}. Run '${lib.optionalString (cfg.directory != config.devenv.root) ''"cd ${cfg.directory}/ && "''}npm init' to create one." >&2 else _devenv-npm-install fi @@ -43,11 +43,23 @@ in options.languages.javascript = { enable = lib.mkEnableOption "tools for JavaScript development"; + directory = lib.mkOption { + type = lib.types.str; + default = config.devenv.root; + defaultText = lib.literalExpression "config.devenv.root"; + description = '' + The JavaScript project's root directory. Defaults to the root of the devenv project. + Can be an absolute path or one relative to the root of the devenv project. + ''; + example = "./directory"; + }; + package = lib.mkOption { type = lib.types.package; default = pkgs.nodejs; defaultText = lib.literalExpression "pkgs.nodejs"; description = "The Node package to use."; + example = "pkgs.bun"; }; corepack = { @@ -74,3 +86,7 @@ in ); }; } + + + + From 10797db44dc0b473bd0065d73986629e36bc5657 Mon Sep 17 00:00:00 2001 From: Matthias Thym Date: Wed, 6 Mar 2024 13:46:23 +0100 Subject: [PATCH 2/4] Use nodejs-slim package by default --- src/modules/languages/javascript.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/languages/javascript.nix b/src/modules/languages/javascript.nix index 366e1bc3a..47aaf1960 100644 --- a/src/modules/languages/javascript.nix +++ b/src/modules/languages/javascript.nix @@ -56,8 +56,8 @@ in package = lib.mkOption { type = lib.types.package; - default = pkgs.nodejs; - defaultText = lib.literalExpression "pkgs.nodejs"; + default = pkgs.nodejs-slim; + defaultText = lib.literalExpression "pkgs.nodejs-slim"; description = "The Node package to use."; example = "pkgs.bun"; }; From b0f7f912d42764fd96e8b6d43fab6bf30d183cc0 Mon Sep 17 00:00:00 2001 From: Matthias Thym Date: Mon, 4 Mar 2024 17:41:28 +0100 Subject: [PATCH 3/4] Add alternative JavaScript runtimes --- examples/javascript-directory/.gitignore | 4 +- src/modules/languages/javascript.nix | 171 +++++++++++++++++++++-- 2 files changed, 166 insertions(+), 9 deletions(-) diff --git a/examples/javascript-directory/.gitignore b/examples/javascript-directory/.gitignore index b4ef00b71..52c7b00be 100644 --- a/examples/javascript-directory/.gitignore +++ b/examples/javascript-directory/.gitignore @@ -2,7 +2,9 @@ .devenv* devenv.local.nix -# Node.js and bun +# JavaScript runtimes node_modules/ package-lock.json +pnpm-lock.yaml +yarn.lock bun.lockb diff --git a/src/modules/languages/javascript.nix b/src/modules/languages/javascript.nix index 47aaf1960..0fb579f12 100644 --- a/src/modules/languages/javascript.nix +++ b/src/modules/languages/javascript.nix @@ -11,7 +11,7 @@ let # Avoid running "npm install" for every shell. # Only run it when the "package-lock.json" file or nodejs version has changed. # We do this by storing the nodejs version and a hash of "package-lock.json" in node_modules. - local ACTUAL_NPM_CHECKSUM="${cfg.package.version}:$(${pkgs.nix}/bin/nix-hash --type sha256 ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}package-lock.json)" + local ACTUAL_NPM_CHECKSUM="${cfg.npm.package.version}:$(${pkgs.nix}/bin/nix-hash --type sha256 ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}package-lock.json)" local NPM_CHECKSUM_FILE="${nodeModulesPath}/package-lock.json.checksum" if [ -f "$NPM_CHECKSUM_FILE" ] then @@ -22,7 +22,7 @@ let if [ "$ACTUAL_NPM_CHECKSUM" != "$EXPECTED_NPM_CHECKSUM" ] then - if ${cfg.package}/bin/npm install ${lib.optionalString (cfg.directory != config.devenv.root) "--prefix ${cfg.directory}"} + if ${cfg.npm.package}/bin/npm install ${lib.optionalString (cfg.directory != config.devenv.root) "--prefix ${cfg.directory}"} then echo "$ACTUAL_NPM_CHECKSUM" > "$NPM_CHECKSUM_FILE" else @@ -38,6 +38,108 @@ let _devenv-npm-install fi ''; + + initPnpmScript = pkgs.writeShellScript "init-pnpm.sh" '' + function _devenv-pnpm-install() + { + # Avoid running "pnpm install" for every shell. + # Only run it when the "package-lock.json" file or nodejs version has changed. + # We do this by storing the nodejs version and a hash of "package-lock.json" in node_modules. + local ACTUAL_PNPM_CHECKSUM="${cfg.npm.package.version}:$(${pkgs.nix}/bin/nix-hash --type sha256 ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}pnpm-lock.yaml)" + local PNPM_CHECKSUM_FILE="${nodeModulesPath}/pnpm-lock.yaml.checksum" + if [ -f "$PNPM_CHECKSUM_FILE" ] + then + read -r EXPECTED_PNPM_CHECKSUM < "$PNPM_CHECKSUM_FILE" + else + EXPECTED_PNPM_CHECKSUM="" + fi + + if [ "$ACTUAL_PNPM_CHECKSUM" != "$EXPECTED_PNPM_CHECKSUM" ] + then + if ${cfg.npm.package}/bin/npm install ${lib.optionalString (cfg.directory != config.devenv.root) "--dir ${cfg.directory}"} + then + echo "$ACTUAL_PNPM_CHECKSUM" > "$PNPM_CHECKSUM_FILE" + else + echo "Install failed. Run 'pnpm install' manually." + fi + fi + } + + if [ ! -f ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}package.json ] + then + echo "No package.json found${lib.optionalString (cfg.directory != config.devenv.root) ''"in ${cfg.directory}"''}. Run '${lib.optionalString (cfg.directory != config.devenv.root) ''"cd ${cfg.directory}/ && "''}pnpm init' to create one." >&2 + else + _devenv-pnpm-install + fi + ''; + + initYarnScript = pkgs.writeShellScript "init-yarn.sh" '' + function _devenv-yarn-install() + { + # Avoid running "yarn install" for every shell. + # Only run it when the "yarn.lock" file or nodejs version has changed. + # We do this by storing the nodejs version and a hash of "yarn.lock" in node_modules. + local ACTUAL_YARN_CHECKSUM="${cfg.yarn.package.version}:$(${pkgs.nix}/bin/nix-hash --type sha256 ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}yarn.lock)" + local YARN_CHECKSUM_FILE="${nodeModulesPath}/yarn.lock.checksum" + if [ -f "$YARN_CHECKSUM_FILE" ] + then + read -r EXPECTED_YARN_CHECKSUM < "$YARN_CHECKSUM_FILE" + else + EXPECTED_YARN_CHECKSUM="" + fi + + if [ "$ACTUAL_YARN_CHECKSUM" != "$EXPECTED_YARN_CHECKSUM" ] + then + if ${cfg.yarn.package}/bin/yarn install ${lib.optionalString (cfg.directory != config.devenv.root) "--cwd ${cfg.directory}"} + then + echo "$ACTUAL_YARN_CHECKSUM" > "$YARN_CHECKSUM_FILE" + else + echo "Install failed. Run 'yarn install' manually." + fi + fi + } + + if [ ! -f ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}package.json ] + then + echo "No package.json found${lib.optionalString (cfg.directory != config.devenv.root) ''"in ${cfg.directory}"''}. Run '${lib.optionalString (cfg.directory != config.devenv.root) ''"cd ${cfg.directory}/ && "''}yarn init' to create one." >&2 + else + _devenv-yarn-install + fi + ''; + + initBunScript = pkgs.writeShellScript "init-bun.sh" '' + function _devenv-bun-install() + { + # Avoid running "bun install --yarn" for every shell. + # Only run it when the "yarn.lock" file or nodejs version has changed. + # We do this by storing the nodejs version and a hash of "yarn.lock" in node_modules. + local ACTUAL_BUN_CHECKSUM="${cfg.bun.package.version}:$(${pkgs.nix}/bin/nix-hash --type sha256 ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}yarn.lock)" + local BUN_CHECKSUM_FILE="${nodeModulesPath}/yarn.lock.checksum" + if [ -f "$BUN_CHECKSUM_FILE" ] + then + read -r EXPECTED_BUN_CHECKSUM < "$BUN_CHECKSUM_FILE" + else + EXPECTED_BUN_CHECKSUM="" + fi + + if [ "$ACTUAL_BUN_CHECKSUM" != "$EXPECTED_BUN_CHECKSUM" ] + then + if ${cfg.bun.package}/bin/bun install --yarn ${lib.optionalString (cfg.directory != config.devenv.root) "--cwd ${cfg.directory}"} + then + echo "$ACTUAL_BUN_CHECKSUM" > "$BUN_CHECKSUM_FILE" + else + echo "Install failed. Run 'bun install --yarn' manually." + fi + fi + } + + if [ ! -f ${lib.optionalString (cfg.directory != config.devenv.root) ''"${cfg.directory}/"''}package.json ] + then + echo "No package.json found${lib.optionalString (cfg.directory != config.devenv.root) ''"in ${cfg.directory}"''}. Run '${lib.optionalString (cfg.directory != config.devenv.root) ''"cd ${cfg.directory}/ && "''}bun init' to create one." >&2 + else + _devenv-bun-install + fi + ''; in { options.languages.javascript = { @@ -58,23 +160,67 @@ in type = lib.types.package; default = pkgs.nodejs-slim; defaultText = lib.literalExpression "pkgs.nodejs-slim"; - description = "The Node package to use."; - example = "pkgs.bun"; + description = "The Node.js package to use."; }; corepack = { - enable = lib.mkEnableOption "shims for package managers besides npm"; + enable = lib.mkEnableOption "wrappers for npm, pnpm and Yarn via Node.js Corepack"; + }; + + npm = { + enable = lib.mkEnableOption "install npm"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.nodejs; + defaultText = lib.literalExpression "pkgs.nodejs"; + description = "The Node.js package to use."; + }; + install.enable = lib.mkEnableOption "npm install during devenv initialisation"; + }; + + pnpm = { + enable = lib.mkEnableOption "install pnpm"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.nodePackages.pnpm; + defaultText = lib.literalExpression "pkgs.nodePackages.pnpm"; + description = "The pnpm package to use."; + }; + install.enable = lib.mkEnableOption "pnpm install during devenv initialisation"; + }; + + yarn = { + enable = lib.mkEnableOption "install yarn"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.yarn; + defaultText = lib.literalExpression "pkgs.yarn"; + description = "The yarn package to use."; + }; + install.enable = lib.mkEnableOption "yarn install during devenv initialisation"; }; - npm.install = { - enable = lib.mkEnableOption "npm install during devenv initialisation"; + bun = { + enable = lib.mkEnableOption "install bun"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.bun; + defaultText = lib.literalExpression "pkgs.bun"; + description = "The bun package to use."; + }; + install.enable = lib.mkEnableOption "bun install during devenv initialisation"; }; }; config = lib.mkIf cfg.enable { packages = [ cfg.package - ] ++ lib.optional cfg.corepack.enable (pkgs.runCommand "corepack-enable" { } '' + ] + ++ lib.optional cfg.npm.enable (cfg.npm.package) + ++ lib.optional cfg.pnpm.enable (cfg.pnpm.package) + ++ lib.optional cfg.yarn.enable (cfg.yarn.package) + ++ lib.optional cfg.bun.enable (cfg.bun.package) + ++ lib.optional cfg.corepack.enable (pkgs.runCommand "corepack-enable" { } '' mkdir -p $out/bin ${cfg.package}/bin/corepack enable --install-directory $out/bin ''); @@ -82,6 +228,15 @@ in enterShell = lib.concatStringsSep "\n" ( (lib.optional cfg.npm.install.enable '' source ${initNpmScript} + '') ++ + (lib.optional cfg.pnpm.install.enable '' + source ${initPnpmScript} + '') ++ + (lib.optional cfg.yarn.install.enable '' + source ${initYarnScript} + '') ++ + (lib.optional cfg.bun.install.enable '' + source ${initBunScript} '') ); }; From 10b8abd4e215dfa5d213b525f124fc43915e704a Mon Sep 17 00:00:00 2001 From: Matthias Thym Date: Wed, 6 Mar 2024 15:19:07 +0100 Subject: [PATCH 4/4] Add/update examples for alternative JavaScript runtimes --- examples/javascript-bun/.gitignore | 10 +++ examples/javascript-bun/.test.sh | 5 ++ examples/javascript-bun/devenv.nix | 11 +++ examples/javascript-bun/devenv.yaml | 3 + examples/javascript-bun/package.json | 14 +++ examples/javascript-directory/.test.sh | 1 + examples/javascript-directory/devenv.nix | 7 +- examples/javascript-pnpm/.gitignore | 10 +++ examples/javascript-pnpm/.test.sh | 5 ++ examples/javascript-pnpm/devenv.nix | 11 +++ examples/javascript-pnpm/devenv.yaml | 3 + examples/javascript-pnpm/package.json | 14 +++ examples/javascript-yarn/.gitignore | 10 +++ examples/javascript-yarn/.test.sh | 5 ++ examples/javascript-yarn/devenv.nix | 11 +++ examples/javascript-yarn/devenv.yaml | 3 + examples/javascript-yarn/package.json | 14 +++ examples/javascript/.gitignore | 8 +- examples/javascript/.test.sh | 1 + examples/javascript/devenv.nix | 5 +- examples/javascript/package-lock.json | 106 ----------------------- 21 files changed, 143 insertions(+), 114 deletions(-) create mode 100644 examples/javascript-bun/.gitignore create mode 100755 examples/javascript-bun/.test.sh create mode 100644 examples/javascript-bun/devenv.nix create mode 100644 examples/javascript-bun/devenv.yaml create mode 100644 examples/javascript-bun/package.json create mode 100644 examples/javascript-pnpm/.gitignore create mode 100755 examples/javascript-pnpm/.test.sh create mode 100644 examples/javascript-pnpm/devenv.nix create mode 100644 examples/javascript-pnpm/devenv.yaml create mode 100644 examples/javascript-pnpm/package.json create mode 100644 examples/javascript-yarn/.gitignore create mode 100755 examples/javascript-yarn/.test.sh create mode 100644 examples/javascript-yarn/devenv.nix create mode 100644 examples/javascript-yarn/devenv.yaml create mode 100644 examples/javascript-yarn/package.json delete mode 100644 examples/javascript/package-lock.json diff --git a/examples/javascript-bun/.gitignore b/examples/javascript-bun/.gitignore new file mode 100644 index 000000000..52c7b00be --- /dev/null +++ b/examples/javascript-bun/.gitignore @@ -0,0 +1,10 @@ +# Devenv +.devenv* +devenv.local.nix + +# JavaScript runtimes +node_modules/ +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lockb diff --git a/examples/javascript-bun/.test.sh b/examples/javascript-bun/.test.sh new file mode 100755 index 000000000..d83bb8124 --- /dev/null +++ b/examples/javascript-bun/.test.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -ex + +node -e "require('axios')" diff --git a/examples/javascript-bun/devenv.nix b/examples/javascript-bun/devenv.nix new file mode 100644 index 000000000..c9d36da06 --- /dev/null +++ b/examples/javascript-bun/devenv.nix @@ -0,0 +1,11 @@ +{ pkgs, lib, ... }: + +{ + languages.javascript = { + enable = true; + bun = { + enable = true; + install.enable = true; + }; + }; +} diff --git a/examples/javascript-bun/devenv.yaml b/examples/javascript-bun/devenv.yaml new file mode 100644 index 000000000..c7cb5ceda --- /dev/null +++ b/examples/javascript-bun/devenv.yaml @@ -0,0 +1,3 @@ +inputs: + nixpkgs: + url: github:NixOS/nixpkgs/nixpkgs-unstable diff --git a/examples/javascript-bun/package.json b/examples/javascript-bun/package.json new file mode 100644 index 000000000..8d2cce0b7 --- /dev/null +++ b/examples/javascript-bun/package.json @@ -0,0 +1,14 @@ +{ + "name": "javascript", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^1.4.0" + } +} diff --git a/examples/javascript-directory/.test.sh b/examples/javascript-directory/.test.sh index a927b140d..1715d0e4f 100755 --- a/examples/javascript-directory/.test.sh +++ b/examples/javascript-directory/.test.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -ex + cd directory node -e "require('axios')" diff --git a/examples/javascript-directory/devenv.nix b/examples/javascript-directory/devenv.nix index 793570f8c..c418e9eaf 100644 --- a/examples/javascript-directory/devenv.nix +++ b/examples/javascript-directory/devenv.nix @@ -5,14 +5,9 @@ enable = true; directory = "directory"; package = pkgs.nodejs-slim; - bun = { + npm = { enable = true; install.enable = true; }; - # npm = { - # enable = true; - # install.enable = true; - # }; - corepack.enable = true; }; } diff --git a/examples/javascript-pnpm/.gitignore b/examples/javascript-pnpm/.gitignore new file mode 100644 index 000000000..52c7b00be --- /dev/null +++ b/examples/javascript-pnpm/.gitignore @@ -0,0 +1,10 @@ +# Devenv +.devenv* +devenv.local.nix + +# JavaScript runtimes +node_modules/ +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lockb diff --git a/examples/javascript-pnpm/.test.sh b/examples/javascript-pnpm/.test.sh new file mode 100755 index 000000000..d83bb8124 --- /dev/null +++ b/examples/javascript-pnpm/.test.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -ex + +node -e "require('axios')" diff --git a/examples/javascript-pnpm/devenv.nix b/examples/javascript-pnpm/devenv.nix new file mode 100644 index 000000000..3d47f2a2c --- /dev/null +++ b/examples/javascript-pnpm/devenv.nix @@ -0,0 +1,11 @@ +{ pkgs, lib, ... }: + +{ + languages.javascript = { + enable = true; + pnpm = { + enable = true; + install.enable = true; + }; + }; +} diff --git a/examples/javascript-pnpm/devenv.yaml b/examples/javascript-pnpm/devenv.yaml new file mode 100644 index 000000000..c7cb5ceda --- /dev/null +++ b/examples/javascript-pnpm/devenv.yaml @@ -0,0 +1,3 @@ +inputs: + nixpkgs: + url: github:NixOS/nixpkgs/nixpkgs-unstable diff --git a/examples/javascript-pnpm/package.json b/examples/javascript-pnpm/package.json new file mode 100644 index 000000000..8d2cce0b7 --- /dev/null +++ b/examples/javascript-pnpm/package.json @@ -0,0 +1,14 @@ +{ + "name": "javascript", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^1.4.0" + } +} diff --git a/examples/javascript-yarn/.gitignore b/examples/javascript-yarn/.gitignore new file mode 100644 index 000000000..52c7b00be --- /dev/null +++ b/examples/javascript-yarn/.gitignore @@ -0,0 +1,10 @@ +# Devenv +.devenv* +devenv.local.nix + +# JavaScript runtimes +node_modules/ +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lockb diff --git a/examples/javascript-yarn/.test.sh b/examples/javascript-yarn/.test.sh new file mode 100755 index 000000000..d83bb8124 --- /dev/null +++ b/examples/javascript-yarn/.test.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -ex + +node -e "require('axios')" diff --git a/examples/javascript-yarn/devenv.nix b/examples/javascript-yarn/devenv.nix new file mode 100644 index 000000000..5bfa38b1e --- /dev/null +++ b/examples/javascript-yarn/devenv.nix @@ -0,0 +1,11 @@ +{ pkgs, lib, ... }: + +{ + languages.javascript = { + enable = true; + yarn = { + enable = true; + install.enable = true; + }; + }; +} diff --git a/examples/javascript-yarn/devenv.yaml b/examples/javascript-yarn/devenv.yaml new file mode 100644 index 000000000..c7cb5ceda --- /dev/null +++ b/examples/javascript-yarn/devenv.yaml @@ -0,0 +1,3 @@ +inputs: + nixpkgs: + url: github:NixOS/nixpkgs/nixpkgs-unstable diff --git a/examples/javascript-yarn/package.json b/examples/javascript-yarn/package.json new file mode 100644 index 000000000..8d2cce0b7 --- /dev/null +++ b/examples/javascript-yarn/package.json @@ -0,0 +1,14 @@ +{ + "name": "javascript", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^1.4.0" + } +} diff --git a/examples/javascript/.gitignore b/examples/javascript/.gitignore index 503ffe5a0..52c7b00be 100644 --- a/examples/javascript/.gitignore +++ b/examples/javascript/.gitignore @@ -1,4 +1,10 @@ # Devenv .devenv* devenv.local.nix -node_modules + +# JavaScript runtimes +node_modules/ +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lockb diff --git a/examples/javascript/.test.sh b/examples/javascript/.test.sh index 5a33e80ce..d83bb8124 100755 --- a/examples/javascript/.test.sh +++ b/examples/javascript/.test.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash set -ex + node -e "require('axios')" diff --git a/examples/javascript/devenv.nix b/examples/javascript/devenv.nix index ff48070ac..c2f17463f 100644 --- a/examples/javascript/devenv.nix +++ b/examples/javascript/devenv.nix @@ -3,6 +3,9 @@ { languages.javascript = { enable = true; - npm.install.enable = true; + npm = { + enable = true; + install.enable = true; + }; }; } diff --git a/examples/javascript/package-lock.json b/examples/javascript/package-lock.json deleted file mode 100644 index 651a88c91..000000000 --- a/examples/javascript/package-lock.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "name": "javascript", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "javascript", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "axios": "^1.4.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - } - } -}