summary refs log tree commit diff
path: root/pkgs
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 /pkgs
parentb24841dd2260516bfde0b9029619a0f9ef87e97c (diff)
downloadnixpkgs-7136e0d0a6f61734994c566e2cc72fd75733b873.tar
nixpkgs-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.gz
nixpkgs-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.bz2
nixpkgs-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.lz
nixpkgs-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.xz
nixpkgs-7136e0d0a6f61734994c566e2cc72fd75733b873.tar.zst
nixpkgs-7136e0d0a6f61734994c566e2cc72fd75733b873.zip
bundlerUpdateScript: init and use (#64822)
Diffstat (limited to 'pkgs')
-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 c3dffee3aa8..385f9825e46 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 8afd7f90436..00000000000
--- 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 9ae2ea41d83..20c802a1cbd 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 4a0a4e38a61..62f2d7a069d 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 6f9078bb50a..f5504721987 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 1b3bacf71df..838cc199a6c 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 1380005a1c1..6973938b60d 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 f7b7d6e8c3d..ccd092ba63c 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 13c559cfac1..df8298579e8 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 efeb23b3e83..6d094ecb5dc 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 341b50f0ef2..fda89e33180 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 9ca7a67a53e..2d6de24167b 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 4b3ff844977..f415fa8c012 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 5d1489ba200..b3f91b678c4 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 00000000000..50d0364aa06
--- /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 2f60dacd358..0cfd8c5d66b 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 a7bb93d52ed..15fc682a315 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 8de0130d31b..2ce65b28fae 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 93eb32cfb51..77b49107e16 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 049d9f38c0c..7942ff52645 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 37ad593d796..60e7edc7520 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 1d81d469eb2..921448855a6 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 c47bddd4d9c..516900c2067 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 932a02cf2bc..fe83a9aa170 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 22d7b236ffa..0d1c6985663 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 4a3ed739550..15db6013deb 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 02de300138d..39aab9cfa27 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 7fff98e0325..ad71dfb22a8 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 1f0d11c7dde..00000000000
--- 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 ef89517966d..dc8e618910c 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 d28c8337bc4..00000000000
--- 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 f0aca5c36a1..eda2fabd9c6 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 cf4a719292c..1c2cbe35439 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 b5c5740e80f..9020766fd86 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 32f94a1f228..d6b8eb5b95f 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 c8311786010..646d04c266f 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 5f20e89d408..499cec2e6a7 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 b91a36cb061..5d965fc87a7 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 c204ba8cd40..6d9a7f1c080 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 d1d0dbababa..8d17969b55e 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 67fbd09f102..d7ff9199460 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 99af752086f..84a6798afe3 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 a2fa509232d..f960fe19278 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 79b92bdd7c5..136fcb3e07c 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 6e0e97c7cc6..943fa0af63f 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 f1a6a08267d..82c52b18d40 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 8aba7524008..3dbc8eea87b 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 22d1e52e297..00000000000
--- 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 25b8bdb6585..e49d3957659 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 dc589316a58..0ed70ade829 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 2630ab0fc81..b410a21cd6b 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 e541fc0f0d4..e75b8347568 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 c9ee511ff83..18d03982f37 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 d35267fae27..00a9bf85650 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 5b9466426bd..25efcdf3461 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 7294c61da8f..d5f2fd4afd4 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 6a3e1f3deb1..a9977aefd66 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 53e8471fb53..aa34b98bbe2 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 121eff450b5..437bdb0373f 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 2215e4d4fee..82aba612699 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 58a7bd4a453..00000000000
--- 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 ae51bb69bda..b9b4a8eac9d 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 3a48814928e..e54a2b21d9f 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 1f70dc1c8c8..5703a13745b 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 905c686fede..ccb50717acc 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 22d1e52e297..00000000000
--- 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 8b19b6103d4..3712c129cf6 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 45c3bdf1f40..62670fa11a0 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 e0ff7d5ca8b..33d97aa7d6b 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 22dc59a9e8e..3ae80a312ed 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 43d35410760..56e4e4f94fa 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 72fb8aa8e2e..e8000f17cde 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 a02ca1cd3dd..05213ff1a87 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 55a7a18f57b..00000000000
--- 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 b97ffc7c58a..9e3e4d5b41d 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 b939e1500e4..c3953840836 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 2f1c7e46154..20bbe782d91 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 1f7e5541cee..00000000000
--- 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 1dff6fdf6d4..9584d65c8d2 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 { };