summary refs log tree commit diff
path: root/pkgs/applications
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2020-01-10 18:32:07 +0100
committerFrederik Rietdijk <fridh@fridh.nl>2020-01-10 18:32:07 +0100
commit348eaa280bdc649211dc34a2a79ab3c21db05532 (patch)
treec70787b060c878d1cfc487cdb7812db7abb7260e /pkgs/applications
parent5ad16cb27fd81cb67db4da80283e147bea4e1c25 (diff)
parente2e90a0e6422b143d6d6a9539280eded7306126d (diff)
downloadnixpkgs-348eaa280bdc649211dc34a2a79ab3c21db05532.tar
nixpkgs-348eaa280bdc649211dc34a2a79ab3c21db05532.tar.gz
nixpkgs-348eaa280bdc649211dc34a2a79ab3c21db05532.tar.bz2
nixpkgs-348eaa280bdc649211dc34a2a79ab3c21db05532.tar.lz
nixpkgs-348eaa280bdc649211dc34a2a79ab3c21db05532.tar.xz
nixpkgs-348eaa280bdc649211dc34a2a79ab3c21db05532.tar.zst
nixpkgs-348eaa280bdc649211dc34a2a79ab3c21db05532.zip
Merge master into staging-next
Diffstat (limited to 'pkgs/applications')
-rw-r--r--pkgs/applications/audio/flacon/default.nix9
-rw-r--r--pkgs/applications/editors/android-studio/default.nix6
-rw-r--r--pkgs/applications/misc/xterm/default.nix4
-rw-r--r--pkgs/applications/networking/browsers/firefox/packages.nix1
-rw-r--r--pkgs/applications/networking/browsers/qutebrowser/default.nix4
-rw-r--r--pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch19
-rw-r--r--pkgs/applications/networking/gns3/default.nix6
-rw-r--r--pkgs/applications/networking/gns3/gui.nix7
-rw-r--r--pkgs/applications/networking/gns3/server.nix9
-rw-r--r--pkgs/applications/networking/mailreaders/trojita/default.nix2
-rw-r--r--pkgs/applications/science/electronics/kicad/default.nix50
-rwxr-xr-xpkgs/applications/science/electronics/kicad/update.sh191
-rw-r--r--pkgs/applications/science/electronics/kicad/versions.nix52
13 files changed, 290 insertions, 70 deletions
diff --git a/pkgs/applications/audio/flacon/default.nix b/pkgs/applications/audio/flacon/default.nix
index c1ccd6add78..eb39309a254 100644
--- a/pkgs/applications/audio/flacon/default.nix
+++ b/pkgs/applications/audio/flacon/default.nix
@@ -1,6 +1,7 @@
-{ stdenv, lib, fetchFromGitHub, cmake, qt5, libuchardet, pkgconfig, makeWrapper
+{ stdenv, lib, fetchFromGitHub, cmake, libuchardet, pkgconfig
 , shntool, flac, opusTools, vorbis-tools, mp3gain, lame, wavpack, vorbisgain
 , gtk3
+, qtbase, qttools, wrapQtAppsHook
 }:
 
 stdenv.mkDerivation rec {
@@ -14,8 +15,8 @@ stdenv.mkDerivation rec {
     sha256 = "05pvg5xhc2azwzld08m81r4b2krqdbcbm5lmdvg2zkk67xq9pqyd";
   };
 
-  nativeBuildInputs = [ cmake pkgconfig makeWrapper ];
-  buildInputs = [ qt5.qtbase qt5.qttools libuchardet ];
+  nativeBuildInputs = [ cmake pkgconfig wrapQtAppsHook ];
+  buildInputs = [ qtbase qttools libuchardet ];
 
   postInstall = ''
     wrapProgram $out/bin/flacon \
@@ -29,6 +30,6 @@ stdenv.mkDerivation rec {
     homepage = https://flacon.github.io/;
     license = licenses.lgpl21;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ nico202 ];
+    maintainers = with maintainers; [ snglth ];
   };
 }
