jekyll: Improve the "jekyll new" experience

See https://github.com/NixOS/nixpkgs/issues/58126 for more details.

This will instruct the user how to manually finish the setup instead of
failing with error messages (unfortunately it is quite a bit hacky
though...).

Extra note:
We cannot use "bundle config --local" due to BUNDLE_GEMFILE (would
attempt to create .bundle/config in the Nix store) and manually creating
.bundle/config doesn't work either as these configuration variables are
still overwritten by the environment variables, even though this
shouldn't be the case [0].

[0]: https://bundler.io/v2.0/man/bundle-config.1.html
This commit is contained in:
Michael Weiss 2019-06-28 15:33:06 +02:00
parent 67ea4fcd3b
commit d24aefd52f
No known key found for this signature in database
GPG Key ID: 5BE487C4D4771D83

View File

@ -1,8 +1,27 @@
{ lib, bundlerApp, ruby
, writeShellScriptBin, makeWrapper
, withOptionalDependencies ? false
}:
bundlerApp rec {
let
rubyWrapper = writeShellScriptBin "ruby" ''
if [[ "$#" -eq 2 ]]; then
if [[ "''${1##*/}" == "bundle" && "$2" == "install" ]]; then
# See https://github.com/NixOS/nixpkgs/issues/58126 for more details.
echo 'Skipping "bundle install" as it fails due to the Nix wrapper.'
echo 'Please enter the new directory and run the following commands to serve the page:'
echo 'nix-shell -p bundler --run "bundle install --gemfile=Gemfile --path vendor/cache"'
echo 'nix-shell -p bundler --run "bundle exec jekyll serve"'
exit 0
# The following nearly works:
unset BUNDLE_FROZEN
exec ${ruby}/bin/ruby "$@" --gemfile=Gemfile --path=vendor/cache
fi
fi
# Else: Don't modify the arguments:
exec ${ruby}/bin/ruby "$@"
'';
in bundlerApp rec {
pname = "jekyll";
exes = [ "jekyll" ];
@ -11,6 +30,12 @@ bundlerApp rec {
then ./full
else ./basic;
buildInputs = [ makeWrapper ];
postBuild = ''
wrapProgram $out/bin/jekyll --prefix PATH : ${rubyWrapper}/bin
'';
meta = with lib; {
description = "A blog-aware, static site generator, written in Ruby";
longDescription = ''