about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNick Novitski <github@nicknovitski.com>2019-07-22 05:02:47 -0700
committerzimbatm <zimbatm@zimbatm.com>2019-07-22 12:02:47 +0000
commit7136e0d0a6f61734994c566e2cc72fd75733b873 (patch)
treefcaeaea68f596a81fb885790ce87c3aac4bd52ba
parentb24841dd2260516bfde0b9029619a0f9ef87e97c (diff)
downloadnixlib-7136e0d0a6f61734994c566e2cc72fd75733b873.tar
nixlib-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.gz
nixlib-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.bz2
nixlib-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.lz
nixlib-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.xz
nixlib-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.zst
nixlib-7136e0d0a6f61734994c566e2cc72fd75733b873.zip
bundlerUpdateScript: init and use (#64822)
-rw-r--r--pkgs/applications/graphics/image_optim/default.nix8
-rwxr-xr-xpkgs/applications/graphics/image_optim/update.sh9
-rw-r--r--pkgs/applications/misc/doing/default.nix8
-rw-r--r--pkgs/applications/misc/gollum/default.nix6
-rw-r--r--pkgs/applications/misc/pt/default.nix6
-rw-r--r--pkgs/applications/misc/taskjuggler/default.nix6
-rw-r--r--pkgs/applications/networking/cluster/terraform-landscape/default.nix7
-rw-r--r--pkgs/applications/networking/mailreaders/sup/default.nix10
-rw-r--r--pkgs/applications/office/ledger-web/default.nix6
-rw-r--r--pkgs/applications/office/timetrap/default.nix6
-rw-r--r--pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix6
-rw-r--r--pkgs/applications/version-management/git-and-tools/git-fame/default.nix6
-rw-r--r--pkgs/development/compilers/matter-compiler/default.nix6
-rw-r--r--pkgs/development/ruby-modules/bundler-env/default.nix3
-rw-r--r--pkgs/development/ruby-modules/bundler-update-script/default.nix25
-rw-r--r--pkgs/development/ruby-modules/solargraph/default.nix6
-rw-r--r--pkgs/development/tools/build-managers/drake/default.nix6
-rw-r--r--pkgs/development/tools/build-managers/rake/default.nix6
-rw-r--r--pkgs/development/tools/cadre/default.nix6
-rw-r--r--pkgs/development/tools/cbor-diag/default.nix7
-rw-r--r--pkgs/development/tools/cddl/default.nix7
-rw-r--r--pkgs/development/tools/chefdk/default.nix12
-rw-r--r--pkgs/development/tools/compass/default.nix6
-rw-r--r--pkgs/development/tools/continuous-integration/cide/default.nix6
-rw-r--r--pkgs/development/tools/corundum/default.nix6
-rw-r--r--pkgs/development/tools/cucumber/default.nix6
-rw-r--r--pkgs/development/tools/github-changelog-generator/default.nix6
-rw-r--r--pkgs/development/tools/jazzy/default.nix6
-rwxr-xr-xpkgs/development/tools/jazzy/update10
-rw-r--r--pkgs/development/tools/jsduck/default.nix8
-rw-r--r--pkgs/development/tools/misc/mdl/.bundle/config3
-rw-r--r--pkgs/development/tools/misc/mdl/default.nix6
-rw-r--r--pkgs/development/tools/misc/one_gadget/default.nix6
-rw-r--r--pkgs/development/tools/misc/travis/default.nix11
-rw-r--r--pkgs/development/tools/misc/watson-ruby/default.nix6
-rw-r--r--pkgs/development/tools/redis-dump/default.nix6
-rw-r--r--pkgs/development/tools/ronn/default.nix6
-rw-r--r--pkgs/development/tools/rubocop/default.nix4
-rw-r--r--pkgs/development/tools/sass/default.nix6
-rw-r--r--pkgs/development/tools/scss-lint/default.nix6
-rw-r--r--pkgs/development/tools/sqlint/default.nix7
-rw-r--r--pkgs/development/tools/xcpretty/default.nix10
-rw-r--r--pkgs/development/web/mailcatcher/default.nix6
-rw-r--r--pkgs/servers/http/showoff/default.nix6
-rw-r--r--pkgs/servers/monitoring/riemann-dash/default.nix6
-rw-r--r--pkgs/servers/monitoring/sensu/default.nix6
-rw-r--r--pkgs/tools/admin/fastlane/default.nix5
-rwxr-xr-xpkgs/tools/admin/fastlane/update10
-rw-r--r--pkgs/tools/admin/oxidized/default.nix6
-rw-r--r--pkgs/tools/backup/lvmsync/default.nix6
-rw-r--r--pkgs/tools/inputmethods/fusuma/default.nix6
-rw-r--r--pkgs/tools/misc/docker-sync/default.nix6
-rw-r--r--pkgs/tools/misc/fluentd/default.nix6
-rw-r--r--pkgs/tools/misc/homesick/default.nix8
-rw-r--r--pkgs/tools/misc/lolcat/default.nix6
-rw-r--r--pkgs/tools/misc/pws/default.nix8
-rw-r--r--pkgs/tools/misc/riemann-tools/default.nix6
-rw-r--r--pkgs/tools/misc/t/default.nix6
-rw-r--r--pkgs/tools/misc/td/default.nix6
-rw-r--r--pkgs/tools/misc/teamocil/default.nix5
-rwxr-xr-xpkgs/tools/misc/teamocil/update10
-rw-r--r--pkgs/tools/networking/hue-cli/default.nix6
-rw-r--r--pkgs/tools/networking/maphosts/default.nix6
-rw-r--r--pkgs/tools/package-management/elm-github-install/default.nix8
-rw-r--r--pkgs/tools/package-management/fpm/default.nix6
-rwxr-xr-xpkgs/tools/package-management/fpm/update10
-rw-r--r--pkgs/tools/security/bundler-audit/default.nix6
-rw-r--r--pkgs/tools/system/colorls/default.nix6
-rw-r--r--pkgs/tools/system/hiera-eyaml/default.nix6
-rw-r--r--pkgs/tools/system/procodile/default.nix6
-rw-r--r--pkgs/tools/system/r10k/default.nix6
-rw-r--r--pkgs/tools/text/bcat/default.nix6
-rw-r--r--pkgs/tools/text/papertrail/default.nix13
-rw-r--r--pkgs/tools/text/papertrail/shell.nix19
-rw-r--r--pkgs/tools/text/reckon/default.nix7
-rw-r--r--pkgs/tools/text/ruby-zoom/default.nix6
-rw-r--r--pkgs/tools/typesetting/asciidoctor/default.nix12
-rwxr-xr-xpkgs/tools/typesetting/asciidoctor/update.sh6
-rw-r--r--pkgs/top-level/all-packages.nix1
79 files changed, 310 insertions, 249 deletions
diff --git a/pkgs/applications/graphics/image_optim/default.nix b/pkgs/applications/graphics/image_optim/default.nix
index c3dffee3aa8d..385f9825e46f 100644
--- a/pkgs/applications/graphics/image_optim/default.nix
+++ b/pkgs/applications/graphics/image_optim/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp, ruby, makeWrapper,
+{ lib, bundlerApp, bundlerUpdateScript, makeWrapper,
   withPngcrush ? true,       pngcrush ? null,
   withPngout ? true,         pngout ? null,
   withAdvpng ? true,         advancecomp ? null,
@@ -45,8 +45,6 @@ bundlerApp {
   pname = "image_optim";
   gemdir = ./.;
 
-  inherit ruby;
-
   exes = [ "image_optim" ];
 
   buildInputs = [ makeWrapper ];
@@ -56,11 +54,13 @@ bundlerApp {
       --prefix PATH : ${makeBinPath optionalDepsPath}
   '';
 
+  passthru.updateScript = bundlerUpdateScript "image_optim";
+
   meta = with lib; {
     description = "Command line tool and ruby interface to optimize (lossless compress, optionally lossy) jpeg, png, gif and svg images using external utilities (advpng, gifsicle, jhead, jpeg-recompress, jpegoptim, jpegrescan, jpegtran, optipng, pngcrush, pngout, pngquant, svgo)";
     homepage    = https://github.com/toy/image_optim;
     license     = licenses.mit;
-    maintainers = with maintainers; [ srghma ];
+    maintainers = with maintainers; [ srghma nicknovitski ];
     platforms   = platforms.all;
   };
 }
diff --git a/pkgs/applications/graphics/image_optim/update.sh b/pkgs/applications/graphics/image_optim/update.sh
deleted file mode 100755
index 8afd7f90436d..000000000000
--- a/pkgs/applications/graphics/image_optim/update.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env nix-shell
-#!nix-shell -i bash -p bundix bundler
-
-SCRIPT_DIR=$(dirname "$(readlink -f "$BASH_SOURCE")")
-
-cd $SCRIPT_DIR
-
-bundle lock --update
-bundix
diff --git a/pkgs/applications/misc/doing/default.nix b/pkgs/applications/misc/doing/default.nix
index 9ae2ea41d831..20c802a1cbdf 100644
--- a/pkgs/applications/misc/doing/default.nix
+++ b/pkgs/applications/misc/doing/default.nix
@@ -1,8 +1,6 @@
-{ lib, bundlerEnv, ruby
+{ lib, bundlerEnv, ruby, bundlerUpdateScript
 }:
 
-# Bundix:
-# nix-shell -p bundix zlib
 bundlerEnv rec {
   pname = "doing";
   version = (import ./gemset.nix).doing.version;
@@ -10,6 +8,8 @@ bundlerEnv rec {
   inherit ruby;
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "doing";
+
   meta = with lib; {
     description = "A command line tool for keeping track of what you’re doing and tracking what you’ve done.";
     longDescription = ''
@@ -19,7 +19,7 @@ bundlerEnv rec {
     '';
     homepage    = https://brettterpstra.com/projects/doing/;
     license     = licenses.mit;
-    maintainers = with maintainers; [ ktf ];
+    maintainers = with maintainers; [ ktf nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/applications/misc/gollum/default.nix b/pkgs/applications/misc/gollum/default.nix
index 4a0a4e38a61b..62f2d7a069d9 100644
--- a/pkgs/applications/misc/gollum/default.nix
+++ b/pkgs/applications/misc/gollum/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, bundlerEnv, ruby, makeWrapper
+{ stdenv, bundlerEnv, ruby, makeWrapper, bundlerUpdateScript
 , git }:
 
 stdenv.mkDerivation rec {
@@ -23,11 +23,13 @@ stdenv.mkDerivation rec {
       --prefix PATH ":" ${stdenv.lib.makeBinPath [ git ]}
   '';
 
+  passthru.updateScript = bundlerUpdateScript "gollum";
+
   meta = with stdenv.lib; {
     description = "A simple, Git-powered wiki";
     homepage = https://github.com/gollum/gollum;
     license = licenses.mit;
-    maintainers = with maintainers; [ jgillich primeos ];
+    maintainers = with maintainers; [ jgillich primeos nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/applications/misc/pt/default.nix b/pkgs/applications/misc/pt/default.nix
index 6f9078bb50a7..f5504721987a 100644
--- a/pkgs/applications/misc/pt/default.nix
+++ b/pkgs/applications/misc/pt/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "pt";
   gemdir = ./.;
   exes = [ "pt" ];
 
+  passthru.updateScript = bundlerUpdateScript "pt";
+
   meta = with lib; {
     description = "Minimalist command-line Pivotal Tracker client";
     homepage    = http://www.github.com/raul/pt;
     license     = licenses.mit;
-    maintainers = with maintainers; [ ebzzry manveru ];
+    maintainers = with maintainers; [ ebzzry manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/applications/misc/taskjuggler/default.nix b/pkgs/applications/misc/taskjuggler/default.nix
index 1b3bacf71df8..838cc199a6ca 100644
--- a/pkgs/applications/misc/taskjuggler/default.nix
+++ b/pkgs/applications/misc/taskjuggler/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "taskjuggler";
@@ -9,11 +9,13 @@ bundlerApp {
     "tj3ts_receiver" "tj3ts_sender" "tj3ts_summary" "tj3webd"
   ];
 
+  passthru.updateScript = bundlerUpdateScript "taskjuggler";
+
   meta = with lib; {
     description = "A modern and powerful project management tool";
     homepage    = http://taskjuggler.org/;
     license     = licenses.gpl2;
     platforms   = platforms.unix;
-    maintainers = [ maintainers.manveru ];
+    maintainers = with maintainers; [ manveru nicknovitski ];
   };
 }
diff --git a/pkgs/applications/networking/cluster/terraform-landscape/default.nix b/pkgs/applications/networking/cluster/terraform-landscape/default.nix
index 1380005a1c15..6973938b60de 100644
--- a/pkgs/applications/networking/cluster/terraform-landscape/default.nix
+++ b/pkgs/applications/networking/cluster/terraform-landscape/default.nix
@@ -1,17 +1,18 @@
-{ lib, bundlerApp, ruby }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "terraform_landscape";
 
-  inherit ruby;
   gemdir = ./.;
   exes = [ "landscape" ];
 
+  passthru.updateScript = bundlerUpdateScript "terraform-landscape";
+
   meta = with lib; {
     description = "Improve Terraform's plan output to be easier to read and understand";
     homepage    = https://github.com/coinbase/terraform-landscape;
     license     = with licenses; apsl20;
-    maintainers = with maintainers; [ mbode manveru ];
+    maintainers = with maintainers; [ mbode manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/applications/networking/mailreaders/sup/default.nix b/pkgs/applications/networking/mailreaders/sup/default.nix
index f7b7d6e8c3d8..ccd092ba63cc 100644
--- a/pkgs/applications/networking/mailreaders/sup/default.nix
+++ b/pkgs/applications/networking/mailreaders/sup/default.nix
@@ -1,8 +1,4 @@
-{ lib, bundlerApp }:
-
-# Updated with:
-# rm gemset.nix Gemfile.lock
-# nix-shell -p bundler bundix --run 'bundle lock && bundix'
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "sup";
@@ -20,11 +16,13 @@ bundlerApp {
     "sup-tweak-labels"
   ];
 
+  passthru.updateScript = bundlerUpdateScript "sup";
+
   meta = with lib; {
     description = "A curses threads-with-tags style email client";
     homepage    = http://sup-heliotrope.github.io;
     license     = licenses.gpl2;
-    maintainers = with maintainers; [ cstrahan lovek323 manveru ];
+    maintainers = with maintainers; [ cstrahan lovek323 manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/applications/office/ledger-web/default.nix b/pkgs/applications/office/ledger-web/default.nix
index 13c559cfac10..df8298579e8f 100644
--- a/pkgs/applications/office/ledger-web/default.nix
+++ b/pkgs/applications/office/ledger-web/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp
+{ lib, bundlerApp, bundlerUpdateScript
 , withPostgresql ? true, postgresql
 , withSqlite ? false, sqlite
 }:
@@ -11,11 +11,13 @@ bundlerApp rec {
   buildInputs =    lib.optional withPostgresql postgresql
                 ++ lib.optional withSqlite sqlite;
 
+  passthru.updateScript = bundlerUpdateScript "ledger-web";
+
   meta = with lib; {
     description = "A web frontend to the Ledger CLI tool";
     homepage = https://github.com/peterkeen/ledger-web;
     license = licenses.mit;
-    maintainers = with maintainers; [ peterhoeg manveru ];
+    maintainers = with maintainers; [ peterhoeg manveru nicknovitski ];
     platforms = platforms.linux;
   };
 }
diff --git a/pkgs/applications/office/timetrap/default.nix b/pkgs/applications/office/timetrap/default.nix
index efeb23b3e83d..6d094ecb5dcc 100644
--- a/pkgs/applications/office/timetrap/default.nix
+++ b/pkgs/applications/office/timetrap/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "timetrap";
   gemdir = ./.;
   exes = [ "t" "timetrap" ];
 
+  passthru.updateScript = bundlerUpdateScript "timetrap";
+
   meta = with lib; {
     description = "A simple command line time tracker written in ruby";
     homepage    = https://github.com/samg/timetrap;
     license     = licenses.mit;
-    maintainers = with maintainers; [ jerith666 manveru ];
+    maintainers = with maintainers; [ jerith666 manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix b/pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix
index 341b50f0ef22..fda89e331809 100644
--- a/pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/bitbucket-server-cli/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerEnv, ruby }:
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv rec {
   name = "bitbucket-server-cli-${version}";
@@ -9,11 +9,13 @@ bundlerEnv rec {
 
   pname = "atlassian-stash";
 
+  passthru.updateScript = bundlerUpdateScript "gitAndTools.bitbucket-server-cli";
+
   meta = with lib; {
     description = "A command line interface to interact with BitBucket Server (formerly Atlassian Stash)";
     homepage    = https://bitbucket.org/atlassian/bitbucket-server-cli;
     license     = licenses.mit;
-    maintainers = with maintainers; [ jgertm ];
+    maintainers = with maintainers; [ jgertm nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/applications/version-management/git-and-tools/git-fame/default.nix b/pkgs/applications/version-management/git-and-tools/git-fame/default.nix
index 9ca7a67a53e7..2d6de24167bd 100644
--- a/pkgs/applications/version-management/git-and-tools/git-fame/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/git-fame/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, bundlerEnv, ruby }:
+{ stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv rec {
   inherit ruby;
@@ -7,13 +7,15 @@ bundlerEnv rec {
 
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "gitAndTools.git-fame";
+
   meta = with stdenv.lib; {
     description = ''
       A command-line tool that helps you summarize and pretty-print collaborators based on contributions
       '';
     homepage    = http://oleander.io/git-fame-rb;
     license     = licenses.mit;
-    maintainers = with maintainers; [ expipiplus1 ];
+    maintainers = with maintainers; [ expipiplus1 nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/compilers/matter-compiler/default.nix b/pkgs/development/compilers/matter-compiler/default.nix
index 4b3ff844977e..f415fa8c0124 100644
--- a/pkgs/development/compilers/matter-compiler/default.nix
+++ b/pkgs/development/compilers/matter-compiler/default.nix
@@ -1,10 +1,12 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "matter_compiler";
   gemdir = ./.;
   exes = [ "matter_compiler" ];
 
+  passthru.updateScript = bundlerUpdateScript "matter-compiler";
+
   meta = with lib; {
     description = ''
       Matter Compiler is a API Blueprint AST Media Types to API Blueprint conversion tool.
@@ -12,7 +14,7 @@ bundlerApp {
     '';
     homepage    = https://github.com/apiaryio/matter_compiler/;
     license     = licenses.mit;
-    maintainers = with maintainers; [ rvlander manveru ];
+    maintainers = with maintainers; [ rvlander manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/ruby-modules/bundler-env/default.nix b/pkgs/development/ruby-modules/bundler-env/default.nix
index 5d1489ba2005..b3f91b678c44 100644
--- a/pkgs/development/ruby-modules/bundler-env/default.nix
+++ b/pkgs/development/ruby-modules/bundler-env/default.nix
@@ -13,6 +13,7 @@
 , document ? []
 , meta ? {}
 , ignoreCollisions ? false
+, passthru ? {}
 , ...
 }@args:
 
@@ -55,5 +56,5 @@ in
       passthru = basicEnv.passthru // {
         inherit basicEnv;
         inherit (basicEnv) env;
-      };
+      } // passthru;
     })
diff --git a/pkgs/development/ruby-modules/bundler-update-script/default.nix b/pkgs/development/ruby-modules/bundler-update-script/default.nix
new file mode 100644
index 000000000000..50d0364aa067
--- /dev/null
+++ b/pkgs/development/ruby-modules/bundler-update-script/default.nix
@@ -0,0 +1,25 @@
+{ runtimeShell, lib, writeScript, bundix, bundler, bundler-audit, coreutils, git, nix }:
+
+attrPath:
+
+let
+  updateScript = writeScript "bundler-update-script" ''
+    #!${runtimeShell}
+    PATH=${lib.makeBinPath [ bundler bundler-audit bundix coreutils git nix ]}
+    set -o errexit
+    set -o nounset
+    set -o pipefail
+
+    attrPath=$1
+
+    toplevel=$(git rev-parse --show-toplevel)
+    position=$(nix eval -f "$toplevel" --raw "$attrPath.meta.position")
+    gemdir=$(dirname "$position")
+
+    cd "$gemdir"
+
+    bundler lock --update
+    bundler-audit check --update
+    bundix
+  '';
+in [ updateScript attrPath ]
diff --git a/pkgs/development/ruby-modules/solargraph/default.nix b/pkgs/development/ruby-modules/solargraph/default.nix
index 2f60dacd358b..0cfd8c5d66b0 100644
--- a/pkgs/development/ruby-modules/solargraph/default.nix
+++ b/pkgs/development/ruby-modules/solargraph/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp rec {
   pname = "solargraph";
   exes = ["solargraph"  "solargraph-runtime"];
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "solargraph";
+
   meta = with lib; {
     description = "IDE tools for the Ruby language";
     homepage = http://www.github.com/castwide/solargraph;
     license = licenses.mit;
-    maintainers = with maintainers; [ worldofpeace ];
+    maintainers = with maintainers; [ worldofpeace nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/build-managers/drake/default.nix b/pkgs/development/tools/build-managers/drake/default.nix
index a7bb93d52ed1..15fc682a315c 100644
--- a/pkgs/development/tools/build-managers/drake/default.nix
+++ b/pkgs/development/tools/build-managers/drake/default.nix
@@ -1,14 +1,16 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "drake";
   gemdir = ./.;
   exes = [ "drake" ];
 
+  passthru.updateScript = bundlerUpdateScript "drake";
+
   meta = with lib; {
     description = "A branch of Rake supporting automatic parallelizing of tasks";
     homepage = http://quix.github.io/rake/;
-    maintainers = with maintainers; [ romildo manveru ];
+    maintainers = with maintainers; [ romildo manveru nicknovitski ];
     license = licenses.mit;
     platforms = platforms.unix;
   };
diff --git a/pkgs/development/tools/build-managers/rake/default.nix b/pkgs/development/tools/build-managers/rake/default.nix
index 8de0130d31bd..2ce65b28fae5 100644
--- a/pkgs/development/tools/build-managers/rake/default.nix
+++ b/pkgs/development/tools/build-managers/rake/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "rake";
   gemdir = ./.;
   exes = [ "rake" ];
 
+  passthru.updateScript = bundlerUpdateScript "rake";
+
   meta = with lib; {
     description = "A software task management and build automation tool";
     homepage = https://github.com/ruby/rake;
     license  = with licenses; mit;
-    maintainers = with maintainers; [ manveru ];
+    maintainers = with maintainers; [ manveru nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/cadre/default.nix b/pkgs/development/tools/cadre/default.nix
index 93eb32cfb514..77b49107e165 100644
--- a/pkgs/development/tools/cadre/default.nix
+++ b/pkgs/development/tools/cadre/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "cadre";
   gemdir = ./.;
   exes = [ "cadre" ];
 
+  passthru.updateScript = bundlerUpdateScript "cadre";
+
   meta = with lib; {
     description = "Toolkit to add Ruby development - in-editor coverage, libnotify of test runs";
     homepage    = https://github.com/nyarly/cadre;
     license     = licenses.mit;
-    maintainers = [ maintainers.nyarly ];
+    maintainers = with maintainers; [ nyarly nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/cbor-diag/default.nix b/pkgs/development/tools/cbor-diag/default.nix
index 049d9f38c0c1..7942ff526456 100644
--- a/pkgs/development/tools/cbor-diag/default.nix
+++ b/pkgs/development/tools/cbor-diag/default.nix
@@ -1,9 +1,8 @@
-{ lib, bundlerApp, ruby }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "cbor-diag";
 
-  inherit ruby;
   gemdir = ./.;
 
   exes = [
@@ -20,11 +19,13 @@ bundlerApp {
     "yaml2cbor.rb"
   ];
 
+  passthru.updateScript = bundlerUpdateScript "cbor-diag";
+
   meta = with lib; {
     description = "CBOR diagnostic utilities";
     homepage    = https://github.com/cabo/cbor-diag;
     license     = with licenses; asl20;
-    maintainers = with maintainers; [ fdns ];
+    maintainers = with maintainers; [ fdns nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/cddl/default.nix b/pkgs/development/tools/cddl/default.nix
index 37ad593d7964..60e7edc75200 100644
--- a/pkgs/development/tools/cddl/default.nix
+++ b/pkgs/development/tools/cddl/default.nix
@@ -1,17 +1,18 @@
-{ lib, bundlerApp, ruby }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "cddl";
 
-  inherit ruby;
   gemdir = ./.;
   exes = [ "cddl" ];
 
+  passthru.updateScript = bundlerUpdateScript "cddl";
+
   meta = with lib; {
     description = "A parser, generator, and validator for CDDL";
     homepage    = https://rubygems.org/gems/cddl;
     license     = with licenses; mit;
-    maintainers = with maintainers; [ fdns ];
+    maintainers = with maintainers; [ fdns nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/chefdk/default.nix b/pkgs/development/tools/chefdk/default.nix
index 1d81d469eb29..921448855a64 100644
--- a/pkgs/development/tools/chefdk/default.nix
+++ b/pkgs/development/tools/chefdk/default.nix
@@ -1,20 +1,20 @@
-{ lib, bundlerEnv, ruby_2_4, perl, autoconf }:
+{ lib, bundlerEnv, bundlerUpdateScript, ruby_2_4, perl, autoconf }:
 
-bundlerEnv {
-  # Last updated via:
-  # nix-shell -p bundix -p gcc -p libxml2 -p zlib --run "bundix -mdl"
-  name = "chefdk-2.4.17";
+bundlerEnv rec {
+  pname = "chef-dk";
 
   ruby = ruby_2_4;
   gemdir = ./.;
 
   buildInputs = [ perl autoconf ];
 
+  passthru.updateScript = bundlerUpdateScript "chefdk";
+
   meta = with lib; {
     description = "A streamlined development and deployment workflow for Chef platform";
     homepage    = https://downloads.chef.io/chef-dk/;
     license     = licenses.asl20;
-    maintainers = with maintainers; [ offline ];
+    maintainers = with maintainers; [ offline nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/compass/default.nix b/pkgs/development/tools/compass/default.nix
index c47bddd4d9c3..516900c20676 100644
--- a/pkgs/development/tools/compass/default.nix
+++ b/pkgs/development/tools/compass/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "compass";
   gemdir = ./.;
   exes = [ "compass" ];
 
+  passthru.updateScript = bundlerUpdateScript "compass";
+
   meta = with lib; {
     description = "Stylesheet Authoring Environment that makes your website design simpler to implement and easier to maintain";
     homepage    = https://github.com/Compass/compass;
     license     = with licenses; mit;
-    maintainers = with maintainers; [ offline manveru ];
+    maintainers = with maintainers; [ offline manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/continuous-integration/cide/default.nix b/pkgs/development/tools/continuous-integration/cide/default.nix
index 932a02cf2bcf..fe83a9aa1704 100644
--- a/pkgs/development/tools/continuous-integration/cide/default.nix
+++ b/pkgs/development/tools/continuous-integration/cide/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, bundlerEnv, makeWrapper, docker, git, gnutar, gzip }:
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper, docker, git, gnutar, gzip }:
 
 stdenv.mkDerivation rec {
   name = "cide-${version}";
@@ -20,11 +20,13 @@ stdenv.mkDerivation rec {
       --set PATH ${stdenv.lib.makeBinPath [ docker git gnutar gzip ]}
   '';
 
+  passthru.updateScript = bundlerUpdateScript "cide";
+
   meta = with lib; {
     description = "Isolated test runner with Docker";
     homepage    = http://zimbatm.github.io/cide/;
     license     = licenses.mit;
-    maintainers = with maintainers; [ zimbatm ];
+    maintainers = with maintainers; [ zimbatm nicknovitski ];
     platforms   = docker.meta.platforms;
   };
 }
diff --git a/pkgs/development/tools/corundum/default.nix b/pkgs/development/tools/corundum/default.nix
index 22d7b236ffa4..0d1c69856631 100644
--- a/pkgs/development/tools/corundum/default.nix
+++ b/pkgs/development/tools/corundum/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "corundum";
   gemdir = ./.;
   exes = [ "corundum-skel" ];
 
+  passthru.updateScript = bundlerUpdateScript "corundum";
+
   meta = with lib; {
     description = "Tool and libraries for maintaining Ruby gems.";
     homepage    = https://github.com/nyarly/corundum;
     license     = licenses.mit;
-    maintainers = [ maintainers.nyarly ];
+    maintainers = with maintainers; [ nyarly nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/cucumber/default.nix b/pkgs/development/tools/cucumber/default.nix
index 4a3ed7395500..15db6013debc 100644
--- a/pkgs/development/tools/cucumber/default.nix
+++ b/pkgs/development/tools/cucumber/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "cucumber";
   gemdir = ./.;
   exes = [ "cucumber" ];
 
+  passthru.updateScript = bundlerUpdateScript "cucumber";
+
   meta = with lib; {
     description = "A tool for executable specifications";
     homepage    = https://cucumber.io/;
     license     = with licenses; mit;
-    maintainers = with maintainers; [ manveru ];
+    maintainers = with maintainers; [ manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/github-changelog-generator/default.nix b/pkgs/development/tools/github-changelog-generator/default.nix
index 02de300138d2..39aab9cfa278 100644
--- a/pkgs/development/tools/github-changelog-generator/default.nix
+++ b/pkgs/development/tools/github-changelog-generator/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp}:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp rec {
   pname = "github_changelog_generator";
   gemdir = ./.;
   exes = [ "github_changelog_generator" ];
 
+  passthru.updateScript = bundlerUpdateScript "github-changelog-generator";
+
   meta = with lib; {
     description = "Fully automated changelog generation - This gem generates a changelog file based on tags, issues and merged pull requests";
     homepage    = https://github.com/github-changelog-generator/github-changelog-generator;
     license     = licenses.mit;
-    maintainers = with maintainers; [ Scriptkiddi ];
+    maintainers = with maintainers; [ Scriptkiddi nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/jazzy/default.nix b/pkgs/development/tools/jazzy/default.nix
index 7fff98e03254..ad71dfb22a8f 100644
--- a/pkgs/development/tools/jazzy/default.nix
+++ b/pkgs/development/tools/jazzy/default.nix
@@ -1,12 +1,11 @@
-{ lib, bundlerApp, ruby }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp rec {
-  inherit ruby;
   pname = "jazzy";
   gemdir = ./.;
   exes = [ "jazzy" ];
 
-  passthru.updateScript = ./update;
+  passthru.updateScript = bundlerUpdateScript "jazzy";
 
   meta = with lib; {
     description     = "A command-line utility that generates documentation for Swift or Objective-C";
@@ -16,6 +15,7 @@ bundlerApp rec {
     maintainers     = with maintainers; [
       peterromfeldhk
       lilyball
+      nicknovitski
     ];
   };
 }
diff --git a/pkgs/development/tools/jazzy/update b/pkgs/development/tools/jazzy/update
deleted file mode 100755
index 1f0d11c7ddee..000000000000
--- a/pkgs/development/tools/jazzy/update
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env nix-shell
-#! nix-shell -i bash -p bash bundler bundix
-
-set -e
-
-cd "$(dirname "${BASH_SOURCE[0]}")"
-
-rm -f Gemfile.lock
-bundler lock
-bundix
diff --git a/pkgs/development/tools/jsduck/default.nix b/pkgs/development/tools/jsduck/default.nix
index ef89517966d7..dc8e618910c4 100644
--- a/pkgs/development/tools/jsduck/default.nix
+++ b/pkgs/development/tools/jsduck/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, lib, bundlerEnv, makeWrapper, }:
+{ stdenv, lib, bundlerEnv, makeWrapper, bundlerUpdateScript }:
 
 stdenv.mkDerivation rec {
   pname = "jsduck";
   name = "${pname}-${version}";
-  version = "5.3.4";
+  version = (import ./gemset.nix).jsduck.version;
 
   env = bundlerEnv {
     name = "${pname}";
@@ -21,11 +21,13 @@ stdenv.mkDerivation rec {
     makeWrapper ${env}/bin/jsduck $out/bin/jsduck
   '';
 
+  passthru.updateScript = bundlerUpdateScript "jsduck";
+
   meta = with lib; {
     description = "Simple JavaScript Duckumentation generator.";
     homepage    = https://github.com/senchalabs/jsduck;
     license     = with licenses; gpl3;
-    maintainers = with stdenv.lib.maintainers; [ periklis ];
+    maintainers = with maintainers; [ periklis nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/misc/mdl/.bundle/config b/pkgs/development/tools/misc/mdl/.bundle/config
deleted file mode 100644
index d28c8337bc45..000000000000
--- a/pkgs/development/tools/misc/mdl/.bundle/config
+++ /dev/null
@@ -1,3 +0,0 @@
----
-BUNDLE_PATH: "vendor/bundle"
-BUNDLE_CACHE_ALL: "true"
diff --git a/pkgs/development/tools/misc/mdl/default.nix b/pkgs/development/tools/misc/mdl/default.nix
index f0aca5c36a15..eda2fabd9c67 100644
--- a/pkgs/development/tools/misc/mdl/default.nix
+++ b/pkgs/development/tools/misc/mdl/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "mdl";
   gemdir = ./.;
   exes = [ "mdl" ];
 
+  passthru.updateScript = bundlerUpdateScript "mdl";
+
   meta = with lib; {
     description = "A tool to check markdown files and flag style issues";
     homepage = https://github.com/markdownlint/markdownlint;
     license = licenses.mit;
-    maintainers = with maintainers; [ gerschtli manveru ];
+    maintainers = with maintainers; [ gerschtli manveru nicknovitski ];
     platforms = platforms.all;
   };
 }
diff --git a/pkgs/development/tools/misc/one_gadget/default.nix b/pkgs/development/tools/misc/one_gadget/default.nix
index cf4a719292c4..1c2cbe35439d 100644
--- a/pkgs/development/tools/misc/one_gadget/default.nix
+++ b/pkgs/development/tools/misc/one_gadget/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "one_gadget";
   gemdir = ./.;
   exes = [ "one_gadget" ];
 
+  passthru.updateScript = bundlerUpdateScript "one_gadget";
+
   meta = with lib; {
     description = "The best tool for finding one gadget RCE in libc.so.6";
     homepage    = https://github.com/david942j/one_gadget;
     license     = licenses.mit;
-    maintainers = [ maintainers.artemist ];
+    maintainers = with maintainers; [ artemist nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/misc/travis/default.nix b/pkgs/development/tools/misc/travis/default.nix
index b5c5740e80ff..9020766fd865 100644
--- a/pkgs/development/tools/misc/travis/default.nix
+++ b/pkgs/development/tools/misc/travis/default.nix
@@ -1,19 +1,16 @@
-{ lib, bundlerEnv, ruby }:
-
-# Maintainer notes for updating
-# 1. increment version number in Gemfile
-# 2. run $ nix-shell --command "bundler install && bundix"
-#    in the travis directory in nixpkgs
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv {
   inherit ruby;
   pname = "travis";
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "travis";
+
   meta = with lib; {
     description = "CLI and Ruby client library for Travis CI";
     homepage    = https://github.com/travis-ci/travis.rb;
     license     = licenses.mit;
-    maintainers = with maintainers; [ zimbatm ];
+    maintainers = with maintainers; [ zimbatm nicknovitski ];
   };
 }
diff --git a/pkgs/development/tools/misc/watson-ruby/default.nix b/pkgs/development/tools/misc/watson-ruby/default.nix
index 32f94a1f2285..d6b8eb5b95ff 100644
--- a/pkgs/development/tools/misc/watson-ruby/default.nix
+++ b/pkgs/development/tools/misc/watson-ruby/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, bundlerEnv, ruby }:
+{ stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
 
 
 stdenv.mkDerivation rec {
@@ -19,11 +19,13 @@ stdenv.mkDerivation rec {
     ln -s ${env}/bin/watson $out/bin/watson
   '';
 
+  passthru.updateScript = bundlerUpdateScript "watson-ruby";
+
   meta = with stdenv.lib; {
     description = "An inline issue manager";
     homepage    = http://goosecode.com/watson/;
     license     = with licenses; mit;
-    maintainers = with maintainers; [ robertodr ];
+    maintainers = with maintainers; [ robertodr nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/redis-dump/default.nix b/pkgs/development/tools/redis-dump/default.nix
index c83117860100..646d04c266f5 100644
--- a/pkgs/development/tools/redis-dump/default.nix
+++ b/pkgs/development/tools/redis-dump/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "redis-dump";
   gemdir = ./.;
   exes = [ "redis-dump" ];
 
+  passthru.updateScript = bundlerUpdateScript "redis-dump";
+
   meta = with lib; {
     description = "Backup and restore your Redis data to and from JSON";
     homepage    = http://delanotes.com/redis-dump/;
     license     = licenses.mit;
-    maintainers = with maintainers; [ offline manveru ];
+    maintainers = with maintainers; [ offline manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/ronn/default.nix b/pkgs/development/tools/ronn/default.nix
index 5f20e89d4083..499cec2e6a7f 100644
--- a/pkgs/development/tools/ronn/default.nix
+++ b/pkgs/development/tools/ronn/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, bundlerEnv, makeWrapper, groff }:
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper, groff }:
 
 stdenv.mkDerivation rec {
   name = "ronn-${version}";
@@ -19,11 +19,13 @@ stdenv.mkDerivation rec {
       --set PATH ${groff}/bin
   '';
 
+  passthru.updateScript = bundlerUpdateScript "ronn";
+
   meta = with lib; {
     description = "markdown-based tool for building manpages";
     homepage = https://rtomayko.github.io/ronn/;
     license = licenses.mit;
-    maintainers = with maintainers; [ zimbatm ];
+    maintainers = with maintainers; [ zimbatm nicknovitski ];
     platforms = env.ruby.meta.platforms;
   };
 }
diff --git a/pkgs/development/tools/rubocop/default.nix b/pkgs/development/tools/rubocop/default.nix
index b91a36cb0613..5d965fc87a7e 100644
--- a/pkgs/development/tools/rubocop/default.nix
+++ b/pkgs/development/tools/rubocop/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerEnv, ruby }:
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv rec {
   pname = "rubocop";
@@ -7,6 +7,8 @@ bundlerEnv rec {
 
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "rubocop";
+
   meta = with lib; {
     description = "Automatic Ruby code style checking tool";
     homepage = "https://docs.rubocop.org/";
diff --git a/pkgs/development/tools/sass/default.nix b/pkgs/development/tools/sass/default.nix
index c204ba8cd406..6d9a7f1c0805 100644
--- a/pkgs/development/tools/sass/default.nix
+++ b/pkgs/development/tools/sass/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "sass";
   gemdir = ./.;
   exes = [ "sass" "sass-convert" "scss" ];
 
+  passthru.updateScript = bundlerUpdateScript "sass";
+
   meta = with lib; {
     description = "Tools and Ruby libraries for the CSS3 extension languages: Sass and SCSS";
     homepage    = https://sass-lang.com;
     license     = licenses.mit;
-    maintainers = with maintainers; [ romildo manveru ];
+    maintainers = with maintainers; [ romildo manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/scss-lint/default.nix b/pkgs/development/tools/scss-lint/default.nix
index d1d0dbababa2..8d17969b55e5 100644
--- a/pkgs/development/tools/scss-lint/default.nix
+++ b/pkgs/development/tools/scss-lint/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "scss_lint";
   gemdir = ./.;
   exes = [ "scss-lint" ];
 
+  passthru.updateScript = bundlerUpdateScript "scss-lint";
+
   meta = with lib; {
     description = "A tool to help keep your SCSS files clean and readable";
     homepage    = https://github.com/brigade/scss-lint;
     license     = licenses.mit;
-    maintainers = [ maintainers.lovek323 ];
+    maintainers = with maintainers; [ lovek323 nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/development/tools/sqlint/default.nix b/pkgs/development/tools/sqlint/default.nix
index 67fbd09f1027..d7ff9199460f 100644
--- a/pkgs/development/tools/sqlint/default.nix
+++ b/pkgs/development/tools/sqlint/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp, fetchurl, ruby }:
+{ lib, bundlerApp, fetchurl, bundlerUpdateScript }:
 
 let
   LIB_PG_QUERY_TAG = "10-1.0.1";
@@ -10,7 +10,6 @@ let
 in bundlerApp {
   pname = "sqlint";
   gemdir = ./.;
-  inherit ruby;
 
   exes = [ "sqlint" ];
 
@@ -24,11 +23,13 @@ in bundlerApp {
     };
   };
 
+  passthru.updateScript = bundlerUpdateScript "sqlint";
+
   meta = with lib; {
     description = "Simple SQL linter";
     homepage    = https://github.com/purcell/sqlint;
     license     = licenses.mit;
-    maintainers = with maintainers; [ ariutta ];
+    maintainers = with maintainers; [ ariutta nicknovitski ];
     platforms   = with platforms; [ "x86_64-linux" "x86_64-darwin" ];
   };
 }
diff --git a/pkgs/development/tools/xcpretty/default.nix b/pkgs/development/tools/xcpretty/default.nix
index 99af752086f6..84a6798afe33 100644
--- a/pkgs/development/tools/xcpretty/default.nix
+++ b/pkgs/development/tools/xcpretty/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp, bundler, bundix }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "xcpretty";
@@ -7,13 +7,7 @@ bundlerApp {
   exes = [ "xcpretty" ];
 
   passthru = {
-    updateScript = ''
-      set -e
-      echo
-      cd ${toString ./.}
-      ${bundler}/bin/bundle lock --update
-      ${bundix}/bin/bundix
-    '';
+    updateScript = bundlerUpdateScript "xcpretty";
   };
 
   meta = with lib; {
diff --git a/pkgs/development/web/mailcatcher/default.nix b/pkgs/development/web/mailcatcher/default.nix
index a2fa509232de..f960fe192780 100644
--- a/pkgs/development/web/mailcatcher/default.nix
+++ b/pkgs/development/web/mailcatcher/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "mailcatcher";
   gemdir = ./.;
   exes = [ "mailcatcher" "catchmail" ];
 
+  passthru.updateScript = bundlerUpdateScript "mailcatcher";
+
   meta = with lib; {
     description = "SMTP server and web interface to locally test outbound emails";
     homepage    = https://mailcatcher.me/;
     license     = licenses.mit;
-    maintainers = [ maintainers.zarelit ];
+    maintainers = with maintainers; [ zarelit nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/servers/http/showoff/default.nix b/pkgs/servers/http/showoff/default.nix
index 79b92bdd7c57..136fcb3e07cf 100644
--- a/pkgs/servers/http/showoff/default.nix
+++ b/pkgs/servers/http/showoff/default.nix
@@ -1,16 +1,18 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "showoff";
   gemdir = ./.;
   exes = [ "showoff" ];
 
+  passthru.updateScript = bundlerUpdateScript "showoff";
+
   meta = with lib; {
     description = "A slideshow presentation tool with a twist";
     longDescription = "It runs as a web application, with audience interactivity features. This means that your audience can follow along in their own browsers, can download supplemental materials, can participate in quizzes or polls, post questions for the presenter, etc. By default, their slideshows will synchronize with the presenter, but they can switch to self-navigation mode";
     homepage = https://puppetlabs.github.io/showoff/;
     license = with licenses; mit;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ mwilsoninsight ];
+    maintainers = with maintainers; [ mwilsoninsight nicknovitski ];
   };
 }
diff --git a/pkgs/servers/monitoring/riemann-dash/default.nix b/pkgs/servers/monitoring/riemann-dash/default.nix
index 6e0e97c7cc63..943fa0af63f3 100644
--- a/pkgs/servers/monitoring/riemann-dash/default.nix
+++ b/pkgs/servers/monitoring/riemann-dash/default.nix
@@ -1,15 +1,17 @@
-{ bundlerApp, lib }:
+{ bundlerApp, lib, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "riemann-dash";
   gemdir = ./.;
   exes = [ "riemann-dash" ];
 
+  passthru.updateScript = bundlerUpdateScript "riemann-dash";
+
   meta = with lib; {
     description = "A javascript, websockets-powered dashboard for Riemann";
     homepage = https://github.com/riemann/riemann-dash;
     license = licenses.mit;
-    maintainers = with maintainers; [ manveru ];
+    maintainers = with maintainers; [ manveru nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/servers/monitoring/sensu/default.nix b/pkgs/servers/monitoring/sensu/default.nix
index f1a6a08267d6..82c52b18d405 100644
--- a/pkgs/servers/monitoring/sensu/default.nix
+++ b/pkgs/servers/monitoring/sensu/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "sensu";
@@ -42,11 +42,13 @@ bundlerApp {
     "check-systemd.rb"
   ];
 
+  passthru.updateScript = bundlerUpdateScript "sensu";
+
   meta = with lib; {
     description = "A monitoring framework that aims to be simple, malleable, and scalable";
     homepage    = https://sensuapp.org/;
     license     = licenses.mit;
-    maintainers = with maintainers; [ theuni peterhoeg manveru ];
+    maintainers = with maintainers; [ theuni peterhoeg manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/admin/fastlane/default.nix b/pkgs/tools/admin/fastlane/default.nix
index 8aba7524008b..3dbc8eea87b1 100644
--- a/pkgs/tools/admin/fastlane/default.nix
+++ b/pkgs/tools/admin/fastlane/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, bundlerEnv, ruby, makeWrapper }:
+{ stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
@@ -21,6 +21,8 @@ stdenv.mkDerivation rec {
      --set FASTLANE_SKIP_UPDATE_CHECK 1
   '';
 
+  passthru.updateScript = bundlerUpdateScript "fastlane";
+
   meta = with stdenv.lib; {
     description     = "A tool to automate building and releasing iOS and Android apps";
     longDescription = "fastlane is a tool for iOS and Android developers to automate tedious tasks like generating screenshots, dealing with provisioning profiles, and releasing your application.";
@@ -28,6 +30,7 @@ stdenv.mkDerivation rec {
     license         = licenses.mit;
     maintainers     = with maintainers; [
       peterromfeldhk
+      nicknovitski
     ];
   };
 }
diff --git a/pkgs/tools/admin/fastlane/update b/pkgs/tools/admin/fastlane/update
deleted file mode 100755
index 22d1e52e2977..000000000000
--- a/pkgs/tools/admin/fastlane/update
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env nix-shell
-#! nix-shell -i bash -p bash ruby bundler bundix
-
-rm Gemfile.lock
-bundler install
-bundix
-
-if [ "clean" == "$1" ]; then
-  rm -r ~/.gem
-fi
diff --git a/pkgs/tools/admin/oxidized/default.nix b/pkgs/tools/admin/oxidized/default.nix
index 25b8bdb65856..e49d39576591 100644
--- a/pkgs/tools/admin/oxidized/default.nix
+++ b/pkgs/tools/admin/oxidized/default.nix
@@ -1,4 +1,4 @@
-{ lib, ruby, bundlerApp }:
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp rec {
   pname = "oxidized";
@@ -8,11 +8,13 @@ bundlerApp rec {
 
   exes = [ "oxidized" "oxidized-web" "oxidized-script" ];
 
+  passthru.updateScript = bundlerUpdateScript "oxidized";
+
   meta = with lib; {
     description = "Oxidized is a network device configuration backup tool. It's a RANCID replacement!";
     homepage    = https://github.com/ytti/oxidized;
     license     = licenses.asl20;
-    maintainers = [ maintainers.willibutz ];
+    maintainers = with maintainers; [ willibutz nicknovitski ];
     platforms   = platforms.linux;
   };
 }
diff --git a/pkgs/tools/backup/lvmsync/default.nix b/pkgs/tools/backup/lvmsync/default.nix
index dc589316a585..0ed70ade8295 100644
--- a/pkgs/tools/backup/lvmsync/default.nix
+++ b/pkgs/tools/backup/lvmsync/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, bundlerEnv, ruby, makeWrapper }:
+{ stdenv, bundlerEnv, ruby, bundlerUpdateScript, makeWrapper }:
 
 let
 
@@ -26,12 +26,14 @@ in stdenv.mkDerivation rec {
     makeWrapper ${env}/bin/lvmsync $out/bin/lvmsync
   '';
 
+  passthru.updateScript = bundlerUpdateScript "lvmsync";
+
   meta = with stdenv.lib; {
     description = "Optimised synchronisation of LVM snapshots over a network";
     homepage = http://theshed.hezmatt.org/lvmsync/;
     license = licenses.gpl3;
     platforms = platforms.all;
-    maintainers = with maintainers; [ jluttine ];
+    maintainers = with maintainers; [ jluttine nicknovitski ];
   };
 
 }
diff --git a/pkgs/tools/inputmethods/fusuma/default.nix b/pkgs/tools/inputmethods/fusuma/default.nix
index 2630ab0fc81f..b410a21cd6ba 100644
--- a/pkgs/tools/inputmethods/fusuma/default.nix
+++ b/pkgs/tools/inputmethods/fusuma/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp, makeWrapper, libinput }:
+{ lib, bundlerApp, bundlerUpdateScript, makeWrapper, libinput }:
 
 bundlerApp {
   pname = "fusuma";
@@ -12,11 +12,13 @@ bundlerApp {
       --prefix PATH : ${lib.makeBinPath [ libinput ]}
   '';
 
+  passthru.updateScript = bundlerUpdateScript "fusuma";
+
   meta = with lib; {
     description = "Multitouch gestures with libinput driver on X11, Linux";
     homepage    = https://github.com/iberianpig/fusuma;
     license     = licenses.mit;
-    maintainers = with maintainers; [ jfrankenau ];
+    maintainers = with maintainers; [ jfrankenau nicknovitski ];
     platforms   = platforms.linux;
   };
 }
diff --git a/pkgs/tools/misc/docker-sync/default.nix b/pkgs/tools/misc/docker-sync/default.nix
index e541fc0f0d4f..e75b83475681 100644
--- a/pkgs/tools/misc/docker-sync/default.nix
+++ b/pkgs/tools/misc/docker-sync/default.nix
@@ -1,4 +1,4 @@
-{ lib, ruby, bundlerApp }:
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "docker-sync";
@@ -8,11 +8,13 @@ bundlerApp {
 
   exes = ["docker-sync"];
 
+  passthru.updateScript = bundlerUpdateScript "docker-sync";
+
   meta = with lib; {
     description = "Run your application at full speed while syncing your code for development";
     homepage = http://docker-sync.io;
     license = licenses.gpl3;
-    maintainers = [ maintainers.manveru ];
+    maintainers = with maintainers; [ manveru nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/fluentd/default.nix b/pkgs/tools/misc/fluentd/default.nix
index c9ee511ff830..18d03982f37c 100644
--- a/pkgs/tools/misc/fluentd/default.nix
+++ b/pkgs/tools/misc/fluentd/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerEnv, ruby }:
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv {
   inherit ruby;
@@ -6,11 +6,13 @@ bundlerEnv {
   pname = "fluentd";
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "fluentd";
+
   meta = with lib; {
     description = "A data collector";
     homepage    = https://www.fluentd.org/;
     license     = licenses.asl20;
-    maintainers = with maintainers; [ offline ];
+    maintainers = with maintainers; [ offline nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/homesick/default.nix b/pkgs/tools/misc/homesick/default.nix
index d35267fae27e..00a9bf85650c 100644
--- a/pkgs/tools/misc/homesick/default.nix
+++ b/pkgs/tools/misc/homesick/default.nix
@@ -1,6 +1,6 @@
-{ lib, bundlerEnv, git}:
+{ lib, bundlerEnv, bundlerUpdateScript, git }:
 bundlerEnv {
-  name = "homesick-1.1.6";
+  pname = "homesick";
 
   gemdir = ./.;
 
@@ -10,6 +10,8 @@ bundlerEnv {
     sed 1a'ENV["PATH"] = "${git}/bin:#{ENV["PATH"] ? ":#{ENV["PATH"]}" : "" }"' -i $out/bin/homesick
   '';
 
+  passthru.updateScript = bundlerUpdateScript "homesick";
+
   meta = with lib; {
     description = "Your home directory is your castle. Don't leave your dotfiles behind";
     longDescription =
@@ -20,7 +22,7 @@ bundlerEnv {
       '';
     homepage = https://github.com/technicalpickles/homesick;
     license = licenses.mit;
-    maintainers = with maintainers; [ aaronschif ];
+    maintainers = with maintainers; [ aaronschif nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/lolcat/default.nix b/pkgs/tools/misc/lolcat/default.nix
index 5b9466426bd9..25efcdf34611 100644
--- a/pkgs/tools/misc/lolcat/default.nix
+++ b/pkgs/tools/misc/lolcat/default.nix
@@ -1,14 +1,16 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "lolcat";
   gemdir = ./.;
   exes = [ "lolcat" ];
 
+  passthru.updateScript = bundlerUpdateScript "lolcat";
+
   meta = with lib; {
     description = "A rainbow version of cat";
     homepage    = https://github.com/busyloop/lolcat;
     license     = licenses.bsd3;
-    maintainers = with maintainers; [ StillerHarpo manveru ];
+    maintainers = with maintainers; [ StillerHarpo manveru nicknovitski ];
   };
 }
diff --git a/pkgs/tools/misc/pws/default.nix b/pkgs/tools/misc/pws/default.nix
index 7294c61da8fa..d5f2fd4afd4f 100644
--- a/pkgs/tools/misc/pws/default.nix
+++ b/pkgs/tools/misc/pws/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, lib, bundlerEnv, ruby, xsel, makeWrapper }:
+{ stdenv, lib, bundlerEnv, ruby, bundlerUpdateScript, xsel, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  name = "pws-1.0.6";
+  name = "pws-${(import ./gemset.nix).pws.version}";
 
   env = bundlerEnv {
     name = "${name}-gems";
@@ -21,11 +21,13 @@ stdenv.mkDerivation rec {
       --set PATH '"${xsel}/bin/:$PATH"'
   '';
 
+  passthru.updateScript = bundlerUpdateScript "pws";
+
   meta = with lib; {
     description = "Command-line password safe";
     homepage    = https://github.com/janlelis/pws;
     license     = licenses.mit;
-    maintainers = [ maintainers.swistak35 ];
+    maintainers = with maintainers; [ swistak35 nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/riemann-tools/default.nix b/pkgs/tools/misc/riemann-tools/default.nix
index 6a3e1f3deb10..a9977aefd66c 100644
--- a/pkgs/tools/misc/riemann-tools/default.nix
+++ b/pkgs/tools/misc/riemann-tools/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "riemann-tools";
@@ -26,10 +26,12 @@ bundlerApp {
     "riemann-zookeeper"
   ];
 
+  passthru.updateScript = bundlerUpdateScript "riemann-tools";
+
   meta = with lib; {
     description = "Tools to submit data to Riemann";
     homepage = "https://riemann.io";
-    maintainers = with maintainers; [ manveru ];
+    maintainers = with maintainers; [ manveru nicknovitski ];
     license = licenses.mit;
   };
 }
diff --git a/pkgs/tools/misc/t/default.nix b/pkgs/tools/misc/t/default.nix
index 53e8471fb532..aa34b98bbe29 100644
--- a/pkgs/tools/misc/t/default.nix
+++ b/pkgs/tools/misc/t/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "t";
   gemdir = ./.;
   exes = [ "t" ];
 
+  passthru.updateScript = bundlerUpdateScript "t";
+
   meta = with lib; {
     description = "A command-line power tool for Twitter";
     homepage    = http://sferik.github.io/t/;
     license     = licenses.asl20;
-    maintainers = with maintainers; [ offline manveru ];
+    maintainers = with maintainers; [ offline manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/td/default.nix b/pkgs/tools/misc/td/default.nix
index 121eff450b59..437bdb0373f8 100644
--- a/pkgs/tools/misc/td/default.nix
+++ b/pkgs/tools/misc/td/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "td";
   gemdir = ./.;
   exes = [ "td" ];
 
+  passthru.updateScript = bundlerUpdateScript "td";
+
   meta = with lib; {
     description = "CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing.";
     homepage    = https://github.com/treasure-data/td;
     license     = licenses.asl20;
-    maintainers =  with maintainers; [ groodt ];
+    maintainers =  with maintainers; [ groodt nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/teamocil/default.nix b/pkgs/tools/misc/teamocil/default.nix
index 2215e4d4fee7..82aba6126992 100644
--- a/pkgs/tools/misc/teamocil/default.nix
+++ b/pkgs/tools/misc/teamocil/default.nix
@@ -1,10 +1,12 @@
-{ lib, bundlerEnv, ruby }:
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv rec {
   inherit ruby;
   pname = "teamocil";
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "teamocil";
+
   meta = with lib; {
     description     = "A simple tool used to automatically create windows and panes in tmux with YAML files";
     homepage        = https://github.com/remiprev/teamocil;
@@ -12,6 +14,7 @@ bundlerEnv rec {
     platforms       = platforms.all;
     maintainers     = with maintainers; [
       zachcoyle 
+      nicknovitski
     ];
   };
 }
diff --git a/pkgs/tools/misc/teamocil/update b/pkgs/tools/misc/teamocil/update
deleted file mode 100755
index 58a7bd4a4539..000000000000
--- a/pkgs/tools/misc/teamocil/update
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env nix-shell
-#! nix-shell -i bash -p bash ruby bundler bundix
-
-rm Gemfile.lock
-bundler install
-bundix
-
-if [ "clean" == "$1" ]; then
-  rm -rf ~/.gem
-fi
diff --git a/pkgs/tools/networking/hue-cli/default.nix b/pkgs/tools/networking/hue-cli/default.nix
index ae51bb69bda1..b9b4a8eac9d2 100644
--- a/pkgs/tools/networking/hue-cli/default.nix
+++ b/pkgs/tools/networking/hue-cli/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "hue-cli";
   gemdir = ./.;
   exes = [ "hue" ];
 
+  passthru.updateScript = bundlerUpdateScript "hue-cli";
+
   meta = with lib; {
     description = "Command line interface for controlling Philips Hue system's lights and bridge";
     homepage =  https://github.com/birkirb/hue-cli;
     license = licenses.mit;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ manveru ];
+    maintainers = with maintainers; [ manveru nicknovitski ];
   };
 }
diff --git a/pkgs/tools/networking/maphosts/default.nix b/pkgs/tools/networking/maphosts/default.nix
index 3a48814928e5..e54a2b21d9fd 100644
--- a/pkgs/tools/networking/maphosts/default.nix
+++ b/pkgs/tools/networking/maphosts/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, bundlerEnv, ruby }:
+{ stdenv, lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 stdenv.mkDerivation rec {
   name = "maphosts-${env.gems.maphosts.version}";
@@ -16,11 +16,13 @@ stdenv.mkDerivation rec {
     ln -s "${env}/bin/maphosts" "$out/bin/maphosts"
   '';
 
+  passthru.updateScript = bundlerUpdateScript "maphosts";
+
   meta = with lib; {
     description = "Small command line application for keeping your project hostnames in sync with /etc/hosts";
     homepage    = https://github.com/mpscholten/maphosts;
     license     = licenses.mit;
-    maintainers = with maintainers; [ mpscholten ];
+    maintainers = with maintainers; [ mpscholten nicknovitski ];
     platforms   = platforms.all;
   };
 }
diff --git a/pkgs/tools/package-management/elm-github-install/default.nix b/pkgs/tools/package-management/elm-github-install/default.nix
index 1f70dc1c8c8c..5703a13745bd 100644
--- a/pkgs/tools/package-management/elm-github-install/default.nix
+++ b/pkgs/tools/package-management/elm-github-install/default.nix
@@ -1,17 +1,21 @@
-{ lib, bundlerEnv, ruby }:
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv rec {
+  pname = "elm_install";
   name = "elm-github-install-${version}";
 
   version = (import ./gemset.nix).elm_install.version;
+
   inherit ruby;
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "elm-github-install";
+
   meta = with lib; {
     description = "Install Elm packages from git repositories.";
     homepage    = https://github.com/gdotdesign/elm-github-install;
     license     = licenses.unfree;
-    maintainers = [ maintainers.roberth ];
+    maintainers = with maintainers; [ roberth nicknovitski ];
     platforms   = platforms.all;
   };
 }
diff --git a/pkgs/tools/package-management/fpm/default.nix b/pkgs/tools/package-management/fpm/default.nix
index 905c686fede7..ccb50717accf 100644
--- a/pkgs/tools/package-management/fpm/default.nix
+++ b/pkgs/tools/package-management/fpm/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "fpm";
   gemdir = ./.;
   exes = [ "fpm" ];
 
+  passthru.updateScript = bundlerUpdateScript "fpm";
+
   meta = with lib; {
     description = "Tool to build packages for multiple platforms with ease";
     homepage    = https://github.com/jordansissel/fpm;
     license     = licenses.mit;
-    maintainers = with maintainers; [ manveru ];
+    maintainers = with maintainers; [ manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/package-management/fpm/update b/pkgs/tools/package-management/fpm/update
deleted file mode 100755
index 22d1e52e2977..000000000000
--- a/pkgs/tools/package-management/fpm/update
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env nix-shell
-#! nix-shell -i bash -p bash ruby bundler bundix
-
-rm Gemfile.lock
-bundler install
-bundix
-
-if [ "clean" == "$1" ]; then
-  rm -r ~/.gem
-fi
diff --git a/pkgs/tools/security/bundler-audit/default.nix b/pkgs/tools/security/bundler-audit/default.nix
index 8b19b6103d4a..3712c129cf65 100644
--- a/pkgs/tools/security/bundler-audit/default.nix
+++ b/pkgs/tools/security/bundler-audit/default.nix
@@ -1,4 +1,4 @@
-{ bundlerEnv, ruby, lib }:
+{ bundlerEnv, ruby, lib, bundlerUpdateScript }:
 
 bundlerEnv rec {
   name = "${pname}-${version}";
@@ -8,6 +8,8 @@ bundlerEnv rec {
   inherit ruby;
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "bundler-audit";
+
   meta = with lib; {
     description = "Patch-level verification for Bundler";
     longDescription = ''
@@ -20,7 +22,7 @@ bundlerEnv rec {
     '';
     homepage    = https://github.com/rubysec/bundler-audit;
     license     = licenses.gpl3Plus;
-    maintainers = with maintainers; [ primeos ];
+    maintainers = with maintainers; [ primeos nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/system/colorls/default.nix b/pkgs/tools/system/colorls/default.nix
index 45c3bdf1f40c..62670fa11a08 100644
--- a/pkgs/tools/system/colorls/default.nix
+++ b/pkgs/tools/system/colorls/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp, ruby, ... }:
+{ lib, bundlerApp, ruby, bundlerUpdateScript }:
 
 bundlerApp rec {
   pname = "colorls";
@@ -6,11 +6,13 @@ bundlerApp rec {
   gemdir = ./.;
   exes = [ "colorls" ];
 
+  passthru.updateScript = bundlerUpdateScript "colorls";
+
   meta = with lib; {
     description = "Prettified LS";
     homepage    = https://github.com/athityakumar/colorls;
     license     = with licenses; mit;
-    maintainers = with maintainers; [ lukebfox ];
+    maintainers = with maintainers; [ lukebfox nicknovitski ];
     platforms   = ruby.meta.platforms;
   };
 }
diff --git a/pkgs/tools/system/hiera-eyaml/default.nix b/pkgs/tools/system/hiera-eyaml/default.nix
index e0ff7d5ca8b4..33d97aa7d6b6 100644
--- a/pkgs/tools/system/hiera-eyaml/default.nix
+++ b/pkgs/tools/system/hiera-eyaml/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerEnv, ruby }:
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv {
   inherit ruby;
   pname = "hiera-eyaml";
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "hiera-eyaml";
+
   meta = with lib; {
     description = "Per-value asymmetric encryption of sensitive data for Hiera";
     homepage = https://github.com/TomPoulton/hiera-eyaml;
     license = licenses.mit;
-    maintainers = [ maintainers.benley ];
+    maintainers = with maintainers; [ benley nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/system/procodile/default.nix b/pkgs/tools/system/procodile/default.nix
index 22dc59a9e8e6..3ae80a312ed6 100644
--- a/pkgs/tools/system/procodile/default.nix
+++ b/pkgs/tools/system/procodile/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "procodile";
   gemdir = ./.;
   exes = [ "procodile" ];
 
+  passthru.updateScript = bundlerUpdateScript "procodile";
+
   meta = with lib; {
     description = "Run processes in the background (and foreground) on Mac & Linux from a Procfile (for production and/or development environments)";
     homepage    = https://adam.ac/procodile;
     license     = with licenses; mit;
-    maintainers = with maintainers; [ ravloony manveru ];
+    maintainers = with maintainers; [ ravloony manveru nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/system/r10k/default.nix b/pkgs/tools/system/r10k/default.nix
index 43d354107609..56e4e4f94fae 100644
--- a/pkgs/tools/system/r10k/default.nix
+++ b/pkgs/tools/system/r10k/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerApp, makeWrapper, git, gnutar, gzip }:
+{ lib, bundlerApp, bundlerUpdateScript, makeWrapper, git, gnutar, gzip }:
 
 bundlerApp {
   pname = "r10k";
@@ -11,11 +11,13 @@ bundlerApp {
     wrapProgram $out/bin/r10k --prefix PATH : ${lib.makeBinPath [ git gnutar gzip ]}
   '';
 
+  passthru.updateScript = bundlerUpdateScript "r10k";
+
   meta = with lib; {
     description = "Puppet environment and module deployment";
     homepage    = https://github.com/puppetlabs/r10k;
     license     = licenses.asl20;
-    maintainers = with maintainers; [ zimbatm manveru ];
+    maintainers = with maintainers; [ zimbatm manveru nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/bcat/default.nix b/pkgs/tools/text/bcat/default.nix
index 72fb8aa8e2ee..e8000f17cdeb 100644
--- a/pkgs/tools/text/bcat/default.nix
+++ b/pkgs/tools/text/bcat/default.nix
@@ -1,15 +1,17 @@
-{ lib, bundlerApp }:
+{ lib, bundlerApp, bundlerUpdateScript }:
 
 bundlerApp {
   pname = "bcat";
   gemdir = ./.;
   exes = [ "bcat" "btee" "a2h" ];
 
+  passthru.updateScript = bundlerUpdateScript "bcat";
+
   meta = with lib; {
     description = "Pipe to browser utility";
     homepage    = http://rtomayko.github.com/bcat/;
     license     = licenses.mit;
-    maintainers = [ maintainers.jraygauthier ];
+    maintainers = with maintainers; [ jraygauthier nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/papertrail/default.nix b/pkgs/tools/text/papertrail/default.nix
index a02ca1cd3dde..05213ff1a870 100644
--- a/pkgs/tools/text/papertrail/default.nix
+++ b/pkgs/tools/text/papertrail/default.nix
@@ -1,7 +1,6 @@
-{ stdenv, bundlerEnv, ruby}:
+{ stdenv, bundlerEnv, ruby, bundlerUpdateScript }:
 
 let
-  # To update, just run `nix-shell` in this directory.
   papertrail-env = bundlerEnv rec {
     name = "papertrail-env";
     inherit ruby;
@@ -18,4 +17,14 @@ in stdenv.mkDerivation {
     mkdir -p $out/bin
     ln -s ${papertrail-env}/bin/papertrail $out/bin/papertrail
   '';
+
+  passthru.updateScript = bundlerUpdateScript "papertrail";
+
+  meta = with stdenv.lib; {
+    description = "Command-line client for Papertrail log management service";
+    homepage    = http://github.com/papertrail/papertrail-cli/;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
+    platforms   = ruby.meta.platforms;
+  };
 }
diff --git a/pkgs/tools/text/papertrail/shell.nix b/pkgs/tools/text/papertrail/shell.nix
deleted file mode 100644
index 55a7a18f57b1..000000000000
--- a/pkgs/tools/text/papertrail/shell.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ pkgs ? import <nixpkgs> {} }:
-
-pkgs.stdenv.mkDerivation {
-  name = "papertrail";
-  src = ./.;
-
-  buildInputs = with pkgs; [
-    bundix
-    bundler
-    ruby
-  ];
-
-  shellHook = ''
-    truncate --size 0 Gemfile.lock
-    bundle install --path=vendor/bundle
-    rm -rf vendor .bundle
-    bundix
-  '';
-}
diff --git a/pkgs/tools/text/reckon/default.nix b/pkgs/tools/text/reckon/default.nix
index b97ffc7c58a8..9e3e4d5b41d5 100644
--- a/pkgs/tools/text/reckon/default.nix
+++ b/pkgs/tools/text/reckon/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, lib, bundlerEnv, makeWrapper }:
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper }:
 
 stdenv.mkDerivation rec {
   name = "reckon-${version}";
-  version = "0.4.4";
+  version = (import ./gemset.nix).reckon.version;
 
   env = bundlerEnv {
     name = "${name}-gems";
@@ -19,9 +19,12 @@ stdenv.mkDerivation rec {
     makeWrapper ${env}/bin/reckon $out/bin/reckon
   '';
 
+  passthru.updateScript = bundlerUpdateScript "reckon";
+
   meta = with lib; {
     description = "Flexibly import bank account CSV files into Ledger for command line accounting";
     license = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
     platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/text/ruby-zoom/default.nix b/pkgs/tools/text/ruby-zoom/default.nix
index b939e1500e49..c39538408362 100644
--- a/pkgs/tools/text/ruby-zoom/default.nix
+++ b/pkgs/tools/text/ruby-zoom/default.nix
@@ -1,4 +1,4 @@
-{ lib, bundlerEnv, ruby, stdenv }:
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
 
 bundlerEnv {
   pname = "ruby-zoom";
@@ -6,11 +6,13 @@ bundlerEnv {
   inherit ruby;
   gemdir = ./.;
 
+  passthru.updateScript = bundlerUpdateScript "ruby-zoom";
+
   meta = with lib; {
     description = "Quickly open CLI search results in your favorite editor!";
     homepage    = https://gitlab.com/mjwhitta/zoom;
     license     = with licenses; gpl3;
-    maintainers = with stdenv.lib.maintainers; [ vmandela ];
+    maintainers = with maintainers; [ vmandela nicknovitski ];
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/tools/typesetting/asciidoctor/default.nix b/pkgs/tools/typesetting/asciidoctor/default.nix
index 2f1c7e461545..20bbe782d91d 100644
--- a/pkgs/tools/typesetting/asciidoctor/default.nix
+++ b/pkgs/tools/typesetting/asciidoctor/default.nix
@@ -1,8 +1,7 @@
 { lib, bundlerApp, makeWrapper,
   # Optional dependencies, can be null
   epubcheck, kindlegen,
-  # For the update shell
-  mkShell, bundix
+  bundlerUpdateScript
 }:
 
 let
@@ -26,21 +25,16 @@ let
       '';
 
     passthru = {
-      inherit updateShell;
+      updateScript = bundlerUpdateScript "asciidoctor";
     };
 
     meta = with lib; {
       description = "A faster Asciidoc processor written in Ruby";
       homepage = https://asciidoctor.org/;
       license = licenses.mit;
-      maintainers = with maintainers; [ gpyh ];
+      maintainers = with maintainers; [ gpyh nicknovitski ];
       platforms = platforms.unix;
     };
   };
-
-  updateShell = mkShell {
-    inputsFrom = lib.attrValues app.gems;
-    buildInputs = [ bundix ];
-  };
 in
   app
diff --git a/pkgs/tools/typesetting/asciidoctor/update.sh b/pkgs/tools/typesetting/asciidoctor/update.sh
deleted file mode 100755
index 1f7e5541ceec..000000000000
--- a/pkgs/tools/typesetting/asciidoctor/update.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-nix-shell ../../../.. -A asciidoctor.updateShell --run '
-  rm gemset.nix Gemfile.lock
-  bundix -m --bundle-pack-path $TMPDIR/asciidoctor-ruby-bundle
-  rm -r .bundle
-'
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 1dff6fdf6d42..9584d65c8d2e 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -8671,6 +8671,7 @@ in
   bundler = callPackage ../development/ruby-modules/bundler { };
   bundlerEnv = callPackage ../development/ruby-modules/bundler-env { };
   bundlerApp = callPackage ../development/ruby-modules/bundler-app { };
+  bundlerUpdateScript = callPackage ../development/ruby-modules/bundler-update-script { };
 
   bundler-audit = callPackage ../tools/security/bundler-audit { };