From 1eb1b067dd7f341790dd486c4b1d115740ca08b6 Mon Sep 17 00:00:00 2001
From: Matt Huszagh <huszaghmatt@gmail.com>
Date: Mon, 4 Nov 2019 19:15:14 -0800
Subject: [PATCH 01/10] kicad: python2 -> python3

---
 .../science/electronics/kicad/default.nix     | 207 ++++++++++++------
 1 file changed, 140 insertions(+), 67 deletions(-)

diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix
index 6b0c998d751a..61fbfc7ce7ed 100644
--- a/pkgs/applications/science/electronics/kicad/default.nix
+++ b/pkgs/applications/science/electronics/kicad/default.nix
@@ -1,11 +1,15 @@
-{ wxGTK, lib, stdenv, fetchurl, fetchFromGitHub, cmake, libGLU, libGL, zlib
+{ lib, stdenv, fetchFromGitHub, cmake, libGLU, libGL, zlib, wxGTK
 , libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
-, doxygen, pcre, libpthreadstubs, libXdmcp
-, wrapGAppsHook
+, doxygen, pcre, libpthreadstubs, libXdmcp, makeWrapper, gnome3
+, gsettings-desktop-schemas, librsvg, hicolor-icon-theme, lndir, cups
+, fetchpatch
+
 , oceSupport ? true, opencascade
+, withOCCT ? false, opencascade-occt
 , ngspiceSupport ? true, libngspice
-, swig, python, pythonPackages
-, lndir
+, scriptingSupport ? true, swig, python, pythonPackages, wxPython
+, debug ? false, valgrind
+, with3d ? true
 }:
 
 assert ngspiceSupport -> libngspice != null;
@@ -20,81 +24,116 @@ let
       rev = version;
       inherit sha256 name;
     };
-    nativeBuildInputs = [
-      cmake
-    ];
+    nativeBuildInputs = [ cmake ];
   } // attrs);
 
-in stdenv.mkDerivation rec {
-  pname = "kicad";
-  series = "5.0";
-  version = "5.1.4";
+  # oce on aarch64 fails a test
+  withOCC = (stdenv.isAarch64 && (withOCCT || oceSupport)) || (!stdenv.isAarch64 && withOCCT);
+  withOCE = oceSupport && !stdenv.isAarch64 && !withOCC;
 
-  src = fetchurl {
-    url = "https://launchpad.net/kicad/${series}/${version}/+download/kicad-${version}.tar.xz";
-    sha256 = "1r60dgh6aalbpq1wsmpyxkz0nn4ck8ydfdjcrblpl69k5rks5k2j";
+in
+stdenv.mkDerivation rec {
+  pname = "kicad";
+  version = "5.1.5";
+
+  src = fetchFromGitHub {
+    owner = "KiCad";
+    repo = "kicad-source-mirror";
+    rev = version;
+    sha256 = "15h3rwisjss3fdc9bam9n2wq94slhacc3fbg14bnzf4n5agsnv5b";
   };
 
+  # quick fix for #72248
+  # should be removed if a better fix is merged
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/johnbeard/kicad/commit/dfb1318a3989e3d6f9f2ac33c924ca5030ea273b.patch";
+      sha256 = "00ifd3fas8lid8svzh1w67xc8kyx89qidp7gm633r014j3kjkgcd";
+    })
+  ];
+
   postPatch = ''
     substituteInPlace CMakeModules/KiCadVersion.cmake \
-      --replace no-vcs-found ${version}
+      --replace "unknown" ${version}
   '';
 
