about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/ruby-modules/with-packages/default.nix
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2019-08-24 09:47:56 +0000
committerAlyssa Ross <hi@alyssa.is>2019-08-25 09:24:33 +0000
commit6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781 (patch)
treebf82200a42c070620864c19b84222f84c77d4097 /nixpkgs/pkgs/development/ruby-modules/with-packages/default.nix
parent1b9a13c4689af7e088eb7af5589f8c811282846a (diff)
parent61cc0b580ce601f98eef4c7bba36bbe1a9112236 (diff)
downloadnixlib-6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781.tar
nixlib-6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781.tar.gz
nixlib-6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781.tar.bz2
nixlib-6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781.tar.lz
nixlib-6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781.tar.xz
nixlib-6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781.tar.zst
nixlib-6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781.zip
Merge commit '61cc0b580ce601f98eef4c7bba36bbe1a9112236'
Diffstat (limited to 'nixpkgs/pkgs/development/ruby-modules/with-packages/default.nix')
-rw-r--r--nixpkgs/pkgs/development/ruby-modules/with-packages/default.nix75
1 files changed, 75 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/ruby-modules/with-packages/default.nix b/nixpkgs/pkgs/development/ruby-modules/with-packages/default.nix
new file mode 100644
index 000000000000..ac0a33f45614
--- /dev/null
+++ b/nixpkgs/pkgs/development/ruby-modules/with-packages/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, lib, buildEnv, buildRubyGem, ruby, gemConfig, makeWrapper }:
+
+/*
+Example usage:
+nix-shell -E "(import <nixpkgs> {}).ruby.withPackages (pkgs: with pkgs; [ pry nokogiri ])"
+
+You can also use this for writing ruby scripts that run anywhere that has nix
+using a nix-shell shebang:
+  #!/usr/bin/env nix-shell
+  #!nix-shell -i ruby -p "ruby.withPackages (pkgs: with pkgs; [ pry nokogiri ])"
+
+
+Run the following in the nixpkgs root directory to update the ruby-packages.nix:
+./maintainers/scripts/update-ruby-packages
+*/
+
+let
+  functions = import ../bundled-common/functions.nix { inherit lib gemConfig; };
+
+  buildGems = gemset:
+    let
+      realGemset = if builtins.isAttrs gemset then gemset else import gemset;
+      builtGems =
+        lib.mapAttrs (name: initialAttrs:
+          let
+            attrs = functions.applyGemConfigs ({ inherit ruby; gemName = name; } // initialAttrs);
+          in
+            buildRubyGem (functions.composeGemAttrs ruby builtGems name attrs)
+        ) realGemset;
+    in builtGems;
+
+  gems = buildGems (import ../../../top-level/ruby-packages.nix);
+
+  withPackages = selector:
+    let
+      selected = selector gems;
+
+      gemEnv = buildEnv {
+        name = "ruby-gems";
+        paths = selected;
+        pathsToLink = [ "/lib" "/bin" "/nix-support" ];
+      };
+
+      wrappedRuby = stdenv.mkDerivation {
+        name = "wrapped-${ruby.name}";
+        nativeBuildInputs = [ makeWrapper ];
+        buildCommand = ''
+          mkdir -p $out/bin
+          for i in ${ruby}/bin/*; do
+            makeWrapper "$i" $out/bin/$(basename "$i") --set GEM_PATH ${gemEnv}/${ruby.gemPath}
+          done
+        '';
+      };
+
+    in stdenv.mkDerivation {
+      name = "${ruby.name}-with-packages";
+      nativeBuildInputs = [ makeWrapper ];
+      buildInputs = [ selected ruby ];
+
+      unpackPhase = ":";
+
+      installPhase = ''
+        for i in ${ruby}/bin/* ${gemEnv}/bin/*; do
+          rm -f $out/bin/$(basename "$i")
+          makeWrapper "$i" $out/bin/$(basename "$i") --set GEM_PATH ${gemEnv}/${ruby.gemPath}
+        done
+      '';
+
+      passthru = {
+        inherit wrappedRuby;
+        gems = selected;
+      };
+    };
+
+in { inherit withPackages gems buildGems; }