Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ stdenv, lib, buildEnv, buildRubyGem, ruby, gemConfig, makeBinaryWrapper }: 2 3/* 4Example usage: 5nix-shell -E "(import <nixpkgs> {}).ruby.withPackages (pkgs: with pkgs; [ pry nokogiri ])" 6 7You can also use this for writing ruby scripts that run anywhere that has nix 8using a nix-shell shebang: 9 #!/usr/bin/env nix-shell 10 #!nix-shell -i ruby -p "ruby.withPackages (pkgs: with pkgs; [ pry nokogiri ])" 11 12 13Run the following in the nixpkgs root directory to update the ruby-packages.nix: 14./maintainers/scripts/update-ruby-packages 15*/ 16 17let 18 functions = import ../bundled-common/functions.nix { inherit lib gemConfig; }; 19 20 buildGems = gemset: 21 let 22 realGemset = if builtins.isAttrs gemset then gemset else import gemset; 23 builtGems = 24 lib.mapAttrs (name: initialAttrs: 25 let 26 attrs = functions.applyGemConfigs ({ inherit ruby; gemName = name; } // initialAttrs); 27 in 28 buildRubyGem (functions.composeGemAttrs ruby builtGems name attrs) 29 ) realGemset; 30 in builtGems; 31 32 gems = buildGems (import ../../../top-level/ruby-packages.nix); 33 34 withPackages = selector: 35 let 36 selected = selector gems; 37 38 gemEnv = buildEnv { 39 name = "ruby-gems"; 40 paths = selected; 41 pathsToLink = [ "/lib" "/bin" "/nix-support" ]; 42 }; 43 44 wrappedRuby = stdenv.mkDerivation { 45 name = "wrapped-${ruby.name}"; 46 nativeBuildInputs = [ makeBinaryWrapper ]; 47 buildCommand = '' 48 mkdir -p $out/bin 49 for i in ${ruby}/bin/*; do 50 makeWrapper "$i" $out/bin/$(basename "$i") --set GEM_PATH ${gemEnv}/${ruby.gemPath} 51 done 52 ''; 53 }; 54 55 in stdenv.mkDerivation { 56 name = "${ruby.name}-with-packages"; 57 nativeBuildInputs = [ makeBinaryWrapper ]; 58 buildInputs = [ selected ruby ]; 59 60 dontUnpack = true; 61 62 installPhase = '' 63 for i in ${ruby}/bin/* ${gemEnv}/bin/*; do 64 rm -f $out/bin/$(basename "$i") 65 makeWrapper "$i" $out/bin/$(basename "$i") --set GEM_PATH ${gemEnv}/${ruby.gemPath} 66 done 67 68 ln -s ${ruby}/nix-support $out/nix-support 69 ''; 70 71 passthru = { 72 inherit wrappedRuby; 73 gems = selected; 74 }; 75 }; 76 77in { inherit withPackages gems buildGems; }