{ lib, stdenv , fetchurl , copper , python3 , pkg-config , withQt ? false, qtbase ? null, wrapQtAppsHook ? null , withGtk2 ? false, gtk2 , withGtk3 ? false, gtk3 , mkDerivation ? stdenv.mkDerivation }: let onlyOneEnabled = xs: 1 == builtins.length (builtins.filter lib.id xs); in assert onlyOneEnabled [ withQt withGtk2 withGtk3 ]; mkDerivation rec { pname = "code-browser"; version = "8.0"; src = fetchurl { url = "https://tibleiz.net/download/code-browser-${version}-src.tar.gz"; sha256 = "sha256-beCp4lx4MI1+hVgWp2h3piE/zu51zfwQdB5g7ImgmwY="; }; postPatch = '' substituteInPlace Makefile --replace "LFLAGS=-no-pie" "LFLAGS=-no-pie -L." patchShebangs . '' + lib.optionalString withQt '' substituteInPlace libs/copper-ui/Makefile --replace "moc -o" "${qtbase.dev}/bin/moc -o" substituteInPlace libs/copper-ui/Makefile --replace "all: qt gtk gtk2" "all: qt" '' + lib.optionalString withGtk2 '' substituteInPlace libs/copper-ui/Makefile --replace "all: qt gtk gtk2" "all: gtk2" '' + lib.optionalString withGtk3 '' substituteInPlace libs/copper-ui/Makefile --replace "all: qt gtk gtk2" "all: gtk" '' ; nativeBuildInputs = [ copper python3 pkg-config ] ++ lib.optionals withGtk2 [ gtk2 ] ++ lib.optionals withGtk3 [ gtk3 ] ++ lib.optionals withQt [ qtbase wrapQtAppsHook ]; buildInputs = lib.optionals withQt [ qtbase ] ++ lib.optionals withGtk2 [ gtk2 ] ++ lib.optionals withGtk3 [ gtk3 ]; makeFlags = [ "prefix=$(out)" "COPPER=${copper}/bin/copper-elf64" "with-local-libs" ] ++ lib.optionals withQt [ "QINC=${qtbase.dev}/include" "UI=qt" ] ++ lib.optionals withGtk2 [ "UI=gtk2" ] ++ lib.optionals withGtk3 [ "UI=gtk" ]; meta = with lib; { description = "Folding text editor, designed to hierarchically structure any kind of text file and especially source code"; homepage = "https://tibleiz.net/code-browser/"; license = licenses.gpl2; platforms = platforms.x86_64; }; }