<ins> --- a/bin/scfbuild +++ b/bin/scfbuild @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- from __future__ import (absolute_import, division, print_function, --- a/scfbuild/builder.py +++ b/scfbuild/builder.py @@ -287,8 +287,8 @@ def _add_name_record(self, text, name_id, platform_id, plat_enc_id, lang_id): # TODO: The installed version of fontTools doesn't have # table__n_a_m_e.setName(). record = NameRecord() -        # PyYAML creates strings, force to Unicode -        record.string = unicode(text) +        # PyYAML creates strings, which are unicode as of Python3 +        record.string = text record.nameID = name_id record.platformID = platform_id record.platEncID = plat_enc_id --- a/scfbuild/fforge.py +++ b/scfbuild/fforge.py @@ -84,7 +84,7 @@ def add_glyphs(font, svg_filepaths, conf): u_ids = [int(u_id, 16) for u_id in filename.split("-")] # Example: (0x1f441, 0x1f5e8) -            u_str = ''.join(map(unichr, u_ids)) +            u_str = ''.join(map(chr, u_ids)) # Example: "U0001f441U0001f5e8" # Replace sequences with correct ZWJ/VS16 versions as needed --- a/scfbuild/main.py +++ b/scfbuild/main.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # SCFBuild is released under the GNU General Public License v3. index 0000000..99418b5 --- /dev/null +++ b/scfbuild/requirements.txt @@ -0,0 +1,2 @@ +fonttools>=3.41.2 +PyYAML>=5.1 </ins>


qtbase = qt4; }; <del> scfbuild = python2.pkgs.callPackage ../tools/misc/scfbuild { }; </del> <ins> scfbuild = python3.pkgs.callPackage ../tools/misc/scfbuild { }; </ins> scriptaculous = callPackage ../development/libraries/scriptaculous { };