diff --git a/pkgs/applications/editors/android-studio/default.nix b/pkgs/applications/editors/android-studio/default.nix
index cee61641041..219c13f241c 100644
--- a/pkgs/applications/editors/android-studio/default.nix
+++ b/pkgs/applications/editors/android-studio/default.nix
@@ -18,9 +18,9 @@ let
     sha256Hash = "0xpcihr5xxr9l1kv6aflywshs8fww3s7di0g98mz475whhxwzf3q";
   };
   latestVersion = { # canary & dev
-    version = "4.0.0.7"; # "Android Studio 4.0 Canary 7"
-    build = "193.6085562";
-    sha256Hash = "0vk1vwh2yhsmadkb3v3m042ckzizc41ckqvj3jax8p86gl0b4whj";
+    version = "4.0.0.8"; # "Android Studio 4.0 Canary 8"
+    build = "193.6107147";
+    sha256Hash = "0bdibjp52jjlyh0966p9657xxmz1z7vi262v6ss4ywpb7gpaj9qq";
   };
 in {
   # Attributes are named by their corresponding release channels
diff --git a/pkgs/applications/misc/xterm/default.nix b/pkgs/applications/misc/xterm/default.nix
index 83ba28bfce3..8dcd533b522 100644
--- a/pkgs/applications/misc/xterm/default.nix
+++ b/pkgs/applications/misc/xterm/default.nix
@@ -3,14 +3,14 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "xterm-349";
+  name = "xterm-351";
 
   src = fetchurl {
     urls = [
      "ftp://ftp.invisible-island.net/xterm/${name}.tgz"
      "https://invisible-mirror.net/archives/xterm/${name}.tgz"
    ];
-    sha256 = "0ps7b2b2kbrkv5q49cmb8c51z0w21jmm7hwciw30m6jgfb9s79ir";
+    sha256 = "05kf586my4irrzz2bxgmwjdvynyrg9ybhvfqmx29g70w4888l2kn";
   };
 
   buildInputs =
diff --git a/pkgs/applications/networking/browsers/firefox/packages.nix b/pkgs/applications/networking/browsers/firefox/packages.nix
index 0032e607ec8..7903a345e1f 100644
--- a/pkgs/applications/networking/browsers/firefox/packages.nix
+++ b/pkgs/applications/networking/browsers/firefox/packages.nix
@@ -89,6 +89,7 @@ rec {
 
     meta = firefox.meta // {
       description = "A web browser built from Firefox Extended Support Release source tree";
+      knownVulnerabilities = [ "Support ended around October 2019." ];
     };
     updateScript = callPackage ./update.nix {
       attrPath = "firefox-esr-60-unwrapped";
diff --git a/pkgs/applications/networking/browsers/qutebrowser/default.nix b/pkgs/applications/networking/browsers/qutebrowser/default.nix
index b616e82a209..80945fbc2bd 100644
--- a/pkgs/applications/networking/browsers/qutebrowser/default.nix
+++ b/pkgs/applications/networking/browsers/qutebrowser/default.nix
@@ -21,12 +21,12 @@ let
 
 in mkDerivationWith python3Packages.buildPythonApplication rec {
   pname = "qutebrowser";
-  version = "1.8.3";
+  version = "1.9.0";
 
   # the release tarballs are different from the git checkout!
   src = fetchurl {
     url = "https://github.com/qutebrowser/qutebrowser/releases/download/v${version}/${pname}-${version}.tar.gz";
-    sha256 = "055zmzk3q0m3hx1742nfy2mdawfllrkvijnbzp1hiv01dj1bxaf8";
+    sha256 = "1y0yq1qfr6g1s7kf3w2crd0b025dv2dfknhlz3v0001ns3rgwj17";
   };
 
   # Needs tox
diff --git a/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch b/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch
index 56f6bcebf28..985f916b32c 100644
--- a/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch
+++ b/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch
@@ -1,29 +1,20 @@
 diff --git a/qutebrowser/app.py b/qutebrowser/app.py
-index 2b6896b76..ee05f379d 100644
+index a47b5d2f4..f23ee23ef 100644
 --- a/qutebrowser/app.py
 +++ b/qutebrowser/app.py
-@@ -555,22 +555,8 @@ class Quitter:
-                 args: The commandline as a list of strings.
-                 cwd: The current working directory as a string.
+@@ -573,13 +573,8 @@ class Quitter(QObject):
+         Return:
+             The commandline as a list of strings.
          """
 -        if os.path.basename(sys.argv[0]) == 'qutebrowser':
 -            # Launched via launcher script
 -            args = [sys.argv[0]]
--            cwd = None
 -        elif hasattr(sys, 'frozen'):
 -            args = [sys.executable]
--            cwd = os.path.abspath(os.path.dirname(sys.executable))
 -        else:
 -            args = [sys.executable, '-m', 'qutebrowser']
--            cwd = os.path.join(
--                os.path.abspath(os.path.dirname(qutebrowser.__file__)), '..')
--            if not os.path.isdir(cwd):
--                # Probably running from a python egg. Let's fallback to
--                # cwd=None and see if that works out.
--                # See https://github.com/qutebrowser/qutebrowser/issues/323
--                cwd = None
 +        args = ['@qutebrowser@']
 +        cwd = None
  
          # Add all open pages so they get reopened.
-         page_args = []
+         page_args = []  # type: typing.MutableSequence[str]
diff --git a/pkgs/applications/networking/gns3/default.nix b/pkgs/applications/networking/gns3/default.nix
index 1e6a0fd5b7f..71044bd0f18 100644
--- a/pkgs/applications/networking/gns3/default.nix
+++ b/pkgs/applications/networking/gns3/default.nix
@@ -1,7 +1,7 @@
 { callPackage }:
 
 let
-  stableVersion = "2.2.3";
+  stableVersion = "2.2.5";
   previewVersion = stableVersion;
   addVersion = args:
     let version = if args.stable then stableVersion else previewVersion;
@@ -9,8 +9,8 @@ let
     in args // { inherit version branch; };
   mkGui = args: callPackage (import ./gui.nix (addVersion args)) { };
   mkServer = args: callPackage (import ./server.nix (addVersion args)) { };
-  guiSrcHash = "1l40q3d3hsmhgwb4d8hj73vhgckm0dvsc6l6qzacypd202iq1v8a";
-  serverSrcHash = "1qcypb1rmfdl8fl3ykqf5phcapmjid6jrxd6xpncd5dhyl2hr94n";
+  guiSrcHash = "1yxwbz93x9hn5y6dir8v7bdfsmfgppvjg4z88l8gx82hhf2476fx";
+  serverSrcHash = "1d3m8qrz82g8ii6q6j015wqwp6j0415fbqbjvw43zhdx5mnn962d";
 in {
   guiStable = mkGui {
     stable = true;
diff --git a/pkgs/applications/networking/gns3/gui.nix b/pkgs/applications/networking/gns3/gui.nix
index 7c155181c50..d978b060aab 100644
--- a/pkgs/applications/networking/gns3/gui.nix
+++ b/pkgs/applications/networking/gns3/gui.nix
@@ -5,6 +5,13 @@
 let
   python = python3.override {
     packageOverrides = self: super: {
+      psutil = super.psutil.overridePythonAttrs (oldAttrs: rec {
+        version = "5.6.3";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "1wv31zly44qj0rp2acg58xbnc7bf6ffyadasq093l455q30qafl6";
+        };
+      });
       jsonschema = super.jsonschema.overridePythonAttrs (oldAttrs: rec {
         version = "2.6.0";
         src = oldAttrs.src.override {
diff --git a/pkgs/applications/networking/gns3/server.nix b/pkgs/applications/networking/gns3/server.nix
index db2e085c180..d6c6b65846c 100644
--- a/pkgs/applications/networking/gns3/server.nix
+++ b/pkgs/applications/networking/gns3/server.nix
@@ -5,6 +5,13 @@
 let
   python = python3.override {
     packageOverrides = self: super: {
+      psutil = super.psutil.overridePythonAttrs (oldAttrs: rec {
+        version = "5.6.3";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "1wv31zly44qj0rp2acg58xbnc7bf6ffyadasq093l455q30qafl6";
+        };
+      });
       jsonschema = super.jsonschema.overridePythonAttrs (oldAttrs: rec {
         version = "2.6.0";
         src = oldAttrs.src.override {
@@ -28,6 +35,8 @@ in python.pkgs.buildPythonPackage {
   postPatch = ''
     # Only 2.x is problematic:
     sed -iE "s/prompt-toolkit==1.0.15/prompt-toolkit<2.0.0/" requirements.txt
+    # yarl 1.4+ only requires Python 3.6+
+    sed -iE "s/yarl==1.3.0//" requirements.txt
   '';
 
   propagatedBuildInputs = with python.pkgs; [
diff --git a/pkgs/applications/networking/mailreaders/trojita/default.nix b/pkgs/applications/networking/mailreaders/trojita/default.nix
index 9829ca883f3..f383018e253 100644
--- a/pkgs/applications/networking/mailreaders/trojita/default.nix
+++ b/pkgs/applications/networking/mailreaders/trojita/default.nix
@@ -6,6 +6,7 @@
 , kcontacts
 , kf5gpgmepp
 , lib
+, libsecret
 , mimetic
 , mkDerivation
 , pkgconfig
@@ -30,6 +31,7 @@ mkDerivation rec {
     akonadi-contacts
     gpgme
     kcontacts
+    libsecret
     mimetic
     qgpgme
     qtbase
diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix
index 47222fe4a96..0b627dbb23a 100644
--- a/pkgs/applications/science/electronics/kicad/default.nix
+++ b/pkgs/applications/science/electronics/kicad/default.nix
@@ -21,48 +21,7 @@ let
   stable = pname != "kicad-unstable";
   baseName = if (stable) then "kicad" else "kicad-unstable";
 
-  versions = {
-    "kicad" = {
-      kicadVersion = {
-        version = "5.1.5";
-        src.sha256 = "15h3rwisjss3fdc9bam9n2wq94slhacc3fbg14bnzf4n5agsnv5b";
-      };
-      libVersion = {
-        version = "5.1.5";
-        libSources = {
-          i18n.sha256 = "1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3";
-          symbols.sha256 = "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h";
-          templates.sha256 = "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g";
-          footprints.sha256 = "1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j";
-          packages3d.sha256 = "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz";
-        };
-      };
-    };
-    "kicad-unstable" = {
-      kicadVersion = {
-        version = "2019-12-31";
-        src = {
-          rev = "eaaa4eb63acb289047dfbb6cc275579dea58f12b";
-          sha256 = "1v2hf2slphjdh14y56pmzlpi6mqidrd8198if1fi0cch72v37zch";
-        };
-      };
-      libVersion = {
-        version = "unstable";
-        libSources = {
-          i18n.rev = "e7439fd76f27cfc26e269c4e6c4d56245345c28b";
-          i18n.sha256 = "1nqm1kx5b4f7s0f9q8bg4rdhqnp0128yp6bgnrkia1kwmfnf5gmy";
-          symbols.rev = "1bc5ff11c76bcbfda227e534b0acf737edddde8f";
-          symbols.sha256 = "05kv93790wi4dpbn2488p587b83yz1zw9h62lkv41h7vn2r1mmb7";
-          templates.rev = "0c0490897f803ab8b7c3dad438b7eb1f80e0417c";
-          templates.sha256 = "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g";
-          footprints.rev = "454126c125edd3fa8633f301421a7d9c4de61b77";
-          footprints.sha256 = "00nli4kx2i68bk852rivbirzcgpsdlpdk34g1q892952jsbh7fy6";
-          packages3d.rev = "c2b92a411adc93ddeeed74b36b542e1057f81a2a";
-          packages3d.sha256 = "05znc6y2lc31iafspg308cxdda94zg6c7mwslmys76npih1pb8qc";
-        };
-      };
-    };
-  };
+  versions =  import ./versions.nix;
   versionConfig = versions.${baseName};
 
   wxGTK = if (stable)
@@ -157,6 +116,13 @@ stdenv.mkDerivation rec {
     ''
   ;
 
+  # can't run this for each pname
+  # stable and unstable are in the same versions.nix
+  # and kicad-small reuses stable
+  # with "all" it updates both, run it manually if you don't want that
+  # and can't git commit if this could be running in parallel with other scripts
+  passthru.updateScript = [ ./update.sh "all" ];
+
   meta = {
     description = if (stable)
       then "Open Source Electronics Design Automation Suite"
diff --git a/pkgs/applications/science/electronics/kicad/update.sh b/pkgs/applications/science/electronics/kicad/update.sh
new file mode 100755
index 00000000000..b4f744c47ef
--- /dev/null
+++ b/pkgs/applications/science/electronics/kicad/update.sh
@@ -0,0 +1,191 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p coreutils git nix curl
+
+# this script will generate versions.nix in the right location
+# this should contain the versions' revs and hashes
+# the stable revs are stored only for ease of skipping
+
+# if you get something like "tar: no space left on device"
+# you may need a bigger tmpfs, this can be set as such
+# services.logind.extraConfig = "RuntimeDirectorySize=8G";
+# this is most likely only needed for the packages3d
+# this can be checked without that config by manual TOFU
+# copy the generated items from ,versions.nix to versions.nix
+# then nix-build and see what it actually gets
+
+# if something goes unrepairably wrong, run 'update.sh all clean'
+
+# TODO
+# support parallel instances for each pname
+#   currently risks reusing old data
+# no getting around manually checking if the build product works...
+# if there is, default to commiting
+# remove items left in /nix/store?
+
+# get the latest tag that isn't an RC or *.99
+latest_tag="$(git ls-remote --tags --sort -version:refname \
+  https://gitlab.com/kicad/code/kicad.git \
+  | grep -o 'refs/tags/[0-9]*\.[0-9]*\.[0-9]*$' \
+  | grep -v ".99" | head -n 1 | cut -d '/' -f 3)"
+
+all_versions=( "${latest_tag}" master )
+
+prefetch="nix-prefetch-url --unpack --quiet"
+
+clean=""
+check_stable=""
+check_unstable=1
+commit=""
+
+for arg in "$@"; do
+  case "${arg}" in
+    help|-h|--help) echo "Read me!" >&2; exit 1; ;;
+    kicad|release|tag|stable|*small|5*|6*) check_stable=1; check_unstable="" ;;
+    all|both|full) check_stable=1; check_unstable=1 ;;
+    commit) commit=1 ;;
+    clean|fix|*fuck) check_stable=1; check_unstable=1; clean=1 ;;
+    master|*unstable|latest|now|today) check_unstable=1 ;;
+    *) ;;
+  esac
+done
+
+here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+now=$(date --iso-8601)
+
+file="${here}/versions.nix"
+# just in case this runs in parallel
+rand="$(head -c 3 /dev/urandom | base64)"
+tmp="${here}/,versions.nix.${rand}"
+
+# libraries currently on github, move to $gitlab/libraries planned
+libs=( symbols templates footprints packages3d )
+
+get_rev="git ls-remote --heads --tags"
+
+gitlab="https://gitlab.com/kicad"
+# append commit hash or tag
+gitlab_pre="https://gitlab.com/api/v4/projects/kicad%2Fcode%2Fkicad/repository/archive.tar.gz?sha="
+
+# append "-$lib/archive/[hash or tag].tar.gz
+github="https://github.com/kicad/kicad"
+
+# not a lib, but separate and already moved to gitlab
+i18n="${gitlab}/code/kicad-i18n.git"
+i18n_pre="https://gitlab.com/api/v4/projects/kicad%2Fcode%2Fkicad-i18n/repository/archive.tar.gz?sha="
+
+count=0
+
+printf "Latest tag is\t%s\n" "${latest_tag}" >&2
+
+if [[ ! -f ${file} ]]; then
+  echo "No existing file, generating from scratch" >&2
+  check_stable=1; check_unstable=1; clean=1
+fi
+
+printf "Writing %s\n" "${tmp}" >&2
+
+# not a dangling brace, grouping the output to redirect to file
+{
+
+printf "# This file was generated by update.sh\n\n"
+printf "{\n"
+
+for version in "${all_versions[@]}"; do
+
+  if [[ ${version} == "master" ]]; then
+    pname="kicad-unstable"
+    today="${now}"
+  else
+    pname="kicad"
+    today="${version}"
+  fi
+  # skip a version if we don't want to check it
+  if [[ (${version} != "master" && -n ${check_stable}) \
+     || (${version} == "master" && -n ${check_unstable}) ]]; then
+
+    printf "\nChecking %s\n" "${pname}" >&2
+
+    printf "%2s\"%s\" = {\n" "" "${pname}"
+      printf "%4skicadVersion = {\n" ""
+        printf "%6sversion =\t\t\t\"%s\";\n" "" "${today}"
+        printf "%6ssrc = {\n" ""
+
+    echo "Checking src" >&2
+    src_rev="$(${get_rev} "${gitlab}"/code/kicad.git "${version}" | cut -f1)"
+    ret="$(grep -sm 1 "\"${pname}\"" -A 4 "${file}" | grep -sm 1 "${src_rev}")"
+    has_hash="$(grep -sm 1 "\"${pname}\"" -A 5 "${file}" | grep -sm 1 "sha256")"
+    if [[ -n ${ret} && -n ${has_hash} && -z ${clean} ]]; then
+      echo "Reusing old ${pname}.src.sha256, already latest .rev" >&2
+      grep -sm 1 "\"${pname}\"" -A 5 "${file}" | grep -sm 1 "rev" -A 1
+    else
+          printf "%8srev =\t\t\t\"%s\";\n" "" "${src_rev}"
+          printf "%8ssha256 =\t\t\"%s\";\n" \
+            "" "$(${prefetch} "${gitlab_pre}${src_rev}")"
+          (( count++ ))
+    fi
+        printf "%6s};\n" ""
+      printf "%4s};\n" ""
+
+      printf "%4slibVersion = {\n" ""
+        printf "%6sversion =\t\t\t\"%s\";\n" "" "${today}"
+        printf "%6slibSources = {\n" ""
+
+        echo "Checking i18n" >&2
+        i18n_rev="$(${get_rev} "${i18n}" "${version}" | cut -f1)"
+        ret="$(grep -sm 1 "\"${pname}\"" -A 11 "${file}" | grep -sm 1 "${i18n_rev}")"
+        has_hash="$(grep -sm 1 "\"${pname}\"" -A 12 "${file}" | grep -sm 1 "i18n.sha256")"
+        if [[ -n ${ret} && -n ${has_hash} && -z ${clean} ]]; then
+          echo "Reusing old kicad-i18n-${today}.src.sha256, already latest .rev" >&2
+          grep -sm 1 "\"${pname}\"" -A 12 "${file}" | grep -sm 1 "i18n" -A 1
+        else
+          printf "%8si18n.rev =\t\t\"%s\";\n" "" "${i18n_rev}"
+          printf "%8si18n.sha256 =\t\t\"%s\";\n" "" \
+            "$(${prefetch} "${i18n_pre}${i18n_rev}")"
+          (( count++ ))
+        fi
+
+          for lib in "${libs[@]}"; do
+            echo "Checking ${lib}" >&2
+            url="${github}-${lib}.git"
+            lib_rev="$(${get_rev} "${url}" "${version}" | cut -f1)"
+            ret="$(grep -sm 1 "\"${pname}\"" -A 19 "${file}" | grep -sm 1 "${lib_rev}" -A 1)"
+            has_hash="$(grep -sm 1 "\"${pname}\"" -A 20 "${file}" | grep -sm 1 "${lib}.sha256")"
+            if [[ -n ${ret} && -n ${has_hash} && -z ${clean} ]]; then
+              echo "Reusing old kicad-${lib}-${today}.src.sha256, already latest .rev" >&2
+              grep -sm 1 "\"${pname}\"" -A 20 "${file}" | grep -sm 1 "${lib}" -A 1
+            else
+              printf "%8s%s.rev =\t" "" "${lib}"
+              case "${lib}" in
+                symbols|templates) printf "\t" ;; *) ;;
+              esac
+              printf "\"%s\";\n" "${lib_rev}"
+              printf "%8s%s.sha256 =\t\"%s\";\n" "" \
+              "${lib}" "$(${prefetch} "${github}-${lib}/archive/${lib_rev}.tar.gz")"
+              (( count++ ))
+            fi
+          done
+        printf "%6s};\n" ""
+      printf "%4s};\n" ""
+    printf "%2s};\n" ""
+  else
+    printf "\nReusing old %s\n" "${pname}" >&2
+    grep -sm 1 "\"${pname}\"" -A 23 "${file}"
+  fi
+done 
+printf "}\n"
+} > "${tmp}"
+
+mv "${tmp}" "${file}"
+
+printf "\nFinished\nMoved output to %s\n\n" "${file}" >&2
+
+if [[ ${count} -gt 0 ]]; then
+  if [[ ${count} -gt 1 ]]; then s="s"; else s=""; fi
+  echo "${count} revision${s} changed" >&2
+  if [[ -n ${commit} ]]; then
+    git commit -am "$(printf "kicad: automatic update of %s item%s\n" "${count}" "${s}")"
+  fi
+  echo "Please confirm the new versions.nix works before making a PR." >&2
+else
+  echo "No changes, those checked are up to date" >&2
+fi
diff --git a/pkgs/applications/science/electronics/kicad/versions.nix b/pkgs/applications/science/electronics/kicad/versions.nix
new file mode 100644
index 00000000000..ac273a1265c
--- /dev/null
+++ b/pkgs/applications/science/electronics/kicad/versions.nix
@@ -0,0 +1,52 @@
+# This file was generated by update.sh
+
+{
+  "kicad" = {
+    kicadVersion = {
+      version =			"5.1.5";
+      src = {
+        rev =			"52549c5d09cbfb0e807fcbcb07819bc9f7861544";
+        sha256 =		"15h3rwisjss3fdc9bam9n2wq94slhacc3fbg14bnzf4n5agsnv5b";
+      };
+    };
+    libVersion = {
+      version =			"5.1.5";
+      libSources = {
+        i18n.rev =		"5122cbec6563fb7c8d6f960a639ac470353af91b";
+        i18n.sha256 =		"1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3";
+        symbols.rev =		"dd122ec170b49e032179511c9d263126f52f4020";
+        symbols.sha256 =	"048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h";
+        templates.rev =		"94761f10d06582b33cd55ea2149d72f269f65580";
+        templates.sha256 =	"0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g";
+        footprints.rev =	"e076f8f271f8db96d5fec45616b7554caebb7ef7";
+        footprints.sha256 =	"1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j";
+        packages3d.rev =	"8d233cdcb109aa1c3b8ba4c934ee31f6a3b6e1f4";
+        packages3d.sha256 =	"0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz";
+      };
+    };
+  };
+  "kicad-unstable" = {
+    kicadVersion = {
+      version =			"2020-01-08";
+      src = {
+        rev =			"ca34ade00c554157f106fde97af5f08a202808ef";
+        sha256 =		"0xx5qkc5pi3qdrdikgq3902ws8zilv2476fb4bbgh95d9wpgr35v";
+      };
+    };
+    libVersion = {
+      version =			"2020-01-08";
+      libSources = {
+        i18n.rev =		"e7439fd76f27cfc26e269c4e6c4d56245345c28b";
+        i18n.sha256 =		"1nqm1kx5b4f7s0f9q8bg4rdhqnp0128yp6bgnrkia1kwmfnf5gmy";
+        symbols.rev =		"ad58768b88d564fd188c6667841adec436da53f2";
+        symbols.sha256 =	"1rdplf04bff0hmgjwr81fbcr9nkqi21n0n88nzs5fdp73mqiywcy";
+        templates.rev =		"0c0490897f803ab8b7c3dad438b7eb1f80e0417c";
+        templates.sha256 =	"0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g";
+        footprints.rev =	"973867de7f33f202e9fd1b3455bd1f7e7fe4a074";
+        footprints.sha256 =	"0yvidpnqbfxjdwaiscl5bdchsg0l4d769vp456dc8h0f3802mibi";
+        packages3d.rev =	"c2b92a411adc93ddeeed74b36b542e1057f81a2a";
+        packages3d.sha256 =	"05znc6y2lc31iafspg308cxdda94zg6c7mwslmys76npih1pb8qc";
+      };
+    };
+  };
+}