nixpkgs/pkgs/applications/misc/jekyll/default.nix
Michael Weiss d24aefd52f
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
2019-06-28 16:12:15 +02:00

54 lines
1.9 KiB
Nix

{ lib, bundlerApp, ruby
, writeShellScriptBin, makeWrapper
, withOptionalDependencies ? false
}:
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" ];
inherit ruby;
gemdir = if withOptionalDependencies
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 = ''
Jekyll is a simple, blog-aware, static site generator, written in Ruby.
Think of it like a file-based CMS, without all the complexity. Jekyll
takes your content, renders Markdown and Liquid templates, and spits out a
complete, static website ready to be served by Apache, Nginx or another
web server. Jekyll is the engine behind GitHub Pages, which you can use to
host sites right from your GitHub repositories.
'';
homepage = https://jekyllrb.com/;
license = licenses.mit;
maintainers = with maintainers; [ primeos pesterhazy ];
platforms = platforms.unix;
};
}