<del> { stdenv, fetchgit, fontforge, pythonFull }: </del> <ins> { stdenv, fetchgit, fontforge, python3 }: </ins> stdenv.mkDerivation rec { pname = "rictydiminished-with-firacode";


nativeBuildInputs = [ fontforge <del> (pythonFull.withPackages (ps: [ </del> <ins> (python3.withPackages (ps: [ </ins> ps.jinja2 ps.py3to2 ps.fonttools


<del> { stdenv, fetchFromGitHub, fontforge, pythonPackages, python }: </del> <ins> { stdenv, fetchFromGitHub, fontforge, python3Packages, python3 }: </ins> stdenv.mkDerivation rec { pname = "liberation-sans-narrow";


sha256 = "1qw554jbdnqkg6pjjl4cqkgsalq3398kzvww2naw30vykcz752bm"; }; <del> buildInputs = [ fontforge pythonPackages.fonttools python ]; </del> <ins> buildInputs = [ fontforge python3Packages.fonttools python3 ]; </ins> installPhase = '' find . -name '*Narrow*.ttf' -exec install -m444 -Dt $out/share/fonts/truetype {} ;


<del> { stdenv, fetchFromGitHub, python2Packages, fontforge }: </del> <ins> { stdenv, fetchFromGitHub, python3Packages}: </ins> stdenv.mkDerivation rec { pname = "xits-math";


sha256 = "043g0gnjc7wn1szvrs0rc1vvrq1qmhqh45b0y2kwrlxsgprpv8ll"; }; <del> nativeBuildInputs = [ fontforge ] ++ (with python2Packages; [ python fonttools ]); </del> <ins> nativeBuildInputs = (with python3Packages; [ python fonttools fontforge ]); </ins> postPatch = '' rm *.otf


"-DJSON_MultipleHeaders=ON" ]; <del> doCheck = stdenv.hostPlatform == stdenv.buildPlatform; </del> <ins> # A test cause the build to timeout https://github.com/nlohmann/json/issues/1816 #doCheck = stdenv.hostPlatform == stdenv.buildPlatform; doCheck = false; </ins> postInstall = "rm -rf $out/lib64";


"--with-tclsh=${tcl}/bin/tclsh" "--with-tlib=ncurses" "--with-compiledby=Nix" <ins> "LDFLAGS=-headerpad_max_install_names" </ins> ]; makeFlags = ''PREFIX=$(out) CPPFLAGS="-Wno-error"'';


in stdenv.mkDerivation rec { <del> name = "aspell-0.60.6.1"; </del> <ins> name = "aspell-0.60.8"; </ins> src = fetchurl { url = "mirror://gnu/aspell/${name}.tar.gz"; <del> sha256 = "1qgn5psfyhbrnap275xjfrzppf5a83fb67gpql0kfqv37al869gm"; </del> <ins> sha256 = "1wi60ankalmh8ds7nplz434jd7j94gdvbahdwsr539rlad8pxdzr"; </ins> }; <del> patches = [ (fetchpatch { # remove in >= 0.60.7 name = "gcc-7.patch"; url = "https://github.com/GNUAspell/aspell/commit/8089fa02122fed0a.diff"; sha256 = "1b3p1zy2lqr2fknddckm58hyk95hw4scf6hzjny1v9iaic2p37ix"; }) (fetchpatch { name = "CVE-2019-17544.patch"; url = "https://github.com/GNUAspell/aspell/commit/80fa26c74279fced8d778351cff19d1d8f44fe4e.patch"; sha256 = "0k5dnh8gcb7chnyx7jgkksqmz2hm05hmrvcd0znsfib975pvp4rg"; }) ] ++ stdenv.lib.optional searchNixProfiles ./data-dirs-from-nix-profiles.patch; </del> <ins> patches = stdenv.lib.optional searchNixProfiles ./data-dirs-from-nix-profiles.patch; </ins> postPatch = '' patch interfaces/cc/aspell.h < ${./clang.patch} ''; <del> nativeBuildInputs = [ perl ]; </del> <ins> buildInputs = [ perl ]; </ins> doCheck = true;


# As of 2.19.0, t5562 refers to #!/usr/bin/perl patchShebangs t/t5562/invoke-with-content-length.pl <ins> '' + stdenv.lib.optionalString stdenv.isDarwin '' # XXX: Some tests added in 2.24.0 fail. # Please try to re-enable on the next release. disable_test t7816-grep-binary-pattern </ins> '' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl '' # Test fails (as of 2.17.0, musl 1.1.19) disable_test t3900-i18n-commit


stdenv.mkDerivation rec { pname = "gnunet"; <del> version = "0.11.6"; </del> <ins> version = "0.11.8"; </ins> src = fetchurl { url = "mirror://gnu/gnunet/${pname}-${version}.tar.gz"; <del> sha256 = "1gspr1lh885sb9r2anh7bi4zan3zjqx33lpyhq9hm2g0n5ip187q"; </del> <ins> sha256 = "1zkmcq75sfr3iyg8rgxp9dbl7fwsvc1a71rc0vgisghcbrx1n7yj"; </ins> }; enableParallelBuilding = true;


owner = "hsoft"; repo = "send2trash"; rev = version; <del> sha256 = "1w502i5h8xaqf03g6h95h4vs1wqfv6kg925dn63phrwmg1hfz2xx"; </del> <ins> sha256 = "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"; </ins> }; doCheck = !stdenv.isDarwin;


<ins> { lib, stdenv, fetchFromGitHub , autoPatchelfHook , fuse, packer , maven, jdk, jre, makeWrapper, glib, wrapGAppsHook }: let pname = "cryptomator"; version = "1.5.13"; src = fetchFromGitHub { owner = "cryptomator"; repo = "cryptomator"; rev = version; sha256 = "1s9jl3nl6yfjzmilz9b8azk8592nd39xflzfdf38v6s4iiq86r8j"; }; icons = fetchFromGitHub { owner = "cryptomator"; repo = "cryptomator-linux"; rev = version; sha256 = "1x6h6wp6yxnj576874xj3d2jm8jmb7918wprqvlz4sryxhlcssa7"; }; # perform fake build to make a fixed-output derivation out of the files downloaded from maven central (120MB) deps = stdenv.mkDerivation { name = "cryptomator-${version}-deps"; inherit src; nativeBuildInputs = [ jdk maven ]; buildPhase = '' cd main while mvn -Prelease package -Dmaven.repo.local=$out/.m2 -Dmaven.wagon.rto=5000; [ $? = 1 ]; do echo "timeout, restart maven to continue downloading" done ''; # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside installPhase = '' find $out/.m2 -type f -regex '.+(.lastUpdated|resolver-status.properties|_remote.repositories)' -delete find $out/.m2 -type f -iname '*.pom' -exec sed -i -e 's/r+$//' {} ; ''; outputHashAlgo = "sha256"; outputHashMode = "recursive"; outputHash = "06q8bqdz3c4i84wxl9z5861zwdsw8jzcvsbgxqrnh8rwi7500sa7"; }; in stdenv.mkDerivation rec { inherit pname version src; buildPhase = '' cd main mvn -Prelease package --offline -Dmaven.repo.local=$(cp -dpR ${deps}/.m2 ./ && chmod +w -R .m2 && pwd)/.m2 ''; installPhase = '' mkdir -p $out/bin/ $out/usr/share/cryptomator/libs/ cp buildkit/target/libs/* buildkit/target/linux-libs/* $out/usr/share/cryptomator/libs/ makeWrapper ${jre}/bin/java $out/bin/cryptomator  --add-flags "-classpath '$out/usr/share/cryptomator/libs/*'"  --add-flags "-Dcryptomator.settingsPath='~/.config/Cryptomator/settings.json'"  --add-flags "-Dcryptomator.ipcPortPath='~/.config/Cryptomator/ipcPort.bin'"  --add-flags "-Dcryptomator.logDir='~/.local/share/Cryptomator/logs'"  --add-flags "-Dcryptomator.mountPointsDir='~/.local/share/Cryptomator/mnt'"  --add-flags "-Djdk.gtk.version=3"  --add-flags "-Xss20m"  --add-flags "-Xmx512m"  --add-flags "org.cryptomator.launcher.Cryptomator"  --prefix PATH : "$out/usr/share/cryptomator/libs/:${lib.makeBinPath [ jre glib ]}"  --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ fuse ]}"  --set JAVA_HOME "${jre.home}" # install desktop entry and icons cp -r ${icons}/resources/appimage/AppDir/usr $out/ ''; nativeBuildInputs = [ autoPatchelfHook maven makeWrapper wrapGAppsHook jdk ]; buildInputs = [ fuse packer jre glib ]; meta = with lib; { description = "Free client-side encryption for your cloud files"; homepage = "https://cryptomator.org"; license = licenses.gpl3Plus; maintainers = with maintainers; [ bachp ]; platforms = platforms.linux; }; } </ins>


criu = callPackage ../os-specific/linux/criu { }; <ins> cryptomator = callPackage ../tools/security/cryptomator { }; </ins> cryptsetup = callPackage ../os-specific/linux/cryptsetup { }; cramfsprogs = callPackage ../os-specific/linux/cramfsprogs { };


<ins> diff -ur openslp-2.0.0.orig/common/slp_buffer.c openslp-2.0.0/common/slp_buffer.c --- openslp-2.0.0.orig/common/slp_buffer.c	2012-12-10 15:31:53.000000000 -0800 +++ openslp-2.0.0/common/slp_buffer.c	2019-11-26 21:54:20.000000000 -0800 @@ -30,6 +30,13 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *-------------------------------------------------------------------------*/ +/* Copyright (c) 2019 VMware, Inc. + * SPDX-License-Identifier: BSD-3-Clause + * This file is provided under the BSD-3-Clause license. + * See COPYING file for more details and other copyrights + * that may apply. + */ + /** Functions for managing SLP message buffers. * * This file provides a higher level abstraction over malloc and free that @@ -153,4 +160,20 @@ xfree(buf); } +/** Report remaining free buffer size in bytes. + * + * Check if buffer is allocated and if so return bytes left in a + * @c SLPBuffer object. + * + * @param[in] buf The SLPBuffer to be freed. + */ +size_t +RemainingBufferSpace(SLPBuffer buf) +{ +   if (buf->allocated == 0) { +      return 0; +   } +   return buf->end - buf->curpos; +} + /*=========================================================================*/ diff -ur openslp-2.0.0.orig/common/slp_buffer.h openslp-2.0.0/common/slp_buffer.h --- openslp-2.0.0.orig/common/slp_buffer.h	2012-11-28 09:07:04.000000000 -0800 +++ openslp-2.0.0/common/slp_buffer.h	2019-11-26 21:54:32.000000000 -0800 @@ -30,6 +30,13 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *-------------------------------------------------------------------------*/ +/* Copyright (c) 2019 VMware, Inc. + * SPDX-License-Identifier: BSD-3-Clause + * This file is provided under the BSD-3-Clause license. + * See COPYING file for more details and other copyrights + * that may apply. + */ + /** Header file that defines SLP message buffer management routines. * * Includes structures, constants and functions that used to handle memory @@ -78,6 +85,8 @@ SLPBuffer SLPBufferListAdd(SLPBuffer * list, SLPBuffer buf); +size_t RemainingBufferSpace(SLPBuffer buf); + /*! @} */ #endif /* SLP_BUFFER_H_INCLUDED */ diff -ur openslp-2.0.0.orig/slpd/slpd_process.c openslp-2.0.0/slpd/slpd_process.c --- openslp-2.0.0.orig/slpd/slpd_process.c	2012-12-12 09:38:54.000000000 -0800 +++ openslp-2.0.0/slpd/slpd_process.c	2019-11-26 21:55:10.000000000 -0800 @@ -30,6 +30,13 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *-------------------------------------------------------------------------*/ +/* Copyright (c) 2019 VMware, Inc. + * SPDX-License-Identifier: BSD-3-Clause + * This file is provided under the BSD-3-Clause license. + * See COPYING file for more details and other copyrights + * that may apply. + */ + /** Processes incoming SLP messages. * * @file       slpd_process.c @@ -514,13 +521,27 @@ { for (i = 0; i < db->urlcount; i++) { -         /* urlentry is the url from the db result */ urlentry = db->urlarray[i]; +         if (urlentry->opaque != NULL) { +            const int64_t newsize = size + urlentry->opaquelen; +            if (urlentry->opaquelen <= 0 || newsize > INT_MAX) +            { +               SLPDLog("Invalid opaquelen %d or sizeo of opaque url is too big, size=%dn", +                       urlentry->opaquelen, size); +               errorcode = SLP_ERROR_PARSE_ERROR; +               goto FINISHED; +            } +            size +=  urlentry->opaquelen; +         } +         else +         { +            /* urlentry is the url from the db result */ +            size += urlentry->urllen + 6; /*  1 byte for reserved  */ +                                          /*  2 bytes for lifetime */ +                                          /*  2 bytes for urllen   */ +                                          /*  1 byte for authcount */ +          } -         size += urlentry->urllen + 6; /*  1 byte for reserved  */ -                                       /*  2 bytes for lifetime */ -                                       /*  2 bytes for urllen   */ -                                       /*  1 byte for authcount */ #ifdef ENABLE_SLPv2_SECURITY /* make room to include the authblock that was asked for */ if (G_SlpdProperty.securityEnabled @@ -594,7 +615,7 @@ urlentry = db->urlarray[i]; #ifdef ENABLE_SLPv1 -         if (urlentry->opaque == 0) +         if (urlentry->opaque == NULL) { /* url-entry reserved */ *result->curpos++ = 0; @@ -606,8 +627,18 @@ PutUINT16(&result->curpos, urlentry->urllen); /* url-entry url */ -            memcpy(result->curpos, urlentry->url, urlentry->urllen); -            result->curpos += urlentry->urllen; +            if (RemainingBufferSpace(result) >= urlentry->urllen) +            { +               memcpy(result->curpos, urlentry->url, urlentry->urllen); +               result->curpos = result->curpos + urlentry->urllen; +            } +            else +            { +                SLPDLog("Url too big (ask: %d have %" PRId64 "), failing requestn", +                        urlentry->opaquelen, (int64_t) RemainingBufferSpace(result)); +                errorcode = SLP_ERROR_PARSE_ERROR; +                goto FINISHED; +            } /* url-entry auths */ *result->curpos++ = 0; @@ -621,8 +652,18 @@ /* TRICKY: Fix up the lifetime. */ TO_UINT16(urlentry->opaque + 1, urlentry->lifetime); -            memcpy(result->curpos, urlentry->opaque, urlentry->opaquelen); -            result->curpos += urlentry->opaquelen; +            if (RemainingBufferSpace(result) >= urlentry->opaquelen) +            { +               memcpy(result->curpos, urlentry->opaque, urlentry->opaquelen); +               result->curpos = result->curpos + urlentry->opaquelen; +             } +             else +             { +               SLPDLog("Opaque Url too big (ask: %d have %" PRId64 "), failing requestn", +                       urlentry->opaquelen, (int64_t) RemainingBufferSpace(result)); +               errorcode = SLP_ERROR_PARSE_ERROR; +               goto FINISHED; +             } } } } </ins>


sha256 = "0zp61axx93b7nrbsyhn2x4dnw7n9y6g4rys21hyqxk4khrnc2yr9"; }) ./CVE-2016-4912.patch <ins> ./CVE-2019-5544.patch </ins> ]; meta = with lib; {


''; dmDefault = cfg.desktopManager.default; <ins> # fallback default for cases when only default wm is set dmFallbackDefault = if dmDefault != null then dmDefault else "none"; </ins> wmDefault = cfg.windowManager.default; <del> defaultSessionFromLegacyOptions = concatStringsSep "+" (filter (s: s != null) ([ dmDefault ] ++ optional (wmDefault != "none") wmDefault)); </del> <ins> defaultSessionFromLegacyOptions = dmFallbackDefault + optionalString (wmDefault != null && wmDefault != "none") "+${wmDefault}"; </ins> in


{ c = wmDefault; t = "- services.xserver.windowManager.default"; } ]))} Please use <del> services.xserver.displayManager.defaultSession = "${concatStringsSep "+" (filter (s: s != null) [ dmDefault wmDefault ])}"; </del> <ins> services.xserver.displayManager.defaultSession = "${defaultSessionFromLegacyOptions}"; </ins> instead. '' ];


buildPythonPackage rec { pname = "loguru"; <del> version = "0.4.0"; </del> <ins> version = "0.4.1"; </ins> disabled = isPy27; src = fetchPypi { inherit pname version; <del> sha256 = "d5ddf363b7e0e562652f283f74a89bf35601baf16b70f2cd2736a2f8c6638748"; </del> <ins> sha256 = "a6101fd435ac89ba5205a105a26a6ede9e4ddbb4408a6e167852efca47806d11"; </ins> }; checkInputs = [ pytestCheckHook colorama ]; disabledTests = [ "test_time_rotation_reopening" "test_file_buffering" ] <del> ++ stdenv.lib.optionals stdenv.isDarwin [ "test_rotation_and_retention" "test_rotation_and_retention_timed_file" "test_renaming" ]; </del> <ins> ++ stdenv.lib.optionals stdenv.isDarwin [ "test_rotation_and_retention" "test_rotation_and_retention_timed_file" "test_renaming" "test_await_complete_inheritance" ]; </ins> meta = with stdenv.lib; { homepage = https://github.com/Delgan/loguru;


hashed-mirrors = connect-timeout = 1 ''; <ins> # save some memory documentation.enable = false; </ins> }; # /etc/nixos/configuration.nix for the vm configFile = pkgs.writeText "configuration.nix"  ''


name = "debian-9.8-stretch-i386"; fullName = "Debian 9.8 Stretch (i386)"; packagesList = fetchurl { <del> url = http://snapshot.debian.org/archive/debian/20190503T090946Z/dists/stretch/main/binary-i386/Packages.xz; sha256 = "1dr3skl35iyj85qlc33lq4whippbqf327vnbcyfqqrv6h86k68mw"; </del> <ins> url = http://snapshot.debian.org/archive/debian/20200301T030401Z/dists/stretch/main/binary-i386/Packages.xz; sha256 = "1jglr1d1jys3xddp8f7w9j05db39fah8xy4gfkpqbd1b5d2caslz"; </ins> }; urlPrefix = mirror://debian; packages = commonDebianPackages;


name = "Fluid-3"; src = fetchurl { <del> url = "http://www.musescore.org/download/fluid-soundfont.tar.gz"; </del> <ins> url = "https://ftp.osuosl.org/pub/musescore/soundfont/fluid-soundfont.tar.gz"; </ins> sha256 = "1f96bi0y6rms255yr8dfk436azvwk66c99j6p43iavyq8jg7c5f8"; };


{ stdenv, substituteAll , fetchurl, perl, gcc, llvm , ncurses5, gmp, glibc, libiconv <ins> , llvmPackages </ins> }: # Prebuilt only does native assert stdenv.targetPlatform == stdenv.hostPlatform; let <ins> useLLVM = !stdenv.targetPlatform.isx86; </ins> libPath = stdenv.lib.makeLibraryPath ([ ncurses5 gmp ] ++ stdenv.lib.optional (stdenv.hostPlatform.isDarwin) libiconv);


or (throw "cannot bootstrap GHC on this platform")); nativeBuildInputs = [ perl ]; <del> buildInputs = stdenv.lib.optionals (stdenv.targetPlatform.isAarch32 || stdenv.targetPlatform.isAarch64) [ llvm ]; </del> <ins> propagatedBuildInputs = stdenv.lib.optionals useLLVM [ llvmPackages.llvm ]; </ins> # Cannot patchelf beforehand due to relative RPATHs that anticipate # the final install location/


done for d in $(grep '^dynamic-library-dirs:' "$packageConfDir"/* | cut -d' ' -f2- | tr ' ' 'n' | sort -u); do <del> for lib in "$d/"*.dylib; do </del> <ins> for lib in "$d/"*.{dylib,so}; do </ins> ln -s "$lib" "$dynamicLinksDir" done done


{ stdenv, fetchFromGitHub, rustPlatform }: rustPlatform.buildRustPackage rec { <del> pname = "dust"; </del> <ins> pname = "du-dust"; </ins> version = "0.5.1"; src = fetchFromGitHub {


''; }; <del> cargoSha256 = "1sjzcawyg1xsi4xrx2zwnj8yavzph8k1wgxsffgp55wghzypafwl"; </del> <ins> cargoSha256 = "0s8z8cg9q0gfqm0ann8rkxwp5y25si97kgginh6b6lbnaai7y4fj"; </ins> doCheck = false;


<ins> --- a/src/dummy.h	2016-12-17 23:02:53.396287041 +0100 +++ b/src/dummy.h	2016-12-17 23:03:30.319616550 +0100 @@ -51,6 +51,7 @@ /* options */ OptionInfoPtr Options; Bool swCursor; +    Bool constantDPI; /* proc pointer */ CloseScreenProcPtr CloseScreen; xf86CursorInfoPtr CursorInfo; --- a/src/dummy_driver.c	2016-12-14 21:54:20.000000000 +0100 +++ b/src/dummy_driver.c	2016-12-17 23:04:59.916416126 +0100 @@ -17,6 +17,12 @@ /* All drivers using the mi colormap manipulation need this */ #include "micmap.h" +#ifdef RANDR +#include "randrstr.h" +#endif + +#include "windowstr.h" + /* identifying atom needed by magnifiers */ #include <X11/Xatom.h> #include "property.h" @@ -115,11 +121,15 @@ }; typedef enum { -    OPTION_SW_CURSOR +    OPTION_SW_CURSOR, +    OPTION_CONSTANT_DPI } DUMMYOpts; static const OptionInfoRec DUMMYOptions[] = { { OPTION_SW_CURSOR,	"SWcursor",	OPTV_BOOLEAN,	{0}, FALSE }, +#ifdef RANDR +    { OPTION_CONSTANT_DPI,	"ConstantDPI",	OPTV_BOOLEAN,	{0}, FALSE }, +#endif { -1,                  NULL,           OPTV_NONE,	{0}, FALSE } }; @@ -359,6 +369,7 @@ xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, dPtr->Options); xf86GetOptValBool(dPtr->Options, OPTION_SW_CURSOR,&dPtr->swCursor); +    xf86GetOptValBool(dPtr->Options, OPTION_CONSTANT_DPI, &dPtr->constantDPI); if (device->videoRam != 0) { pScrn->videoRam = device->videoRam; @@ -639,10 +650,45 @@ return TRUE; } +const char *XDPY_PROPERTY = "dummy-constant-xdpi"; +const char *YDPY_PROPERTY = "dummy-constant-ydpi"; +static int get_dpi_value(WindowPtr root, const char *property_name, int default_dpi) +{ +    PropertyPtr prop; +    Atom type_atom = MakeAtom("CARDINAL", 8, TRUE); +    Atom prop_atom = MakeAtom(property_name, strlen(property_name), FALSE); + +    for (prop = wUserProps(root); prop; prop = prop->next) { +       if (prop->propertyName == prop_atom && prop->type == type_atom && prop->data) { +           int v = (int) (*((CARD32 *) prop->data)); +           if ((v>0) && (v<4096)) { +               xf86DrvMsg(0, X_INFO, "get_constant_dpi_value() found property "%s" with value=%in", property_name, (int) v); +               return (int) v; +           } +           break; +       } +    } +    return default_dpi; +} + /* Mandatory */ Bool DUMMYSwitchMode(SWITCH_MODE_ARGS_DECL) { +    SCRN_INFO_PTR(arg); +#ifdef RANDR +    DUMMYPtr dPtr = DUMMYPTR(pScrn); +    if (dPtr->constantDPI) { +        int xDpi = get_dpi_value(pScrn->pScreen->root, XDPY_PROPERTY, pScrn->xDpi); +        int yDpi = get_dpi_value(pScrn->pScreen->root, YDPY_PROPERTY, pScrn->yDpi); +        //25.4 mm per inch: (254/10) +        pScrn->pScreen->mmWidth = mode->HDisplay * 254 / xDpi / 10; +        pScrn->pScreen->mmHeight = mode->VDisplay * 254 / yDpi / 10; +        xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mm(dpi %ix%i)=%ix%in", xDpi, yDpi, pScrn->pScreen->mmWidth, pScrn->pScreen->mmHeight); +        RRScreenSizeNotify(pScrn->pScreen); +        RRTellChanged(pScrn->pScreen); +    } +#endif return TRUE; } </ins>


<ins> --- xf86-video-dummy-0.3.6/src/dummy_driver.c	2014-11-05 19:24:02.668656601 +0700 +++ xf86-video-dummy-0.3.6.new/src/dummy_driver.c	2014-11-05 19:37:53.076061853 +0700 @@ -55,6 +55,9 @@ #include <X11/extensions/xf86dgaproto.h> #endif +/* Needed for fixing pointer limits on resize */ +#include "inputstr.h" + /* Mandatory functions */ static const OptionInfoRec *	DUMMYAvailableOptions(int chipid, int busid); static void     DUMMYIdentify(int flags); @@ -713,6 +716,26 @@ RRTellChanged(pScrn->pScreen); } #endif +    //ensure the screen dimensions are also updated: +    pScrn->pScreen->width = mode->HDisplay; +    pScrn->pScreen->height = mode->VDisplay; +    pScrn->virtualX = mode->HDisplay; +    pScrn->virtualY = mode->VDisplay; +    pScrn->frameX1 = mode->HDisplay; +    pScrn->frameY1 = mode->VDisplay; + +    //ensure the pointer uses the new limits too: +    DeviceIntPtr pDev; +    SpritePtr pSprite; +    for (pDev = inputInfo.devices; pDev; pDev = pDev->next) { +        if (pDev->spriteInfo!=NULL && pDev->spriteInfo->sprite!=NULL) { +            pSprite = pDev->spriteInfo->sprite; +            pSprite->hotLimits.x2 = mode->HDisplay; +            pSprite->hotLimits.y2 = mode->VDisplay; +            pSprite->physLimits.x2 = mode->HDisplay; +            pSprite->physLimits.y2 = mode->VDisplay; +        } +    } return TRUE; } </ins>


<ins> --- a/src/dummy.h	2016-12-17 23:33:33.279533389 +0100 +++ b/src/dummy.h	2016-12-17 23:33:56.695739166 +0100 @@ -69,7 +69,7 @@ int overlay_offset; int videoKey; int interlace; -    dummy_colors colors[256]; +    dummy_colors colors[1024]; pointer* FBBase; Bool        (*CreateWindow)() ;     /* wrapped CreateWindow */ Bool prop; --- a/src/dummy_driver.c	2016-12-17 23:33:47.446657886 +0100 +++ b/src/dummy_driver.c	2016-12-17 23:33:56.696739175 +0100 @@ -317,6 +317,7 @@ case 15: case 16: case 24: +        case 30: break; default: xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -331,8 +332,8 @@ pScrn->rgbBits = 8; /* Get the depth24 pixmap format */ -    if (pScrn->depth == 24 && pix24bpp == 0) -	pix24bpp = xf86GetBppFromDepth(pScrn, 24); +    if (pScrn->depth >= 24 && pix24bpp == 0) +	pix24bpp = xf86GetBppFromDepth(pScrn, pScrn->depth); /* * This must happen after pScrn->display has been set because @@ -623,7 +624,7 @@ if(!miCreateDefColormap(pScreen)) return FALSE; -    if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits, +    if (!xf86HandleColormaps(pScreen, 1024, pScrn->rgbBits, DUMMYLoadPalette, NULL, CMAP_PALETTED_TRUECOLOR | CMAP_RELOAD_ON_MODE_SWITCH)) </ins>


<del> { stdenv, lib, fetchurl, callPackage, substituteAll, python3, pkgconfig </del> <ins> { stdenv, lib, fetchurl, callPackage, substituteAll, python3, pkgconfig, writeText </ins> , xorg, gtk3, glib, pango, cairo, gdk-pixbuf, atk , wrapGAppsHook, xorgserver, getopt, xauth, utillinux, which , ffmpeg_4, x264, libvpx, libwebp, x265


let inherit (python3.pkgs) cython buildPythonApplication; <del> xf86videodummy = callPackage ./xf86videodummy { }; </del> <ins> xf86videodummy = xorg.xf86videodummy.overrideDerivation (p: { patches = [ ./0002-Constant-DPI.patch ./0003-fix-pointer-limits.patch ./0005-support-for-30-bit-depth-in-dummy-driver.patch ]; }); xorgModulePaths = writeText "module-paths" '' Section "Files" ModulePath "${xorgserver}/lib/xorg/modules" ModulePath "${xorgserver}/lib/xorg/modules/extensions" ModulePath "${xorgserver}/lib/xorg/modules/drivers" ModulePath "${xf86videodummy}/lib/xorg/modules/drivers" EndSection ''; </ins> in buildPythonApplication rec { pname = "xpra"; version = "3.0.7";


) ''; <ins> # append module paths to xorg.conf postInstall = '' cat ${xorgModulePaths} >> $out/etc/xpra/xorg.conf ''; </ins> doCheck = false; enableParallelBuilding = true;


<del> --- a/src/dummy.h	2016-12-17 23:02:53.396287041 +0100 +++ b/src/dummy.h	2016-12-17 23:03:30.319616550 +0100 @@ -51,6 +51,7 @@ /* options */ OptionInfoPtr Options; Bool swCursor; +    Bool constantDPI; /* proc pointer */ CloseScreenProcPtr CloseScreen; xf86CursorInfoPtr CursorInfo; --- a/src/dummy_driver.c	2016-12-14 21:54:20.000000000 +0100 +++ b/src/dummy_driver.c	2016-12-17 23:04:59.916416126 +0100 @@ -17,6 +17,12 @@ /* All drivers using the mi colormap manipulation need this */ #include "micmap.h" +#ifdef RANDR +#include "randrstr.h" +#endif + +#include "windowstr.h" + /* identifying atom needed by magnifiers */ #include <X11/Xatom.h> #include "property.h" @@ -115,11 +121,15 @@ }; typedef enum { -    OPTION_SW_CURSOR +    OPTION_SW_CURSOR, +    OPTION_CONSTANT_DPI } DUMMYOpts; static const OptionInfoRec DUMMYOptions[] = { { OPTION_SW_CURSOR,	"SWcursor",	OPTV_BOOLEAN,	{0}, FALSE }, +#ifdef RANDR +    { OPTION_CONSTANT_DPI,	"ConstantDPI",	OPTV_BOOLEAN,	{0}, FALSE }, +#endif { -1,                  NULL,           OPTV_NONE,	{0}, FALSE } }; @@ -359,6 +369,7 @@ xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, dPtr->Options); xf86GetOptValBool(dPtr->Options, OPTION_SW_CURSOR,&dPtr->swCursor); +    xf86GetOptValBool(dPtr->Options, OPTION_CONSTANT_DPI, &dPtr->constantDPI); if (device->videoRam != 0) { pScrn->videoRam = device->videoRam; @@ -639,10 +650,45 @@ return TRUE; } +const char *XDPY_PROPERTY = "dummy-constant-xdpi"; +const char *YDPY_PROPERTY = "dummy-constant-ydpi"; +static int get_dpi_value(WindowPtr root, const char *property_name, int default_dpi) +{ +    PropertyPtr prop; +    Atom type_atom = MakeAtom("CARDINAL", 8, TRUE); +    Atom prop_atom = MakeAtom(property_name, strlen(property_name), FALSE); + +    for (prop = wUserProps(root); prop; prop = prop->next) { +       if (prop->propertyName == prop_atom && prop->type == type_atom && prop->data) { +           int v = (int) (*((CARD32 *) prop->data)); +           if ((v>0) && (v<4096)) { +               xf86DrvMsg(0, X_INFO, "get_constant_dpi_value() found property "%s" with value=%in", property_name, (int) v); +               return (int) v; +           } +           break; +       } +    } +    return default_dpi; +} + /* Mandatory */ Bool DUMMYSwitchMode(SWITCH_MODE_ARGS_DECL) { +    SCRN_INFO_PTR(arg); +#ifdef RANDR +    DUMMYPtr dPtr = DUMMYPTR(pScrn); +    if (dPtr->constantDPI) { +        int xDpi = get_dpi_value(pScrn->pScreen->root, XDPY_PROPERTY, pScrn->xDpi); +        int yDpi = get_dpi_value(pScrn->pScreen->root, YDPY_PROPERTY, pScrn->yDpi); +        //25.4 mm per inch: (254/10) +        pScrn->pScreen->mmWidth = mode->HDisplay * 254 / xDpi / 10; +        pScrn->pScreen->mmHeight = mode->VDisplay * 254 / yDpi / 10; +        xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mm(dpi %ix%i)=%ix%in", xDpi, yDpi, pScrn->pScreen->mmWidth, pScrn->pScreen->mmHeight); +        RRScreenSizeNotify(pScrn->pScreen); +        RRTellChanged(pScrn->pScreen); +    } +#endif return TRUE; } </del>


<del> --- xf86-video-dummy-0.3.6/src/dummy_driver.c	2014-11-05 19:24:02.668656601 +0700 +++ xf86-video-dummy-0.3.6.new/src/dummy_driver.c	2014-11-05 19:37:53.076061853 +0700 @@ -55,6 +55,9 @@ #include <X11/extensions/xf86dgaproto.h> #endif +/* Needed for fixing pointer limits on resize */ +#include "inputstr.h" + /* Mandatory functions */ static const OptionInfoRec *	DUMMYAvailableOptions(int chipid, int busid); static void     DUMMYIdentify(int flags); @@ -713,6 +716,26 @@ RRTellChanged(pScrn->pScreen); } #endif +    //ensure the screen dimensions are also updated: +    pScrn->pScreen->width = mode->HDisplay; +    pScrn->pScreen->height = mode->VDisplay; +    pScrn->virtualX = mode->HDisplay; +    pScrn->virtualY = mode->VDisplay; +    pScrn->frameX1 = mode->HDisplay; +    pScrn->frameY1 = mode->VDisplay; + +    //ensure the pointer uses the new limits too: +    DeviceIntPtr pDev; +    SpritePtr pSprite; +    for (pDev = inputInfo.devices; pDev; pDev = pDev->next) { +        if (pDev->spriteInfo!=NULL && pDev->spriteInfo->sprite!=NULL) { +            pSprite = pDev->spriteInfo->sprite; +            pSprite->hotLimits.x2 = mode->HDisplay; +            pSprite->hotLimits.y2 = mode->VDisplay; +            pSprite->physLimits.x2 = mode->HDisplay; +            pSprite->physLimits.y2 = mode->VDisplay; +        } +    } return TRUE; } </del>


<del> --- a/src/dummy.h	2016-12-17 23:33:33.279533389 +0100 +++ b/src/dummy.h	2016-12-17 23:33:56.695739166 +0100 @@ -69,7 +69,7 @@ int overlay_offset; int videoKey; int interlace; -    dummy_colors colors[256]; +    dummy_colors colors[1024]; pointer* FBBase; Bool        (*CreateWindow)() ;     /* wrapped CreateWindow */ Bool prop; --- a/src/dummy_driver.c	2016-12-17 23:33:47.446657886 +0100 +++ b/src/dummy_driver.c	2016-12-17 23:33:56.696739175 +0100 @@ -317,6 +317,7 @@ case 15: case 16: case 24: +        case 30: break; default: xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -331,8 +332,8 @@ pScrn->rgbBits = 8; /* Get the depth24 pixmap format */ -    if (pScrn->depth == 24 && pix24bpp == 0) -	pix24bpp = xf86GetBppFromDepth(pScrn, 24); +    if (pScrn->depth >= 24 && pix24bpp == 0) +	pix24bpp = xf86GetBppFromDepth(pScrn, pScrn->depth); /* * This must happen after pScrn->display has been set because @@ -623,7 +624,7 @@ if(!miCreateDefColormap(pScreen)) return FALSE; -    if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits, +    if (!xf86HandleColormaps(pScreen, 1024, pScrn->rgbBits, DUMMYLoadPalette, NULL, CMAP_PALETTED_TRUECOLOR | CMAP_RELOAD_ON_MODE_SWITCH)) </del>


<del> { stdenv, lib, fetchurl , xorgproto, xorgserver , pkgconfig }: with lib; stdenv.mkDerivation rec { version = "0.3.8"; suffix = "1"; name = "xpra-xf86videodummy-${version}-${suffix}"; builder = ../../../../servers/x11/xorg/builder.sh; src = fetchurl { url = "mirror://xorg/individual/driver/xf86-video-dummy-${version}.tar.bz2"; sha256 = "1fcm9vwgv8wnffbvkzddk4yxrh3kc0np6w65wj8k88q7jf3bn4ip"; }; patches = [ ./0002-Constant-DPI.patch ./0003-fix-pointer-limits.patch ./0005-support-for-30-bit-depth-in-dummy-driver.patch ]; nativeBuildInputs = [ pkgconfig ]; buildInputs = [ xorgproto xorgserver ]; meta = { description = "Dummy driver for Xorg with xpra patches"; homepage = https://xpra.org/trac/wiki/Xdummy; license = licenses.gpl2; platforms = platforms.unix; maintainers = with maintainers; [ numinit ]; }; } </del>


${stdenv.lib.optionalString enablePlayer '' --prefix LD_LIBRARY_PATH : ${vlc}/lib ''} <ins> mkdir -p $out/share/applications $out/share/icons $out/share/man/man1 cp $out/Tribler/Main/Build/Ubuntu/tribler.desktop $out/share/applications/tribler.desktop cp $out/Tribler/Main/Build/Ubuntu/tribler_big.xpm $out/share/icons/tribler.xpm cp $out/Tribler/Main/Build/Ubuntu/tribler.1 $out/share/man/man1/tribler.1 </ins> ''; meta = with stdenv.lib; {


}; }; <del> services.zfs.zed.settings = mkOption { type = with types; attrsOf (oneOf [ str int bool (listOf str) ]); example = literalExample '' { ZED_DEBUG_LOG = "/tmp/zed.debug.log"; </del> <ins> services.zfs.zed = { enableMail = mkEnableOption "ZED's ability to send emails" // { default = cfgZfs.package.enableMail; }; </ins> <del> ZED_EMAIL_ADDR = [ "root" ]; ZED_EMAIL_PROG = "mail"; ZED_EMAIL_OPTS = "-s '@SUBJECT@' @ADDRESS@"; </del> <ins> settings = mkOption { type = with types; attrsOf (oneOf [ str int bool (listOf str) ]); example = literalExample '' { ZED_DEBUG_LOG = "/tmp/zed.debug.log"; </ins> <del> ZED_NOTIFY_INTERVAL_SECS = 3600; ZED_NOTIFY_VERBOSE = false; </del> <ins> ZED_EMAIL_ADDR = [ "root" ]; ZED_EMAIL_PROG = "mail"; ZED_EMAIL_OPTS = "-s '@SUBJECT@' @ADDRESS@"; </ins> <del> ZED_USE_ENCLOSURE_LEDS = true; ZED_SCRUB_AFTER_RESILVER = false; } ''; description = '' ZFS Event Daemon /etc/zfs/zed.d/zed.rc content See <citerefentry><refentrytitle>zed</refentrytitle><manvolnum>8</manvolnum></citerefentry> for details on ZED and the scripts in /etc/zfs/zed.d to find the possible variables ''; </del> <ins> ZED_NOTIFY_INTERVAL_SECS = 3600; ZED_NOTIFY_VERBOSE = false; ZED_USE_ENCLOSURE_LEDS = true; ZED_SCRUB_AFTER_RESILVER = false; } ''; description = '' ZFS Event Daemon /etc/zfs/zed.d/zed.rc content See <citerefentry><refentrytitle>zed</refentrytitle><manvolnum>8</manvolnum></citerefentry> for details on ZED and the scripts in /etc/zfs/zed.d to find the possible variables ''; }; </ins> }; };


(mkIf cfgZfs.enabled { assertions = [ { <ins> assertion = cfgZED.enableMail -> cfgZfs.package.enableMail; message = '' To allow ZED to send emails, ZFS needs to be configured to enable this. To do so, one must override the `zfs` package and set `enableMail` to true. ''; } { </ins> assertion = config.networking.hostId != null; message = "ZFS requires networking.hostId to be set"; }


}; services.zfs.zed.settings = { <del> ZED_EMAIL_PROG = mkDefault "${pkgs.mailutils}/bin/mail"; </del> <ins> ZED_EMAIL_PROG = mkIf cfgZED.enableMail (mkDefault "${pkgs.mailutils}/bin/mail"); </ins> PATH = lib.makeBinPath [ cfgZfs.package pkgs.coreutils


, libtirpc , nfs-utils , gawk, gnugrep, gnused, systemd <del> , smartmontools, sysstat, sudo , pkg-config </del> <ins> , smartmontools, enableMail ? false , sysstat, sudo, pkg-config </ins> # Kernel dependencies , kernel ? null


with lib; let <ins> smartmon = smartmontools.override { inherit enableMail; }; </ins> buildKernel = any (n: n == configFile) [ "kernel" "all" ]; buildUser = any (n: n == configFile) [ "user" "all" ];


''; postFixup = let <del> path = "PATH=${makeBinPath [ coreutils gawk gnused gnugrep util-linux smartmontools sysstat ]}:$PATH"; </del> <ins> path = "PATH=${makeBinPath [ coreutils gawk gnused gnugrep util-linux smartmon sysstat ]}:$PATH"; </ins> in '' for i in $out/libexec/zfs/zpool.d/*; do sed -i '2i${path}' $i


outputs = [ "out" ] ++ optionals buildUser [ "lib" "dev" ]; <del> passthru.tests = if isUnstable then [ nixosTests.zfs.unstable ] else [ nixosTests.zfs.installer nixosTests.zfs.stable ]; </del> <ins> passthru = { inherit enableMail; tests = if isUnstable then [ nixosTests.zfs.unstable ] else [ nixosTests.zfs.installer nixosTests.zfs.stable ]; }; </ins> meta = { description = "ZFS Filesystem Linux Kernel module";


{ lib, stdenv, fetchurl, autoreconfHook <del> , mailutils, inetutils </del> <ins> , mailutils, enableMail ? true , inetutils </ins> , IOKit, ApplicationServices }: let


postPatch = "cp -v ${driverdb} drivedb.h"; configureFlags = [ <del> "--with-scriptpath=${lib.makeBinPath [ mailutils inetutils ]}" </del> <ins> "--with-scriptpath=${lib.makeBinPath ([ inetutils ] ++ lib.optional enableMail mailutils)}" </ins> ]; nativeBuildInputs = [ autoreconfHook ];


# Allow multiple colon-separated authorized keys files to be # specified in the file= option. ./multiple-key-files.patch <ins> ./edcsa-crash-fix.patch </ins> ]; configureFlags = [


<ins> commit 1b0d9bcc5f5cd78b0bb1357d6a11da5d616ad26f Author: Wout Mertens <Wout.Mertens@gmail.com> Date:   Thu Jun 11 18:08:13 2020 +0200 fix segfault when using ECDSA keys. Author: Marc Deslauriers <marc.deslauriers@canonical.com> Bug-Ubuntu: https://bugs.launchpad.net/bugs/1869512 diff --git a/ssh-ecdsa.c b/ssh-ecdsa.c index 5b13b30..5bf29cc 100644 --- a/ssh-ecdsa.c +++ b/ssh-ecdsa.c @@ -46,7 +46,7 @@ ssh_ecdsa_sign(const Key *key, u_char **sigp, u_int *lenp, u_int len, dlen; Buffer b, bb; #if OPENSSL_VERSION_NUMBER >= 0x10100005L -	BIGNUM *r, *s; +	BIGNUM *r = NULL, *s = NULL; #endif if (key == NULL || key->type != KEY_ECDSA || key->ecdsa == NULL) { @@ -137,20 +137,27 @@ ssh_ecdsa_verify(const Key *key, const u_char *signature, u_int signaturelen, /* parse signature */ if ((sig = ECDSA_SIG_new()) == NULL) -        pamsshagentauth_fatal("ssh_ecdsa_verify: DSA_SIG_new failed"); +        pamsshagentauth_fatal("ssh_ecdsa_verify: ECDSA_SIG_new failed"); pamsshagentauth_buffer_init(&b); pamsshagentauth_buffer_append(&b, sigblob, len); #if OPENSSL_VERSION_NUMBER < 0x10100005L if ((pamsshagentauth_buffer_get_bignum2_ret(&b, sig->r) == -1) || (pamsshagentauth_buffer_get_bignum2_ret(&b, sig->s) == -1)) +        pamsshagentauth_fatal("ssh_ecdsa_verify:" +            "pamsshagentauth_buffer_get_bignum2_ret failed"); #else -    DSA_SIG_get0(sig, &r, &s); +    if ((r = BN_new()) == NULL) +        pamsshagentauth_fatal("ssh_ecdsa_verify: BN_new failed"); +    if ((s = BN_new()) == NULL) +        pamsshagentauth_fatal("ssh_ecdsa_verify: BN_new failed"); if ((pamsshagentauth_buffer_get_bignum2_ret(&b, r) == -1) || (pamsshagentauth_buffer_get_bignum2_ret(&b, s) == -1)) -#endif pamsshagentauth_fatal("ssh_ecdsa_verify:" "pamsshagentauth_buffer_get_bignum2_ret failed"); +    if (ECDSA_SIG_set0(sig, r, s) != 1) +        pamsshagentauth_fatal("ssh_ecdsa_verify: ECDSA_SIG_set0 failed"); +#endif /* clean up */ memset(sigblob, 0, len); </ins>


<del> { stdenv, fetchpatch, fetchurl, pam, openssl, perl }: </del> <ins> { stdenv, fetchpatch, fetchFromGitHub, pam, openssl, perl }: </ins> stdenv.mkDerivation rec { <del> name = "pam_ssh_agent_auth-0.10.3"; </del> <ins> pname = "pam_ssh_agent_auth"; version = "0.10.4"; </ins> <del> src = fetchurl { url = "mirror://sourceforge/pamsshagentauth/${name}.tar.bz2"; sha256 = "0qx78x7nvqdscyp04hfijl4rgyf64xy03prr28hipvgasrcd6lrw"; </del> <ins> src = fetchFromGitHub { owner = "jbeverly"; repo = "pam_ssh_agent_auth"; rev = "pam_ssh_agent_auth-${version}"; sha256 = "YD1R8Cox0UoNiuWleKGzWSzxJ5lhDRCB2mZPp9OM6Cs="; </ins> }; <del> patches = [ # Allow multiple colon-separated authorized keys files to be # specified in the file= option. ./multiple-key-files.patch (fetchpatch { name = "openssl-1.1.1-1.patch"; url = "https://sources.debian.org/data/main/p/pam-ssh-agent-auth/0.10.3-3/debian/patches/openssl-1.1.1-1.patch"; sha256 = "1ndp5j4xfhzshhnl345gb4mkldx6vjfa7284xgng6ikhzpc6y7pf"; }) (fetchpatch { name = "openssl-1.1.1-2.patch"; url = "https://sources.debian.org/data/main/p/pam-ssh-agent-auth/0.10.3-3/debian/patches/openssl-1.1.1-2.patch"; sha256 = "0ksrs4xr417by8klf7862n3dircvnw30an1akq4pnsd3ichscmww"; }) ]; </del> <ins> ed25519-donna = fetchFromGitHub { owner = "floodyberry"; repo = "ed25519-donna"; rev = "8757bd4cd209cb032853ece0ce413f122eef212c"; sha256 = "ETFpIaWQnlYG8ZuDG2dNjUJddlvibB4ukHquTFn3NZM="; }; </ins> buildInputs = [ pam openssl perl ]; <del> # It's not clear to me why this is necessary, but without it, you see: # # checking OpenSSL header version... 1010104f (OpenSSL 1.1.1d  10 Sep 2019) # checking OpenSSL library version... 1010104f (OpenSSL 1.1.1d  10 Sep 2019) # checking whether OpenSSL's headers match the library... no # configure: WARNING: Your OpenSSL headers do not match your # library. Check config.log for details. # # ...despite the fact that clearly the values match configureFlags = [ "--without-openssl-header-check" ]; </del> <ins> patches = [ # Allow multiple colon-separated authorized keys files to be # specified in the file= option. ./multiple-key-files.patch ]; configureFlags = [ # It's not clear to me why this is necessary, but without it, you see: # # checking OpenSSL header version... 1010108f (OpenSSL 1.1.1h  22 Sep 2020) # checking OpenSSL library version... 1010108f (OpenSSL 1.1.1h  22 Sep 2020) # checking whether OpenSSL's headers match the library... no # configure: WARNING: Your OpenSSL headers do not match your # library. Check config.log for details. # # ...despite the fact that clearly the values match "--without-openssl-header-check" # Make sure it can find ed25519-donna "--with-cflags=-I$PWD" ]; prePatch = "cp -r ${ed25519-donna}/. ed25519-donna/."; </ins> enableParallelBuilding = true; meta = { <del> homepage = "http://pamsshagentauth.sourceforge.net/"; </del> <ins> homepage = "https://github.com/jbeverly/pam_ssh_agent_auth"; </ins> description = "PAM module for authentication through the SSH agent"; maintainers = [ stdenv.lib.maintainers.eelco ]; platforms = stdenv.lib.platforms.linux;


/* * PAM_USER and PAM_RUSER do not necessarily have to get set by the calling application, and we may be unable to divine the latter. <del> @@ -187,16 +184,17 @@ </del> <ins> @@ -184,5 +181,5 @@ </ins> */ if(user && strlen(ruser) > 0) { -        pamsshagentauth_verbose("Attempting authentication: `%s' as `%s' using %s", ruser, user, authorized_keys_file); +        pamsshagentauth_verbose("Attempting authentication: `%s' as `%s' using %s", ruser, user, authorized_keys_file_input); <ins> @@ -201,3 +197,3 @@ retval = PAM_SUCCESS; -                pamsshagentauth_logit("Authenticated (sshd): `%s' as `%s' using %s", ruser, user, authorized_keys_file); +                pamsshagentauth_logit("Authenticated (sshd): `%s' as `%s' using %s", ruser, user, authorized_keys_file_input); @@ -211,11 +208,12 @@ </ins> /* * this pw_uid is used to validate the SSH_AUTH_SOCK, and so must be the uid of the ruser invoking the program, not the target-user */ -        if(pamsshagentauth_find_authorized_keys(user, ruser, servicename)) { /* getpwnam(ruser)->pw_uid)) { */ <del> -            pamsshagentauth_logit("Authenticated: `%s' as `%s' using %s", ruser, user, authorized_keys_file); </del> <ins> -            pamsshagentauth_logit("Authenticated (agent): `%s' as `%s' using %s", ruser, user, authorized_keys_file); </ins> +        const char *key_file; +        if((key_file = pamsshagentauth_find_authorized_keys(user, ruser, servicename))) { /* getpwnam(ruser)->pw_uid)) { */ <del> +            pamsshagentauth_logit("Authenticated: `%s' as `%s' using %s", ruser, user, key_file); </del> <ins> +            pamsshagentauth_logit("Authenticated (agent): `%s' as `%s' using %s", ruser, user, key_file); </ins> retval = PAM_SUCCESS; } else { -            pamsshagentauth_logit("Failed Authentication: `%s' as `%s' using %s", ruser, user, authorized_keys_file);


"--enable-add-ons" "--sysconfdir=/etc" "--localedir=/var/run/current-system/sw/lib/locale" <ins> "libc_cv_ssp=no" </ins> (if kernelHeaders != null then "--with-headers=${kernelHeaders}/include" else "--without-headers")


<listitem> <para> The nginx web server previously started its master process as root <del> privileged, then ran worker processes as a less privileged identity user. </del> <ins> privileged, then ran worker processes as a less privileged identity user (the <literal>nginx</literal> user). </ins> This was changed to start all of nginx as a less privileged user (defined by <literal>services.nginx.user</literal> and <literal>services.nginx.group</literal>). As a consequence, all files that


certificates and keys, etc.) must now be readable by this less privileged user/group. </para> <ins> <para> To continue to use the old approach, you can configure: <programlisting> services.nginx.appendConfig = let cfg = config.services.nginx; in ''user ${cfg.user} ${cfg.group};''; systemd.services.nginx.serviceConfig.User = lib.mkForce "root"; </programlisting> </para> </ins> </listitem> <listitem> <para>


<ins> { lib , fetchFromGitHub , python3Packages , gnome-menus , gtk3 , intltool , gobject-introspection , wrapGAppsHook , testers , menulibre }: python3Packages.buildPythonApplication rec { name = "menulibre"; version = "2.2.3"; src = fetchFromGitHub { owner = "bluesabre"; repo = "menulibre"; rev = "menulibre-${version}"; hash = "sha256-E0ukq3q4YaakOI2mDs3dh0ncZX/dqspCA+97r3JwWyA="; }; propagatedBuildInputs = with python3Packages; [ pygobject3 gnome-menus psutil distutils-extra ]; nativeBuildInputs = [ gtk3 intltool gobject-introspection wrapGAppsHook ]; postPatch = '' substituteInPlace setup.py  --replace-fail 'data_dir =' "data_dir = '$out/share/menulibre' #"  --replace-fail 'update_desktop_file(desktop_file, script_path)' "" ''; preBuild = '' export HOME=$TMPDIR ''; passthru.tests.version = testers.testVersion { package = menulibre; command = "HOME=$TMPDIR menulibre --version | cut -d' ' -f2"; }; meta = with lib; { description = "An advanced menu editor with an easy-to-use interface"; homepage = "https://bluesabre.org/projects/menulibre"; license = licenses.gpl3Plus; maintainers = with maintainers; [ lelgenio ]; mainProgram = "menulibre"; platforms = platforms.linux; }; } </ins>


githubId = 69135; name = "Andrea Bedini"; }; <ins> andreasfelix = { email = "fandreas@physik.hu-berlin.de"; github = "andreasfelix"; githubId = 24651767; name = "Felix Andreas"; }; </ins> andres = { email = "ksnixos@andres-loeh.de"; github = "kosmikus";


<ins> { stdenv , fetchFromGitHub , nix-update-script , meson , ninja , pkg-config , scdoc , gnome-builder , gnused , glib , libgee , json-glib , jsonrpc-glib , vala }: stdenv.mkDerivation rec { pname = "vala-language-server"; version = "0.48.1"; src = fetchFromGitHub { owner = "benwaffle"; repo = pname; rev = version; sha256 = "12k095052jkvbiyz8gzkj6w7r7p16d5m18fyikl48yvh5nln8fw0"; }; passthru = { updateScript = nix-update-script { attrPath = pname; }; }; nativeBuildInputs = [ meson ninja pkg-config scdoc # GNOME Builder Plugin gnused gnome-builder ]; buildInputs = [ glib libgee json-glib jsonrpc-glib vala ]; meta = with stdenv.lib; { description = "Code Intelligence for Vala & Genie"; homepage = "https://github.com/benwaffle/vala-language-server"; license = licenses.lgpl21Plus; maintainers = with maintainers; [ andreasfelix worldofpeace ]; platforms = platforms.linux; }; } </ins>


vagrant = callPackage ../development/tools/vagrant {}; <ins> vala-language-server = callPackage ../development/tools/vala-language-server {}; </ins> bashdb = callPackage ../development/tools/misc/bashdb { }; gdb = callPackage ../development/tools/misc/gdb {


<del> { config, lib, ... }: </del> <ins> { config, lib, pkgs, ... }: </ins> with lib;


programs.chromium = { enable = mkEnableOption (lib.mdDoc "{command}`chromium` policies"); <ins> enablePlasmaBrowserIntegration = mkEnableOption (lib.mdDoc "Native Messaging Host for Plasma Browser Integration"); plasmaBrowserIntegrationPackage = mkPackageOption pkgs "plasma5Packages.plasma-browser-integration" { }; </ins> extensions = mkOption { <del> type = types.listOf types.str; </del> <ins> type = with types; nullOr (listOf str); </ins> description = lib.mdDoc '' List of chromium extensions to install. For list of plugins ids see id in url of extensions on


[ExtensionInstallForcelist](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ExtensionInstallForcelist) for additional details. ''; <del> default = []; </del> <ins> default = null; </ins> example = literalExpression '' [ "chlffgpmiacpedhhbkiomidkjlcfhogd" # pushbullet


type = types.nullOr types.str; description = lib.mdDoc "Chromium default search provider url."; default = null; <del> example = "https://encrypted.google.com/search?q={searchTerms}&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:searchClient}{google:sourceId}{google:instantExtendedEnabledParameter}ie={inputEncoding}"; </del> <ins> example = "https://encrypted.google.com/search?q={searchTerms}&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:searchClient}{google:sourceId}{google:instantExtendedEnabledParameter}ie={inputEncoding}"; </ins> }; defaultSearchProviderSuggestURL = mkOption { type = types.nullOr types.str; description = lib.mdDoc "Chromium default search provider url for suggestions."; default = null; <del> example = "https://encrypted.google.com/complete/search?output=chrome&q={searchTerms}"; </del> <ins> example = "https://encrypted.google.com/complete/search?output=chrome&q={searchTerms}"; </ins> }; extraOpts = mkOption {


"PasswordManagerEnabled" = false; "SpellcheckEnabled" = true; "SpellcheckLanguage" = [ <del> "de" "en-US" ]; </del> <ins> "de" "en-US" ]; </ins> } ''; };


###### implementation <del> config = lib.mkIf cfg.enable { # for chromium environment.etc."chromium/policies/managed/default.json".text = builtins.toJSON defaultProfile; environment.etc."chromium/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts; # for google-chrome https://www.chromium.org/administrators/linux-quick-start environment.etc."opt/chrome/policies/managed/default.json".text = builtins.toJSON defaultProfile; environment.etc."opt/chrome/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts; # for brave environment.etc."brave/policies/managed/default.json".text = builtins.toJSON defaultProfile; environment.etc."brave/policies/managed/extra.json".text = builtins.toJSON cfg.extraOpts; </del> <ins> config = { environment.etc = lib.mkIf cfg.enable { # for chromium "chromium/native-messaging-hosts/org.kde.plasma.browser_integration.json" = lib.mkIf cfg.enablePlasmaBrowserIntegration { source = "${cfg.plasmaBrowserIntegrationPackage}/etc/chromium/native-messaging-hosts/org.kde.plasma.browser_integration.json"; }; "chromium/policies/managed/default.json" = lib.mkIf (defaultProfile != {}) { text = builtins.toJSON defaultProfile; }; "chromium/policies/managed/extra.json" = lib.mkIf (cfg.extraOpts != {}) { text = builtins.toJSON cfg.extraOpts; }; # for google-chrome https://www.chromium.org/administrators/linux-quick-start "opt/chrome/native-messaging-hosts/org.kde.plasma.browser_integration.json" = lib.mkIf cfg.enablePlasmaBrowserIntegration { source = "${cfg.plasmaBrowserIntegrationPackage}/etc/opt/chrome/native-messaging-hosts/org.kde.plasma.browser_integration.json"; }; "opt/chrome/policies/managed/default.json" = lib.mkIf (defaultProfile != {}) { text = builtins.toJSON defaultProfile; }; "opt/chrome/policies/managed/extra.json" = lib.mkIf (cfg.extraOpts != {}) { text = builtins.toJSON cfg.extraOpts; }; # for brave "brave/policies/managed/default.json" = lib.mkIf (defaultProfile != {}) { text = builtins.toJSON defaultProfile; }; "brave/policies/managed/extra.json" = lib.mkIf (cfg.extraOpts != {}) { text = builtins.toJSON cfg.extraOpts; }; }; </ins> }; }


system.userActivationScripts.plasmaSetup = activationScript; programs.firefox.nativeMessagingHosts.packages = [ pkgs.plasma5Packages.plasma-browser-integration ]; <ins> programs.chromium.enablePlasmaBrowserIntegration = true; </ins> }) (mkIf (cfg.kwinrc != {}) {


# can build this. If we didn't do it, basically the entire nixpkgs on Darwin would have an unfree dependency and we'd # get no binary cache for the entire platform. If you really find yourself wanting the TSAN, make this controllable by # a flag and turn the flag off during the stdenv build. <del> postPatch = stdenv.lib.optionalString stdenv.isDarwin '' </del> <ins> postPatch = '' substituteInPlace cmake/builtin-config-ix.cmake  --replace 'set(X86 i386)' 'set(X86 i386 i486 i586 i686)' '' + stdenv.lib.optionalString stdenv.isDarwin '' </ins> substituteInPlace cmake/config-ix.cmake  --replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)' '' + stdenv.lib.optionalString (useLLVM) ''


<del> { stdenv, fetchurl, python2, keybinder3, intltool, file, gtk3, gobject-introspection , libnotify, wrapGAppsHook, vte </del> <ins> { stdenv , fetchFromGitHub , python , keybinder3 , intltool , file , gtk3 , gobject-introspection , libnotify , wrapGAppsHook , vte </ins> }: <del> python2.pkgs.buildPythonApplication rec { </del> <ins> python.pkgs.buildPythonApplication rec { </ins> name = "terminator-${version}"; <del> version = "1.91"; </del> <ins> version = "1.92"; </ins> <del> src = fetchurl { url = "https://launchpad.net/terminator/gtk3/${version}/+download/${name}.tar.gz"; sha256 = "95f76e3c0253956d19ceab2f8da709a496f1b9cf9b1c5b8d3cd0b6da3cc7be69"; </del> <ins> src = fetchFromGitHub { owner = "gnome-terminator"; repo = "terminator"; rev = "bb24273eb40dc5eac97de74064488701fa40a743"; sha256 = "105f660wzf9cpn24xzwaaa09igg5h3qhchafv190v5nqck6g1ssh"; </ins> }; <del> nativeBuildInputs = [ file intltool wrapGAppsHook gobject-introspection ]; buildInputs = [ gtk3 vte libnotify keybinder3 </del> <ins> nativeBuildInputs = [ file intltool gobject-introspection wrapGAppsHook ]; buildInputs = [ gtk3 </ins> gobject-introspection # Temporary fix, see https://github.com/NixOS/nixpkgs/issues/56943 <ins> keybinder3 libnotify python vte ]; propagatedBuildInputs = with python.pkgs; [ configobj dbus-python pygobject3 psutil pycairo </ins> ]; <del> propagatedBuildInputs = with python2.pkgs; [ pygobject3 psutil pycairo ]; </del> postPatch = '' patchShebangs . <ins> # dbus-python is correctly passed in propagatedBuildInputs, but for some reason setup.py complains. # The wrapped terminator has the correct path added, so ignore this. substituteInPlace setup.py --replace "'dbus-python'," "" </ins> ''; checkPhase = ''


quadkonsole, etc. in that the main focus is arranging terminals in grids (tabs is the most common default method, which Terminator also supports). ''; <del> homepage = "https://gnometerminator.blogspot.no/p/introduction.html"; </del> <ins> homepage = "https://github.com/gnome-terminator/terminator"; </ins> license = licenses.gpl2; maintainers = with maintainers; [ bjornfor ]; platforms = platforms.linux;


terminal-notifier = callPackage ../applications/misc/terminal-notifier {}; <del> terminator = callPackage ../applications/misc/terminator { }; </del> <ins> terminator = callPackage ../applications/misc/terminator { python = python3; }; </ins> terminus = callPackage ../applications/misc/terminus { };


fsNeededForBoot = fs: fs.neededForBoot || elem fs.mountPoint pathsNeededForBoot; # Check whenever `b` depends on `a` as a fileSystem <del> fsBefore = a: b: a.mountPoint == b.device || hasPrefix "${a.mountPoint}${optionalString (!(hasSuffix "/" a.mountPoint)) "/"}" b.mountPoint; </del> <ins> fsBefore = a: b: let # normalisePath adds a slash at the end of the path if it didn't already # have one. # # The reason slashes are added at the end of each path is to prevent `b` # from accidentally depending on `a` in cases like #    a = { mountPoint = "/aaa"; ... } #    b = { device     = "/aaaa"; ... } # Here a.mountPoint *is* a prefix of b.device even though a.mountPoint is # *not* a parent of b.device. If we add a slash at the end of each string, # though, this is not a problem: "/aaa/" is not a prefix of "/aaaa/". normalisePath = path: "${path}${optionalString (!(hasSuffix "/" path)) "/"}"; normalise = mount: mount // { device = normalisePath mount.device; mountPoint = normalisePath mount.mountPoint; depends = map normalisePath mount.depends; }; a' = normalise a; b' = normalise b; in hasPrefix a'.mountPoint b'.device || hasPrefix a'.mountPoint b'.mountPoint || any (hasPrefix a'.mountPoint) b'.depends; </ins> # Escape a path according to the systemd rules, e.g. /dev/xyzzy # becomes dev-xyzzy.  FIXME: slow.


"upperdir=/nix/.rw-store/store" "workdir=/nix/.rw-store/work" ]; <ins> depends = [ "/nix/.ro-store" "/nix/.rw-store/store" "/nix/.rw-store/work" ]; </ins> }; boot.initrd.availableKernelModules = [ "squashfs" "iso9660" "uas" "overlay" ];


"upperdir=/nix/.rw-store/store" "workdir=/nix/.rw-store/work" ]; <ins> depends = [ "/nix/.ro-store" "/nix/.rw-store/store" "/nix/.rw-store/work" ]; </ins> }; boot.initrd.availableKernelModules = [ "squashfs" "overlay" ];


specialFSTypes = [ "proc" "sysfs" "tmpfs" "ramfs" "devtmpfs" "devpts" ]; <ins> nonEmptyWithoutTrailingSlash = addCheckDesc "non-empty without trailing slash" types.str (s: isNonEmpty s && (builtins.match ".+/" s) == null); </ins> coreFileSystemOpts = { name, config, ... }: { options = { mountPoint = mkOption { example = "/mnt/usb"; <del> type = addCheckDesc "non-empty without trailing slash" types.str (s: isNonEmpty s && (builtins.match ".+/" s) == null); </del> <ins> type = nonEmptyWithoutTrailingSlash; </ins> description = "Location of the mounted the file system."; };


type = types.listOf nonEmptyStr; }; <ins> depends = mkOption { default = [ ]; example = [ "/persist" ]; type = types.listOf nonEmptyWithoutTrailingSlash; description = '' List of paths that should be mounted before this one. This filesystem's <option>device</option> and <option>mountPoint</option> are always checked and do not need to be included explicitly. If a path is added to this list, any other filesystem whose mount point is a parent of the path will be mounted before this filesystem. The paths do not need to actually be the <option>mountPoint</option> of some other filesystem. ''; }; </ins> }; config = {


services.zfs.zed.settings = { ZED_EMAIL_PROG = mkDefault "${pkgs.mailutils}/bin/mail"; <del> PATH = lib.makeBinPath [ packages.zfsUser pkgs.utillinux pkgs.gawk pkgs.gnused pkgs.gnugrep pkgs.coreutils pkgs.curl ]; </del> <ins> PATH = lib.makeBinPath [ packages.zfsUser pkgs.coreutils pkgs.curl pkgs.gawk pkgs.gnugrep pkgs.gnused pkgs.nettools pkgs.utillinux ]; </ins> }; environment.etc = genAttrs


''; }; <ins> tsun = super.tsun.overrideAttrs (oldAttrs: { buildInputs = oldAttrs.buildInputs ++ [ pkgs.makeWrapper ]; postInstall = '' wrapProgram "$out/bin/tsun"  --prefix NODE_PATH : ${self.typescript}/lib/node_modules ''; }); </ins> stf = super.stf.override { meta.broken = since "10"; };


gammu-smsd = 228; pdnsd = 229; octoprint = 230; <ins> avahi-autoipd = 231; </ins> # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!


users.extraUsers = [{ name = "nm-openvpn"; uid = config.ids.uids.nm-openvpn; <ins> } { # to enable link-local connections name = "avahi-autoipd"; uid = config.ids.uids.avahi-autoipd; </ins> }]; systemd.packages = cfg.packages;


--replace /bin/sh ${stdenv.shell}  --replace /usr/sbin/ethtool ${ethtool}/sbin/ethtool  --replace /bin/sed ${gnused}/bin/sed <ins> # to enable link-local connections substituteInPlace src/devices/nm-device.c --replace '("avahi-autoipd", NULL, NULL)' '("avahi-autoipd", &"${avahi}/sbin/avahi-autoipd", NULL)' </ins> configureFlags="$configureFlags --with-udev-dir=$out/lib/udev" '';


, libiconv, postgresql, v8_3_16_14, clang, sqlite, zlib, imagemagick , pkgconfig , ncurses, xapian_1_2_22, gpgme, utillinux, fetchpatch, tzdata, icu, libffi , cmake, libssh2, openssl, mysql, darwin, git, perl, gecode_3, curl <del> , libmsgpack, qt48, libsodium, snappy, libossp_uuid, lxc </del> <ins> , libmsgpack, qt48, libsodium, snappy, libossp_uuid, lxc, libpcap </ins> }@args: let


buildInputs = [ curl ]; }; <ins> pcaprub = attrs: { buildInputs = [ libpcap ]; }; </ins> pg = attrs: { buildFlags = [ "--with-pg-config=${postgresql}/bin/pg_config"


''; }; <ins> rb-readline = attrs: { dontBuild = false; postPatch = '' substituteInPlace lib/rbreadline.rb  --replace 'infocmp' '${ncurses.dev}/bin/infocmp' ''; }; </ins> timfel-krb5-auth = attrs: { buildInputs = [ kerberos ]; };


<ins> # frozen_string_literal: true source "https://rubygems.org" gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/4.14.17" </ins>


<ins> GIT remote: https://github.com/rapid7/metasploit-framework revision: fd3da8f3350d6cf7f0449bf0ead4d51747525c0a ref: refs/tags/4.14.17 specs: metasploit-framework (4.14.17) actionpack (~> 4.2.6) activerecord (~> 4.2.6) activesupport (~> 4.2.6) bcrypt bit-struct filesize jsobfu json metasm metasploit-concern metasploit-credential metasploit-model metasploit-payloads (= 1.2.29) metasploit_data_models metasploit_payloads-mettle (= 0.1.9) msgpack nessus_rest net-ssh network_interface nexpose nokogiri octokit openssl-ccm openvas-omp packetfu patch_finder pcaprub pg railties rb-readline recog redcarpet rex-arch (= 0.1.4) rex-bin_tools rex-core rex-encoder rex-exploitation rex-java rex-mime rex-nop rex-ole rex-powershell rex-random_identifier rex-registry rex-rop_builder rex-socket rex-sslscan rex-struct2 rex-text rex-zip robots ruby_smb rubyntlm rubyzip sqlite3 sshkey tzinfo tzinfo-data windows_error xmlrpc GEM remote: https://rubygems.org/ specs: actionpack (4.2.8) actionview (= 4.2.8) activesupport (= 4.2.8) rack (~> 1.6) rack-test (~> 0.6.2) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) actionview (4.2.8) activesupport (= 4.2.8) builder (~> 3.1) erubis (~> 2.7.0) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.3) activemodel (4.2.8) activesupport (= 4.2.8) builder (~> 3.1) activerecord (4.2.8) activemodel (= 4.2.8) activesupport (= 4.2.8) arel (~> 6.0) activesupport (4.2.8) i18n (~> 0.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.5.1) public_suffix (~> 2.0, >= 2.0.2) arel (6.0.4) arel-helpers (2.3.0) activerecord (>= 3.1.0, < 6) bcrypt (3.1.11) bindata (2.4.0) bit-struct (0.16) builder (3.2.3) erubis (2.7.0) faraday (0.12.1) multipart-post (>= 1.2, < 3) filesize (0.1.1) i18n (0.8.1) jsobfu (0.4.2) rkelly-remix json (2.1.0) loofah (2.0.3) nokogiri (>= 1.5.9) metasm (1.0.3) metasploit-concern (2.0.4) activemodel (~> 4.2.6) activesupport (~> 4.2.6) railties (~> 4.2.6) metasploit-credential (2.0.9) metasploit-concern metasploit-model metasploit_data_models pg railties rubyntlm rubyzip metasploit-model (2.0.4) activemodel (~> 4.2.6) activesupport (~> 4.2.6) railties (~> 4.2.6) metasploit-payloads (1.2.29) metasploit_data_models (2.0.14) activerecord (~> 4.2.6) activesupport (~> 4.2.6) arel-helpers metasploit-concern metasploit-model pg postgres_ext railties (~> 4.2.6) recog (~> 2.0) metasploit_payloads-mettle (0.1.9) mini_portile2 (2.1.0) minitest (5.10.2) msgpack (1.1.0) multipart-post (2.0.0) nessus_rest (0.1.6) net-ssh (4.1.0) network_interface (0.0.1) nexpose (6.0.0) nokogiri (1.7.2) mini_portile2 (~> 2.1.0) octokit (4.7.0) sawyer (~> 0.8.0, >= 0.5.3) openssl-ccm (1.2.1) openvas-omp (0.0.4) packetfu (1.1.13) pcaprub patch_finder (1.0.2) pcaprub (0.12.4) pg (0.20.0) pg_array_parser (0.0.9) postgres_ext (3.0.0) activerecord (>= 4.0.0) arel (>= 4.0.1) pg_array_parser (~> 0.0.9) public_suffix (2.0.5) rack (1.6.6) rack-test (0.6.3) rack (>= 1.0) rails-deprecated_sanitizer (1.0.3) activesupport (>= 4.2.0.alpha) rails-dom-testing (1.0.8) activesupport (>= 4.2.0.beta, < 5.0) nokogiri (~> 1.6) rails-deprecated_sanitizer (>= 1.0.1) rails-html-sanitizer (1.0.3) loofah (~> 2.0) railties (4.2.8) actionpack (= 4.2.8) activesupport (= 4.2.8) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rake (12.0.0) rb-readline (0.5.4) recog (2.1.6) nokogiri redcarpet (3.4.0) rex-arch (0.1.4) rex-text rex-bin_tools (0.1.3) metasm rex-arch rex-core rex-struct2 rex-text rex-core (0.1.10) rex-encoder (0.1.4) metasm rex-arch rex-text rex-exploitation (0.1.14) jsobfu metasm rex-arch rex-encoder rex-text rex-java (0.1.5) rex-mime (0.1.5) rex-text rex-nop (0.1.1) rex-arch rex-ole (0.1.6) rex-text rex-powershell (0.1.72) rex-random_identifier rex-text rex-random_identifier (0.1.2) rex-text rex-registry (0.1.3) rex-rop_builder (0.1.3) metasm rex-core rex-text rex-socket (0.1.6) rex-core rex-sslscan (0.1.4) rex-socket rex-text rex-struct2 (0.1.2) rex-text (0.2.15) rex-zip (0.1.3) rex-text rkelly-remix (0.0.7) robots (0.10.1) ruby_smb (0.0.12) bindata rubyntlm windows_error rubyntlm (0.6.2) rubyzip (1.2.1) sawyer (0.8.1) addressable (>= 2.3.5, < 2.6) faraday (~> 0.8, < 1.0) sqlite3 (1.3.13) sshkey (1.9.0) thor (0.19.4) thread_safe (0.3.6) tzinfo (1.2.3) thread_safe (~> 0.1) tzinfo-data (1.2017.2) tzinfo (>= 1.0.0) windows_error (0.1.2) xmlrpc (0.3.0) PLATFORMS ruby DEPENDENCIES metasploit-framework! BUNDLED WITH 1.14.6 </ins>


<del> { stdenv, fetchurl, makeWrapper, ruby }: stdenv.mkDerivation rec { </del> <ins> { stdenv, fetchFromGitHub, makeWrapper, ruby, bundlerEnv, ncurses }: # Maintainer notes for updating: # 1. increment version number in expression and in Gemfile # 2. run $ nix-shell --command "bundler install && bundix" #    in metasploit in nixpkgs let env = bundlerEnv { inherit ruby; name = "metasploit-bundler-env"; gemdir = ./.; }; in stdenv.mkDerivation rec { </ins> name = "metasploit-framework-${version}"; <del> version = "3.3.1"; </del> <ins> version = "4.14.17"; </ins> <del> src = fetchurl { url = "http://downloads.metasploit.com/data/releases/archive/framework-${version}.tar.bz2"; sha256 = "07clzw1zfnqjhyydsc4mza238isai58p7aygh653qxsqb9a0j7qw"; </del> <ins> src = fetchFromGitHub { owner = "rapid7"; repo = "metasploit-framework"; rev = version; sha256 = "0g666lxin9f0v9vhfh3s913ym8fnh32rpfl1rpj8d8n1azch5fn0"; </ins> }; <del> buildInputs = [makeWrapper]; </del> <ins> buildInputs = [ makeWrapper ]; dontPatchelf = true; # stay away from exploit executables </ins> installPhase = '' <del> mkdir -p $out/share/msf mkdir -p $out/bin </del> <ins> mkdir -p $out/{bin,share/msf} </ins> cp -r * $out/share/msf for i in $out/share/msf/msf*; do <del> makeWrapper $i $out/bin/$(basename $i) --prefix RUBYLIB : $out/share/msf/lib </del> <ins> bin=$out/bin/$(basename $i) cat > $bin <<EOF #!/bin/sh -e exec ${env}/bin/bundle exec ${ruby}/bin/ruby $i "$@" EOF chmod +x $bin </ins> done ''; <del> postInstall = '' patchShebangs $out/share/msf ''; meta = { </del> <ins> meta = with stdenv.lib; { </ins> description = "Metasploit Framework - a collection of exploits"; homepage = https://github.com/rapid7/metasploit-framework/wiki; <del> platforms = stdenv.lib.platforms.unix; </del> <ins> platforms = platforms.unix; license = licenses.bsd3; maintainers = [ maintainers.makefu ]; </ins> }; }


<ins> { actionpack = { source = { remotes = ["https://rubygems.org"]; sha256 = "09fbazl0ja80na2wadfp3fzmdmdy1lsb4wd2yg7anbj0zk0ap7a9"; type = "gem"; }; version = "4.2.8"; }; actionview = { source = { remotes = ["https://rubygems.org"]; sha256 = "1mg4a8143q2wjhjq4mngl69jkv249z5jvg0jkdribdv4zkg586rp"; type = "gem"; }; version = "4.2.8"; }; activemodel = { source = { remotes = ["https://rubygems.org"]; sha256 = "11vhh7zmp92880s5sx8r32v2p0b7xg039mfr92pjynpkz4q901ld"; type = "gem"; }; version = "4.2.8"; }; activerecord = { source = { remotes = ["https://rubygems.org"]; sha256 = "1kk4dhn8jfhqfsf1dmb3a183gix6k46xr6cjkxj0rp51w2za1ns0"; type = "gem"; }; version = "4.2.8"; }; activesupport = { source = { remotes = ["https://rubygems.org"]; sha256 = "0wibdzd2f5l5rlsw1a1y3j3fhw2imrrbkxggdraa6q9qbdnc66hi"; type = "gem"; }; version = "4.2.8"; }; addressable = { source = { remotes = ["https://rubygems.org"]; sha256 = "1i8q32a4gr0zghxylpyy7jfqwxvwrivsxflg9mks6kx92frh75mh"; type = "gem"; }; version = "2.5.1"; }; arel = { source = { remotes = ["https://rubygems.org"]; sha256 = "0nfcrdiys6q6ylxiblky9jyssrw2xj96fmxmal7f4f0jj3417vj4"; type = "gem"; }; version = "6.0.4"; }; arel-helpers = { source = { remotes = ["https://rubygems.org"]; sha256 = "0k8hqa2505b2s3w6gajh2lvi2mn832yqldiy2z4c55phzkmr08sr"; type = "gem"; }; version = "2.3.0"; }; bcrypt = { source = { remotes = ["https://rubygems.org"]; sha256 = "1d254sdhdj6mzak3fb5x3jam8b94pvl1srladvs53j05a89j5z50"; type = "gem"; }; version = "3.1.11"; }; bindata = { source = { remotes = ["https://rubygems.org"]; sha256 = "10sii2chgnkp2jw830sbr2wb20p8p1wcwrl9jhadkw94f505qcyg"; type = "gem"; }; version = "2.4.0"; }; bit-struct = { source = { remotes = ["https://rubygems.org"]; sha256 = "1w7x1fh4a6inpb46imhdf4xrq0z4d6zdpg7sdf8n98pif2hx50sx"; type = "gem"; }; version = "0.16"; }; builder = { source = { remotes = ["https://rubygems.org"]; sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1"; type = "gem"; }; version = "3.2.3"; }; erubis = { source = { remotes = ["https://rubygems.org"]; sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3"; type = "gem"; }; version = "2.7.0"; }; faraday = { source = { remotes = ["https://rubygems.org"]; sha256 = "1wkx9844vacsk2229xbc27djf6zw15kqd60ifr78whf9mp9v6l03"; type = "gem"; }; version = "0.12.1"; }; filesize = { source = { remotes = ["https://rubygems.org"]; sha256 = "061qmg82mm9xnmnq3b7gbi24g28xk62w0b0nw86gybd07m1jn989"; type = "gem"; }; version = "0.1.1"; }; i18n = { source = { remotes = ["https://rubygems.org"]; sha256 = "1s6971zmjxszdrp59vybns9gzxpdxzdklakc5lp8nl4fx5kpxkbp"; type = "gem"; }; version = "0.8.1"; }; jsobfu = { source = { remotes = ["https://rubygems.org"]; sha256 = "1hchns89cfj0gggm2zbr7ghb630imxm2x2d21ffx2jlasn9xbkyk"; type = "gem"; }; version = "0.4.2"; }; json = { source = { remotes = ["https://rubygems.org"]; sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp"; type = "gem"; }; version = "2.1.0"; }; loofah = { source = { remotes = ["https://rubygems.org"]; sha256 = "109ps521p0sr3kgc460d58b4pr1z4mqggan2jbsf0aajy9s6xis8"; type = "gem"; }; version = "2.0.3"; }; metasm = { source = { remotes = ["https://rubygems.org"]; sha256 = "0gss57q4lv6l0jkih77zffrpjjzgkdcsy7b9nvvawyzknis9w4s5"; type = "gem"; }; version = "1.0.3"; }; metasploit-concern = { source = { remotes = ["https://rubygems.org"]; sha256 = "0kqby5ycxhr0jfzvjqkdgjbqqjrg8jlmcxw8myrm0875hybyl1mq"; type = "gem"; }; version = "2.0.4"; }; metasploit-credential = { source = { remotes = ["https://rubygems.org"]; sha256 = "1y36f1f4nw0imhfbckl213ah7qgfldrkv2fpv2acslb6iqiaa3gk"; type = "gem"; }; version = "2.0.9"; }; metasploit-framework = { source = { fetchSubmodules = false; rev = "fd3da8f3350d6cf7f0449bf0ead4d51747525c0a"; sha256 = "1r04drq34qfbhmhp0mqnm13vrycr7dcq670zk8xqiif5rhbij6qv"; type = "git"; url = "https://github.com/rapid7/metasploit-framework"; }; version = "4.14.17"; }; metasploit-model = { source = { remotes = ["https://rubygems.org"]; sha256 = "05pnai1cv00xw87rrz38dz4s3ss45s90290d0knsy1mq6rp8yvmw"; type = "gem"; }; version = "2.0.4"; }; metasploit-payloads = { source = { remotes = ["https://rubygems.org"]; sha256 = "0c6wvnxgwdiryz5skzrp2wcfbxp57icaclckjcaxlw63v09wgjii"; type = "gem"; }; version = "1.2.29"; }; metasploit_data_models = { source = { remotes = ["https://rubygems.org"]; sha256 = "0hb2wsz3d4xgjf6dlf7nzxlv6q7rcdgn1pj79xs3g8al38zi129g"; type = "gem"; }; version = "2.0.14"; }; metasploit_payloads-mettle = { source = { remotes = ["https://rubygems.org"]; sha256 = "058ijqznh4xqx3d6dph5gwdsmj96z4n46rl1mm85fyxpgpkifqd1"; type = "gem"; }; version = "0.1.9"; }; mini_portile2 = { source = { remotes = ["https://rubygems.org"]; sha256 = "1y25adxb1hgg1wb2rn20g3vl07qziq6fz364jc5694611zz863hb"; type = "gem"; }; version = "2.1.0"; }; minitest = { source = { remotes = ["https://rubygems.org"]; sha256 = "11my86fnihvpndyknn3c14hc82nhsgggnhlxh8h3bdjpmfsvl0my"; type = "gem"; }; version = "5.10.2"; }; msgpack = { source = { remotes = ["https://rubygems.org"]; sha256 = "0ck7w17d6b4jbb8inh1q57bghi9cjkiaxql1d3glmj1yavbpmlh7"; type = "gem"; }; version = "1.1.0"; }; multipart-post = { source = { remotes = ["https://rubygems.org"]; sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x"; type = "gem"; }; version = "2.0.0"; }; nessus_rest = { source = { remotes = ["https://rubygems.org"]; sha256 = "1allyrd4rll333zbmsi3hcyg6cw1dhc4bg347ibsw191nswnp8ci"; type = "gem"; }; version = "0.1.6"; }; net-ssh = { source = { remotes = ["https://rubygems.org"]; sha256 = "013p5jb4wy0cq7x7036piw2a3s1i9p752ki1srx2m289mpz4ml3q"; type = "gem"; }; version = "4.1.0"; }; network_interface = { source = { remotes = ["https://rubygems.org"]; sha256 = "0ir4c1vbz1y0gxyih024262i7ig1nji1lkylcrn9pjzx3798p97a"; type = "gem"; }; version = "0.0.1"; }; nexpose = { source = { remotes = ["https://rubygems.org"]; sha256 = "0jdhhzzs3b3rav6imx8jn9920cjj83yjvz35q169y0ppla2xzqbg"; type = "gem"; }; version = "6.0.0"; }; nokogiri = { source = { remotes = ["https://rubygems.org"]; sha256 = "0jd8q3pr5rkrxx1vklvhcqcgl8kmfv5c8ny36ni3z5mirw6cm70c"; type = "gem"; }; version = "1.7.2"; }; octokit = { source = { remotes = ["https://rubygems.org"]; sha256 = "0h6cm7bi0y7ysjgwws3paaipqdld6c0m0niazrjahhpz88qqq1g4"; type = "gem"; }; version = "4.7.0"; }; openssl-ccm = { source = { remotes = ["https://rubygems.org"]; sha256 = "18h5lxv0zh4j2f0wnhdmfz63x02vbzbq2k1clz6kzr0q83h8kj9c"; type = "gem"; }; version = "1.2.1"; }; openvas-omp = { source = { remotes = ["https://rubygems.org"]; sha256 = "14xf614vd76qjdjxjv14mmjar6s64fwp4cwb7bv5g1wc29srg28x"; type = "gem"; }; version = "0.0.4"; }; packetfu = { source = { remotes = ["https://rubygems.org"]; sha256 = "16ppq9wfxq4x2hss61l5brs3s6fmi8gb50mnp1nnnzb1asq4g8ll"; type = "gem"; }; version = "1.1.13"; }; patch_finder = { source = { remotes = ["https://rubygems.org"]; sha256 = "1md9scls55n1riw26vw1ak0ajq38dfygr36l0h00wqhv51cq745m"; type = "gem"; }; version = "1.0.2"; }; pcaprub = { source = { remotes = ["https://rubygems.org"]; sha256 = "0pl4lqy7308185pfv0197n8b4v20fhd0zb3wlpz284rk8ssclkvz"; type = "gem"; }; version = "0.12.4"; }; pg = { source = { remotes = ["https://rubygems.org"]; sha256 = "03xcgwjs6faxis81jxf2plnlalg55dhhafqv3kvjxfr8ic7plpw5"; type = "gem"; }; version = "0.20.0"; }; pg_array_parser = { source = { remotes = ["https://rubygems.org"]; sha256 = "1034dhg8h53j48sfm373js54skg4vpndjga6hzn2zylflikrrf3s"; type = "gem"; }; version = "0.0.9"; }; postgres_ext = { source = { remotes = ["https://rubygems.org"]; sha256 = "1lbp1qf5s1addhznm7d4bzks9adh7jpilgcsr8k7mbd0a1ailcgc"; type = "gem"; }; version = "3.0.0"; }; public_suffix = { source = { remotes = ["https://rubygems.org"]; sha256 = "040jf98jpp6w140ghkhw2hvc1qx41zvywx5gj7r2ylr1148qnj7q"; type = "gem"; }; version = "2.0.5"; }; rack = { source = { remotes = ["https://rubygems.org"]; sha256 = "073d6rjgqfb4xjhbshyrflqgbdvxqvx4b907j2d4mi5qgbv8y2ax"; type = "gem"; }; version = "1.6.6"; }; rack-test = { source = { remotes = ["https://rubygems.org"]; sha256 = "0h6x5jq24makgv2fq5qqgjlrk74dxfy62jif9blk43llw8ib2q7z"; type = "gem"; }; version = "0.6.3"; }; rails-deprecated_sanitizer = { source = { remotes = ["https://rubygems.org"]; sha256 = "0qxymchzdxww8bjsxj05kbf86hsmrjx40r41ksj0xsixr2gmhbbj"; type = "gem"; }; version = "1.0.3"; }; rails-dom-testing = { source = { remotes = ["https://rubygems.org"]; sha256 = "1ny7mbjxhq20rzg4pivvyvk14irmc7cn20kxfk3vc0z2r2c49p8r"; type = "gem"; }; version = "1.0.8"; }; rails-html-sanitizer = { source = { remotes = ["https://rubygems.org"]; sha256 = "138fd86kv073zqfx0xifm646w6bgw2lr8snk16lknrrfrss8xnm7"; type = "gem"; }; version = "1.0.3"; }; railties = { source = { remotes = ["https://rubygems.org"]; sha256 = "0bavl4hj7bnl3ryqi9rvykm410kflplgingkcxasfv1gdilddh4g"; type = "gem"; }; version = "4.2.8"; }; rake = { source = { remotes = ["https://rubygems.org"]; sha256 = "01j8fc9bqjnrsxbppncai05h43315vmz9fwg28qdsgcjw9ck1d7n"; type = "gem"; }; version = "12.0.0"; }; rb-readline = { source = { remotes = ["https://rubygems.org"]; sha256 = "170m6d2298s9kfbd4y3zzj4irsnd15qlbgi6kk93m88lkh9qzy3a"; type = "gem"; }; version = "0.5.4"; }; recog = { source = { remotes = ["https://rubygems.org"]; sha256 = "08ypzrn40jbjbzwdbbjkcqdm74zlsc0yr2iqs0yn479fa5k8ajw4"; type = "gem"; }; version = "2.1.6"; }; redcarpet = { source = { remotes = ["https://rubygems.org"]; sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7"; type = "gem"; }; version = "3.4.0"; }; rex-arch = { source = { remotes = ["https://rubygems.org"]; sha256 = "1y2mzv6wkqgclxl1x65mdq4d0lcgbbny4r1v24c16gi4jg9nsnc1"; type = "gem"; }; version = "0.1.4"; }; rex-bin_tools = { source = { remotes = ["https://rubygems.org"]; sha256 = "0skrbpyal6anh4g1nsaf9ypg5sd2ghxxmghasxw4p1s1i1xbmhwr"; type = "gem"; }; version = "0.1.3"; }; rex-core = { source = { remotes = ["https://rubygems.org"]; sha256 = "09xbslrwbc9d0rp24y1pdgc6650ciwicq4q7skjz74rprr9wj16f"; type = "gem"; }; version = "0.1.10"; }; rex-encoder = { source = { remotes = ["https://rubygems.org"]; sha256 = "1zm5jdxgyyp8pkfqwin34izpxdrmglx6vmk20ifnvcsm55c9m70z"; type = "gem"; }; version = "0.1.4"; }; rex-exploitation = { source = { remotes = ["https://rubygems.org"]; sha256 = "0gbj28jqaaldpk4qzysgcl6m0wcqx3gcldarqdk55p5z9zasrk19"; type = "gem"; }; version = "0.1.14"; }; rex-java = { source = { remotes = ["https://rubygems.org"]; sha256 = "0j58k02p5g9snkpak64sb4aymkrvrh9xpqh8wsnya4w7b86w2y6i"; type = "gem"; }; version = "0.1.5"; }; rex-mime = { source = { remotes = ["https://rubygems.org"]; sha256 = "15a14kz429h7pn81ysa6av3qijxjmxagjff6dyss5v394fxzxf4a"; type = "gem"; }; version = "0.1.5"; }; rex-nop = { source = { remotes = ["https://rubygems.org"]; sha256 = "0aigf9qsqsmiraa6zvfy1a7cyvf7zc3iyhzxi6fjv5sb8f64d6ny"; type = "gem"; }; version = "0.1.1"; }; rex-ole = { source = { remotes = ["https://rubygems.org"]; sha256 = "1pnzbqfnvbs0vc0z0ryszk3fxhgxrjd6gzwqa937rhlphwp5jpww"; type = "gem"; }; version = "0.1.6"; }; rex-powershell = { source = { remotes = ["https://rubygems.org"]; sha256 = "0nl60fdd1rlckk95d3s3y873w84vb0sgwvwxdzv414qxz8icpjnm"; type = "gem"; }; version = "0.1.72"; }; rex-random_identifier = { source = { remotes = ["https://rubygems.org"]; sha256 = "0cksrljaw61mdjvbmj9vqqhd8nra7jv466w5nim47n73rj72jc19"; type = "gem"; }; version = "0.1.2"; }; rex-registry = { source = { remotes = ["https://rubygems.org"]; sha256 = "0wv812ghnz143vx10ixmv32ypj1xrzr4rh4kgam8d8wwjwxsgw1q"; type = "gem"; }; version = "0.1.3"; }; rex-rop_builder = { source = { remotes = ["https://rubygems.org"]; sha256 = "0xjd3d6wnbq4ym0d0m268md8fb16f2hbwrahvxnl14q63fj9i3wy"; type = "gem"; }; version = "0.1.3"; }; rex-socket = { source = { remotes = ["https://rubygems.org"]; sha256 = "0r39782f2qpq83wsi72213v344gq4rccch98i376fx8bayh0dygh"; type = "gem"; }; version = "0.1.6"; }; rex-sslscan = { source = { remotes = ["https://rubygems.org"]; sha256 = "0r5cy1kng1ggjycn7a8vpval7clhr0yxhd7rgn2hasxl2p3c7i8v"; type = "gem"; }; version = "0.1.4"; }; rex-struct2 = { source = { remotes = ["https://rubygems.org"]; sha256 = "1nbdn53264a20cr2m2nq2v4mg0n33dvrd1jj1sixl37qjzw2k452"; type = "gem"; }; version = "0.1.2"; }; rex-text = { source = { remotes = ["https://rubygems.org"]; sha256 = "024miva867h4wv4y1lnxxrw2d7p51va32ismxqf3fsz4s9cqc88m"; type = "gem"; }; version = "0.2.15"; }; rex-zip = { source = { remotes = ["https://rubygems.org"]; sha256 = "1mbfryyhcw47i7jb8cs8vilbyqgyiyjkfl1ngl6wdbf7d87dwdw7"; type = "gem"; }; version = "0.1.3"; }; rkelly-remix = { source = { remotes = ["https://rubygems.org"]; sha256 = "1g7hjl9nx7f953y7lncmfgp0xgxfxvgfm367q6da9niik6rp1y3j"; type = "gem"; }; version = "0.0.7"; }; robots = { source = { remotes = ["https://rubygems.org"]; sha256 = "141gvihcr2c0dpzl3dqyh8kqc9121prfdql2iamaaw0mf9qs3njs"; type = "gem"; }; version = "0.10.1"; }; ruby_smb = { source = { remotes = ["https://rubygems.org"]; sha256 = "1v2acyx6csndb08sidb1pbixn2dlx9s75cpnjv4riwj0qlp8blli"; type = "gem"; }; version = "0.0.12"; }; rubyntlm = { source = { remotes = ["https://rubygems.org"]; sha256 = "1p6bxsklkbcqni4bcq6jajc2n57g0w5rzn4r49c3lb04wz5xg0dy"; type = "gem"; }; version = "0.6.2"; }; rubyzip = { source = { remotes = ["https://rubygems.org"]; sha256 = "06js4gznzgh8ac2ldvmjcmg9v1vg9llm357yckkpylaj6z456zqz"; type = "gem"; }; version = "1.2.1"; }; sawyer = { source = { remotes = ["https://rubygems.org"]; sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd"; type = "gem"; }; version = "0.8.1"; }; sqlite3 = { source = { remotes = ["https://rubygems.org"]; sha256 = "01ifzp8nwzqppda419c9wcvr8n82ysmisrs0hph9pdmv1lpa4f5i"; type = "gem"; }; version = "1.3.13"; }; sshkey = { source = { remotes = ["https://rubygems.org"]; sha256 = "0g02lh50jd5z4l9bp7xirnfn3n1dh9lr06dv3xh0kr3yhsny059h"; type = "gem"; }; version = "1.9.0"; }; thor = { source = { remotes = ["https://rubygems.org"]; sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns"; type = "gem"; }; version = "0.19.4"; }; thread_safe = { source = { remotes = ["https://rubygems.org"]; sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy"; type = "gem"; }; version = "0.3.6"; }; tzinfo = { source = { remotes = ["https://rubygems.org"]; sha256 = "05r81lk7q7275rdq7xipfm0yxgqyd2ggh73xpc98ypngcclqcscl"; type = "gem"; }; version = "1.2.3"; }; tzinfo-data = { source = { remotes = ["https://rubygems.org"]; sha256 = "1n83rmy476d4qmzq74qx0j7lbcpskbvrj1bmy3np4d5pydyw2yky"; type = "gem"; }; version = "1.2017.2"; }; windows_error = { source = { remotes = ["https://rubygems.org"]; sha256 = "0kbcv9j5sc7pvjzf1dkp6h69i6lmj205zyy2arxcfgqg11bsz2kp"; type = "gem"; }; version = "0.1.2"; }; xmlrpc = { source = { remotes = ["https://rubygems.org"]; sha256 = "1s744iwblw262gj357pky3d9fcx9hisvla7rnw29ysn5zsb6i683"; type = "gem"; }; version = "0.3.0"; }; } </ins>


<ins> # Env to update Gemfile.lock / gemset.nix with import <nixpkgs> {}; stdenv.mkDerivation { name = "env"; buildInputs = [ sqlite libpcap postgresql libxml2 libxslt pkgconfig bundix ]; } </ins>


mscgen = callPackage ../tools/graphics/mscgen { }; <del> msf = callPackage ../tools/security/metasploit { }; </del> <ins> metasploit = callPackage ../tools/security/metasploit { }; msf = metasploit; </ins> ms-sys = callPackage ../tools/misc/ms-sys { };


, protobuf, speechd, libXdamage, cups , ffmpeg, libxslt, libxml2, at-spi2-core , jre <ins> , pipewire_0_2 </ins> # optional dependencies , libgcrypt ? null # gnomeSupport || cupsSupport


libXScrnSaver libXcursor libXtst libGLU libGL pciutils protobuf speechd libXdamage at-spi2-core jre <ins> pipewire_0_2 </ins> ] ++ optional useVaapi libva ++ optional gnomeKeyringSupport libgnome-keyring3 ++ optionals gnomeSupport [ gnome.GConf libgcrypt ]


# added later in the wrapped -wv build or downloaded from Google. enable_widevine = true; use_cups = cupsSupport; <ins> # Provides the enable-webrtc-pipewire-capturer flag to support Wayland screen capture. rtc_use_pipewire = true; </ins> treat_warnings_as_errors = false; is_clang = stdenv.cc.isClang;


, makeWrapper, ed , glib, gtk3, gnome3, gsettings-desktop-schemas, gn, fetchgit , libva ? null <ins> , pipewire_0_2 </ins> , gcc, nspr, nss, patchelfUnstable, runCommand , lib


buildCommand = let browserBinary = "${chromiumWV}/libexec/chromium/chromium"; getWrapperFlags = plugin: "$(< "${plugin}/nix-support/wrapper-flags")"; <del> libPath = stdenv.lib.makeLibraryPath [ libva ]; </del> <ins> libPath = stdenv.lib.makeLibraryPath [ libva pipewire_0_2 ]; </ins> in with stdenv.lib; '' mkdir -p "$out/bin"


githubId = 24496705; name = "Scott Hamilton"; }; <ins> ShamrockLee = { name = "Shamrock Lee"; email = "44064051+ShamrockLee@users.noreply.github.com"; github = "ShamrockLee"; githubId = 44064051; }; </ins> shanemikel = { email = "shanepearlman@pm.me"; github = "shanemikel";


<ins> { stdenv, mkDerivation, fetchFromGitHub, cmake, pkgconfig, libchewing, qtbase , qttools }: mkDerivation rec { pname = "chewing-editor"; version = "0.1.1"; src = fetchFromGitHub { owner = "chewing"; repo = "${pname}"; rev = "${version}"; sha256 = "0kc2hjx1gplm3s3p1r5sn0cyxw3k1q4gyv08q9r6rs4sg7xh2w7w"; }; doCheck = true; nativeBuildInputs = [ cmake pkgconfig ]; buildInputs = [ libchewing qtbase qttools ]; meta = with stdenv.lib; { description = "Cross platform chewing user phrase editor"; longDescription = '' chewing-editor is a cross platform chewing user phrase editor. It provides a easy way to manage user phrase. With it, user can customize their user phrase to increase input performance. ''; homepage = "https://github.com/chewing/chewing-editor"; license = licenses.gpl2Plus; maintainers = [ maintainers.ShamrockLee ]; platforms = platforms.all; }; } </ins>


fcitx-configtool = callPackage ../tools/inputmethods/fcitx/fcitx-configtool.nix { }; <ins> chewing-editor = libsForQt5.callPackage ../applications/misc/chewing-editor { }; </ins> fcppt = callPackage ../development/libraries/fcppt { }; fcrackzip = callPackage ../tools/security/fcrackzip { };


mv data/org.pitivi.Pitivi-mime.xml data/org.pitivi.Pitivi-mime.xml.in ''; <ins> # Fixes error #     Couldn’t recognize the image file format for file ".../share/pitivi/pixmaps/asset-proxied.svg" # at startup, see https://github.com/NixOS/nixpkgs/issues/56943 # and https://github.com/NixOS/nixpkgs/issues/89691#issuecomment-714398705. strictDeps = false; </ins> passthru = { updateScript = gnome3.updateScript { packageName = "pitivi";


<ins> From acab088fd6af0b2ef2df1396aeb93bfc2e020fa5 Mon Sep 17 00:00:00 2001 From: "Yukihiro "Matz" Matsumoto" <matz@ruby.or.jp> Date: Mon, 27 Apr 2020 18:52:43 +0900 Subject: [PATCH 1/2] Updating `parse.y for recent `bison` (retry). --- mrbgems/mruby-compiler/core/parse.y | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 6a1faf4e..2a4f740e 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -1323,7 +1323,7 @@ heredoc_end(parser_state *p) %} -%pure-parser +%define api.pure %parse-param {parser_state *p} %lex-param {parser_state *p} -- 2.27.0 From 3cc682d943b29e84928a847a23f411ddbace74b7 Mon Sep 17 00:00:00 2001 From: "Yukihiro "Matz" Matsumoto" <matz@ruby.or.jp> Date: Fri, 15 May 2020 12:30:13 +0900 Subject: [PATCH 2/2] Remove `YYERROR_VERBOSE` which no longer supported since `bison 3.6`. Instead we added `%define parse.error verbose`. --- mrbgems/mruby-compiler/core/parse.y | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 2a4f740e..eee6a5e5 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -9,7 +9,6 @@ #ifdef PARSER_DEBUG # define YYDEBUG 1 #endif -#define YYERROR_VERBOSE 1 #define YYSTACK_USE_ALLOCA 1 #include <ctype.h> @@ -1323,6 +1322,7 @@ heredoc_end(parser_state *p) %} +%define parse.error verbose %define api.pure %parse-param {parser_state *p} %lex-param {parser_state *p} -- 2.27.0 </ins>


<del> { stdenv, ruby, bison, fetchFromGitHub }: </del> <ins> { stdenv, ruby, bison, rake, fetchFromGitHub }: </ins> stdenv.mkDerivation rec { pname = "mruby"; <del> version = "2.1.0"; </del> <ins> version = "2.1.1"; </ins> src = fetchFromGitHub { owner   = "mruby"; repo    = "mruby"; rev     = version; <del> sha256  = "1y072c7dh9jf8xwy7kia6cb4dkpspq4zf24ssn7zm5f46p4waxni"; </del> <ins> sha256  = "gEEb0Vn/G+dNgeY6r0VP8bMSPrEOf5s+0GoOcnIPtEU="; </ins> }; <del> nativeBuildInputs = [ ruby bison ]; </del> <ins> nativeBuildInputs = [ ruby bison rake ]; patches = [ ./bison-36-compat.patch ]; </ins> # Necessary so it uses `gcc` instead of `ld` for linking. # https://github.com/mruby/mruby/blob/35be8b252495d92ca811d76996f03c470ee33380/tasks/toolchains/gcc.rake#L25


chmod +x "$out"/bin/wsrep_sst_common rm "$out"/bin/{mariadb-client-test,mariadb-test,mysql_client_test,mysqltest} rm -r "$out"/data # Don't need testing data <del> mv "$out"/OFF/suite/plugins/pam/pam_mariadb_mtr.so "$out"/share/pam/lib/security mv "$out"/OFF/suite/plugins/pam/mariadb_mtr "$out"/share/pam/etc/security rm -r "$out"/OFF </del> '' + optionalString withStorageMroonga '' mv "$out"/share/{groonga,groonga-normalizer-mysql} "$out"/share/doc/mysql '' + optionalString (!stdenv.hostPlatform.isDarwin) '' <ins> mv "$out"/OFF/suite/plugins/pam/pam_mariadb_mtr.so "$out"/share/pam/lib/security mv "$out"/OFF/suite/plugins/pam/mariadb_mtr "$out"/share/pam/etc/security rm -r "$out"/OFF </ins> sed -i 's/-mariadb/-mysql/' "$out"/bin/galera_new_cluster '';


if test -n "$compressImage"; then echo "Compressing image..." <del> zstd -T$NIX_BUILD_CORES $out/iso/$isoName </del> <ins> zstd -T$NIX_BUILD_CORES --rm $out/iso/$isoName </ins> fi mkdir -p $out/nix-support


fsck.vfat -vn firmware_part.img dd conv=notrunc if=firmware_part.img of=$img seek=$START count=$SECTORS if test -n "$compressImage"; then <del> zstd -T$NIX_BUILD_CORES $img </del> <ins> zstd -T$NIX_BUILD_CORES --rm $img </ins> fi ''; }) {};


<ins> { lib , fetchurl , appimageTools , gtk3 , gsettings-desktop-schemas , xorg , pname , version , sha256 , metaCommon ? { } }: let name = "${pname}-${version}"; src = fetchurl { url = "https://github.com/sindresorhus/caprine/releases/download/v${version}/Caprine-${version}.AppImage"; name = "Caprine-${version}.AppImage"; inherit sha256; }; extracted = appimageTools.extractType2 { inherit name src; }; in (appimageTools.wrapType2 { inherit name src; profile = '' export LC_ALL=C.UTF-8 export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS ''; extraPkgs = pkgs: appimageTools.defaultFhsEnvArgs.multiPkgs pkgs; extraInstallCommands = '' mv $out/bin/{${name},caprine} mkdir -p $out/share "${xorg.lndir}/bin/lndir" -silent "${extracted}/usr/share" "$out/share" ln -s ${extracted}/caprine.png $out/share/icons/caprine.png mkdir $out/share/applications cp ${extracted}/caprine.desktop $out/share/applications/ substituteInPlace $out/share/applications/caprine.desktop  --replace AppRun caprine ''; meta = metaCommon // { platforms = [ "x86_64-linux" ]; mainProgram = "caprine"; }; }) // { inherit pname version; } </ins>


<ins> { stdenvNoCC , lib , fetchurl , undmg , pname , version , sha256 , metaCommon ? { } }: stdenvNoCC.mkDerivation { inherit pname version; src = fetchurl { url = "https://github.com/sindresorhus/caprine/releases/download/v${version}/Caprine-${version}.dmg"; name = "Caprine-${version}.dmg"; inherit sha256; }; sourceRoot = "Caprine.app"; nativeBuildInputs = [ undmg ]; installPhase = '' mkdir -p "$out/Applications/Caprine.app" cp -R . "$out/Applications/Caprine.app" mkdir "$out/bin" ln -s "$out/Applications/Caprine.app/Contents/MacOS/Caprine" "$out/bin/caprine" ''; meta = metaCommon // { platforms = with lib.platforms; darwin; mainProgram = "caprine"; }; } </ins>


<ins> { lib, callPackage, stdenvNoCC }: let pname = "caprine"; version = "2.55.2"; metaCommon = with lib; { description = "An elegant Facebook Messenger desktop app"; homepage = "https://sindresorhus.com/caprine"; license = licenses.mit; maintainers = with maintainers; [ ShamrockLee ]; }; x86_64-appimage = callPackage ./build-from-appimage.nix { inherit pname version metaCommon; sha256 = "J7eHVXjWSIcTpLMM8FlGKZzVh6XgpQ0d82kxfMbPyZ4="; }; x86_64-dmg = callPackage ./build-from-dmg.nix { inherit pname version metaCommon; sha256 = "du/9N1BFq1s7spPiEDgDbjjcnkA0x1ExhAEpQvmO3aA="; }; in (if stdenvNoCC.isDarwin then x86_64-dmg else x86_64-appimage).overrideAttrs (oldAttrs: { passthru = (oldAttrs.passthru or { }) // { inherit x86_64-appimage x86_64-dmg; }; meta = oldAttrs.meta // { platforms = x86_64-appimage.meta.platforms ++ x86_64-dmg.meta.platforms; }; }) </ins>


canto-daemon = callPackage ../applications/networking/feedreaders/canto-daemon { }; <ins> caprine-bin = callPackage ../applications/networking/instant-messengers/caprine-bin { }; </ins> carddav-util = callPackage ../tools/networking/carddav-util { }; carla = libsForQt5.callPackage ../applications/audio/carla { };


url = "https://github.com/ipmitool/ipmitool/commit/5db314f694f75c575cd7c9ffe9ee57aaf3a88866.patch"; sha256 = "01niwrgajhrdhl441gzmw6v1r1yc3i8kn98db4b6smfn5fwdp1pa"; }) <ins> (fetchpatch { name = "CVE-2020-5208.patch"; url = "https://github.com/ipmitool/ipmitool/commit/e824c23316ae50beb7f7488f2055ac65e8b341f2.patch"; sha256 = "sha256-X7MnoX2fzByRpRY4p33xetT+V2aehlQ/qU+aeaqtTUY="; }) </ins> ]; buildInputs = [ openssl ];


in { php72 = generic { <del> version = "7.2.29"; sha256 = "08xry2fgqgg8s0ym1hh11wkbr36av3zq1bn4krbciw1b7x8gb8ga"; </del> <ins> version = "7.2.31"; sha256 = "0057x1s43f9jidmrl8daka6wpxclxc1b1pm5cjbz616p8nbmb9qv"; </ins> # https://bugs.php.net/bug.php?id=76826 extraPatches = optional stdenv.isDarwin ./php72-darwin-isfinite.patch; }; php73 = generic { <del> version = "7.3.16"; sha256 = "0bh499v9dfgh9k51w4rird1slb9rh9whp5h37fb84c98d992s1xq"; </del> <ins> version = "7.3.19"; sha256 = "199l1lr7ima92icic7b1bqlb036md78m305lc3v6zd4zw8qix70d"; </ins> # https://bugs.php.net/bug.php?id=76826 extraPatches = optional stdenv.isDarwin ./php73-darwin-isfinite.patch; }; php74 = generic { <del> version = "7.4.6"; sha256 = "0j133pfwa823d4jhx2hkrrzjl4hswvz00b1z58r5c82xd5sr9vd6"; </del> <ins> version = "7.4.7"; sha256 = "0ynq4fz54jpzh9nxvbgn3vrdad2clbac0989ai0yrj2ryc0hs3l0"; </ins> }; }


stdenv.mkDerivation rec { pname = "sqlite-analyzer"; <del> version = "3.32.2"; </del> <ins> version = "3.32.3"; </ins> src = assert version == sqlite.version; fetchurl { url = "https://sqlite.org/2020/sqlite-src-${archiveVersion version}.zip"; <del> sha256 = "1jqhs896cvp9l399mjpbv1x2qbfvq875l1vrgnl3zc4ffdjxs9z0"; </del> <ins> sha256 = "1fgmslzf013ry3a7g2vms7zyg24gs53gfj308r6ki4inbn3g04lk"; </ins> }; nativeBuildInputs = [ unzip ];


stdenv.mkDerivation rec { pname = "sqlite"; <del> version = "3.32.2"; </del> <ins> version = "3.32.3"; </ins> # NB! Make sure to update analyzer.nix src (in the same directory). src = fetchurl { url = "https://sqlite.org/2020/sqlite-autoconf-${archiveVersion version}.tar.gz"; <del> sha256 = "1130bcd70s2vlsq0d638pb5qrw9kwqvjswnp2dfypghx9hjz3gid"; </del> <ins> sha256 = "0rlbaq177gcgk5dswd3akbhv2nvvzljrbhgy18hklbhw7h90f5d3"; </ins> }; outputs = [ "bin" "dev" "out" ];


<del> { config, lib, pkgs, ... }: </del> <ins> { config, lib, pkgs, utils, ... }: </ins> with lib; let cfg = config.services.xserver.desktopManager.xfce; <ins> excludePackages = config.environment.xfce.excludePackages; </ins> in {


description = lib.mdDoc "Enable the XFCE screensaver."; }; }; <ins> environment.xfce.excludePackages = mkOption { default = []; example = literalExpression "[ pkgs.xfce.xfce4-volumed-pulse ]"; type = types.listOf types.package; description = lib.mdDoc "Which packages XFCE should exclude from the default environment"; }; </ins> }; config = mkIf cfg.enable { <del> environment.systemPackages = with pkgs.xfce // pkgs; [ </del> <ins> environment.systemPackages = utils.removePackagesByName (with pkgs.xfce // pkgs; [ </ins> glib # for gsettings gtk3.out # gtk-update-icon-cache


] ++ optionals (!cfg.noDesktop) [ xfce4-panel xfdesktop <del> ] ++ optional cfg.enableScreensaver xfce4-screensaver; </del> <ins> ] ++ optional cfg.enableScreensaver xfce4-screensaver) excludePackages; </ins> programs.xfconf.enable = true; programs.thunar.enable = true;


programs.zsh.vteIntegration = mkDefault true; # Systemd services <del> systemd.packages = with pkgs.xfce; [ </del> <ins> systemd.packages = utils.removePackagesByName (with pkgs.xfce; [ </ins> xfce4-notifyd <del> ]; </del> <ins> ]) excludePackages; </ins> security.pam.services.xfce4-screensaver.unixAuth = cfg.enableScreensaver; };


githubId = 993484; name = "Greg Hale"; }; <ins> imlonghao = { email = "nixos@esd.cc"; github = "imlonghao"; githubId = 4951333; name = "Hao Long"; }; </ins> immae = { email = "ismael@bouya.org"; github = "immae";


./services/backup/automysqlbackup.nix ./services/backup/bacula.nix ./services/backup/borgbackup.nix <ins> ./services/backup/borgmatic.nix </ins> ./services/backup/duplicati.nix ./services/backup/duplicity.nix ./services/backup/mysql-backup.nix


<ins> { config, lib, pkgs, ... }: with lib; let cfg = config.services.borgmatic; cfgfile = pkgs.writeText "config.yaml" (builtins.toJSON cfg.settings); in { options.services.borgmatic = { enable = mkEnableOption "borgmatic"; settings = mkOption { description = '' See https://torsion.org/borgmatic/docs/reference/configuration/ ''; type = types.submodule { freeformType = with lib.types; attrsOf anything; options.location = { source_directories = mkOption { type = types.listOf types.str; description = '' List of source directories to backup (required). Globs and tildes are expanded. ''; example = [ "/home" "/etc" "/var/log/syslog*" ]; }; repositories = mkOption { type = types.listOf types.str; description = '' Paths to local or remote repositories (required). Tildes are expanded. Multiple repositories are backed up to in sequence. Borg placeholders can be used. See the output of "borg help placeholders" for details. See ssh_command for SSH options like identity file or port. If systemd service is used, then add local repository paths in the systemd service file to the ReadWritePaths list. ''; example = [ "user@backupserver:sourcehostname.borg" "user@backupserver:{fqdn}" ]; }; }; }; }; }; config = mkIf cfg.enable { environment.systemPackages = [ pkgs.borgmatic ]; environment.etc."borgmatic/config.yaml".source = cfgfile; systemd.packages = [ pkgs.borgmatic ]; }; } </ins>


<ins> { borgbackup, coreutils, lib, python3Packages, systemd }: python3Packages.buildPythonApplication rec { pname = "borgmatic"; version = "1.5.12"; src = python3Packages.fetchPypi { inherit pname version; sha256 = "sha256-XLbBJvNRmH8W9SnOjF7zUbazRYFCMW6SEO2wKN/2VTY="; }; checkInputs = with python3Packages; [ flexmock pytestCheckHook pytest-cov ]; # - test_borgmatic_version_matches_news_version # The file NEWS not available on the pypi source, and this test is useless # - test_collect_configuration_run_summary_logs_outputs_merged_json_results # Upstream fixed in the next version, see # https://github.com/witten/borgmatic/commit/ea6cd53067435365a96786b006aec391714501c4 disabledTests = [ "test_borgmatic_version_matches_news_version" "test_collect_configuration_run_summary_logs_outputs_merged_json_results" ]; propagatedBuildInputs = with python3Packages; [ borgbackup colorama pykwalify ruamel_yaml requests setuptools ]; postInstall = '' mkdir -p $out/lib/systemd/system cp sample/systemd/borgmatic.timer $out/lib/systemd/system/ substitute sample/systemd/borgmatic.service  $out/lib/systemd/system/borgmatic.service  --replace /root/.local/bin/borgmatic $out/bin/borgmatic  --replace systemd-inhibit ${systemd}/bin/systemd-inhibit  --replace sleep ${coreutils}/bin/sleep ''; meta = with lib; { description = "Simple, configuration-driven backup software for servers and workstations"; homepage = "https://torsion.org/borgmatic/"; license = licenses.gpl3Plus; platforms = platforms.linux; maintainers = with maintainers; [ imlonghao ]; }; } </ins>


borgbackup = callPackage ../tools/backup/borg { }; <ins> borgmatic = callPackage ../tools/backup/borgmatic { }; </ins> boringtun = callPackage ../tools/networking/boringtun { }; # Upstream recommends qt5.12 and it doesn't build with qt5.15


makeFlags = let arch = head (splitString "-" stdenv.system); <del> march = { x86_64 = stdenv.hostPlatform.platform.gcc.arch or "x86-64"; i686 = "pentium4"; }.${arch} </del> <ins> march = { x86_64 = stdenv.hostPlatform.platform.gcc.arch or "x86-64"; i686 = "pentium4"; aarch64 = "armv8-a"; }.${arch} </ins> or (throw "unsupported architecture: ${arch}"); # Julia requires Pentium 4 (SSE2) or better <del> cpuTarget = { x86_64 = "x86-64"; i686 = "pentium4"; }.${arch} </del> <ins> cpuTarget = { x86_64 = "x86-64"; i686 = "pentium4"; aarch64 = "generic"; }.${arch} </ins> or (throw "unsupported architecture: ${arch}"); <del> # Julia applies a lot of patches to its dependencies, so for now do not use the system LLVM # https://github.com/JuliaLang/julia/tree/master/deps/patches </del> in [ "ARCH=${arch}" "MARCH=${march}"