diff options
Diffstat (limited to 'nixpkgs/pkgs/development/ruby-modules/bundler-app/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/ruby-modules/bundler-app/default.nix | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/ruby-modules/bundler-app/default.nix b/nixpkgs/pkgs/development/ruby-modules/bundler-app/default.nix new file mode 100644 index 000000000000..f8843c615821 --- /dev/null +++ b/nixpkgs/pkgs/development/ruby-modules/bundler-app/default.nix @@ -0,0 +1,67 @@ +{ lib, stdenv, callPackage, runCommand, makeWrapper, ruby }@defs: + +# Use for simple installation of Ruby tools shipped in a Gem. +# Start with a Gemfile that includes `gem <toolgem>` +# > nix-shell -p bundler bundix +# (shell)> bundle lock +# (shell)> bundix +# Then use rubyTool in the default.nix: + +# rubyTool { pname = "gemifiedTool"; gemdir = ./.; exes = ["gemified-tool"]; } +# The 'exes' parameter ensures that a copy of e.g. rake doesn't polute the system. +{ + # use the name of the name in question; its version will be picked up from the gemset + pname + # Gemdir is the location of the Gemfile{,.lock} and gemset.nix; usually ./. + # This is required unless gemfile, lockfile, and gemset are all provided +, gemdir ? null + # Exes is the list of executables provided by the gems in the Gemfile +, exes ? [] + # Scripts are ruby programs depend on gems in the Gemfile (e.g. scripts/rails) +, scripts ? [] +, ruby ? defs.ruby +, gemfile ? null +, lockfile ? null +, gemset ? null +, preferLocalBuild ? false +, allowSubstitutes ? false +, installManpages ? true +, meta ? {} +, buildInputs ? [] +, postBuild ? "" +, gemConfig ? null +, passthru ? {} +}@args: + +let + basicEnv = (callPackage ../bundled-common {}) args; + + cmdArgs = removeAttrs args [ "pname" "postBuild" "gemConfig" "passthru" ] // { + inherit preferLocalBuild allowSubstitutes; # pass the defaults + + buildInputs = buildInputs ++ lib.optional (scripts != []) makeWrapper; + + passthru = basicEnv.passthru // { + inherit basicEnv; + inherit (basicEnv) env; + } // passthru; + }; +in + runCommand basicEnv.name cmdArgs '' + mkdir -p $out/bin + ${(lib.concatMapStrings (x: "ln -s '${basicEnv}/bin/${x}' $out/bin/${x};\n") exes)} + ${(lib.concatMapStrings (s: "makeWrapper $out/bin/$(basename ${s}) $srcdir/${s} " + + "--set BUNDLE_GEMFILE ${basicEnv.confFiles}/Gemfile "+ + "--set BUNDLE_PATH ${basicEnv}/${ruby.gemPath} "+ + "--set BUNDLE_FROZEN 1 "+ + "--set GEM_HOME ${basicEnv}/${ruby.gemPath} "+ + "--set GEM_PATH ${basicEnv}/${ruby.gemPath} "+ + "--run \"cd $srcdir\";\n") scripts)} + + ${lib.optionalString installManpages '' + for section in {1..9}; do + mandir="$out/share/man/man$section" + find -L ${basicEnv}/${ruby.gemPath}/gems/${basicEnv.name} \( -wholename "*/man/*.$section" -o -wholename "*/man/man$section/*.$section" \) -print -execdir mkdir -p $mandir \; -execdir cp '{}' $mandir \; + done + ''} + '' |