diff --git a/Golden_Repo/a/ANTLR/ANTLR-2.7.7-GCCcore-9.3.0-Python-3.8.5.eb b/Golden_Repo/a/ANTLR/ANTLR-2.7.7-GCCcore-9.3.0-Python-3.8.5.eb
index 213c01ad8ff911f480f2ecc0e510968d77524b93..ee3ab68467797446a6bae0c3278ff2f2c11bbc0a 100644
--- a/Golden_Repo/a/ANTLR/ANTLR-2.7.7-GCCcore-9.3.0-Python-3.8.5.eb
+++ b/Golden_Repo/a/ANTLR/ANTLR-2.7.7-GCCcore-9.3.0-Python-3.8.5.eb
@@ -25,7 +25,7 @@ builddependencies = [
 ]
 
 dependencies = [
-    ('Java', '1.8', '', True),
+    ('Java', '1.8', '', SYSTEM),
     ('Python', '3.8.5'),
 ]
 
diff --git a/Golden_Repo/g/GPAW/GPAW-20.1.0-gpsmkl-2020-Python-3.8.5.eb b/Golden_Repo/g/GPAW/GPAW-20.1.0-gpsmkl-2020-Python-3.8.5.eb
index 30786b3f7a2f1341cfef22b6241b3a0b55fb2c6c..0801b3b3e9789ea0f80f72f017509934c18b24fb 100644
--- a/Golden_Repo/g/GPAW/GPAW-20.1.0-gpsmkl-2020-Python-3.8.5.eb
+++ b/Golden_Repo/g/GPAW/GPAW-20.1.0-gpsmkl-2020-Python-3.8.5.eb
@@ -35,7 +35,7 @@ dependencies = [
     ('HDF5', '1.10.6'),
     ('SciPy-Stack', '2020', versionsuffix, ('gcccoremkl', '9.3.0-2020.2.254')),
     ('libvdwxc', '0.4.0'),
-    ('GPAW-setups', '0.9.20000', '', True),
+    ('GPAW-setups', '0.9.20000', '', SYSTEM),
 ]
 
 preconfigopts = 'export MKL_ROOT=$MKLROOT && '
diff --git a/Golden_Repo/g/GROMACS/GROMACS-2020.4-gpsmkl-2020.eb b/Golden_Repo/g/GROMACS/GROMACS-2020.4-gpsmkl-2020.eb
index 78e0e5ebffd41e5d70075fe1d944895f0dade8eb..3e66180645f0ffc436de682571f484d7f0f54e7b 100644
--- a/Golden_Repo/g/GROMACS/GROMACS-2020.4-gpsmkl-2020.eb
+++ b/Golden_Repo/g/GROMACS/GROMACS-2020.4-gpsmkl-2020.eb
@@ -48,7 +48,7 @@ builddependencies = [
 
 # Removed ('hwloc', '2.0.3') from dependencies due to runtime failures.
 dependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
 ]
 
 configopts = '-DCMAKE_PREFIX_PATH=$EBROOTHWLOC -DMPIEXEC_MAX_NUMPROCS="24" '
diff --git a/Golden_Repo/g/GROMACS/GROMACS-2020.4-intel-para-2020.eb b/Golden_Repo/g/GROMACS/GROMACS-2020.4-intel-para-2020.eb
index 60a7ecd70b79c667cc4ed992596c8104c8486a74..f8f204c652c3acc104ad549907e3fc8ce50f8abd 100644
--- a/Golden_Repo/g/GROMACS/GROMACS-2020.4-intel-para-2020.eb
+++ b/Golden_Repo/g/GROMACS/GROMACS-2020.4-intel-para-2020.eb
@@ -47,7 +47,7 @@ builddependencies = [
 
 # Removed ('hwloc', '2.0.3') from dependencies due to runtime failures.
 dependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
 ]
 
 configopts = '-DCMAKE_PREFIX_PATH=$EBROOTHWLOC -DMPIEXEC_MAX_NUMPROCS="24"'
