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)
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 c3dffee3aa8df..385f9825e46f7 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 8afd7f90436d0..0000000000000
--- 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 9ae2ea41d8318..20c802a1cbdf8 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 4a0a4e38a61be..62f2d7a069d90 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 6f9078bb50a7b..f5504721987a9 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 1b3bacf71df80..838cc199a6cad 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 1380005a1c150..6973938b60de2 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 f7b7d6e8c3d81..ccd092ba63cc4 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 13c559cfac102..df8298579e8f3 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 efeb23b3e83d8..6d094ecb5dccd 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 341b50f0ef226..fda89e331809e 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 9ca7a67a53e76..2d6de24167bda 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 4b3ff844977e9..f415fa8c01249 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 5d1489ba20054..b3f91b678c44a 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 0000000000000..50d0364aa0672
--- /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 2f60dacd358b8..0cfd8c5d66b00 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 a7bb93d52ed19..15fc682a315ca 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 8de0130d31bd3..2ce65b28fae58 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 93eb32cfb5142..77b49107e165b 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 049d9f38c0c14..7942ff526456b 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 37ad593d79642..60e7edc752007 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 1d81d469eb29a..921448855a642 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 c47bddd4d9c33..516900c206766 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 932a02cf2bcfe..fe83a9aa17043 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 22d7b236ffa4e..0d1c69856631f 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 4a3ed73955002..15db6013debca 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 02de300138d2e..39aab9cfa2781 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 7fff98e032547..ad71dfb22a8f4 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 1f0d11c7ddee6..0000000000000
--- 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 ef89517966d7a..dc8e618910c4b 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 d28c8337bc459..0000000000000
--- 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 f0aca5c36a154..eda2fabd9c675 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 cf4a719292c41..1c2cbe35439d4 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 b5c5740e80ff4..9020766fd8650 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 32f94a1f2285e..d6b8eb5b95ff3 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 c83117860100d..646d04c266f51 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 5f20e89d40832..499cec2e6a7f3 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 b91a36cb0613c..5d965fc87a7ee 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 c204ba8cd406d..6d9a7f1c0805d 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 d1d0dbababa2d..8d17969b55e52 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 67fbd09f10271..d7ff9199460f9 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 99af752086f62..84a6798afe33c 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 a2fa509232dee..f960fe1927804 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 79b92bdd7c579..136fcb3e07cff 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 6e0e97c7cc634..943fa0af63f35 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 f1a6a08267d69..82c52b18d4055 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 8aba7524008b3..3dbc8eea87b1a 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 22d1e52e2977a..0000000000000
--- 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 25b8bdb65856a..e49d395765911 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 dc589316a5853..0ed70ade82957 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 2630ab0fc81fc..b410a21cd6bae 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 e541fc0f0d4f5..e75b83475681f 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 c9ee511ff8309..18d03982f37c4 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 d35267fae27e9..00a9bf85650cb 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 5b9466426bd9e..25efcdf34611b 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 7294c61da8fad..d5f2fd4afd4fe 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 6a3e1f3deb10b..a9977aefd66cc 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 53e8471fb532f..aa34b98bbe292 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 121eff450b595..437bdb0373f8e 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 2215e4d4fee7c..82aba61269924 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 58a7bd4a45395..0000000000000
--- 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 ae51bb69bda11..b9b4a8eac9d2d 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 3a48814928e5f..e54a2b21d9fd9 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 1f70dc1c8c8c0..5703a13745bdb 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 905c686fede7f..ccb50717accf7 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 22d1e52e2977a..0000000000000
--- 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 8b19b6103d4a5..3712c129cf656 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 45c3bdf1f40c4..62670fa11a08b 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 e0ff7d5ca8b41..33d97aa7d6b6d 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 22dc59a9e8e64..3ae80a312ed62 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 43d354107609b..56e4e4f94faeb 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 72fb8aa8e2eef..e8000f17cdeb3 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 a02ca1cd3dde8..05213ff1a870b 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 55a7a18f57b1f..0000000000000
--- 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 b97ffc7c58a81..9e3e4d5b41d5f 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 b939e1500e490..c395384083621 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 2f1c7e461545a..20bbe782d91d0 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 1f7e5541ceec0..0000000000000
--- 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 1dff6fdf6d42e..9584d65c8d2e6 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 { };