diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-08-24 09:47:56 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-08-25 09:24:33 +0000 |
commit | 6f87d54e6f72bf8f25dad5e9ff9cce82c10b4781 (patch) | |
tree | bf82200a42c070620864c19b84222f84c77d4097 /nixpkgs/pkgs/development/ruby-modules/with-packages/default.nix | |
parent | 1b9a13c4689af7e088eb7af5589f8c811282846a (diff) | |
parent | 61cc0b580ce601f98eef4c7bba36bbe1a9112236 (diff) | |
download | nixlib-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.nix | 75 |
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; } |