diff --git a/Golden_Repo/g/Graphviz/Graphviz-2.44.1-GCCcore-9.3.0.eb b/Golden_Repo/g/Graphviz/Graphviz-2.44.1-GCCcore-9.3.0.eb
index 10741d030f3611b43505166f1910ed4083a6f54b..973ed942e553d3b8bcc8366b05b7a1e938921277 100644
--- a/Golden_Repo/g/Graphviz/Graphviz-2.44.1-GCCcore-9.3.0.eb
+++ b/Golden_Repo/g/Graphviz/Graphviz-2.44.1-GCCcore-9.3.0.eb
@@ -37,7 +37,7 @@ dependencies = [
     ('Ghostscript', '9.52'),
     ('GLib', '2.64.4'),
     ('GTS', '0.7.6'),
-    ('Java', '1.8', '', True),
+    ('Java', '1.8', '', SYSTEM),
     ('libpng', '1.6.37'),
     ('librsvg', '2.48.8'),
     ('Pango', '1.44.7'),
diff --git a/Golden_Repo/g/gcccoremkl/gcccoremkl-9.3.0-2020.2.254.eb b/Golden_Repo/g/gcccoremkl/gcccoremkl-9.3.0-2020.2.254.eb
index 4901086ff29cb198c3dedc7b9c47fc410b8bb1bd..8a73818e9690d6b87797922e0cd3fba7d7d3708c 100644
--- a/Golden_Repo/g/gcccoremkl/gcccoremkl-9.3.0-2020.2.254.eb
+++ b/Golden_Repo/g/gcccoremkl/gcccoremkl-9.3.0-2020.2.254.eb
@@ -19,9 +19,9 @@ local_comp = (local_comp_name, local_comp_version)
 dependencies = [
     local_comp,
     ('binutils', '2.34', '', local_comp),
-    ('imkl', local_mklver, '', True),
+    ('imkl', local_mklver, '', SYSTEM),
 ]
 
-hiddendependencies = [('imkl', local_mklver, '', True)]
+hiddendependencies = [('imkl', local_mklver, '', SYSTEM)]
 
 moduleclass = 'toolchain'
diff --git a/Golden_Repo/hidden_deps.txt b/Golden_Repo/hidden_deps.txt
index 3a45b6bcafcf5486d586b98afa8db444c934be51..74c6b3e597f0de59005ed1b80327342ce36c69c5 100644
--- a/Golden_Repo/hidden_deps.txt
+++ b/Golden_Repo/hidden_deps.txt
@@ -85,6 +85,15 @@ JSON-C
 JSON-GLib
 JsonCpp
 JUnit
+JupyterKernel-Bash
+JupyterKernel-Cling
+JupyterKernel-JavaScript
+JupyterKernel-Julia
+JupyterKernel-Octave
+JupyterKernel-PyParaView
+JupyterKernel-R
+JupyterKernel-Ruby
+JupyterProxy-XpraHTML5
 kbproto
 LAME
 LevelDB
diff --git a/Golden_Repo/i/ITK/ITK-5.1.2-GCCcore-9.3.0-nompi-Python-3.6.8.eb b/Golden_Repo/i/ITK/ITK-5.1.2-GCCcore-9.3.0-nompi-Python-3.8.5.eb
similarity index 100%
rename from Golden_Repo/i/ITK/ITK-5.1.2-GCCcore-9.3.0-nompi-Python-3.6.8.eb
rename to Golden_Repo/i/ITK/ITK-5.1.2-GCCcore-9.3.0-nompi-Python-3.8.5.eb
diff --git a/Golden_Repo/i/ITK/ITK-5.1.2-gompi-2020-Python-3.6.8.eb b/Golden_Repo/i/ITK/ITK-5.1.2-gompi-2020-Python-3.8.5.eb
similarity index 100%
rename from Golden_Repo/i/ITK/ITK-5.1.2-gompi-2020-Python-3.6.8.eb
rename to Golden_Repo/i/ITK/ITK-5.1.2-gompi-2020-Python-3.8.5.eb
diff --git a/Golden_Repo/i/ITK/ITK-5.1.2-gpsmpi-2020-Python-3.6.8.eb b/Golden_Repo/i/ITK/ITK-5.1.2-gpsmpi-2020-Python-3.8.5.eb
similarity index 100%
rename from Golden_Repo/i/ITK/ITK-5.1.2-gpsmpi-2020-Python-3.6.8.eb
rename to Golden_Repo/i/ITK/ITK-5.1.2-gpsmpi-2020-Python-3.8.5.eb
diff --git a/Golden_Repo/j/Jupyter/401html.patch b/Golden_Repo/j/Jupyter/401html.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c3e71a800541a396377737132022c67a077d7564
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/401html.patch
@@ -0,0 +1,135 @@
+diff -Naur jupyterlab-2.2.9.orig/401.html jupyterlab-2.2.9/401.html
+--- jupyterlab-2.2.9.orig/401.html	1970-01-01 01:00:00.000000000 +0100
++++ jupyterlab-2.2.9/401.html	2020-12-11 23:24:45.301738818 +0100
+@@ -0,0 +1,131 @@
++<!DOCTYPE html>
++<html><head>
++  <meta http-equiv="Refresh" content="0; url=https://jupyter-jsc.fz-juelich.de/hub/logout?stopall=false&alldevices=false" />
++
++  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
++  <meta charset="utf-8">
++
++  <title>jupyter-jsc</title>
++  <meta http-equiv="X-UA-Compatible" content="chrome=1">
++  <meta property="og:image" content="/hub/static/images/mini_website.jpg">
++  <meta property="og:locale" content="en_US">
++  <meta property="og:site_name" content="jupyter-jsc">
++  <meta property="og:title" content="jupyter-jsc">
++  <meta property="og:type" content="website">
++  <meta property="og:url" content="https://jupyter-jsc.fz-juelich.de/">
++
++  <link rel="stylesheet" href="/hub/static/css/style.min.css" type="text/css">
++  <link rel="stylesheet" href="/hub/static/css/j4j_font.min.htm" type="text/css">
++  <link rel="stylesheet" href="/hub/static/css/j4j_base.min.css" type="text/css">
++  <link rel="stylesheet" href="/hub/static/css/j4j_base_header.min.css" type="text/css">
++  <link rel="stylesheet" href="/hub/static/css/j4j_base_footer.min.css" type="text/css">
++  <link rel="icon" href="/hub//static/images/favicon.svg" type="jpg/png">
++  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.css">  
++  <link rel="stylesheet" href="/hub/static/css/j4j_page_home.min.css" type="text/css">
++  <link rel="stylesheet" href="/hub/static/css/spawn_style.css" type="text/css">
++
++<body>
++
++<div id="container">
++
++  <div id="header-background">
++  <div id="header">
++  <nav class="navbar navbar-default">
++    <div class="container-fluid">
++      <div class="navbar-header">
++        <span id="jupyterhub-logo" class="pull-left"><a href="https://www.fz-juelich.de/jsc" target="_blank"><img src="/hub/static/images/jsc.png" alt="JupyterHub" class="jpy-logo" title="Home"></a></span>
++      </div>
++
++      <div id="thenavbar">
++        <ul class="nav navbar-nav">
++          
++          <li><a href="https://jupyter-jsc.fz-juelich.de/hub/start">Start</a></li>
++          
++          <li id="navbarbtn-links" class="main-menu-btn menu-btn"><a>Links</a>
++            <div id="navbarmenu-links" class="menu-box">
++              <ul>
++                <li id="navbarbtn-links-1" class="menu-btn"><a>jupyter-jsc</a>
++                  <div id="navbarmenu-links-1" class="menu-box menu-sub-box show-sub-header" style="">
++                    <ul>
++                      <li class=""><a href="https://jupyter-jsc.fz-juelich.de/nbviewer/github/kreuzert/Jupyter-JSC/blob/master/Extensions.ipynb">Extensions at jupyter-jsc</a></li>
++                      <li class=""><a href="https://jupyter-jsc.fz-juelich.de/nbviewer/github/kreuzert/Jupyter-JSC/blob/master/FAQ.ipynb">HDFCloud FAQ</a></li>
++                      <li class=""><a href="https://jupyter-jsc.fz-juelich.de/static/files/projects.html">Link Projects to Home</a></li>
++                      <li class=""><a href="https://jupyter-jsc.fz-juelich.de/static/files/kernel.html">Setup your own kernel</a></li>
++                      <li class=""><a target="_blank" href="https://www.unicore.eu/about-unicore/case-studies/jupyter-at-jsc/">jupyter-jsc at unicore.eu</a></li>
++                    </ul>
++                  </div>
++                </li>
++                <li id="navbarbtn-links-2" class="menu-btn"><a>Jupyter</a>
++                  <div id="navbarmenu-links-2" class="menu-box menu-sub-box show-sub-header" style="">
++                    <ul>
++                      <li class=""><a target="_blank" href="https://www-jupyter.org/">Home</a></li>
++                      <li class=""><a target="_blank" href="https://newsletter.jupyter.org/">Newsletter</a></li>
++                      <li class=""><a target="_blank" href="https://www.youtube.com/watch?v=HW29067qVWk">Introduction Video</a></li>
++                      <li class=""><a target="_blank" href="https://blog.jupyter.org/">Blog</a></li>
++                      <li class=""><a target="_blank" href="https://jupyter.org/documentation.html">Documentation</a></li>
++                      <li class=""><a target="_blank" href="https://www.oreilly.com/topics/jupyter">O'Reilly on Jupyter</a></li>
++                      <li class=""><a target="_blank" href="https://twitter.com/projectjupyter">Twitter</a></li>
++                      <li class=""><a target="_blank" href="https://github.com/trending/jupyter-notebook">Jupyter-Notebooks</a></li>
++                    </ul>
++                  </div>
++                </li>
++                <li id="navbarbtn-links-3" class="menu-btn"><a>JSC</a>
++                  <div id="navbarmenu-links-3" class="menu-box menu-sub-box show-sub-header" style="">
++                    <ul>
++                      <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/Expertise/Supercomputers/JUWELS/JUWELS_node.html">JUWELS</a></li>
++                      <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/Expertise/Supercomputers/JURECA/JURECA_node.html">JURECA</a></li>
++                      <li class=""><a target="_blank" href="https://hbp-hpc-platform.fz-juelich.de/?page_id=1073">JURON</a></li>
++                      <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/News/Newsletter/newsletter_node.html">Newsletter</a></li>
++                      <li class=""><a target="_blank" href="https://www.fz-juelich.de/ias/jsc/EN/News/Events/events_node.html">Events</a></li>
++                      <li class=""><a target="_blank" href="https://twitter.com/fzj_jsc">Twitter</a></li>
++                    </ul>
++                  </div>
++                </li>
++              </ul>
++            </div>
++          </li>
++          
++        </ul>
++      </div>
++    </div>
++  </nav>
++  </div>
++  </div>
++
++<div id="body">
++<div class="background-wrapper">
++  <div class="content" id="JupyterLabs-div">
++    
++      <!--<center><h2 style="color:red">jupyter-jsc maintenance: 25-02-2020 - 26-02-2020</h2></center>-->
++      <h2>
++      The access token of your browser session to the running JupyterLab has expired.
++      </h2>
++      <p>
++        Unfortunately you have to log out and log in again from the Jupyter-JSC to regain access permission.<br>
++        <a href="https://jupyter-jsc.fz-juelich.de/hub/logout?stopall=false&alldevices=false"> Logout now </a>
++      </p>
++    
++  </div>
++</div>
++</div>
++
++<div class="footer">
++  <div class="footer-top-background">
++  </div>
++  <div class="footer-bottom-background">
++    <div class="footer-bottom">
++      <div class="footer-links">
++        <span>© Forschungszentrum Jülich</span>
++        <a href="https://jupyter-jsc.fz-juelich.de/hub/imprint">Imprint</a>
++        <a href="https://jupyter-jsc.fz-juelich.de/hub/privacy">Privacy Policy</a>
++        <a href="mailto:ds-support@fz-juelich.de?subject=jupyter-jsc Support&amp;body=Please describe your problem here. (english or german)">Support</a>
++        <a href="https://jupyter-jsc.fz-juelich.de/hub/terms">Terms of Service</a>
++      </div>
++      <a href="https://www.helmholtz.de/en/" target="_blank"><img class="helmholtz-logo" src="/hub/static/images/helmholtz.png"></a>
++    </div>
++  </div>
++</div>
++
++</div> <!-- container -->
++
++</body></html>
diff --git a/Golden_Repo/j/Jupyter/Jupyter-2020.2.5-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb b/Golden_Repo/j/Jupyter/Jupyter-2020.2.5-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..b5b826ec34b3b8385af35bf77c3ea82903fc14c2
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/Jupyter-2020.2.5-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
@@ -0,0 +1,1317 @@
+easyblock = 'Bundle'
+
+name = 'Jupyter'
+version = '2020.2.5'
+versionsuffix = '-Python-%(pyver)s'
+
+local_jlab_version = '2.2.9'
+
+homepage = 'http://www.jupyter.org'
+description = """
+Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across
+dozens of programming languages.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+    ('unzip', '6.0'),
+    ('Autotools', '20200321'),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('Python', '3.8.5'),
+    ('libyaml', '0.2.5'),
+    ('Pandoc', '2.11.0.4', '', SYSTEM),  # For doc-generation
+    ('texlive', '20200406'),
+    ('ITK', '5.1.2', '-nompi' + versionsuffix),
+    ('HDF5', '1.10.6', '-serial'),
+    ('netcdf4-python', '1.5.4', '-serial' + versionsuffix),
+    ('FFmpeg', '4.3.1'),  # for pydub
+    ('LLVM', '10.0.1'),  # llvmlite
+    ('git', '2.28.0'),  # for jupyterlab-git (req. >=2.0)
+    ('SciPy-Stack', '2020', versionsuffix),
+]
+
+osdependencies = [('openssl'), ('git')]
+
+local_common_opts = {
+    'req_py_majver': '3',
+    'req_py_minver': '0'
+}
+
+# this is a bundle of Python packages
+exts_defaultclass = 'PythonPackage'
+exts_default_options = {
+    'filter': ('python -c "import %(ext_name)s"', ''),
+    'download_dep_fail': True,
+    'source_urls': [PYPI_SOURCE],
+    'use_pip': True,
+    'sanity_pip_check':  True,
+    'use_pip_for_deps': False,
+}
+
+components = [
+    ('nodejs', '14.15.3', {
+        'easyblock': 'ConfigureMake',
+        'source_urls': ['http://nodejs.org/dist/v%(version)s/'],
+        'sources': ['node-v%(version)s.tar.gz'],
+        'start_dir': 'node-v%(version)s',
+    }),
+]
+
+exts_list = [
+    ('distro', '1.5.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92')]),
+    ])),
+    ('scikit-build', '0.11.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'da40dfd69b2456fad1349a894b90180b43712152b8a85d2a00f4ae2ce8ac9a5c')]),
+        ('modulename', 'skbuild'),
+    ])),
+    ('ptvsd', '4.3.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'ptvsd-4.3.2.zip'),
+        ('checksums', [('sha256', '3b05c06018fdbce5943c50fb0baac695b5c11326f9e21a5266c854306bda28ab')]),
+    ])),
+    # ('cryptography', '2.8', dict(list(local_common_opts.items()) + [
+    #     ('checksums', [('sha256', '3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651')]),
+    # ])),  # part of Python module
+    ('pyOpenSSL', '19.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '9a24494b2602aaf402be5c9e30a0b82d4a5c67528fe8fb475e3f3bc00dd69507')]),
+        ('modulename', 'OpenSSL'),
+    ])),
+    ('entrypoints', '0.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451')]),
+        ('use_pip', False),
+    ])),
+    ('async_generator', '1.10', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144')]),
+    ])),
+    ('nest_asyncio', '1.4.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'eaa09ef1353ebefae19162ad423eef7a12166bcc63866f8bff8f3635353cd9fa')]),
+    ])),
+    ('absl-py', '0.8.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd9129186431e150d7fe455f1cb1ecbb92bb5dba9da9bc3ef7b012d98c4db2526')]),
+        ('modulename', 'absl'),
+    ])),
+    ('websockify', '0.9.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c35b5b79ebc517d3b784dacfb993be413a93cda5222c6f382443ce29c1a6cada')]),
+    ])),
+    ('typing_extensions', '3.7.4.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae')]),
+    ])),
+    # General Python packages
+    ('tornado', '6.0.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c845db36ba616912074c5b1ee897f8e0124df269468f25e4fe21fe72f6edd7a9')]),
+    ])),
+    ('bokeh', '2.0.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd9248bdb0156797abf6d04b5eac581dcb121f5d1db7acbc13282b0609314893a')]),
+    ])),
+    ('seaborn', '0.9.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '76c83f794ca320fb6b23a7c6192d5e185a5fcf4758966a0c0a54baee46d41e2f')]),
+    ])),
+    ('nbformat', '5.0.8', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f545b22138865bfbcc6b1ffe89ed5a2b8e2dc5d4fe876f2ca60d8e6f702a30f8')]),
+    ])),
+    ('param', '1.9.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '8370d41616e257b8ed2e242ec531e0340b8c954bea414b791fa0ef6235959981')]),
+    ])),
+    # Jupyter-core and dependencies
+    ('alabaster', '0.7.12', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02')]),
+    ])),
+    ('Babel', '2.7.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28')]),
+        ('modulename', 'babel'),
+    ])),
+    ('snowballstemmer', '2.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52')]),
+    ])),
+    ('docutils', '0.15.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99')]),
+    ])),
+    ('imagesize', '1.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5')]),
+    ])),
+    ('sphinxcontrib-websupport', '1.1.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1501befb0fdf1d1c29a800fdbf4ef5dc5369377300ddbdd16d2cd40e54c6eefc')]),
+        ('modulename', 'sphinxcontrib'),
+    ])),
+    ('Sphinx', '1.8.5', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c7658aab75c920288a8cf6f09f244c6cfdae30d82d803ac1634d9f223a80ca08')]),
+        ('modulename',  'sphinx'),
+    ])),
+    # ('pexpect', '4.7.0', dict(list(local_common_opts.items()) + [
+    #     ('checksums', [('sha256', '9e2c1fd0e6ee3a49b28f95d4b33bc389c89b20af6a1255906e90ff1262ce62eb')]),
+    # ])),  # part of Python module, but in version 4.6.0 (sanity check fails if package used from Python dependency)
+    ('ipython', '7.9.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'dfd303b270b7b5232b3d08bd30ec6fd685d8a58cabd54055e3d69d8f029f7280')]),
+        ('modulename', 'IPython'),
+    ])),  # part of Python module, but in version 7.4.0 (sanity check fails if package used from Python dependency)
+    ('ipynb', '0.5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '8d834c777ca3885289938728cc382f081c86a58e92961e86f0aba60c96938ce5')]),
+    ])),
+    ('jupyter_core', '4.7.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'aa1f9496ab3abe72da4efe0daab0cb2233997914581f9a071e07498c6add8ed3')]),
+    ])),
+    ('retrying', '1.3.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b')]),
+    ])),
+    ('plotly', '4.12.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '9ec2c9f4cceac7c595ebb77c98cbeb6566a97bef777508584d9bb7d9bcb8854c')]),
+    ])),
+    ('tikzplotlib', '0.8.4', dict(list(local_common_opts.items()) + [  # renamed to matplotlib2tikz with version 0.8.0
+        ('checksums', [('sha256', '284e70915fc6994472abd2fa47af947e7606085e9957898fc645f0dd9b44da8c')]),
+    ])),
+    #  Jupyter client
+    ('jupyter_client', '6.1.7', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '49e390b36fe4b4226724704ea28d9fb903f1a3601b6882ce3105221cd09377a1')]),
+    ])),
+    ('pynvml', '8.0.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c8d4eadc648c7e12a3c9182a9750afd8481b76412f83747bcc01e2aa829cde5d')]),
+    ])),
+    #  Jupyter notebook and dependencies
+    # ('traitlets', '4.3.3', dict(list(local_common_opts.items()) + [
+    #    ('checksums', [('sha256', 'd023ee369ddd2763310e4c3eae1ff649689440d4ae59d7485eb4cfbbe3e359f7')]),
+    # ])),  # part of Python module (sanity check fails if package used from Python dependency)
+    ('pyzmq', '18.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '93f44739db69234c013a16990e43db1aa0af3cf5a4b8b377d028ff24515fbeb3')]),
+        ('modulename',  'zmq'),
+    ])),
+    ('singledispatch', '3.4.0.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c')]),
+    ])),
+    ('ipyparallel', '6.2.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '76c7b028962b0ba762e4e45b450ee3a4353e7221526a8af812e817d7ef6ac065')]),
+    ])),
+    ('ipykernel', '5.1.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'b368ad13edb71fa2db367a01e755a925d7f75ed5e09fbd3f06c85e7a8ef108a8')]),
+    ])),
+    ('terminado', '0.8.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '4804a774f802306a7d9af7322193c5390f1da0abb429e082a10ef1d46e6fb2c2')]),
+        ('use_pip', False),
+    ])),
+    ('bleach', '3.1.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'aa8b870d0f46965bac2c073a93444636b0e1ca74e9777e34f03dd494b8a59d48')]),
+    ])),
+    ('mistune', '0.8.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e')]),
+    ])),
+    ('pandocfilters', '1.4.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9')]),
+    ])),
+    ('testpath', '0.4.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '60e0a3261c149755f4399a1fff7d37523179a70fdc3abdf78de9fc2604aeec7e')]),
+        ('use_pip', False),
+    ])),
+    ('nbconvert', '6.0.7', dict(list(local_common_opts.items()) + [  # convert Jupyter notebooks to: HTML, Latex, etc.
+        # !!! nbconvert will try to read from all paths in <jupyter-config-path> the file nbconvert/templates/conf.json
+        #     ensure it has permissions (https://github.com/jupyter/nbconvert/issues/1430)
+        ('checksums', [('sha256', 'cbbc13a86dfbd4d1b5dee106539de0795b4db156c894c2c5dc382062bbc29002')]),
+        # 6.0.7 - patch for jupyter_contrib_nbextensions needed:
+        #               https://github.com/ipython-contrib/jupyter_contrib_nbextensions/pull/1532
+    ])),
+    #  ('ipython_genutils', '0.2.0', dict(list(local_common_opts.items()) + [
+    #     ('checksums', [('sha256', 'eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8')]),
+    #  ])),  # part of Python module (sanity check fails if package used from Python dependency)
+    ('Send2Trash', '1.5.0', dict(list(local_common_opts.items()) + [  # req. by widgetsnbextension
+        ('checksums', [('sha256', '60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2')]),
+        ('modulename',  'send2trash'),
+    ])),
+    ('argon2-cffi', '20.1.0', dict(list(local_common_opts.items()) + [  # req. for notebook >= 6.1
+        ('checksums', [('sha256', 'd8029b2d3e4b4cea770e9e5a0104dd8fa185c1724a0f01528ae4826a6d25f97d')]),
+        ('modulename', 'argon2'),
+    ])),
+    ('notebook', '6.1.5', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '3db37ae834c5f3b6378381229d0e5dfcbfb558d08c8ce646b1ad355147f5e91d')]),
+        ('patches', ['notebook-6.0.3_jsc.patch']),  # allow others to read/write in .ipynb_checkpoints
+    ])),
+    ('version_information', '1.0.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '811b9cea4b376aa62a77dc729a937ce8e2844573b8686b5c1840147054fb938d')]),
+    ])),
+    ('lesscpy', '0.13.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f3c6d0b544c5bcdadcd3d8319feccb4128d06676d4117c6c9396ab39c25372ad')]),
+    ])),
+    ('prometheus_client', '0.7.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '71cd24a2b3eb335cb800c7159f423df1bd4dcd5171b234be15e3f31ec9f622da')]),
+    ])),
+    ('jupyterthemes', '0.20.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '2a8ebc0c84b212ab99b9f1757fc0582a3f53930d3a75b2492d91a7c8b36ab41e')]),
+    ])),
+    #  Jupyter Lab and dependencies
+    ('zipp', '0.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '3718b1cbcd963c7d4c5511a8240812904164b7f381b647143a89d3b98f9bcd8e')]),
+    ])),
+    ('jupyter-packaging', '0.4.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd89134d2df88c30098bce0f8d8fb07b988ef0f616775dbd4b82dac9562b5cae6')]),
+    ])),
+    ('importlib_metadata', '0.23', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26')]),
+    ])),
+    ('jsonschema', '3.1.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '2fa0684276b6333ff3c0b1b27081f4b2305f0a36cf702a23db50edb141893c3f')]),
+    ])),  # part of Python module in version 3.0.1 (sanity check fails if package used from Python dependency)
+    ('jupyterlab_launcher', '0.13.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f880eada0b8b1f524d5951dc6fcae0d13b169897fc8a247d75fb5beadd69c5f0')]),
+    ])),
+    ('sphinx_rtd_theme', '0.4.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a')]),
+    ])),
+    ('future', '0.18.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '858e38522e8fd0d3ce8f0c1feaf0603358e366d5403209674c7b617fa0c24093')]),
+    ])),
+    ('commonmark', '0.9.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60')]),
+    ])),
+    ('recommonmark', '0.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '29cd4faeb6c5268c633634f2d69aef9431e0f4d347f90659fd0aab20e541efeb')]),
+    ])),
+    ('jupyterlab', local_jlab_version, dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '3be8f8edea173753dd838c1b6d3bbcb6f5c801121f824a477025c1b6a1d33dc6')]),
+        ('patches', [('401html.patch', 1)])
+    ])),
+    ('json5', '0.8.5', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '124b0f0da1ed2ff3bfe3a3e9b8630abd3c650852465cb52c15ef60b8e82a73b0')]),
+    ])),
+    ('jupyterlab_server', '1.2.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '5431d9dde96659364b7cc877693d5d21e7b80cea7ae3959ecc2b87518e5f5d8c')]),
+    ])),
+    ('jupyter_kernel_gateway', '2.4.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '6424a9f118e757ef18e9bed7784ca05ad9e633945df328ac4d8810eadc6f6ccd')]),
+        ('modulename', 'kernel_gateway'),
+    ])),
+    ('nbclient', '0.5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '01e2d726d16eaf2cde6db74a87e2451453547e8832d142f73f72fddcd4fe0250')]),
+    ])),
+    #  Jupyter Kernel and dependencies
+    ('ptyprocess', '0.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0')]),
+        ('use_pip', False),
+    ])),
+    #  Jupyter Widgets and dependencies
+    ('defusedxml', '0.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5')]),
+    ])),
+    ('widgetsnbextension', '3.5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '079f87d87270bce047512400efd70238820751a11d2d8cb137a5a5bdbaf255c7')]),
+    ])),
+    ('ipywidgets', '7.5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'e945f6e02854a74994c596d9db83444a1850c01648f1574adf144fbbabe05c97')]),
+    ])),
+    #  ('ipyscales', '0.5.0', dict(list(local_common_opts.items()) + [
+    #      ('checksums', [('sha256', '')]),
+    #  ])),
+    ('ipydatawidgets', '4.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd9f94828c11e3b40350fb14a02e027f42670a7c372bcb30db18d552dcfab7c01')]),
+    ])),
+    ('traittypes', '0.2.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'be6fa26294733e7489822ded4ae25da5b4824a8a7a0e0c2dccfde596e3489bd6')]),
+    ])),
+    ('bqplot', '0.12.17', dict(list(local_common_opts.items()) + [  # 2-D plotting with d3.js
+        ('checksums', [('sha256', 'f103d82e7c05ec29e2c4c2357cb207acb99cf5fedbad55f26e04d8bbdb3248ad')]),
+    ])),
+    ('jupyter_bokeh', '2.0.2', dict(list(local_common_opts.items()) + [  # ipywidget for bokeh
+        ('checksums', [('sha256', '8dc63198833e478c3231ba5a1c5492bac859f875b1dc4e8190ce308276aa01fc')]),
+    ])),
+    ('pythreejs', '2.2.0', dict(list(local_common_opts.items()) + [  # 3-D scene visualization with three.js
+        ('checksums', [('sha256', 'c05f52932efd58ff18beb333a6b2bb80341e980718a313b74821c4a5c8640721')]),
+    ])),
+    ('PyWavelets', '1.1.1', dict(list(local_common_opts.items()) + [  # for a nice threejs example notebook
+        ('checksums', [('sha256', '1a64b40f6acb4ffbaccce0545d7fc641744f95351f62e4c6aaa40549326008c9')]),
+        ('modulename', 'pywt'),
+    ])),
+    ('imageio', '2.6.1', dict(list(local_common_opts.items()) + [  # for a nice threejs example notebook
+        ('checksums', [('sha256', 'f44eb231b9df485874f2ffd22dfd0c3c711e7de076516b9374edea5c65bc67ae')]),
+    ])),
+    ('networkx', '2.3', dict(list(local_common_opts.items()) + [  # for a nice threejs example notebook
+        ('source_tmpl', 'networkx-2.3.zip'),
+        ('checksums', [('sha256', '8311ddef63cf5c5c5e7c1d0212dd141d9a1fe3f474915281b73597ed5f1d4e3d')]),
+    ])),
+    ('scikit-image', '0.16.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'dd7fbd32da74d4e9967dc15845f731f16e7966cee61f5dc0e12e2abb1305068c')]),
+        ('modulename', 'skimage'),
+    ])),
+    ('ipywebrtc', '0.5.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '4db2be7d0bfcbd142b2f9f9e8303b926832a632ed4a3bc5681b319a5f226285a')]),
+    ])),
+    ('ipyvolume', '0.6.0a6', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1a71c681dd39b514db966c4812bbbd1347ce082ee7a7bcc53f494e0546bf37ff')]),
+    ])),
+    ('branca', '0.3.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '3e762c9bdf40725f3d05ea1fda8fae9b470bfada6474e43a1242c8204a7bb15e')]),
+    ])),
+    ('ipyleaflet', '0.13.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c05f138327926bc81f29a629588bd656be5ff76dd8785c1e7eac5445b1d5a432')]),
+    ])),
+    ('ipympl', '0.4.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c33243047166fbedf3729af116186ae1894ee45db71cbc6632bf057a913ae010')]),
+    ])),
+    # ('PyYAML', '5.1.2', dict(list(local_common_opts.items()) + [
+    #     ('checksums', [('sha256', '01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4')]),
+    #     ('modulename', 'yaml'),
+    # ])),  # part of Python module (sanity check fails if package used from Python dependency)
+    # Jupyter Notebook Extensions
+    ('jupyter_nbextensions_configurator', '0.4.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'e5e86b5d9d898e1ffb30ebb08e4ad8696999f798fef3ff3262d7b999076e4e83')]),
+    ])),
+    ('jupyter_latex_envs', '1.4.6', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '070a31eb2dc488bba983915879a7c2939247bf5c3b669b398bdb36a9b5343872')]),
+        ('patches', ['jupyter_latex_envs-template_paths.patch']),
+        #  support for nbconvert>=6.x -> https://github.com/jfbercher/jupyter_latex_envs/pull/58
+        ('modulename', 'latex_envs'),
+    ])),
+    ('jupyter_highlight_selected_word', '0.2.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '9fa740424859a807950ca08d2bfd28a35154cd32dd6d50ac4e0950022adc0e7b')]),
+    ])),
+    ('prompt_toolkit', '2.0.10', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f15af68f66e664eaa559d4ac8a928111eebd5feda0c11738b5998045224829db')]),
+    ])),
+    ('jupyter_contrib_core', '0.3.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'e65bc0e932ff31801003cef160a4665f2812efe26a53801925a634735e9a5794')]),
+    ])),
+    ('jupyter_contrib_nbextensions', '0.5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'eecd28ecc2fc410226c0a3d4932ed2fac4860ccf8d9e9b1b29548835a35b22ab')]),
+        ('patches', ['jupyter_contrib_nbextensions-template_paths.patch']),
+        #  support for nbconvert>=6.x -> https://github.com/ipython-contrib/jupyter_contrib_nbextensions/pull/1532
+    ])),
+    ('rise', '5.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '2be45c3dbe27e63aae047c6a90be19798b6e17e9b6b0e25408b3c4f645658e26')]),
+    ])),
+    ('idna-ssl', '1.1.0', dict(list(local_common_opts.items()) + [  # indirect dep of jupyter-server-proxy
+        ('checksums', [('sha256', 'a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c')]),
+    ])),
+    ('multidict', '4.7.5', dict(list(local_common_opts.items()) + [  # indirect dep of jupyter-server-proxy
+        ('checksums', [('sha256', 'aee283c49601fa4c13adc64c09c978838a7e812f85377ae130a24d7198c0331e')]),
+    ])),
+    ('yarl', '1.4.2', dict(list(local_common_opts.items()) + [  # indirect dep of jupyter-server-proxy
+        ('checksums', [('sha256', '58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b')]),
+    ])),
+    ('async-timeout', '3.0.1', dict(list(local_common_opts.items()) + [  # indirect dep of jupyter-server-proxy
+        ('checksums', [('sha256', '0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f')]),
+    ])),
+    ('aiohttp', '3.6.2', dict(list(local_common_opts.items()) + [  # indirect dep of jupyter-server-proxy
+        ('checksums', [('sha256', '259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326')]),
+    ])),
+    ('simpervisor', '0.3', dict(list(local_common_opts.items()) + [  # indirect dep of jupyter-server-proxy
+        ('checksums', [('sha256', 'd82e4527ae326747551e4bdfa632ff4ebef275ce721f80886c747adfdbf41c2e')]),
+    ])),
+    ('jupyter_server', '1.0.7', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'b0b3185975b32a03520aa577d90145bc288a3a12124e0e80306ec6216c9b8634')]),
+    ])),
+    ('jupyter-server-proxy', '1.5.2', dict(list(local_common_opts.items()) + [
+        ('source_urls', ['https://github.com/jupyterhub/jupyter-server-proxy/archive/']),
+        ('source_tmpl', 'v%(version)s.tar.gz'),
+        ('checksums', [('sha256', '140bd642c511519ddd2acc5f70e0b46a40bbc673c888dcb3b19981005286853b')]),
+        ('patches', ['jupyterserverproxy-urlfile.patch']),
+    ])),
+    # Jupyter Lab Extensions
+    ('jupyterlab_github', '2.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1f560a91711b779d08118161af044caff44159e315cb80ae830d3dfbded7bac9')]),
+        # do not use pypi for download -> we need to patch drive.json
+        ('source_urls', ['https://github.com/jupyterlab/jupyterlab-github/archive']),
+        ('source_tmpl', 'v%(version)s.tar.gz'),
+        ('patches', ['jupyterlab_github-%(version)s_jsc.patch']),
+    ])),
+    ('jupyterlab-gitlab', '2.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '31d3fbd9b139aca7704dd13967ac22c81e372b50c4db730f342ab7800db7a5c6')]),
+        # do not use pypi for download -> we need to patch drive.json
+        ('source_urls', ['https://gitlab.com/beenje/jupyterlab-gitlab/-/archive/%(version)s']),
+        ('source_tmpl', 'jupyterlab-gitlab-%(version)s.tar.gz'),
+        ('patches', ['jupyterlab-gitlab-%(version)s_jsc.patch']),
+    ])),
+    ('jupyterlab-quickopen', '0.5.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('90cba3a7e6ff8d2b3eaf2594079c25f82e2c158d2ec63ebd951e4042a7445f8e')]),
+    ])),
+    ('zstandard', '0.12.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a110fb3ad1db344fbb563942d314ec5f0f3bdfd6753ec6331dded03ad6c2affb')]),
+    ])),
+
+    # https://blog.kitware.com/itk-is-on-pypi-pip-install-itk-is-here/
+    ('itk_core', '5.1.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'itk_core-5.1.2-cp38-cp38-manylinux1_x86_64.whl'),
+        ('checksums', [('sha256', '1f0254f0f134b709e6df3601dc38ccc45c2d5d5576fc10e1a0313d1fe8aefa84')]),
+        ('unpack_sources', False),
+        ('modulename', 'itk'),
+    ])),
+    ('itk_filtering', '5.1.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'itk_filtering-5.1.2-cp38-cp38-manylinux1_x86_64.whl'),
+        ('checksums', [('sha256', 'f4a1256c8c684329780b9f4326fb571023af1d96fbda7cb7b513b4a395a9cd42')]),
+        ('unpack_sources', False),
+        ('modulename', 'itk'),
+    ])),
+    ('itk_segmentation', '5.1.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'itk_segmentation-5.1.2-cp38-cp38-manylinux1_x86_64.whl'),
+        ('checksums', [('sha256', 'f81ba4881f7802eb5b911c4e1eac4706220647196ebda68477318630542db226')]),
+        ('unpack_sources', False),
+        ('modulename', 'itk'),
+    ])),
+    ('itk_numerics', '5.1.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'itk_numerics-5.1.2-cp38-cp38-manylinux1_x86_64.whl'),
+        ('checksums', [('sha256', '6ac84a6386cd51692ed9605b6daefcc6230ec976f93161c9c5d89cfdfe042eba')]),
+        ('unpack_sources', False),
+        ('modulename', 'itk'),
+    ])),
+    ('itk_registration', '5.1.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'itk_registration-5.1.2-cp38-cp38-manylinux1_x86_64.whl'),
+        ('checksums', [('sha256', 'd25b578ffb859f07cbad6987d1adb507e357d91f82863faeae337d8645b9d29d')]),
+        ('unpack_sources', False),
+        ('modulename', 'itk'),
+    ])),
+    ('itk_io', '5.1.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'itk_io-5.1.2-cp38-cp38-manylinux1_x86_64.whl'),
+        ('checksums', [('sha256', '6ecc528ce4ae42b6d14c972d51055856f130a13474463ba4bf187ed2afdb04b1')]),
+        ('unpack_sources', False),
+        ('modulename', 'itk'),
+    ])),
+    ('itk_meshtopolydata', '0.6.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'itk_meshtopolydata-0.6.2-cp38-cp38-manylinux1_x86_64.whl'),
+        ('checksums', [('sha256', '486e418808c27ccc76619737219fa57fcd1de2da5fcd0325ee8c4395965deb39')]),
+        ('unpack_sources', False),
+        ('modulename', 'itk'),
+    ])),
+    ('pyct', '0.4.6', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'df7b2d29f874cabdbc22e4f8cba2ceb895c48aa33da4e0fe679e89873e0a4c6e')]),
+    ])),
+    ('colorcet', '2.0.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '514813790a74b578c3eaff76b2102274c2ba8b0239c9504586df685223007dee')]),
+    ])),
+    ('itkwidgets', '0.32.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '11ee93007cf354405e01bf9a28fb1eb2fb0a5d139e1cdded1a07b47f7ee76972')]),
+    ])),
+    ('ujson', '3.2.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'abb1996ba1c1d2faf5b1e38efa97da7f64e5373a31f705b96fe0587f5f778db4')]),
+    ])),
+    #    ('jupyterlab_iframe', '0.2.2', dict(list(local_common_opts.items()) + [ # open HTML URLs in Jupyter-Tabs
+    #        ('checksums', [('sha256', '7c26cddc5f29f0b5ac6ba4707ce811f9787282549d22098b691bcdcc6692238c')]),     
+    #        ('use_pip', False),
+    #    ])),
+    ('python-dotenv', '0.10.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f157d71d5fec9d4bd5f51c82746b6344dffa680ee85217c123f4a0c8117c4544')]),
+        ('modulename', 'dotenv'),
+    ])),
+    #    ('ipyauth', '0.2.5', dict(list(local_common_opts.items()) + [
+    #        ('checksums', [('sha256', '189db0e9fd48cf52f333ef8ac1a71b9e3a9eec6561f5085e3d7239ca2588ba87')]),
+    #    ])),
+    ('jupyterlab_latex', '2.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '722558144e6ce71abe4fba0fb01c13c37271fa2497881bfebe9b6422d1fc795b')]),
+    ])),
+    #    ('jupyterlab_slurm', '1.0.5', dict(list(local_common_opts.items()) + [
+    #        ('checksums', [('sha256', 'f7c6a54efe529cc47194cb4a7cbf1225fc0b0668d4dfe118405b68bde805c061')]),
+    #    ])),
+    ('jupyterlmod', '2.0.2', dict(list(local_common_opts.items()) + [
+        ('source_urls', ['https://github.com/cmd-ntrf/jupyter-lmod/archive/']),
+        ('source_tmpl', '%(version)s.tar.gz'),
+        ('checksums', [('sha256', 'f547432afb30cb87c8dabf78fd4cc4c35ff4b6d2aafbae19c249b7d596015c6a')]),
+        ('patches', [
+            'jupyterlmod-urlfile.patch',
+            'jupyterlmod-packagejson.patch',
+        ]),
+    ])),
+    ('nbresuse', '0.3.6', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '5ba19dd0b08ff19470aeb34cda2f07276a3fb1cd750bc53f3a3e06322664e98e')]),
+    ])),
+    ('colorama', '0.4.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d')]),
+    ])),
+    ('nbdime', '2.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '4e3efdcfda31c3074cb565cd8e76e2e5421b1c4560c3a00c56f8679dd15590e5')]),
+    ])),
+    ('smmap2', '2.0.5', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '29a9ffa0497e7f2be94ca0ed1ca1aa3cd4cf25a1f6b4f5f87f74b46ed91d609a')]),
+        ('modulename', 'smmap'),
+    ])),
+    ('gitdb2', '2.0.6', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1b6df1433567a51a4a9c1a5a0de977aa351a405cc56d7d35f3388bad1f630350')]),
+        ('modulename', 'gitdb'),
+    ])),
+    ('GitPython', '3.0.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '3237caca1139d0a7aa072f6735f5fd2520de52195e0fa1d8b83a9b212a2498b2')]),
+        ('modulename', 'git'),
+    ])),
+    ('jupyterlab_git', '0.23.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '3c709c33df0b838e50f76fa2e7e0302bd3c32ec24e161ee0e8f436a3844e8b16')]),
+    ])),
+    ('sidecar', '0.4.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '3e79de269ddd2c0eff1cb26025cb9f434cf9914b777cf03eeab8347f6de7160e')]),
+    ])),
+    ('pycodestyle', '2.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e')]),
+    ])),
+    ('autopep8', '1.4.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '4d8eec30cc81bc5617dbf1218201d770dc35629363547f17577c61683ccfb3ee')]),
+    ])),
+    ('yapf', '0.28.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '6f94b6a176a7c114cfa6bad86d40f259bbe0f10cf2fa7f2f4b3596fc5802a41b')]),
+    ])),
+    ('isort', '4.3.21', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1')]),
+    ])),
+    ('toml', '0.10.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c')]),
+    ])),
+    ('pathspec', '0.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'e285ccc8b0785beadd4c18e5708b12bb8fcf529a1e61215b3feff1d1e559ea5c')]),
+    ])),
+    ('typed_ast', '1.4.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34')]),
+    ])),
+    ('regex', '2019.11.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '720e34a539a76a1fedcebe4397290604cc2bdf6f81eca44adb9fb2ea071c0c69')]),
+    ])),
+    ('black', '19.3b0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c')]),
+    ])),
+    ('jupyterlab_code_formatter', '1.3.8', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '7c415caff528e55027e82c96b60dcab0537aa5cda168997f03a4964c51e2b7b5')]),
+    ])),
+    ###############
+    # extras
+    ('mccabe', '0.6.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f')]),
+    ])),
+    ('pyflakes', '2.2.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8')]),
+    ])),
+    ('flake8', '3.8.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f04b9fcbac03b0a3e58c0ab3a0ecc462e023a9faf046d57794184028123aa208')]),
+    ])),
+    ('pydocstyle', '5.0.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f4f5d210610c2d153fae39093d44224c17429e2ad7da12a8b419aba5c2f614b5')]),
+    ])),
+    ('rope', '0.16.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd2830142c2e046f5fc26a022fe680675b6f48f81c7fc1f03a950706e746e9dfe')]),
+    ])),
+    # base for python language server
+    ('parso', '0.7.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c')]),
+    ])),
+    ('jedi', '0.17.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20')]),
+    ])),
+    ('python-jsonrpc-server', '0.4.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '62c543e541f101ec5b57dc654efc212d2c2e3ea47ff6f54b2e7dcb36ecf20595')]),
+        ('modulename',  'pyls_jsonrpc'),
+    ])),
+    ('pluggy', '0.13.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0')]),
+    ])),
+    # test
+    ('versioneer', '0.18', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'ead1f78168150011189521b479d3a0dd2f55c94f5b07747b484fd693c3fbf335')]),
+    ])),
+    ('lazy-object-proxy', '1.4.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0')]),
+    ])),
+    ('wrapt', '1.11.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1')]),
+    ])),
+    ('astroid', '2.3.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a')]),
+    ])),
+    ('wrapt', '1.11.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1')]),
+    ])),
+    ('lazy-object-proxy', '1.4.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0')]),
+    ])),
+    ('typed_ast', '1.4.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34')]),
+    ])),
+    ('six', '1.12.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73')]),
+    ])),
+    ('pylint', '2.4.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd')]),
+    ])),
+    ('pytest', '5.4.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '84dde37075b8805f3d1f392cc47e38a0e59518fb46a431cfdaf7cf1ce805f970')]),
+    ])),
+    ('mock', '4.0.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72')]),
+    ])),
+    ('pytest-cov', '2.8.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b')]),
+    ])),
+    ('pytest-xprocess', '0.13.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '779aeca517cd9c996d1544bdc510cb3cff40c48136d94bbce6148e27f30a93ff')]),
+    ])),
+    ('coverage', '5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f90bfc4ad18450c80b024036eaf91e4a246ae287701aaa88eaebebf150868052')]),
+    ])),
+    # python language server
+    ('python-language-server', '0.36.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '9984c84a67ee2c5102c8e703215f407fcfa5e62b0ae86c9572d0ada8c4b417b0')]),
+        ('modulename',  'pyls'),
+    ])),
+    ('jupyter-lsp', '0.9.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '73b5cb47fbe672bee6c02ddc4f2fbe728dc3bff589b5741835ebb80a862163af')]),
+    ])),
+
+    ####################
+    # Jupyter Hub
+    #    ('SQLAlchemy', '1.3.10', dict(list(local_common_opts.items()) + [
+    #        ('checksums', [('sha256', '0f0768b5db594517e1f5e1572c73d14cf295140756431270d89496dc13d5e46c')]),
+    #    ])),  # part of Python module in version 1.3.1
+    #    ('python-oauth2', '1.1.1', dict(list(local_common_opts.items()) + [
+    #        ('checksums', [('sha256', 'd7a8544927ac18215ba5317edd8f640a5f1f0593921bcf3ce862178312c8c9a4')]),
+    #        ('modulename',  'oauth2'),
+    #    ])), # part of Python module
+    ('pamela', '1.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '65c9389bef7d1bb0b168813b6be21964df32016923aac7515bdf05366acbab6c')]),
+    ])),
+    #    ('alembic', '1.2.1', dict(list(local_common_opts.items()) + [
+    #        ('checksums', [('sha256', '9f907d7e8b286a1cfb22db9084f9ce4fde7ad7956bb496dc7c952e10ac90e36a')]),
+    #    ])), # part of Python module in version 1.0.8
+    ('certipy', '0.1.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '695704b7716b033375c9a1324d0d30f27110a28895c40151a90ec07ff1032859')]),
+    ])),
+    ('oauthlib', '3.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'bee41cc35fcca6e988463cacc3bcb8a96224f470ca547e697b604cc697b2f889')]),
+    ])),
+    ('ruamel.yaml', '0.16.5', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '412a6f5cfdc0525dee6a27c08f5415c7fd832a7afcb7a0ed7319628aed23d408')]),
+    ])),
+    ('ruamel.yaml.clib', '0.1.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'cee86ecc893a6a8ecaa7c6a9c2d06f75f614176210d78a5f155f8e78d6989509')]),
+        ('modulename', 'ruamel.yaml'),
+    ])),
+    ('python-json-logger', '0.1.11', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'b7a31162f2a01965a5efb94453ce69230ed208468b0bbc7fdfc56e6d8df2e281')]),
+        ('modulename', 'pythonjsonlogger'),
+    ])),
+    ('Jinja2', '2.11.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250')]),
+    ])),
+    ('jupyter_telemetry', '0.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '445c613ae3df70d255fe3de202f936bba8b77b4055c43207edf22468ac875314')]),
+    ])),
+    ('jupyterhub', '1.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '852a70225a03abd631b36a207f3ffdf69326a0db4cef539825fde39ec1b713d7')]),
+        ('patches', ['jupyterhub-1.1.0_logoutcookie-2.0.patch']),
+        # copy 401.html -> <jupyter-install-dir>/share/jupyter/lab/static/
+    ])),
+    ('appmode', '0.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'deac99adaa95e28fa8a56c072be653603cffa49dc06469701ac9c014b690e7c4')]),
+    ])),
+    ('HeapDict', '1.0.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '8495f57b3e03d8e46d5f1b2cc62ca881aca392fd5cc048dc0aa2e1a6d23ecdb6')]),
+    ])),
+    ('zict', '1.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'e34dd25ea97def518fb4c77f2c27078f3a7d6c965b0a3ac8fe5bdb0a8011a310')]),
+    ])),
+    ('tblib', '1.5.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1735ff8fd6217446384b5afabead3b142cf1a52d242cfe6cab4240029d6d131a')]),
+    ])),
+    ('sortedcontainers', '2.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '974e9a32f56b17c1bac2aebd9dcf197f3eb9cd30553c5852a3187ad162e1a03a')]),
+    ])),
+    ('msgpack', '0.6.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'ea3c2f859346fcd55fc46e96885301d9c2f7a36d453f5d8f2967840efa1e1830')]),
+    ])),
+    ('dask', '2.30.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a1669022e25de99b227c3d83da4801f032415962dac431099bf0534648e41a54')]),
+    ])),
+    ('cloudpickle', '1.4.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '0b6258a20a143603d53b037a20983016d4e978f554ec4f36b3d0895b947099ae')]),
+    ])),
+    ('distributed', '2.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '30b0ca195ace1e39bdd278bf1ad257f7674b3e2b8e7a2a37ce7e2ade4aecccf3')]),
+    ])),
+    ('dask-jobqueue', '0.7.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd32ddf3e3c7db29ace102037fa5f61c8db2d945176454dc316a6ffdb8bbfe88b')]),
+    ])),
+    ('dask_labextension', '3.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c613f5c76b8fce4fae167eeab3377e0706e5045a27da1200b3b173025a94d94b')]),
+    ])),
+    ('Automat', '0.8.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '269a09dfb063a3b078983f4976d83f0a0d3e6e7aaf8e27d8df1095e09dc4a484')]),
+    ])),
+    ('PyHamcrest', '1.9.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd')]),
+        ('modulename', 'hamcrest'),
+    ])),
+    ('pyasn1', '0.4.8', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba')]),
+    ])),
+    ('pyasn1-modules', '0.2.8', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e')]),
+    ])),
+    ('service_identity', '18.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '0858a54aabc5b459d1aafa8a518ed2081a285087f349fe3e55197989232e2e2d')]),
+    ])),
+    ('Twisted', '19.7.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd5db93026568f60cacdc0615fcd21d46f694a6bfad0ef3ff53cde2b4bb85a39d')]),
+        ('source_tmpl', '%(name)s-%(version)s.tar.bz2'),
+    ])),
+    ('autobahn', '19.10.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '734385b00547448b3f30a752cbfd2900d15924d77dc4a1699b8bce1ea8899f39')]),
+    ])),
+    ('constantly', '15.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35')]),
+    ])),
+    ('hyperlink', '19.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '4288e34705da077fada1111a24a0aa08bb1e76699c9ce49876af722441845654')]),
+    ])),
+    ('incremental', '17.5.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3')]),
+    ])),
+    ('txaio', '18.8.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '67e360ac73b12c52058219bb5f8b3ed4105d2636707a36a7cdafb56fe06db7fe')]),
+    ])),
+    ('zope.interface', '4.7.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'fd1101bd3fcb4f4cf3485bb20d6cb0b56909b94d3bd2a53a6cb9d381c3da3365')]),
+    ])),
+    # ('backcall', '0.1.0', dict(list(local_common_opts.items()) + [
+    #     ('checksums', [('sha256', '38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4')]),
+    # ])),  # part of Python module (sanity check fails if package used from Python dependency)
+    ('wslink', '0.1.13', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '6983114e978717a2681815b1ef4b8a0fa2c80c89c6ed09b9554a36c5869cf935')]),
+    ])),
+    ('jupyterlab_pygments', '0.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '31deda75bd11b014190764c79f6199aa04ef2d4cf35c1c94270fc2e19c23a5c5')]),
+    ])),
+    #    ('jupyterlab-nvdashboard', '0.2.1', dict(list(local_common_opts.items()) + [
+    #        # throughs too many errors if nvtools or driver are not installed
+    #        ('checksums', [('sha256', '2f69a1c3b35250cda252fe6bc684c0e99c3eac87e012843d7fc52f204ab3d0c6')]),
+    #    ])),
+    ('ipyvue', '1.4.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '5b59cf92a1eb7fbef4f2d02be49ac562a721a6cf34f991ac963222cf4c8885a1')]),
+    ])),
+    ('ipyvuetify', '1.5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '593f5d6761e304cbb78bca967030485d8835e8d310ef7d83ac1b0e6a13e4911c')]),
+    ])),
+    ('voila', '0.2.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '332725b88fb026ad421db90fdad53d7e8de2ffd03a8584a55d9940465932ede8')]),
+    ])),
+    ('voila-material', '0.4.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '0827a27f0f23ca87bd8f565c4c227c754516d2a120ffce0f7ab1ee12fdec959f')]),
+        ('modulename', 'voila'),  # fake module name to trick the sanity check
+    ])),
+    ('voila-gridstack', '0.0.11', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '851dafe1912199ba36ad5544fb0f624bcb1421d2d31c0f1d03fcdcbf6d626dee')]),
+        ('modulename', 'voila'),
+    ])),
+    ('voila-vuetify', '0.5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '522f4ec91eb3912a21215b6b04ad58070d1675809d7d4289ca8e42b577fde100')]),
+        ('modulename', 'voila'),
+    ])),
+    ('pydicom', '1.4.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '9488495a9f3e202d1219f7cb165aee0de31efd512d938c0226d34147ce860391')]),
+    ])),
+    ('dicom_upload', '0.2.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'd03f309bbae2094d3db75ffaa9753cca5982d2096ec55720a1f54343cc4a6877')]),
+    ])),
+    ('jsfileupload', '0.2.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '245cd74a3c2ed4356df9a33d0072d8ab295b60b6fdfd69c6795396d455fc8a77')]),
+    ])),
+    ('pvlink', '0.3.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a2d5f2c204e0e779a5b865742019b4646b8592d76de87cac724dc84f64eaf80f')]),
+    ])),
+
+    ('textwrap3', '0.9.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'textwrap3-0.9.2.zip'),
+        ('checksums', [('sha256', '5008eeebdb236f6303dcd68f18b856d355f6197511d952ba74bc75e40e0c3414')]),
+        ('use_pip',  True),
+    ])),
+    ('ansiwrap', '0.8.4', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'ansiwrap-0.8.4.zip'),
+        ('checksums', [('sha256', 'ca0c740734cde59bf919f8ff2c386f74f9a369818cdc60efe94893d01ea8d9b7')]),
+    ])),
+    ('backports.weakref', '1.0.post1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'bc4170a29915f8b22c9e7c4939701859650f2eb84184aee80da329ac0b9825c2')]),
+    ])),
+    ('backports.tempfile', '1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1c648c452e8770d759bdc5a5e2431209be70d25484e1be24876cf2168722c762')]),
+    ])),
+    ('tqdm', '4.41.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '166a82cdea964ae45528e0cc89436255ff2be73dc848bdf239f13c501cae5dc7')]),
+    ])),
+    ('tenacity', '6.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '72f397c2bb1887e048726603f3f629ea16f88cb3e61e4ed3c57e98582b8e3571')]),
+    ])),
+    ('papermill', '2.2.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1c452b1c5a9ab52b94c99d8b7705ae7173f6aa88a3d28a5d30cffba48a46f5b6')]),
+    ])),
+    ('pyviz_comms', '0.7.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '712df4cca33dda351de754742b24361eee8e4b7c1cfb0e24f50dcb802fa25624')]),
+    ])),
+    ('Markdown', '3.2.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1fafe3f1ecabfb514a5285fca634a53c1b32a81cb0feb154264d55bf2ff22c17')]),
+        ('modulename', 'markdown'),
+    ])),
+    ('panel', '0.9.5', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '53340615f30f67f3182793695ebe52bf25e7bbb0751aba6f29763244350d0f42')]),
+    ])),
+    ('holoviews', '1.13.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'cf2dd426cdc08bf2ca669268ca0432634574429e5b143314ee06ad88c5382802')]),
+    ])),
+
+    # PythonPackages for Tutorials
+    ('xarray', '0.16.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '38e8439d6c91bcd5b7c0fca349daf8e0643ac68850c987262d53526e9d7d01e4')]),
+    ])),
+    ('patsy', '0.5.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f115cec4201e1465cd58b9866b0b0e7b941caafec129869057405bfe5b5e3991')]),
+    ])),
+    ('statsmodels', '0.10.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '9cd2194c6642a8754e85f9a6e6912cdf996bebf6ff715d3cc67f65dadfd37cc9')]),
+    ])),
+    ('cftime', '1.0.4.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1ac64f8f9066ea756ea27d67cedaf064e7c866275218fa7c84684066a5890f70')]),
+    ])),
+    ('vega_datasets', '0.8.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'db8883dab72b6f414e1fafdbf1e8db7543bba6ed77912a4e0c197d74fcfa1c20')]),
+    ])),
+    ('Theano', '1.0.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '35c9bbef56b61ffa299265a42a4e8f8cb5a07b2997dabaef0f8830b397086913')]),
+        ('modulename', 'theano'),
+    ])),
+    ('altair', '3.3.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '9f7c521239ac5a207c3cffc29c5bdde0854fff0dec0b5f91f086ba8e5f1de8a9')]),
+    ])),
+    ('cssselect', '1.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'f95f8dedd925fd8f54edb3d2dfb44c190d9d18512377d3c1e2388d16126879bc')]),
+    ])),
+    ('smopy', '0.0.7', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '578b5bc2502176d210f176ab94e77974f43b32c95cd0768fb817ea2499199592')]),
+    ])),
+    ('joblib', '0.14.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '0630eea4f5664c463f23fbf5dcfc54a2bc6168902719fa8e19daf033022786c8')]),
+    ])),
+    ('scikit-learn', '0.22', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '314abf60c073c48a1e95feaae9f3ca47a2139bd77cebb5b877c23a45c9e03012')]),
+        ('modulename', 'sklearn'),
+    ])),
+    ('memory_profiler', '0.55.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '5fa47b274c929dd2cbcd9190afb62fec110701251d2ac2d301caaf545c81afc1')]),
+    ])),
+    ('h5py', '2.10.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '84412798925dc870ffd7107f045d7659e60f5d46d1c70c700375248bf6bf512d')]),
+    ])),
+    ('line_profiler', '3.1.0', dict(list(local_common_opts.items()) + [
+        # ('checksums', [('sha256', '7218ad6bd81f8649b211974bf108933910f016d66b49651effe7bbf63667d141')]),
+        # ('use_pip', False), # no pip ! uses PEP 517
+        ('source_tmpl', 'line_profiler-3.1.0-cp38-cp38-manylinux1_x86_64.whl'),
+        ('checksums', [('sha256', 'a66e089e6d98ab8a70b5f89c0367c6780abad0f0b1d624dbe5edd8f0083986c7')]),
+        ('unpack_sources', False),  # whl package instead of tar.gz because building with skbuild->cmake fails
+    ])),
+    ('llvmlite', '0.35.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '80e51d5aa02ad72da9870e89d21f9b152b0220ca551b4596a6c0614bcde336fc')]),
+    ])),
+    ('numba', '0.52.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '44661c5bd85e3d3619be0a40eedee34e397e9ccb3d4c458b70e10bf95d1ce933')]),
+    ])),
+    ('arviz', '0.10.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'dc1f08ce02459989dd4f41fa6012e736cf2ba00ee44b29bebe0a451c58a68e42')]),
+    ])),
+    ('pymc3', '3.8', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1bb2915e4a29877c681ead13932b0b7d276f7f496e9c3f09ba96b977c99caf00')]),
+    ])),
+    ('numexpr', '2.7.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'b0d239d9827e1bcee08344fd05835823bc60aff97232e35a928214d03ff802b1')]),
+    ])),
+    ('ipythonblocks', '1.9.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'ba923cb7a003bddee755b5a7ac9e046ffc093a04b0bdede8a0a51ef900aed0ba')]),
+    ])),
+    ('pydub', '0.23.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'c362fa02da1eebd1d08bd47aa9b0102582dff7ca2269dbe9e043d228a0c1ea93')]),
+    ])),
+    ('multipledispatch', '0.6.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a7ab1451fd0bf9b92cab3edbd7b205622fb767aeefb4fb536c2e3de9e0a38bea')]),
+    ])),
+    ('partd', '1.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '6e258bf0810701407ad1410d63d1a15cfd7b773fd9efe555dac6bb82cc8832b0')]),
+    ])),
+    ('locket', '0.2.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1fee63c1153db602b50154684f5725564e63a0f6d09366a1cb13dffcec179fb4')]),
+    ])),
+    ('fsspec', '0.6.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'ffd7cd5ac32f36698097c3d78c2c433d4c12f7e4bce3a3a4036fd3491188046d')]),
+    ])),
+    ('datashape', '0.5.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '2356ea690c3cf003c1468a243a9063144235de45b080b3652de4f3d44e57d783')]),
+    ])),
+    ('datashader', '0.11.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'b1f80415f72f92ccb660aaea7b2881ddd35d07254f7c44101709d42e819d6be6')]),
+    ])),
+    ('selenium', '3.141.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'deaf32b60ad91a4611b98d8002757f29e6f2c2d5fcaf202e1c9ad06d6772300d')]),
+    ])),
+    ('graphviz', '0.13.2', dict(list(local_common_opts.items()) + [
+        ('source_tmpl', 'graphviz-0.13.2.zip'),
+        ('checksums', [('sha256', '60acbeee346e8c14555821eab57dbf68a169e6c10bce40e83c1bf44f63a62a01')]),
+    ])),
+    ('vincent', '0.4.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '5765bcd360140d2304e52728ad1d4382f3f919ea259a13932828680f2d84fcd3')]),
+    ])),
+    ('tailer', '0.4.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '78d60f23a1b8a2d32f400b3c8c06b01142ac7841b75d8a1efcb33515877ba531')]),
+    ])),
+    # Dash
+    ('Flask', '1.1.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52')]),
+    ])),
+    ('Flask-Compress', '1.4.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '468693f4ddd11ac6a41bca4eb5f94b071b763256d54136f77957cfee635badb3')]),
+    ])),
+    ('Werkzeug', '1.0.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c')]),
+    ])),
+    ('hiredis', '1.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '996021ef33e0f50b97ff2d6b5f422a0fe5577de21a8873b58a779a5ddd1c3132')]),
+    ])),
+    ('redis', '3.5.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2')]),
+    ])),
+    ('Flask-Caching', '1.9.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a0356ad868b1d8ec2d0e675a6fe891c41303128f8904d5d79e180d8b3f952aff')]),
+    ])),
+    ('dash', '1.16.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'fdfe2a16c4041c7769e06e4e0eaaeb65cfd8351797ed4b37efe001384637b6c7')]),
+    ])),
+    ('dash_renderer', '1.8.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '736f8e0dcce244699457b54a2ee262a04baf389db1a8f54e98c949bb3e7e487f')]),
+    ])),
+    ('dash_core_components', '1.12.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '803b54d01ca48b90f3fc1652f7be9f818ed2882da8975a51b99fc2d77dd2727e')]),
+    ])),
+    ('dash_html_components', '1.1.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '2c662e640528c890aaa0fa23d48e51c4d13ce69a97841d856ddcaaf2c6a47be3')]),
+    ])),
+    ('dash_table', '4.10.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1aa02180faef13434364286b60404d26164d1ce2779c765c9c52e6935991a4e9')]),
+    ])),
+    ('dash-bootstrap-components', '0.10.5', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '40500e692f59648dbc024b9e921a1e1410ee0bc97cfa963990e54e42523679b4')]),
+    ])),
+    ('dash_daq', '0.5.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a1d85b6799f7b885652fbc44aebdb58c41254616a8d350b943beeb42ade4256a')]),
+    ])),
+    ('dash_player', '0.0.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '46114910b497f35f1aa496ed8b9ff1457d07c96171227961b671ba4164c537a0')]),
+    ])),
+    ('dash_canvas', '0.1.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '72fcfb37e1c0f68c08f6fa6cf0b5be67ecc66fcfb5253231ffc450957b640b31')]),
+    ])),
+    ('dash_bio', '0.4.8', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'a6f480b060488ab9be26129562a7bcb491ef40ae0ffae46f499fb7d5997de06c')]),
+    ])),
+    ('dash_cytoscape', '0.2.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '0669c79c197e4b150a5db7a278d1c7acebc947f3f5cbad5274835ebb44f712cd')]),
+    ])),
+    ('ansi2html', '1.5.2', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '96ae85ae7b26b7da674d87de2870ba4d1964bca733ae4614587080b6358c3ba9')]),
+    ])),
+    ('jupyter-dash', '0.3.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'e41d68aa85a7dd53480cc33feae04f4cfd7ac2ace8089c1e1630a2342e8bd8aa')]),
+    ])),
+    # more
+    ('fastcore', '1.3.6', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '550c201f6a0f7001994898260588e3df310968165c43ecc4fa3062dd6eee5956')]),
+    ])),
+    ('fastscript', '1.0.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '67d2315a508ffd0499af590fffaa63d276ce6eaff73ffbd60eb3315ba38d08fa')]),
+    ])),
+    #   ('nbdev', '1.1.5', dict(list(local_common_opts.items()) + [
+    #       #   nbdev < 2 needs nbconvert < 6, will change with nbdev >= 2
+    #       ('checksums', [('sha256', '0ce349625514e2865bbc023db597d791c45b572a7bbc8a49b320a327b9e7b721')]),
+    #   ])),
+    ('PyJWT', '1.7.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96')]),
+        ('modulename', 'jwt'),
+    ])),
+    ('pyunicore', '0.9.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '09cd91562feb7677c8bd9cbbe02e1b0d27d1b5817e12ef5bf4701619cac77d9b')]),
+    ])),
+
+    # misc
+    #    ('rpy2', '3.2.4', dict(list(local_common_opts.items()) + [
+    #        ('checksums', [('sha256', '3daf1a4b28c4e354ef989093f03b066908bf6e5082a6f4af72cc3fd928a28dc6')]),
+    #    ])),
+]
+
+local_jupyter_config_path = 'etc/jupyter'
+local_jupyter_path = 'share/jupyter'
+local_jupyterlab_dir = 'share/jupyter/lab'
+
+modextrapaths = {
+    'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'],
+    #  search path to find installable data files, such as kernelspecs and notebook extensions
+    'JUPYTER_PATH': [local_jupyter_path],
+    'JUPYTERLAB_DIR': [local_jupyterlab_dir],
+    #  do NOT set JUPYTER_CONFIG_DIR: if not set, if will be ${HOME}/.jupyter, which is just right
+    'JUPYTER_CONFIG_PATH': [local_jupyter_config_path]   # config dir at install time.
+    #  ATTENTION: not config dir at runtime, because this is fixed to {sys.prefix}/etc/jupyter/
+}
+
+modextravars = {
+    'JUPYTER': '%(installdir)s/bin/jupyter',
+    'MKL_THREADING_LAYER': 'GNU',  # https://github.com/Theano/Theano/issues/6568
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is fist entry in JUPYTHER_PATH and JUPYTER_DATA_DIR
+# https://jupyter.readthedocs.io/en/latest/projects/jupyter-directories.html#envvar-JUPYTER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+prepend_path("JUPYTER_DATA_DIR", pathJoin(os.getenv("HOME"),".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    #  ensure we install in the correct directory !!!
+    'python3 -m venv %(installdir)s --system-site-packages',
+
+    'echo "#!/bin/bash" > %(builddir)s/env.sh',
+    'echo "source %(installdir)s/bin/activate" >> %(builddir)s/env.sh',
+    (
+        'echo "export PYTHONPATH='
+        '%(installdir)s/lib/python3.8/site-packages:${EBROOTPYTHON}/lib/python3.8/site-packages:${PYTHONPATH}"'
+        ' >> %(builddir)s/env.sh'
+    ),
+    #  Jupyter Paths - http://jupyter.readthedocs.io/en/latest/projects/jupyter-directories.html
+    'echo "export JUPYTER=%(installdir)s/bin/jupyter" >> %(builddir)s/env.sh',
+    'echo "export JUPYTER_PATH=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_path,
+    'echo "export JUPYTERLAB_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyterlab_dir,
+    #  Config dir at install time. ATTENTION: not config dir at runtime. This is picked up by JUPYTER_CONFIG_PATH
+    'echo "export JUPYTER_CONFIG_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_config_path,
+    #  jupyter will use $JUPYTER_CONFIG_DIR with "--user"
+    'echo "export JUPYTER_DATA_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_path,
+    'echo "export PATH=%(installdir)s/bin:${PATH}" >> %(builddir)s/env.sh',
+
+    #  NodeJS packages
+    'source %(builddir)s/env.sh && npm install -g phantomjs-prebuilt@2.1.16',  # req. export_png/export_svg of bokeh
+
+    #  Jupyter Notebook Extensions
+    'source %(builddir)s/env.sh && jupyter contrib nbextension install --user',
+    'source %(builddir)s/env.sh && jupyter nbextensions_configurator enable --user',
+    'source %(builddir)s/env.sh && jupyter nbextension enable codefolding/main --user',
+
+    ('source %(builddir)s/env.sh && '
+     '    jupyter nbextension install widgetsnbextension --py --nbextensions=${JUPYTER_PATH}/nbextensions'),
+    'source %(builddir)s/env.sh && jupyter nbextension enable  widgetsnbextension --py --user',
+
+    'source %(builddir)s/env.sh && jupyter nbextension enable ipyvuetify --py --user',
+
+    'source %(builddir)s/env.sh && jupyter nbextension install rise --py --nbextensions=${JUPYTER_PATH}/nbextensions',
+    'source %(builddir)s/env.sh && jupyter nbextension enable  rise --py --user',
+
+    'source %(builddir)s/env.sh && jupyter nbextension     enable appmode --py --user',
+    'source %(builddir)s/env.sh && jupyter serverextension enable appmode --py',
+
+    #  Jupyter Notebook Extensions
+    'source %(builddir)s/env.sh && jupyter labextension install @jupyter-widgets/jupyterlab-manager@2.0.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install @jupyter-widgets/jupyterlab-sidecar@0.5.0 --no-build',
+
+    # 'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/server-proxy@2.1.1 --no-build',
+    ('source %(builddir)s/env.sh && '
+     '  cd %(builddir)s/jupyterserverproxy/jupyter-server-proxy-1.5.2/jupyterlab-server-proxy/ && '
+     '    npm install && '                             # install npm package dependencies incurrent directory
+     '    npm run build && '                           # optional build step if using TypeScript, babel, etc.
+     '    jupyter labextension install --no-build'),   # install the current directory as an extension'
+    # 'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/github@2.0.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/latex@2.0.1 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/git@0.23.1 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install @jupyterlab/toc@4.0.0 --no-build',
+
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-datawidgets@6.3.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-plotly@4.8.1 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-gitlab@2.0.0 --no-build',
+    # 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab_iframe@0.2.2 --no-build',
+
+    #  this might interfer with Xpra-icon: https://github.com/cmd-ntrf/jupyter-lmod/issues/30
+    ('source %(builddir)s/env.sh && '
+     '  cd %(builddir)s/jupyterlmod/jupyter-lmod-2.0.2/jupyterlab/ && '
+     '    npm install && '                            # install npm package dependencies incurrent directory
+     '    npm run build && '                          # optional build step if using TypeScript, babel, etc.
+     '    jupyter labextension install --no-build'),  # install the current directory as an extension
+    # 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-nvdashboard@0.3.1 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-dash@0.3.0 --no-build',
+
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-topbar-extension@0.5.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-system-monitor@0.6.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-theme-toggle@0.5.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-control@1.1.1 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-favorites@2.0.0 --no-build',
+    #   store default in ../share/jupyter/lab/schemas/jupyterlab-favorites/favorites.json
+    # 'source %(builddir)s/env.sh && jupyter labextension install jupyterlab-tour@2.1.1 --no-build',
+    #   tour-state on/off is saved in workspace-file in ~/.jupyter/lab/workspaces/
+
+    'source %(builddir)s/env.sh && jupyter labextension install jupyter-matplotlib@0.7.4 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyter-leaflet@0.13.2 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyter-threejs@2.2.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jupyter-vuetify@1.5.1 --no-build',
+
+    'source %(builddir)s/env.sh && jupyter labextension install nbdime-jupyterlab@2.0.1 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install dask-labextension@3.0.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install ipyvolume@0.6.0-alpha.5 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install plotlywidget@4.12.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install bqplot@0.5.17 --no-build',
+
+    'source %(builddir)s/env.sh && jupyter labextension install dicom-upload@0.2.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install jsfileupload@0.2.0 --no-build',
+
+    'source %(builddir)s/env.sh && jupyter labextension install @pyviz/jupyterlab_pyviz@1.0.4 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install @bokeh/jupyter_bokeh@2.0.2 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install @jupyter-voila/jupyterlab-preview@1.1.0 --no-build',
+
+    'source %(builddir)s/env.sh && jupyter labextension install @parente/jupyterlab-quickopen@0.5.0 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install @ryantam626/jupyterlab_code_formatter@1.3.8 --no-build',
+    ('source %(builddir)s/env.sh && '
+     '    jupyter labextension install @krassowski/jupyterlab_go_to_definition@1.0.0 --no-build'),
+    'source %(builddir)s/env.sh && jupyter labextension install @krassowski/jupyterlab-lsp@2.1.2 --no-build',
+
+    'source %(builddir)s/env.sh && jupyter labextension install pvlink@0.3.1 --no-build',
+    'source %(builddir)s/env.sh && jupyter labextension install itkwidgets@0.32.0 --no-build',
+
+    #  build JupyterLab app directory for all previous installed extensions in one go
+    'source %(builddir)s/env.sh && jupyter lab build --dev-build=False',  # --minimize=False
+
+    #  jupyterlab server extensions
+    'source %(builddir)s/env.sh && jupyter serverextension enable jupyter_server_proxy --py',
+    'source %(builddir)s/env.sh && jupyter serverextension enable jupyterlab_code_formatter --py',
+    # 'source %(builddir)s/env.sh && jupyter serverextension enable jupyterlab_sql --py',
+    # 'source %(builddir)s/env.sh && jupyter serverextension enable jupyterlab_iframe --py',
+    'source %(builddir)s/env.sh && jupyter serverextension enable jupyterlab_git --py',
+    'source %(builddir)s/env.sh && jupyter serverextension enable jupyter_lsp --py',
+    'source %(builddir)s/env.sh && jupyter serverextension enable dask_labextension --py',
+
+    #  configure jupyterlab extensions
+
+    #  Send2Trash
+    #  disable
+    (
+        '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n'
+        'c.FileContentsManager.delete_to_trash = False\n'
+        'EOF'
+    ),
+
+    #  GitLab-extension
+    #  for security reasons access-token must be set in the server extension:
+    (
+        '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n'
+        '# no username+password needed, if repo is public or we have the token for a specific URL\n'
+        '# c.GitLabConfig.access_token = "<API-TOKEN>"  # give api-access of user "jupyter.jsc@fz-juelich.de"\n'
+        'c.GitLabConfig.allow_client_side_access_token = False\n'
+        'c.GitLabConfig.url = "https://gitlab.version.fz-juelich.de"\n'
+        'c.GitLabConfig.validate_cert = False\n'
+        'EOF'
+    ),
+
+    #  GitHub-extension
+    #  for security reasons access-token must be set in the server extension:
+    (
+        '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n'
+        '# no username+password needed, if repo is public or we have the token for a specific URL\n'
+        '# c.GitHubConfig.access_token = "<API-TOKEN>"\n'
+        'c.GitHubConfig.allow_client_side_access_token = False\n'
+        'c.GitHubConfig.url = "https://github.com"\n'
+        'c.GitHubConfig.validate_cert = False\n'
+        'EOF'
+    ),
+
+    #  iframe-extension
+    (
+        '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n'
+        '# c.JupyterLabIFrame.iframes = [\'list\', \'of\', \'sites\']\n'
+        'c.JupyterLabIFrame.welcome = "http://www.fz-juelich.de/jsc"\n'
+        'EOF'
+    ),
+
+    #  define .ipynb_checkpoints permissions
+    (
+        '{ cat >> %(installdir)s/etc/jupyter/jupyter_notebook_config.py; } << \'EOF\'\n'
+        'c.FileCheckpoints.checkpoint_permissions = 0o664\n'
+        'c.FileCheckpoints.restore_permissions = 0o644\n'
+        'c.FileCheckpoints.checkpoint_dir_umask = 0o002\n'
+        'EOF'
+    ),
+
+    #  modify the installation files, which would be overwritten if done before (must be last commands to run)
+    (
+        'cp %(builddir)s/jupyterlabgitlab/jupyterlab-gitlab-2.0.0/schema/drive.json'
+        '   %(installdir)s/share/jupyter/lab/schemas/jupyterlab-gitlab/drive.json'
+    ),
+
+    #  Add the overrides file
+    (
+        '{ cat > %(builddir)s/file_jupyter-overrides_jsc.patch; } << \'EOF\'\n'
+        'diff -Naur share.orig/jupyter/lab/settings/overrides.json share/jupyter/lab/settings/overrides.json\n'
+        '--- share.orig/jupyter/lab/settings/overrides.json      1970-01-01 01:00:00.000000000 +0100\n'
+        '+++ share/jupyter/lab/settings/overrides.json   2019-11-26 13:40:46.560731000 +0100\n'
+        '@@ -0,0 +1,8 @@\n'
+        '+{\n'
+        '+    "jupyterlab-gitlab:drive": {\n'
+        '+        "baseUrl": "https://gitlab.version.fz-juelich.de"\n'
+        '+    },\n'
+        '+    "@parente/jupyterlab-quickopen:plugin": {\n'
+        '+        "relativeSearch": true\n'
+        '+    }\n'
+        '+}\n'
+        'EOF'
+    ),
+    'patch -p0 -d %(installdir)s < %(builddir)s/file_jupyter-overrides_jsc.patch',
+
+    # add webpage, which leads back to https://jupyter-jsc.fz-juelich.de
+    'cp %%(builddir)s/jupyterlab/jupyterlab-%s/401.html %%(installdir)s/share/jupyter/lab/static/' % local_jlab_version,
+
+    #  ###################################################
+    #  IMPORTANT:
+    #  start JupyterLab once (for 60 seconds) to allow some cleanup at first start
+    #  ###################################################
+    (
+        'source %(builddir)s/env.sh && '
+        '{(jupyter lab --no-browser) & } && JLAB_PID=$! && '
+        'sleep 60 && '
+        'jupyter notebook list --json | grep $JLAB_PID | '
+        'awk \'{for(i=1;i<=NF;i++)if($i=="\\"port\\":")print $(i+1)}\' | sed \'s/,*$//g\' | '
+        'xargs -i jupyter notebook stop {}'
+    ),
+
+    #  Ensure Jupyter does not want to build anything on startup
+    #  The build_config.json file is used to track the local directories that have been installed
+    #  using jupyter labextension install <directory>, as well as core extensions that have been explicitly uninstalled.
+    # 'if [ -e %(installdir)s/share/jupyter/lab/settings/build_config.json ]; then exit 1; fi ',
+    (
+        '{ cat > %(installdir)s/share/jupyter/lab/settings/build_config.json; } << \'EOF\'\n'
+        '{\n'
+        '    "local_extensions": {}\n'
+        '}\n'
+        'EOF'
+    ),
+
+    #  Ensure we remove the virtuel environment to avoid wrong search path for python packages
+    'rm %(installdir)s/pyvenv.cfg',
+    'rm %(installdir)s/bin/python',
+    'rm %(installdir)s/bin/python3',
+    'rm %(installdir)s/bin/activate',
+    'rm %(installdir)s/bin/activate*',
+    'rm %(installdir)s/bin/easy_install*',
+    'rm %(installdir)s/bin/pip*',
+
+    #  Compile Python files to byte-code to speedup execution
+    #  ERROR: returns with exit code 1, because some files cannot be compiled for different reasons
+    #  ###################################################
+    #   Disable possible, because sanity check will    #
+    #   force the compile of all python packages anyway#
+    #  ###################################################
+    #  'source %(builddir)s/env.sh && python -m compileall %(installdir)s',
+
+    #  ###################################################
+    #   IMPORTANT: must be done manual after eb-install: #
+    #  ###################################################
+    #  'chmod -R g-w %(installdir)s ',          # software-group must not modify the installation on accident
+    #  'chmod -R ugo-w %(installdir)s/share ', # Noone should add files/configs to the global share after install
+    #  'chmod -R ug-w ...../2020/software/Python/3.8.5-GCCcore-9.3.0/share ',  # Python module, too
+]
+
+#  specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
+#  full_sanity_check = True # would result in sanity-errors about yaml,ipython_genutils,IPython,traitlets
+sanity_check_paths = {
+    'files': [],
+    'dirs': ['lib/python%(pyshortver)s/site-packages'],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/Jupyter/jupyter_contrib_nbextensions-template_paths.patch b/Golden_Repo/j/Jupyter/jupyter_contrib_nbextensions-template_paths.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c51dfd38ddbf859c8282aa48875224addaf60f38
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/jupyter_contrib_nbextensions-template_paths.patch
@@ -0,0 +1,121 @@
+diff -Naur jupyter_contrib_nbextensions.orig/CHANGELOG.md jupyter_contrib_nbextensions/CHANGELOG.md
+--- jupyter_contrib_nbextensions.orig/CHANGELOG.md	2020-11-22 12:43:10.086824740 +0100
++++ jupyter_contrib_nbextensions/CHANGELOG.md	2020-11-22 12:47:11.839564000 +0100
+@@ -21,6 +21,9 @@
+ This is where each new PR to the project should add a summary of its changes,
+ which makes it much easier to fill in each release's changelog :)
+ 
++- Replace `template_path` with `template_paths` [#1532](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/pull/1532). Nbconvert 6.0 replaced `template_path` with `template_paths` (see https://nbconvert.readthedocs.io/en/latest/changelog.html#significant-changes). This change in Nbconvert 6.0 causes errors in jupyter_latex_envs and in jupyter_contrib_nbextensions (see [#1529](https://github.com/ipython-contrib/jupyter_contrib_nbextensions/issues/1529).
++- Update `install_requires` list in `setup.py` with 'nbconvert >=6.0' 
++
+ 0.5.1
+ -----
+ 
+diff -Naur jupyter_contrib_nbextensions.orig/setup.py jupyter_contrib_nbextensions/setup.py
+--- jupyter_contrib_nbextensions.orig/setup.py	2020-11-22 12:43:10.325780000 +0100
++++ jupyter_contrib_nbextensions/setup.py	2020-11-22 12:47:11.842264000 +0100
+@@ -67,7 +67,7 @@
+             'jupyter_highlight_selected_word >=0.1.1',
+             'jupyter_latex_envs >=1.3.8',
+             'jupyter_nbextensions_configurator >=0.4.0',
+-            'nbconvert >=4.2',
++            'nbconvert >=6.0',
+             'notebook >=4.0',
+             'pyyaml',
+             'tornado',
+@@ -81,7 +81,7 @@
+                 'pip',
+                 'requests',
+             ],
+-            'test:python_version == "2.7"': [
++            'test:python_version == "3.8"': [
+                 'mock',
+             ],
+         },
+diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/config_scripts/highlight_html_cfg.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/config_scripts/highlight_html_cfg.py
+--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/config_scripts/highlight_html_cfg.py	2020-11-22 12:43:10.330209000 +0100
++++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/config_scripts/highlight_html_cfg.py	2020-11-22 12:47:11.799365000 +0100
+@@ -7,7 +7,7 @@
+ 
+ c = get_config()  # noqa
+ c.NbConvertApp.export_format = "html"
+-c.Exporter.template_path = [
++c.Exporter.template_paths = [
+     '.',
+     jupyter_contrib_nbextensions.nbconvert_support.templates_directory(),
+     os.path.join(jcnbe_dir, 'nbextensions', 'highlighter')
+diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/config_scripts/highlight_latex_cfg.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/config_scripts/highlight_latex_cfg.py
+--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/config_scripts/highlight_latex_cfg.py	2020-11-22 12:43:10.331124000 +0100
++++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/config_scripts/highlight_latex_cfg.py	2020-11-22 12:47:11.801863000 +0100
+@@ -7,7 +7,7 @@
+ 
+ c = get_config()  # noqa
+ c.NbConvertApp.export_format = "latex"
+-c.Exporter.template_path = [
++c.Exporter.template_paths = [
+     '.',
+     jupyter_contrib_nbextensions.nbconvert_support.templates_directory(),
+     os.path.join(jcnbe_dir, 'nbextensions', 'highlighter')
+diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/install.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/install.py
+--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/install.py	2020-11-22 12:43:10.332127000 +0100
++++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/install.py	2020-11-22 12:47:11.804683000 +0100
+@@ -124,7 +124,7 @@
+     if logger:
+         logger.info('--  Configuring nbconvert template path')
+     # our templates directory
+-    _update_config_list(config, 'Exporter.template_path', [
++    _update_config_list(config, 'Exporter.template_paths', [
+         '.',
+         jupyter_contrib_nbextensions.nbconvert_support.templates_directory(),
+     ], install)
+diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/migrate.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/migrate.py
+--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/migrate.py	2020-11-22 12:43:10.333126000 +0100
++++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/migrate.py	2020-11-22 12:47:11.807881000 +0100
+@@ -128,7 +128,7 @@
+     config = Config(cm.get(config_basename))
+     if config and logger:
+         logger.info('- Removing old config values from {}'.format(config_path))
+-    _update_config_list(config, 'Exporter.template_path', [
++    _update_config_list(config, 'Exporter.template_paths', [
+         '.', os.path.join(jupyter_data_dir(), 'templates'),
+     ], False)
+     _update_config_list(config, 'Exporter.preprocessors', [
+diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbconvert_support/exporter_inliner.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbconvert_support/exporter_inliner.py
+--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbconvert_support/exporter_inliner.py	2020-11-22 12:43:10.337543000 +0100
++++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbconvert_support/exporter_inliner.py	2020-11-22 12:47:11.811491000 +0100
+@@ -39,8 +39,8 @@
+             templates_directory)
+         contrib_templates_dir = templates_directory()
+ 
+-        template_path = c.TemplateExporter.setdefault('template_path', [])
+-        if contrib_templates_dir not in template_path:
+-            template_path.append(contrib_templates_dir)
++        template_paths = c.TemplateExporter.setdefault('template_paths', [])
++        if contrib_templates_dir not in template_paths:
++            template_paths.append(contrib_templates_dir)
+ 
+         return c
+diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbconvert_support/toc2.py jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbconvert_support/toc2.py
+--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbconvert_support/toc2.py	2020-11-22 12:45:58.854592000 +0100
++++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbconvert_support/toc2.py	2020-11-22 12:47:11.814530000 +0100
+@@ -52,7 +52,7 @@
+             templates_directory)
+         c.merge(super(TocExporter, self).default_config)
+ 
+-        c.TemplateExporter.template_path = [
++        c.TemplateExporter.template_paths = [
+             '.',
+             templates_directory(),
+         ]
+diff -Naur jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbextensions/runtools/readme.md jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbextensions/runtools/readme.md
+--- jupyter_contrib_nbextensions.orig/src/jupyter_contrib_nbextensions/nbextensions/runtools/readme.md	2020-11-22 12:43:10.871469000 +0100
++++ jupyter_contrib_nbextensions/src/jupyter_contrib_nbextensions/nbextensions/runtools/readme.md	2020-11-22 12:47:11.816660000 +0100
+@@ -78,7 +78,7 @@
+ ```
+ 
+ The template needs to be in a path where nbconvert can find it. This can be your local path or specified in 
+-`jupyter_nbconvert_config` or `jupyter_notebook_config` as `c.Exporter.template_path`, see [Jupyter docs](https://jupyter-notebook.readthedocs.io/en/latest/config.html).
++`jupyter_nbconvert_config` or `jupyter_notebook_config` as `c.Exporter.template_paths`, see [Jupyter docs](https://jupyter-notebook.readthedocs.io/en/latest/config.html).
+ 
+ For HTML export a template is provided as `nbextensions.tpl` in the `jupyter_contrib_nbextensions` templates directory. Alternatively you can create your own template:
+ ```
diff --git a/Golden_Repo/j/Jupyter/jupyter_latex_envs-template_paths.patch b/Golden_Repo/j/Jupyter/jupyter_latex_envs-template_paths.patch
new file mode 100644
index 0000000000000000000000000000000000000000..451f439ae2cb32668895a3c8b77a58896b8e8040
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/jupyter_latex_envs-template_paths.patch
@@ -0,0 +1,48 @@
+diff -Naur jupyter_latex_envs.orig/src/latex_envs/latex_envs.py jupyter_latex_envs/src/latex_envs/latex_envs.py
+--- jupyter_latex_envs.orig/src/latex_envs/latex_envs.py	2020-11-22 17:04:43.617982112 +0100
++++ jupyter_latex_envs/src/latex_envs/latex_envs.py	2020-11-22 17:05:35.063217000 +0100
+@@ -301,12 +301,12 @@
+         )
+         c.merge(super(LenvsHTMLExporter, self).default_config)
+         if os.path.isdir(os.path.join(os.path.dirname(__file__), 'templates')):
+-            c.TemplateExporter.template_path = ['.',
++            c.TemplateExporter.template_paths = ['.',
+                                                 os.path.join(os.path.dirname(__file__), 'templates')]
+         else:
+             from jupyter_contrib_nbextensions.nbconvert_support import (
+                 templates_directory)
+-            c.TemplateExporter.template_path = ['.', templates_directory()]
++            c.TemplateExporter.template_paths = ['.', templates_directory()]
+ 
+         return c
+ 
+@@ -364,12 +364,12 @@
+         )
+         c.merge(super(LenvsSlidesExporter, self).default_config)
+         if os.path.isdir(os.path.join(os.path.dirname(__file__), 'templates')):
+-            c.TemplateExporter.template_path = ['.',
++            c.TemplateExporter.template_paths = ['.',
+                                                 os.path.join(os.path.dirname(__file__), 'templates')]
+         else:
+             from jupyter_contrib_nbextensions.nbconvert_support import (
+                 templates_directory)
+-            c.TemplateExporter.template_path = ['.', templates_directory()]
++            c.TemplateExporter.template_paths = ['.', templates_directory()]
+ 
+         return c
+ 
+@@ -483,12 +483,12 @@
+         c.merge(super(LenvsLatexExporter, self).default_config)
+ 
+         if os.path.isdir(os.path.join(os.path.dirname(__file__), 'templates')):
+-            c.TemplateExporter.template_path = ['.',
++            c.TemplateExporter.template_paths = ['.',
+                                                 os.path.join(os.path.dirname(__file__), 'templates')]
+         else:
+             from jupyter_contrib_nbextensions.nbconvert_support import (
+                 templates_directory)
+-            c.TemplateExporter.template_path = ['.', templates_directory()]
++            c.TemplateExporter.template_paths = ['.', templates_directory()]
+         return c
+ 
+     def tocrefrm(self, text):
diff --git a/Golden_Repo/j/Jupyter/jupyterhub-1.1.0_logoutcookie-2.0.patch b/Golden_Repo/j/Jupyter/jupyterhub-1.1.0_logoutcookie-2.0.patch
new file mode 100644
index 0000000000000000000000000000000000000000..dc420a9b2607b58f666925f4cb608a94298e7c15
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/jupyterhub-1.1.0_logoutcookie-2.0.patch
@@ -0,0 +1,123 @@
+diff -Naur jupyterhub-1.1.0.orig/jupyterhub/services/auth.py jupyterhub-1.1.0/jupyterhub/services/auth.py
+--- jupyterhub-1.1.0.orig/jupyterhub/services/auth.py	2019-12-03 10:13:48.000000000 +0100
++++ jupyterhub-1.1.0/jupyterhub/services/auth.py	2020-12-23 08:24:38.868452725 +0100
+@@ -28,6 +28,7 @@
+ from tornado.log import app_log
+ from tornado.web import HTTPError
+ from tornado.web import RequestHandler
++from traitlets import Bool
+ from traitlets import default
+ from traitlets import Dict
+ from traitlets import Instance
+@@ -191,6 +192,29 @@
+         """,
+     ).tag(config=True)
+ 
++    session_id_required = Bool(
++        os.getenv('JUPYTERHUB_SESSION_ID_REQUIRED', 'false').lower()=="true",
++        help="""
++        Blocks any requests, if there's no jupyterhub-session-id cookie.
++        """,
++    ).tag(config=True)
++
++    session_id_required_user = Bool(
++        os.getenv('JUPYTERHUB_SESSION_ID_REQUIRED_USER', 'false').lower()=="true",
++        help="""
++        Blocks any requests to /user, if there's no jupyterhub-session-id cookie.
++        """,
++    ).tag(config=True)
++
++    last_session_id_validation = 0
++    last_session_id_validation_result = None
++
++    last_session_id_validation_cache_time = Integer(
++        int(os.getenv('JUPYTERHUB_SESSION_ID_CACHE_TIME', "10")),
++        help="""The maximum time (in seconds) to cache the Hub's responses for session_id verification. Default is 10.
++        """,
++    ).tag(config=True)
++
+     hub_prefix = Unicode(
+         '/hub/',
+         help="""The URL prefix for the Hub itself.
+@@ -461,6 +485,18 @@
+         """
+         return handler.get_cookie('jupyterhub-session-id', '')
+ 
++    def validate_session_id(self, username, session_id):
++        if time.time() - self.last_session_id_validation > self.last_session_id_validation_cache_time:
++            self.last_session_id_validation = int(time.time())
++            url = url_path_join(
++                self.api_url, "authorizations/sessionid", quote(username, safe=''),
++            )
++            headers = {"sessionid": session_id}
++            self.last_session_id_validation_result = self._api_request(
++                'GET', url, allow_404=True, headers=headers
++            )
++        return self.last_session_id_validation_result
++
+     def get_user(self, handler):
+         """Get the Hub user for a given tornado handler.
+ 
+@@ -484,16 +520,33 @@
+         handler._cached_hub_user = user_model = None
+         session_id = self.get_session_id(handler)
+ 
+-        # check token first
+-        token = self.get_token(handler)
+-        if token:
+-            user_model = self.user_for_token(token, session_id=session_id)
++        if self.session_id_required and not session_id:
++            app_log.info("Unauthorized access. Only users with a session id are allowed.")
++            return {'name': '<session_id_required>', 'kind': 'User'}
++        elif self.session_id_required_user and not session_id and handler.request.uri.startswith('/user'):
++            app_log.info("Unauthorized access. Only users with a session id are allowed to access /user.")
++            return {'name': '<session_id_required>', 'kind': 'User'}
++        elif self.session_id_required or ( self.session_id_required_user and handler.request.uri.startswith('/user')):
++            token = self.get_token(handler)
++            if token:
++                user_model = self.user_for_token(token)
++                if user_model:
++                    handler._token_authenticated = True
++            if user_model is None:
++                user_model = self._get_user_cookie(handler)
+             if user_model:
+-                handler._token_authenticated = True
++                user_model = self.validate_session_id(user_model.get('name', ''), session_id)
++        else:
++            # check token first
++            token = self.get_token(handler)
++            if token:
++                user_model = self.user_for_token(token, session_id=session_id)
++                if user_model:
++                    handler._token_authenticated = True
+ 
+-        # no token, check cookie
+-        if user_model is None:
+-            user_model = self._get_user_cookie(handler)
++            # no token, check cookie
++            if user_model is None:
++                user_model = self._get_user_cookie(handler)
+ 
+         # cache result
+         handler._cached_hub_user = user_model
+@@ -904,10 +957,16 @@
+             # tries to redirect to login URL, 403 will be raised instead.
+             # This is not the best, but avoids problems that can be caused
+             # when get_current_user is allowed to raise.
+-            def raise_on_redirect(*args, **kwargs):
+-                raise HTTPError(
+-                    403, "{kind} {name} is not allowed.".format(**user_model)
+-                )
++            if user_model.get('name', '') == '<session_id_required>':
++                def raise_on_redirect(*args, **kwargs):
++                    raise HTTPError(
++                        401, "Please login to proceed."
++                    )
++            else:
++                def raise_on_redirect(*args, **kwargs):
++                    raise HTTPError(
++                        403, "{kind} {name} is not allowed.".format(**user_model)
++                    )
+ 
+             self.redirect = raise_on_redirect
+             return
diff --git a/Golden_Repo/j/Jupyter/jupyterlab-gitlab-2.0.0_jsc.patch b/Golden_Repo/j/Jupyter/jupyterlab-gitlab-2.0.0_jsc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a382b73c04e2bd356a7a1ce4813ab80d7cf9591d
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/jupyterlab-gitlab-2.0.0_jsc.patch
@@ -0,0 +1,23 @@
+diff
+--- jupyterlab-gitlab-2.0.0.orig/schema/drive.json    2019-05-02 08:22:45.219143000 +0200
++++ jupyterlab-gitlab-2.0.0/schema/drive.json         2019-05-02 08:25:15.392631000 +0200
+@@ -6,8 +6,8 @@
+   "properties": {
+     "baseUrl": {
+       "type": "string",
+-      "title": "The GitLab Base URL",
+-      "default": "https://gitlab.com"
++      "title": "JSC GitLab Base URL",
++      "default": "https://gitlab.version.fz-juelich.de"
+     },
+     "accessToken": {
+       "type": "string",
+@@ -18,7 +18,7 @@
+     "defaultRepo": {
+       "type": "string",
+       "title": "Default Repository",
+-      "default": ""
++      "default": "jupyter4jsc/j4j_notebooks"
+     }
+   },
+   "type": "object"
diff --git a/Golden_Repo/j/Jupyter/jupyterlab_github-2.0.0_jsc.patch b/Golden_Repo/j/Jupyter/jupyterlab_github-2.0.0_jsc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ebee87027b2ee62abbf2c08f58506edd7b898f35
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/jupyterlab_github-2.0.0_jsc.patch
@@ -0,0 +1,13 @@
+diff
+--- jupyterlab-github-2.0.0.orig/schema/drive.json     2018-10-10 21:14:53.986184891 +0200
++++ jupyterlab_github-2.0.0/schema/drive.json          2018-10-11 00:28:34.846777384 +0200
+@@ -18,7 +18,7 @@
+     "defaultRepo": {
+       "type": "string",
+       "title": "Default Repository",
+-      "default": ""
++      "default": "FZJ-JSC/jupyter-jsc-notebooks"
+     }
+   },
+   "type": "object"
+
diff --git a/Golden_Repo/j/Jupyter/jupyterlmod-packagejson.patch b/Golden_Repo/j/Jupyter/jupyterlmod-packagejson.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0d166fec22bceb14c1f704b3ee57d04831efe8c8
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/jupyterlmod-packagejson.patch
@@ -0,0 +1,17 @@
+diff -Naur jupyter-lmod-2.0.2.orig/jupyterlab/package.json jupyter-lmod-2.0.2/jupyterlab/package.json
+--- jupyter-lmod-2.0.2.orig/jupyterlab/package.json	2020-11-25 16:19:57.000000000 +0100
++++ jupyter-lmod-2.0.2/jupyterlab/package.json	2020-12-29 16:50:58.803504000 +0100
+@@ -31,10 +31,12 @@
+     "prepare": "npm run clean && npm run build"
+   },
+   "dependencies": {
+-    "@jupyterlab/application": ">=2.0.0",
++    "@jupyterlab/application": "^2.0.0",
++    "@jupyterlab/apputils": "^2.1.0",
+     "@jupyterlab/launcher": "^2.1.0"
+   },
+   "devDependencies": {
++    "@types/react": "^16.9.16",
+     "rimraf": "~2.6.2",
+     "typescript": "~3.7.3"
+   },
diff --git a/Golden_Repo/j/Jupyter/jupyterlmod-urlfile.patch b/Golden_Repo/j/Jupyter/jupyterlmod-urlfile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0b56aa3e3705f48801d287a08eaad4505016c81f
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/jupyterlmod-urlfile.patch
@@ -0,0 +1,37 @@
+diff -Naur jupyter-lmod-2.0.1/jupyterlab/src/index.ts jupyter-lmod-2.0.1_devel/jupyterlab/src/index.ts
+--- jupyter-lmod-2.0.1/jupyterlab/src/index.ts	2020-10-05 17:08:01.000000000 +0200
++++ jupyter-lmod-2.0.1_devel/jupyterlab/src/index.ts	2020-11-25 11:55:24.000000000 +0100
+@@ -244,7 +244,13 @@
+   const namespace = 'server-proxy';
+   const command = namespace + ':' + 'open';
+   for (let server_process of data.server_processes) {
+-    const url = PageConfig.getBaseUrl() + server_process.name + '/';
++
++    let urlfile = '';
++    if (server_process.launcher_entry.urlfile) {
++       urlfile =  server_process.launcher_entry.urlfile;
++    }
++    const url = PageConfig.getBaseUrl() + server_process.name + '/' + urlfile;
++    
+     const title = server_process.launcher_entry.title;
+     const newBrowserTab = server_process.new_browser_tab;
+     const id = namespace + ':' + server_process.name;
+diff -Naur jupyter-lmod-2.0.1/jupyterlmod/static/main.js jupyter-lmod-2.0.1_devel/jupyterlmod/static/main.js
+--- jupyter-lmod-2.0.1/jupyterlmod/static/main.js	2020-10-05 17:08:01.000000000 +0200
++++ jupyter-lmod-2.0.1_devel/jupyterlmod/static/main.js	2020-11-25 11:55:24.000000000 +0100
+@@ -316,10 +316,14 @@
+                 .addClass('new-' + server_process.name);
+ 
+             /* create our list item's link */
++            let urlfile = '';
++            if (server_process.launcher_entry.urlfile) {
++                urlfile =  server_process.launcher_entry.urlfile;
++            }
+             let entry_link = $('<a>')
+                 .attr('role', 'menuitem')
+                 .attr('tabindex', '-1')
+-                .attr('href', base_url + server_process.name + '/')
++                .attr('href', base_url + server_process.name + '/' + urlfile)
+                 .attr('target', '_blank')
+                 .text(server_process.launcher_entry.title);
+ 
diff --git a/Golden_Repo/j/Jupyter/jupyterserverproxy-urlfile.patch b/Golden_Repo/j/Jupyter/jupyterserverproxy-urlfile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..de883561447a477f8ad6286b61d0b93c07d0265a
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/jupyterserverproxy-urlfile.patch
@@ -0,0 +1,82 @@
+diff -Naur jupyter-server-proxy.orig/jupyterlab-server-proxy/src/index.ts jupyter-server-proxy/jupyterlab-server-proxy/src/index.ts
+--- jupyter-server-proxy.orig/jupyterlab-server-proxy/src/index.ts	2020-11-19 06:40:34.521630000 +0100
++++ jupyter-server-proxy/jupyterlab-server-proxy/src/index.ts	2020-11-19 06:41:35.023864000 +0100
+@@ -79,8 +79,11 @@
+     if (!server_process.launcher_entry.enabled) {
+       continue;
+     }
+-
+-    const url = PageConfig.getBaseUrl() + server_process.name + '/';
++    var urlfile = '';
++    if (server_process.launcher_entry.urlfile) {
++       urlfile =  server_process.launcher_entry.urlfile;
++    }
++    const url = PageConfig.getBaseUrl() + server_process.name + '/' + urlfile;
+     const title = server_process.launcher_entry.title;
+     const newBrowserTab = server_process.new_browser_tab;
+     const id = namespace + ':' + server_process.name;
+diff -Naur jupyter-server-proxy.orig/jupyter_server_proxy/api.py jupyter-server-proxy/jupyter_server_proxy/api.py
+--- jupyter-server-proxy.orig/jupyter_server_proxy/api.py	2020-11-19 06:40:34.516286000 +0100
++++ jupyter-server-proxy/jupyter_server_proxy/api.py	2020-11-19 06:41:35.015090000 +0100
+@@ -19,7 +19,8 @@
+                 'name': sp.name,
+                 'launcher_entry': {
+                     'enabled': sp.launcher_entry.enabled,
+-                    'title': sp.launcher_entry.title
++                    'title': sp.launcher_entry.title,
++                    'urlfile': sp.launcher_entry.urlfile,
+                 },
+                 'new_browser_tab' : sp.new_browser_tab
+             }
+diff -Naur jupyter-server-proxy.orig/jupyter_server_proxy/config.py jupyter-server-proxy/jupyter_server_proxy/config.py
+--- jupyter-server-proxy.orig/jupyter_server_proxy/config.py	2020-11-19 06:40:34.516753000 +0100
++++ jupyter-server-proxy/jupyter_server_proxy/config.py	2020-11-19 06:41:35.016181000 +0100
+@@ -99,7 +99,7 @@
+         ))
+     return handlers
+ 
+-LauncherEntry = namedtuple('LauncherEntry', ['enabled', 'icon_path', 'title'])
++LauncherEntry = namedtuple('LauncherEntry', ['enabled', 'icon_path', 'title', 'urlfile'])
+ ServerProcess = namedtuple('ServerProcess', [
+     'name', 'command', 'environment', 'timeout', 'absolute_url', 'port', 'mappath', 'launcher_entry', 'new_browser_tab'])
+ 
+@@ -116,7 +116,8 @@
+         launcher_entry=LauncherEntry(
+             enabled=le.get('enabled', True),
+             icon_path=le.get('icon_path'),
+-            title=le.get('title', name)
++            title=le.get('title', name),
++            urlfile=le.get('urlfile', ''),
+         ),
+         new_browser_tab=server_process_config.get('new_browser_tab', True)
+     )
+@@ -175,6 +176,10 @@
+             title
+               Title to be used for the launcher entry. Defaults to the name of the server if missing.
+ 
++            urlfile
++              URL file name and URL parameters to be added to the base URL of the launcher entry.
++              Default is none.
++
+           new_browser_tab
+             Set to True (default) to make the proxied server interface opened as a new browser tab. Set to False
+             to have it open a new JupyterLab tab. This has no effect in classic notebook.
+diff -Naur jupyter-server-proxy.orig/jupyter_server_proxy/static/tree.js jupyter-server-proxy/jupyter_server_proxy/static/tree.js
+--- jupyter-server-proxy.orig/jupyter_server_proxy/static/tree.js	2020-11-19 06:40:34.519694000 +0100
++++ jupyter-server-proxy/jupyter_server_proxy/static/tree.js	2020-11-19 06:41:35.020051000 +0100
+@@ -33,10 +33,14 @@
+                     .addClass('new-' + server_process.name);
+ 
+                 /* create our list item's link */
++                var urlfile = '';
++                if (server_process.launcher_entry.urlfile) {
++                    urlfile =  server_process.launcher_entry.urlfile;
++                }
+                 var $entry_link = $('<a>')
+                     .attr('role', 'menuitem')
+                     .attr('tabindex', '-1')
+-                    .attr('href', base_url + server_process.name + '/')
++                    .attr('href', base_url + server_process.name + '/' + urlfile)
+                     .attr('target', '_blank')
+                     .text(server_process.launcher_entry.title);
+ 
diff --git a/Golden_Repo/j/Jupyter/notebook-6.0.3_jsc.patch b/Golden_Repo/j/Jupyter/notebook-6.0.3_jsc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d7a9bb20d7d6eea484462bd8bf68c8e018546b4e
--- /dev/null
+++ b/Golden_Repo/j/Jupyter/notebook-6.0.3_jsc.patch
@@ -0,0 +1,143 @@
+diff
+--- notebook-6.0.3.orig/notebook/services/contents/filecheckpoints.py   2020-04-28 06:26:51.384296390 +0200
++++ notebook-6.0.3/notebook/services/contents/filecheckpoints.py        2020-04-28 06:30:55.139342947 +0200
+@@ -14,7 +14,7 @@
+ 
+ from jupyter_core.utils import ensure_dir_exists
+ from ipython_genutils.py3compat import getcwd
+-from traitlets import Unicode
++from traitlets import Unicode, Integer
+ 
+ from notebook import _tz as tz
+ 
+@@ -28,6 +28,35 @@
+     you want file-based checkpoints with another ContentsManager.
+     """
+ 
++    checkpoint_permissions = Integer(
++        0o644,
++        config=True,
++        help="""The permission of your checkpoint files.
++
++        By default, it is 0o644
++        """,
++    )
++
++    restore_permissions = Integer(
++        0o644,
++        config=True,
++        help="""The permission of a restored checkpoint.
++
++        By default, it is 0o644
++        """,
++    )
++
++    checkpoint_dir_umask = Integer(
++        0o022,
++        config=True,
++        help="""The umask for the checkpoint directory.
++
++        Keep in mind that it depends on your system umask, too.
++
++        By default, it is 0o022
++        """,
++    )
++
+     checkpoint_dir = Unicode(
+         '.ipynb_checkpoints',
+         config=True,
+@@ -50,21 +79,29 @@
+     # ContentsManager-dependent checkpoint API
+     def create_checkpoint(self, contents_mgr, path):
+         """Create a checkpoint."""
++        original_umask = os.umask(self.checkpoint_dir_umask)
+         checkpoint_id = u'checkpoint'
+         src_path = contents_mgr._get_os_path(path)
+         dest_path = self.checkpoint_path(checkpoint_id, path)
+         self._copy(src_path, dest_path)
+-        return self.checkpoint_model(checkpoint_id, dest_path)
++        os.chmod(dest_path, self.checkpoint_permissions)
++        ret = self.checkpoint_model(checkpoint_id, dest_path)
++        os.umask(original_umask)
++        return ret
+ 
+     def restore_checkpoint(self, contents_mgr, checkpoint_id, path):
+         """Restore a checkpoint."""
++        original_umask = os.umask(self.checkpoint_dir_umask)
+         src_path = self.checkpoint_path(checkpoint_id, path)
+         dest_path = contents_mgr._get_os_path(path)
+         self._copy(src_path, dest_path)
++        os.chmod(dest_path, self.restore_permissions)
++        os.umask(original_umask)
+ 
+     # ContentsManager-independent checkpoint API
+     def rename_checkpoint(self, checkpoint_id, old_path, new_path):
+         """Rename a checkpoint from old_path to new_path."""
++        original_umask = os.umask(self.checkpoint_dir_umask)
+         old_cp_path = self.checkpoint_path(checkpoint_id, old_path)
+         new_cp_path = self.checkpoint_path(checkpoint_id, new_path)
+         if os.path.isfile(old_cp_path):
+@@ -75,9 +112,11 @@
+             )
+             with self.perm_to_403():
+                 shutil.move(old_cp_path, new_cp_path)
++        os.umask(original_umask)
+ 
+     def delete_checkpoint(self, checkpoint_id, path):
+         """delete a file's checkpoint"""
++        original_umask = os.umask(self.checkpoint_dir_umask)
+         path = path.strip('/')
+         cp_path = self.checkpoint_path(checkpoint_id, path)
+         if not os.path.isfile(cp_path):
+@@ -86,23 +125,29 @@
+         self.log.debug("unlinking %s", cp_path)
+         with self.perm_to_403():
+             os.unlink(cp_path)
++        os.umask(original_umask)
+ 
+     def list_checkpoints(self, path):
+         """list the checkpoints for a given file
+ 
+         This contents manager currently only supports one checkpoint per file.
+         """
++        original_umask = os.umask(self.checkpoint_dir_umask)
+         path = path.strip('/')
+         checkpoint_id = "checkpoint"
+         os_path = self.checkpoint_path(checkpoint_id, path)
+         if not os.path.isfile(os_path):
++            os.umask(original_umask)
+             return []
+         else:
+-            return [self.checkpoint_model(checkpoint_id, os_path)]
++            ret = self.checkpoint_model(checkpoint_id, os_path)
++            os.umask(original_umask)
++            return [ret]
+ 
+     # Checkpoint-related utilities
+     def checkpoint_path(self, checkpoint_id, path):
+         """find the path to a checkpoint"""
++        original_umask = os.umask(self.checkpoint_dir_umask)
+         path = path.strip('/')
+         parent, name = ('/' + path).rsplit('/', 1)
+         parent = parent.strip('/')
+@@ -117,16 +162,19 @@
+         with self.perm_to_403():
+             ensure_dir_exists(cp_dir)
+         cp_path = os.path.join(cp_dir, filename)
++        os.umask(original_umask)
+         return cp_path
+ 
+     def checkpoint_model(self, checkpoint_id, os_path):
+         """construct the info dict for a given checkpoint"""
++        original_umask = os.umask(self.checkpoint_dir_umask)
+         stats = os.stat(os_path)
+         last_modified = tz.utcfromtimestamp(stats.st_mtime)
+         info = dict(
+             id=checkpoint_id,
+             last_modified=last_modified,
+         )
++        os.umask(original_umask)
+         return info
+ 
+     # Error Handling
+
diff --git a/Golden_Repo/j/JupyterCollection/JupyterCollection-2020.2.5-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb b/Golden_Repo/j/JupyterCollection/JupyterCollection-2020.2.5-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..3c95d6f138d593c2b7672401e04b22170c4fc4d9
--- /dev/null
+++ b/Golden_Repo/j/JupyterCollection/JupyterCollection-2020.2.5-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
@@ -0,0 +1,33 @@
+easyblock = 'Bundle'
+
+name = 'JupyterCollection'
+version = '2020.2.5'
+
+local_pysuffix = '-Python-3.8.5'
+
+homepage = 'http://www.jupyter.org'
+description = """
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+
+dependencies = [
+    ('JupyterKernel-Bash',       '0.7.1', '-' + version),
+    ('JupyterKernel-Cling',      '0.7',   '-' + version),
+    ('JupyterKernel-JavaScript', '5.2.0', '-' + version),
+    ('JupyterKernel-Julia',      '1.5.2', '-' + version),
+    ('JupyterKernel-Octave',     '6.1.0', '-' + version),
+    ('JupyterKernel-PyParaView', '5.8.1', '-' + version),
+    # ('JupyterKernel-PyQuantum',  '1.1',   '-' + version),
+    ('JupyterKernel-R',          '4.0.2', '-' + version),
+    ('JupyterKernel-Ruby',       '2.7.1', '-' + version),
+    ('JupyterProxy-XpraHTML5',   '0.3.0', '-' + version),
+    ('Jupyter', version, local_pysuffix),
+]
+
+skipsteps = ['configure', 'build', 'install', 'sanity_check']
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..65d3c8c014f31e4058e31c0235782028857441e8
--- /dev/null
+++ b/Golden_Repo/j/JupyterKernel-Bash/JupyterKernel-Bash-0.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,98 @@
+easyblock = 'Bundle'
+
+name = 'JupyterKernel-Bash'
+version = '0.7.1'
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+local_pysuffix = '-Python-%(pyver)s'
+
+homepage = 'https://github.com/takluyver/bash_kernel'
+description = """
+Native Bash kernel for Jupyter.
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+]
+
+dependencies = [
+    ('Python', '3.8.5'),
+    ('Jupyter', local_jupyterver, local_pysuffix),
+]
+
+local_common_opts = {
+    'req_py_majver': '3',
+    'req_py_minver': '0'
+}
+
+exts_defaultclass = 'PythonPackage'
+exts_filter = ('python -c "import %(ext_name)s"', '')
+exts_default_options = {
+    'download_dep_fail': True,
+    'source_urls': [PYPI_SOURCE],
+    'use_pip': True,
+}
+
+exts_list = [
+    # 0.7.2 fails with BackendUnavailable. Might be fixable --no-use-pep517
+    ('bash_kernel', '0.7.1', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '29f895819e076e3f225e37034b70b5265a559e2964e020c942024f51ea6153e8')]),
+        ('use_pip',  True),
+    ])),
+]
+
+local_jupyter_path = 'share/jupyter'
+
+modextrapaths = {
+    'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'],
+    'JUPYTER_PATH': ['share/jupyter'],  # add search path for kernelspecs
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    # Create virtual environment to ensure we install in the correct directory !!!
+    'python3 -m venv %(installdir)s --system-site-packages',
+    (
+        '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n'
+        '#!/bin/bash\n'
+        'source %%(installdir)s/bin/activate\n'
+        'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH}\n'
+        'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n'
+        'EOF'
+    ) % (local_jupyter_path),
+
+    # Jupyter Kernel: Bash - https://github.com/takluyver/bash_kernel
+    # installs bash_kernel in $JUPYTER_DATA_DIR/kernels
+    'source %(builddir)s/env.sh && ${EBROOTPYTHON}/bin/python3 -m bash_kernel.install --user',
+    'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share',
+
+    # Ensure we remove the virtuel environment to avoid wrong search path for python packages
+    'rm %(installdir)s/pyvenv.cfg',
+    'rm -r %(installdir)s/bin',
+]
+
+# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
+# full_sanity_check = True
+sanity_check_paths = {
+    'files': [
+        'share/jupyter/kernels/bash/kernel.json',
+    ],
+    'dirs': [
+        'lib/python%(pyshortver)s/site-packages',
+        'share/jupyter/kernels/bash/',
+    ],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterKernel-Cling/JupyterKernel-Cling-0.7-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterKernel-Cling/JupyterKernel-Cling-0.7-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..8de48fc00e6eafc78dd98cda09d2bc72fde8d6cb
--- /dev/null
+++ b/Golden_Repo/j/JupyterKernel-Cling/JupyterKernel-Cling-0.7-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,93 @@
+easyblock = 'Bundle'
+
+name = 'JupyterKernel-Cling'
+version = '0.7'
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+local_pysuffix = '-Python-%(pyver)s'
+
+homepage = 'https://github.com/root-project/cling'
+description = """
+Native C kernel for Jupyter.
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+]
+
+dependencies = [
+    ('Python', '3.8.5'),
+    ('Jupyter', local_jupyterver, local_pysuffix),
+    ('Cling', version),
+]
+
+local_jupyter_path = 'share/jupyter'
+
+modextrapaths = {
+    'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'],
+    'JUPYTER_PATH': ['share/jupyter'],  # add search path for kernelspecs
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    # Create virtual environment to ensure we install in the correct directory !!!
+    'python3 -m venv %(installdir)s --system-site-packages',
+    (
+        '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n'
+        '#!/bin/bash\n'
+        'source %%(installdir)s/bin/activate\n'
+        'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH}\n'
+        'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n'
+        'EOF'
+    ) % (local_jupyter_path),
+
+    # Jupyter Kernel: Cling (C++)
+    'source %(builddir)s/env.sh && pip3 install ${EBROOTCLING}/share/cling/Jupyter/kernel',
+    (
+        'source %(builddir)s/env.sh && '
+        '    jupyter-kernelspec install --prefix=%(installdir)s ${EBROOTCLING}/share/cling/Jupyter/kernel/cling-cpp17'
+    ),
+
+    # correct shebang to correct python binary
+    (
+        'source %(builddir)s/env.sh && '
+        '    abs2python="#! ${EBROOTPYTHON}/bin/python" && '
+        '    sed "1s@^.*@$abs2python@g" -i %(installdir)s/bin/jupyter-cling-kernel'
+    ),
+    'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share',
+
+    # Ensure we remove the virtuel environment to avoid wrong search path for python packages
+    'rm %(installdir)s/pyvenv.cfg',
+    'rm %(installdir)s/bin/python',
+    'rm %(installdir)s/bin/python3',
+    'rm %(installdir)s/bin/activate',
+    'rm %(installdir)s/bin/activate*',
+    'rm %(installdir)s/bin/easy_install*',
+    'rm %(installdir)s/bin/pip*',
+]
+
+# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
+# full_sanity_check = True
+sanity_check_paths = {
+    'files': [
+        'share/jupyter/kernels/cling-cpp17/kernel.json',
+    ],
+    'dirs': [
+        # 'lib/python%(pyshortver)s/site-packages',
+        'share/jupyter/kernels/cling-cpp17/',
+    ],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterKernel-JavaScript/JupyterKernel-JavaScript-5.2.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterKernel-JavaScript/JupyterKernel-JavaScript-5.2.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..63f3f746f56cbc0dc82f569bf0ad6eff20181df8
--- /dev/null
+++ b/Golden_Repo/j/JupyterKernel-JavaScript/JupyterKernel-JavaScript-5.2.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,71 @@
+easyblock = 'Bundle'
+
+name = 'JupyterKernel-JavaScript'
+version = '5.2.0'
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+local_pysuffix = '-Python-3.8.5'
+
+homepage = 'https://www.npmjs.com/package/ijavascript'
+description = """
+Native JavaScript kernel for Jupyter.
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+]
+
+dependencies = [
+    ('Jupyter', local_jupyterver, local_pysuffix),
+]
+
+local_jupyter_path = 'share/jupyter'
+
+modextrapaths = {
+    'PATH': ['bin'],
+    'NODE_PATH': ['lib/node_modules'],  # npm´s search path to extra modules
+    'JUPYTER_PATH': ['share/jupyter'],  # add search path for kernelspecs
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    (
+        '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n'
+        '#!/bin/bash\n'
+        'export PATH=%%(installdir)s/bin:${PATH}\n'
+        'export NODE_PATH=%%(installdir)s/lib/node_modules\n'
+        'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n'
+        'EOF'
+    ) % (local_jupyter_path),
+
+    'source %(builddir)s/env.sh && npm install ijavascript@5.2.0 -g --prefix %(installdir)s',
+    # installs ijavascript in $JUPYTER_DATA_DIR/kernels
+    'source %(builddir)s/env.sh && ijsinstall --install=local',
+    'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share',
+]
+
+# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
+# full_sanity_check = True
+sanity_check_paths = {
+    'files': [
+        'share/jupyter/kernels/javascript/kernel.json',
+    ],
+    'dirs': [
+        'lib/node_modules/',
+        'share/jupyter/kernels/javascript/',
+    ],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.5.2-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.5.2-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..735b3cd4ce2e2a3e87d92493c03d91c7d5347ef9
--- /dev/null
+++ b/Golden_Repo/j/JupyterKernel-Julia/JupyterKernel-Julia-1.5.2-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,117 @@
+easyblock = 'Bundle'
+
+name = 'JupyterKernel-Julia'
+version = '1.5.2'
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+local_pysuffix = '-Python-%(pyver)s'
+
+homepage = 'https://github.com/IRkernel/IRkernel'
+description = """
+Native R kernel for Jupyter.
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+]
+
+dependencies = [
+    ('Python', '3.8.5'),
+    ('Jupyter', local_jupyterver, local_pysuffix),
+    ('Julia', version),
+]
+
+local_common_opts = {
+    'req_py_majver': '3',
+    'req_py_minver': '0'
+}
+
+exts_defaultclass = 'PythonPackage'
+exts_filter = ('python -c "import %(ext_name)s"', '')
+exts_default_options = {
+    'download_dep_fail': True,
+    'source_urls': [PYPI_SOURCE],
+    'use_pip': True,
+}
+
+exts_list = [
+    ('julia', '0.5.3', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'b13207125709fdba069a25c4e54ff366f0bc308807b2aa0f3b66924101799c58')]),
+        ('use_pip',  True),
+    ])),
+]
+
+local_jupyter_path = 'share/jupyter'
+local_julia_depot_path = "%(installdir)s/share/julia/site/"  # for Julia packages needed for Jupyter
+
+modextrapaths = {
+    'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'],
+    'JUPYTER_PATH': ['share/jupyter'],  # add search path for kernelspecs
+}
+
+modextravars = {
+    'JULIA_DEPOT_PATH': local_julia_depot_path,
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    # Create virtual environment to ensure we install in the correct directory !!!
+    'python3 -m venv %(installdir)s --system-site-packages',
+    (
+        '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n'
+        '#!/bin/bash\n'
+        'source %%(installdir)s/bin/activate\n'
+        'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH}\n'
+        ''
+        'export JULIA_DEPOT_PATH=%s\n'
+        'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n'
+        'EOF'
+    ) % (local_julia_depot_path, local_jupyter_path),
+
+    # installs ijulia in JULIA_DEPOT_PATH and kernel in $JUPYTER_DATA_DIR/kernels
+    'source %(builddir)s/env.sh && julia -e \'using Pkg; Pkg.add("IJulia"); Pkg.build("IJulia")\'',
+
+    # to trigger the precompilation
+    'source %(builddir)s/env.sh && julia -e \'using IJulia\'',
+
+    # adjust permissions of precompiled files
+    'for i in $(find %s); do chmod +r $i; done' % local_julia_depot_path,
+
+    # configure Python<->Julia bridge (of python package julia)
+    'source %(builddir)s/env.sh && python -c "import julia; julia.install()"',
+
+    # Ensure we remove the virtuel environment to avoid wrong search path for python packages
+    'rm %(installdir)s/pyvenv.cfg',
+    'rm %(installdir)s/bin/python',
+    'rm %(installdir)s/bin/python3',
+    'rm %(installdir)s/bin/activate',
+    'rm %(installdir)s/bin/activate*',
+    'rm %(installdir)s/bin/easy_install*',
+    'rm %(installdir)s/bin/pip*',
+]
+
+# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
+# full_sanity_check = True
+sanity_check_paths = {
+    'files': [
+        'share/jupyter/kernels/julia-%(version_major_minor)s/kernel.json',
+    ],
+    'dirs': [
+        'lib/python%(pyshortver)s/site-packages',
+        'share/jupyter/kernels/julia-%(version_major_minor)s/',
+    ],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterKernel-Octave/JupyterKernel-Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterKernel-Octave/JupyterKernel-Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c712e30c7783628b321266ffa1c3e9b35d38f66e
--- /dev/null
+++ b/Golden_Repo/j/JupyterKernel-Octave/JupyterKernel-Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,137 @@
+easyblock = 'Bundle'
+
+name = 'JupyterKernel-Octave'
+version = '6.1.0'
+local_octavever = '6.1.0'
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+local_pysuffix = '-Python-%(pyver)s'
+
+homepage = 'https://github.com/Calysto/octave_kernel'
+description = """
+Native Octave kernel for Jupyter.
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+    ('Octave', local_octavever, '-nompi'),  # ensure it is available
+]
+
+dependencies = [
+    ('Python', '3.8.5'),
+    ('Jupyter', local_jupyterver, local_pysuffix),
+    # no dependency to Octave as it is loaded in kernel.sh
+]
+
+local_jupyter_path = 'share/jupyter'
+local_kernel_dir = 'octave'
+local_kernel_name = 'Octave-%s' % local_octavever
+
+modextrapaths = {
+    'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'],
+    'JUPYTER_PATH': ['share/jupyter'],  # add search path for kernelspecs
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    # Create virtual environment to ensure we install in the correct directory !!!
+    'python3 -m venv %(installdir)s --system-site-packages',
+    (
+        '{ cat > %%(builddir)s/env.sh; } << \'EOF\'\n'
+        '#!/bin/bash\n'
+        'source %%(installdir)s/bin/activate\n'
+        'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH}\n'
+        'export JUPYTER_DATA_DIR=%%(installdir)s/%s\n'
+        'EOF'
+    ) % (local_jupyter_path),
+
+    # enable use of Octave from production stage Stages/2020
+    'source %(builddir)s/env.sh && pip3 install ipykernel ',
+    'rm -rf %(installdir)s/share/jupyter/kernels/',  # remove any kernel installed by ipykernel
+    'source %(builddir)s/env.sh && pip3 install ipyparallel ',
+
+    # install Python package octave_kernel
+    'source %(builddir)s/env.sh && pip3 install octave_kernel==0.32.0 ',
+
+    # write kernel.sh
+    (
+        '{ cat >> %%(builddir)s/env.sh; } << \'EOF\'\n'
+        'export KERNEL_DIR=%s\n'
+        'export KERNEL_NAME=%s\n'
+        'EOF'
+    ) % (local_kernel_dir, local_kernel_name),
+    (
+        '{ source %%(builddir)s/env.sh && '
+        '  cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << \'EOF\'\n'
+        '#!/bin/bash \n'
+        '\n'
+        '# Load required modules \n'
+        'module purge \n'
+        'module load Stages/2020 \n'
+        'module load GCC/9.3.0 \n'
+        '\n' \
+        'module load Python/%%(pyver)s \n'
+        'module load Jupyter/%s%s \n'
+        'module load Octave/%s-nompi \n'
+        '\n'
+        'export PYTHONPATH=%%(installdir)s/lib/python%%(pyshortver)s/site-packages:${PYTHONPATH} \n'
+        '\n'
+        'exec python $@\n'
+        'EOF'
+    ) % (local_kernel_dir, local_jupyterver, local_pysuffix, local_octavever),
+    'source %(builddir)s/env.sh && chmod +x %(installdir)s/share/jupyter/kernels/${KERNEL_DIR}/kernel.sh',
+
+    # write kernel.json
+    (
+        '{ source %%(builddir)s/env.sh && '
+        '  cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n'
+        '{ \n'
+        '  "argv": [ \n'
+        '    "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n'
+        '    "-m", \n'
+        '    "octave_kernel", \n'
+        '    "-f", \n'
+        '    "{connection_file}" \n'
+        '  ], \n'
+        '  "display_name": "%s", \n'
+        '  "mimetype": "text/x-octave", \n'
+        '  "language": "python", \n'
+        '  "name": "%s" \n'
+        '}\n'
+        'EOF'
+    ) % (local_kernel_dir, local_kernel_dir, local_kernel_name, local_kernel_name),
+
+    # ensure correct permissions
+    'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share',
+
+    # Ensure we remove the virtuel environment to avoid wrong search path for python packages
+    'rm %(installdir)s/pyvenv.cfg',
+    'rm -r %(installdir)s/bin',
+]
+
+# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
+# full_sanity_check = True
+sanity_check_paths = {
+    'files': [
+        'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir,
+        'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir,
+    ],
+    'dirs': [
+        'lib/python%(pyshortver)s/site-packages',
+        'share/jupyter/kernels/octave/',
+    ],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterKernel-PyParaView/JupyterKernel-PyParaView-5.8.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterKernel-PyParaView/JupyterKernel-PyParaView-5.8.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..02ad2914a3351aa6ab1ef393d1bc817069fdb2e4
--- /dev/null
+++ b/Golden_Repo/j/JupyterKernel-PyParaView/JupyterKernel-PyParaView-5.8.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,130 @@
+easyblock = 'Binary'
+
+name = 'JupyterKernel-PyParaView'
+version = '5.8.1'
+local_paraviewver = '5.8.1'
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+local_pysuffix = '-Python-%(pyver)s'
+
+homepage = 'https://www.paraview.org'
+description = """
+Special ParaView kernel for Jupyter.
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+sources = [
+    ('logo-128x128.png'),
+    ('logo-32x32.png'),
+    ('logo-64x64.png'),
+]
+
+builddependencies = [
+    ('binutils', '2.34'),
+    # ('ParaView', local_paraviewver, '-EGL' + local_pysuffix, ('gpsmkl', '2020')),  # ensure it is available
+]
+
+dependencies = [
+    ('Python', '3.8.5'),
+    ('Jupyter', local_jupyterver, local_pysuffix),
+]
+
+local_kernel_dir = 'pyparaview'
+local_kernel_name = 'PyParaView-%s' % local_paraviewver
+
+modextrapaths = {
+    'JUPYTER_PATH': ['share/jupyter'],  # add search path for kernelspecs
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is first entry in JUPYTHER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    (
+        '{ cat >> %%(builddir)s/env.sh; } << \'EOF\'\n'
+        'export KERNEL_DIR=%s\n'
+        'export KERNEL_NAME=%s\n'
+        'EOF'
+    ) % (local_kernel_dir, local_kernel_name),
+    'source %%(builddir)s/env.sh && python -m ipykernel install --name=%s --prefix=%%(installdir)s' % local_kernel_dir,
+
+    # write logo image
+    (
+        'source %%(builddir)s/env.sh && '
+        '    cp %%(builddir)s/logo-32x32.png %%(installdir)s/share/jupyter/kernels/%s/logo-32x32.png'
+    ) % (local_kernel_dir),
+    (
+        'source %%(builddir)s/env.sh && '
+        '    cp %%(builddir)s/logo-64x64.png %%(installdir)s/share/jupyter/kernels/%s/logo-64x64.png'
+    ) % (local_kernel_dir),
+    (
+        'source %%(builddir)s/env.sh && '
+        '    cp %%(builddir)s/logo-128x128.png %%(installdir)s/share/jupyter/kernels/%s/logo-128x128.png'
+    ) % (local_kernel_dir),
+
+    # write kernel.sh
+    (
+        '{ source %%(builddir)s/env.sh && '
+        '  cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.sh; } << \'EOF\'\n'
+        '#!/bin/bash \n'
+        '\n'
+        '# Load required modules \n'
+        'module purge \n'
+        'module use $OTHERSTAGES \n'
+        'module load Stages/2020 \n'
+        'module load GCC/9.3.0 \n'
+        'module load ParaStationMPI \n'
+        'module load Python/%%(pyver)s \n'
+        'module load Jupyter/%s%s \n'
+        '\n'
+        'module load ParaView/%s-EGL%s \n'
+        'module unload VTK \n'
+        '\n'
+        'exec python -m ipykernel $@\n'
+        'EOF'
+    ) % (local_kernel_dir,
+         local_jupyterver, local_pysuffix,
+         local_paraviewver, local_pysuffix),
+    'source %(builddir)s/env.sh && chmod +x %(installdir)s/share/jupyter/kernels/${KERNEL_DIR}/kernel.sh',
+
+    # write kernel.json
+    (
+        '{ source %%(builddir)s/env.sh && '
+        '  cat > %%(installdir)s/share/jupyter/kernels/%s/kernel.json; } << \'EOF\'\n'
+        '{ \n'
+        '  "argv": [ \n'
+        '    "%%(installdir)s/share/jupyter/kernels/%s/kernel.sh", \n'
+        '    "-m", \n'
+        '    "ipykernel_launcher", \n'
+        '    "-f", \n'
+        '    "{connection_file}" \n'
+        '  ], \n'
+        '  "display_name": "%s", \n'
+        '  "language": "python", \n'
+        '  "name": "%s" \n'
+        '}\n'
+        'EOF'
+    ) % (local_kernel_dir, local_kernel_dir, local_kernel_name, local_kernel_name),
+]
+
+# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
+# full_sanity_check = True
+sanity_check_paths = {
+    'files': [
+        'share/jupyter/kernels/%s/kernel.sh' % local_kernel_dir,
+        'share/jupyter/kernels/%s/kernel.json' % local_kernel_dir,
+    ],
+    'dirs': [
+        'share/jupyter/kernels/',
+    ],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterKernel-R/JupyterKernel-R-4.0.2-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterKernel-R/JupyterKernel-R-4.0.2-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ee02c803106fcea641d1bd70912d2ad3052aa32e
--- /dev/null
+++ b/Golden_Repo/j/JupyterKernel-R/JupyterKernel-R-4.0.2-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,61 @@
+easyblock = 'Bundle'
+
+name = 'JupyterKernel-R'
+version = '4.0.2'
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+local_pysuffix = '-Python-3.8.5'
+
+homepage = 'https://github.com/IRkernel/IRkernel'
+description = """
+Native R kernel for Jupyter.
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+]
+
+dependencies = [
+    ('Jupyter', local_jupyterver, local_pysuffix),
+    ('R', '4.0.2', '-nompi'),
+]
+
+modextrapaths = {
+    'JUPYTER_PATH': 'share/jupyter',  # add search path for kernelspecs
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    # Jupyter Kernel: R - https://github.com/IRkernel/IRkernel
+    # installs R kernel in $EBROOTJUPYTER/share/jupyter/kernels
+    'R -e \'IRkernel::installspec(name="ir40", displayname="R 4.0", prefix="%(installdir)s")\'',
+
+    # force options(bitmapType='cairo') -> https://github.com/IRkernel/IRkernel/issues/388
+    (
+        'sed -i "s#IRkernel::main()#options(bitmapType=\'cairo\') ; IRkernel::main()#g" '
+        '       %(installdir)s/share/jupyter/kernels/ir40/kernel.json'
+    ),
+]
+
+sanity_check_paths = {
+    'files': [
+        'share/jupyter/kernels/ir40/kernel.json',
+    ],
+    'dirs': [
+        'share/jupyter/kernels/ir40/',
+    ],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterKernel-Ruby/JupyterKernel-Ruby-2.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterKernel-Ruby/JupyterKernel-Ruby-2.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..a88416c91842db501138d1430faf784f9e915615
--- /dev/null
+++ b/Golden_Repo/j/JupyterKernel-Ruby/JupyterKernel-Ruby-2.7.1-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,65 @@
+easyblock = 'Bundle'
+
+name = 'JupyterKernel-Ruby'
+version = '2.7.1'
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+local_pysuffix = '-Python-3.8.5'
+
+homepage = 'https://github.com/SciRuby/iruby'
+description = """
+Native Ruby kernel for Jupyter.
+Project Jupyter exists to develop open-source software, open-standards, and services
+for interactive computing across dozens of programming languages.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+]
+
+dependencies = [
+    ('Python',  '3.8.5'),
+    ('Jupyter', local_jupyterver, local_pysuffix),
+    ('Ruby',    '2.7.1'),
+]
+
+local_jupyter_path = 'share/jupyter'
+
+modextrapaths = {
+    'JUPYTER_PATH': ['share/jupyter'],  # add search path for kernelspecs
+}
+
+# Ensure that the user-specific $HOME/.local/share/jupyter is always first entry in JUPYTHER_PATH
+modluafooter = """
+prepend_path("JUPYTER_PATH", pathJoin(os.getenv("HOME"), ".local/share/jupyter"))
+"""
+
+postinstallcmds = [
+    'echo "#!/bin/bash" > %(builddir)s/env.sh',
+    'echo "export JUPYTER_DATA_DIR=%%(installdir)s/%s" >> %%(builddir)s/env.sh' % local_jupyter_path,
+
+    # install Ruby kernel in $JUPYTHER_PATH
+    'source %(builddir)s/env.sh && iruby register --force ',
+
+    # ensure correct permissions
+    'source %(builddir)s/env.sh && chmod -R o+x %(installdir)s/share',
+]
+
+# specify that Bundle easyblock should run a full sanity check, rather than just trying to load the module
+# full_sanity_check = True
+sanity_check_paths = {
+    'files': [
+        'share/jupyter/kernels/ruby/kernel.json',
+    ],
+    'dirs': [
+        'share/jupyter/kernels/ruby/',
+    ],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb b/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..8fde03a92d49c001e80d348d9bd7c8bc68a240b3
--- /dev/null
+++ b/Golden_Repo/j/JupyterProxy-XpraHTML5/JupyterProxy-XpraHTML5-0.3.0-gcccoremkl-9.3.0-2020.2.254-2020.2.5.eb
@@ -0,0 +1,57 @@
+easyblock = 'PythonBundle'
+
+name = 'JupyterProxy-XpraHTML5'
+version = '0.3.0'
+
+local_jupyterver = '2020.2.5'
+versionsuffix = '-' + local_jupyterver
+
+homepage = 'https://xpra.org'
+description = """
+Jupyter proxy for Xpra HTML5 sessions.
+Xpra is an open-source multi-platform persistent remote display server and client
+for forwarding applications and desktop screens.
+"""
+
+site_contacts = 'j.goebbert@fz-juelich.de'
+
+toolchain = {'name': 'gcccoremkl', 'version': '9.3.0-2020.2.254'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('binutils', '2.34'),
+]
+
+dependencies = [
+    ('Python', '3.8.5'),
+    ('Jupyter', local_jupyterver, '-Python-%(pyver)s'),
+]
+
+exts_defaultclass = 'PythonPackage'
+exts_default_options = {
+    'download_dep_fail': True,
+    'source_urls': [PYPI_SOURCE],
+    'use_pip': True,
+}
+
+local_common_opts = {
+    'req_py_majver': '3',
+    'req_py_minver': '0'
+}
+
+exts_list = [
+    ('jupyter-xprahtml5-proxy', '0.3.0', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', 'db852682e8e366091e6a3984b60ac3d2e6b3197be2ef074440c11cb09e23b80b')]),
+        ('source_urls', ['https://github.com/FZJ-JSC/jupyter-xprahtml5-proxy/archive/']),
+        ('source_tmpl', 'v0.3.0_devel.tar.gz'),
+        ('patches', ['jupyter_xprahtml5_proxy-launch_xpra.patch']),
+        ('modulename', 'jupyter_xprahtml5_proxy'),
+    ])),
+]
+
+sanity_check_paths = {
+    'files': [],
+    'dirs': ['lib/python%(pyshortver)s/site-packages'],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/j/JupyterProxy-XpraHTML5/jupyter_xprahtml5_proxy-launch_xpra.patch b/Golden_Repo/j/JupyterProxy-XpraHTML5/jupyter_xprahtml5_proxy-launch_xpra.patch
new file mode 100644
index 0000000000000000000000000000000000000000..329d2ac2728fc42991d54a2f7a74e9c081fc50b0
--- /dev/null
+++ b/Golden_Repo/j/JupyterProxy-XpraHTML5/jupyter_xprahtml5_proxy-launch_xpra.patch
@@ -0,0 +1,27 @@
+diff -Naur jupyter-xprahtml5-proxy.orig/jupyter_xprahtml5_proxy/share/launch_xpra.sh jupyter-xprahtml5-proxy/jupyter_xprahtml5_proxy/share/launch_xpra.sh
+--- jupyter-xprahtml5-proxy.orig/jupyter_xprahtml5_proxy/share/launch_xpra.sh   2020-11-19 00:13:39.000000000 +0100
++++ jupyter-xprahtml5-proxy/jupyter_xprahtml5_proxy/share/launch_xpra.sh        2020-11-20 18:49:09.557792000 +0100
+@@ -5,10 +5,17 @@
+ # Do it here.
+
+ # example
+-# module purge > /dev/null
+-# module use $OTHERSTAGES > /dev/null
+-# module load Stages/2020 > /dev/null
+-# module load GCCcore/.9.3.0 > /dev/null
+-# module load xpra/4.0.4-Python-3.8.5 > /dev/null
++module purge
++module use $OTHERSTAGES
++module load Stages/2020
++module load GCCcore/.9.3.0
++module load xpra/4.0.4-Python-3.8.5
++module load jsc-xdg-menu/.2020.3
++
++if ! command -v xterm &> /dev/null
++then
++    echo "xterm not found - trying to load the xterm-module"
++    module load xterm
++fi
+
+ xpra "$@"
+
diff --git a/Golden_Repo/jurecadc_overlay/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb b/Golden_Repo/jurecadc_overlay/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
index ddee966f3e5b79e371d41631ff7432683350fd79..7210f37bc48a792d042c384051407ef0e62e7057 100644
--- a/Golden_Repo/jurecadc_overlay/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
+++ b/Golden_Repo/jurecadc_overlay/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
@@ -36,7 +36,7 @@ builddependencies = [
     ('archspec', '0.1.0', '-Python-%(pyver)s'),
 ]
 dependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
     ('Python', '3.8.5'),
     ('libpng', '1.6.37'),
     ('libjpeg-turbo', '2.0.5'),
diff --git a/Golden_Repo/juwelsbooster_overlay/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb b/Golden_Repo/juwelsbooster_overlay/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
index ddee966f3e5b79e371d41631ff7432683350fd79..7210f37bc48a792d042c384051407ef0e62e7057 100644
--- a/Golden_Repo/juwelsbooster_overlay/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
+++ b/Golden_Repo/juwelsbooster_overlay/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
@@ -36,7 +36,7 @@ builddependencies = [
     ('archspec', '0.1.0', '-Python-%(pyver)s'),
 ]
 dependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
     ('Python', '3.8.5'),
     ('libpng', '1.6.37'),
     ('libjpeg-turbo', '2.0.5'),
diff --git a/Golden_Repo/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb b/Golden_Repo/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
index b7411d242a805cb6bf5f3f11ae0e693ba31e223b..3a53f84ceb7dd4b9f45a5bdd24bf46daaac26f6c 100644
--- a/Golden_Repo/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
+++ b/Golden_Repo/l/LAMMPS/LAMMPS-29Oct2020-gpsmkl-2020-CUDA.eb
@@ -36,7 +36,7 @@ builddependencies = [
     ('archspec', '0.1.0', '-Python-%(pyver)s'),
 ]
 dependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
     ('Python', '3.8.5'),
     ('libpng', '1.6.37'),
     ('libjpeg-turbo', '2.0.5'),
diff --git a/Golden_Repo/l/libxsmm/libxsmm-1.16.1-GCC-9.3.0.eb b/Golden_Repo/l/libxsmm/libxsmm-1.16.1-GCC-9.3.0.eb
index fa00a133155d8ad92ca38b7c9140c67c8f9e6db0..89152e411f290f6a40395301a61b0b8e813ecd14 100644
--- a/Golden_Repo/l/libxsmm/libxsmm-1.16.1-GCC-9.3.0.eb
+++ b/Golden_Repo/l/libxsmm/libxsmm-1.16.1-GCC-9.3.0.eb
@@ -15,7 +15,7 @@ sources = ['%(version)s.tar.gz']
 source_urls = ['https://github.com/hfp/libxsmm/archive/']
 
 dependencies = [
-    ('imkl', '2020.2.254', '', True),
+    ('imkl', '2020.2.254', '', SYSTEM),
 ]
 
 # install both static and dynamic version
diff --git a/Golden_Repo/l/libxsmm/libxsmm-1.16.1-iccifort-2020.2.254-GCC-9.3.0.eb b/Golden_Repo/l/libxsmm/libxsmm-1.16.1-iccifort-2020.2.254-GCC-9.3.0.eb
index c46b09870e6687143d89f2af3f793fa669214f83..e424c8064e7b6844838cacdf2ad6b43828fb3615 100644
--- a/Golden_Repo/l/libxsmm/libxsmm-1.16.1-iccifort-2020.2.254-GCC-9.3.0.eb
+++ b/Golden_Repo/l/libxsmm/libxsmm-1.16.1-iccifort-2020.2.254-GCC-9.3.0.eb
@@ -15,7 +15,7 @@ sources = ['%(version)s.tar.gz']
 source_urls = ['https://github.com/hfp/libxsmm/archive/']
 
 dependencies = [
-    ('imkl', '2020.2.254', '', True),
+    ('imkl', '2020.2.254', '', SYSTEM),
 ]
 
 # install both static and dynamic version
diff --git a/Golden_Repo/m/magma/magma-2.5.4-gcccoremkl-9.3.0-2020.2.254.eb b/Golden_Repo/m/magma/magma-2.5.4-gcccoremkl-9.3.0-2020.2.254.eb
index 53c0ff98cae3078e56396775c7795f3713bafc30..f4def944cc3a11eb0bd00343ed7a9211df35b8b0 100644
--- a/Golden_Repo/m/magma/magma-2.5.4-gcccoremkl-9.3.0-2020.2.254.eb
+++ b/Golden_Repo/m/magma/magma-2.5.4-gcccoremkl-9.3.0-2020.2.254.eb
@@ -22,7 +22,7 @@ builddependencies = [
 ]
 
 dependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
 ]
 
 # make sure both static and shared libs are built
diff --git a/Golden_Repo/o/Octave/Octave-5.2.0-gpsmkl-2020.eb b/Golden_Repo/o/Octave/Octave-5.2.0-gpsmkl-2020.eb
index d64db9edde4b14e101edbeb7216fa4bf4718b5b6..7ba5b3411e29ac03d42f3a0faa7d8a941d06661a 100644
--- a/Golden_Repo/o/Octave/Octave-5.2.0-gpsmkl-2020.eb
+++ b/Golden_Repo/o/Octave/Octave-5.2.0-gpsmkl-2020.eb
@@ -35,7 +35,7 @@ dependencies = [
     ('GLPK', '4.65'),
     ('GL2PS', '1.4.2'),
     ('gnuplot', '5.2.8'),
-    ('Java', '1.8', '', True),
+    ('Java', '1.8', '', SYSTEM),
     ('OpenGL', '2020'),
     ('freeglut', '3.2.1'),
     ('zlib', '1.2.11'),
diff --git a/Golden_Repo/o/Octave/Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-nompi.eb b/Golden_Repo/o/Octave/Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-nompi.eb
index 9b1e57e406f10ea2d54eec8bd9673f8d97323a2d..dff7022148519d11b831f92623c453785bc3ee76 100644
--- a/Golden_Repo/o/Octave/Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-nompi.eb
+++ b/Golden_Repo/o/Octave/Octave-6.1.0-gcccoremkl-9.3.0-2020.2.254-nompi.eb
@@ -37,7 +37,7 @@ dependencies = [
     ('GLPK', '4.65'),
     ('GL2PS', '1.4.2'),
     ('gnuplot', '5.2.8'),
-    ('Java', '15', '', True),
+    ('Java', '15', '', SYSTEM),
     ('OpenGL', '2020'),
     ('freeglut', '3.2.1'),
     ('zlib', '1.2.11'),
diff --git a/Golden_Repo/o/Octave/Octave-6.1.0-gpsmkl-2020.eb b/Golden_Repo/o/Octave/Octave-6.1.0-gpsmkl-2020.eb
index 1db0c937247bbfd9b96ec7f0ecffb8be60ad2b7a..c18bec08905494c893b7a97af80a1976f818a7ed 100644
--- a/Golden_Repo/o/Octave/Octave-6.1.0-gpsmkl-2020.eb
+++ b/Golden_Repo/o/Octave/Octave-6.1.0-gpsmkl-2020.eb
@@ -35,7 +35,7 @@ dependencies = [
     ('GLPK', '4.65'),
     ('GL2PS', '1.4.2'),
     ('gnuplot', '5.2.8'),
-    ('Java', '15', '', True),
+    ('Java', '15', '', SYSTEM),
     ('OpenGL', '2020'),
     ('freeglut', '3.2.1'),
     ('zlib', '1.2.11'),
diff --git a/Golden_Repo/p/PostgreSQL/PostgreSQL-12.3-GCCcore-9.3.0.eb b/Golden_Repo/p/PostgreSQL/PostgreSQL-12.3-GCCcore-9.3.0.eb
index e18f87f8d34dd5f804eeca69be97bacf47e6a11c..a869d62bf93773a4b99e88d4f7efd384b7c0bad5 100644
--- a/Golden_Repo/p/PostgreSQL/PostgreSQL-12.3-GCCcore-9.3.0.eb
+++ b/Golden_Repo/p/PostgreSQL/PostgreSQL-12.3-GCCcore-9.3.0.eb
@@ -25,7 +25,7 @@ toolchain = {'name': 'GCCcore', 'version': '9.3.0'}
 osdependencies = [('openssl-devel', 'libssl-dev')]
 
 dependencies = [
-    ('Java', '1.8', '', True),
+    ('Java', '1.8', '', SYSTEM),
     ('libreadline', '8.0'),
     ('zlib', '1.2.11'),
 ]
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.7.0-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb b/Golden_Repo/p/PyTorch/PyTorch-1.7.0-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
index 16deb6cba847a0e0272cdbfa8b4c0ad828b19fde..865f39655e9398c84edee37ca14e3b146642ac9d 100644
--- a/Golden_Repo/p/PyTorch/PyTorch-1.7.0-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.7.0-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
@@ -25,9 +25,9 @@ dependencies = [
     ('SciPy-Stack', '2020', versionsuffix, ('gcccoremkl', '9.3.0-2020.2.254')),
     ('MPFR', '4.1.0'),
     ('GMP', '6.2.0'),
-    ('numactl', '2.0.13', '', True),
+    ('numactl', '2.0.13', '', SYSTEM),
     ('FFmpeg', '4.3.1'),
-    ('cuDNN', '8.0.2.39', '-CUDA-%s' % local_cudaver, True),
+    ('cuDNN', '8.0.2.39', '-CUDA-%s' % local_cudaver, SYSTEM),
     ('magma', '2.5.4'),
     ('NCCL', '2.8.3-1', '-CUDA-%s' % local_cudaver),
     ('LLVM', '10.0.1'),
diff --git a/Golden_Repo/r/R/R-4.0.2-gcccoremkl-9.3.0-2020.2.254-nompi.eb b/Golden_Repo/r/R/R-4.0.2-gcccoremkl-9.3.0-2020.2.254-nompi.eb
index a2ac129162ab0f541358b29a82a50ac5c8cb9b2a..719838a272dd976c03dd31536459a7af69cde72a 100644
--- a/Golden_Repo/r/R/R-4.0.2-gcccoremkl-9.3.0-2020.2.254-nompi.eb
+++ b/Golden_Repo/r/R/R-4.0.2-gcccoremkl-9.3.0-2020.2.254-nompi.eb
@@ -31,7 +31,7 @@ dependencies = [
     ('libpng', '1.6.37'),  # for plotting in R
     ('libjpeg-turbo', '2.0.5'),  # for plottting in R
     ('LibTIFF', '4.1.0'),
-    ('Java', '1.8', '', True),
+    ('Java', '1.8', '', SYSTEM),
     ('Tk', '8.6.10'),  # for tcltk
     ('cURL', '7.71.1'),  # for RCurl
     ('libxml2', '2.9.10'),  # for XML
diff --git a/Golden_Repo/r/R/R-4.0.2-gpsmkl-2020.eb b/Golden_Repo/r/R/R-4.0.2-gpsmkl-2020.eb
index 47ff4f94197ff73e675297a6359688e30b60bf7b..fb9b2a4ee5787a8c8ed54519573aaa64ad78aa1a 100644
--- a/Golden_Repo/r/R/R-4.0.2-gpsmkl-2020.eb
+++ b/Golden_Repo/r/R/R-4.0.2-gpsmkl-2020.eb
@@ -30,7 +30,7 @@ dependencies = [
     ('libpng', '1.6.37'),  # for plotting in R
     ('libjpeg-turbo', '2.0.5'),  # for plottting in R
     ('LibTIFF', '4.1.0'),
-    ('Java', '1.8', '', True),
+    ('Java', '1.8', '', SYSTEM),
     ('Tk', '8.6.10'),  # for tcltk
     ('cURL', '7.71.1'),  # for RCurl
     ('libxml2', '2.9.10'),  # for XML
diff --git a/Golden_Repo/s/Score-P/Score-P-6.0-gompi-2020.eb b/Golden_Repo/s/Score-P/Score-P-6.0-gompi-2020.eb
index bb1380f27880d1b901e537c791faebbe506bc8d3..7037c78bff8437068491567a8832a1878eb47879 100644
--- a/Golden_Repo/s/Score-P/Score-P-6.0-gompi-2020.eb
+++ b/Golden_Repo/s/Score-P/Score-P-6.0-gompi-2020.eb
@@ -33,7 +33,7 @@ patches = [
 ]
 
 builddependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
     ('CubeLib', '4.5'),
     ('CubeWriter', '4.5'),
     # Unwinding/sampling support (optional):
diff --git a/Golden_Repo/s/Score-P/Score-P-6.0-gpsmpi-2020.eb b/Golden_Repo/s/Score-P/Score-P-6.0-gpsmpi-2020.eb
index 30b2e861dff7a9dcee4fe4bfc79de7ef2ac7132a..a654979fef2bcd3fbb7b26bbc8e18c5d916e231a 100644
--- a/Golden_Repo/s/Score-P/Score-P-6.0-gpsmpi-2020.eb
+++ b/Golden_Repo/s/Score-P/Score-P-6.0-gpsmpi-2020.eb
@@ -33,7 +33,7 @@ patches = [
 ]
 
 builddependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
     ('CubeLib', '4.5'),
     ('CubeWriter', '4.5'),
     # Unwinding/sampling support (optional):
diff --git a/Golden_Repo/s/Score-P/Score-P-6.0-iimpi-2020.eb b/Golden_Repo/s/Score-P/Score-P-6.0-iimpi-2020.eb
index 807d8fed2ffd9dd1dd569760feb0d5600dabfda8..1dd32b425e26a853984b4c775d2176860f59cbd1 100644
--- a/Golden_Repo/s/Score-P/Score-P-6.0-iimpi-2020.eb
+++ b/Golden_Repo/s/Score-P/Score-P-6.0-iimpi-2020.eb
@@ -33,7 +33,7 @@ patches = [
 ]
 
 builddependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
     ('CubeLib', '4.5'),
     ('CubeWriter', '4.5'),
     # Unwinding/sampling support (optional):
diff --git a/Golden_Repo/s/Score-P/Score-P-6.0-ipsmpi-2020.eb b/Golden_Repo/s/Score-P/Score-P-6.0-ipsmpi-2020.eb
index 56fbb9367c43e92f4409311c0133a28dc96459b9..79c00c01536bd236ca672c9a78aeebb827ad6f59 100644
--- a/Golden_Repo/s/Score-P/Score-P-6.0-ipsmpi-2020.eb
+++ b/Golden_Repo/s/Score-P/Score-P-6.0-ipsmpi-2020.eb
@@ -33,7 +33,7 @@ patches = [
 ]
 
 builddependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
     ('CubeLib', '4.5'),
     ('CubeWriter', '4.5'),
     # Unwinding/sampling support (optional):
diff --git a/Golden_Repo/s/Score-P/Score-P-6.0-npsmpic-2020.eb b/Golden_Repo/s/Score-P/Score-P-6.0-npsmpic-2020.eb
index bee2e759d062b0d5683cd65cfef67800217b5dbf..eb958fb47f5ac34bbe54a24869875ab2e0970bf2 100644
--- a/Golden_Repo/s/Score-P/Score-P-6.0-npsmpic-2020.eb
+++ b/Golden_Repo/s/Score-P/Score-P-6.0-npsmpic-2020.eb
@@ -33,7 +33,7 @@ patches = [
 ]
 
 builddependencies = [
-    ('CUDA', '11.0', '', True),
+    ('CUDA', '11.0', '', SYSTEM),
     ('CubeLib', '4.5'),
     ('CubeWriter', '4.5'),
     # Unwinding/sampling support (optional):
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.3.1-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb b/Golden_Repo/t/TensorFlow/TensorFlow-2.3.1-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
index 1a2b43f795219d5f7a1783c3a6c6b583d4a594a6..9a55c28c37c3eafc4ca9b2049a1237e2c1823d32 100644
--- a/Golden_Repo/t/TensorFlow/TensorFlow-2.3.1-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.3.1-gcccoremkl-9.3.0-2020.2.254-Python-3.8.5.eb
@@ -24,8 +24,8 @@ builddependencies = [
     ('pybind11', '2.5.0', versionsuffix),
 ]
 dependencies = [
-    ('CUDA', local_cudaver, '', True),
-    ('cuDNN', '8.0.2.39', '-CUDA-%s' % local_cudaver, True),
+    ('CUDA', local_cudaver, '', SYSTEM),
+    ('cuDNN', '8.0.2.39', '-CUDA-%s' % local_cudaver, SYSTEM),
     ('NCCL', '2.8.3-1', '-CUDA-%s' % local_cudaver),
     ('Python', '3.8.5'),
     ('h5py', '2.10.0', '-serial%s' % versionsuffix),
diff --git a/Golden_Repo/y/yuicompressor/yuicompressor-2.4.8-GCCcore-9.3.0-Python-3.8.5.eb b/Golden_Repo/y/yuicompressor/yuicompressor-2.4.8-GCCcore-9.3.0-Python-3.8.5.eb
index da015d63ed316562930d1cec1ebdc2e926c6f4c1..585047becdcc0b838c0c31fa9351e8b38c505587 100644
--- a/Golden_Repo/y/yuicompressor/yuicompressor-2.4.8-GCCcore-9.3.0-Python-3.8.5.eb
+++ b/Golden_Repo/y/yuicompressor/yuicompressor-2.4.8-GCCcore-9.3.0-Python-3.8.5.eb
@@ -22,7 +22,7 @@ builddependencies = [
 
 dependencies = [
     ('Python', '3.8.5'),
-    ('Java', '1.8', '', True),
+    ('Java', '1.8', '', SYSTEM),
 ]
 
 use_pip = True