-  cmakeFlags = [
-    "-DKICAD_SCRIPTING=ON"
-    "-DKICAD_SCRIPTING_MODULES=ON"
-    "-DKICAD_SCRIPTING_WXPYTHON=ON"
-    # nix installs wxPython headers in wxPython package, not in wxwidget
-    # as assumed. We explicitely set the header location.
-    "-DCMAKE_CXX_FLAGS=-I${pythonPackages.wxPython}/include/wx-3.0"
-    "-DwxPYTHON_INCLUDE_DIRS=${pythonPackages.wxPython}/include/wx-3.0"
-  ] ++ optionals (oceSupport) [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
-    ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON";
+  makeFlags = optional (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
 
-  nativeBuildInputs = [
-    cmake
-    doxygen
-    pkgconfig
-    wrapGAppsHook
-    pythonPackages.wrapPython
-    lndir
-  ];
-  pythonPath = [ pythonPackages.wxPython ];
-  propagatedBuildInputs = [ pythonPackages.wxPython ];
+  cmakeFlags =
+    optionals (scriptingSupport) [
+      "-DKICAD_SCRIPTING=ON"
+      "-DKICAD_SCRIPTING_MODULES=ON"
+      "-DKICAD_SCRIPTING_PYTHON3=ON"
+      "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
+    ]
+    ++ optional (!scriptingSupport)
+      "-DKICAD_SCRIPTING=OFF"
+    ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"
+    ++ optionals (withOCE)
+      [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
+    ++ optionals (withOCC) [
+      "-DKICAD_USE_OCC=ON"
+      # this line is unneeded on unstable...
+      "-DKICAD_USE_OCE=OFF"
+      "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade"
+    ]
+    ++ optionals (debug) [
+      "-DCMAKE_BUILD_TYPE=Debug"
+      "-DKICAD_STDLIB_DEBUG=ON"
+      "-DKICAD_USE_VALGRIND=ON"
+    ]
+    ;
+
+  pythonPath =
+    optionals (scriptingSupport)
+    [ wxPython pythonPackages.six ];
+
+  nativeBuildInputs =
+    [ cmake doxygen pkgconfig lndir ]
+    ++ optionals (scriptingSupport)
+      [ pythonPackages.wrapPython makeWrapper ]
+  ;
 
   buildInputs = [
-    libGLU libGL zlib libX11 wxGTK pcre libXdmcp glew glm libpthreadstubs
-    cairo curl openssl boost
-    swig (python.withPackages (ps: with ps; [ wxPython ]))
-  ] ++ optional (oceSupport) opencascade
-    ++ optional (ngspiceSupport) libngspice;
+    libGLU libGL zlib libX11 wxGTK pcre libXdmcp gettext
+    glew glm libpthreadstubs cairo curl openssl boost
+  ]
+  ++ optionals (scriptingSupport) [ swig python wxPython ]
+  ++ optional (ngspiceSupport) libngspice
+  ++ optional (withOCE) opencascade
+  ++ optional (withOCC) opencascade-occt
+  ++ optional (debug) valgrind
+  ;
 
-  # this breaks other applications in kicad
-  dontWrapGApps = true;
+  # 5.1.x fails the eeschema test
+  # doInstallCheck = (!debug);
+  # installCheckTarget = "test";
+
+  dontStrip = debug;
 
   passthru = {
-    i18n = mkLib version "i18n" "1dk7wis4cncmihl8fnic3jyhqcdzpifchzsp7hmf214h0vp199zr" {
-      buildInputs = [
-        gettext
-      ];
+    symbols = mkLib "${version}" "symbols" "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h" {
+      meta.license = licenses.cc-by-sa-40;
+    };
+    templates = mkLib "${version}" "templates" "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g" {
+      meta.license = licenses.cc-by-sa-40;
+    };
+    footprints = mkLib "${version}" "footprints" "1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j" {
+      meta.license = licenses.cc-by-sa-40;
+    };
+    i18n = mkLib "${version}" "i18n" "1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3" {
+      buildInputs = [ gettext ];
       meta.license = licenses.gpl2; # https://github.com/KiCad/kicad-i18n/issues/3
     };
-    symbols = mkLib version "symbols" "1lna4xlvzrxif3569pkp6mrg7fj62z3a3ri5j97lnmnnzhiddnh3" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    footprints = mkLib version "footprints" "0c0kcywxlaihzzwp9bi0dsr2v9j46zcdr85xmfpivmrk19apss6a" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    templates = mkLib version "templates" "1bagb0b94cjh7zp9z0h23b60j45kwxbsbb7b2bdk98dmph8lmzbb" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    packages3d = mkLib version "packages3d" "0h2qjj8vf33jz6jhqdz90c80h5i1ydgfqnns7rn0fqphlnscb45g" {
+    packages3d = mkLib "${version}" "packages3d" "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz" {
       hydraPlatforms = []; # this is a ~1 GiB download, occupies ~5 GiB in store
       meta.license = licenses.cc-by-sa-40;
     };
   };
 
-  modules = with passthru; [ i18n symbols footprints templates ];
+  # TODO, figure out how to skip this step? (since we're not making the 3D models optional)
+  modules = with passthru; [ i18n symbols footprints templates ]
+  ++ optionals (with3d) [ packages3d ];
 
   postInstall = ''
     mkdir -p $out/share
@@ -103,19 +142,53 @@ in stdenv.mkDerivation rec {
     done
   '';
 
-  preFixup = ''
-    buildPythonPath "$out $pythonPath"
-    gappsWrapperArgs+=(--set PYTHONPATH "$program_PYTHONPATH")
+  makeWrapperArgs = [
+    "--prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share"
+    "--prefix XDG_DATA_DIRS : ${gnome3.defaultIconTheme}/share"
+    "--prefix XDG_DATA_DIRS : ${wxGTK.gtk}/share/gsettings-schemas/${wxGTK.gtk.name}"
+    "--prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}"
+    # wrapGAppsHook did these, as well, no idea if it matters...
+    "--prefix XDG_DATA_DIRS : ${cups}/share"
+    "--prefix GIO_EXTRA_MODULES : ${gnome3.dconf}/lib/gio/modules"
+  ]
+  ++ optionals (ngspiceSupport) [ "--prefix LD_LIBRARY_PATH : ${libngspice}/lib" ]
+  # infinisil's workaround for #39493
+  ++ [ "--set GDK_PIXBUF_MODULE_FILE ${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]
+  ;
 
-    wrapGApp "$out/bin/kicad" --prefix LD_LIBRARY_PATH : "${libngspice}/lib"
-  '';
+  # can't add $out stuff to makeWrapperArgs...
+  # wrapGAppsHook added the $out/share, though i noticed no difference without it
+  preFixup =
+    optionalString (scriptingSupport) '' buildPythonPath "$out $pythonPath"
+    '' +
+    '' wrapProgram $out/bin/kicad $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share --set KICAD_SYMBOL_DIR $out/share/kicad/library --set KICAD_TEMPLATE_DIR $out/share/kicad/template --set KISYS3DMOD $out/share/kicad/modules/packages3d --set KISYSMOD $out/share/kicad/modules ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/pcbnew $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share --set KISYS3DMOD $out/share/kicad/modules/packages3d ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/eeschema $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share --set KICAD_SYMBOL_DIR $out/share/kicad/library ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/gerbview $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/pcb_calculator $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/pl_editor $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/bitmap2component $makeWrapperArgs ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    ''
+  ;
 
   meta = {
     description = "Free Software EDA Suite";
-    homepage = http://www.kicad-pcb.org/;
-    license = licenses.gpl2;
-    maintainers = with maintainers; [ berce ];
+    homepage = "http://www.kicad-pcb.org/";
+    license = with licenses; [ gpl2 cc-by-sa-40 ];
+    maintainers = with maintainers; [ evils kiwi berce ];
     platforms = with platforms; linux;
-    broken = stdenv.isAarch64;
   };
 }

From 5bbe6be1a8224a0f436c05f9b8cae181f68c708a Mon Sep 17 00:00:00 2001
From: Evils <evils.devils@protonmail.com>
Date: Sat, 9 Nov 2019 09:37:50 +0100
Subject: [PATCH 02/10] kicad: to hell with version specific crap

---
 pkgs/top-level/all-packages.nix | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index daae3e616f98..949a2401c4af 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -24199,8 +24199,10 @@ in
   fped = callPackage ../applications/science/electronics/fped { };
 
   kicad = callPackage ../applications/science/electronics/kicad {
-    wxGTK = wxGTK30;
-    boost = boost160;
+    wxGTK = wxGTK30.override { withGtk2 = false; };
+    pythonPackages = python3Packages;
+    python = python3;
+    wxPython = python3Packages.wxPython_4_0;
   };
   kicad-with-packages3d = kicad.overrideAttrs (old: { modules = old.modules ++ [ old.passthru.packages3d ]; });
 

From d40747ed2c70cb2087661fd03ee51b07735a5744 Mon Sep 17 00:00:00 2001
From: Matt Huszagh <huszaghmatt@gmail.com>
Date: Sat, 9 Nov 2019 22:30:57 -0800
Subject: [PATCH 03/10] kicad: add python six package as dep

This is needed for python scripting support.
---
 pkgs/applications/science/electronics/kicad/default.nix | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix
index 61fbfc7ce7ed..ca5d7da29e0f 100644
--- a/pkgs/applications/science/electronics/kicad/default.nix
+++ b/pkgs/applications/science/electronics/kicad/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, cmake, libGLU, libGL, zlib, wxGTK
+{ lib, stdenv, fetchFromGitHub, cmake, libGLU_combined, zlib, wxGTK
 , libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
 , doxygen, pcre, libpthreadstubs, libXdmcp, makeWrapper, gnome3
 , gsettings-desktop-schemas, librsvg, hicolor-icon-theme, lndir, cups
@@ -95,7 +95,7 @@ stdenv.mkDerivation rec {
   ;
 
   buildInputs = [
-    libGLU libGL zlib libX11 wxGTK pcre libXdmcp gettext
+    libGLU_combined zlib libX11 wxGTK pcre libXdmcp gettext
     glew glm libpthreadstubs cairo curl openssl boost
   ]
   ++ optionals (scriptingSupport) [ swig python wxPython ]

From e5daa9501b2ce92868041c7278479fa6ff71e3bd Mon Sep 17 00:00:00 2001
From: Evils <evils.devils@protonmail.com>
Date: Fri, 27 Sep 2019 17:32:00 +0200
Subject: [PATCH 04/10] maintainers: add evils

---
 maintainers/maintainer-list.nix | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index e1395e1ce544..0584197068da 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -2256,6 +2256,12 @@
     githubId = 2512008;
     name = "Even Brenden";
   };
+  evils = {
+    email = "evils.devils@protonmail.com";
+    github = "evils-devils";
+    githubId = 30512529;
+    name = "Evils";
+  };
   exfalso = {
     email = "0slemi0@gmail.com";
     github = "exfalso";

From 6477f717e30c040104975e89af4cbb5711caae56 Mon Sep 17 00:00:00 2001
From: Evils <evils.devils@protonmail.com>
Date: Tue, 8 Oct 2019 12:58:18 +0200
Subject: [PATCH 05/10] kicad-unstable: wrap

use wxGTK31
  brings hiDPI support
  no python shell...
---
 .../science/electronics/kicad/unstable.nix    | 158 +++++++++++++++---
 pkgs/top-level/all-packages.nix               |  10 +-
 2 files changed, 138 insertions(+), 30 deletions(-)

diff --git a/pkgs/applications/science/electronics/kicad/unstable.nix b/pkgs/applications/science/electronics/kicad/unstable.nix
index df0d9932b8a0..f47faae972c4 100644
--- a/pkgs/applications/science/electronics/kicad/unstable.nix
+++ b/pkgs/applications/science/electronics/kicad/unstable.nix
@@ -1,57 +1,161 @@
-{ wxGTK, lib, stdenv, fetchFromGitHub, cmake, libGLU, libGL, zlib
+{ lib, stdenv, fetchFromGitLab, cmake, libGLU, libGL, zlib, wxGTK
 , libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
-, doxygen, pcre, libpthreadstubs, libXdmcp
+, doxygen, pcre, libpthreadstubs, libXdmcp, makeWrapper, gnome3
+, gsettings-desktop-schemas, librsvg, hicolor-icon-theme, cups
+, fetchpatch, kicad-libraries, lndir
 
 , oceSupport ? true, opencascade
+, withOCCT ? false, opencascade-occt
 , ngspiceSupport ? true, libngspice
-, scriptingSupport ? true, swig, python, wxPython
+, scriptingSupport ? true, swig, python, pythonPackages, wxPython
+, debug ? false, valgrind
+, with3d ? true
 }:
 
+
 assert ngspiceSupport -> libngspice != null;
 
 with lib;
+
+# oce on aarch64 fails a test
+let
+  withOCC = (stdenv.isAarch64 && (withOCCT || oceSupport)) || (!stdenv.isAarch64 && withOCCT);
+  withOCE = oceSupport && !stdenv.isAarch64 && !withOCC;
+
+in
 stdenv.mkDerivation rec {
   pname = "kicad-unstable";
-  version = "2018-06-12";
+  version = "2019-12-05";
 
-  src = fetchFromGitHub {
-    owner = "KICad";
-    repo = "kicad-source-mirror";
-    rev = "bc7bd107d980da147ad515aeae0469ddd55c2368";
-    sha256 = "11nsx52pd3jr2wbzr11glmcs1a9r7z1mqkqx6yvlm0awbgd8qlv8";
+  src = fetchFromGitLab {
+    group = "kicad";
+    owner = "code";
+    repo = "kicad";
+    rev = "65ef8c18944947c3305619032bd1aedbe8b99d64";
+    sha256 = "0p0bm2yb34gqwks3qppwzgf5nylmn85psx2wwgk34yc8hs1p7yq0";
   };
 
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/johnbeard/kicad/commit/dfb1318a3989e3d6f9f2ac33c924ca5030ea273b.patch";
+      sha256 = "00ifd3fas8lid8svzh1w67xc8kyx89qidp7gm633r014j3kjkgcd";
+    })
+  ];
+
   postPatch = ''
     substituteInPlace CMakeModules/KiCadVersion.cmake \
-      --replace no-vcs-found ${version}
+      --replace "unknown" ${version}
   '';
 
+  makeFlags = optional (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
+
   cmakeFlags =
-    optionals (oceSupport) [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
-    ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"
-    ++ optionals (scriptingSupport) [
+    optionals (scriptingSupport) [
       "-DKICAD_SCRIPTING=ON"
       "-DKICAD_SCRIPTING_MODULES=ON"
-      "-DKICAD_SCRIPTING_WXPYTHON=ON"
-      # nix installs wxPython headers in wxPython package, not in wxwidget
-      # as assumed. We explicitely set the header location.
-      "-DCMAKE_CXX_FLAGS=-I${wxPython}/include/wx-3.0"
-    ];
+      "-DKICAD_SCRIPTING_PYTHON3=ON"
+      "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
+    ]
+    ++ optional (!scriptingSupport)
+      "-DKICAD_SCRIPTING=OFF"
+    ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"
+    ++ optionals (withOCE)
+      [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
+    ++ optionals (withOCC)
+      [ "-DKICAD_USE_OCC=ON" "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade" ]
+    ++ optionals (debug) [
+      "-DCMAKE_BUILD_TYPE=Debug"
+      "-DKICAD_STDLIB_DEBUG=ON"
+      "-DKICAD_USE_VALGRIND=ON"
+    ]
+    ;
+
+  pythonPath =
+    optionals (scriptingSupport)
+    [ wxPython pythonPackages.six ];
+
+  nativeBuildInputs =
+    [ cmake doxygen pkgconfig lndir ]
+    ++ optionals (scriptingSupport)
+      [ pythonPackages.wrapPython makeWrapper ]
+  ;
 
-  nativeBuildInputs = [ cmake doxygen pkgconfig ];
   buildInputs = [
-    libGLU libGL zlib libX11 wxGTK pcre libXdmcp gettext glew glm libpthreadstubs
-    cairo curl openssl boost
-  ] ++ optional (oceSupport) opencascade
-    ++ optional (ngspiceSupport) libngspice
-    ++ optionals (scriptingSupport) [ swig python wxPython ];
+    libGLU libGL zlib libX11 wxGTK pcre libXdmcp gettext
+    glew glm libpthreadstubs cairo curl openssl boost
+  ]
+  ++ optionals (scriptingSupport) [ swig python wxPython ]
+  ++ optional (ngspiceSupport) libngspice
+  ++ optional (withOCE) opencascade
+  ++ optional (withOCC) opencascade-occt
+  ++ optional (debug) valgrind
+  ;
+
+  doInstallCheck = (!debug);
+  installCheckTarget = "test";
+
+  dontStrip = debug;
+
+  postInstall = ''
+    mkdir -p $out/share
+    lndir ${kicad-libraries.i18n}/share $out/share
+  '';
+
+  makeWrapperArgs = [
+    "--prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share"
+    "--prefix XDG_DATA_DIRS : ${gnome3.defaultIconTheme}/share"
+    "--prefix XDG_DATA_DIRS : ${wxGTK.gtk}/share/gsettings-schemas/${wxGTK.gtk.name}"
+    "--prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}"
+    # wrapGAppsHook did these, as well, no idea if it matters...
+    "--prefix XDG_DATA_DIRS : ${cups}/share"
+    "--prefix GIO_EXTRA_MODULES : ${gnome3.dconf}/lib/gio/modules"
+
+    "--set KISYSMOD ${kicad-libraries.footprints}/share/kicad/modules"
+    "--set KICAD_SYMBOL_DIR ${kicad-libraries.symbols}/share/kicad/library"
+    "--set KICAD_TEMPLATE_DIR ${kicad-libraries.templates}/share/kicad/template"
+    "--prefix KICAD_TEMPLATE_DIR : ${kicad-libraries.symbols}/share/kicad/template"
+    "--prefix KICAD_TEMPLATE_DIR : ${kicad-libraries.footprints}/share/kicad/template"
+  ]
+  ++ optionals (ngspiceSupport) [ "--prefix LD_LIBRARY_PATH : ${libngspice}/lib" ]
+  ++ optionals (with3d) [ "--set KISYS3DMOD ${kicad-libraries.packages3d}/share/kicad/modules/packages3d" ]
+
+  # infinisil's workaround for #39493
+  ++ [ "--set GDK_PIXBUF_MODULE_FILE ${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]
+  ;
+
+  # can't add $out stuff to makeWrapperArgs...
+  # wrapGAppsHook added the $out/share, though i noticed no difference without it
+  preFixup =
+    optionalString (scriptingSupport) '' buildPythonPath "$out $pythonPath"
+    '' +
+    '' wrapProgram $out/bin/kicad $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/pcbnew $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/eeschema $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/gerbview $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/pcb_calculator $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/pl_editor $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    '' +
+    '' wrapProgram $out/bin/bitmap2component $makeWrapperArgs ''
+    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
+    ''
+  ;
 
   meta = {
     description = "Free Software EDA Suite, Nightly Development Build";
-    homepage = http://www.kicad-pcb.org/;
+    homepage = "https://www.kicad-pcb.org/";
     license = licenses.gpl2;
-    maintainers = with maintainers; [ berce ];
+    maintainers = with maintainers; [ evils kiwi berce ];
     platforms = with platforms; linux;
-    broken = true;
   };
 }
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 949a2401c4af..fd46ca3af593 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -24206,9 +24206,13 @@ in
   };
   kicad-with-packages3d = kicad.overrideAttrs (old: { modules = old.modules ++ [ old.passthru.packages3d ]; });
 
-  kicad-unstable = python.pkgs.callPackage ../applications/science/electronics/kicad/unstable.nix {
-    wxGTK = wxGTK30;
-    boost = boost160;
+  kicad-unstable = callPackage ../applications/science/electronics/kicad/unstable.nix {
+    # wxGTK31 currently introduces an issue with opening the python interpreter in pcbnew
+    wxGTK = wxGTK31.override { withGtk2 = false; };
+    pythonPackages = python3Packages;
+    python = python3;
+    wxPython = python3Packages.wxPython_4_0;
+    debug = true;
   };
 
   librepcb = libsForQt5.callPackage ../applications/science/electronics/librepcb { };

From c61170168d7721ceaebb9a520a494c92dbe9a380 Mon Sep 17 00:00:00 2001
From: Evils <evils.devils@protonmail.com>
Date: Tue, 26 Nov 2019 12:02:49 +0100
Subject: [PATCH 06/10] kicad: switch to best try from unstable and 5.1.5

make unstable use kicad-libraries
  still using a link in $out..., not sure that's a bad thing
  this allows setting that path in makeWrapperArgs
    can't use $out there

kicad-with-packages3d -> kicad and kicad-small

default to OCCT, OCE is outdated
  enforce OCCT on aarch64, where OCE is broken
  withOCE flag allows using OCE on non-aarch64
---
 .../science/electronics/kicad/base.nix        | 131 ++++++++++++++++++
 .../science/electronics/kicad/default.nix     |   8 +-
 .../science/electronics/kicad/libraries.nix   |  50 +++++++
 .../science/electronics/kicad/unstable.nix    |   8 +-
 pkgs/top-level/aliases.nix                    |   1 +
 pkgs/top-level/all-packages.nix               |   5 +-
 6 files changed, 194 insertions(+), 9 deletions(-)
 create mode 100644 pkgs/applications/science/electronics/kicad/base.nix
 create mode 100644 pkgs/applications/science/electronics/kicad/libraries.nix

diff --git a/pkgs/applications/science/electronics/kicad/base.nix b/pkgs/applications/science/electronics/kicad/base.nix
new file mode 100644
index 000000000000..adb2a418b6e5
--- /dev/null
+++ b/pkgs/applications/science/electronics/kicad/base.nix
@@ -0,0 +1,131 @@
+{ lib, stdenv, fetchFromGitLab, cmake, libGLU, libGL, zlib, wxGTK
+, libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
+, doxygen, pcre, libpthreadstubs, libXdmcp, fetchpatch, lndir, callPackages
+
+, pname ? "kicad"
+, stable ? true
+, baseName ? "kicad"
+, versions ? { }
+, oceSupport ? false, opencascade
+, withOCCT ? true, opencascade-occt
+, ngspiceSupport ? true, libngspice
+, scriptingSupport ? true, swig, python, pythonPackages, wxPython
+, debug ? false, valgrind
+, withI18n ? true
+}:
+
+assert ngspiceSupport -> libngspice != null;
+
+with lib;
+let
+
+  versionConfig = versions.${baseName};
+  baseVersion = "${versions.${baseName}.kicadVersion.version}";
+
+  # oce on aarch64 fails a test
+  withOCE = oceSupport && !stdenv.isAarch64;
+  withOCC = (withOCCT && !withOCE) || (oceSupport && stdenv.isAarch64);
+
+  kicad-libraries = callPackages ./libraries.nix versionConfig.libVersion;
+
+in
+stdenv.mkDerivation rec {
+
+  inherit pname;
+  version = "base-${baseVersion}";
+
+  src = fetchFromGitLab (
+    {
+      group = "kicad";
+      owner = "code";
+      repo = "kicad";
+      rev = baseVersion;
+    } // versionConfig.kicadVersion.src
+  );
+
+  # quick fix for #72248
+  # should be removed if a a more permanent fix is published
+  patches = [
+    (
+      fetchpatch {
+        url = "https://github.com/johnbeard/kicad/commit/dfb1318a3989e3d6f9f2ac33c924ca5030ea273b.patch";
+        sha256 = "00ifd3fas8lid8svzh1w67xc8kyx89qidp7gm633r014j3kjkgcd";
+      }
+    )
+  ];
+
+  # tagged releases don't have "unknown"
+  postPatch = optional (!stable)
+  ''
+    substituteInPlace CMakeModules/KiCadVersion.cmake \
+      --replace "unknown" ${baseVersion}
+  '';
+
+  makeFlags = optional (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
+
+  cmakeFlags =
+    optionals (scriptingSupport) [
+      "-DKICAD_SCRIPTING=ON"
+      "-DKICAD_SCRIPTING_MODULES=ON"
+      "-DKICAD_SCRIPTING_PYTHON3=ON"
+      "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
+    ]
+    ++ optional (!scriptingSupport)
+      "-DKICAD_SCRIPTING=OFF"
+    ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"
+    ++ optional (!withOCE) "-DKICAD_USE_OCE=OFF"
+    ++ optional (!withOCC) "-DKICAD_USE_OCC=OFF"
+    ++ optionals (withOCE)
+      [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
+    ++ optionals (withOCC) [
+      "-DKICAD_USE_OCC=ON"
+      "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade"
+    ]
+    ++ optionals (debug) [
+      "-DCMAKE_BUILD_TYPE=Debug"
+      "-DKICAD_STDLIB_DEBUG=ON"
+      "-DKICAD_USE_VALGRIND=ON"
+    ]
+  ;
+
+  pythonPath =
+    optionals (scriptingSupport)
+      [ wxPython pythonPackages.six ];
+
+  nativeBuildInputs = [ cmake doxygen pkgconfig lndir ];
+
+  buildInputs = [
+    libGLU libGL zlib libX11 wxGTK pcre libXdmcp gettext
+    glew glm libpthreadstubs cairo curl openssl boost
+  ]
+  ++ optionals (scriptingSupport) [ swig python wxPython ]
+  ++ optional (ngspiceSupport) libngspice
+  ++ optional (withOCE) opencascade
+  ++ optional (withOCC) opencascade-occt
+  ++ optional (debug) valgrind
+  ;
+
+  # debug builds fail all but the python test
+  # 5.1.x fails the eeschema test
+  doInstallCheck = !debug && !stable;
+  installCheckTarget = "test";
+
+  dontStrip = debug;
+
+  postInstall = optional (withI18n) ''
+    mkdir -p $out/share
+    lndir ${kicad-libraries.i18n}/share $out/share
+  '';
+
+  meta = {
+    description = "just the built source without the libraries";
+    longDescription = ''
+      just the build products, optionally with the i18n linked in
+      the libraries are passed via an env var in the wrapper, default.nix
+    '';
+    homepage = "https://www.kicad-pcb.org/";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ evils kiwi berce ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix
index ca5d7da29e0f..47dd1f084961 100644
--- a/pkgs/applications/science/electronics/kicad/default.nix
+++ b/pkgs/applications/science/electronics/kicad/default.nix
@@ -1,11 +1,11 @@
-{ lib, stdenv, fetchFromGitHub, cmake, libGLU_combined, zlib, wxGTK
+{ lib, stdenv, fetchFromGitHub, cmake, libGLU, libGL, zlib, wxGTK
 , libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
 , doxygen, pcre, libpthreadstubs, libXdmcp, makeWrapper, gnome3
 , gsettings-desktop-schemas, librsvg, hicolor-icon-theme, lndir, cups
 , fetchpatch
 
-, oceSupport ? true, opencascade
-, withOCCT ? false, opencascade-occt
+, oceSupport ? false, opencascade
+, withOCCT ? true, opencascade-occt
 , ngspiceSupport ? true, libngspice
 , scriptingSupport ? true, swig, python, pythonPackages, wxPython
 , debug ? false, valgrind
@@ -95,7 +95,7 @@ stdenv.mkDerivation rec {
   ;
 
   buildInputs = [
-    libGLU_combined zlib libX11 wxGTK pcre libXdmcp gettext
+    libGLU libGL zlib libX11 wxGTK pcre libXdmcp gettext
     glew glm libpthreadstubs cairo curl openssl boost
   ]
   ++ optionals (scriptingSupport) [ swig python wxPython ]
diff --git a/pkgs/applications/science/electronics/kicad/libraries.nix b/pkgs/applications/science/electronics/kicad/libraries.nix
new file mode 100644
index 000000000000..9b262285e3c4
--- /dev/null
+++ b/pkgs/applications/science/electronics/kicad/libraries.nix
@@ -0,0 +1,50 @@
+{ stdenv, lib, fetchFromGitHub, cmake, gettext
+, with3d ? true
+}:
+
+with lib;
+let
+  mkLib = version: name: sha256: attrs: stdenv.mkDerivation ({
+    name = "kicad-${name}-${version}";
+    src = fetchFromGitHub {
+      owner = "KiCad";
+      repo = "kicad-${name}";
+      rev = version;
+      inherit sha256 name;
+    };
+    nativeBuildInputs = [ cmake ];
+  } // attrs);
+in
+stdenv.mkDerivation rec {
+  pname = "kicad-libraries";
+  version = "5.1.5";
+
+  passthru = {
+    symbols = mkLib "${version}" "symbols" "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h" {
+      meta.license = licenses.cc-by-sa-40;
+    };
+    templates = mkLib "${version}" "templates" "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g" {
+      meta.license = licenses.cc-by-sa-40;
+    };
+    footprints = mkLib "${version}" "footprints" "1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j" {
+      meta.license = licenses.cc-by-sa-40;
+    };
+    i18n = mkLib "${version}" "i18n" "1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3" {
+      buildInputs = [ gettext ];
+      meta.license = licenses.gpl2; # https://github.com/KiCad/kicad-i18n/issues/3
+    };
+    packages3d = mkLib "${version}" "packages3d" "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz" {
+      hydraPlatforms = []; # this is a ~1 GiB download, occupies ~5 GiB in store
+      meta.license = licenses.cc-by-sa-40;
+    };
+  };
+
+  meta = {
+    description = "Free Software EDA Suite, assets";
+    homepage = "http://www.kicad-pcb.org/";
+    license = with licenses; [ gpl2 cc-by-sa-40 ];
+    maintainers = with maintainers; [ evils kiwi ];
+    platforms = with platforms; linux;
+  };
+
+}
diff --git a/pkgs/applications/science/electronics/kicad/unstable.nix b/pkgs/applications/science/electronics/kicad/unstable.nix
index f47faae972c4..70e6768bba43 100644
--- a/pkgs/applications/science/electronics/kicad/unstable.nix
+++ b/pkgs/applications/science/electronics/kicad/unstable.nix
@@ -4,8 +4,8 @@
 , gsettings-desktop-schemas, librsvg, hicolor-icon-theme, cups
 , fetchpatch, kicad-libraries, lndir
 
-, oceSupport ? true, opencascade
-, withOCCT ? false, opencascade-occt
+, oceSupport ? false, opencascade
+, withOCCT ? true, opencascade-occt
 , ngspiceSupport ? true, libngspice
 , scriptingSupport ? true, swig, python, pythonPackages, wxPython
 , debug ? false, valgrind
@@ -31,8 +31,8 @@ stdenv.mkDerivation rec {
     group = "kicad";
     owner = "code";
     repo = "kicad";
-    rev = "65ef8c18944947c3305619032bd1aedbe8b99d64";
-    sha256 = "0p0bm2yb34gqwks3qppwzgf5nylmn85psx2wwgk34yc8hs1p7yq0";
+    rev = "ffcf3b01fce98f1bcbdf3b76fbc88228126be965";
+    sha256 = "0qzjv06az1xl3am5v4v09nyfjcpq1wf3137wjv7a0vh8m38dvrwk";
   };
 
   patches = [
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index 4911f96fad62..c81964492442 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -192,6 +192,7 @@ mapAliases ({
   keepassx-reboot = keepassx-community; # added 2017-02-01
   keepassx2-http = keepassx-reboot; # added 2016-10-17
   keybase-go = keybase;  # added 2016-08-24
+  kicad-with-packages3d = kicad; # added 2019-11-25
   krename-qt5 = krename; # added 2017-02-18
   keymon = throw "keymon has been removed from nixpkgs, as it's abandoned and archived."; # 2019-12-10
   kvm = qemu_kvm; # added 2018-04-25
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index fd46ca3af593..aa9dc70b5bda 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -24204,7 +24204,10 @@ in
     python = python3;
     wxPython = python3Packages.wxPython_4_0;
   };
-  kicad-with-packages3d = kicad.overrideAttrs (old: { modules = old.modules ++ [ old.passthru.packages3d ]; });
+
+  kicad-small = kicad.override { with3d = false; };
+
+  kicad-libraries = callPackage ../applications/science/electronics/kicad/libraries.nix { };
 
   kicad-unstable = callPackage ../applications/science/electronics/kicad/unstable.nix {
     # wxGTK31 currently introduces an issue with opening the python interpreter in pcbnew

From 958d745fecde04cd507ca9d79426102e2021c551 Mon Sep 17 00:00:00 2001
From: Evils <evils.devils@protonmail.com>
Date: Fri, 6 Dec 2019 04:53:28 +0100
Subject: [PATCH 07/10] kicad: use separated libraries

switch source to gitlab as that's the new upstream source

use wrapper variables for everything but i18n
  add sym and fp templates to template path

update meta to reflect kicad's own language
  set license to AGPLv3, according to the source's LICENSE.README

reduce diff between default and unstable in preparation of merging

on debian gets "no module named 'math'"
  pcbnew 3d viewer is unusable (at least on my T410)
---
 .../science/electronics/kicad/default.nix     | 86 ++++++-------------
 .../science/electronics/kicad/libraries.nix   | 47 ++++------
 .../science/electronics/kicad/unstable.nix    | 25 ++++--
 pkgs/top-level/all-packages.nix               |  2 +-
 4 files changed, 62 insertions(+), 98 deletions(-)

diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix
index 47dd1f084961..9996a837e1a7 100644
--- a/pkgs/applications/science/electronics/kicad/default.nix
+++ b/pkgs/applications/science/electronics/kicad/default.nix
@@ -1,8 +1,8 @@
-{ lib, stdenv, fetchFromGitHub, cmake, libGLU, libGL, zlib, wxGTK
+{ lib, stdenv, fetchFromGitLab, cmake, libGLU, libGL, zlib, wxGTK
 , libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
 , doxygen, pcre, libpthreadstubs, libXdmcp, makeWrapper, gnome3
-, gsettings-desktop-schemas, librsvg, hicolor-icon-theme, lndir, cups
-, fetchpatch
+, gsettings-desktop-schemas, librsvg, hicolor-icon-theme, cups
+, fetchpatch, kicad-libraries, lndir
 
 , oceSupport ? false, opencascade
 , withOCCT ? true, opencascade-occt
@@ -16,35 +16,24 @@ assert ngspiceSupport -> libngspice != null;
 
 with lib;
 let
-  mkLib = version: name: sha256: attrs: stdenv.mkDerivation ({
-    name = "kicad-${name}-${version}";
-    src = fetchFromGitHub {
-      owner = "KiCad";
-      repo = "kicad-${name}";
-      rev = version;
-      inherit sha256 name;
-    };
-    nativeBuildInputs = [ cmake ];
-  } // attrs);
-
   # oce on aarch64 fails a test
   withOCC = (stdenv.isAarch64 && (withOCCT || oceSupport)) || (!stdenv.isAarch64 && withOCCT);
   withOCE = oceSupport && !stdenv.isAarch64 && !withOCC;
-
 in
 stdenv.mkDerivation rec {
   pname = "kicad";
   version = "5.1.5";
 
-  src = fetchFromGitHub {
-    owner = "KiCad";
-    repo = "kicad-source-mirror";
+  src = fetchFromGitLab {
+    group = "kicad";
+    owner = "code";
+    repo = "kicad";
     rev = version;
     sha256 = "15h3rwisjss3fdc9bam9n2wq94slhacc3fbg14bnzf4n5agsnv5b";
   };
 
   # quick fix for #72248
-  # should be removed if a better fix is merged
+  # should be removed if a a more permanent fix is published
   patches = [
     (fetchpatch {
       url = "https://github.com/johnbeard/kicad/commit/dfb1318a3989e3d6f9f2ac33c924ca5030ea273b.patch";
@@ -52,11 +41,6 @@ stdenv.mkDerivation rec {
     })
   ];
 
-  postPatch = ''
-    substituteInPlace CMakeModules/KiCadVersion.cmake \
-      --replace "unknown" ${version}
-  '';
-
   makeFlags = optional (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
 
   cmakeFlags =
@@ -111,35 +95,9 @@ stdenv.mkDerivation rec {
 
   dontStrip = debug;
 
-  passthru = {
-    symbols = mkLib "${version}" "symbols" "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    templates = mkLib "${version}" "templates" "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    footprints = mkLib "${version}" "footprints" "1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    i18n = mkLib "${version}" "i18n" "1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3" {
-      buildInputs = [ gettext ];
-      meta.license = licenses.gpl2; # https://github.com/KiCad/kicad-i18n/issues/3
-    };
-    packages3d = mkLib "${version}" "packages3d" "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz" {
-      hydraPlatforms = []; # this is a ~1 GiB download, occupies ~5 GiB in store
-      meta.license = licenses.cc-by-sa-40;
-    };
-  };
-
-  # TODO, figure out how to skip this step? (since we're not making the 3D models optional)
-  modules = with passthru; [ i18n symbols footprints templates ]
-  ++ optionals (with3d) [ packages3d ];
-
   postInstall = ''
     mkdir -p $out/share
-    for module in $modules; do
-      lndir $module/share $out/share
-    done
+    lndir ${kicad-libraries.i18n}/share $out/share
   '';
 
   makeWrapperArgs = [
@@ -147,11 +105,19 @@ stdenv.mkDerivation rec {
     "--prefix XDG_DATA_DIRS : ${gnome3.defaultIconTheme}/share"
     "--prefix XDG_DATA_DIRS : ${wxGTK.gtk}/share/gsettings-schemas/${wxGTK.gtk.name}"
     "--prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}"
-    # wrapGAppsHook did these, as well, no idea if it matters...
+    # wrapGAppsHook did these two as well, no idea if it matters...
     "--prefix XDG_DATA_DIRS : ${cups}/share"
     "--prefix GIO_EXTRA_MODULES : ${gnome3.dconf}/lib/gio/modules"
+
+    "--set KISYSMOD ${kicad-libraries.footprints}/share/kicad/modules"
+    "--set KICAD_SYMBOL_DIR ${kicad-libraries.symbols}/share/kicad/library"
+    "--set KICAD_TEMPLATE_DIR ${kicad-libraries.templates}/share/kicad/template"
+    "--prefix KICAD_TEMPLATE_DIR : ${kicad-libraries.symbols}/share/kicad/template"
+    "--prefix KICAD_TEMPLATE_DIR : ${kicad-libraries.footprints}/share/kicad/template"
   ]
   ++ optionals (ngspiceSupport) [ "--prefix LD_LIBRARY_PATH : ${libngspice}/lib" ]
+  ++ optionals (with3d) [ "--set KISYS3DMOD ${kicad-libraries.packages3d}/share/kicad/modules/packages3d" ]
+
   # infinisil's workaround for #39493
   ++ [ "--set GDK_PIXBUF_MODULE_FILE ${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]
   ;
@@ -161,13 +127,13 @@ stdenv.mkDerivation rec {
   preFixup =
     optionalString (scriptingSupport) '' buildPythonPath "$out $pythonPath"
     '' +
-    '' wrapProgram $out/bin/kicad $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share --set KICAD_SYMBOL_DIR $out/share/kicad/library --set KICAD_TEMPLATE_DIR $out/share/kicad/template --set KISYS3DMOD $out/share/kicad/modules/packages3d --set KISYSMOD $out/share/kicad/modules ''
+    '' wrapProgram $out/bin/kicad $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
-    '' wrapProgram $out/bin/pcbnew $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share --set KISYS3DMOD $out/share/kicad/modules/packages3d ''
+    '' wrapProgram $out/bin/pcbnew $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
-    '' wrapProgram $out/bin/eeschema $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share --set KICAD_SYMBOL_DIR $out/share/kicad/library ''
+    '' wrapProgram $out/bin/eeschema $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
     '' wrapProgram $out/bin/gerbview $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
@@ -185,9 +151,13 @@ stdenv.mkDerivation rec {
   ;
 
   meta = {
-    description = "Free Software EDA Suite";
-    homepage = "http://www.kicad-pcb.org/";
-    license = with licenses; [ gpl2 cc-by-sa-40 ];
+    description = "Open Source Electronics Design Automation Suite";
+    homepage = "https://www.kicad-pcb.org/";
+    longDescription = ''
+      KiCad is an open source software suite for Electronic Design Automation.
+      The Programs handle Schematic Capture, and PCB Layout with Gerber output.
+    '';
+    license = licenses.agpl3;
     maintainers = with maintainers; [ evils kiwi berce ];
     platforms = with platforms; linux;
   };
diff --git a/pkgs/applications/science/electronics/kicad/libraries.nix b/pkgs/applications/science/electronics/kicad/libraries.nix
index 9b262285e3c4..09534ebf4091 100644
--- a/pkgs/applications/science/electronics/kicad/libraries.nix
+++ b/pkgs/applications/science/electronics/kicad/libraries.nix
@@ -4,6 +4,7 @@
 
 with lib;
 let
+  version = "5.1.5";
   mkLib = version: name: sha256: attrs: stdenv.mkDerivation ({
     name = "kicad-${name}-${version}";
     src = fetchFromGitHub {
@@ -15,36 +16,22 @@ let
     nativeBuildInputs = [ cmake ];
   } // attrs);
 in
-stdenv.mkDerivation rec {
-  pname = "kicad-libraries";
-  version = "5.1.5";
-
-  passthru = {
-    symbols = mkLib "${version}" "symbols" "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    templates = mkLib "${version}" "templates" "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    footprints = mkLib "${version}" "footprints" "1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j" {
-      meta.license = licenses.cc-by-sa-40;
-    };
-    i18n = mkLib "${version}" "i18n" "1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3" {
-      buildInputs = [ gettext ];
-      meta.license = licenses.gpl2; # https://github.com/KiCad/kicad-i18n/issues/3
-    };
-    packages3d = mkLib "${version}" "packages3d" "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz" {
-      hydraPlatforms = []; # this is a ~1 GiB download, occupies ~5 GiB in store
-      meta.license = licenses.cc-by-sa-40;
-    };
+{
+  symbols = mkLib "${version}" "symbols" "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h" {
+    meta.license = licenses.cc-by-sa-40;
   };
-
-  meta = {
-    description = "Free Software EDA Suite, assets";
-    homepage = "http://www.kicad-pcb.org/";
-    license = with licenses; [ gpl2 cc-by-sa-40 ];
-    maintainers = with maintainers; [ evils kiwi ];
-    platforms = with platforms; linux;
+  templates = mkLib "${version}" "templates" "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g" {
+    meta.license = licenses.cc-by-sa-40;
+  };
+  footprints = mkLib "${version}" "footprints" "1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j" {
+    meta.license = licenses.cc-by-sa-40;
+  };
+  i18n = mkLib "${version}" "i18n" "1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3" {
+    buildInputs = [ gettext ];
+    meta.license = licenses.gpl2; # https://github.com/KiCad/kicad-i18n/issues/3
+  };
+  packages3d = mkLib "${version}" "packages3d" "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz" {
+    hydraPlatforms = []; # this is a ~1 GiB download, occupies ~5 GiB in store
+    meta.license = licenses.cc-by-sa-40;
   };
-
 }
diff --git a/pkgs/applications/science/electronics/kicad/unstable.nix b/pkgs/applications/science/electronics/kicad/unstable.nix
index 70e6768bba43..07dbf8e7f186 100644
--- a/pkgs/applications/science/electronics/kicad/unstable.nix
+++ b/pkgs/applications/science/electronics/kicad/unstable.nix
@@ -12,20 +12,18 @@
 , with3d ? true
 }:
 
-
 assert ngspiceSupport -> libngspice != null;
 
 with lib;
-
-# oce on aarch64 fails a test
 let
+  # oce on aarch64 fails a test
   withOCC = (stdenv.isAarch64 && (withOCCT || oceSupport)) || (!stdenv.isAarch64 && withOCCT);
   withOCE = oceSupport && !stdenv.isAarch64 && !withOCC;
 
 in
 stdenv.mkDerivation rec {
   pname = "kicad-unstable";
-  version = "2019-12-05";
+  version = "2019-12-10";
 
   src = fetchFromGitLab {
     group = "kicad";
@@ -35,6 +33,8 @@ stdenv.mkDerivation rec {
     sha256 = "0qzjv06az1xl3am5v4v09nyfjcpq1wf3137wjv7a0vh8m38dvrwk";
   };
 
+  # quick fix for #72248
+  # should be removed if a a more permanent fix is published
   patches = [
     (fetchpatch {
       url = "https://github.com/johnbeard/kicad/commit/dfb1318a3989e3d6f9f2ac33c924ca5030ea273b.patch";
@@ -42,6 +42,7 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  # tagged releases don't have "unknown"
   postPatch = ''
     substituteInPlace CMakeModules/KiCadVersion.cmake \
       --replace "unknown" ${version}
@@ -61,8 +62,10 @@ stdenv.mkDerivation rec {
     ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"
     ++ optionals (withOCE)
       [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
-    ++ optionals (withOCC)
-      [ "-DKICAD_USE_OCC=ON" "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade" ]
+    ++ optionals (withOCC) [
+      "-DKICAD_USE_OCC=ON"
+      "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade"
+    ]
     ++ optionals (debug) [
       "-DCMAKE_BUILD_TYPE=Debug"
       "-DKICAD_STDLIB_DEBUG=ON"
@@ -106,7 +109,7 @@ stdenv.mkDerivation rec {
     "--prefix XDG_DATA_DIRS : ${gnome3.defaultIconTheme}/share"
     "--prefix XDG_DATA_DIRS : ${wxGTK.gtk}/share/gsettings-schemas/${wxGTK.gtk.name}"
     "--prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}"
-    # wrapGAppsHook did these, as well, no idea if it matters...
+    # wrapGAppsHook did these two as well, no idea if it matters...
     "--prefix XDG_DATA_DIRS : ${cups}/share"
     "--prefix GIO_EXTRA_MODULES : ${gnome3.dconf}/lib/gio/modules"
 
@@ -152,9 +155,13 @@ stdenv.mkDerivation rec {
   ;
 
   meta = {
-    description = "Free Software EDA Suite, Nightly Development Build";
+    description = "Open Source EDA Suite, Development Build";
     homepage = "https://www.kicad-pcb.org/";
-    license = licenses.gpl2;
+    longDescription = ''
+      KiCad is an open source software suite for Electronic Design Automation.
+      The Programs handle Schematic Capture, and PCB Layout with Gerber output.
+    '';
+    license = licenses.agpl3;
     maintainers = with maintainers; [ evils kiwi berce ];
     platforms = with platforms; linux;
   };
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index aa9dc70b5bda..4a2dd40b090d 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -24207,7 +24207,7 @@ in
 
   kicad-small = kicad.override { with3d = false; };
 
-  kicad-libraries = callPackage ../applications/science/electronics/kicad/libraries.nix { };
+  kicad-libraries = callPackages ../applications/science/electronics/kicad/libraries.nix { };
 
   kicad-unstable = callPackage ../applications/science/electronics/kicad/unstable.nix {
     # wxGTK31 currently introduces an issue with opening the python interpreter in pcbnew

From d96992a21b7e1df307c7f2d93ce795542a57bcf6 Mon Sep 17 00:00:00 2001
From: Evils <evils.devils@protonmail.com>
Date: Sat, 14 Dec 2019 17:01:15 +0100
Subject: [PATCH 08/10] kicad: unite unstable.nix with default.nix

use latest libraries for unstable
move all revs and hashes to default.nix

thanks TQ for getting me through this blockage
---
 .../science/electronics/kicad/default.nix     |  80 +++++++--
 .../science/electronics/kicad/libraries.nix   |  44 +++--
 .../science/electronics/kicad/unstable.nix    | 168 ------------------
 pkgs/top-level/all-packages.nix               |   5 +-
 4 files changed, 97 insertions(+), 200 deletions(-)
 delete mode 100644 pkgs/applications/science/electronics/kicad/unstable.nix

diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix
index 9996a837e1a7..7164442d19c8 100644
--- a/pkgs/applications/science/electronics/kicad/default.nix
+++ b/pkgs/applications/science/electronics/kicad/default.nix
@@ -2,8 +2,9 @@
 , libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
 , doxygen, pcre, libpthreadstubs, libXdmcp, makeWrapper, gnome3
 , gsettings-desktop-schemas, librsvg, hicolor-icon-theme, cups
-, fetchpatch, kicad-libraries, lndir
+, fetchpatch, lndir, callPackages
 
+, pname ? "kicad"
 , oceSupport ? false, opencascade
 , withOCCT ? true, opencascade-occt
 , ngspiceSupport ? true, libngspice
@@ -16,21 +17,66 @@ assert ngspiceSupport -> libngspice != null;
 
 with lib;
 let
+  versions = {
+    "kicad" = {
+      kicadVersion = {
+        version = "5.1.5";
+        src.sha256 = "15h3rwisjss3fdc9bam9n2wq94slhacc3fbg14bnzf4n5agsnv5b";
+      };
+      libVersion = {
+        version = "5.1.5";
+        libSources = {
+          i18n.sha256 = "1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3";
+          symbols.sha256 = "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h";
+          templates.sha256 = "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g";
+          footprints.sha256 = "1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j";
+          packages3d.sha256 = "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz";
+        };
+      };
+    };
+    "kicad-unstable" = {
+      kicadVersion = {
+        version = "2019-12-14";
+        src = {
+          rev = "74caf3b7cb89f5bff86ad470bed67d200f445ba5";
+          sha256 = "083f79plfmxiwgbaldgqi1bqq01g2r153x3c4n7ipi2dn7m5f1lr";
+        };
+      };
+      libVersion = {
+        version = "unstable";
+        libSources = {
+          i18n.rev = "f1084526305005fa53e78000f7db2d67e8a0d423";
+          i18n.sha256 = "1yhc0m4psx0rz5msb1zqn5fz6l1ynwykrsk1443g4073lmjibv74";
+          symbols.rev = "6dd82f11e4b2e60946dd07459e579cee0d42ca75";
+          symbols.sha256 = "07mzaxn2isc6kj9zxl7syi013y4dfv5bvw9vlllbg8624mpwdibz";
+          templates.rev = "0c0490897f803ab8b7c3dad438b7eb1f80e0417c";
+          templates.sha256 = "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g";
+          footprints.rev = "8cef00a34078c3dabe943a76f9cdf7d05ffc38fc";
+          footprints.sha256 = "0aplxxbcyb4vpj3kpcnj6lbnpk9zjql46js9i4iaqs388z93sb97";
+          packages3d.rev = "58d73640ebb764637eb7bba6290815b84a24b8ad";
+          packages3d.sha256 = "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz";
+        };
+      };
+    };
+  };
+  versionConfig = versions.${pname};
+
   # oce on aarch64 fails a test
-  withOCC = (stdenv.isAarch64 && (withOCCT || oceSupport)) || (!stdenv.isAarch64 && withOCCT);
+  withOCC = withOCCT || (stdenv.isAarch64 && oceSupport);
   withOCE = oceSupport && !stdenv.isAarch64 && !withOCC;
+  kicad-libraries = callPackages ./libraries.nix versionConfig.libVersion;
 in
 stdenv.mkDerivation rec {
-  pname = "kicad";
-  version = "5.1.5";
 
-  src = fetchFromGitLab {
+  inherit pname;
+  version = versions.${pname}.kicadVersion.version;
+
+  src = fetchFromGitLab ({
     group = "kicad";
     owner = "code";
     repo = "kicad";
     rev = version;
-    sha256 = "15h3rwisjss3fdc9bam9n2wq94slhacc3fbg14bnzf4n5agsnv5b";
-  };
+  } // versionConfig.kicadVersion.src);
 
   # quick fix for #72248
   # should be removed if a a more permanent fix is published
@@ -41,6 +87,14 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  # tagged releases don't have "unknown"
+  postPatch = optional (pname == "kicad-unstable")
+  ''
+    substituteInPlace CMakeModules/KiCadVersion.cmake \
+      --replace "unknown" ${version}
+    echo "replaced \"unknown\" with \"${version}\" in version name"
+  '';
+
   makeFlags = optional (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
 
   cmakeFlags =
@@ -57,7 +111,8 @@ stdenv.mkDerivation rec {
       [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
     ++ optionals (withOCC) [
       "-DKICAD_USE_OCC=ON"
-      # this line is unneeded on unstable...
+      # this line is redundant on unstable...
+      # maybe may be removed on a later release
       "-DKICAD_USE_OCE=OFF"
       "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade"
     ]
@@ -89,9 +144,10 @@ stdenv.mkDerivation rec {
   ++ optional (debug) valgrind
   ;
 
+  # debug builds fail all but the python test
   # 5.1.x fails the eeschema test
-  # doInstallCheck = (!debug);
-  # installCheckTarget = "test";
+  doInstallCheck = !debug && (pname == "kicad-unstable");
+  installCheckTarget = "test";
 
   dontStrip = debug;
 
@@ -151,7 +207,9 @@ stdenv.mkDerivation rec {
   ;
 
   meta = {
-    description = "Open Source Electronics Design Automation Suite";
+    description = if (pname != "kicad-unstable")
+      then "Open Source Electronics Design Automation Suite"
+      else "Open Source EDA Suite, Development Build";
     homepage = "https://www.kicad-pcb.org/";
     longDescription = ''
       KiCad is an open source software suite for Electronic Design Automation.
diff --git a/pkgs/applications/science/electronics/kicad/libraries.nix b/pkgs/applications/science/electronics/kicad/libraries.nix
index 09534ebf4091..0fa3d48e9d42 100644
--- a/pkgs/applications/science/electronics/kicad/libraries.nix
+++ b/pkgs/applications/science/electronics/kicad/libraries.nix
@@ -1,36 +1,44 @@
-{ stdenv, lib, fetchFromGitHub, cmake, gettext
-, with3d ? true
+{ lib, stdenv, fetchFromGitHub, cmake, gettext
+, version
+, libSources
 }:
 
+# callPackage libraries {
+#   version = "unstable";
+#   libs.symbols = {
+#     rev = "09f9..";
+#     sha256 = "...";
+#   };
+# };
 with lib;
 let
-  version = "5.1.5";
-  mkLib = version: name: sha256: attrs: stdenv.mkDerivation ({
-    name = "kicad-${name}-${version}";
-    src = fetchFromGitHub {
-      owner = "KiCad";
-      repo = "kicad-${name}";
-      rev = version;
-      inherit sha256 name;
-    };
-    nativeBuildInputs = [ cmake ];
-  } // attrs);
+  mkLib = name: attrs:
+    stdenv.mkDerivation ({
+      name = "kicad-${name}-${version}";
+      src = fetchFromGitHub ({
+        owner = "KiCad";
+        repo = "kicad-${name}";
+        rev = version;
+        inherit name;
+      } // (libSources.${name} or {}));
+      nativeBuildInputs = [ cmake ];
+    } // attrs);
 in
 {
-  symbols = mkLib "${version}" "symbols" "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h" {
+  symbols = mkLib "symbols" {
     meta.license = licenses.cc-by-sa-40;
   };
-  templates = mkLib "${version}" "templates" "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g" {
+  templates = mkLib "templates" {
     meta.license = licenses.cc-by-sa-40;
   };
-  footprints = mkLib "${version}" "footprints" "1c4whgn14qhz4yqkl46w13p6rpv1k0hsc9s9h9368fxfcz9knb2j" {
+  footprints = mkLib "footprints" {
     meta.license = licenses.cc-by-sa-40;
   };
-  i18n = mkLib "${version}" "i18n" "1rfpifl8vky1gba2angizlb2n7mwmsiai3r6ip6qma60wdj8sbd3" {
+  i18n = mkLib "i18n" {
     buildInputs = [ gettext ];
     meta.license = licenses.gpl2; # https://github.com/KiCad/kicad-i18n/issues/3
   };
-  packages3d = mkLib "${version}" "packages3d" "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz" {
+  packages3d = mkLib "packages3d" {
     hydraPlatforms = []; # this is a ~1 GiB download, occupies ~5 GiB in store
     meta.license = licenses.cc-by-sa-40;
   };
diff --git a/pkgs/applications/science/electronics/kicad/unstable.nix b/pkgs/applications/science/electronics/kicad/unstable.nix
deleted file mode 100644
index 07dbf8e7f186..000000000000
--- a/pkgs/applications/science/electronics/kicad/unstable.nix
+++ /dev/null
@@ -1,168 +0,0 @@
-{ lib, stdenv, fetchFromGitLab, cmake, libGLU, libGL, zlib, wxGTK
-, libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
-, doxygen, pcre, libpthreadstubs, libXdmcp, makeWrapper, gnome3
-, gsettings-desktop-schemas, librsvg, hicolor-icon-theme, cups
-, fetchpatch, kicad-libraries, lndir
-
-, oceSupport ? false, opencascade
-, withOCCT ? true, opencascade-occt
-, ngspiceSupport ? true, libngspice
-, scriptingSupport ? true, swig, python, pythonPackages, wxPython
-, debug ? false, valgrind
-, with3d ? true
-}:
-
-assert ngspiceSupport -> libngspice != null;
-
-with lib;
-let
-  # oce on aarch64 fails a test
-  withOCC = (stdenv.isAarch64 && (withOCCT || oceSupport)) || (!stdenv.isAarch64 && withOCCT);
-  withOCE = oceSupport && !stdenv.isAarch64 && !withOCC;
-
-in
-stdenv.mkDerivation rec {
-  pname = "kicad-unstable";
-  version = "2019-12-10";
-
-  src = fetchFromGitLab {
-    group = "kicad";
-    owner = "code";
-    repo = "kicad";
-    rev = "ffcf3b01fce98f1bcbdf3b76fbc88228126be965";
-    sha256 = "0qzjv06az1xl3am5v4v09nyfjcpq1wf3137wjv7a0vh8m38dvrwk";
-  };
-
-  # quick fix for #72248
-  # should be removed if a a more permanent fix is published
-  patches = [
-    (fetchpatch {
-      url = "https://github.com/johnbeard/kicad/commit/dfb1318a3989e3d6f9f2ac33c924ca5030ea273b.patch";
-      sha256 = "00ifd3fas8lid8svzh1w67xc8kyx89qidp7gm633r014j3kjkgcd";
-    })
-  ];
-
-  # tagged releases don't have "unknown"
-  postPatch = ''
-    substituteInPlace CMakeModules/KiCadVersion.cmake \
-      --replace "unknown" ${version}
-  '';
-
-  makeFlags = optional (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
-
-  cmakeFlags =
-    optionals (scriptingSupport) [
-      "-DKICAD_SCRIPTING=ON"
-      "-DKICAD_SCRIPTING_MODULES=ON"
-      "-DKICAD_SCRIPTING_PYTHON3=ON"
-      "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
-    ]
-    ++ optional (!scriptingSupport)
-      "-DKICAD_SCRIPTING=OFF"
-    ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"
-    ++ optionals (withOCE)
-      [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
-    ++ optionals (withOCC) [
-      "-DKICAD_USE_OCC=ON"
-      "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade"
-    ]
-    ++ optionals (debug) [
-      "-DCMAKE_BUILD_TYPE=Debug"
-      "-DKICAD_STDLIB_DEBUG=ON"
-      "-DKICAD_USE_VALGRIND=ON"
-    ]
-    ;
-
-  pythonPath =
-    optionals (scriptingSupport)
-    [ wxPython pythonPackages.six ];
-
-  nativeBuildInputs =
-    [ cmake doxygen pkgconfig lndir ]
-    ++ optionals (scriptingSupport)
-      [ pythonPackages.wrapPython makeWrapper ]
-  ;
-
-  buildInputs = [
-    libGLU libGL zlib libX11 wxGTK pcre libXdmcp gettext
-    glew glm libpthreadstubs cairo curl openssl boost
-  ]
-  ++ optionals (scriptingSupport) [ swig python wxPython ]
-  ++ optional (ngspiceSupport) libngspice
-  ++ optional (withOCE) opencascade
-  ++ optional (withOCC) opencascade-occt
-  ++ optional (debug) valgrind
-  ;
-
-  doInstallCheck = (!debug);
-  installCheckTarget = "test";
-
-  dontStrip = debug;
-
-  postInstall = ''
-    mkdir -p $out/share
-    lndir ${kicad-libraries.i18n}/share $out/share
-  '';
-
-  makeWrapperArgs = [
-    "--prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share"
-    "--prefix XDG_DATA_DIRS : ${gnome3.defaultIconTheme}/share"
-    "--prefix XDG_DATA_DIRS : ${wxGTK.gtk}/share/gsettings-schemas/${wxGTK.gtk.name}"
-    "--prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}"
-    # wrapGAppsHook did these two as well, no idea if it matters...
-    "--prefix XDG_DATA_DIRS : ${cups}/share"
-    "--prefix GIO_EXTRA_MODULES : ${gnome3.dconf}/lib/gio/modules"
-
-    "--set KISYSMOD ${kicad-libraries.footprints}/share/kicad/modules"
-    "--set KICAD_SYMBOL_DIR ${kicad-libraries.symbols}/share/kicad/library"
-    "--set KICAD_TEMPLATE_DIR ${kicad-libraries.templates}/share/kicad/template"
-    "--prefix KICAD_TEMPLATE_DIR : ${kicad-libraries.symbols}/share/kicad/template"
-    "--prefix KICAD_TEMPLATE_DIR : ${kicad-libraries.footprints}/share/kicad/template"
-  ]
-  ++ optionals (ngspiceSupport) [ "--prefix LD_LIBRARY_PATH : ${libngspice}/lib" ]
-  ++ optionals (with3d) [ "--set KISYS3DMOD ${kicad-libraries.packages3d}/share/kicad/modules/packages3d" ]
-
-  # infinisil's workaround for #39493
-  ++ [ "--set GDK_PIXBUF_MODULE_FILE ${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]
-  ;
-
-  # can't add $out stuff to makeWrapperArgs...
-  # wrapGAppsHook added the $out/share, though i noticed no difference without it
-  preFixup =
-    optionalString (scriptingSupport) '' buildPythonPath "$out $pythonPath"
-    '' +
-    '' wrapProgram $out/bin/kicad $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
-    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
-    '' +
-    '' wrapProgram $out/bin/pcbnew $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
-    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
-    '' +
-    '' wrapProgram $out/bin/eeschema $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
-    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
-    '' +
-    '' wrapProgram $out/bin/gerbview $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
-    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
-    '' +
-    '' wrapProgram $out/bin/pcb_calculator $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
-    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
-    '' +
-    '' wrapProgram $out/bin/pl_editor $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
-    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
-    '' +
-    '' wrapProgram $out/bin/bitmap2component $makeWrapperArgs ''
-    + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
-    ''
-  ;
-
-  meta = {
-    description = "Open Source EDA Suite, Development Build";
-    homepage = "https://www.kicad-pcb.org/";
-    longDescription = ''
-      KiCad is an open source software suite for Electronic Design Automation.
-      The Programs handle Schematic Capture, and PCB Layout with Gerber output.
-    '';
-    license = licenses.agpl3;
-    maintainers = with maintainers; [ evils kiwi berce ];
-    platforms = with platforms; linux;
-  };
-}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 4a2dd40b090d..30efd476c2b9 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -24207,9 +24207,8 @@ in
 
   kicad-small = kicad.override { with3d = false; };
 
-  kicad-libraries = callPackages ../applications/science/electronics/kicad/libraries.nix { };
-
-  kicad-unstable = callPackage ../applications/science/electronics/kicad/unstable.nix {
+  kicad-unstable = callPackage ../applications/science/electronics/kicad {
+    pname = "kicad-unstable";
     # wxGTK31 currently introduces an issue with opening the python interpreter in pcbnew
     wxGTK = wxGTK31.override { withGtk2 = false; };
     pythonPackages = python3Packages;

From 6119ca27bb65d55cd4fb798b9f24e8df721e6747 Mon Sep 17 00:00:00 2001
From: Evils <evils.devils@protonmail.com>
Date: Sun, 15 Dec 2019 04:30:15 +0100
Subject: [PATCH 09/10] kicad: split wrapping and building

---
 .../science/electronics/kicad/base.nix        |  11 +-
 .../science/electronics/kicad/default.nix     | 164 ++++++------------
 pkgs/top-level/all-packages.nix               |  19 +-
 3 files changed, 64 insertions(+), 130 deletions(-)

diff --git a/pkgs/applications/science/electronics/kicad/base.nix b/pkgs/applications/science/electronics/kicad/base.nix
index adb2a418b6e5..2d7cf9e1612e 100644
--- a/pkgs/applications/science/electronics/kicad/base.nix
+++ b/pkgs/applications/science/electronics/kicad/base.nix
@@ -11,6 +11,7 @@
 , ngspiceSupport ? true, libngspice
 , scriptingSupport ? true, swig, python, pythonPackages, wxPython
 , debug ? false, valgrind
+, with3d ? true
 , withI18n ? true
 }:
 
@@ -75,8 +76,10 @@ stdenv.mkDerivation rec {
     ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"
     ++ optional (!withOCE) "-DKICAD_USE_OCE=OFF"
     ++ optional (!withOCC) "-DKICAD_USE_OCC=OFF"
-    ++ optionals (withOCE)
-      [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
+    ++ optionals (withOCE) [
+      "-DKICAD_USE_OCE=ON"
+      "-DOCE_DIR=${opencascade}"
+    ]
     ++ optionals (withOCC) [
       "-DKICAD_USE_OCC=ON"
       "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade"
@@ -88,10 +91,6 @@ stdenv.mkDerivation rec {
     ]
   ;
 
-  pythonPath =
-    optionals (scriptingSupport)
-      [ wxPython pythonPackages.six ];
-
   nativeBuildInputs = [ cmake doxygen pkgconfig lndir ];
 
   buildInputs = [
diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix
index 7164442d19c8..fb4edd1d21b9 100644
--- a/pkgs/applications/science/electronics/kicad/default.nix
+++ b/pkgs/applications/science/electronics/kicad/default.nix
@@ -1,22 +1,25 @@
-{ lib, stdenv, fetchFromGitLab, cmake, libGLU, libGL, zlib, wxGTK
-, libX11, gettext, glew, glm, cairo, curl, openssl, boost, pkgconfig
-, doxygen, pcre, libpthreadstubs, libXdmcp, makeWrapper, gnome3
-, gsettings-desktop-schemas, librsvg, hicolor-icon-theme, cups
-, fetchpatch, lndir, callPackages
+{ lib, stdenv, gnome3, pkgs, wxGTK30, wxGTK31
+, gsettings-desktop-schemas, hicolor-icon-theme
+, callPackage, callPackages
+, librsvg, cups
 
 , pname ? "kicad"
 , oceSupport ? false, opencascade
 , withOCCT ? true, opencascade-occt
 , ngspiceSupport ? true, libngspice
-, scriptingSupport ? true, swig, python, pythonPackages, wxPython
+, scriptingSupport ? true, swig, python3, python3Packages
 , debug ? false, valgrind
 , with3d ? true
+, withI18n ? true
 }:
 
 assert ngspiceSupport -> libngspice != null;
 
 with lib;
 let
+
+  stable = pname != "kicad-unstable";
+
   versions = {
     "kicad" = {
       kicadVersion = {
@@ -36,10 +39,10 @@ let
     };
     "kicad-unstable" = {
       kicadVersion = {
-        version = "2019-12-14";
+        version = "2019-12-15";
         src = {
-          rev = "74caf3b7cb89f5bff86ad470bed67d200f445ba5";
-          sha256 = "083f79plfmxiwgbaldgqi1bqq01g2r153x3c4n7ipi2dn7m5f1lr";
+          rev = "1abb198fb42c68ab8dd8ce6ff97d984df6688e10";
+          sha256 = "1b7k05bl2w4by5bhk6sfb2iynddlg3gah8qma7l9am6q1j3lmx4p";
         };
       };
       libVersion = {
@@ -47,8 +50,8 @@ let
         libSources = {
           i18n.rev = "f1084526305005fa53e78000f7db2d67e8a0d423";
           i18n.sha256 = "1yhc0m4psx0rz5msb1zqn5fz6l1ynwykrsk1443g4073lmjibv74";
-          symbols.rev = "6dd82f11e4b2e60946dd07459e579cee0d42ca75";
-          symbols.sha256 = "07mzaxn2isc6kj9zxl7syi013y4dfv5bvw9vlllbg8624mpwdibz";
+          symbols.rev = "68176b08fdfd34673f4518ef6c331ad2ecf7a9a6";
+          symbols.sha256 = "0kcn8pwdac5snd6vzmdw82k5x9q12nijpdss3nvi5my6g3ilwgjj";
           templates.rev = "0c0490897f803ab8b7c3dad438b7eb1f80e0417c";
           templates.sha256 = "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g";
           footprints.rev = "8cef00a34078c3dabe943a76f9cdf7d05ffc38fc";
@@ -59,104 +62,45 @@ let
       };
     };
   };
-  versionConfig = versions.${pname};
+  versionConfig = versions.${if (stable) then "kicad" else "kicad-unstable"};
+
+  wxGTK = if (stable)
+    # wxGTK3x may default to withGtk2 = false, see #73145
+    then wxGTK30.override { withGtk2 = false; }
+    # wxGTK31 currently introduces an issue with opening the python interpreter in pcbnew
+    # but brings high DPI support?
+    else wxGTK31.override { withGtk2 = false; };
+
+  pythonPackages = python3Packages;
+  python = python3;
+  wxPython = python3Packages.wxPython_4_0;
 
-  # oce on aarch64 fails a test
-  withOCC = withOCCT || (stdenv.isAarch64 && oceSupport);
-  withOCE = oceSupport && !stdenv.isAarch64 && !withOCC;
   kicad-libraries = callPackages ./libraries.nix versionConfig.libVersion;
+  kicad-base = callPackage ./base.nix {
+   pname = if (stable) then "kicad" else "kicad-unstable";
+   inherit versions stable;
+   inherit wxGTK python wxPython;
+   inherit debug with3d withI18n withOCCT oceSupport ngspiceSupport scriptingSupport;
+  };
+
 in
 stdenv.mkDerivation rec {
 
   inherit pname;
-  version = versions.${pname}.kicadVersion.version;
+  version = versions.${if (stable) then "kicad" else "kicad-unstable"}.kicadVersion.version;
 
-  src = fetchFromGitLab ({
-    group = "kicad";
-    owner = "code";
-    repo = "kicad";
-    rev = version;
-  } // versionConfig.kicadVersion.src);
+  src = kicad-base;
 
-  # quick fix for #72248
-  # should be removed if a a more permanent fix is published
-  patches = [
-    (fetchpatch {
-      url = "https://github.com/johnbeard/kicad/commit/dfb1318a3989e3d6f9f2ac33c924ca5030ea273b.patch";
-      sha256 = "00ifd3fas8lid8svzh1w67xc8kyx89qidp7gm633r014j3kjkgcd";
-    })
-  ];
-
-  # tagged releases don't have "unknown"
-  postPatch = optional (pname == "kicad-unstable")
-  ''
-    substituteInPlace CMakeModules/KiCadVersion.cmake \
-      --replace "unknown" ${version}
-    echo "replaced \"unknown\" with \"${version}\" in version name"
-  '';
-
-  makeFlags = optional (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
-
-  cmakeFlags =
-    optionals (scriptingSupport) [
-      "-DKICAD_SCRIPTING=ON"
-      "-DKICAD_SCRIPTING_MODULES=ON"
-      "-DKICAD_SCRIPTING_PYTHON3=ON"
-      "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
-    ]
-    ++ optional (!scriptingSupport)
-      "-DKICAD_SCRIPTING=OFF"
-    ++ optional (ngspiceSupport) "-DKICAD_SPICE=ON"
-    ++ optionals (withOCE)
-      [ "-DKICAD_USE_OCE=ON" "-DOCE_DIR=${opencascade}" ]
-    ++ optionals (withOCC) [
-      "-DKICAD_USE_OCC=ON"
-      # this line is redundant on unstable...
-      # maybe may be removed on a later release
-      "-DKICAD_USE_OCE=OFF"
-      "-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade"
-    ]
-    ++ optionals (debug) [
-      "-DCMAKE_BUILD_TYPE=Debug"
-      "-DKICAD_STDLIB_DEBUG=ON"
-      "-DKICAD_USE_VALGRIND=ON"
-    ]
-    ;
-
-  pythonPath =
-    optionals (scriptingSupport)
+  pythonPath = optionals (scriptingSupport)
     [ wxPython pythonPackages.six ];
 
-  nativeBuildInputs =
-    [ cmake doxygen pkgconfig lndir ]
-    ++ optionals (scriptingSupport)
-      [ pythonPackages.wrapPython makeWrapper ]
-  ;
-
-  buildInputs = [
-    libGLU libGL zlib libX11 wxGTK pcre libXdmcp gettext
-    glew glm libpthreadstubs cairo curl openssl boost
-  ]
-  ++ optionals (scriptingSupport) [ swig python wxPython ]
-  ++ optional (ngspiceSupport) libngspice
-  ++ optional (withOCE) opencascade
-  ++ optional (withOCC) opencascade-occt
-  ++ optional (debug) valgrind
-  ;
-
-  # debug builds fail all but the python test
-  # 5.1.x fails the eeschema test
-  doInstallCheck = !debug && (pname == "kicad-unstable");
-  installCheckTarget = "test";
-
-  dontStrip = debug;
-
-  postInstall = ''
-    mkdir -p $out/share
-    lndir ${kicad-libraries.i18n}/share $out/share
-  '';
+  nativeBuildInputs = optionals (scriptingSupport)
+    [ pythonPackages.wrapPython ];
 
+  # wrapGAppsHook added the equivalent to ${kicad-base}/share
+  # though i noticed no difference without it
   makeWrapperArgs = [
+    "--prefix XDG_DATA_DIRS : ${kicad-base}/share"
     "--prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share"
     "--prefix XDG_DATA_DIRS : ${gnome3.defaultIconTheme}/share"
     "--prefix XDG_DATA_DIRS : ${wxGTK.gtk}/share/gsettings-schemas/${wxGTK.gtk.name}"
@@ -178,36 +122,38 @@ stdenv.mkDerivation rec {
   ++ [ "--set GDK_PIXBUF_MODULE_FILE ${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]
   ;
 
-  # can't add $out stuff to makeWrapperArgs...
-  # wrapGAppsHook added the $out/share, though i noticed no difference without it
-  preFixup =
+  # dunno why i have to add $makeWrapperArgs manually...
+  # $out and $program_PYTHONPATH don't exist when makeWrapperArgs gets set?
+  # not sure if anything has to be done with the other stuff in kicad-base/bin
+  # dxf2idf, idf2vrml, idfcyl, idfrect, kicad2step, kicad-ogltest
+  installPhase =
     optionalString (scriptingSupport) '' buildPythonPath "$out $pythonPath"
     '' +
-    '' wrapProgram $out/bin/kicad $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    '' makeWrapper ${kicad-base}/bin/kicad $out/bin/kicad $makeWrapperArgs ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
-    '' wrapProgram $out/bin/pcbnew $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    '' makeWrapper ${kicad-base}/bin/pcbnew $out/bin/pcbnew $makeWrapperArgs ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
-    '' wrapProgram $out/bin/eeschema $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    '' makeWrapper ${kicad-base}/bin/eeschema $out/bin/eeschema $makeWrapperArgs ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
-    '' wrapProgram $out/bin/gerbview $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    '' makeWrapper ${kicad-base}/bin/gerbview $out/bin/gerbview $makeWrapperArgs ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
-    '' wrapProgram $out/bin/pcb_calculator $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    '' makeWrapper ${kicad-base}/bin/pcb_calculator $out/bin/pcb_calculator $makeWrapperArgs ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
-    '' wrapProgram $out/bin/pl_editor $makeWrapperArgs --prefix XDG_DATA_DIRS : $out/share ''
+    '' makeWrapper ${kicad-base}/bin/pl_editor $out/bin/pl_editor $makeWrapperArgs ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     '' +
-    '' wrapProgram $out/bin/bitmap2component $makeWrapperArgs ''
+    '' makeWrapper ${kicad-base}/bin/bitmap2component $out/bin/bitmap2component $makeWrapperArgs ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
     ''
   ;
 
   meta = {
-    description = if (pname != "kicad-unstable")
+    description = if (stable)
       then "Open Source Electronics Design Automation Suite"
       else "Open Source EDA Suite, Development Build";
     homepage = "https://www.kicad-pcb.org/";
@@ -216,7 +162,9 @@ stdenv.mkDerivation rec {
       The Programs handle Schematic Capture, and PCB Layout with Gerber output.
     '';
     license = licenses.agpl3;
+    # berce seems inactive...
     maintainers = with maintainers; [ evils kiwi berce ];
+    # kicad's cross-platform, not sure what to fill in here
     platforms = with platforms; linux;
   };
 }
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 30efd476c2b9..931ff1fb8766 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -24198,24 +24198,11 @@ in
 
   fped = callPackage ../applications/science/electronics/fped { };
 
-  kicad = callPackage ../applications/science/electronics/kicad {
-    wxGTK = wxGTK30.override { withGtk2 = false; };
-    pythonPackages = python3Packages;
-    python = python3;
-    wxPython = python3Packages.wxPython_4_0;
-  };
+  kicad = callPackage ../applications/science/electronics/kicad { };
 
-  kicad-small = kicad.override { with3d = false; };
+  kicad-small = kicad.override { pname = "kicad-small"; with3d = false; };
 
-  kicad-unstable = callPackage ../applications/science/electronics/kicad {
-    pname = "kicad-unstable";
-    # wxGTK31 currently introduces an issue with opening the python interpreter in pcbnew
-    wxGTK = wxGTK31.override { withGtk2 = false; };
-    pythonPackages = python3Packages;
-    python = python3;
-    wxPython = python3Packages.wxPython_4_0;
-    debug = true;
-  };
+  kicad-unstable = kicad.override { pname = "kicad-unstable"; debug = true; };
 
   librepcb = libsForQt5.callPackage ../applications/science/electronics/librepcb { };
 

From e4786f3a1c75b6e2cc9b77063d0937801ce43b11 Mon Sep 17 00:00:00 2001
From: Evils <evils.devils@protonmail.com>
Date: Sun, 15 Dec 2019 12:26:23 +0100
Subject: [PATCH 10/10] kicad: update & cleanup

minor simplification, fix base version

split i18n and get from gitlab

correct wrapper pythonpath, cleanup build output

update & fake git describe

correct base.nix to fit contributing.md
---
 .../science/electronics/kicad/base.nix        | 12 +--
 .../science/electronics/kicad/default.nix     | 43 ++++++-----
 .../science/electronics/kicad/libraries.nix   | 73 ++++++++++++-------
 pkgs/top-level/all-packages.nix               |  2 -
 4 files changed, 76 insertions(+), 54 deletions(-)

diff --git a/pkgs/applications/science/electronics/kicad/base.nix b/pkgs/applications/science/electronics/kicad/base.nix
index 2d7cf9e1612e..6bc665962297 100644
--- a/pkgs/applications/science/electronics/kicad/base.nix
+++ b/pkgs/applications/science/electronics/kicad/base.nix
@@ -11,7 +11,6 @@
 , ngspiceSupport ? true, libngspice
 , scriptingSupport ? true, swig, python, pythonPackages, wxPython
 , debug ? false, valgrind
-, with3d ? true
 , withI18n ? true
 }:
 
@@ -56,10 +55,11 @@ stdenv.mkDerivation rec {
   ];
 
   # tagged releases don't have "unknown"
-  postPatch = optional (!stable)
-  ''
+  # kicad nightlies use git describe --dirty
+  # nix removes .git, so its approximated here
+  postPatch = ''
     substituteInPlace CMakeModules/KiCadVersion.cmake \
-      --replace "unknown" ${baseVersion}
+      --replace "unknown" ${builtins.substring 0 10 src.rev}
   '';
 
   makeFlags = optional (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
@@ -117,9 +117,9 @@ stdenv.mkDerivation rec {
   '';
 
   meta = {
-    description = "just the built source without the libraries";
+    description = "Just the built source without the libraries";
     longDescription = ''
-      just the build products, optionally with the i18n linked in
+      Just the build products, optionally with the i18n linked in
       the libraries are passed via an env var in the wrapper, default.nix
     '';
     homepage = "https://www.kicad-pcb.org/";
diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix
index fb4edd1d21b9..47222fe4a966 100644
--- a/pkgs/applications/science/electronics/kicad/default.nix
+++ b/pkgs/applications/science/electronics/kicad/default.nix
@@ -19,6 +19,7 @@ with lib;
 let
 
   stable = pname != "kicad-unstable";
+  baseName = if (stable) then "kicad" else "kicad-unstable";
 
   versions = {
     "kicad" = {
@@ -39,30 +40,30 @@ let
     };
     "kicad-unstable" = {
       kicadVersion = {
-        version = "2019-12-15";
+        version = "2019-12-31";
         src = {
-          rev = "1abb198fb42c68ab8dd8ce6ff97d984df6688e10";
-          sha256 = "1b7k05bl2w4by5bhk6sfb2iynddlg3gah8qma7l9am6q1j3lmx4p";
+          rev = "eaaa4eb63acb289047dfbb6cc275579dea58f12b";
+          sha256 = "1v2hf2slphjdh14y56pmzlpi6mqidrd8198if1fi0cch72v37zch";
         };
       };
       libVersion = {
         version = "unstable";
         libSources = {
-          i18n.rev = "f1084526305005fa53e78000f7db2d67e8a0d423";
-          i18n.sha256 = "1yhc0m4psx0rz5msb1zqn5fz6l1ynwykrsk1443g4073lmjibv74";
-          symbols.rev = "68176b08fdfd34673f4518ef6c331ad2ecf7a9a6";
-          symbols.sha256 = "0kcn8pwdac5snd6vzmdw82k5x9q12nijpdss3nvi5my6g3ilwgjj";
+          i18n.rev = "e7439fd76f27cfc26e269c4e6c4d56245345c28b";
+          i18n.sha256 = "1nqm1kx5b4f7s0f9q8bg4rdhqnp0128yp6bgnrkia1kwmfnf5gmy";
+          symbols.rev = "1bc5ff11c76bcbfda227e534b0acf737edddde8f";
+          symbols.sha256 = "05kv93790wi4dpbn2488p587b83yz1zw9h62lkv41h7vn2r1mmb7";
           templates.rev = "0c0490897f803ab8b7c3dad438b7eb1f80e0417c";
           templates.sha256 = "0cs3bm3zb5ngw5ldn0lzw5bvqm4kvcidyrn76438alffwiz2b15g";
-          footprints.rev = "8cef00a34078c3dabe943a76f9cdf7d05ffc38fc";
-          footprints.sha256 = "0aplxxbcyb4vpj3kpcnj6lbnpk9zjql46js9i4iaqs388z93sb97";
-          packages3d.rev = "58d73640ebb764637eb7bba6290815b84a24b8ad";
-          packages3d.sha256 = "0cff2ms1bsw530kqb1fr1m2pjixyxzwa81mxgac3qpbcf8fnpvaz";
+          footprints.rev = "454126c125edd3fa8633f301421a7d9c4de61b77";
+          footprints.sha256 = "00nli4kx2i68bk852rivbirzcgpsdlpdk34g1q892952jsbh7fy6";
+          packages3d.rev = "c2b92a411adc93ddeeed74b36b542e1057f81a2a";
+          packages3d.sha256 = "05znc6y2lc31iafspg308cxdda94zg6c7mwslmys76npih1pb8qc";
         };
       };
     };
   };
-  versionConfig = versions.${if (stable) then "kicad" else "kicad-unstable"};
+  versionConfig = versions.${baseName};
 
   wxGTK = if (stable)
     # wxGTK3x may default to withGtk2 = false, see #73145
@@ -77,19 +78,23 @@ let
 
   kicad-libraries = callPackages ./libraries.nix versionConfig.libVersion;
   kicad-base = callPackage ./base.nix {
-   pname = if (stable) then "kicad" else "kicad-unstable";
-   inherit versions stable;
-   inherit wxGTK python wxPython;
-   inherit debug with3d withI18n withOCCT oceSupport ngspiceSupport scriptingSupport;
+    pname = baseName;
+    inherit versions stable baseName;
+    inherit wxGTK python wxPython;
+    inherit debug withI18n withOCCT oceSupport ngspiceSupport scriptingSupport;
   };
 
 in
 stdenv.mkDerivation rec {
 
   inherit pname;
-  version = versions.${if (stable) then "kicad" else "kicad-unstable"}.kicadVersion.version;
+  version = versions.${baseName}.kicadVersion.version;
 
   src = kicad-base;
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+  dontFixup = true;
 
   pythonPath = optionals (scriptingSupport)
     [ wxPython pythonPackages.six ];
@@ -115,8 +120,8 @@ stdenv.mkDerivation rec {
     "--prefix KICAD_TEMPLATE_DIR : ${kicad-libraries.symbols}/share/kicad/template"
     "--prefix KICAD_TEMPLATE_DIR : ${kicad-libraries.footprints}/share/kicad/template"
   ]
-  ++ optionals (ngspiceSupport) [ "--prefix LD_LIBRARY_PATH : ${libngspice}/lib" ]
   ++ optionals (with3d) [ "--set KISYS3DMOD ${kicad-libraries.packages3d}/share/kicad/modules/packages3d" ]
+  ++ optionals (ngspiceSupport) [ "--prefix LD_LIBRARY_PATH : ${libngspice}/lib" ]
 
   # infinisil's workaround for #39493
   ++ [ "--set GDK_PIXBUF_MODULE_FILE ${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" ]
@@ -127,7 +132,7 @@ stdenv.mkDerivation rec {
   # not sure if anything has to be done with the other stuff in kicad-base/bin
   # dxf2idf, idf2vrml, idfcyl, idfrect, kicad2step, kicad-ogltest
   installPhase =
-    optionalString (scriptingSupport) '' buildPythonPath "$out $pythonPath"
+    optionalString (scriptingSupport) '' buildPythonPath "${kicad-base} $pythonPath"
     '' +
     '' makeWrapper ${kicad-base}/bin/kicad $out/bin/kicad $makeWrapperArgs ''
     + optionalString (scriptingSupport) '' --set PYTHONPATH "$program_PYTHONPATH"
diff --git a/pkgs/applications/science/electronics/kicad/libraries.nix b/pkgs/applications/science/electronics/kicad/libraries.nix
index 0fa3d48e9d42..53e190d2749b 100644
--- a/pkgs/applications/science/electronics/kicad/libraries.nix
+++ b/pkgs/applications/science/electronics/kicad/libraries.nix
@@ -1,6 +1,6 @@
-{ lib, stdenv, fetchFromGitHub, cmake, gettext
-, version
-, libSources
+{ lib, stdenv, cmake, gettext
+, fetchFromGitHub, fetchFromGitLab
+, version, libSources
 }:
 
 # callPackage libraries {
@@ -13,33 +13,52 @@
 with lib;
 let
   mkLib = name: attrs:
-    stdenv.mkDerivation ({
-      name = "kicad-${name}-${version}";
-      src = fetchFromGitHub ({
-        owner = "KiCad";
-        repo = "kicad-${name}";
-        rev = version;
-        inherit name;
-      } // (libSources.${name} or {}));
-      nativeBuildInputs = [ cmake ];
-    } // attrs);
+    stdenv.mkDerivation (
+      {
+        pname = "kicad-${name}";
+        version = "${version}";
+        src = fetchFromGitHub (
+          {
+            owner = "KiCad";
+            repo = "kicad-${name}";
+            rev = version;
+            inherit name;
+          } // (libSources.${name} or { })
+        );
+        nativeBuildInputs = [ cmake ];
+        meta.license = licenses.cc-by-sa-40;
+      } // attrs
+    );
 in
 {
-  symbols = mkLib "symbols" {
-    meta.license = licenses.cc-by-sa-40;
-  };
-  templates = mkLib "templates" {
-    meta.license = licenses.cc-by-sa-40;
-  };
-  footprints = mkLib "footprints" {
-    meta.license = licenses.cc-by-sa-40;
-  };
-  i18n = mkLib "i18n" {
-    buildInputs = [ gettext ];
-    meta.license = licenses.gpl2; # https://github.com/KiCad/kicad-i18n/issues/3
-  };
+  symbols = mkLib "symbols" { };
+  templates = mkLib "templates" { };
+  footprints = mkLib "footprints" { };
   packages3d = mkLib "packages3d" {
     hydraPlatforms = []; # this is a ~1 GiB download, occupies ~5 GiB in store
-    meta.license = licenses.cc-by-sa-40;
   };
+
+  # i18n is a special case, not actually a library
+  # more a part of kicad proper, but also optional and separate
+  # since their move to gitlab they're keeping it in a separate path
+  # kicad has no way to find i18n except through a path relative to its install path
+  # therefore this is being linked into ${kicad-base}/share/
+  # and defined here to make use of the rev & sha256's brought here for the libs
+  i18n = let name = "i18n"; in
+    stdenv.mkDerivation {
+      pname = "kicad-${name}";
+      version = "${version}";
+      src = fetchFromGitLab (
+        {
+          group = "kicad";
+          owner = "code";
+          repo = "kicad-${name}";
+          rev = version;
+          inherit name;
+        } // (libSources.${name} or { })
+      );
+      buildInputs = [ gettext ];
+      nativeBuildInputs = [ cmake ];
+      meta.license = licenses.gpl2; # https://github.com/KiCad/kicad-i18n/issues/3
+    };
 }
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 931ff1fb8766..75e3b8125969 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -24199,9 +24199,7 @@ in
   fped = callPackage ../applications/science/electronics/fped { };
 
   kicad = callPackage ../applications/science/electronics/kicad { };
-
   kicad-small = kicad.override { pname = "kicad-small"; with3d = false; };
-
   kicad-unstable = kicad.override { pname = "kicad-unstable"; debug = true; };
 
   librepcb = libsForQt5.callPackage ../applications/science/electronics/librepcb { };