From 376b2ef2b83be9671c4f24b7ff4ded335d5352d4 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Braun Date: Tue, 12 Feb 2019 16:38:23 +0100 Subject: nixos/qemu-vm: declarative drives Adds `virtualisation.qemu.drives` option to specify drives to be used by qemu. Also fix boot when `virtualisation.useBootLoader` is set to true. Since the boot disk is second qemu doesn't boot on it. Added `bootindex=1` to the boot disk device. --- nixos/modules/virtualisation/qemu-vm.nix | 135 ++++++++++++++++++++++--------- 1 file changed, 99 insertions(+), 36 deletions(-) diff --git a/nixos/modules/virtualisation/qemu-vm.nix b/nixos/modules/virtualisation/qemu-vm.nix index ed3431554be..e313d2b411b 100644 --- a/nixos/modules/virtualisation/qemu-vm.nix +++ b/nixos/modules/virtualisation/qemu-vm.nix @@ -23,24 +23,56 @@ let cfg = config.virtualisation; - qemuGraphics = lib.optionalString (!cfg.graphics) "-nographic"; - consoles = lib.concatMapStringsSep " " (c: "console=${c}") cfg.qemu.consoles; - # XXX: This is very ugly and in the future we really should use attribute - # sets to build ALL of the QEMU flags instead of this mixed mess of Nix - # expressions and shell script stuff. - mkDiskIfaceDriveFlag = idx: driveArgs: let - inherit (cfg.qemu) diskInterface; - # The drive identifier created by incrementing the index by one using the - # shell. - drvId = "drive$((${idx} + 1))"; - # NOTE: DO NOT shell escape, because this may contain shell variables. - commonArgs = "index=${idx},id=${drvId},${driveArgs}"; - isSCSI = diskInterface == "scsi"; - devArgs = "${diskInterface}-hd,drive=${drvId}"; - args = "-drive ${commonArgs},if=none -device lsi53c895a -device ${devArgs}"; - in if isSCSI then args else "-drive ${commonArgs},if=${diskInterface}"; + driveOpts = { ... }: { + + options = { + + file = mkOption { + type = types.str; + description = "The file image used for this drive."; + }; + + driveExtraOpts = mkOption { + type = types.attrsOf types.str; + default = {}; + description = "Extra options passed to drive flag."; + }; + + deviceExtraOpts = mkOption { + type = types.attrsOf types.str; + default = {}; + description = "Extra options passed to device flag."; + }; + + }; + + }; + + driveCmdline = idx: { file, driveExtraOpts, deviceExtraOpts, ... }: + let + drvId = "drive${toString idx}"; + mkKeyValue = generators.mkKeyValueDefault {} "="; + mkOpts = opts: concatStringsSep "," (mapAttrsToList mkKeyValue opts); + driveOpts = mkOpts (driveExtraOpts // { + index = idx; + id = drvId; + "if" = "none"; + inherit file; + }); + deviceOpts = mkOpts (deviceExtraOpts // { + drive = drvId; + }); + device = + if cfg.qemu.diskInterface == "scsi" then + "-device lsi53c895a -device scsi-hd,${deviceOpts}" + else + "-device virtio-blk-pci,${deviceOpts}"; + in + "-drive ${driveOpts} ${device}"; + + drivesCmdLine = drives: concatStringsSep " " (imap1 driveCmdline drives); # Shell script to start the VM. startVM = @@ -77,13 +109,11 @@ let ''} cd $TMPDIR - idx=2 - extraDisks="" + idx=0 ${flip concatMapStrings cfg.emptyDiskImages (size: '' if ! test -e "empty$idx.qcow2"; then ${qemu}/bin/qemu-img create -f qcow2 "empty$idx.qcow2" "${toString size}M" fi - extraDisks="$extraDisks ${mkDiskIfaceDriveFlag "$idx" "file=$(pwd)/empty$idx.qcow2,werror=report"}" idx=$((idx + 1)) '')} @@ -97,21 +127,7 @@ let -virtfs local,path=/nix/store,security_model=none,mount_tag=store \ -virtfs local,path=$TMPDIR/xchg,security_model=none,mount_tag=xchg \ -virtfs local,path=''${SHARED_DIR:-$TMPDIR/xchg},security_model=none,mount_tag=shared \ - ${if cfg.useBootLoader then '' - ${mkDiskIfaceDriveFlag "0" "file=$NIX_DISK_IMAGE,cache=writeback,werror=report"} \ - ${mkDiskIfaceDriveFlag "1" "file=$TMPDIR/disk.img,media=disk"} \ - ${if cfg.useEFIBoot then '' - -pflash $TMPDIR/bios.bin \ - '' else '' - ''} - '' else '' - ${mkDiskIfaceDriveFlag "0" "file=$NIX_DISK_IMAGE,cache=writeback,werror=report"} \ - -kernel ${config.system.build.toplevel}/kernel \ - -initrd ${config.system.build.toplevel}/initrd \ - -append "$(cat ${config.system.build.toplevel}/kernel-params) init=${config.system.build.toplevel}/init regInfo=${regInfo}/registration ${consoles} $QEMU_KERNEL_PARAMS" \ - ''} \ - $extraDisks \ - ${qemuGraphics} \ + ${drivesCmdLine config.virtualisation.qemu.drives} \ ${toString config.virtualisation.qemu.options} \ $QEMU_OPTS \ "$@" @@ -367,6 +383,12 @@ in ''; }; + drives = + mkOption { + type = types.listOf (types.submodule driveOpts); + description = "Drives passed to qemu."; + }; + diskInterface = mkOption { default = "virtio"; @@ -476,8 +498,49 @@ in # FIXME: Consolidate this one day. virtualisation.qemu.options = mkMerge [ - (mkIf (pkgs.stdenv.isi686 || pkgs.stdenv.isx86_64) [ "-vga std" "-usb" "-device usb-tablet,bus=usb-bus.0" ]) - (mkIf (pkgs.stdenv.isAarch32 || pkgs.stdenv.isAarch64) [ "-device virtio-gpu-pci" "-device usb-ehci,id=usb0" "-device usb-kbd" "-device usb-tablet" ]) + (mkIf (pkgs.stdenv.isi686 || pkgs.stdenv.isx86_64) [ + "-vga std" "-usb" "-device usb-tablet,bus=usb-bus.0" + ]) + (mkIf (pkgs.stdenv.isAarch32 || pkgs.stdenv.isAarch64) [ + "-device virtio-gpu-pci" "-device usb-ehci,id=usb0" "-device usb-kbd" "-device usb-tablet" + ]) + (mkIf (!cfg.useBootLoader) [ + "-kernel ${config.system.build.toplevel}/kernel" + "-initrd ${config.system.build.toplevel}/initrd" + ''-append "$(cat ${config.system.build.toplevel}/kernel-params) init=${config.system.build.toplevel}/init regInfo=${regInfo}/registration ${consoles} $QEMU_KERNEL_PARAMS"'' + ]) + (mkIf cfg.useEFIBoot [ + "-pflash $TMPDIR/bios.bin" + ]) + (mkIf (!cfg.graphics) [ + "-nographic" + ]) + ]; + + virtualisation.qemu.drives = mkMerge [ + (mkIf cfg.useBootLoader [ + { + file = "$NIX_DISK_IMAGE"; + driveExtraOpts.cache = "writeback"; + driveExtraOpts.werror = "report"; + } + { + file = "$TMPDIR/disk.img"; + driveExtraOpts.media = "disk"; + deviceExtraOpts.bootindex = "1"; + } + ]) + (mkIf (!cfg.useBootLoader) [ + { + file = "$NIX_DISK_IMAGE"; + driveExtraOpts.cache = "writeback"; + driveExtraOpts.werror = "report"; + } + ]) + (imap0 (idx: _: { + file = "$(pwd)/empty${toString idx}.qcow2"; + driveExtraOpts.werror = "report"; + }) cfg.emptyDiskImages) ]; # Mount the host filesystem via 9P, and bind-mount the Nix store -- cgit 1.4.1 From 5ddd4dbb124bee11bf84b79547900a0e6499cfaf Mon Sep 17 00:00:00 2001 From: Troels Henriksen Date: Wed, 9 Oct 2019 12:16:55 +0200 Subject: ispc: add x86_64-darwin to platforms. --- pkgs/development/compilers/ispc/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/ispc/default.nix b/pkgs/development/compilers/ispc/default.nix index 762d1233bb6..d07bf6b5733 100644 --- a/pkgs/development/compilers/ispc/default.nix +++ b/pkgs/development/compilers/ispc/default.nix @@ -67,7 +67,7 @@ stdenv.mkDerivation rec { homepage = https://ispc.github.io/ ; description = "Intel 'Single Program, Multiple Data' Compiler, a vectorised language"; license = licenses.bsd3; - platforms = ["x86_64-linux"]; # TODO: buildable on more platforms? + platforms = ["x86_64-linux" "x86_64-darwin"]; # TODO: buildable on more platforms? maintainers = [ maintainers.aristid ]; }; } -- cgit 1.4.1 From 8120184bf176fc34707f4504c8d1d91716d1e22d Mon Sep 17 00:00:00 2001 From: Philip Potter Date: Mon, 14 Oct 2019 20:45:28 +0100 Subject: ssh-agent: add agentPKCS11Whitelist option If you want to be able to use OpenSC with ssh-agent, you need to be able to add it to the ssh-agent whitelist. This adds an option, agentPKCS11Whitelist, that exposes the option. Note that I currently work around this by injecting the parameter into the agentTimeout option: programs.ssh.agentTimeout = "1h -P ${pkgs.opensc}/lib/opensc-pkcs11.so"; but I feel that a proper option would be better :) --- nixos/modules/programs/ssh.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/nixos/modules/programs/ssh.nix b/nixos/modules/programs/ssh.nix index 733b8f7636f..703975fd06c 100644 --- a/nixos/modules/programs/ssh.nix +++ b/nixos/modules/programs/ssh.nix @@ -115,6 +115,16 @@ in ''; }; + agentPKCS11Whitelist = mkOption { + type = types.nullOr types.str; + default = null; + example = "\${pkgs.opensc}/lib/opensc-pkcs11.so"; + description = '' + A pattern-list of acceptable paths for PKCS#11 shared libraries + that may be used with the -s option to ssh-add. + ''; + }; + package = mkOption { type = types.package; default = pkgs.openssh; @@ -241,6 +251,7 @@ in ExecStart = "${cfg.package}/bin/ssh-agent " + optionalString (cfg.agentTimeout != null) ("-t ${cfg.agentTimeout} ") + + optionalString (cfg.agentPKCS11Whitelist != null) ("-P ${cfg.agentPKCS11Whitelist} ") "-a %t/ssh-agent"; StandardOutput = "null"; Type = "forking"; -- cgit 1.4.1 From f7ab5d985f633df9c1d433b9954004950f0739f9 Mon Sep 17 00:00:00 2001 From: Philip Potter Date: Wed, 16 Oct 2019 22:03:58 +0100 Subject: gnupg-pkcs11-scd: init at 0.9.2 This adds gnupg-pkcs11-scd, a smart card daemon for GnuPG that supports PKCS#11 smartcards (such as the Yubikey PIV module). You can use it by adding something like this to your ~/.gnupg/gpg-agent.conf: scdaemon-program /home//.nix-profile/bin/gnupg-pkcs11-scd You will also need to install `opensc` and have a ~/.gnupg/gnupg-pkcs11-scd.conf with something like the following: providers opensc provider-opensc-library /home/philandstuff/.nix-profile/lib/pkcs11/opensc-pkcs11.so Then `gpg` smartcard operations will access your PKCS#11-capable smartcard. --- pkgs/tools/security/gnupg-pkcs11-scd/default.nix | 33 ++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 pkgs/tools/security/gnupg-pkcs11-scd/default.nix diff --git a/pkgs/tools/security/gnupg-pkcs11-scd/default.nix b/pkgs/tools/security/gnupg-pkcs11-scd/default.nix new file mode 100644 index 00000000000..77537f1bfeb --- /dev/null +++ b/pkgs/tools/security/gnupg-pkcs11-scd/default.nix @@ -0,0 +1,33 @@ +{ stdenv, fetchurl, libgpgerror, libassuan, libgcrypt, pkcs11helper, + pkgconfig, openssl }: + +stdenv.mkDerivation rec { + pname = "gnupg-pkcs11-scd"; + version = "0.9.2"; + + src = fetchurl { + url = "https://github.com/alonbl/${pname}/releases/download/${pname}-${version}/${pname}-${version}.tar.bz2"; + sha256 = "sha256:1mfh9zjbahjd788rq1mzx009pd7p1sq62sbz586rd7szif7pkpgx"; + }; + + buildInputs = [ pkcs11helper pkgconfig openssl ]; + + configureFlags = [ + "--with-libgpg-error-prefix=${libgpgerror.dev}" + "--with-libassuan-prefix=${libassuan.dev}" + "--with-libgcrypt-prefix=${libgcrypt.dev}" + ]; + + meta = with stdenv.lib; { + description = "A smart-card daemon to enable the use of PKCS#11 tokens with GnuPG"; + longDescription = '' + gnupg-pkcs11 is a project to implement a BSD-licensed smart-card + daemon to enable the use of PKCS#11 tokens with GnuPG. + ''; + homepage = http://gnupg-pkcs11.sourceforge.net/; + license = licenses.bsd3; + maintainers = with maintainers; [ philandstuff ]; + platforms = platforms.unix; + }; +} + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f6a3bd68294..7ca55ed818b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3506,6 +3506,8 @@ in }; gnupg = gnupg22; + gnupg-pkcs11-scd = callPackage ../tools/security/gnupg-pkcs11-scd { }; + gnuplot = libsForQt5.callPackage ../tools/graphics/gnuplot { }; gnuplot_qt = gnuplot.override { withQt = true; }; -- cgit 1.4.1 From 1ced63da766965bdda53675a12627401c42a50cc Mon Sep 17 00:00:00 2001 From: Nathan Yong Date: Fri, 18 Oct 2019 09:26:28 +1100 Subject: p4v: explicitly depend on openssl 1.0 series The 2017.3 version of p4v is linked against `libssl.so.1.0.0`. Since the default openssl in NixOS 2019.09 has been changed to openssl 1.1, the p4v package must now import the openssl_1_0_2 derivation. --- pkgs/applications/version-management/p4v/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/version-management/p4v/default.nix b/pkgs/applications/version-management/p4v/default.nix index 0020c8c2189..317cbfde85b 100644 --- a/pkgs/applications/version-management/p4v/default.nix +++ b/pkgs/applications/version-management/p4v/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, lib, qtbase, qtmultimedia, qtscript, qtsensors, qtwebkit, openssl, xkeyboard_config, wrapQtAppsHook }: +{ stdenv, fetchurl, lib, qtbase, qtmultimedia, qtscript, qtsensors, qtwebkit, openssl_1_0_2, xkeyboard_config, wrapQtAppsHook }: stdenv.mkDerivation rec { pname = "p4v"; @@ -19,7 +19,7 @@ stdenv.mkDerivation rec { qtscript qtsensors qtwebkit - openssl + openssl_1_0_2 ]; dontWrapQtApps = true; @@ -43,6 +43,6 @@ stdenv.mkDerivation rec { homepage = https://www.perforce.com; license = stdenv.lib.licenses.unfreeRedistributable; platforms = [ "x86_64-linux" ]; - maintainers = [ stdenv.lib.maintainers.nioncode ]; + maintainers = with stdenv.lib.maintainers; [ nathyong nioncode ]; }; } -- cgit 1.4.1 From 4e3aa7b7b85d95e12deaa2a04425a5c1b97baf63 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 22 Oct 2019 16:30:14 +0200 Subject: mpd: restart always Signed-off-by: Matthias Beyer --- nixos/modules/services/audio/mpd.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/modules/services/audio/mpd.nix b/nixos/modules/services/audio/mpd.nix index 0df8f9688d2..56dc858b640 100644 --- a/nixos/modules/services/audio/mpd.nix +++ b/nixos/modules/services/audio/mpd.nix @@ -181,6 +181,7 @@ in { ProtectKernelModules = true; RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX AF_NETLINK"; RestrictNamespaces = true; + Restart = "always"; }; }; -- cgit 1.4.1 From b4ce8c3642c271db8e8ef290becd2478ab87f904 Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Wed, 23 Oct 2019 11:33:13 +0000 Subject: SDL_Pango: init at 0.1.2 --- pkgs/development/libraries/SDL_Pango/default.nix | 32 +++++ pkgs/development/libraries/SDL_Pango/fixes.patch | 148 +++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 3 files changed, 182 insertions(+) create mode 100644 pkgs/development/libraries/SDL_Pango/default.nix create mode 100644 pkgs/development/libraries/SDL_Pango/fixes.patch diff --git a/pkgs/development/libraries/SDL_Pango/default.nix b/pkgs/development/libraries/SDL_Pango/default.nix new file mode 100644 index 00000000000..e330ccef611 --- /dev/null +++ b/pkgs/development/libraries/SDL_Pango/default.nix @@ -0,0 +1,32 @@ +{ stdenv, fetchpatch, fetchurl, SDL, autoreconfHook, pango, pkgconfig }: + +stdenv.mkDerivation rec { + pname = "SDL_Pango"; + version = "0.1.2"; + + src = fetchurl { + url = "mirror://sourceforge/sdlpango/${pname}-${version}.tar.gz"; + sha256 = "197baw1dsg0p4pljs5k0fshbyki00r4l49m1drlpqw6ggawx6xbz"; + }; + + patches = [ + (fetchpatch { + url = https://sources.debian.org/data/main/s/sdlpango/0.1.2-6/debian/patches/api_additions.patch; + sha256 = "00p5ry5gd3ixm257p9i2c4jg0qj8ipk8nf56l7c9fma8id3zxyld"; + }) + ./fixes.patch + ]; + + preConfigure = "autoreconf -i -f"; + + nativeBuildInputs = [ pkgconfig autoreconfHook ]; + buildInputs = [ SDL pango ]; + + meta = with stdenv.lib; { + description = "Connects the Pango rendering engine to SDL"; + license = licenses.lgpl21Plus; + platforms = platforms.all; + homepage = http://sdlpango.sourceforge.net/; + maintainers = with maintainers; [ puckipedia ]; + }; +} diff --git a/pkgs/development/libraries/SDL_Pango/fixes.patch b/pkgs/development/libraries/SDL_Pango/fixes.patch new file mode 100644 index 00000000000..9703c0d4918 --- /dev/null +++ b/pkgs/development/libraries/SDL_Pango/fixes.patch @@ -0,0 +1,148 @@ +diff --git a/SDL_Pango.pc.in b/SDL_Pango.pc.in +index 750d091..3af38ff 100644 +--- a/SDL_Pango.pc.in ++++ b/SDL_Pango.pc.in +@@ -6,6 +6,6 @@ includedir=@includedir@ + Name: SDL_Pango + Description: SDL library for internationalized text rendering + Version: @VERSION@ +-Requires: pango ++Requires: pango pangoft2 + Libs: -L${libdir} -lSDL_Pango + Cflags: -I${includedir} +\ No newline at end of file +diff --git a/src/SDL_Pango.c b/src/SDL_Pango.c +index b969bc1..cc2c3f5 100644 +--- a/src/SDL_Pango.c ++++ b/src/SDL_Pango.c +@@ -231,6 +231,41 @@ + + #include "SDL_Pango.h" + ++const SDLPango_Matrix _MATRIX_WHITE_BACK ++ = {255, 0, 0, 0, ++ 255, 0, 0, 0, ++ 255, 0, 0, 0, ++ 255, 255, 0, 0,}; ++const SDLPango_Matrix *MATRIX_WHITE_BACK = &_MATRIX_WHITE_BACK; ++ ++const SDLPango_Matrix _MATRIX_BLACK_BACK ++ = {0, 255, 0, 0, ++ 0, 255, 0, 0, ++ 0, 255, 0, 0, ++ 255, 255, 0, 0,}; ++const SDLPango_Matrix *MATRIX_BLACK_BACK = &_MATRIX_BLACK_BACK; ++ ++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_BLACK_LETTER ++ = {0, 0, 0, 0, ++ 0, 0, 0, 0, ++ 0, 0, 0, 0, ++ 0, 255, 0, 0,}; ++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER = &_MATRIX_TRANSPARENT_BACK_BLACK_LETTER; ++ ++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_WHITE_LETTER ++ = {255, 255, 0, 0, ++ 255, 255, 0, 0, ++ 255, 255, 0, 0, ++ 0, 255, 0, 0,}; ++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER = &_MATRIX_TRANSPARENT_BACK_WHITE_LETTER; ++ ++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER ++ = {255, 255, 0, 0, ++ 255, 255, 0, 0, ++ 255, 255, 0, 0, ++ 0, 0, 0, 0,}; ++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER = &_MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER; ++ + //! non-zero if initialized + static int IS_INITIALIZED = 0; + +diff --git a/src/SDL_Pango.h b/src/SDL_Pango.h +index 6ebdf78..b7e5e58 100644 +--- a/src/SDL_Pango.h ++++ b/src/SDL_Pango.h +@@ -47,57 +47,32 @@ typedef struct _SDLPango_Matrix { + Uint8 m[4][4]; /*! Matrix variables */ + } SDLPango_Matrix; + +-const SDLPango_Matrix _MATRIX_WHITE_BACK +- = {255, 0, 0, 0, +- 255, 0, 0, 0, +- 255, 0, 0, 0, +- 255, 255, 0, 0,}; + + /*! + Specifies white back and black letter. + */ +-const SDLPango_Matrix *MATRIX_WHITE_BACK = &_MATRIX_WHITE_BACK; ++extern const SDLPango_Matrix *MATRIX_WHITE_BACK; + +-const SDLPango_Matrix _MATRIX_BLACK_BACK +- = {0, 255, 0, 0, +- 0, 255, 0, 0, +- 0, 255, 0, 0, +- 255, 255, 0, 0,}; + /*! + Specifies black back and white letter. + */ +-const SDLPango_Matrix *MATRIX_BLACK_BACK = &_MATRIX_BLACK_BACK; ++extern const SDLPango_Matrix *MATRIX_BLACK_BACK; + +-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_BLACK_LETTER +- = {0, 0, 0, 0, +- 0, 0, 0, 0, +- 0, 0, 0, 0, +- 0, 255, 0, 0,}; + /*! + Specifies transparent back and black letter. + */ +-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER = &_MATRIX_TRANSPARENT_BACK_BLACK_LETTER; ++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER; + +-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_WHITE_LETTER +- = {255, 255, 0, 0, +- 255, 255, 0, 0, +- 255, 255, 0, 0, +- 0, 255, 0, 0,}; + /*! + Specifies transparent back and white letter. + */ +-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER = &_MATRIX_TRANSPARENT_BACK_WHITE_LETTER; ++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER; + +-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER +- = {255, 255, 0, 0, +- 255, 255, 0, 0, +- 255, 255, 0, 0, +- 0, 0, 0, 0,}; + /*! + Specifies transparent back and transparent letter. + This is useful for KARAOKE like rendering. + */ +-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER = &_MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER; ++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER; + + /*! + Specifies direction of text. See Pango reference for detail +@@ -186,7 +161,8 @@ extern DECLSPEC void SDLCALL SDLPango_SetBaseDirection( + SDLPango_Direction direction); + + +-#ifdef __FT2_BUILD_UNIX_H__ ++ ++#ifdef __PANGO_H__ + + extern DECLSPEC void SDLCALL SDLPango_CopyFTBitmapToSurface( + const FT_Bitmap *bitmap, +@@ -194,11 +170,8 @@ extern DECLSPEC void SDLCALL SDLPango_CopyFTBitmapToSurface( + const SDLPango_Matrix *matrix, + SDL_Rect *rect); + +-#endif /* __FT2_BUILD_UNIX_H__ */ + + +-#ifdef __PANGO_H__ +- + extern DECLSPEC PangoFontMap* SDLCALL SDLPango_GetPangoFontMap( + SDLPango_Context *context); + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b12fe4966ad..9f33a4d82f5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -13645,6 +13645,8 @@ in SDL_net = callPackage ../development/libraries/SDL_net { }; + SDL_Pango = callPackage ../development/libraries/SDL_Pango {}; + SDL_sound = callPackage ../development/libraries/SDL_sound { }; SDL_stretch= callPackage ../development/libraries/SDL_stretch { }; -- cgit 1.4.1 From 1038cd5ad8fcd80cf3293e80a2a7ab88838055cd Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Wed, 23 Oct 2019 11:46:47 +0000 Subject: SDL: Add library paths of all SDL sub-packages to sdl-config Because of how nixpkgs works, all the SDL-umbrella libraries are in different folders. On a usual system, when using `sdl-config --libs`, this means that SDL_gfx would also be on the linker path. Some packages seem to depend on this being the case. --- pkgs/development/libraries/SDL/find-headers.patch | 20 +++++++++++++++----- pkgs/development/libraries/SDL/setup-hook.sh | 1 + 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/SDL/find-headers.patch b/pkgs/development/libraries/SDL/find-headers.patch index 5f75ae9e830..fd498117fd6 100644 --- a/pkgs/development/libraries/SDL/find-headers.patch +++ b/pkgs/development/libraries/SDL/find-headers.patch @@ -1,7 +1,8 @@ -diff -ru3 SDL-1.2.15/sdl-config.in SDL-1.2.15-new/sdl-config.in ---- SDL-1.2.15/sdl-config.in 2012-01-19 10:30:06.000000000 +0400 -+++ SDL-1.2.15-new/sdl-config.in 2016-08-22 05:32:52.716397920 +0300 -@@ -42,7 +42,11 @@ +diff --git a/sdl-config.in b/sdl-config.in +index e0fcc0c..bf7928a 100644 +--- a/sdl-config.in ++++ b/sdl-config.in +@@ -42,14 +42,18 @@ while test $# -gt 0; do echo @SDL_VERSION@ ;; --cflags) @@ -13,4 +14,13 @@ diff -ru3 SDL-1.2.15/sdl-config.in SDL-1.2.15-new/sdl-config.in + echo $SDL_CFLAGS @SDL_CFLAGS@ ;; @ENABLE_SHARED_TRUE@ --libs) - @ENABLE_SHARED_TRUE@ echo -L@libdir@ @SDL_RLD_FLAGS@ @SDL_LIBS@ +-@ENABLE_SHARED_TRUE@ echo -L@libdir@ @SDL_RLD_FLAGS@ @SDL_LIBS@ ++@ENABLE_SHARED_TRUE@ echo -L@libdir@ @SDL_RLD_FLAGS@ @SDL_LIBS@ $SDL_LIB_PATH + @ENABLE_SHARED_TRUE@ ;; + @ENABLE_STATIC_TRUE@@ENABLE_SHARED_TRUE@ --static-libs) + @ENABLE_STATIC_TRUE@@ENABLE_SHARED_FALSE@ --libs|--static-libs) +-@ENABLE_STATIC_TRUE@ echo -L@libdir@ @SDL_RLD_FLAGS@ @SDL_STATIC_LIBS@ ++@ENABLE_STATIC_TRUE@ echo -L@libdir@ @SDL_RLD_FLAGS@ @SDL_STATIC_LIBS@ $SDL_LIB_PATH + @ENABLE_STATIC_TRUE@ ;; + *) + echo "${usage}" 1>&2 diff --git a/pkgs/development/libraries/SDL/setup-hook.sh b/pkgs/development/libraries/SDL/setup-hook.sh index 20382f18f52..e8f96fdd1ac 100644 --- a/pkgs/development/libraries/SDL/setup-hook.sh +++ b/pkgs/development/libraries/SDL/setup-hook.sh @@ -1,6 +1,7 @@ addSDLPath () { if [ -e "$1/include/SDL" ]; then export SDL_PATH="$SDL_PATH $1/include/SDL" + export SDL_LIB_PATH="$SDL_LIB_PATH -L$1/lib" fi } -- cgit 1.4.1 From 4b918e3e8afe801fff569854d459bce93094f375 Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Wed, 23 Oct 2019 12:08:27 +0000 Subject: perlPackages.TextPatch: init at 1.8 --- pkgs/top-level/perl-packages.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index bc7deb91327..2b9c6c980b9 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -18614,6 +18614,20 @@ let }; }; + TextPatch = buildPerlPackage { + pname = "Text-Patch"; + version = "1.8"; + src = fetchurl { + url = "mirror://cpan/authors/id/C/CA/CADE/Text-Patch-1.8.tar.gz"; + sha256 = "eaf18e61ba6a3e143846a7cc66f08ce58a0c4fbda92acb31aede25cb3b5c3dcc"; + }; + propagatedBuildInputs = [ TextDiff ]; + meta = { + description = "Patches text with given patch"; + license = stdenv.lib.licenses.gpl2; + }; + }; + TextPDF = buildPerlPackage { pname = "Text-PDF"; version = "0.31"; -- cgit 1.4.1 From a261de272513f625ac00b8c858116a0848c9b9bc Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Wed, 23 Oct 2019 12:08:52 +0000 Subject: perlPackages.TieSimple: init at 1.04 --- pkgs/top-level/perl-packages.nix | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index 2b9c6c980b9..b7159d5d430 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -19083,6 +19083,19 @@ let }; }; + TieSimple = buildPerlPackage { + pname = "Tie-Simple"; + version = "1.04"; + src = fetchurl { + url = "mirror://cpan/authors/id/H/HA/HANENKAMP/Tie-Simple-1.04.tar.gz"; + sha256 = "29e9e2133951046c78f205f1b3e8df62c90e114f0e08fa06b817766a0f808b12"; + }; + meta = { + description = "Variable ties made much easier: much, much, much easier.."; + license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ]; + }; + }; + TieSub = buildPerlPackage { pname = "Tie-Sub"; version = "1.001"; -- cgit 1.4.1 From f04dd341b74e91da7c33d5bfe1748f8023755add Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Wed, 23 Oct 2019 12:09:13 +0000 Subject: perlPackages.AlienSDL: init at 1.446 --- pkgs/development/perl-modules/alien-sdl.patch | 30 +++++++++++++++++++++++++++ pkgs/top-level/perl-packages.nix | 21 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 pkgs/development/perl-modules/alien-sdl.patch diff --git a/pkgs/development/perl-modules/alien-sdl.patch b/pkgs/development/perl-modules/alien-sdl.patch new file mode 100644 index 00000000000..b00f7dcce81 --- /dev/null +++ b/pkgs/development/perl-modules/alien-sdl.patch @@ -0,0 +1,30 @@ +diff --git a/inc/My/Builder/Unix.pm b/inc/My/Builder/Unix.pm +index 15291d5..5c5ab24 100644 +--- a/inc/My/Builder/Unix.pm ++++ b/inc/My/Builder/Unix.pm +@@ -48,7 +48,7 @@ sub get_additional_libs { + + sub can_build_binaries_from_sources { + my $self = shift; +- return 1; # yes we can ++ return 0; # no we can't + } + + sub build_binaries { +diff --git a/t/004_get_header_version.t b/t/004_get_header_version.t +index d4146ff..27f53ea 100644 +--- a/t/004_get_header_version.t ++++ b/t/004_get_header_version.t +@@ -1,8 +1,11 @@ + # t/004_config.t + +-use Test::More tests => 1; ++use Test::More; + use Alien::SDL; + ++Test::More::plan( skip_all => 'NixOS doesn\'t have SDL headers in this location' ); ++ ++ + like( Alien::SDL->get_header_version('SDL_version.h'), qr/([0-9]+\.)*[0-9]+/, "Testing SDL_version.h" ); + #like( Alien::SDL->get_header_version('SDL_net.h'), qr/([0-9]+\.)*[0-9]+/, "Testing SDL_net.h" ); + #like( Alien::SDL->get_header_version('SDL_image.h'), qr/([0-9]+\.)*[0-9]+/, "Testing SDL_image.h" ); diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index b7159d5d430..764225fb5e7 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -210,6 +210,27 @@ let }; }; + AlienSDL = buildPerlModule { + pname = "Alien-SDL"; + version = "1.446"; + src = fetchurl { + url = "mirror://cpan/authors/id/F/FR/FROGGS/Alien-SDL-1.446.tar.gz"; + sha256 = "c9aa2c9dc3c63d89773c7d7203f2a46d1b924d0c72d9f801af147a3dc8bc512a"; + }; + patches = [ ../development/perl-modules/alien-sdl.patch ]; + + installPhase = "./Build install --prefix $out"; + + SDL_INST_DIR = pkgs.SDL.dev; + buildInputs = [ ArchiveExtract ArchiveZip TextPatch pkgs.SDL ]; + propagatedBuildInputs = [ CaptureTiny FileShareDir FileWhich ]; + + meta = { + description = "Get, Build and Use SDL libraries"; + license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ]; + }; + }; + AlienTidyp = buildPerlModule { pname = "Alien-Tidyp"; version = "1.4.7"; -- cgit 1.4.1 From 0b3a34f4bb9ea46f88c880646b67b2a384163efb Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Wed, 23 Oct 2019 12:13:00 +0000 Subject: perlPackages.SDL: init at 2.548 --- pkgs/top-level/perl-packages.nix | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index 764225fb5e7..cc44d41f0f2 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -15355,6 +15355,24 @@ let }; }; + SDL = buildPerlModule { + pname = "SDL"; + version = "2.548"; + src = fetchurl { + url = "mirror://cpan/authors/id/F/FR/FROGGS/SDL-2.548.tar.gz"; + sha256 = "252a192bfa9c2070a4883707d139c3a45d9c4518ccd66a1e699b5b7959bd4fb5"; + }; + perlPreHook = "export LD=$CC"; + preCheck = "rm t/core_audiospec.t"; + buildInputs = [ AlienSDL CaptureTiny TestDeep TestDifferences TestException TestMost TestWarn ] + ++ (with pkgs; [ SDL SDL_gfx SDL_mixer SDL_image SDL_ttf SDL_Pango SDL_net ] ); + propagatedBuildInputs = [ FileShareDir TieSimple ]; + meta = { + description = "SDL bindings to Perl"; + license = stdenv.lib.licenses.lgpl21Plus; + }; + }; + SerealDecoder = buildPerlPackage { pname = "Sereal-Decoder"; version = "4.007"; -- cgit 1.4.1 From 9f52dabf79724980bf91e6b8fcbafb6db605c2f2 Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Wed, 23 Oct 2019 12:48:02 +0000 Subject: frozen-bubble: init at 2.212 --- pkgs/games/frozen-bubble/default.nix | 25 +++++++++++++++++++ pkgs/games/frozen-bubble/fix-compilation.patch | 33 ++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 3 files changed, 60 insertions(+) create mode 100644 pkgs/games/frozen-bubble/default.nix create mode 100644 pkgs/games/frozen-bubble/fix-compilation.patch diff --git a/pkgs/games/frozen-bubble/default.nix b/pkgs/games/frozen-bubble/default.nix new file mode 100644 index 00000000000..3b562ee44f2 --- /dev/null +++ b/pkgs/games/frozen-bubble/default.nix @@ -0,0 +1,25 @@ +{ stdenv, fetchurl, perlPackages, pkgconfig, SDL, SDL_mixer, SDL_Pango, glib }: + +perlPackages.buildPerlModule { + pname = "frozen-bubble"; + version = "2.212"; + + src = fetchurl { + url = "mirror://cpan/authors/id/K/KT/KTHAKORE/Games-FrozenBubble-2.212.tar.gz"; + sha256 = "721e04ff69c5233060656bfbf4002aa1aeadd96c95351f0c57bb85b6da35a305"; + }; + patches = [ ./fix-compilation.patch ]; + + nativeBuildInputs = [ pkgconfig ]; + + buildInputs = [ glib SDL SDL_mixer SDL_Pango perlPackages.SDL perlPackages.FileSlurp ]; + propagatedBuildInputs = with perlPackages; [ AlienSDL CompressBzip2 FileShareDir FileWhich IPCSystemSimple LocaleMaketextLexicon ]; + + perlPreHook = "export LD=$CC"; + + meta = { + description = "Puzzle with Bubbles"; + license = stdenv.lib.licenses.gpl2; + maintainers = with stdenv.lib.maintainers; [ puckipedia ]; + }; +} diff --git a/pkgs/games/frozen-bubble/fix-compilation.patch b/pkgs/games/frozen-bubble/fix-compilation.patch new file mode 100644 index 00000000000..e87dd0668dc --- /dev/null +++ b/pkgs/games/frozen-bubble/fix-compilation.patch @@ -0,0 +1,33 @@ +diff --git a/Build.PL b/Build.PL +index b029d1e..8737395 100644 +--- a/Build.PL ++++ b/Build.PL +@@ -16,13 +16,14 @@ use Games::FrozenBubble; + my $prefix = Alien::SDL->config('prefix'); + my $cflags = '-I' + . File::Spec->catfile( $prefix, 'include' ) ++ . ' ' . `pkg-config --cflags SDL_mixer` + ; + $cflags .= ' -fnested-functions' if $^O =~ /darwin/; + ###!!! this looks strange, you perhaps meant "$cflags .= ..." + ###!!! I intended Alien::SDL to add -I$prefix/include automatically, please tell me when it does not work (kmx) + my $devnull = File::Spec->devnull(); + my @cflags = ExtUtils::CBuilder->new->split_like_shell( $cflags ); +-my @linkers = ( ExtUtils::CBuilder->new->split_like_shell( Alien::SDL->config('libs', '-lSDL_mixer', '-lSDL_Pango') ) ); ++my @linkers = ( ExtUtils::CBuilder->new->split_like_shell( Alien::SDL->config('libs', '-lSDL_Pango',`pkg-config --libs SDL_mixer`) ) ); + push @linkers, '-liconv' + if $^O =~ /win/i; ###!!! really only Win needs this? ; BEWARE this matches also 'darwin', 'cygwin'!!!! + +diff --git a/inc/My/Builder.pm b/inc/My/Builder.pm +index 2ebaf91..c420b9a 100644 +--- a/inc/My/Builder.pm ++++ b/inc/My/Builder.pm +@@ -123,7 +123,7 @@ sub ACTION_server { + push @ofiles, $cbuilder->compile( + source => catfile($server_directory, $cfile), + extra_compiler_flags => [ +- qw(-g -Wall -Werror -pipe), # verbatim from Makefile ++ qw(-g -pipe), # verbatim from Makefile + '-I' . $server_directory, # does not seem to be necessary + $cbuilder->split_like_shell(`pkg-config glib-2.0 --cflags`), + $cbuilder->split_like_shell(`pkg-config glib-2.0 --libs`), diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9f33a4d82f5..243402591a4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -22332,6 +22332,8 @@ in frogatto = callPackage ../games/frogatto { }; + frozen-bubble = callPackage ../games/frozen-bubble { }; + fsg = callPackage ../games/fsg { wxGTK = wxGTK28.override { unicode = false; }; }; -- cgit 1.4.1 From ad034104cc97f7d7c4b1f20627f77d9d61f5b182 Mon Sep 17 00:00:00 2001 From: Martin Milata Date: Tue, 16 Jul 2019 01:06:19 +0200 Subject: nixos/moin: init --- nixos/modules/module-list.nix | 1 + nixos/modules/services/web-apps/moinmoin.nix | 303 +++++++++++++++++++++++++++ nixos/tests/all-tests.nix | 1 + nixos/tests/moinmoin.nix | 24 +++ 4 files changed, 329 insertions(+) create mode 100644 nixos/modules/services/web-apps/moinmoin.nix create mode 100644 nixos/tests/moinmoin.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 5214126ff7e..652d7b4472d 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -804,6 +804,7 @@ ./services/web-apps/nexus.nix ./services/web-apps/pgpkeyserver-lite.nix ./services/web-apps/matomo.nix + ./services/web-apps/moinmoin.nix ./services/web-apps/restya-board.nix ./services/web-apps/tt-rss.nix ./services/web-apps/selfoss.nix diff --git a/nixos/modules/services/web-apps/moinmoin.nix b/nixos/modules/services/web-apps/moinmoin.nix new file mode 100644 index 00000000000..0fee64be0bb --- /dev/null +++ b/nixos/modules/services/web-apps/moinmoin.nix @@ -0,0 +1,303 @@ +{ config, lib, pkgs, ... }: +with lib; + +let + cfg = config.services.moinmoin; + python = pkgs.python27; + pkg = python.pkgs.moinmoin; + dataDir = "/var/lib/moin"; + usingGunicorn = cfg.webServer == "nginx-gunicorn" || cfg.webServer == "gunicorn"; + usingNginx = cfg.webServer == "nginx-gunicorn"; + user = "moin"; + group = "moin"; + + uLit = s: ''u"${s}"''; + indentLines = n: str: concatMapStrings (line: "${fixedWidthString n " " " "}${line}\n") (splitString "\n" str); + + moinCliWrapper = wikiIdent: pkgs.writeShellScriptBin "moin-${wikiIdent}" '' + ${pkgs.su}/bin/su -s ${pkgs.runtimeShell} -c "${pkg}/bin/moin --config-dir=/var/lib/moin/${wikiIdent}/config $*" ${user} + ''; + + wikiConfig = wikiIdent: w: '' + # -*- coding: utf-8 -*- + + from MoinMoin.config import multiconfig, url_prefix_static + + class Config(multiconfig.DefaultConfig): + ${optionalString (w.webLocation != "/") '' + url_prefix_static = '${w.webLocation}' + url_prefix_static + ''} + + sitename = u'${w.siteName}' + page_front_page = u'${w.frontPage}' + + data_dir = '${dataDir}/${wikiIdent}/data' + data_underlay_dir = '${dataDir}/${wikiIdent}/underlay' + + language_default = u'${w.languageDefault}' + ${optionalString (w.superUsers != []) '' + superuser = [${concatMapStringsSep ", " uLit w.superUsers}] + ''} + + ${indentLines 4 w.extraConfig} + ''; + wikiConfigFile = name: wiki: pkgs.writeText "${name}.py" (wikiConfig name wiki); + +in +{ + options.services.moinmoin = with types; { + enable = mkEnableOption "MoinMoin Wiki Engine"; + + webServer = mkOption { + type = enum [ "nginx-gunicorn" "gunicorn" "none" ]; + default = "nginx-gunicorn"; + example = "none"; + description = '' + Which web server to use to serve the wiki. + Use none if you want to configure this yourself. + ''; + }; + + gunicorn.workers = mkOption { + type = ints.positive; + default = 3; + example = 10; + description = '' + The number of worker processes for handling requests. + ''; + }; + + wikis = mkOption { + type = attrsOf (submodule ({ name, ... }: { + options = { + siteName = mkOption { + type = str; + default = "Untitled Wiki"; + example = "ExampleWiki"; + description = '' + Short description of your wiki site, displayed below the logo on each page, and + used in RSS documents as the channel title. + ''; + }; + + webHost = mkOption { + type = str; + description = "Host part of the wiki URL. If undefined, the name of the attribute set will be used."; + example = "wiki.example.org"; + }; + + webLocation = mkOption { + type = str; + default = "/"; + example = "/moin"; + description = "Location part of the wiki URL."; + }; + + frontPage = mkOption { + type = str; + default = "LanguageSetup"; + example = "FrontPage"; + description = '' + Front page name. Set this to something like FrontPage once languages are + configured. + ''; + }; + + superUsers = mkOption { + type = listOf str; + default = []; + example = [ "elvis" ]; + description = '' + List of trusted user names with wiki system administration super powers. + + Please note that accounts for these users need to be created using the moin command-line utility, e.g.: + moin-WIKINAME account create --name=NAME --email=EMAIL --password=PASSWORD. + ''; + }; + + languageDefault = mkOption { + type = str; + default = "en"; + example = "de"; + description = "The ISO-639-1 name of the main wiki language. Languages that MoinMoin does not support are ignored."; + }; + + extraConfig = mkOption { + type = lines; + default = ""; + example = '' + show_hosts = True + search_results_per_page = 100 + acl_rights_default = u"Known:read,write,delete,revert All:read" + logo_string = u"

\U0001f639

" + theme_default = u"modernized" + + user_checkbox_defaults = {'show_page_trail': 0, 'edit_on_doubleclick': 0} + navi_bar = [u'SomePage'] + multiconfig.DefaultConfig.navi_bar + actions_excluded = multiconfig.DefaultConfig.actions_excluded + ['newaccount'] + + mail_smarthost = "mail.example.org" + mail_from = u"Example.Org Wiki " + ''; + description = '' + Additional configuration to be appended verbatim to this wiki's config. + + See for documentation. + ''; + }; + + }; + config = { + webHost = mkDefault name; + }; + })); + example = literalExample '' + { + "mywiki" = { + siteName = "Example Wiki"; + webHost = "wiki.example.org"; + superUsers = [ "admin" ]; + frontPage = "Index"; + extraConfig = "page_category_regex = ur'(?P(Category|Kategorie)(?P(?!Template)\S+))'" + }; + } + ''; + description = '' + Configurations of the individual wikis. Attribute names must be valid Python + identifiers of the form [A-Za-z_][A-Za-z0-9_]*. + + For every attribute WIKINAME, a helper script + moin-WIKINAME is created which runs the + moin command under the moin user (to avoid + file ownership issues) and with the right configuration directory passed to it. + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = forEach (attrNames cfg.wikis) (wname: + { assertion = builtins.match "[A-Za-z_][A-Za-z0-9_]*" wname != null; + message = "${wname} is not valid Python identifier"; + } + ); + + users.users = { + moin = { + description = "MoinMoin wiki"; + home = dataDir; + group = group; + isSystemUser = true; + }; + }; + + users.groups = { + moin = { + members = mkIf usingNginx [ config.services.nginx.user ]; + }; + }; + + environment.systemPackages = [ pkg ] ++ map moinCliWrapper (attrNames cfg.wikis); + + systemd.services = mkIf usingGunicorn + (flip mapAttrs' cfg.wikis (wikiIdent: wiki: + nameValuePair "moin-${wikiIdent}" + { + description = "MoinMoin wiki ${wikiIdent} - gunicorn process"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + restartIfChanged = true; + restartTriggers = [ (wikiConfigFile wikiIdent wiki) ]; + + environment = let + penv = python.buildEnv.override { + # setuptools: https://github.com/benoitc/gunicorn/issues/1716 + extraLibs = [ python.pkgs.gevent python.pkgs.setuptools pkg ]; + }; + in { + PYTHONPATH = "${dataDir}/${wikiIdent}/config:${penv}/${python.sitePackages}"; + }; + + preStart = '' + umask 0007 + rm -rf ${dataDir}/${wikiIdent}/underlay + cp -r ${pkg}/share/moin/underlay ${dataDir}/${wikiIdent}/ + chmod -R u+w ${dataDir}/${wikiIdent}/underlay + ''; + + serviceConfig = { + User = user; + Group = group; + WorkingDirectory = "${dataDir}/${wikiIdent}"; + ExecStart = ''${python.pkgs.gunicorn}/bin/gunicorn moin_wsgi \ + --name gunicorn-${wikiIdent} \ + --workers ${toString cfg.gunicorn.workers} \ + --worker-class gevent \ + --bind unix:/run/moin/${wikiIdent}/gunicorn.sock + ''; + + Restart = "on-failure"; + RestartSec = "2s"; + StartLimitIntervalSec = "30s"; + + StateDirectory = "moin/${wikiIdent}"; + StateDirectoryMode = "0750"; + RuntimeDirectory = "moin/${wikiIdent}"; + RuntimeDirectoryMode = "0750"; + + NoNewPrivileges = true; + ProtectSystem = "strict"; + ProtectHome = true; + PrivateTmp = true; + PrivateDevices = true; + PrivateNetwork = true; + ProtectKernelTunables = true; + ProtectKernelModules = true; + ProtectControlGroups = true; + RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ]; + RestrictNamespaces = true; + LockPersonality = true; + MemoryDenyWriteExecute = true; + RestrictRealtime = true; + }; + } + )); + + services.nginx = mkIf usingNginx { + enable = true; + virtualHosts = flip mapAttrs' cfg.wikis (name: w: nameValuePair w.webHost { + forceSSL = mkDefault true; + enableACME = mkDefault true; + locations."${w.webLocation}" = { + extraConfig = '' + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + + proxy_pass http://unix:/run/moin/${name}/gunicorn.sock; + ''; + }; + }); + }; + + systemd.tmpfiles.rules = [ + "d /run/moin 0750 ${user} ${group} - -" + "d ${dataDir} 0550 ${user} ${group} - -" + ] + ++ (concatLists (flip mapAttrsToList cfg.wikis (wikiIdent: wiki: [ + "d ${dataDir}/${wikiIdent} 0750 ${user} ${group} - -" + "d ${dataDir}/${wikiIdent}/config 0550 ${user} ${group} - -" + "L+ ${dataDir}/${wikiIdent}/config/wikiconfig.py - - - - ${wikiConfigFile wikiIdent wiki}" + # needed in order to pass module name to gunicorn + "L+ ${dataDir}/${wikiIdent}/config/moin_wsgi.py - - - - ${pkg}/share/moin/server/moin.wsgi" + # seed data files + "C ${dataDir}/${wikiIdent}/data 0770 ${user} ${group} - ${pkg}/share/moin/data" + # fix nix store permissions + "Z ${dataDir}/${wikiIdent}/data 0770 ${user} ${group} - -" + ]))); + }; + + meta.maintainers = with lib.maintainers; [ b42 ]; +} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index e94c9712cbf..50a60049a18 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -166,6 +166,7 @@ in minio = handleTest ./minio.nix {}; minidlna = handleTest ./minidlna.nix {}; misc = handleTest ./misc.nix {}; + moinmoin = handleTest ./moinmoin.nix {}; mongodb = handleTest ./mongodb.nix {}; moodle = handleTest ./moodle.nix {}; morty = handleTest ./morty.nix {}; diff --git a/nixos/tests/moinmoin.nix b/nixos/tests/moinmoin.nix new file mode 100644 index 00000000000..2662b79aa09 --- /dev/null +++ b/nixos/tests/moinmoin.nix @@ -0,0 +1,24 @@ +import ./make-test.nix ({ pkgs, lib, ... }: { + name = "moinmoin"; + meta.maintainers = [ ]; # waiting for https://github.com/NixOS/nixpkgs/pull/65397 + + machine = + { ... }: + { services.moinmoin.enable = true; + services.moinmoin.wikis.ExampleWiki.superUsers = [ "admin" ]; + services.moinmoin.wikis.ExampleWiki.webHost = "localhost"; + + services.nginx.virtualHosts.localhost.enableACME = false; + services.nginx.virtualHosts.localhost.forceSSL = false; + }; + + testScript = '' + startAll; + + $machine->waitForUnit('moin-ExampleWiki.service'); + $machine->waitForUnit('nginx.service'); + $machine->waitForFile('/run/moin/ExampleWiki/gunicorn.sock'); + $machine->succeed('curl -L http://localhost/') =~ /If you have just installed/ or die; + $machine->succeed('moin-ExampleWiki account create --name=admin --email=admin@example.com --password=foo 2>&1') =~ /status success/ or die; + ''; +}) -- cgit 1.4.1 From b12605563f5692ae146cdc40a2d8eb1c6d338501 Mon Sep 17 00:00:00 2001 From: Graham Bennett Date: Sun, 27 Oct 2019 10:15:48 +0000 Subject: Fix handling of lists in whitelistedLicenses and blacklistedLicenses A package's meta.license can either be a single license or a list. The code to check config.whitelistedLicenses and config.blackListedLicenses wasn't handling this, nor was the showLicense function. --- pkgs/stdenv/generic/check-meta.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index b754230b0be..6bd6a9bf41e 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -36,10 +36,10 @@ let attrs ? meta.license; hasWhitelistedLicense = assert areLicenseListsValid; attrs: - hasLicense attrs && builtins.elem attrs.meta.license whitelist; + hasLicense attrs && lib.lists.any (l: builtins.elem l whitelist) (lib.lists.toList attrs.meta.license); hasBlacklistedLicense = assert areLicenseListsValid; attrs: - hasLicense attrs && builtins.elem attrs.meta.license blacklist; + hasLicense attrs && lib.lists.any (l: builtins.elem l blacklist) (lib.lists.toList attrs.meta.license); allowBroken = config.allowBroken or false || builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1"; @@ -75,7 +75,7 @@ let allowInsecurePredicate attrs || builtins.getEnv "NIXPKGS_ALLOW_INSECURE" == "1"; - showLicense = license: license.shortName or "unknown"; + showLicense = license: toString (map (l: l.shortName or "unknown") (lib.lists.toList license)); pos_str = meta: meta.position or "«unknown-file»"; -- cgit 1.4.1 From 3e8981be239ecc9a3738df6569bcef02099390a4 Mon Sep 17 00:00:00 2001 From: Stig Palmquist Date: Mon, 28 Oct 2019 18:50:03 +0100 Subject: perlPackages.MojoSQLite: 3.002 -> 3.003 --- pkgs/top-level/perl-packages.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix index 06fe3aa2cfe..ce02f36b93c 100644 --- a/pkgs/top-level/perl-packages.nix +++ b/pkgs/top-level/perl-packages.nix @@ -11670,10 +11670,10 @@ let MojoSQLite = buildPerlModule { pname = "Mojo-SQLite"; - version = "3.002"; + version = "3.003"; src = fetchurl { - url = "mirror://cpan/authors/id/D/DB/DBOOK/Mojo-SQLite-3.002.tar.gz"; - sha256 = "16dn0p14i6r4c8aspvkp7rfry3zy7kr2ffcmncj0pqygk62miinp"; + url = "mirror://cpan/authors/id/D/DB/DBOOK/Mojo-SQLite-3.003.tar.gz"; + sha256 = "d96c00dcf45e2becc8e8181df074853d42616f2a660703455d0e0a2741478092"; }; buildInputs = [ ModuleBuildTiny ]; propagatedBuildInputs = [ DBDSQLite Mojolicious SQLAbstract URIdb ]; -- cgit 1.4.1 From 10d7313c013604b045fce4ab86debdb3263ad98f Mon Sep 17 00:00:00 2001 From: Philip Potter Date: Mon, 28 Oct 2019 20:57:49 +0000 Subject: gnupg-pkcs11-scd: add @lschuermann as maintainer --- pkgs/tools/security/gnupg-pkcs11-scd/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/security/gnupg-pkcs11-scd/default.nix b/pkgs/tools/security/gnupg-pkcs11-scd/default.nix index 77537f1bfeb..bc7cff99dc2 100644 --- a/pkgs/tools/security/gnupg-pkcs11-scd/default.nix +++ b/pkgs/tools/security/gnupg-pkcs11-scd/default.nix @@ -26,7 +26,7 @@ stdenv.mkDerivation rec { ''; homepage = http://gnupg-pkcs11.sourceforge.net/; license = licenses.bsd3; - maintainers = with maintainers; [ philandstuff ]; + maintainers = with maintainers; [ lschuermann philandstuff ]; platforms = platforms.unix; }; } -- cgit 1.4.1 From 605a7b31d78711a19f05796ef24cba1f4d22352f Mon Sep 17 00:00:00 2001 From: Robert Scott Date: Mon, 28 Oct 2019 23:51:17 +0000 Subject: pythonPackages.koji: 1.13.0 -> 1.14.3 (security) Addressing CVE-2019-17109 Also added missing description, homepage & license. Re-disabled for py3k as the kojira executable doesn't seem to be happy with it. --- pkgs/development/python-modules/koji/default.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pkgs/development/python-modules/koji/default.nix b/pkgs/development/python-modules/koji/default.nix index 033ab821135..47c42a1df45 100644 --- a/pkgs/development/python-modules/koji/default.nix +++ b/pkgs/development/python-modules/koji/default.nix @@ -1,19 +1,19 @@ -{ stdenv, fetchurl, buildPythonPackage, pycurl, six, rpm, dateutil }: +{ stdenv, fetchurl, buildPythonPackage, isPy3k, pycurl, six, rpm, dateutil }: buildPythonPackage rec { pname = "koji"; - version = "1.13.0"; + version = "1.14.3"; format = "other"; src = fetchurl { url = "https://releases.pagure.org/koji/${pname}-${version}.tar.bz2"; - sha256 = "18b18rcbdqqw33g7h20hf5bpbci2ixdi05yda1fvpv30c1kkzd8w"; + sha256 = "0a3kn3qvspvx15imgzzzjsbvw6bqmbk29apbliqwifa9cj7pvb40"; }; propagatedBuildInputs = [ pycurl six rpm dateutil ]; # Judging from SyntaxError - #disabled = isPy3k; + disabled = isPy3k; makeFlags = "DESTDIR=$(out)"; @@ -24,7 +24,9 @@ buildPythonPackage rec { ''; meta = { - maintainers = [ ]; + description = "An RPM-based build system"; + homepage = https://pagure.io/koji; + license = stdenv.lib.licenses.lgpl21; platforms = stdenv.lib.platforms.unix; }; } -- cgit 1.4.1 From 69b5fda4c5f1c761c037adcdb104afe3c4f4deec Mon Sep 17 00:00:00 2001 From: toonn Date: Thu, 31 Oct 2019 18:42:40 +0100 Subject: wire-desktop: linux 3.10.2904 -> 3.11.2912 --- .../networking/instant-messengers/wire-desktop/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix b/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix index d79a24ea1c2..13ac4ceb138 100644 --- a/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix @@ -18,12 +18,12 @@ let pname = "wire-desktop"; version = { - x86_64-linux = "3.10.2904"; + x86_64-linux = "3.11.2912"; x86_64-darwin = "3.10.3215"; }.${system} or throwSystem; sha256 = { - x86_64-linux = "1vrz4568mlhylx17jw4z452f0vrd8yd8qkbpkcvnsbhs6k066xcn"; + x86_64-linux = "1d2wa13d750dd2vslnvzf0ibwjmf5s299pxq0rs2x98y2sabw3sl"; x86_64-darwin = "0ygm3fgy9k1dp2kjfwsrrwq1i88wgxc6k8y80yz61ivdawgph9wa"; }.${system} or throwSystem; -- cgit 1.4.1 From 32ea6fc1859dba6cfa24245f710516e3ac297038 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 16:29:19 -0400 Subject: pantheon.wingpanel-applications-menu: 2.4.3 -> 2.4.4 https://github.com/elementary/applications-menu/releases/tag/2.4.4 --- .../desktop/wingpanel-indicators/applications-menu/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix index ae138c9215c..a266223eced 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/applications-menu/default.nix @@ -26,7 +26,7 @@ stdenv.mkDerivation rec { pname = "wingpanel-applications-menu"; - version = "2.4.3"; + version = "2.4.4"; repoName = "applications-menu"; @@ -34,7 +34,7 @@ stdenv.mkDerivation rec { owner = "elementary"; repo = repoName; rev = version; - sha256 = "15mwfynaa57jii43x77iaz5gqjlylh5zxc70am8zgp8vhgzflvyd"; + sha256 = "09ssxn264v6nzrxgk529kpdxq5j3b14z8mbwq0gni1bgjcla773d"; }; passthru = { -- cgit 1.4.1 From f0383c3a03c245c8149c02febf09ee603077cfc5 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 17:10:32 -0400 Subject: pantheon.elementary-feedback: init at 1.0 --- .../pantheon/apps/elementary-feedback/default.nix | 70 ++++++++++++++++++++++ pkgs/desktops/pantheon/default.nix | 2 + 2 files changed, 72 insertions(+) create mode 100644 pkgs/desktops/pantheon/apps/elementary-feedback/default.nix diff --git a/pkgs/desktops/pantheon/apps/elementary-feedback/default.nix b/pkgs/desktops/pantheon/apps/elementary-feedback/default.nix new file mode 100644 index 00000000000..70d8f63c13c --- /dev/null +++ b/pkgs/desktops/pantheon/apps/elementary-feedback/default.nix @@ -0,0 +1,70 @@ +{ stdenv +, fetchFromGitHub +, pantheon +, pkgconfig +, meson +, ninja +, vala +, python3 +, gtk3 +, glib +, granite +, libgee +, elementary-icon-theme +, elementary-gtk-theme +, gettext +, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "elementary-feedback"; + version = "1.0"; + + repoName = "feedback"; + + src = fetchFromGitHub { + owner = "elementary"; + repo = repoName; + rev = version; + sha256 = "0rc4ifs4hd4cj0v028bzc45v64pwx21xylwrhb20jpw61ainfi8s"; + }; + + passthru = { + updateScript = pantheon.updateScript { + inherit repoName; + attrPath = pname; + }; + }; + + nativeBuildInputs = [ + gettext + meson + ninja + pkgconfig + python3 + vala + wrapGAppsHook + ]; + + buildInputs = [ + elementary-icon-theme + granite + gtk3 + elementary-gtk-theme + libgee + glib + ]; + + postPatch = '' + chmod +x meson/post_install.py + patchShebangs meson/post_install.py + ''; + + meta = with stdenv.lib; { + description = "GitHub Issue Reporter designed for elementary OS"; + homepage = https://github.com/elementary/feedback; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = pantheon.maintainers; + }; +} diff --git a/pkgs/desktops/pantheon/default.nix b/pkgs/desktops/pantheon/default.nix index 11193fe872d..fa20e64d8ad 100644 --- a/pkgs/desktops/pantheon/default.nix +++ b/pkgs/desktops/pantheon/default.nix @@ -76,6 +76,8 @@ lib.makeScope pkgs.newScope (self: with self; { elementary-files = callPackage ./apps/elementary-files { }; + elementary-feedback = callPackage ./apps/elementary-feedback { }; + elementary-music = callPackage ./apps/elementary-music { }; elementary-photos = callPackage ./apps/elementary-photos { }; -- cgit 1.4.1 From 2975e8482b4834ab4b603135ad29afd164110938 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 17:12:00 -0400 Subject: pantheon.elementary-onboarding: init at 1.0.1 --- pkgs/desktops/pantheon/default.nix | 2 + .../desktop/elementary-onboarding/default.nix | 79 ++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix diff --git a/pkgs/desktops/pantheon/default.nix b/pkgs/desktops/pantheon/default.nix index fa20e64d8ad..bcadebaac8a 100644 --- a/pkgs/desktops/pantheon/default.nix +++ b/pkgs/desktops/pantheon/default.nix @@ -94,6 +94,8 @@ lib.makeScope pkgs.newScope (self: with self; { elementary-greeter = callPackage ./desktop/elementary-greeter { }; + elementary-onboarding = callPackage ./desktop/elementary-onboarding { }; + elementary-print-shim = callPackage ./desktop/elementary-print-shim { }; elementary-session-settings = callPackage ./desktop/elementary-session-settings { diff --git a/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix b/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix new file mode 100644 index 00000000000..3ee55a141b8 --- /dev/null +++ b/pkgs/desktops/pantheon/desktop/elementary-onboarding/default.nix @@ -0,0 +1,79 @@ +{ stdenv +, fetchFromGitHub +, pantheon +, fetchpatch +, pkgconfig +, meson +, ninja +, vala +, python3 +, gtk3 +, glib +, granite +, libgee +, elementary-icon-theme +, elementary-gtk-theme +, gettext +, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "elementary-onboarding"; + version = "1.0.1"; + + repoName = "onboarding"; + + src = fetchFromGitHub { + owner = "elementary"; + repo = repoName; + rev = version; + sha256 = "025i9av4waqwp1gn8d6sjp8qdwg2j3jskxhmyf9qxbzwfc5msysg"; + }; + + passthru = { + updateScript = pantheon.updateScript { + inherit repoName; + attrPath = pname; + }; + }; + + nativeBuildInputs = [ + gettext + meson + ninja + pkgconfig + python3 + vala + wrapGAppsHook + ]; + + buildInputs = [ + elementary-icon-theme + granite + gtk3 + elementary-gtk-theme + libgee + glib + ]; + + patches = [ + # Make sure we use our logo from /etc/os-release + (fetchpatch { + url = "https://github.com/elementary/onboarding/commit/03975bacb75741d3dd391a126217e415f43c6059.patch"; + sha256 = "1yw7dysav90abxnmkv86bc60dyl8nvi0sgaiz8v39cc2x00rqsg1"; + }) + ]; + + postPatch = '' + chmod +x meson/post_install.py + patchShebangs meson/post_install.py + ''; + + meta = with stdenv.lib; { + description = "Onboarding app for new users designed for elementary OS"; + homepage = https://github.com/elementary/onboarding; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = pantheon.maintainers; + }; +} -- cgit 1.4.1 From 96f72ebe9326c3f0ea6cc830e61734428ac68707 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 17:14:08 -0400 Subject: pantheon.switchboard-plug-about: 2.5.2 -> 2.6.0 * depends on elementary-feedback * don't need to override pkgconfig anymore https://github.com/elementary/switchboard-plug-about/commit/b513ee2e1c492d60e17a0709dd77899d796b2e62 * drop remove-update-button.patch The button isn't added if appcenter isn't installed now. https://github.com/elementary/switchboard-plug-about/releases/tag/2.6.0 --- .../apps/switchboard-plugs/about/default.nix | 13 +++-- .../apps/switchboard-plugs/about/fix-paths.patch | 26 ++++++++++ .../apps/switchboard-plugs/about/lspci-path.patch | 13 ----- .../about/remove-update-button.patch | 55 ---------------------- 4 files changed, 32 insertions(+), 75 deletions(-) create mode 100644 pkgs/desktops/pantheon/apps/switchboard-plugs/about/fix-paths.patch delete mode 100644 pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch delete mode 100644 pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix index 3247aed4993..c179160ddab 100644 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix +++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/default.nix @@ -11,17 +11,18 @@ , gtk3 , switchboard , pciutils +, elementary-feedback }: stdenv.mkDerivation rec { pname = "switchboard-plug-about"; - version = "2.5.2"; + version = "2.6.0"; src = fetchFromGitHub { owner = "elementary"; repo = pname; rev = version; - sha256 = "11diwz2aj45yqkxdija8ny0sgm0wl2905gl3799cdl12ss9ffndp"; + sha256 = "12ysymk5y2k49yh3rzmra7jmimxrd54gz2f4ssc9i8w06xj5djp7"; }; passthru = { @@ -46,17 +47,15 @@ stdenv.mkDerivation rec { patches = [ (substituteAll { - src = ./lspci-path.patch; + src = ./fix-paths.patch; inherit pciutils; + elementary_feedback = elementary-feedback; }) - ./remove-update-button.patch ]; - PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard"; - meta = with stdenv.lib; { description = "Switchboard About Plug"; - homepage = https://github.com/elementary/witchboard-plug-about; + homepage = https://github.com/elementary/switchboard-plug-about; license = licenses.gpl3Plus; platforms = platforms.linux; maintainers = pantheon.maintainers; diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/fix-paths.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/fix-paths.patch new file mode 100644 index 00000000000..d458689a325 --- /dev/null +++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/fix-paths.patch @@ -0,0 +1,26 @@ +diff --git a/src/Plug.vala b/src/Plug.vala +index c32efcbe..0cdaeaca 100644 +--- a/src/Plug.vala ++++ b/src/Plug.vala +@@ -178,7 +178,7 @@ public class About.Plug : Switchboard.Plug { + + var bug_button = new Gtk.Button.with_label (_("Report a Problem")); + bug_button.clicked.connect (() => { +- var appinfo = new GLib.DesktopAppInfo ("io.elementary.feedback.desktop"); ++ var appinfo = new GLib.DesktopAppInfo ("@elementary_feedback@/bin/io.elementary.feedback.desktop"); + if (appinfo != null) { + try { + appinfo.launch (null, null); +diff --git a/src/Views/HardwareView.vala b/src/Views/HardwareView.vala +index f8113634..3794bad8 100644 +--- a/src/Views/HardwareView.vala ++++ b/src/Views/HardwareView.vala +@@ -179,7 +179,7 @@ public class About.HardwareView : Gtk.Grid { + + // Graphics + try { +- Process.spawn_command_line_sync ("lspci", out graphics); ++ Process.spawn_command_line_sync ("@pciutils@/bin/lspci", out graphics); + + if ("VGA" in graphics) { //VGA-keyword indicates graphics-line + string[] lines = graphics.split("\n"); diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch deleted file mode 100644 index 352d84c4262..00000000000 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/lspci-path.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/Views/HardwareView.vala b/src/Views/HardwareView.vala -index a3e449c..a95fe93 100644 ---- a/src/Views/HardwareView.vala -+++ b/src/Views/HardwareView.vala -@@ -179,7 +179,7 @@ public class About.HardwareView : Gtk.Grid { - - // Graphics - try { -- Process.spawn_command_line_sync ("lspci", out graphics); -+ Process.spawn_command_line_sync ("@pciutils@/bin/lspci", out graphics); - - if ("VGA" in graphics) { //VGA-keyword indicates graphics-line - string[] lines = graphics.split("\n"); diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch deleted file mode 100644 index 41433f9a76b..00000000000 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/about/remove-update-button.patch +++ /dev/null @@ -1,55 +0,0 @@ -diff --git a/src/Plug.vala b/src/Plug.vala -index 76fca34..3e79c1f 100644 ---- a/src/Plug.vala -+++ b/src/Plug.vala -@@ -65,7 +65,6 @@ public class About.Plug : Switchboard.Plug { - search_results.set ("%s → %s".printf (display_name, _("Restore Default Settings")), ""); - search_results.set ("%s → %s".printf (display_name, _("Suggest Translation")), ""); - search_results.set ("%s → %s".printf (display_name, _("Report Problems")), ""); -- search_results.set ("%s → %s".printf (display_name, _("Updates")), ""); - return search_results; - } - -@@ -161,7 +160,7 @@ public class About.Plug : Switchboard.Plug { - var kernel_version_label = new Gtk.Label (kernel_version); - kernel_version_label.set_selectable (true); - -- var gtk_version_label = new Gtk.Label (_("GTK+ %s").printf (gtk_version)); -+ var gtk_version_label = new Gtk.Label (_("GTK+ %s").printf (gtk_version)); - gtk_version_label.set_selectable (true); - - var website_label = new Gtk.LinkButton.with_label (website_url, _("Website")); -@@ -202,16 +201,6 @@ public class About.Plug : Switchboard.Plug { - issue_dialog.run (); - }); - -- // Update button -- var update_button = new Gtk.Button.with_label (_("Check for Updates")); -- update_button.clicked.connect (() => { -- try { -- Process.spawn_command_line_async ("io.elementary.appcenter --show-updates"); -- } catch (Error e) { -- warning (e.message); -- } -- }); -- - // Restore settings button - var settings_restore_button = new Gtk.Button.with_label (_("Restore Default Settings")); - settings_restore_button.clicked.connect (settings_restore_clicked); -@@ -224,7 +213,6 @@ public class About.Plug : Switchboard.Plug { - button_grid.add (settings_restore_button); - button_grid.add (translate_button); - button_grid.add (bug_button); -- button_grid.add (update_button); - button_grid.set_child_non_homogeneous (help_button, true); - - var software_grid = new Gtk.Grid (); -@@ -238,7 +226,7 @@ public class About.Plug : Switchboard.Plug { - software_grid.attach (based_off, 0, 2, 2, 1); - } - -- software_grid.attach (kernel_version_label, 0, 3, 2, 1); -+ software_grid.attach (kernel_version_label, 0, 3, 2, 1); - software_grid.attach (gtk_version_label, 0, 4, 2, 1); - software_grid.attach (website_label, 0, 5, 2, 1); - -- cgit 1.4.1 From 451c9d835f193f9f5b1604fd352d5e4e19bdf6db Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 17:15:19 -0400 Subject: pantheon.granite: 5.2.3 -> 5.2.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop patch for ⭕️ gsettings dep. --- pkgs/desktops/pantheon/granite/default.nix | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/pkgs/desktops/pantheon/granite/default.nix b/pkgs/desktops/pantheon/granite/default.nix index b93eb2f3f9b..ab673832857 100644 --- a/pkgs/desktops/pantheon/granite/default.nix +++ b/pkgs/desktops/pantheon/granite/default.nix @@ -1,6 +1,5 @@ { stdenv , fetchFromGitHub -, fetchpatch , python3 , meson , ninja @@ -17,30 +16,15 @@ stdenv.mkDerivation rec { pname = "granite"; - version = "5.2.3"; + version = "5.2.5"; src = fetchFromGitHub { owner = "elementary"; repo = pname; rev = version; - sha256 = "10ddq1s2w4jvpzq813cylmqhh8pggzaz890fy3kzg07275i98gah"; + sha256 = "0z40vhcp2w8s8rnc56pzvjc4s77bln8k84rwwypivjmk3lhpw1vi"; }; - patches = [ - # Resolve the circular dependency between granite and the datetime wingpanel indicator - # See: https://github.com/elementary/granite/pull/242 - (fetchpatch { - url = "https://src.fedoraproject.org/rpms/granite/raw/0550b44ed6400c9b1ff7e70871913747df2ff323/f/00-datetime-clock-format-gsettings.patch"; - sha256 = "0i9yvdmn77x5fjdwd1raw6ym8js8yxa7w6ydc7syx7hcyls00dmq"; - }) - - # Fix build latest vala. - (fetchpatch { - url = "https://github.com/elementary/granite/commit/fd26013c84afdeb6300ae2f4a574856753fc2b58.patch"; - sha256 = "01nxqhj8gr61n6wx6ccrqdn25nmbrhhk437k21g4mxqx0gnih265"; - }) - ]; - passthru = { updateScript = pantheon.updateScript { repoName = pname; -- cgit 1.4.1 From 4f5bbdbf5d9f35797f8c909f687b24dee3d208b7 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 17:17:36 -0400 Subject: pantheon.wingpanel-indicator-datetime: drop clock-format ptach --- .../pantheon/desktop/wingpanel-indicators/datetime/default.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix index 74542b5c4c4..97fa6ba71c0 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix @@ -74,11 +74,6 @@ stdenv.mkDerivation rec { ]; patches = [ - # Use "clock-format" GSettings key that's been moved to granite - (fetchpatch { - url = "https://src.fedoraproject.org/rpms/wingpanel-indicator-datetime/raw/c8d515b76aa812c141212d5515621a6febd781a3/f/00-move-clock-format-settings-to-granite.patch"; - sha256 = "1sq3aw9ckkm057rnrclnw9lyrxbpl37fyzfnbixi2q3ypr70n880"; - }) # See: https://github.com/elementary/wingpanel-indicator-datetime/pull/117 (fetchpatch { url = "https://github.com/elementary/wingpanel-indicator-datetime/commit/4859e72a52d8dac5cad87b192fc912fb013b0ecd.patch"; -- cgit 1.4.1 From f329f86c507ffa463b37002b5406d52ab1d13da7 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 17:18:11 -0400 Subject: pantheon.wingpanel-indicator-datetime: don't try to wrap --- .../pantheon/desktop/wingpanel-indicators/datetime/default.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix index 97fa6ba71c0..87510e234aa 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix @@ -59,7 +59,6 @@ stdenv.mkDerivation rec { pkgconfig python3 vala - wrapGAppsHook ]; buildInputs = [ @@ -88,11 +87,6 @@ stdenv.mkDerivation rec { patchShebangs meson/post_install.py ''; - # launches elementary-calendar on selection - preFixup = '' - gappsWrapperArgs+=( --prefix PATH : "${elementary-calendar}/bin" ) - ''; - meta = with stdenv.lib; { description = "Date & Time Indicator for Wingpanel"; homepage = https://github.com/elementary/wingpanel-indicator-datetime; -- cgit 1.4.1 From 6d5d1047006907996a78036e75aae3278d9f2727 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 17:19:52 -0400 Subject: pantheon.switchboard-plug-datetime: 2.1.5 -> 2.1.6 * drop clock-format.patch --- .../apps/switchboard-plugs/datetime/clock-format.patch | 12 ------------ .../pantheon/apps/switchboard-plugs/datetime/default.nix | 6 ++---- 2 files changed, 2 insertions(+), 16 deletions(-) delete mode 100644 pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch deleted file mode 100644 index 0fe0ac8b10c..00000000000 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/clock-format.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/src/DateTime1.vala b/src/DateTime1.vala -index 5a80fbd..2e1f948 100644 ---- a/src/DateTime1.vala -+++ b/src/DateTime1.vala -@@ -38,6 +38,6 @@ public class DateTime.Settings : Granite.Services.Settings { - public string clock_format { get; set; } - - public Settings () { -- base ("io.elementary.desktop.wingpanel.datetime"); -+ base ("io.elementary.granite"); - } - } diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix index c0c7bbdec2e..cafb4014407 100644 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix +++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/datetime/default.nix @@ -16,13 +16,13 @@ stdenv.mkDerivation rec { pname = "switchboard-plug-datetime"; - version = "2.1.5"; + version = "2.1.6"; src = fetchFromGitHub { owner = "elementary"; repo = pname; rev = version; - sha256 = "1iz8skf5dw76a07ljc8v8lw2x2nrmq8j6sggm227cmxy60gadsdv"; + sha256 = "09734c3qc0296zf14rdhl4p6ppga015rz9hhsvlcc3nvyw7kdqkc"; }; passthru = { @@ -51,8 +51,6 @@ stdenv.mkDerivation rec { src = ./timezone.patch; tzdata = "${tzdata}/share/zoneinfo/zone.tab"; }) - # Use "clock-format" GSettings key that's been moved to granite - ./clock-format.patch ]; PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard"; -- cgit 1.4.1 From 9f7e64b21837a68caf69778cfe69bf2f971695ec Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Wed, 18 Sep 2019 17:27:02 -0400 Subject: pantheon.elementary-files: 4.1.9 -> 4.2.0 * libcloudproviders support https://github.com/elementary/files/releases/tag/4.2.0 --- pkgs/desktops/pantheon/apps/elementary-files/default.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/pantheon/apps/elementary-files/default.nix b/pkgs/desktops/pantheon/apps/elementary-files/default.nix index 0bb2824b3d3..1b5de7c168e 100644 --- a/pkgs/desktops/pantheon/apps/elementary-files/default.nix +++ b/pkgs/desktops/pantheon/apps/elementary-files/default.nix @@ -23,13 +23,14 @@ , zeitgeist , glib-networking , elementary-icon-theme +, libcloudproviders , fetchpatch , wrapGAppsHook }: stdenv.mkDerivation rec { pname = "elementary-files"; - version = "4.1.9"; + version = "4.2.0"; repoName = "files"; @@ -39,7 +40,7 @@ stdenv.mkDerivation rec { owner = "elementary"; repo = repoName; rev = version; - sha256 = "12p1li9a7kqdlgkq20svaly5kr661ww93qngaiic6zv1bdw2bpmv"; + sha256 = "12f0hzb62nchksyqd2gwj3cv001rph24ggd9wywh9i1qwppx4b5k"; }; passthru = { @@ -67,6 +68,7 @@ stdenv.mkDerivation rec { granite gtk3 libcanberra + libcloudproviders libdbusmenu-gtk3 libgee libnotify -- cgit 1.4.1 From 99add435c38afdbbd8ff566f797d9c8bfb28fcc9 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Tue, 24 Sep 2019 22:05:58 -0400 Subject: pantheon.elementary-camera: 1.0.4 -> 1.0.5 https://github.com/elementary/camera/releases/tag/1.0.5 --- pkgs/desktops/pantheon/apps/elementary-camera/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/pantheon/apps/elementary-camera/default.nix b/pkgs/desktops/pantheon/apps/elementary-camera/default.nix index 279e9eff87a..aedc445b05f 100644 --- a/pkgs/desktops/pantheon/apps/elementary-camera/default.nix +++ b/pkgs/desktops/pantheon/apps/elementary-camera/default.nix @@ -23,7 +23,7 @@ stdenv.mkDerivation rec { pname = "elementary-camera"; - version = "1.0.4"; + version = "1.0.5"; repoName = "camera"; @@ -31,7 +31,7 @@ stdenv.mkDerivation rec { owner = "elementary"; repo = repoName; rev = version; - sha256 = "1p532f961cjdg7szmxw7hw3av9v342hv5rx7in3bbhlc7adxflyc"; + sha256 = "05amcljvc3w77a1b0c76y6rha8g0zm6lqflvg1g7jzz00jchx9d4"; }; passthru = { -- cgit 1.4.1 From efd72bf01585870857269559a30ae44068ed663a Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Tue, 24 Sep 2019 22:07:10 -0400 Subject: pantheon.switchboard-plug-display: 2.1.8 -> 2.1.9 https://github.com/elementary/switchboard-plug-display/releases/tag/2.1.9 --- pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix index 76cfe61fc77..00524786f4b 100644 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix +++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/display/default.nix @@ -13,13 +13,13 @@ stdenv.mkDerivation rec { pname = "switchboard-plug-display"; - version = "2.1.8"; + version = "2.1.9"; src = fetchFromGitHub { owner = "elementary"; repo = pname; rev = version; - sha256 = "1xpgkvcv3bylpaj7c80727vr55vilkgjvnlbw7d5pr56v6mv7n9j"; + sha256 = "0g9apywxgkan82h933rjjdm9fhd8vak8mziwsbqlprdz310b2jb2"; }; passthru = { @@ -42,8 +42,6 @@ stdenv.mkDerivation rec { switchboard ]; - PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard"; - meta = with stdenv.lib; { description = "Switchboard Displays Plug"; homepage = https://github.com/elementary/switchboard-plug-display; -- cgit 1.4.1 From ea910c7b83390ce147b5ac40a69df156f058fb31 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Sat, 28 Sep 2019 18:34:37 -0400 Subject: pantheon.wingpanel-indicator-*: drop needless deps Like wrapGAppsHook and elementary-icon-theme. These don't provide executables. --- .../pantheon/desktop/wingpanel-indicators/bluetooth/default.nix | 4 ---- .../pantheon/desktop/wingpanel-indicators/datetime/default.nix | 3 --- .../pantheon/desktop/wingpanel-indicators/keyboard/default.nix | 4 ---- .../pantheon/desktop/wingpanel-indicators/network/default.nix | 4 ---- .../pantheon/desktop/wingpanel-indicators/nightlight/default.nix | 4 ---- .../pantheon/desktop/wingpanel-indicators/notifications/default.nix | 4 ---- pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix | 4 ---- .../pantheon/desktop/wingpanel-indicators/session/default.nix | 4 ---- pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix | 4 ---- 9 files changed, 35 deletions(-) diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix index 36d1cf0e77a..3a462219f1e 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/bluetooth/default.nix @@ -12,8 +12,6 @@ , wingpanel , libgee , libxml2 -, elementary-icon-theme -, wrapGAppsHook }: stdenv.mkDerivation rec { @@ -40,11 +38,9 @@ stdenv.mkDerivation rec { pkgconfig python3 vala - wrapGAppsHook ]; buildInputs = [ - elementary-icon-theme granite gtk3 libgee diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix index 87510e234aa..4832c56ede4 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix @@ -16,8 +16,6 @@ , libxml2 , libsoup , elementary-calendar -, elementary-icon-theme -, wrapGAppsHook , fetchurl }: @@ -62,7 +60,6 @@ stdenv.mkDerivation rec { ]; buildInputs = [ - elementary-icon-theme old-evolution-data-server granite gtk3 diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix index 5431b982f54..2f917b19f11 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/keyboard/default.nix @@ -13,8 +13,6 @@ , libgee , xorg , libgnomekbd -, elementary-icon-theme -, wrapGAppsHook }: stdenv.mkDerivation rec { @@ -40,11 +38,9 @@ stdenv.mkDerivation rec { libxml2 pkgconfig vala - wrapGAppsHook ]; buildInputs = [ - elementary-icon-theme granite gtk3 libgee diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix index 6ba19ebf77e..01a815404a6 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/network/default.nix @@ -11,8 +11,6 @@ , networkmanagerapplet , wingpanel , libgee -, elementary-icon-theme -, wrapGAppsHook }: stdenv.mkDerivation rec { @@ -37,11 +35,9 @@ stdenv.mkDerivation rec { ninja pkgconfig vala - wrapGAppsHook ]; buildInputs = [ - elementary-icon-theme granite gtk3 libgee diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix index 0327d5e78e2..3b50866c0ed 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/nightlight/default.nix @@ -10,8 +10,6 @@ , wingpanel , libgee , libxml2 -, elementary-icon-theme -, wrapGAppsHook }: stdenv.mkDerivation rec { @@ -37,11 +35,9 @@ stdenv.mkDerivation rec { ninja pkgconfig vala - wrapGAppsHook ]; buildInputs = [ - elementary-icon-theme granite gtk3 libgee diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix index a4266a6f459..4dbf6528c70 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/notifications/default.nix @@ -10,8 +10,6 @@ , wingpanel , libgee , libwnck3 -, elementary-icon-theme -, wrapGAppsHook }: stdenv.mkDerivation rec { @@ -36,11 +34,9 @@ stdenv.mkDerivation rec { ninja pkgconfig vala - wrapGAppsHook ]; buildInputs = [ - elementary-icon-theme granite gtk3 libgee diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix index 9f9d4703060..b989bada571 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/power/default.nix @@ -13,8 +13,6 @@ , udev , wingpanel , libgee -, elementary-icon-theme -, wrapGAppsHook }: stdenv.mkDerivation rec { @@ -40,12 +38,10 @@ stdenv.mkDerivation rec { pkgconfig python3 vala - wrapGAppsHook ]; buildInputs = [ bamf - elementary-icon-theme granite gtk3 libgee diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix index f48638ff2b1..7efb03f9d66 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/session/default.nix @@ -10,8 +10,6 @@ , wingpanel , accountsservice , libgee -, elementary-icon-theme -, wrapGAppsHook }: stdenv.mkDerivation rec { @@ -36,12 +34,10 @@ stdenv.mkDerivation rec { ninja pkgconfig vala - wrapGAppsHook ]; buildInputs = [ accountsservice - elementary-icon-theme granite gtk3 libgee diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix index 038ab75094c..fa89cca68c0 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/sound/default.nix @@ -14,8 +14,6 @@ , libcanberra-gtk3 , libgee , libxml2 -, wrapGAppsHook -, elementary-icon-theme }: stdenv.mkDerivation rec { @@ -42,11 +40,9 @@ stdenv.mkDerivation rec { pkgconfig python3 vala - wrapGAppsHook ]; buildInputs = [ - elementary-icon-theme granite gtk3 libcanberra-gtk3 -- cgit 1.4.1 From ce5ccf8b442ea3a710d4835835904b0db2bbf0b6 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Tue, 1 Oct 2019 21:50:07 -0400 Subject: pantheon.appcenter: init at 3.2.0 --- pkgs/desktops/pantheon/apps/appcenter/default.nix | 92 +++++++++++++++++++++++ pkgs/desktops/pantheon/default.nix | 2 + 2 files changed, 94 insertions(+) create mode 100644 pkgs/desktops/pantheon/apps/appcenter/default.nix diff --git a/pkgs/desktops/pantheon/apps/appcenter/default.nix b/pkgs/desktops/pantheon/apps/appcenter/default.nix new file mode 100644 index 00000000000..db674f4fb7e --- /dev/null +++ b/pkgs/desktops/pantheon/apps/appcenter/default.nix @@ -0,0 +1,92 @@ +{ stdenv +, appstream +, appstream-glib +, dbus +, desktop-file-utils +, elementary-gtk-theme +, elementary-icon-theme +, fetchFromGitHub +, fetchpatch +, flatpak +, gettext +, glib +, granite +, gtk3 +, json-glib +, libgee +, libsoup +, libxml2 +, meson +, ninja +, packagekit +, pantheon +, pkgconfig +, python3 +, vala +, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "appcenter"; + version = "3.2.0"; + + src = fetchFromGitHub { + owner = "elementary"; + repo = pname; + rev = version; + sha256 = "0xsxm0qgmnljd4s8m6xajzsjp9skpsa8wwlwqmc5yx34diad7zag"; + }; + + passthru = { + updateScript = pantheon.updateScript { + repoName = pname; + }; + }; + + nativeBuildInputs = [ + appstream-glib + dbus # for pkgconfig + desktop-file-utils + gettext + meson + ninja + pkgconfig + python3 + vala + wrapGAppsHook + ]; + + buildInputs = [ + appstream + elementary-icon-theme + elementary-gtk-theme + flatpak + glib + granite + gtk3 + json-glib + libgee + libsoup + libxml2 + packagekit + ]; + + mesonFlags = [ + "-Dhomepage=false" + "-Dpayments=false" + "-Dcurated=false" + ]; + + postPatch = '' + chmod +x meson/post_install.py + patchShebangs meson/post_install.py + ''; + + meta = with stdenv.lib; { + homepage = https://github.com/elementary/appcenter; + description = "An open, pay-what-you-want app store for indie developers, designed for elementary OS"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = pantheon.maintainers; + }; +} diff --git a/pkgs/desktops/pantheon/default.nix b/pkgs/desktops/pantheon/default.nix index bcadebaac8a..a30cba7af70 100644 --- a/pkgs/desktops/pantheon/default.nix +++ b/pkgs/desktops/pantheon/default.nix @@ -66,6 +66,8 @@ lib.makeScope pkgs.newScope (self: with self; { #### APPS + appcenter = callPackage ./apps/appcenter { }; + elementary-calculator = callPackage ./apps/elementary-calculator { }; elementary-calendar = callPackage ./apps/elementary-calendar { }; -- cgit 1.4.1 From 03b61c02db8091f376eefea837bb60572920aab8 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Tue, 1 Oct 2019 22:14:43 -0400 Subject: pantheon.sideload: init at 1.0.0 --- pkgs/desktops/pantheon/apps/sideload/default.nix | 73 ++++++++++++++++++++++++ pkgs/desktops/pantheon/default.nix | 2 + 2 files changed, 75 insertions(+) create mode 100644 pkgs/desktops/pantheon/apps/sideload/default.nix diff --git a/pkgs/desktops/pantheon/apps/sideload/default.nix b/pkgs/desktops/pantheon/apps/sideload/default.nix new file mode 100644 index 00000000000..1fcd486263b --- /dev/null +++ b/pkgs/desktops/pantheon/apps/sideload/default.nix @@ -0,0 +1,73 @@ +{ stdenv +, desktop-file-utils +, elementary-gtk-theme +, elementary-icon-theme +, fetchFromGitHub +, flatpak +, gettext +, glib +, granite +, gtk3 +, libgee +, meson +, ninja +, pantheon +, pkgconfig +, python3 +, vala +, libxml2 +, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "sideload"; + version = "1.0.0"; + + src = fetchFromGitHub { + owner = "elementary"; + repo = pname; + rev = version; + sha256 = "1qi4wm773bf1szi5a77g9lxjn305v1m85j4nb6il9q4qlh9b1cs5"; + }; + + passthru = { + updateScript = pantheon.updateScript { + repoName = pname; + }; + }; + + nativeBuildInputs = [ + desktop-file-utils + gettext + meson + ninja + pkgconfig + python3 + vala + wrapGAppsHook + ]; + + buildInputs = [ + elementary-gtk-theme + elementary-icon-theme + flatpak + glib + granite + gtk3 + libgee + libxml2 + ]; + + postPatch = '' + chmod +x meson/post_install.py + patchShebangs meson/post_install.py + ''; + + meta = with stdenv.lib; { + homepage = https://github.com/elementary/sideload; + description = "Flatpak installer, designed for elementary OS"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = pantheon.maintainers; + }; +} diff --git a/pkgs/desktops/pantheon/default.nix b/pkgs/desktops/pantheon/default.nix index a30cba7af70..154dba5999f 100644 --- a/pkgs/desktops/pantheon/default.nix +++ b/pkgs/desktops/pantheon/default.nix @@ -90,6 +90,8 @@ lib.makeScope pkgs.newScope (self: with self; { elementary-videos = callPackage ./apps/elementary-videos { }; + sideload = callPackage ./apps/sideload { }; + #### DESKTOP elementary-default-settings = callPackage ./desktop/elementary-default-settings { }; -- cgit 1.4.1 From 7a4ea26f2e313674af7730f7a01a7426c626d637 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Fri, 11 Oct 2019 18:52:04 -0400 Subject: vala-lint: init at 2019-10-11 --- pkgs/development/tools/vala-lint/default.nix | 51 ++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 53 insertions(+) create mode 100644 pkgs/development/tools/vala-lint/default.nix diff --git a/pkgs/development/tools/vala-lint/default.nix b/pkgs/development/tools/vala-lint/default.nix new file mode 100644 index 00000000000..92fb6ebcc68 --- /dev/null +++ b/pkgs/development/tools/vala-lint/default.nix @@ -0,0 +1,51 @@ +{ stdenv +, fetchFromGitHub +, glib +, meson +, ninja +, pantheon +, pkgconfig +, vala +, gettext +, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "vala-lint-unstable"; + version = "2019-10-11"; + + src = fetchFromGitHub { + owner = "vala-lang"; + repo = "vala-lint"; + rev = "a077bbec30dea128616a23583ce3f8364ff2ef11"; + sha256 = "0w0rmaj4v42wc4vq2lfjnj6airag5ahv6522xkw3j1nmccxq3s72"; + }; + + nativeBuildInputs = [ + gettext + meson + ninja + pkgconfig + vala + wrapGAppsHook + ]; + + buildInputs = [ + glib + ]; + + # See https://github.com/vala-lang/vala-lint/issues/133 + doCheck = false; + + meta = with stdenv.lib; { + homepage = https://github.com/vala-lang/vala-lint; + description = "Check Vala code files for code-style errors"; + longDescription = '' + Small command line tool and library for checking Vala code files for code-style errors. + Based on the elementary Code-Style guidelines. + ''; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = pantheon.maintainers; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fa7b00f7a19..b2b1bb668a8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8644,6 +8644,8 @@ in vlang = callPackage ../development/compilers/vlang { }; + vala-lint = callPackage ../development/tools/vala-lint { }; + inherit (callPackage ../development/compilers/vala { }) vala_0_36 vala_0_40 -- cgit 1.4.1 From 5bb5c188c4fc811f808f223dc060410d743c3517 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 17:45:07 -0400 Subject: pantheon.updateScript: always use github api Unfortunately elementary has suddenly decided to add ${version}-debian tags into the mix which ls-remote will always sort last. I believe these tags point to the deb-packaging branches in the repo's which we certainly don't ever want to use as they contain no source. --- pkgs/desktops/pantheon/update.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/pkgs/desktops/pantheon/update.sh b/pkgs/desktops/pantheon/update.sh index 9bbbe260034..8d002fe47c2 100755 --- a/pkgs/desktops/pantheon/update.sh +++ b/pkgs/desktops/pantheon/update.sh @@ -114,13 +114,7 @@ EOF function get_latest_tag ( ) { repo_name="$1" - # Using github release api because sorting this repo just doesn't work because of old git sillyness - # Also too lazy to care to adapt `git ls-remote` command to work with it - if [ $repo_name == "switchboard-plug-pantheon-shell" ]; then - curl --silent --show-error --fail -X GET "https://api.github.com/repos/elementary/$repo_name/releases/latest" | jq -r '.tag_name' - else - git ls-remote --tags --sort="v:refname" "https://github.com/elementary/$repo_name" | tail -n1 | sed 's/.*\///; s/\^{}//' - fi + curl --silent --show-error --fail -X GET "https://api.github.com/repos/elementary/$repo_name/releases/latest" | jq -r '.tag_name' } # -- cgit 1.4.1 From 0de6642b5ebf195ed87315d37eb9c91f3a5e33bd Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 17:48:03 -0400 Subject: pantheon.switchboard-plug-bluetooth: 2.2.2 -> 2.3.0 https://github.com/elementary/switchboard-plug-bluetooth/releases/tag/2.3.0 --- pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix index 9f1c75b7b43..ca29ab65afc 100644 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix +++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/bluetooth/default.nix @@ -14,13 +14,13 @@ stdenv.mkDerivation rec { pname = "switchboard-plug-bluetooth"; - version = "2.2.2"; + version = "2.3.0"; src = fetchFromGitHub { owner = "elementary"; repo = pname; rev = version; - sha256 = "0rp9wa0yilc3wgwnybc6cryxphja7imixn45zhj475a4nb3afd0q"; + sha256 = "1m8nzav976xs3sash2nbyrfn2sk7aah352ypihbp7bacid5wnhr7"; }; passthru = { @@ -44,8 +44,6 @@ stdenv.mkDerivation rec { switchboard ]; - PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard"; - meta = with stdenv.lib; { description = "Switchboard Bluetooth Plug"; homepage = https://github.com/elementary/switchboard-plug-bluetooth; -- cgit 1.4.1 From f278d6f0dac729c1b43cafcb374ce61161b5e863 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 17:48:51 -0400 Subject: pantheon.elementary-greeter: 5.0 -> 5.0.1 https://github.com/elementary/greeter/releases/tag/5.0.1 --- pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix | 4 ++-- .../elementary-greeter/hardcode-fallback-background.patch | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix b/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix index 5241aded066..440893935f8 100644 --- a/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix +++ b/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix @@ -28,7 +28,7 @@ stdenv.mkDerivation rec { pname = "elementary-greeter"; - version = "5.0"; + version = "5.0.1"; repoName = "greeter"; @@ -36,7 +36,7 @@ stdenv.mkDerivation rec { owner = "elementary"; repo = repoName; rev = version; - sha256 = "01c8acarxwpakyq69xm4bjwppjf8v3ijmns8masd8raxligb2v8b"; + sha256 = "0qy6iw71p8hv6fpcr7p3hqbzlcpxrz18qdm1inannq68d0pxfx76"; }; passthru = { diff --git a/pkgs/desktops/pantheon/desktop/elementary-greeter/hardcode-fallback-background.patch b/pkgs/desktops/pantheon/desktop/elementary-greeter/hardcode-fallback-background.patch index 556a0fc82a1..7d2afe7b16c 100644 --- a/pkgs/desktops/pantheon/desktop/elementary-greeter/hardcode-fallback-background.patch +++ b/pkgs/desktops/pantheon/desktop/elementary-greeter/hardcode-fallback-background.patch @@ -1,7 +1,7 @@ -diff --git a/src/Cards/BackgroundImage.vala b/src/Cards/BackgroundImage.vala -index b57fb4d..ddfd56c 100644 ---- a/src/Cards/BackgroundImage.vala -+++ b/src/Cards/BackgroundImage.vala +diff --git a/src/Widgets/BackgroundImage.vala b/src/Widgets/BackgroundImage.vala +index ae9431c..f0f2a49 100644 +--- a/src/Widgets/BackgroundImage.vala ++++ b/src/Widgets/BackgroundImage.vala @@ -9,7 +9,7 @@ public class Greeter.BackgroundImage : Gtk.EventBox { public BackgroundImage (string? path) { @@ -16,7 +16,7 @@ index b57fb4d..ddfd56c 100644 try { - full_pixbuf = new Gdk.Pixbuf.from_file ("/usr/share/backgrounds/elementaryos-default"); -+ full_pixbuf = new Gdk.Pixbuf.from_file ("@default_wallpaper"); ++ full_pixbuf = new Gdk.Pixbuf.from_file ("@default_wallpaper@"); } catch (GLib.Error e) { critical (e.message); } -- cgit 1.4.1 From 162e348e810c1e121866c6f6c5f39951157beb89 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 17:49:30 -0400 Subject: pantheon.wingpanel: 2.2.5 -> 2.2.6 https://github.com/elementary/wingpanel/releases/tag/2.2.6 --- pkgs/desktops/pantheon/desktop/wingpanel/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/pantheon/desktop/wingpanel/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel/default.nix index 06f0fc23a39..1fc7304feb2 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel/default.nix @@ -20,13 +20,13 @@ stdenv.mkDerivation rec { pname = "wingpanel"; - version = "2.2.5"; + version = "2.2.6"; src = fetchFromGitHub { owner = "elementary"; repo = pname; rev = version; - sha256 = "15pl3km8jfmlgrrb2fcabdd0rkc849arz6sc3vz6azzpln7gxbq7"; + sha256 = "0q5jhg3gpcjfzfi7g33fv8pb916cqsgk6543b82yy97c20902ap9"; }; passthru = { -- cgit 1.4.1 From e094c1be6e824015580cc0fb622ac74ee03466be Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 17:50:50 -0400 Subject: pantheon.wingpanel-indicator-datetime: 2.1.3 -> 2.2.0 https://github.com/elementary/wingpanel-indicator-datetime/releases/tag/2.2.0 --- .../desktop/wingpanel-indicators/datetime/default.nix | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix index 4832c56ede4..91549342052 100644 --- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix +++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix @@ -35,13 +35,13 @@ in stdenv.mkDerivation rec { pname = "wingpanel-indicator-datetime"; - version = "2.1.3"; + version = "2.2.0"; src = fetchFromGitHub { owner = "elementary"; repo = pname; rev = version; - sha256 = "1y7a4xjwl3bpls56ys6g3s6mh5b3qbjm2vw7b6n2i4x7a63c4cbh"; + sha256 = "1whdx0vgm0qbbzsw8dg2liz3cbh3ad5ybkriy4lmx5ynyhpbz0sx"; }; passthru = { @@ -69,16 +69,6 @@ stdenv.mkDerivation rec { wingpanel ]; - patches = [ - # See: https://github.com/elementary/wingpanel-indicator-datetime/pull/117 - (fetchpatch { - url = "https://github.com/elementary/wingpanel-indicator-datetime/commit/4859e72a52d8dac5cad87b192fc912fb013b0ecd.patch"; - sha256 = "0jfhb5sax4sivdfx7il1rc1dvhy0yfv27qhvwbdy0hza9wf8q9k0"; - }) - ]; - - PKG_CONFIG_WINGPANEL_2_0_INDICATORSDIR = "${placeholder "out"}/lib/wingpanel"; - postPatch = '' chmod +x meson/post_install.py patchShebangs meson/post_install.py -- cgit 1.4.1 From 8901fab9ffa5b4e6d75a739f3ba425be4ccf5131 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 17:51:46 -0400 Subject: pantheon.switchboard-plug-security-privacy: 2.2.1 -> 2.2.2 https://github.com/elementary/switchboard-plug-security-privacy/releases/tag/2.2.2 --- .../apps/switchboard-plugs/security-privacy/default.nix | 6 ++---- .../security-privacy/hardcode-gsettings.patch | 15 ++++++--------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix index fd67440a43c..5c72af92397 100644 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix +++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/default.nix @@ -18,13 +18,13 @@ stdenv.mkDerivation rec { pname = "switchboard-plug-security-privacy"; - version = "2.2.1"; + version = "2.2.2"; src = fetchFromGitHub { owner = "elementary"; repo = pname; rev = version; - sha256 = "0k2bq7l0m7qfpy1mkb3qvsinqd8n4lp0vwz3x64wlgfn2qipm1fn"; + sha256 = "1dwq9rqswgnnglhrgcpvrp6shn3pb4x8f8f23x84sqakb430idp7"; }; passthru = { @@ -51,8 +51,6 @@ stdenv.mkDerivation rec { zeitgeist ]; - PKG_CONFIG_SWITCHBOARD_2_0_PLUGSDIR = "${placeholder "out"}/lib/switchboard"; - patches = [ ./hardcode-gsettings.patch ]; diff --git a/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch index ffaf1ecf5db..24a104248f8 100644 --- a/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch +++ b/pkgs/desktops/pantheon/apps/switchboard-plugs/security-privacy/hardcode-gsettings.patch @@ -1,25 +1,22 @@ diff --git a/src/Views/FirewallPanel.vala b/src/Views/FirewallPanel.vala -index 994c4d1..5702de2 100644 +index 0335c29..481b1c8 100644 --- a/src/Views/FirewallPanel.vala +++ b/src/Views/FirewallPanel.vala -@@ -49,10 +49,13 @@ public class SecurityPrivacy.FirewallPanel : Granite.SimpleSettingsPage { +@@ -49,7 +49,11 @@ public class SecurityPrivacy.FirewallPanel : Granite.SimpleSettingsPage { } construct { - settings = new Settings ("io.elementary.switchboard.security-privacy"); + SettingsSchemaSource sss = new SettingsSchemaSource.from_directory ("@SWITCHBOARD_SEC_PRIV_GSETTINGS_PATH@", SettingsSchemaSource.get_default (), true); + SettingsSchema security_privacy_schema = sss.lookup ("io.elementary.switchboard.security-privacy", false); ++ + settings = new Settings.full (security_privacy_schema, null, null); + disabled_rules = new Gee.HashMap (); load_disabled_rules (); -- -+ - status_switch.notify["active"].connect (() => { - if (loading == false) { - view.sensitive = status_switch.active; + diff --git a/src/Views/LockPanel.vala b/src/Views/LockPanel.vala -index 081cf10..42f6118 100644 +index 4f523f9..7135a83 100644 --- a/src/Views/LockPanel.vala +++ b/src/Views/LockPanel.vala @@ -30,7 +30,10 @@ public class SecurityPrivacy.LockPanel : Granite.SimpleSettingsPage { @@ -32,5 +29,5 @@ index 081cf10..42f6118 100644 + + locker = new Settings.full (locker_schema, null, null); - var lock_suspend_label = new Gtk.Label (_("Lock on sleep:")); + var lock_suspend_label = new Gtk.Label (_("Lock on suspend:")); var lock_suspend_switch = new Gtk.Switch (); -- cgit 1.4.1 From c959de53bc77700b977d1294fdc3cf4518d887ac Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 17:53:31 -0400 Subject: pantheon.gala: 2019-07-21 -> 2019-10-31 https://github.com/elementary/gala/compare/50694796d4c8f0ca92517d5a628b0efdf748279c...0f0724c97ad49f470f41c4a25c63103f51122997 --- pkgs/desktops/pantheon/desktop/gala/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/desktops/pantheon/desktop/gala/default.nix b/pkgs/desktops/pantheon/desktop/gala/default.nix index b80e93279c8..4b75b3bff56 100644 --- a/pkgs/desktops/pantheon/desktop/gala/default.nix +++ b/pkgs/desktops/pantheon/desktop/gala/default.nix @@ -26,13 +26,13 @@ stdenv.mkDerivation rec { pname = "gala"; - version = "unstable-2019-07-21"; # Is tracking https://github.com/elementary/gala/commits/stable/juno + version = "unstable-2019-10-31"; # Is tracking https://github.com/elementary/gala/commits/stable/juno src = fetchFromGitHub { owner = "elementary"; repo = pname; - rev = "50694796d4c8f0ca92517d5a628b0efdf748279c"; - sha256 = "17d0hd2145mrf8y5ws3xypdbwj72qv7hrrp6p6lm4k16xd96yznr"; + rev = "0f0724c97ad49f470f41c4a25c63103f51122997"; + sha256 = "09cl3k2am878iiy76bijb0ykrcafh944kz027jgi1y5yk4bwfjc4"; }; passthru = { -- cgit 1.4.1 From cbe5ea3a829e80c0d9fdfa2d1ab282b6bbe76b7a Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 17:53:48 -0400 Subject: pantheon.elementary-calendar: 2019-09-17 -> 2019-10-29 --- pkgs/desktops/pantheon/apps/elementary-calendar/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix b/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix index 72983c8479c..4e5f69fc9e6 100644 --- a/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix +++ b/pkgs/desktops/pantheon/apps/elementary-calendar/default.nix @@ -25,15 +25,15 @@ stdenv.mkDerivation rec { pname = "elementary-calendar"; - version = "unstable-2019-09-17"; + version = "unstable-2019-10-29"; repoName = "calendar"; src = fetchFromGitHub { owner = "elementary"; repo = repoName; - rev = "46346e48b53e9d3d59d9f567b622532338f50f32"; # needed for libical 2.0 compat - sha256 = "04xzczcj5rbzqlhmf175d8p0wzw01s4658v5jllrp8nchmndb986"; + rev = "7d201fc5ea9e8dc25c46427397594fcab2016ed6"; # needed for libical 2.0 compat + sha256 = "11bqf3nxrj1sfd0qq5h0jsmimc6mwkd2g7q9ycizn9x5ak2gb8xi"; }; passthru = { -- cgit 1.4.1 From 88cf0bf27226570dd6813f74569d3eb801e613e0 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 18:23:13 -0400 Subject: pantheon: proper aliases --- pkgs/desktops/pantheon/default.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/pantheon/default.nix b/pkgs/desktops/pantheon/default.nix index 154dba5999f..9e5391243bd 100644 --- a/pkgs/desktops/pantheon/default.nix +++ b/pkgs/desktops/pantheon/default.nix @@ -1,4 +1,4 @@ -{ pkgs, lib, gnome3 }: +{ config, pkgs, lib, gnome3 }: lib.makeScope pkgs.newScope (self: with self; { @@ -227,8 +227,10 @@ lib.makeScope pkgs.newScope (self: with self; { elementary-wallpapers = callPackage ./artwork/elementary-wallpapers { }; +} // lib.optionalAttrs (config.allowAliases or true) { + ### ALIASES - vala = pkgs.vala; # added 2019-10-10 + inherit (pkgs) vala; # added 2019-10-10 }) -- cgit 1.4.1 From 0bc0bb92c860fd8d903f1dc4ec1a691d5887dccf Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Thu, 31 Oct 2019 21:14:53 -0400 Subject: pantheon.elementary-icon-theme: 5.0.4 -> 5.1.0 https://github.com/elementary/icons/releases/tag/5.1.0 --- pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix b/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix index 7467bd124ac..1fba6a949d6 100644 --- a/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix +++ b/pkgs/desktops/pantheon/artwork/elementary-icon-theme/default.nix @@ -10,7 +10,7 @@ stdenv.mkDerivation rec { pname = "elementary-icon-theme"; - version = "5.0.4"; + version = "5.1.0"; repoName = "icons"; @@ -18,7 +18,7 @@ stdenv.mkDerivation rec { owner = "elementary"; repo = repoName; rev = version; - sha256 = "0ha7biqvmkv68x1gi9bfcn5z0ld067pa5czx0pyf053pa86lg3hx"; + sha256 = "1yrf92ysjh1yfm42wznlw0lh9zsm5whghwzx3b3wcdkwdhkdg24z"; }; passthru = { -- cgit 1.4.1 From bfdbbeb452938691e78f404a7df26521c40179c3 Mon Sep 17 00:00:00 2001 From: Mario Rodas Date: Fri, 1 Nov 2019 04:20:00 -0500 Subject: postgresqlPackages.timescaledb: 1.4.2 -> 1.5.0 Changelog: https://github.com/timescale/timescaledb/releases/tag/1.5.0 --- pkgs/servers/sql/postgresql/ext/timescaledb.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/servers/sql/postgresql/ext/timescaledb.nix b/pkgs/servers/sql/postgresql/ext/timescaledb.nix index ef3dc4894d7..296e7e0a41a 100644 --- a/pkgs/servers/sql/postgresql/ext/timescaledb.nix +++ b/pkgs/servers/sql/postgresql/ext/timescaledb.nix @@ -8,7 +8,7 @@ stdenv.mkDerivation rec { pname = "timescaledb"; - version = "1.4.2"; + version = "1.5.0"; nativeBuildInputs = [ cmake ]; buildInputs = [ postgresql openssl ]; @@ -17,10 +17,10 @@ stdenv.mkDerivation rec { owner = "timescale"; repo = "timescaledb"; rev = "refs/tags/${version}"; - sha256 = "06mchpfjh4kskxq5r8b84870gl37xcqdf14n96qjb4nbyw9l8xcc"; + sha256 = "0qw7yp2vh3fkx43zlnj8xsvd0d68rcmdcl3p9jpmr97hyl376xf2"; }; - cmakeFlags = [ "-DSEND_TELEMETRY_DEFAULT=OFF" ]; + cmakeFlags = [ "-DSEND_TELEMETRY_DEFAULT=OFF" "-DREGRESS_CHECKS=OFF" ]; # Fix the install phase which tries to install into the pgsql extension dir, # and cannot be manually overridden. This is rather fragile but works OK. -- cgit 1.4.1 From daf3aefb14842062af057fe59189b072b4453984 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Fri, 1 Nov 2019 20:19:35 -0700 Subject: groonga: 9.0.8 -> 9.0.9 --- pkgs/servers/search/groonga/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/servers/search/groonga/default.nix b/pkgs/servers/search/groonga/default.nix index 59affd09295..7fb7a774e8d 100644 --- a/pkgs/servers/search/groonga/default.nix +++ b/pkgs/servers/search/groonga/default.nix @@ -7,11 +7,11 @@ stdenv.mkDerivation rec { pname = "groonga"; - version = "9.0.8"; + version = "9.0.9"; src = fetchurl { url = "https://packages.groonga.org/source/groonga/${pname}-${version}.tar.gz"; - sha256 = "1fcagm0hzfl9jvn9afzhaahphvq3mc7d7s1s7hhinpv7bsr3xdl5"; + sha256 = "0axf07cg8j5lahkl41li9f7i3c6318cmlb40865iscmkjl17yxh9"; }; buildInputs = with stdenv.lib; -- cgit 1.4.1 From fed908b3a5085023bae17d18985fabf89fa9985e Mon Sep 17 00:00:00 2001 From: Daniël de Kok Date: Sat, 2 Nov 2019 09:28:49 +0100 Subject: python3Packages.thinc: 7.2.0 -> 7.3.1 Largest changes: - Add Mish activation. - Add experimental support for the RAdam optimizer. - Add experimental support for lookahead to the optimizer. - Add experimental support for LARS to the optimizer. Changelog: https://github.com/explosion/thinc/releases/tag/v7.3.0 --- pkgs/development/python-modules/thinc/default.nix | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/pkgs/development/python-modules/thinc/default.nix b/pkgs/development/python-modules/thinc/default.nix index a841001ca72..c8a6b5efe84 100644 --- a/pkgs/development/python-modules/thinc/default.nix +++ b/pkgs/development/python-modules/thinc/default.nix @@ -28,11 +28,11 @@ buildPythonPackage rec { pname = "thinc"; - version = "7.2.0"; + version = "7.3.1"; src = fetchPypi { inherit pname version; - sha256 = "808caccafab95aa74c21695248b26279792cd7d07d94fd97f181020f318f024a"; + sha256 = "1f9bg7iyhwnk8jfras8d4wzq0ypn5na0bdbwkl7y2mr06yrdd0ff"; }; buildInputs = lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ @@ -65,11 +65,6 @@ buildPythonPackage rec { pytest ]; - prePatch = '' - substituteInPlace setup.py \ - --replace "plac>=0.9.6,<1.0.0" "plac>=0.9.6" - ''; - # Cannot find cython modules. doCheck = false; -- cgit 1.4.1 From e82694c58ac87ea75ac03a490279111277e152ea Mon Sep 17 00:00:00 2001 From: Daniël de Kok Date: Sat, 2 Nov 2019 09:31:16 +0100 Subject: python3Packages.srsly: 0.1.0 -> 0.2.0 Changelog: https://github.com/explosion/srsly/releases/tag/v0.2.0 --- pkgs/development/python-modules/srsly/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/srsly/default.nix b/pkgs/development/python-modules/srsly/default.nix index 17cd3e8c503..2b87c38b085 100644 --- a/pkgs/development/python-modules/srsly/default.nix +++ b/pkgs/development/python-modules/srsly/default.nix @@ -12,11 +12,11 @@ buildPythonPackage rec { pname = "srsly"; - version = "0.1.0"; + version = "0.2.0"; src = fetchPypi { inherit pname version; - sha256 = "1l9yjp1w2vrkrynxrlrc0v47i2iq9059k4ni44nz23573xbdrh2w"; + sha256 = "0gha1xfh64mapvgn0sghnjsvmjdrh5rywhs3j3bhkvwk42kf40ma"; }; propagatedBuildInputs = lib.optional (pythonOlder "3.4") pathlib; -- cgit 1.4.1 From bf552163f2b90fce814fae103ba0cb01fec4c341 Mon Sep 17 00:00:00 2001 From: Daniël de Kok Date: Sat, 2 Nov 2019 09:39:05 +0100 Subject: python3Packages.wasabi: 0.2.2 -> 0.3.0 Changelog: https://github.com/ines/wasabi/releases/tag/v0.3.0 --- pkgs/development/python-modules/wasabi/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/wasabi/default.nix b/pkgs/development/python-modules/wasabi/default.nix index 01a9a4034d5..6cbb2aa48db 100644 --- a/pkgs/development/python-modules/wasabi/default.nix +++ b/pkgs/development/python-modules/wasabi/default.nix @@ -6,11 +6,11 @@ buildPythonPackage rec { pname = "wasabi"; - version = "0.2.2"; + version = "0.3.0"; src = fetchPypi { inherit pname version; - sha256 = "0xxjc9bvvcaz1qq1jyhcxyl2v39jz8d8dz4zhpfbc7dz53kq6b7r"; + sha256 = "0f18x27qrr29rgxyiy1k9b469i37n80h0x9vd9i22pyg8wxx67q5"; }; checkInputs = [ -- cgit 1.4.1 From d91debafde19354c7fdaea3e233ed18b8f758720 Mon Sep 17 00:00:00 2001 From: Daniël de Kok Date: Sat, 2 Nov 2019 09:35:42 +0100 Subject: python3Packages.spacy: 2.2.1 -> 2.2.2 Major changes: - Multiprocessing support in nlp.pipe. - Base language support for Luxembourgish. Changelog: https://github.com/explosion/spaCy/releases/tag/v2.2.2 --- pkgs/development/python-modules/spacy/default.nix | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/pkgs/development/python-modules/spacy/default.nix b/pkgs/development/python-modules/spacy/default.nix index 89e720482e7..23f2a6967da 100644 --- a/pkgs/development/python-modules/spacy/default.nix +++ b/pkgs/development/python-modules/spacy/default.nix @@ -26,19 +26,13 @@ buildPythonPackage rec { pname = "spacy"; - version = "2.2.1"; + version = "2.2.2"; src = fetchPypi { inherit pname version; - sha256 = "1a833dx8i4s106fk42x4dnayaq5p3qxaxnc012xij991i09v2pxn"; + sha256 = "193r7rrqxfj4jqzk4aqgbycficzmc606vkc4ffc46zs3myhlf6sa"; }; - prePatch = '' - substituteInPlace setup.cfg \ - --replace "plac<1.0.0,>=0.9.6" "plac>=0.9.6" \ - --replace "thinc>=7.1.1,<7.2.0" "thinc~=7.0" - ''; - propagatedBuildInputs = [ numpy murmurhash -- cgit 1.4.1 From eb4dd1794df04b5d33641f36205d5beea5e3fd32 Mon Sep 17 00:00:00 2001 From: Kolby Crouch Date: Sat, 2 Nov 2019 06:16:10 -0500 Subject: retroarch: update cores --- pkgs/misc/emulators/retroarch/cores.nix | 660 +++++++++++++++++++++++++++----- pkgs/top-level/all-packages.nix | 38 +- 2 files changed, 600 insertions(+), 98 deletions(-) diff --git a/pkgs/misc/emulators/retroarch/cores.nix b/pkgs/misc/emulators/retroarch/cores.nix index e55cefdd320..ced26333f4c 100644 --- a/pkgs/misc/emulators/retroarch/cores.nix +++ b/pkgs/misc/emulators/retroarch/cores.nix @@ -1,7 +1,7 @@ -{ stdenv, fetchgit, fetchFromGitLab, cmake, pkgconfig, makeWrapper, python27, retroarch +{ stdenv, fetchgit, fetchFromGitHub, fetchFromGitLab, cmake, pkgconfig, makeWrapper, python27, python37, retroarch , alsaLib, fluidsynth, curl, hidapi, libGLU_combined, gettext, glib, gtk2, portaudio, SDL , ffmpeg, pcre, libevdev, libpng, libjpeg, udev, libvorbis -, miniupnpc, sfml, xorg, zlib }: +, miniupnpc, sfml, xorg, zlib, nasm, libpcap, boost }: let @@ -11,7 +11,7 @@ let stdenv.lib.makeOverridable stdenv.mkDerivation rec { name = "libretro-${core}-${version}"; - version = "2017-06-04"; + version = "2019-09-29"; inherit src; buildInputs = [ makeWrapper retroarch zlib ] ++ a.extraBuildInputs or []; @@ -38,7 +38,6 @@ let inherit description; homepage = https://www.libretro.com/; inherit license; - inherit broken; maintainers = with maintainers; [ edwtjo hrdinka MP2E ]; platforms = platforms.unix; }; @@ -59,12 +58,83 @@ in with stdenv.lib.licenses; core = "4do"; src = fetchRetro { repo = core + "-libretro"; - rev = "52d881743dd8614d96b4de8bd153cb725b87d474"; - sha256 = "1n42f70vni2zavppayaq8xmsyx5cn40qi4zk4pgq1w3hh2q8mj72"; + rev = "b6ad4bc8548f2f3792cd929ccf26d9078b73a1c0"; + sha256 = "0j2bd9cnnd5k99l9qr4wd5q9b4ciplia6ywp90xg6422s1im2iw0"; }; description = "Port of 4DO/libfreedo to libretro"; license = "Non-commercial"; }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + atari800 = (mkLibRetroCore rec { + core = "atari800"; + src = fetchRetro { + repo = "libretro-" + core; + rev = "efc0bc71e3cb8a4f957d07fe808cc002ed9c13b9"; + sha256 = "150hmazi4p5p18gpjmkrn1k9j719cd9gy7jn0jiy3jbk2cxxsjn6"; + }; + description = "Port of Atari800 to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + beetle-snes = (mkLibRetroCore rec { + core = "mednafen-snes"; + src = fetchRetro { + repo = "beetle-bsnes-libretro"; + rev = "6aee84d454570bb17dff5975df28febdbcb72938"; + sha256 = "0nk9xlypg3jhpbwd9z5bjbgzlkz842hy9rq14k1nwn0qz6d88kld"; + }; + description = "Port of Mednafen's SNES core to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + beetle-gba = (mkLibRetroCore rec { + core = "mednafen-gba"; + src = fetchRetro { + repo = "beetle-gba-libretro"; + rev = "135afdbb9591655a3e016b75abba07e481f6d406"; + sha256 = "0fc0x24qn4y7pz3mp1mm1ain31aj9pznp1irr0k7hvazyklzy9g3"; + }; + description = "Port of Mednafen's GameBoy Advance core to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + beetle-lynx = (mkLibRetroCore rec { + core = "mednafen-lynx"; + src = fetchRetro { + repo = "beetle-lynx-libretro"; + rev = "928f7cf5b39f0363e55667572ff455e37489998e"; + sha256 = "0f03wzdr6f0fpy889i9a2834jg5lvcriyl98pajp75m7whm9r9cc"; + }; + description = "Port of Mednafen's Lynx core to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + beetle-ngp = (mkLibRetroCore rec { + core = "mednafen-ngp"; + src = fetchRetro { + repo = "beetle-ngp-libretro"; + rev = "6130e4057c3d8f9172f0c49bb9b6c61bd1a572d5"; + sha256 = "10k7spjrhggjgzb370bwv7fgk0nb6xri9ym6cm4qvnrkcwxm7i9p"; + }; + description = "Port of Mednafen's NeoGeo Pocket core to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; buildPhase = "make"; }; @@ -72,26 +142,42 @@ in with stdenv.lib.licenses; core = "mednafen-pce-fast"; src = fetchRetro { repo = "beetle-pce-fast-libretro"; - rev = "2954e645d668ee73d93803dc30da4462fc7a459b"; - sha256 = "0p0k7kqfd6xg1qh6vgzgwp122miprb2bpzljgxd9kvigxihsl6f7"; + rev = "7bbbdf111c1ce52ab4a97e911ebdaa6836ee881a"; + sha256 = "1p0kk5a2yi05yl0hspzv9q0n96yx9riaaacbmnq76li0i3ihkf6l"; }; description = "Port of Mednafen's PC Engine core to libretro"; license = gpl2; }); in der.override { + makefile = "Makefile"; buildPhase = "make"; name = "beetle-pce-fast-${der.version}"; }; + + beetle-pcfx = (mkLibRetroCore rec { + core = "mednafen-pcfx"; + src = fetchRetro { + repo = "beetle-pcfx-libretro"; + rev = "e04f695202a7295e4b6f2122ae947279ac9df007"; + sha256 = "0pdlz05pjqxp19da13dr3wd20hgxw8z5swhflyf7ksjgvz5rxb4r"; + }; + description = "Port of Mednafen's PCFX core to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; beetle-psx = let der = (mkLibRetroCore { core = "mednafen-psx"; src = fetchRetro { repo = "beetle-psx-libretro"; - rev = "76862abefdde9097561e2b795e75b49247deff17"; - sha256 = "1k4b7g50ajzchjrm6d3v68hvri4k3hzvacn2l99i5yq3hxp7vs7x"; + rev = "f55db8655408104a6e20af667657423f08566c85"; + sha256 = "17iz8r2wy8zqh63j78ijwxasdnmg8dh9mmqn1qr4hvf4fj53ckk8"; }; description = "Port of Mednafen's PSX Engine core to libretro"; license = gpl2; }); in der.override { + makefile = "Makefile"; buildPhase = "make"; name = "beetle-psx-${der.version}"; }; @@ -100,27 +186,84 @@ in with stdenv.lib.licenses; core = "mednafen-saturn"; src = fetchRetro { repo = "beetle-saturn-libretro"; - rev = "3f1661b39ef249e105e6e2e655854ad0c87cd497"; - sha256 = "1d1brysynwr6inlwfgv7gwkl3i9mf4lsaxd9wm2szw86g4diyn4c"; + rev = "3313cc6760c14cffa9226e0cfd41debc11df8bdd"; + sha256 = "1z2zfn5cpsr3x6bvr562vqvmp4pjjhv5a6jcp09gfsy2gkyispr2"; }; description = "Port of Mednafen's Saturn core to libretro"; license = gpl2; }); in der.override { + makefile = "Makefile"; buildPhase = "make"; name = "beetle-saturn-${der.version}"; - meta.platforms = [ "x86_64-linux" ]; + meta.platforms = [ "x86_64-linux" "aarch64-linux" ]; + }; + + beetle-supergrafx = (mkLibRetroCore rec { + core = "mednafen-supergrafx"; + src = fetchRetro { + repo = "beetle-supergrafx-libretro"; + rev = "857e41146e3b0a51def3baea49d2eec80f18102b"; + sha256 = "0r3v4qy4rx4mnr7w4s779f6f2bjyp69m42blimacl1l9f6hmcv5h"; + }; + description = "Port of Mednafen's SuperGrafx core to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + beetle-wswan = (mkLibRetroCore rec { + core = "mednafen-wswan"; + src = fetchRetro { + repo = "beetle-wswan-libretro"; + rev = "925cb8c77af1678ceab24f04c2790cb95389def1"; + sha256 = "0kqsqn655z6nnr2s1xdbf37ds99gyhqfd7dx0wmx3sy1fshjg5wm"; + }; + description = "Port of Mednafen's WonderSwan core to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + beetle-vb = (mkLibRetroCore rec { + core = "mednafen-vb"; + src = fetchRetro { + repo = "beetle-vb-libretro"; + rev = "9066cdafa29ac054243a679baded49212661f47b"; + sha256 = "0gsniz5kk4xdiprcfyqjcss2vkrphi48wbr29gqvpf7l8gpnwx8p"; + }; + description = "Port of Mednafen's VirtualBoy core to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + bluemsx = (mkLibRetroCore rec { + core = "bluemsx"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "ddd89ff1fa534816e48521bd930b721f2d39975a"; + sha256 = "0hiqhc1ckj3ydy0q1v8hwjkkyh2564f7wlqypmshjcc47n296xyf"; + }; + description = "Port of BlueMSX to libretro"; + license = gpl2; + }).override { + buildPhase = "make"; }; bsnes-mercury = let bname = "bsnes-mercury"; in (mkLibRetroCore { core = bname + "-accuracy"; src = fetchRetro { repo = bname; - rev = "e89c9a2e0a12d588366ee4f5c76b7d75139d938b"; - sha256 = "0vkn1f38vwazpp3kbvvv8c467ghak6yfx00s48wkxwvhmak74a3s"; + rev = "4a382621da58ae6da850f1bb003ace8b5f67968c"; + sha256 = "0z8psz24nx8497vpk2wya9vs451rzzw915lkw3qiq9bzlzg9r2wv"; }; description = "Fork of bsnes with HLE DSP emulation restored"; license = gpl3; }).override { + makefile = "Makefile"; buildPhase = "make && cd out"; }; @@ -128,55 +271,88 @@ in with stdenv.lib.licenses; core = "desmume"; src = fetchRetro { repo = core; - rev = "ce1f93abb4c3aa55099f56298e5438a03a3c2bbd"; - sha256 = "064gzfbr7yizmvi91ry5y6bzikj633kdqhvzycb9f1g6kspf8yyl"; + rev = "e8cf461f83eebb195f09e70090f57b07d1bcdd9f"; + sha256 = "0rc8s5226wn39jqs5yxi30jc1snc0p106sfym7kgi98hy5na8yab"; }; description = "libretro wrapper for desmume NDS emulator"; license = gpl2; + extraBuildInputs = [ libpcap libGLU_combined xorg.libX11 ]; }).override { + makefile = "desmume/src/frontend/libretro/Makefile.libretro"; + configurePhase = "cd desmume/src/frontend/libretro"; + buildPhase = "make"; + }; + + desmume2015 = (mkLibRetroCore rec { + core = "desmume2015"; + src = fetchRetro { + repo = core; + rev = "c27bb71aa28250f6da1576e069b4b8cc61986beb"; + sha256 = "1m7g1wwpnnprmki3rixknggjmxbp7d4hwxgkqr041shmrm0rhafd"; + }; + description = "libretro wrapper for desmume NDS emulator from 2015"; + license = gpl2; + extraBuildInputs = [ libpcap libGLU_combined xorg.libX11 ]; + }).override { + makefile = "desmume/Makefile.libretro"; configurePhase = "cd desmume"; + buildPhase = "make"; }; dolphin = (mkLibRetroCore { core = "dolphin"; src = fetchRetro { repo = "dolphin"; - rev = "a6ad451fdd4ac8753fd1a8e2234ec34674677754"; - sha256 = "1cshlfmhph8dl3vgvn37imvp2b7xs2cx1r1ifp5js5psvhycrbz3"; + rev = "11a7ed402c7178da1d9d57c6e5e5a05a4dc6a2c8"; + sha256 = "11jrcczkbyns01rvxb5rd22fbkbfn2h81f6pfxbhi13fl4ljim9x"; }; description = "Port of Dolphin to libretro"; license = gpl2Plus; broken = true; extraBuildInputs = [ - cmake curl libGLU_combined pcre pkgconfig sfml miniupnpc - gettext glib gtk2 hidapi + cmake curl libGLU_combined pcre pkgconfig sfml + gettext hidapi libevdev udev - ] ++ (with xorg; [ libSM libX11 libXi libpthreadstubs libxcb xcbutil libXinerama libXxf86vm ]); + ] ++ (with xorg; [ libSM libX11 libXi libpthreadstubs libxcb xcbutil libXext libXrandr libXinerama libXxf86vm ]); }).override { cmakeFlags = [ - "-DLINUX_LOCAL_DEV=true" - "-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2.out}/lib/gtk-2.0/include" - "-DGTK2_GLIBCONFIG_INCLUDE_DIR=${glib.out}/lib/glib-2.0/include" - "-DGTK2_INCLUDE_DIRS=${gtk2.dev}/include/gtk-2.0" + "-DCMAKE_BUILD_TYPE=Release" + "-DLIBRETRO=ON" + "-DLIBRETRO_STATIC=1" + "-DENABLE_QT=OFF" + "-DENABLE_LTO=OFF" + "-DUSE_UPNP=OFF" + "-DUSE_DISCORD_PRESENCE=OFF" ]; dontUseCmakeBuildDir = "yes"; - buildPhase = '' - cd Source/Core/DolphinLibretro - make - ''; + buildPhase = "make"; + }; + + dosbox = (mkLibRetroCore rec { + core = "dosbox"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "e4ed503b14ed59d5d745396ef1cc7d52cf912328"; + sha256 = "13bx0ln9hwn6hy4sv0ivqmjgjbfq8svx15dsa24hwd8lkf0kakl4"; + }; + description = "Port of DOSBox to libretro"; + license = gpl2; + }).override { + buildPhase = "make"; }; fba = (mkLibRetroCore rec { core = "fba"; src = fetchRetro { repo = core + "-libretro"; - rev = "9146c18ac989c619256d1cb8954d49e728e44ea3"; - sha256 = "159dww8mxi95xz4ypw38vsn1g4k6z8sv415qqf0qriydwhw6mh2m"; + rev = "89245384c7d181e286d6f34995253419f946becb"; + sha256 = "1pg351qhbq5x8qmaq6c30v8ynic8jv3gbxy2kq5iknka80g1lkck"; }; description = "Port of Final Burn Alpha to libretro"; license = "Non-commercial"; }).override { + makefile = "svn-current/trunk/makefile.libretro"; buildPhase = '' cd svn-current/trunk \ && make -f makefile.libretro \ @@ -188,19 +364,34 @@ in with stdenv.lib.licenses; core = "fceumm"; src = fetchRetro { repo = "libretro-" + core; - rev = "45f773a1c221121746bbe2680e3aaaf92776a87e"; - sha256 = "0jnwh1338q710x47bzrx319g5xbq9ipv35kyjlbkrzhqjq1blz0b"; + rev = "0e315e0ca0093ebda06a97835cec6ad4af81db7a"; + sha256 = "12bvvxmvafjvrvwxl5gzr583g48s0isx2fgvjgkrx175vk2amaf4"; }; description = "FCEUmm libretro port"; license = gpl2; }; + flycast = (mkLibRetroCore rec { + core = "flycast"; + src = fetchRetro { + repo = core; + rev = "45a15205dfc05cfc4df2488cad7c2b4988c5aa0f"; + sha256 = "18glxd57kddq6p2bwq0qknyq6bv8dxklqks4w2jy2yccvwxdxy2i"; + }; + description = "Flycast libretro port"; + license = gpl2; + extraBuildInputs = [ libGLU_combined ]; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + gambatte = mkLibRetroCore rec { core = "gambatte"; src = fetchRetro { repo = core + "-libretro"; - rev = "db7af6cf6ea39fd5e39eea137ff752649599a4e4"; - sha256 = "0h7hyj630nk1s32wx02y4q9x2lp6wbnh6nkc9ihf4pygcsignmwr"; + rev = "4d9ad7b29946ec0a914b2d6a735b6c2704ed1f23"; + sha256 = "156pvvlch5izbgbw4ddxhiwgzpp52irr3nqaz813i5f02fiq5wya"; }; description = "Gambatte libretro port"; license = gpl2; @@ -210,13 +401,56 @@ in with stdenv.lib.licenses; core = "genesis-plus-gx"; src = fetchRetro { repo = "Genesis-Plus-GX"; - rev = "365a28c7349b691e6aaa3ad59b055261c42bd130"; - sha256 = "0s11ddpnb44q4xjkl7dylldhi9y5zqywqavpk0bbwyj84r1cbz3c"; + rev = "0e4357bd64533d7fd93b5f01620b92595025fab5"; + sha256 = "1nryy00844h3ra97j40g38lj7036ibm2l8002qid7r5r9kggclqx"; }; description = "Enhanced Genesis Plus libretro port"; license = "Non-commercial"; }; + gpsp = (mkLibRetroCore rec { + core = "gpsp"; + src = fetchRetro { + repo = core; + rev = "24af89596e6484ff5a7a08efecfa8288cfbc02f3"; + sha256 = "1jc5i70cab5f23yc9sfv8iyvmwmc4sb33f413il2vlhsfdxklyk7"; + }; + description = "Port of gpSP to libretro"; + license = gpl2; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + handy = (mkLibRetroCore rec { + core = "handy"; + src = fetchRetro { + repo = "libretro-" + core; + rev = "6b19a4fad1b394f6a1351c88f60991d4878ff05b"; + sha256 = "0lhkrwh3rirdidxb8kfcg8wk9gjsc7g6qpkv74h6f09rb4y75w1y"; + }; + description = "Port of Handy to libretro"; + license = "Handy-License"; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + hatari = (mkLibRetroCore rec { + core = "hatari"; + src = fetchRetro { + repo = core; + rev = "ec1b59c4b6c7ca7d0d23d60cfe2cb61911b11173"; + sha256 = "1pm821s2cz93xr7qx7dv0imr44bi4pvdvlnjl486p83vff9yawfg"; + }; + description = "Port of Hatari to libretro"; + license = gpl2; + extraBuildInputs = [ cmake SDL ]; + }).override { + makefile = "Makefile.libretro"; + buildPhase = "make"; + }; + higan-sfc = (mkLibRetroCore { core = "higan-sfc"; src = fetchFromGitLab { @@ -227,6 +461,8 @@ in with stdenv.lib.licenses; }; description = "Accurate SNES / Super Famicom emulator"; license = gpl3; + broken = true; + }).override { makefile = "GNUmakefile"; buildPhase = "cd higan && make compiler=g++ target=libretro binary=library && cd out"; @@ -236,8 +472,8 @@ in with stdenv.lib.licenses; core = "mame"; src = fetchRetro { repo = "mame"; - rev = "9f9e6b6c9bde4d50c72e9a5c80496a1fec6b8aa9"; - sha256 = "0lfj8bjchkcvyb5x0x29cg10fkfklxndk80947k4qfysclijxpkv"; + rev = "f4aac49f3d56fbd653628ac456c23ac9a6b857ae"; + sha256 = "1pjpnwdj73319hgcjhganzrcz2zn4fnjydah989haqh3id5j3zam"; }; description = "Port of MAME to libretro"; license = gpl2Plus; @@ -249,68 +485,205 @@ in with stdenv.lib.licenses; # make -C 3rdparty/genie/build/gmake.linux -f genie.make obj/Release/src/host/lua-5.3.0/src/lgc.o mkdir -p 3rdparty/genie/build/gmake.linux/obj/Release/src/host/lua-5.3.0/src ''; + buildPhase = "make -f Makefile.libretro"; + }; + + mame2000 = (mkLibRetroCore rec { + core = "mame2000"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "0a8a174f5e755cdd476895207003c5d07cfa6af2"; + sha256 = "03k0cfgd4wfl31dv5xb6xjd4h7sh0k0qw6wbspwi0lgswmhz97bb"; + }; + description = "Port of MAME ~2000 to libretro"; + license = gpl2Plus; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + mame2003 = (mkLibRetroCore rec { + core = "mame2003"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "170d5b6490953d40edc39defe69945d005f8ec03"; + sha256 = "0slsf59sn5lijr1mrx5ffc9z81ra1wcw7810mb52djqyvm15r9zl"; + }; + description = "Port of MAME ~2003 to libretro"; + license = gpl2Plus; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + mame2003-plus = (mkLibRetroCore rec { + core = "mame2003-plus"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "d9a56a3af908ae9100b4c9feebff4b918363f241"; + sha256 = "1c16chfs4b2j1x1bmrklh8ssqki850k787qwq7b95dyxksj2bpx1"; + }; + description = "Port of MAME ~2003+ to libretro"; + license = gpl2Plus; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + mame2010 = (mkLibRetroCore rec { + core = "mame2010"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "4ced2c31f1100eefc7f4483b474b8a680a3b3f2b"; + sha256 = "1a8ijj0sixr6xrqfgimna0ipfj2bb2kvj4mb45hb8a18mwn6y0mc"; + }; + description = "Port of MAME ~2010 to libretro"; + license = gpl2Plus; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + mame2015 = (mkLibRetroCore rec { + core = "mame2015"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "e3a28398f54cd6b2c24b7165d215b046b79c10f5"; + sha256 = "1fgwi37zgp2s92bkz03gch3ivgyjgdi3xycrd8z7x87gi20a79x9"; + }; + description = "Port of MAME ~2015 to libretro"; + license = gpl2Plus; + extraBuildInputs = [ python27 alsaLib ]; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + mame2016 = (mkLibRetroCore rec { + core = "mame2016"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "ea4c1ffa75eb3fb0096158b71706b8b84d86d12c"; + sha256 = "1qyvdymmjv5q0k3najgfdxzf1yr6bnysnsl19v753yj29xs4hwzp"; + }; + description = "Port of MAME ~2016 to libretro"; + license = gpl2Plus; + extraBuildInputs = [ python27 alsaLib ]; + }).override { + postPatch = '' + # Prevent the failure during the parallel building of: + # make -C 3rdparty/genie/build/gmake.linux -f genie.make obj/Release/src/host/lua-5.3.0/src/lgc.o + mkdir -p 3rdparty/genie/build/gmake.linux/obj/Release/src/host/lua-5.3.0/src + ''; + buildPhase = "make -f Makefile.libretro"; + }; + + mesen = (mkLibRetroCore rec { + core = "mesen"; + src = fetchFromGitHub { + owner = "SourMesen"; + repo = core; + rev = "942633dd3dbb73cc3abd748f6d5440c78abbea09"; + sha256 = "0a95wd64vnblksacapxwxla9j2iw8a5hbdm111cldrni12q87iq2"; + }; + description = "Port of Mesen to libretro"; + license = gpl3; + }).override { + makefile = "Libretro/Makefile"; + buildPhase = "cd Libretro && make"; }; mgba = mkLibRetroCore rec { core = "mgba"; src = fetchRetro { repo = core; - rev = "fdaaaee661e59f28c94c7cfa4e82e70b71e24a9d"; - sha256 = "1b30sa861r4bhbqkx6vkklh4iy625bpzki2ks4ivvjns1ijczvc7"; + rev = "4865aaabc2a46c635f218f7b51f8fc5cc2c4c8ac"; + sha256 = "1mdzwcsl5bafmgqfh0a1bgfgilisffxsygcby0igsq2bgkal47mm"; }; description = "Port of mGBA to libretro"; license = mpl20; }; mupen64plus = (mkLibRetroCore rec { - core = "mupen64plus"; + core = "mupen64plus-next"; src = fetchRetro { - repo = core + "-libretro"; - rev = "407bcd40b3a42bff6b856a6d6f88a7d5d670bf9e"; - sha256 = "0q5kvjz7rpk7mp75cdywqjgmy10c0h7ky26hh1x90d39y94idcd8"; + repo = "mupen64plus-libretro-nx"; # + "-libretro-nx"; + rev = "f77c16f9f1dd911fd2254becc8a28adcdafe8aa1"; + sha256 = "0j6vrkwch9lwmlhyz7fp1ha0bby54gvbwk91hwbv35f6dvs0aw0d"; }; description = "Libretro port of Mupen64 Plus, GL only"; license = gpl2; - extraBuildInputs = [ libGLU_combined libpng ]; + extraBuildInputs = [ libGLU_combined libpng nasm xorg.libX11 ]; }).override { - buildPhase = "make WITH_DYNAREC=${if stdenv.hostPlatform.system == "x86_64-linux" then "x86_64" else "x86"}"; + makefile = "Makefile"; + buildPhase = "make"; }; nestopia = (mkLibRetroCore rec { core = "nestopia"; src = fetchRetro { repo = core; - rev = "ecfa170a582e5b8ec11225ca645843fa064955ca"; - sha256 = "17ac7dhasch6f4lpill8c5scsvaix0jvbf1cp797qbll4hk84f2q"; + rev = "7f48c211c281880d122981da119a4455a9bebbde"; + sha256 = "05p3a559633dzw222rs1fh48v657mdyirl1qfqzkhqiar9rxf31g"; }; description = "nestopia undead libretro port"; license = gpl2; }).override { + makefile = "libretro/Makefile"; buildPhase = "cd libretro && make"; }; - + + o2em = (mkLibRetroCore rec { + core = "o2em"; + src = fetchRetro { + repo = "libretro-" + core; + rev = "d6731b9b2592654ce4f1b64c1b1da17b32e7c94c"; + sha256 = "0809qw16y7ablxfayf0lbzvq7wqdmjp0afdb0vcgv193vvhhp58q"; + }; + description = "Port of O2EM to libretro"; + license = artistic1; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + parallel-n64 = (mkLibRetroCore rec { core = "parallel-n64"; src = fetchRetro { repo = core; - rev = "3276db27547bf7ca85896427f0b82d4658694d88"; - sha256 = "19396v50azrb52ifjk298zgcbxn8dvfvp6zwrnzsk6mp8ff7qcqw"; + rev = "30f4fd3c2456145763eb76aead7485a1b86ba6bd"; + sha256 = "0kbyzmscmfi6f842clzaff4k6xcb5410fwhv8n6vv42xk6ljfvgh"; }; description = "Parallel Mupen64plus rewrite for libretro."; license = gpl2; extraBuildInputs = [ libGLU_combined libpng ]; }).override { - buildPhase = "make WITH_DYNAREC=${if stdenv.hostPlatform.system == "x86_64-linux" then "x86_64" else "x86"}"; + makefile = "Makefile"; + buildPhase = "make"; }; + pcsx_rearmed = (mkLibRetroCore rec { + core = "pcsx_rearmed"; + src = fetchRetro { + repo = core; + rev = "eb6943ee04b0f30a6f1cebfe399a94bacd1dfb45"; + sha256 = "0xikdirvjal4mdr5y9dl9gcxhdilqzq43f909b0z8vc069vj1wjz"; + }; + description = "Port of PCSX ReARMed to libretro"; + license = gpl2; + }).override { + configurePhase = "rm configure"; + buildPhase = "make -f Makefile.libretro"; + }; + picodrive = (mkLibRetroCore rec { core = "picodrive"; src = fetchRetro { repo = core; - rev = "cbc93b68dca1d72882d07b54bbe1ef25b980558a"; - sha256 = "0fl9r6jj2x9231md5zc4scra79j5hfn1n2z67scff1375xg1k64h"; + rev = "28dcfd6f43434e6828ee647223a0576bfe858c24"; + sha256 = "19a1b6q8fhf7wxzyf690va1ixzlxlzyslv1zxm0ll5pfsqf2y3gx"; }; description = "Fast MegaDrive/MegaCD/32X emulator"; license = "MAME"; @@ -321,18 +694,38 @@ in with stdenv.lib.licenses; configurePhase = "./configure"; }; + play = (mkLibRetroCore rec { + core = "play"; + src = fetchRetro { + repo = "play-"; + rev = "fedc1e1c2918a7490a881cdb4ec951a828c19671"; + sha256 = "0hwxx7h61gd29a2gagwjbvxk2hgwdk1wxg4nx90zrizb8nczwnl6"; + }; + description = "Port of Play! to libretro"; + license = bsd2; + extraBuildInputs = [ cmake boost ]; + }).override { + cmakeFlags = [ "-DBUILD_PLAY=OFF -DBUILD_LIBRETRO_CORE=ON" ]; + buildPhase = "make"; + }; + ppsspp = (mkLibRetroCore rec { core = "ppsspp"; - src = fetchRetro { - repo = "libretro-" + core; - rev = "5f7bcf7bfc15f83d405bcecd7a163a55ad1e7573"; - sha256 = "06k1gzmypz61dslynrw4b5i161rhj43y6wnr2nhbzvwcv5bw8w8r"; + src = fetchgit { + url = "https://github.com/hrydgard/ppsspp"; + rev = "bf1777f7d3702e6a0f71c7ec1fc51976e23c2327"; + sha256 = "17sym0vk72lzbh9a1501mhw98c78x1gq7k1fpy69nvvb119j37wa"; }; description = "ppsspp libretro port"; license = gpl2; - extraBuildInputs = [ libGLU_combined ffmpeg ]; + extraBuildInputs = [ cmake libGLU_combined ffmpeg python37 xorg.libX11 ]; }).override { - buildPhase = "cd libretro && make"; + cmakeFlags = "-DLIBRETRO=ON"; + makefile = "Makefile"; + buildPhase = '' + make \ + && mv lib/ppsspp_libretro${stdenv.hostPlatform.extensions.sharedLibrary} ppsspp_libretro${stdenv.hostPlatform.extensions.sharedLibrary} + ''; }; prboom = (mkLibRetroCore rec { @@ -348,30 +741,31 @@ in with stdenv.lib.licenses; buildPhase = "make"; }; - quicknes = (mkLibRetroCore { - core = "quicknes"; + prosystem = (mkLibRetroCore rec { + core = "prosystem"; src = fetchRetro { - repo = "QuickNES_Core"; - rev = "8613b48cee97f1472145bbafa76e543854b2bbd5"; - sha256 = "18lizdb9zjlfhh8ibvmcscldlf3mw4aj8nds3pah68cd2lw170w1"; + repo = core + "-libretro"; + rev = "cb4aa3ee72f98b0891a7bac5c9dac458cdba4d34"; + sha256 = "0yvzmks9zz1hf7mv6cd2qin1p3yx00dbrcxlm0yysy5q5jiigblg"; }; - description = "QuickNES libretro port"; - license = lgpl21Plus; + description = "Port of ProSystem to libretro"; + license = gpl2; }).override { + makefile = "Makefile"; buildPhase = "make"; }; - reicast = (mkLibRetroCore rec { - core = "reicast"; + quicknes = (mkLibRetroCore rec { + core = "quicknes"; src = fetchRetro { - repo = core + "-emulator"; - rev = "40d4e8af2dd67a3f317c14224873c8ec0e1f9d11"; - sha256 = "0d8wzpv7pcyh437gmvi439vim26wyrjmi5hj97wvyvggywjwrx8m"; + repo = "QuickNES_Core"; + rev = "cd302d998d102c9461a924b81817e48b9ea1518f"; + sha256 = "1sczs1jqcbhpkb5xpcqqdcnxlz7bqmanm4gdnnc12c19snl7999b"; }; - description = "Reicast libretro port"; - license = gpl2; - extraBuildInputs = [ libGLU_combined ]; + description = "QuickNES libretro port"; + license = lgpl21Plus; }).override { + makefile = "Makefile"; buildPhase = "make"; }; @@ -379,13 +773,14 @@ in with stdenv.lib.licenses; core = "scummvm"; src = fetchRetro { repo = core; - rev = "de8d7e58caa23f071ce9d1bc5133f45d16c3ff1c"; - sha256 = "097i2dq3hw14hicsplrs36j1qa3r45vhzny5v4aw6qw4aj34hksy"; + rev = "e07a6ede61c364fb87630fa7507a4f8482d882e0"; + sha256 = "0i88z53q28lwzmadxincab4m66qbzcbmasgildybj8db0z2z8jm0"; }; description = "Libretro port of ScummVM"; license = gpl2; extraBuildInputs = [ fluidsynth libjpeg libvorbis libGLU_combined SDL ]; }).override { + makefile = "backends/platform/libretro/build/Makefile"; buildPhase = "cd backends/platform/libretro/build && make"; }; @@ -393,50 +788,85 @@ in with stdenv.lib.licenses; core = "snes9x"; src = fetchRetro { repo = core; - rev = "db4bfaba3b0d5a067fe9aea323503656837a8d9a"; - sha256 = "02f04ss45km32lp68diyfkix1gryx89qy8cc80189ipwnx80pgip"; + rev = "29b78df8c9f0f48ed4605d08a187a134b3b316d6"; + sha256 = "004h1pkxvbn4zlh8bqs6z17k04jw5wzbwklpgvmb7hbxshsi4qid"; }; description = "Port of SNES9x git to libretro"; license = "Non-commercial"; }).override { + makefile = "libretro/Makefile"; buildPhase = "cd libretro && make"; }; - snes9x-next = (mkLibRetroCore rec { - core = "snes9x-next"; + snes9x2002 = (mkLibRetroCore rec { + core = "snes9x2002"; + src = fetchRetro { + repo = core; + rev = "354bcb5acea0aa45b56ae553e0b2b4f10792dfeb"; + sha256 = "05gvjjxy6ci5pax3frd9g8k9mkqskab5g6rvfjab7cc4zrxrg23f"; + }; + description = "Optimized port/rewrite of SNES9x 1.39 to Libretro"; + license = "Non-commercial"; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + snes9x2005 = (mkLibRetroCore rec { + core = "snes9x2005"; + src = fetchRetro { + repo = core; + rev = "e5cadd2f21fb64e8c7194ad006b39e6f555c4a5b"; + sha256 = "1q0xrw3f8zm2k19sva8cz28yx815w8a6y1xsl0i6bb3cai3q1hyx"; + }; + description = "Optimized port/rewrite of SNES9x 1.43 to Libretro"; + license = "Non-commercial"; + }).override { + makefile = "Makefile"; + buildPhase = '' + make USE_BLARGG_APU=1 \ + && mv snes9x2005_plus_libretro${stdenv.hostPlatform.extensions.sharedLibrary} snes9x2005_libretro${stdenv.hostPlatform.extensions.sharedLibrary} + ''; + }; + + snes9x2010 = (mkLibRetroCore rec { + core = "snes9x2010"; src = fetchRetro { repo = core; - rev = "b2a69de0df1eb39ed362806f9c9633f4544272af"; - sha256 = "1vhgsrg9l562nincfvpj2h2dqkkblg1qmh0v47jqlqgmgl2b1zij"; + rev = "e945cbae0f8c472e1567a319817c9228b775dd71"; + sha256 = "1pj5p4a2hy7hk90bzy4vnkz3b6nc8n1niqibgwhyfsc22xlxqsfr"; }; description = "Optimized port/rewrite of SNES9x 1.52+ to Libretro"; license = "Non-commercial"; }).override { buildPhase = '' make -f Makefile.libretro - mv snes9x2010_libretro${stdenv.hostPlatform.extensions.sharedLibrary} snes9x_next_libretro${stdenv.hostPlatform.extensions.sharedLibrary} ''; }; stella = (mkLibRetroCore rec { core = "stella"; src = fetchRetro { - repo = core + "-libretro"; - rev = "bbe65db0e344dcb38905586bd853076b65963e5a"; - sha256 = "18r1yyfzvjq2hq04d94y37kzsq6aywh1aim69a3imk8kh46gwrh0"; + repo = core + "2014-libretro"; + rev = "6d74ad9a0fd779145108cf1213229798d409ed37"; + sha256 = "0b1nsk92rr64xxj8jc9vpjqgrmm3554096zl031ymr94j5cc87q9"; }; description = "Port of Stella to libretro"; license = gpl2; }).override { - buildPhase = "make"; + makefile = "Makefile"; + buildPhase = '' + make \ + && mv stella2014_libretro${stdenv.hostPlatform.extensions.sharedLibrary} stella_libretro${stdenv.hostPlatform.extensions.sharedLibrary} + ''; }; vba-next = mkLibRetroCore rec { core = "vba-next"; src = fetchRetro { repo = core; - rev = "e7734756d228ea604f8fa872cea1bba987780791"; - sha256 = "03s4rh7dbbhbfc4pfdvr9jcbxrp4ijg8yp49s1xhr7sxsblj2vpv"; + rev = "3580ae6acb1a90c4e982e57597458da07eca4f41"; + sha256 = "0fz8z04kf9g1i5x5slyvx5kb07garzxvhcqnwmqn5j574xh1lc6d"; }; description = "VBA-M libretro port with modifications for speed"; license = gpl2; @@ -446,13 +876,55 @@ in with stdenv.lib.licenses; core = "vbam"; src = fetchRetro { repo = core + "-libretro"; - rev = "1b82fc2d761f027567632692f787482d1e287ec2"; - sha256 = "043djmqvh2grc25hwjw4b5kfx57b89ryp6fcl8v632sm35l3dd6z"; + rev = "9ccdeac3aa9db00720bb80eff5c9924362144efa"; + sha256 = "0rq89i9f483j93shhp2p3vqsnb2abpwz6wdnsycfwxgblczmi22y"; }; description = "vanilla VBA-M libretro port"; license = gpl2; }).override { + makefile = "src/libretro/Makefile"; buildPhase = "cd src/libretro && make"; }; + vecx = (mkLibRetroCore rec { + core = "vecx"; + src = fetchRetro { + repo = "libretro-" + core; + rev = "26585ee701499550e484c11f005db18e926827d9"; + sha256 = "0vz2aksc8mqnw55f2bvvawj21mxf60fp93r0sr55hdccn9h7355k"; + }; + description = "Port of Vecx to libretro"; + license = gpl3; + }).override { + buildPhase = "make"; + }; + + virtualjaguar = (mkLibRetroCore rec { + core = "virtualjaguar"; + src = fetchRetro { + repo = core + "-libretro"; + rev = "7bdd8658880b53bf2bcbae0741323fe18f9041f5"; + sha256 = "0zbrsfhvx293ijazy1w19qha19hprsi0zv8295sa0gq8kyh0xhyw"; + }; + description = "Port of VirtualJaguar to libretro"; + license = gpl3; + }).override { + makefile = "Makefile"; + buildPhase = "make"; + }; + + yabause = (mkLibRetroCore rec { + core = "yabause"; + src = fetchRetro { + repo = core; + rev = "08d09cb88a69ee4c2986693fb813e0eb58d71481"; + sha256 = "0z55yam1l7m21kbjwn44sp4md9g7p95b27vcxr7i0v08gnkwwvv1"; + }; + description = "Port of Yabause to libretro"; + license = gpl2; + }).override { + makefile = "yabause/src/libretro/Makefile"; + buildPhase = "cd yabause/src/libretro && make"; + }; + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 764333fd122..b1b5ea4300b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21669,34 +21669,64 @@ in in with libretro; ([ ] ++ optional (cfg.enable4do or false) _4do + ++ optional (cfg.enableAtari800 or false) atari800 + ++ optional (cfg.enableBeetleGBA or false) beetle-gba + ++ optional (cfg.enableBeetleLynx or false) beetle-lynx + ++ optional (cfg.enableBeetleNGP or false) beetle-ngp ++ optional (cfg.enableBeetlePCEFast or false) beetle-pce-fast + ++ optional (cfg.enableBeetlePCFX or false) beetle-pcfx ++ optional (cfg.enableBeetlePSX or false) beetle-psx ++ optional (cfg.enableBeetleSaturn or false) beetle-saturn + ++ optional (cfg.enableBeetleSNES or false) beetle-snes + ++ optional (cfg.enableBeetleSuperGrafx or false) beetle-supergrafx + ++ optional (cfg.enableBeetleWswan or false) beetle-wswan + ++ optional (cfg.enableBeetleVB or false) beetle-vb + ++ optional (cfg.enableBlueMSX or false) bluemsx ++ optional (cfg.enableBsnesMercury or false) bsnes-mercury + ++ optional (cfg.enableDOSBox or false) dosbox ++ optional (cfg.enableDesmume or false) desmume + ++ optional (cfg.enableDesmume2015 or false) desmume2015 ++ optional (cfg.enableDolphin or false) dolphin ++ optional (cfg.enableFBA or false) fba ++ optional (cfg.enableFceumm or false) fceumm + ++ optional (cfg.enableFlycast or false) flycast ++ optional (cfg.enableGambatte or false) gambatte ++ optional (cfg.enableGenesisPlusGX or false) genesis-plus-gx + ++ optional (cfg.enableGpsp or false) gpsp + ++ optional (cfg.enableHandy or false) handy + ++ optional (cfg.enableHatari or false) hatari ++ optional (cfg.enableHiganSFC or false) higan-sfc ++ optional (cfg.enableMAME or false) mame + ++ optional (cfg.enableMAME2000 or false) mame2000 + ++ optional (cfg.enableMAME2003 or false) mame2003 + ++ optional (cfg.enableMAME2003Plus or false) mame2003-plus + ++ optional (cfg.enableMAME2010 or false) mame2010 + ++ optional (cfg.enableMAME2015 or false) mame2015 + ++ optional (cfg.enableMAME2016 or false) mame2016 + ++ optional (cfg.enableMesen or false) mesen ++ optional (cfg.enableMGBA or false) mgba ++ optional (cfg.enableMupen64Plus or false) mupen64plus ++ optional (cfg.enableNestopia or false) nestopia + ++ optional (cfg.enableO2EM or false) o2em ++ optional (cfg.enableParallelN64 or false) parallel-n64 + ++ optional (cfg.enablePCSXRearmed or false) pcsx_rearmed ++ optional (cfg.enablePicodrive or false) picodrive - ++ optional (cfg.enablePrboom or false) prboom + ++ optional (cfg.enablePlay or false) play ++ optional (cfg.enablePPSSPP or false) ppsspp + ++ optional (cfg.enablePrboom or false) prboom + ++ optional (cfg.enableProSystem or false) prosystem ++ optional (cfg.enableQuickNES or false) quicknes - ++ optional (cfg.enableReicast or false) reicast ++ optional (cfg.enableScummVM or false) scummvm ++ optional (cfg.enableSnes9x or false) snes9x - ++ optional (cfg.enableSnes9xNext or false) snes9x-next + ++ optional (cfg.enableSnes9x2002 or false) snes9x2002 + ++ optional (cfg.enableSnes9x2005 or false) snes9x2005 + ++ optional (cfg.enableSnes9x2010 or false) snes9x2010 ++ optional (cfg.enableStella or false) stella ++ optional (cfg.enableVbaNext or false) vba-next ++ optional (cfg.enableVbaM or false) vba-m - + ++ optional (cfg.enableVecx or false) vecx + ++ optional (cfg.enableVirtualJaguar or false) virtualjaguar + ++ optional (cfg.enableYabause or false) yabause # added on 2017-02-25 due #23163 ++ optional (cfg.enableMednafenPCEFast or false) (throw "nix config option enableMednafenPCEFast has been renamed to enableBeetlePCEFast") -- cgit 1.4.1 From eed3a01c782107edc16f3c201dc157ac91cc69b4 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sat, 2 Nov 2019 17:32:34 -0700 Subject: qbittorrent: 4.1.8 -> 4.1.9.1 --- pkgs/applications/networking/p2p/qbittorrent/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/p2p/qbittorrent/default.nix b/pkgs/applications/networking/p2p/qbittorrent/default.nix index c5142c2f9e2..aebdeda6108 100644 --- a/pkgs/applications/networking/p2p/qbittorrent/default.nix +++ b/pkgs/applications/networking/p2p/qbittorrent/default.nix @@ -10,13 +10,13 @@ with lib; mkDerivation rec { pname = "qbittorrent"; - version = "4.1.8"; + version = "4.1.9.1"; src = fetchFromGitHub { owner = "qbittorrent"; repo = "qbittorrent"; rev = "release-${version}"; - sha256 = "1mx59mazfmd5yaqdgb6cm8hr5sbp2xgzz3y3yipq1fwq85dj3r5w"; + sha256 = "19zgqlby7i1kr20wa4zd99qzd062a879xxxbmlf40rnqiqy4bhyi"; }; # NOTE: 2018-05-31: CMake is working but it is not officially supported -- cgit 1.4.1 From f40f98a732659be090ce6b472e5655c8ccd2fc45 Mon Sep 17 00:00:00 2001 From: B YI Date: Sun, 3 Nov 2019 12:43:01 +0800 Subject: pam_mount: change order of lines in pam_mount.conf Change order of pam_mount.conf.xml so that users can override the preset configs. My use case is to mount a gocryptfs (a fuse program) volume. I can not do that in current order. Because even if I change the `` and `` by add below to extraVolumes ``` ${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) "%(before=\"-o \" OPTIONS)" ${pkgs.fuse}/bin/fusermount -u %(MNTPT) ``` mount.fuse still does not work because it can not find `fusermount`. pam_mount will told stat /bin/fusermount failed. Fine, I can add a `` section to extraVolumes ``` ${pkgs.fuse}/bin:${pkgs.coreutils}/bin:${pkgs.utillinux}/bin ``` but then the `` section is overridden by the hardcoded `${pkgs.utillinux}/bin` below. So it still does not work. --- nixos/modules/security/pam_mount.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/modules/security/pam_mount.nix b/nixos/modules/security/pam_mount.nix index 8b131c54a2a..75f58462d13 100644 --- a/nixos/modules/security/pam_mount.nix +++ b/nixos/modules/security/pam_mount.nix @@ -50,9 +50,6 @@ in - ${concatStrings (map userVolumeEntry (attrValues extraUserVolumes))} - ${concatStringsSep "\n" cfg.extraVolumes} - @@ -64,6 +61,9 @@ in ${pkgs.pam_mount}/bin/mount.crypt %(VOLUME) %(MNTPT) ${pkgs.pam_mount}/bin/umount.crypt %(MNTPT) ${pkgs.pam_mount}/bin/pmvarrun -u %(USER) -o %(OPERATION) + + ${concatStrings (map userVolumeEntry (attrValues extraUserVolumes))} + ${concatStringsSep "\n" cfg.extraVolumes} ''; }]; -- cgit 1.4.1 From 84bf78faa4254fd09517a431b4fa95237285977d Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sat, 2 Nov 2019 23:50:12 -0700 Subject: solr: 8.2.0 -> 8.3.0 --- pkgs/servers/search/solr/8.x.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/servers/search/solr/8.x.nix b/pkgs/servers/search/solr/8.x.nix index fd888de60de..7abfe9a2b20 100644 --- a/pkgs/servers/search/solr/8.x.nix +++ b/pkgs/servers/search/solr/8.x.nix @@ -2,11 +2,11 @@ stdenv.mkDerivation rec { pname = "solr"; - version = "8.2.0"; + version = "8.3.0"; src = fetchurl { url = "mirror://apache/lucene/${pname}/${version}/${pname}-${version}.tgz"; - sha256 = "0j9lydxlng785h2n1b8avinrkqdpbj5qn4rk897p2pbf4fdv795z"; + sha256 = "11qkipmj8qq4gw5lwnx1j8dr2lq8d5h1v1fbdyppw8l6a68j160s"; }; nativeBuildInputs = [ makeWrapper ]; -- cgit 1.4.1 From 0b27dd0bde3038d78e96d0dedfde509c0ef05370 Mon Sep 17 00:00:00 2001 From: Elis Hirwing Date: Sun, 3 Nov 2019 09:56:41 +0100 Subject: emacs-nox: Add alias for emacs26-nox --- pkgs/top-level/all-packages.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 768fc74fb7a..eeebbeb8efa 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -18282,6 +18282,7 @@ in emacs = emacs26; emacsPackages = emacs26Packages; + emacs-nox = emacs26-nox; emacs26 = callPackage ../applications/editors/emacs { # use override to enable additional features -- cgit 1.4.1 From 7efb8234043caece4da753bb821e2763aa18063f Mon Sep 17 00:00:00 2001 From: Mario Rodas Date: Sun, 3 Nov 2019 04:20:00 -0500 Subject: du-dust: 0.2.3 -> 0.4.1.2 --- pkgs/tools/misc/dust/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/misc/dust/default.nix b/pkgs/tools/misc/dust/default.nix index 4dffae557a4..68f06f1ceb8 100644 --- a/pkgs/tools/misc/dust/default.nix +++ b/pkgs/tools/misc/dust/default.nix @@ -2,16 +2,16 @@ rustPlatform.buildRustPackage rec { pname = "dust"; - version = "0.2.3"; + version = "0.4.1.2"; src = fetchFromGitHub { owner = "bootandy"; repo = "dust"; rev = "v${version}"; - sha256 = "1l8z1daiq2x92449p2ciblcwl0ddgr3vqj2dsd3z8jj3y0z8j51s"; + sha256 = "0a2n96p6z4y09l5z617qbpm8lgxvfagd1l950d2gz9xw4xf1ik5w"; }; - cargoSha256 = "1bby08ijpwb8676pgm87k80s0n0fqsxc3wmz0v8p9s85yzkflnx5"; + cargoSha256 = "0cpgxkgz10na90r3fgz8hs20vihqdcc8983inn71fq90627bhdx7"; doCheck = false; -- cgit 1.4.1 From 7cacaea1db76e3e3969e12ae62a17d4399b649f4 Mon Sep 17 00:00:00 2001 From: Kirill Elagin Date: Sun, 3 Nov 2019 13:24:57 +0300 Subject: gnu-efi: Use their crosscompilation support correctly IIUC, previously, the cross-compilation support was done in a somewhat hacky way and was, basically, special-cased for ARM. Now we use the cross-compilation support intergrated into their own build system. Test: * nix-build --arg crossSystem '(import ).systems.examples.musl64' '' -A gnu-efi --- pkgs/development/libraries/gnu-efi/default.nix | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pkgs/development/libraries/gnu-efi/default.nix b/pkgs/development/libraries/gnu-efi/default.nix index af225cc50f2..6ae1f47e38c 100644 --- a/pkgs/development/libraries/gnu-efi/default.nix +++ b/pkgs/development/libraries/gnu-efi/default.nix @@ -1,4 +1,6 @@ -{ stdenv, fetchurl, pciutils }: with stdenv.lib; +{ stdenv, buildPackages, fetchurl, pciutils }: + +with stdenv.lib; stdenv.mkDerivation rec { pname = "gnu-efi"; @@ -15,14 +17,9 @@ stdenv.mkDerivation rec { makeFlags = [ "PREFIX=\${out}" - "CC=${stdenv.cc.targetPrefix}gcc" - "AS=${stdenv.cc.targetPrefix}as" - "LD=${stdenv.cc.targetPrefix}ld" - "AR=${stdenv.cc.targetPrefix}ar" - "RANLIB=${stdenv.cc.targetPrefix}ranlib" - "OBJCOPY=${stdenv.cc.targetPrefix}objcopy" - ] ++ stdenv.lib.optional stdenv.isAarch32 "ARCH=arm" - ++ stdenv.lib.optional stdenv.isAarch64 "ARCH=aarch64"; + "HOSTCC=${buildPackages.stdenv.cc.targetPrefix}cc" + "CROSS_COMPILE=${stdenv.cc.targetPrefix}" + ]; meta = with stdenv.lib; { description = "GNU EFI development toolchain"; -- cgit 1.4.1 From a40b03c608401120cb51e18e2fc4e64255967e12 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sun, 3 Nov 2019 03:36:33 -0800 Subject: x11docker: 6.2.0 -> 6.3.0 --- pkgs/applications/virtualization/x11docker/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/virtualization/x11docker/default.nix b/pkgs/applications/virtualization/x11docker/default.nix index 1d18e4d14e8..b2ebb2f82af 100644 --- a/pkgs/applications/virtualization/x11docker/default.nix +++ b/pkgs/applications/virtualization/x11docker/default.nix @@ -1,12 +1,12 @@ { stdenv, fetchFromGitHub, makeWrapper, nx-libs, xorg }: stdenv.mkDerivation rec { pname = "x11docker"; - version = "6.2.0"; + version = "6.3.0"; src = fetchFromGitHub { owner = "mviereck"; repo = "x11docker"; rev = "v${version}"; - sha256 = "19q5vrhspxpjkdhhlgya2sa2fgjg8gyd3kmnb83nlfs46p8jx4f4"; + sha256 = "0x2sx41y3ylzg511x52k3wh8mfbzp4ialpas6sn4ccagqxh2hc4y"; }; nativeBuildInputs = [ makeWrapper ]; buildInputs = [ nx-libs xorg.xhost xorg.xinit ]; -- cgit 1.4.1 From 7befcddb33da92e0cd55a13263fb8de4e08254f1 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sun, 3 Nov 2019 03:50:53 -0800 Subject: wolfssl: 4.1.0 -> 4.2.0 --- pkgs/development/libraries/wolfssl/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/wolfssl/default.nix b/pkgs/development/libraries/wolfssl/default.nix index 780d7df47cb..1bad9c5eb2a 100644 --- a/pkgs/development/libraries/wolfssl/default.nix +++ b/pkgs/development/libraries/wolfssl/default.nix @@ -2,13 +2,13 @@ stdenv.mkDerivation rec { pname = "wolfssl"; - version = "4.1.0"; + version = "4.2.0"; src = fetchFromGitHub { owner = "wolfSSL"; repo = "wolfssl"; rev = "v${version}-stable"; - sha256 = "16d1dzbdx6x7czbxf6i1rlb5mv59yzzpnha7qgwab3yq62rlsgw3"; + sha256 = "16s7jx2brgii6jbpmr30ggkc7rrf388jl26g357sm7ggwliiwask"; }; configureFlags = [ "--enable-all" ]; -- cgit 1.4.1 From 8177aa48c3e410fb7ff45d8d8bb104330885b10f Mon Sep 17 00:00:00 2001 From: Ente Date: Sun, 3 Nov 2019 13:22:57 +0100 Subject: keepass-otpkeyprov: init at 2.6 --- .../misc/keepass-plugins/otpkeyprov/default.nix | 32 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 34 insertions(+) create mode 100644 pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix diff --git a/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix b/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix new file mode 100644 index 00000000000..e2b26eaee90 --- /dev/null +++ b/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix @@ -0,0 +1,32 @@ +{ stdenv, buildEnv, fetchzip, mono }: + +let + version = "2.6"; + drv = stdenv.mkDerivation { + pname = "otpkeyprov"; + inherit version; + + src = fetchzip { + url = "https://keepass.info/extensions/v2/otpkeyprov/OtpKeyProv-${version}.zip"; + sha256 = "1p60k55v2sxnv1varmp0dgbsi2rhjg9kj19cf54mkc87nss5h1ki"; + stripRoot = false; + }; + + meta = { + description = "OtpKeyProv is a key provider based on one-time passwords"; + homepage = "https://keepass.info/plugins.html#otpkeyprov"; + platforms = with stdenv.lib.platforms; linux; + license = stdenv.lib.licenses.gpl2; + maintainers = [ stdenv.lib.maintainers.ente ]; + }; + + pluginFilename = "OtpKeyProv.plgx"; + + installPhase = '' + mkdir -p $out/lib/dotnet/keepass/ + cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename + ''; + }; +in + # Mono is required to compile plugin at runtime, after loading. + buildEnv { name = drv.name; paths = [ mono drv ]; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c70cf9417b3..d3d5ca9068c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -18423,6 +18423,8 @@ in keepass-keepassrpc = callPackage ../applications/misc/keepass-plugins/keepassrpc { }; + keepass-otpkeyprov = callPackage ../applications/misc/keepass-plugins/otpkeyprov { }; + exrdisplay = callPackage ../applications/graphics/exrdisplay { }; exrtools = callPackage ../applications/graphics/exrtools { }; -- cgit 1.4.1 From edc0b28d28d63cc539e2d03da5a4a1cb802c6064 Mon Sep 17 00:00:00 2001 From: Ente Date: Sun, 3 Nov 2019 13:24:00 +0100 Subject: maintainers: add Enteee --- maintainers/maintainer-list.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 854b033f056..1f2cdda41d1 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -2030,6 +2030,12 @@ github = "ericnorris"; githubId = 1906605; }; + Enteee = { + email = "nix@duckpond.ch"; + github = "Enteee"; + githubid = 5493775; + name = "Ente"; + }; enzime = { email = "enzime@users.noreply.github.com"; github = "enzime"; -- cgit 1.4.1 From cf5597809ede716a8daee57104bfc32d201ab0f6 Mon Sep 17 00:00:00 2001 From: Gabriel Ebner Date: Sun, 3 Nov 2019 14:14:35 +0100 Subject: freecad: 0.18.3 -> 0.18.4 --- pkgs/applications/graphics/freecad/default.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/graphics/freecad/default.nix b/pkgs/applications/graphics/freecad/default.nix index ee7586709dc..eb087c42ce0 100644 --- a/pkgs/applications/graphics/freecad/default.nix +++ b/pkgs/applications/graphics/freecad/default.nix @@ -1,4 +1,4 @@ -{ stdenv, mkDerivation, fetchurl, fetchpatch, cmake, ninja, coin3d, xercesc, ode +{ stdenv, mkDerivation, fetchFromGitHub, fetchpatch, cmake, ninja, coin3d, xercesc, ode , eigen, qtbase, qttools, qtwebkit, opencascade-occt, gts, hdf5, vtk, medfile , zlib, python3Packages, swig, gfortran, libXmu, soqt, libf2c, libGLU , makeWrapper, pkgconfig, mpi ? null }: @@ -9,11 +9,13 @@ let pythonPackages = python3Packages; in mkDerivation rec { pname = "freecad"; - version = "0.18.3"; + version = "0.18.4"; - src = fetchurl { - url = "https://github.com/FreeCAD/FreeCAD/archive/${version}.tar.gz"; - sha256 = "07j7azgnicmd8cqnyskp15y44ykgj5qqz5y3w1jdynrv3yrvk1kz"; + src = fetchFromGitHub { + owner = "FreeCAD"; + repo = "FreeCAD"; + rev = version; + sha256 = "1phs9a0px5fnzpyx930cz39p5dis0f0yajxzii3c3sazgkzrd55s"; }; nativeBuildInputs = [ cmake ninja pkgconfig pythonPackages.pyside2-tools ]; -- cgit 1.4.1 From a881d113a98f31a1d30c4ab7a5dc1d692cf6bf77 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Thu, 31 Oct 2019 23:34:06 +0100 Subject: netsurf.buildsystem: build on Darwin --- pkgs/applications/misc/netsurf/buildsystem/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/misc/netsurf/buildsystem/default.nix b/pkgs/applications/misc/netsurf/buildsystem/default.nix index 36d5a70735a..0560b1d25b3 100644 --- a/pkgs/applications/misc/netsurf/buildsystem/default.nix +++ b/pkgs/applications/misc/netsurf/buildsystem/default.nix @@ -19,6 +19,6 @@ stdenv.mkDerivation rec { description = "Build system for netsurf browser"; license = licenses.gpl2; maintainers = [ maintainers.vrthra ]; - platforms = platforms.linux; + platforms = platforms.unix; }; } -- cgit 1.4.1 From fdd6153555420b0e49079977f64644fe1d72abfe Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Thu, 31 Oct 2019 22:54:09 +0100 Subject: netsurf.libnsgif: build on Darwin --- pkgs/applications/misc/netsurf/libnsgif/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/misc/netsurf/libnsgif/default.nix b/pkgs/applications/misc/netsurf/libnsgif/default.nix index 4de882243fe..e826dee0d25 100644 --- a/pkgs/applications/misc/netsurf/libnsgif/default.nix +++ b/pkgs/applications/misc/netsurf/libnsgif/default.nix @@ -26,6 +26,6 @@ stdenv.mkDerivation rec { description = "GIF Decoder for netsurf browser"; license = licenses.gpl2; maintainers = [ maintainers.vrthra ]; - platforms = platforms.linux; + platforms = platforms.unix; }; } -- cgit 1.4.1 From 148eae459ba2a8e977474ab886b49b84341518a0 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 3 Nov 2019 14:31:23 +0100 Subject: poly2tri-c: init at 0.1.0 --- pkgs/development/libraries/poly2tri-c/default.nix | 42 +++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 44 insertions(+) create mode 100644 pkgs/development/libraries/poly2tri-c/default.nix diff --git a/pkgs/development/libraries/poly2tri-c/default.nix b/pkgs/development/libraries/poly2tri-c/default.nix new file mode 100644 index 00000000000..a3e42b3ae4b --- /dev/null +++ b/pkgs/development/libraries/poly2tri-c/default.nix @@ -0,0 +1,42 @@ +{ stdenv +, fetchFromGitHub +, autoreconfHook +, pkgconfig +, glib +}: + +stdenv.mkDerivation rec { + pname = "poly2tri-c"; + version = "0.1.0"; + + outputs = [ "bin" "out" "dev" ]; + + src = fetchFromGitHub { + owner = "Paul-Browne"; + repo = "poly2tri-c"; + rev = "p2tc-${version}"; + sha256 = "158vm3wqfxs22b74kqc4prlvjny38qqm3kz5wrgasmx0qciwh0g8"; + }; + + nativeBuildInputs = [ + autoreconfHook + pkgconfig + ]; + + buildInputs = [ + glib + ]; + + NIX_CFLAGS_COMPILE = [ + "--std=gnu99" + "-Wno-error" + ]; + + meta = with stdenv.lib; { + description = "Library for generating, refining and rendering 2-Dimensional Constrained Delaunay Triangulations"; + homepage = "https://code.google.com/archive/p/poly2tri-c/"; + license = licenses.bsd3; + maintainers = with stdenv.lib.maintainers; [ jtojnar ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6c9a78ab6f0..4f8303a85e8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5670,6 +5670,8 @@ in polkit_gnome = callPackage ../tools/security/polkit-gnome { }; + poly2tri-c = callPackage ../development/libraries/poly2tri-c { }; + polysh = callPackage ../tools/networking/polysh { }; ponysay = callPackage ../tools/misc/ponysay { }; -- cgit 1.4.1 From 66611546f0a57a4d8c7a36af07ad0105f8942d5d Mon Sep 17 00:00:00 2001 From: Alex Rice Date: Sun, 14 Apr 2019 10:53:43 +0100 Subject: brillo: init at 1.4.8 --- nixos/modules/hardware/brillo.nix | 22 +++++++++++++++++ nixos/modules/module-list.nix | 1 + pkgs/os-specific/linux/brillo/default.nix | 34 +++++++++++++++++++++++++++ pkgs/os-specific/linux/brillo/udev-rule.patch | 13 ++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 5 files changed, 72 insertions(+) create mode 100644 nixos/modules/hardware/brillo.nix create mode 100644 pkgs/os-specific/linux/brillo/default.nix create mode 100644 pkgs/os-specific/linux/brillo/udev-rule.patch diff --git a/nixos/modules/hardware/brillo.nix b/nixos/modules/hardware/brillo.nix new file mode 100644 index 00000000000..e970c948099 --- /dev/null +++ b/nixos/modules/hardware/brillo.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + cfg = config.hardware.brillo; +in +{ + options = { + hardware.brillo = { + enable = mkEnableOption '' + Enable brillo in userspace. + This will allow brightness control from users in the video group. + ''; + }; + }; + + + config = mkIf cfg.enable { + services.udev.packages = [ pkgs.brillo ]; + environment.systemPackages = [ pkgs.brillo ]; + }; +} diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index df6e4dc1336..88c3a6d73ac 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -44,6 +44,7 @@ ./hardware/all-firmware.nix ./hardware/bladeRF.nix ./hardware/brightnessctl.nix + ./hardware/brillo.nix ./hardware/ckb-next.nix ./hardware/cpu/amd-microcode.nix ./hardware/cpu/intel-microcode.nix diff --git a/pkgs/os-specific/linux/brillo/default.nix b/pkgs/os-specific/linux/brillo/default.nix new file mode 100644 index 00000000000..3ad4acf127b --- /dev/null +++ b/pkgs/os-specific/linux/brillo/default.nix @@ -0,0 +1,34 @@ +{ stdenv, fetchFromGitLab , go-md2man, coreutils, substituteAll }: + +stdenv.mkDerivation rec { + pname = "brillo"; + version = "1.4.8"; + + src = fetchFromGitLab { + owner= "cameronnemo"; + repo= "brillo"; + rev= "v${version}"; + sha256 = "0wxvg541caiwm3bjwbmk7xcng7jd9xsiga2agxwp7gpkrlp74j9f"; + }; + + patches = [ + (substituteAll { + src = ./udev-rule.patch; + inherit coreutils; + }) + ]; + + nativeBuildInputs = [ go-md2man ]; + + makeFlags = [ "PREFIX=$(out)" "AADIR=$(out)/etc/apparmor.d" ]; + + installTargets = "install-dist"; + + meta = with stdenv.lib; { + description = "Backlight and Keyboard LED control tool"; + homepage = https://gitlab.com/cameronnemo/brillo; + license = [ licenses.gpl3 licenses.bsd0 ]; + platforms = platforms.linux; + maintainers = [ maintainers.alexarice ]; + }; +} diff --git a/pkgs/os-specific/linux/brillo/udev-rule.patch b/pkgs/os-specific/linux/brillo/udev-rule.patch new file mode 100644 index 00000000000..7b1cf484067 --- /dev/null +++ b/pkgs/os-specific/linux/brillo/udev-rule.patch @@ -0,0 +1,13 @@ +diff --git a/contrib/udev.in b/contrib/udev.in +index 0625952..a6c940e 100644 +--- a/contrib/udev.in ++++ b/contrib/udev.in +@@ -1,4 +1,4 @@ +-ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chgrp @group@ /sys/class/backlight/%k/brightness" +-ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness" +-ACTION=="add", SUBSYSTEM=="leds", RUN+="/bin/chgrp @group@ /sys/class/leds/%k/brightness" +-ACTION=="add", SUBSYSTEM=="leds", RUN+="/bin/chmod g+w /sys/class/leds/%k/brightness" ++ACTION=="add", SUBSYSTEM=="backlight", RUN+="@coreutils@/bin/chgrp @group@ /sys/class/backlight/%k/brightness" ++ACTION=="add", SUBSYSTEM=="backlight", RUN+="@coreutils@/bin/chmod g+w /sys/class/backlight/%k/brightness" ++ACTION=="add", SUBSYSTEM=="leds", RUN+="@coreutils@/bin/chgrp @group@ /sys/class/leds/%k/brightness" ++ACTION=="add", SUBSYSTEM=="leds", RUN+="@coreutils@/bin/chmod g+w /sys/class/leds/%k/brightness" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b60bb760d5a..a9fd2bf2f8c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15666,6 +15666,8 @@ in bt-fw-converter = callPackage ../os-specific/linux/firmware/bt-fw-converter { }; + brillo = callPackage ../os-specific/linux/brillo { }; + broadcom-bt-firmware = callPackage ../os-specific/linux/firmware/broadcom-bt-firmware { }; batctl = callPackage ../os-specific/linux/batman-adv/batctl.nix { }; -- cgit 1.4.1 From 258f6f4437b50a69cea154c154fe5f75a56f84d7 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 25 Aug 2019 03:13:13 +0200 Subject: gegl_0_4: 0.4.16 → 0.4.18 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://gitlab.gnome.org/GNOME/gegl/blob/GEGL_0_4_18/docs/NEWS.txt#L1-123 Ported to Meson, which means ton of extra dependencies used by default. Though the closure size effect appears to be minimal: 88.9M → 92.9M Also drop GTK dependency, since it is not needed any more (was it ever?) --- pkgs/desktops/gnome-3/default.nix | 3 +- pkgs/development/libraries/gegl/4.0.nix | 114 ++++++++++++++++++++++++++++---- pkgs/top-level/all-packages.nix | 6 +- 3 files changed, 106 insertions(+), 17 deletions(-) diff --git a/pkgs/desktops/gnome-3/default.nix b/pkgs/desktops/gnome-3/default.nix index aa50aa18c40..952f6eaf4f8 100644 --- a/pkgs/desktops/gnome-3/default.nix +++ b/pkgs/desktops/gnome-3/default.nix @@ -24,7 +24,6 @@ lib.makeScope pkgs.newScope (self: with self; { libsoup = pkgs.libsoup.override { gnomeSupport = true; }; libchamplain = pkgs.libchamplain.override { libsoup = libsoup; }; gnome3 = self // { recurseForDerivations = false; }; - gegl_0_4 = pkgs.gegl_0_4.override { gtk = pkgs.gtk3; }; # ISO installer # installerIso = callPackage ./installer.nix {}; @@ -359,4 +358,6 @@ lib.makeScope pkgs.newScope (self: with self; { nautilus-sendto = throw "deprecated 2019-09-17: abandoned"; inherit (pkgs) vala; # added 2019-10-10 + + inherit (pkgs) gegl_0_4; # added 2019-10-31 }) diff --git a/pkgs/development/libraries/gegl/4.0.nix b/pkgs/development/libraries/gegl/4.0.nix index 0e3f79b1814..8632035caf7 100644 --- a/pkgs/development/libraries/gegl/4.0.nix +++ b/pkgs/development/libraries/gegl/4.0.nix @@ -1,31 +1,121 @@ -{ stdenv, fetchurl, pkgconfig, glib, babl, libpng, cairo, libjpeg, which -, librsvg, pango, gtk, bzip2, json-glib, gettext, autoreconfHook, libraw -, gexiv2, libwebp, libintl }: +{ stdenv +, fetchurl +, fetchpatch +, pkgconfig +, vala +, gobject-introspection +, gtk-doc +, docbook_xsl +, docbook_xml_dtd_43 +, glib +, babl +, libpng +, cairo +, libjpeg +, librsvg +, lensfun +, libspiro +, netsurf +, pango +, poly2tri-c +, bzip2 +, json-glib +, gettext +, meson +, ninja +, libraw +, gexiv2 +, libwebp +, luajit +, openexr +}: stdenv.mkDerivation rec { pname = "gegl"; - version = "0.4.16"; + version = "0.4.18"; outputs = [ "out" "dev" "devdoc" ]; outputBin = "dev"; src = fetchurl { - url = "https://download.gimp.org/pub/gegl/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.bz2"; - sha256 = "0njydcr6qdmfzh4fxx544681qxdpf7y6b2f47jcypn810dlxy4h1"; + url = "https://download.gimp.org/pub/gegl/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz"; + sha256 = "0r6akqnrkvxizyhyi8sv40mxm7j4bcwjb6mqjpxy0zzbbfsdyin9"; }; - enableParallelBuilding = true; + patches = [ + # Fix arch detection. + # https://gitlab.gnome.org/GNOME/gegl/merge_requests/53 + (fetchpatch { + url = "https://gitlab.gnome.org/GNOME/gegl/commit/6bcf95fd0f32cf5e8b1ddbe17b14d9ad049bded8.patch"; + sha256 = "0aqdr3y5mr47wq44jnhp97188bvpjlf56zrlmn8aazdf07r2apma"; + }) - doCheck = true; + # Fix Darwin build. + # https://gitlab.gnome.org/GNOME/gegl/merge_requests/54 + (fetchpatch { + url = "https://gitlab.gnome.org/GNOME/gegl/commit/2bc06bfedee4fb25f6a966c8235b75292e24e55f.patch"; + sha256 = "1psls61wsrdq5pzpvj22mrm46lpzrw3wkx6li7dv6fyb65wz2n4d"; + }) + ]; + + nativeBuildInputs = [ + pkgconfig + gettext + meson + ninja + vala + gobject-introspection + gtk-doc + docbook_xsl + docbook_xml_dtd_43 + ]; buildInputs = [ - libpng cairo libjpeg librsvg pango gtk bzip2 - libraw libwebp gexiv2 + libpng + cairo + libjpeg + librsvg + lensfun + libspiro + netsurf.libnsgif + pango + poly2tri-c + bzip2 + libraw + libwebp + gexiv2 + luajit + openexr + ]; + + # for gegl-4.0.pc + propagatedBuildInputs = [ + glib + json-glib + babl + ]; + + mesonFlags = [ + "-Ddocs=true" + "-Dmrg=disabled" # not sure what that is + "-Dsdl2=disabled" + "-Dpygobject=disabled" + "-Dlibav=disabled" + "-Dlibv4l=disabled" + "-Dlibv4l2=disabled" + "-Dumfpack=disabled" ]; - propagatedBuildInputs = [ glib json-glib babl ]; # for gegl-4.0.pc + # TODO: Fix missing math symbols in gegl seamless clone. + # It only appears when we use packaged poly2tri-c instead of vendored one. + NIX_CFLAGS_COMPILE = [ "-lm" ]; - nativeBuildInputs = [ pkgconfig gettext which autoreconfHook libintl ]; + postPatch = '' + chmod +x tests/opencl/opencl_test.sh tests/buffer/buffer-tests-run.sh + patchShebangs tests/ff-load-save/tests_ff_load_save.sh tests/opencl/opencl_test.sh tests/buffer/buffer-tests-run.sh tools/xml_insert.sh + ''; + + doCheck = true; meta = with stdenv.lib; { description = "Graph-based image processing framework"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4f8303a85e8..a98e59e8b6c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3513,7 +3513,7 @@ in gnome-podcasts = callPackage ../applications/audio/gnome-podcasts { }; gnome-photos = callPackage ../applications/graphics/gnome-photos { - gegl = gnome3.gegl_0_4; + gegl = gegl_0_4; }; gnokii = callPackage ../tools/misc/gnokii { }; @@ -11063,9 +11063,7 @@ in inherit (darwin.apple_sdk.frameworks) OpenGL; }; - gegl_0_4 = callPackage ../development/libraries/gegl/4.0.nix { - gtk = res.gtk2; - }; + gegl_0_4 = callPackage ../development/libraries/gegl/4.0.nix { }; geoclue2 = callPackage ../development/libraries/geoclue {}; -- cgit 1.4.1 From c75c6b588ad37c4f300ee6055938a0b5ab7ee8a7 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Thu, 31 Oct 2019 21:53:28 +0100 Subject: gimp: 2.10.12 → 2.10.14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.gimp.org/news/2019/10/31/gimp-2-10-14-released/ --- pkgs/applications/graphics/gimp/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix index e3994b1b412..ef0348cbee7 100644 --- a/pkgs/applications/graphics/gimp/default.nix +++ b/pkgs/applications/graphics/gimp/default.nix @@ -9,11 +9,11 @@ let inherit (python2Packages) pygtk wrapPython python; in stdenv.mkDerivation rec { pname = "gimp"; - version = "2.10.12"; + version = "2.10.14"; src = fetchurl { url = "http://download.gimp.org/pub/gimp/v${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.bz2"; - sha256 = "0wdcr8d2ink4swn5r4v13bsiya6s3xm4ya97sdbhs4l40y7bb03x"; + sha256 = "0m6wdnfvsxyhimdd4v3351g4r1fklllnbipbwcfym3h7q88hz6yz"; }; nativeBuildInputs = [ pkgconfig intltool gettext wrapPython ]; -- cgit 1.4.1 From 43c3f471b8899eaf55e298f81b8cf79b65c0bf7d Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Thu, 31 Oct 2019 23:20:09 +0100 Subject: gimp: format with nixpkgs-format --- pkgs/applications/graphics/gimp/default.nix | 127 +++++++++++++++++++++++----- 1 file changed, 107 insertions(+), 20 deletions(-) diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix index ef0348cbee7..3eff5642f11 100644 --- a/pkgs/applications/graphics/gimp/default.nix +++ b/pkgs/applications/graphics/gimp/default.nix @@ -1,9 +1,50 @@ -{ stdenv, fetchurl, substituteAll, pkgconfig, intltool, babl, gegl, gtk2, glib, gdk-pixbuf, isocodes -, pango, cairo, freetype, fontconfig, lcms, libpng, libjpeg, poppler, poppler_data, libtiff -, libmng, librsvg, libwmf, zlib, libzip, ghostscript, aalib, shared-mime-info -, python2Packages, libexif, gettext, xorg, glib-networking, libmypaint, gexiv2 -, harfbuzz, mypaint-brushes, libwebp, libheif, libgudev, openexr -, AppKit, Cocoa, gtk-mac-integration-gtk2 }: +{ stdenv +, lib +, fetchurl +, substituteAll +, pkgconfig +, intltool +, babl +, gegl +, gtk2 +, glib +, gdk-pixbuf +, isocodes +, pango +, cairo +, freetype +, fontconfig +, lcms +, libpng +, libjpeg +, poppler +, poppler_data +, libtiff +, libmng +, librsvg +, libwmf +, zlib +, libzip +, ghostscript +, aalib +, shared-mime-info +, python2Packages +, libexif +, gettext +, xorg +, glib-networking +, libmypaint +, gexiv2 +, harfbuzz +, mypaint-brushes +, libwebp +, libheif +, libgudev +, openexr +, AppKit +, Cocoa +, gtk-mac-integration-gtk2 +}: let inherit (python2Packages) pygtk wrapPython python; @@ -12,20 +53,66 @@ in stdenv.mkDerivation rec { version = "2.10.14"; src = fetchurl { - url = "http://download.gimp.org/pub/gimp/v${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.bz2"; + url = "http://download.gimp.org/pub/gimp/v${lib.versions.majorMinor version}/${pname}-${version}.tar.bz2"; sha256 = "0m6wdnfvsxyhimdd4v3351g4r1fklllnbipbwcfym3h7q88hz6yz"; }; - nativeBuildInputs = [ pkgconfig intltool gettext wrapPython ]; - propagatedBuildInputs = [ gegl ]; # needed by gimp-2.0.pc + nativeBuildInputs = [ + pkgconfig + intltool + gettext + wrapPython + ]; + buildInputs = [ - babl gegl gtk2 glib gdk-pixbuf pango cairo gexiv2 harfbuzz isocodes - freetype fontconfig lcms libpng libjpeg poppler poppler_data libtiff openexr - libmng librsvg libwmf zlib libzip ghostscript aalib shared-mime-info libwebp libheif - python pygtk libexif xorg.libXpm glib-networking libmypaint mypaint-brushes - ] ++ stdenv.lib.optionals stdenv.isDarwin [ - AppKit Cocoa gtk-mac-integration-gtk2 - ] ++ stdenv.lib.optionals stdenv.isLinux [ libgudev ]; + babl + gegl + gtk2 + glib + gdk-pixbuf + pango + cairo + gexiv2 + harfbuzz + isocodes + freetype + fontconfig + lcms + libpng + libjpeg + poppler + poppler_data + libtiff + openexr + libmng + librsvg + libwmf + zlib + libzip + ghostscript + aalib + shared-mime-info + libwebp + libheif + python + pygtk + libexif + xorg.libXpm + glib-networking + libmypaint + mypaint-brushes + ] ++ lib.optionals stdenv.isDarwin [ + AppKit + Cocoa + gtk-mac-integration-gtk2 + ] ++ lib.optionals stdenv.isLinux [ + libgudev + ]; + + # needed by gimp-2.0.pc + propagatedBuildInputs = [ + gegl + ]; pythonPath = [ pygtk ]; @@ -48,7 +135,7 @@ in stdenv.mkDerivation rec { postFixup = '' wrapPythonProgramsIn $out/lib/gimp/${passthru.majorVersion}/plug-ins/ - wrapProgram $out/bin/gimp-${stdenv.lib.versions.majorMinor version} \ + wrapProgram $out/bin/gimp-${lib.versions.majorMinor version} \ --prefix PYTHONPATH : "$PYTHONPATH" \ --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" ''; @@ -56,7 +143,7 @@ in stdenv.mkDerivation rec { passthru = rec { # The declarations for `gimp-with-plugins` wrapper, # used for determining plug-in installation paths - majorVersion = "${stdenv.lib.versions.major version}.0"; + majorVersion = "${lib.versions.major version}.0"; targetPluginDir = "lib/gimp/${majorVersion}/plug-ins"; targetScriptDir = "lib/gimp/${majorVersion}/scripts"; @@ -76,9 +163,9 @@ in stdenv.mkDerivation rec { enableParallelBuilding = true; - meta = with stdenv.lib; { + meta = with lib; { description = "The GNU Image Manipulation Program"; - homepage = https://www.gimp.org/; + homepage = "https://www.gimp.org/"; maintainers = with maintainers; [ jtojnar ]; license = licenses.gpl3Plus; platforms = platforms.unix; -- cgit 1.4.1 From ae21a2bc60bb4338e8d13899605b2378c1d89c87 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sat, 2 Nov 2019 15:42:33 +0100 Subject: gimp-with-plugins: fix installing custom scripts script-fu (Scheme) scripts are not actually loaded from $GIMP2_PLUGINDIR (lib/gimp/2.10) but $GIMP_DATADIR (share/gimp/2.10). --- pkgs/applications/graphics/gimp/default.nix | 2 +- pkgs/applications/graphics/gimp/wrapper.nix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix index 3eff5642f11..e53deb99b5b 100644 --- a/pkgs/applications/graphics/gimp/default.nix +++ b/pkgs/applications/graphics/gimp/default.nix @@ -145,7 +145,7 @@ in stdenv.mkDerivation rec { # used for determining plug-in installation paths majorVersion = "${lib.versions.major version}.0"; targetPluginDir = "lib/gimp/${majorVersion}/plug-ins"; - targetScriptDir = "lib/gimp/${majorVersion}/scripts"; + targetScriptDir = "share/gimp/${majorVersion}/scripts"; # probably its a good idea to use the same gtk in plugins ? gtk = gtk2; diff --git a/pkgs/applications/graphics/gimp/wrapper.nix b/pkgs/applications/graphics/gimp/wrapper.nix index d58dc375cb9..841728d3a29 100644 --- a/pkgs/applications/graphics/gimp/wrapper.nix +++ b/pkgs/applications/graphics/gimp/wrapper.nix @@ -17,6 +17,7 @@ in symlinkJoin { for each in gimp-${versionBranch} gimp-console-${versionBranch}; do wrapProgram $out/bin/$each \ --set GIMP2_PLUGINDIR "$out/lib/gimp/2.0" \ + --set GIMP2_DATADIR "$out/share/gimp/2.0" \ --prefix GTK_PATH : "${gnome3.gnome-themes-extra}/lib/gtk-2.0" \ ${toString extraArgs} done -- cgit 1.4.1 From 8da26cc578eaea5b211d424e792408e29186c544 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 3 Nov 2019 04:35:30 +0100 Subject: gimp-with-plugins: install plug-ins into subdirs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GIMP 3 will require all plugins to be installed into their own subdirectories, so let’s just do that now. --- pkgs/applications/graphics/gimp/plugins/default.nix | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/graphics/gimp/plugins/default.nix b/pkgs/applications/graphics/gimp/plugins/default.nix index 2c520f21f84..c50d39548c9 100644 --- a/pkgs/applications/graphics/gimp/plugins/default.nix +++ b/pkgs/applications/graphics/gimp/plugins/default.nix @@ -8,22 +8,24 @@ let inherit (pkgs) stdenv fetchurl pkgconfig intltool glib fetchFromGitHub; inherit (gimp) targetPluginDir targetScriptDir; - pluginDerivation = a: stdenv.mkDerivation ({ + pluginDerivation = a: let + name = a.name or "${a.pname}-${a.version}"; + in stdenv.mkDerivation ({ prePhases = "extraLib"; extraLib = '' installScripts(){ - mkdir -p $out/${targetScriptDir}; - for p in "$@"; do cp "$p" $out/${targetScriptDir}; done + mkdir -p $out/${targetScriptDir}/${name}; + for p in "$@"; do cp "$p" -r $out/${targetScriptDir}/${name}; done } installPlugins(){ - mkdir -p $out/${targetPluginDir}; - for p in "$@"; do cp "$p" $out/${targetPluginDir}; done + mkdir -p $out/${targetPluginDir}/${name}; + for p in "$@"; do cp "$p" -r $out/${targetPluginDir}/${name}; done } ''; } // a // { - name = "gimp-plugin-${a.name or "${a.pname}-${a.version}"}"; + name = "gimp-plugin-${name}"; buildInputs = [ gimp gimp.gtk glib ] ++ (a.buildInputs or []); nativeBuildInputs = [ pkgconfig intltool ] ++ (a.nativeBuildInputs or []); } -- cgit 1.4.1 From a73ad445a9b4a96eb21b9ad51e0254f5931fe5de Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 3 Nov 2019 11:57:27 +0100 Subject: gimpPlugins.waveletSharpen: fix build --- pkgs/applications/graphics/gimp/plugins/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/applications/graphics/gimp/plugins/default.nix b/pkgs/applications/graphics/gimp/plugins/default.nix index c50d39548c9..a1bd7eac153 100644 --- a/pkgs/applications/graphics/gimp/plugins/default.nix +++ b/pkgs/applications/graphics/gimp/plugins/default.nix @@ -133,6 +133,7 @@ stdenv.lib.makeScope pkgs.newScope (self: with self; { Filters/Enhance/Wavelet sharpen */ name = "wavelet-sharpen-0.1.2"; + NIX_LDFLAGS = [ "-lm" ]; src = fetchurl { url = http://registry.gimp.org/files/wavelet-sharpen-0.1.2.tar.gz; sha256 = "0vql1k67i21g5ivaa1jh56rg427m0icrkpryrhg75nscpirfxxqw"; -- cgit 1.4.1 From 46818a55b1c3bc06d170d2dc21686d27e6e32d34 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 3 Nov 2019 12:01:36 +0100 Subject: gimpPlugins.gap: fix build --- pkgs/applications/graphics/gimp/plugins/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/applications/graphics/gimp/plugins/default.nix b/pkgs/applications/graphics/gimp/plugins/default.nix index a1bd7eac153..29835242193 100644 --- a/pkgs/applications/graphics/gimp/plugins/default.nix +++ b/pkgs/applications/graphics/gimp/plugins/default.nix @@ -48,6 +48,7 @@ stdenv.lib.makeScope pkgs.newScope (self: with self; { url = https://ftp.gimp.org/pub/gimp/plug-ins/v2.6/gap/gimp-gap-2.6.0.tar.bz2; sha256 = "1jic7ixcmsn4kx2cn32nc5087rk6g8xsrz022xy11yfmgvhzb0ql"; }; + NIX_LDFLAGS = [ "-lm" ]; patchPhase = '' sed -e 's,^\(GIMP_PLUGIN_DIR=\).*,\1'"$out/${gimp.name}-plugins", \ -e 's,^\(GIMP_DATA_DIR=\).*,\1'"$out/share/${gimp.name}", -i configure -- cgit 1.4.1 From e93c38ff7cc3500e771dde8488330545c660635e Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 3 Nov 2019 13:56:21 +0100 Subject: gimp-with-plugins: pass all script attributes to the pluginDerivation --- pkgs/applications/graphics/gimp/plugins/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/graphics/gimp/plugins/default.nix b/pkgs/applications/graphics/gimp/plugins/default.nix index 29835242193..c11910da568 100644 --- a/pkgs/applications/graphics/gimp/plugins/default.nix +++ b/pkgs/applications/graphics/gimp/plugins/default.nix @@ -31,10 +31,10 @@ let } ); - scriptDerivation = {name, src} : pluginDerivation { - inherit name; phases = "extraLib installPhase"; + scriptDerivation = {src, ...}@attrs : pluginDerivation ({ + phases = [ "extraLib" "installPhase" ]; installPhase = "installScripts ${src}"; - }; + } // attrs); in -- cgit 1.4.1 From f3a81474045e817192b860a45abf357d4a7c0aea Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 3 Nov 2019 13:57:25 +0100 Subject: gimpPlugin.exposureBlend: mark as broken It produces an error: GIMP-Error: Calling error for procedure 'gimp-image-get-active-layer': Procedure 'gimp-image-get-active-layer' has been called with an invalid ID for argument 'image'. Most likely a plug-in is trying to work on an image that doesn't exist any longer. (script-fu:25123): GLib-WARNING **: 12:41:03.500: (../glib/gerror.c:416):g_error_new_valist: runtime check failed: (domain != 0) script-fu-Warning: Error while loading /nix/store/31y1qiyg8fzn07yz6lrnkbja33298gmz-gimp-with-plugins-2.10.14/share/gimp/2.0/scripts/exposure-blend/nds9ds1m18d0wg1b01fch8wyzdwpmr8x-exposure-blend.scm: Error: (/nix/store/31y1qiyg8fzn07yz6lrnkbja33298gmz-gimp-with-plugins-2.10.14/share/gimp/2.0/scripts/exposure-blend/nds9ds1m18d0wg1b01fch8wyzdwpmr8x-exposure-blend.scm : 627) Procedure execution of gimp-image-get-active-layer failed on invalid input arguments: Procedure 'gimp-image-get-active-layer' has been called with an invalid ID for argument 'image'. Most likely a plug-in is trying to work on an image that doesn't exist any longer. --- pkgs/applications/graphics/gimp/plugins/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/applications/graphics/gimp/plugins/default.nix b/pkgs/applications/graphics/gimp/plugins/default.nix index c11910da568..29c1445b9ce 100644 --- a/pkgs/applications/graphics/gimp/plugins/default.nix +++ b/pkgs/applications/graphics/gimp/plugins/default.nix @@ -199,6 +199,7 @@ stdenv.lib.makeScope pkgs.newScope (self: with self; { url = http://tir.astro.utoledo.edu/jdsmith/code/eb/exposure-blend.scm; sha256 = "1b6c9wzpklqras4wwsyw3y3jp6fjmhnnskqiwm5sabs8djknfxla"; }; + meta.broken = true; }; lightning = scriptDerivation { -- cgit 1.4.1 From 5b96d9cf21904ccea0c590fa6adc17ee76d1ecdb Mon Sep 17 00:00:00 2001 From: Michael Eden Date: Sat, 16 Mar 2019 11:43:20 -0400 Subject: nodejs: cross compile runtime for ARM --- pkgs/development/web/nodejs/nodejs.nix | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/pkgs/development/web/nodejs/nodejs.nix b/pkgs/development/web/nodejs/nodejs.nix index 6dc68750075..ea23ad06cd2 100644 --- a/pkgs/development/web/nodejs/nodejs.nix +++ b/pkgs/development/web/nodejs/nodejs.nix @@ -53,12 +53,30 @@ in }; buildInputs = optionals stdenv.isDarwin [ CoreServices ApplicationServices ] - ++ [ python2 zlib libuv openssl http-parser icu ]; + ++ [ zlib libuv openssl http-parser icu ]; - nativeBuildInputs = [ which utillinux pkgconfig ] + nativeBuildInputs = [ which utillinux pkgconfig python2 ] ++ optionals stdenv.isDarwin [ xcbuild ]; - configureFlags = sharedConfigureFlags ++ [ "--without-dtrace" ] ++ extraConfigFlags; + configureFlags = let + isCross = stdenv.hostPlatform != stdenv.buildPlatform; + host = stdenv.hostPlatform.platform; + isArm = stdenv.hostPlatform.isArm; + in sharedConfigureFlags ++ [ + "--without-dtrace" + ] ++ (optionals isCross [ + "--cross-compiling" + "--without-intl" + "--without-snapshot" + ]) ++ (optionals (isCross && isArm && hasAttr "fpu" host.gcc) [ + "--with-arm-fpu=${host.gcc.fpu}" + ]) ++ (optionals (isCross && isArm && hasAttr "float-abi" host.gcc) [ + "--with-arm-float-abi=${host.gcc.float-abi}" + ]) ++ (optionals (isCross && isArm) [ + "--dest-cpu=arm" + ]) ++ extraConfigFlags; + + configurePlatforms = []; dontDisableStatic = true; @@ -96,7 +114,7 @@ in postInstall = '' PATH=$out/bin:$PATH patchShebangs $out - ${optionalString enableNpm '' + ${optionalString (enableNpm && stdenv.hostPlatform == stdenv.buildPlatform) '' mkdir -p $out/share/bash-completion/completions/ $out/bin/npm completion > $out/share/bash-completion/completions/npm for dir in "$out/lib/node_modules/npm/man/"*; do -- cgit 1.4.1 From 5b46a7c240fe9e22a673d7dbd107498e042b437b Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Tue, 6 Mar 2018 10:15:05 -0600 Subject: gcc7: make building w/LTO support optional, don't use in bootstrap tools --- pkgs/development/compilers/gcc/7/default.nix | 3 ++- pkgs/stdenv/linux/make-bootstrap-tools.nix | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/pkgs/development/compilers/gcc/7/default.nix b/pkgs/development/compilers/gcc/7/default.nix index 68c05d28978..39b3e4734fe 100644 --- a/pkgs/development/compilers/gcc/7/default.nix +++ b/pkgs/development/compilers/gcc/7/default.nix @@ -6,6 +6,7 @@ , profiledCompiler ? false , staticCompiler ? false , enableShared ? true +, enableLTO ? true , texinfo ? null , perl ? null # optional, for texi2pod (then pod2man) , gmp, mpfr, libmpc, gettext, which @@ -257,7 +258,7 @@ stdenv.mkDerivation ({ # Basic configuration [ - "--enable-lto" + (if enableLTO then "--enable-lto" else "--disable-lto") "--disable-libstdcxx-pch" "--without-included-gettext" "--with-system-zlib" diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index 8d513625df2..86503b96245 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -33,6 +33,8 @@ in with pkgs; rec { ''; }; + bootGCC = gcc.cc.override { enableLTO = false; }; + build = stdenv.mkDerivation { @@ -109,12 +111,12 @@ in with pkgs; rec { cp -d ${gnugrep.pcre.out}/lib/libpcre*.so* $out/lib # needed by grep # Copy what we need of GCC. - cp -d ${gcc.cc.out}/bin/gcc $out/bin - cp -d ${gcc.cc.out}/bin/cpp $out/bin - cp -d ${gcc.cc.out}/bin/g++ $out/bin - cp -d ${gcc.cc.lib}/lib/libgcc_s.so* $out/lib - cp -d ${gcc.cc.lib}/lib/libstdc++.so* $out/lib - cp -rd ${gcc.cc.out}/lib/gcc $out/lib + cp -d ${bootGCC.out}/bin/gcc $out/bin + cp -d ${bootGCC.out}/bin/cpp $out/bin + cp -d ${bootGCC.out}/bin/g++ $out/bin + cp -d ${bootGCC.lib}/lib/libgcc_s.so* $out/lib + cp -d ${bootGCC.lib}/lib/libstdc++.so* $out/lib + cp -rd ${bootGCC.out}/lib/gcc $out/lib chmod -R u+w $out/lib rm -f $out/lib/gcc/*/*/include*/linux rm -f $out/lib/gcc/*/*/include*/sound @@ -122,11 +124,11 @@ in with pkgs; rec { rm -f $out/lib/gcc/*/*/include-fixed/asm rm -rf $out/lib/gcc/*/*/plugin #rm -f $out/lib/gcc/*/*/*.a - cp -rd ${gcc.cc.out}/libexec/* $out/libexec + cp -rd ${bootGCC.out}/libexec/* $out/libexec chmod -R u+w $out/libexec rm -rf $out/libexec/gcc/*/*/plugin mkdir -p $out/include - cp -rd ${gcc.cc.out}/include/c++ $out/include + cp -rd ${bootGCC.out}/include/c++ $out/include chmod -R u+w $out/include rm -rf $out/include/c++/*/ext/pb_ds rm -rf $out/include/c++/*/ext/parallel -- cgit 1.4.1 From 78d3cb1d16b3b1df8862018784a2f5da50f218e5 Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Mon, 31 Dec 2018 13:56:07 -0600 Subject: binutils: offer "for bootstrap" variant that's less.. feature-complete --- pkgs/stdenv/linux/make-bootstrap-tools.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index 86503b96245..697082c01bc 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -34,6 +34,13 @@ in with pkgs; rec { }; bootGCC = gcc.cc.override { enableLTO = false; }; + bootBinutils = binutils.bintools.override { + withAllTargets = false; + # Don't need two linkers, disable whatever's not primary/default. + gold = false; + # bootstrap is easier w/static + enableShared = false; + }; build = @@ -150,7 +157,7 @@ in with pkgs; rec { # Copy binutils. for i in as ld ar ranlib nm strip readelf objdump; do - cp ${binutils.bintools.out}/bin/$i $out/bin + cp ${bootBinutils.out}/bin/$i $out/bin done cp '${lib.getLib binutils.bintools}'/lib/* "$out/lib/" -- cgit 1.4.1 From 43c721df4af4bb136a3a9504fce9d963efe67c39 Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Wed, 26 Sep 2018 16:50:25 -0500 Subject: make-bootstrap-tools: use 'extreme' option to reduce size but not cost Apparently this option trades compression time for size, and explicitly does so without increasing resources needed in decomp. Doesn't make tarball creation unbearable, so add it to options! --- pkgs/stdenv/linux/make-bootstrap-tools.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index 697082c01bc..0c285f9661e 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -181,7 +181,7 @@ in with pkgs; rec { mv $out/.pack $out/pack mkdir $out/on-server - XZ_OPT=-9 tar cvJf $out/on-server/bootstrap-tools.tar.xz --hard-dereference --sort=name --numeric-owner --owner=0 --group=0 --mtime=@1 -C $out/pack . + XZ_OPT="-9 -e" tar cvJf $out/on-server/bootstrap-tools.tar.xz --hard-dereference --sort=name --numeric-owner --owner=0 --group=0 --mtime=@1 -C $out/pack . cp ${busyboxMinimal}/bin/busybox $out/on-server chmod u+w $out/on-server/busybox nuke-refs $out/on-server/busybox -- cgit 1.4.1 From c424a9dec5199013f875e3e62432e2898167915e Mon Sep 17 00:00:00 2001 From: Franz Pletz Date: Sun, 3 Nov 2019 14:58:26 +0100 Subject: sshfs: fix fetchpatch hash --- pkgs/tools/filesystems/sshfs-fuse/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/filesystems/sshfs-fuse/default.nix b/pkgs/tools/filesystems/sshfs-fuse/default.nix index e01cb4dd702..33fc5ce2ab6 100644 --- a/pkgs/tools/filesystems/sshfs-fuse/default.nix +++ b/pkgs/tools/filesystems/sshfs-fuse/default.nix @@ -17,7 +17,7 @@ stdenv.mkDerivation rec { patches = [ (fetchpatch { url = "https://github.com/libfuse/sshfs/commit/a548abd1f33a8423bec72724a5f48eb96fa55dd2.patch"; - sha256 = "03rmks4bz06m9v8s5xjybvmcdw3d09x721jp4i6v0w8pfwsn98w1"; + sha256 = "19p94aw7nvydd7p2bd1f5cqhlhhamjhda31k22sg06xaqyl893jm"; }) ]; nativeBuildInputs = [ meson pkgconfig ninja docutils makeWrapper ]; -- cgit 1.4.1 From 8a1569d1c5813a2e56191f77fa83684360bc863f Mon Sep 17 00:00:00 2001 From: Mario Rodas Date: Sun, 3 Nov 2019 09:00:00 -0500 Subject: x11docker: add missing dependencies --- pkgs/applications/virtualization/x11docker/default.nix | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/pkgs/applications/virtualization/x11docker/default.nix b/pkgs/applications/virtualization/x11docker/default.nix index b2ebb2f82af..c57a7f6e771 100644 --- a/pkgs/applications/virtualization/x11docker/default.nix +++ b/pkgs/applications/virtualization/x11docker/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, makeWrapper, nx-libs, xorg }: +{ stdenv, fetchFromGitHub, makeWrapper, nx-libs, xorg, getopt, gnugrep, gawk, ps, mount, iproute }: stdenv.mkDerivation rec { pname = "x11docker"; version = "6.3.0"; @@ -9,18 +9,14 @@ stdenv.mkDerivation rec { sha256 = "0x2sx41y3ylzg511x52k3wh8mfbzp4ialpas6sn4ccagqxh2hc4y"; }; nativeBuildInputs = [ makeWrapper ]; - buildInputs = [ nx-libs xorg.xhost xorg.xinit ]; dontBuild = true; - PATH_PREFIX = "${nx-libs}/bin:${xorg.xdpyinfo}/bin:${xorg.xhost}/bin:${xorg.xinit}/bin"; - + # Don't install `x11docker-gui`, because requires `kaptain` dependency installPhase = '' install -D x11docker "$out/bin/x11docker"; - #install -D x11docker-gui "$out/bin/x11docker-gui"; - wrapProgram "$out/bin/x11docker" --prefix PATH : "${PATH_PREFIX}" - #wrapProgram "$out/bin/x11docker-gui" --prefix PATH : "${PATH_PREFIX}" - # GUI disabled because of missing `kaptain` dependency + wrapProgram "$out/bin/x11docker" \ + --prefix PATH : "${stdenv.lib.makeBinPath [ getopt gnugrep gawk ps mount iproute nx-libs xorg.xdpyinfo xorg.xhost xorg.xinit ]}" ''; meta = { @@ -28,5 +24,6 @@ stdenv.mkDerivation rec { homepage = https://github.com/mviereck/x11docker; license = stdenv.lib.licenses.mit; maintainers = with stdenv.lib.maintainers; [ jD91mZM2 ]; + platforms = stdenv.lib.platforms.linux; }; } -- cgit 1.4.1 From 0724efc30507f2dd9b47ace66f2126d8feaf73ff Mon Sep 17 00:00:00 2001 From: Jon Banafato Date: Sat, 26 Oct 2019 15:47:42 -0400 Subject: gnomeExtensions.night-theme-switcher: init at 2.1 --- .../extensions/night-theme-switcher/default.nix | 21 +++++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 2 files changed, 22 insertions(+) create mode 100644 pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix diff --git a/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix b/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix new file mode 100644 index 00000000000..8d3a775e949 --- /dev/null +++ b/pkgs/desktops/gnome-3/extensions/night-theme-switcher/default.nix @@ -0,0 +1,21 @@ +{ stdenv, fetchgit }: + +stdenv.mkDerivation rec { + pname = "gnome-shell-extension-night-theme-switcher"; + version = "2.1"; + + src = fetchgit { + url = "https://git.romainvigier.fr/Romain/nightthemeswitcher-gnome-shell-extension"; + rev = "v${version}"; + sha256 = "1md44vmc83cp35riszhdvysnvl8pmkcpf5j6n4i2b3wwcjwxqwfy"; + }; + + makeFlags = [ "GSEXT_DIR_LOCAL=${placeholder "out"}/share/gnome-shell/extensions" ]; + + meta = with stdenv.lib; { + description = "Automatically change the GTK theme to dark variant when Night Light activates"; + license = licenses.gpl3; + maintainers = with maintainers; [ jonafato ]; + homepage = https://git.romainvigier.fr/Romain/nightthemeswitcher-gnome-shell-extension; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b8bff39ae8f..06042a55668 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -22999,6 +22999,7 @@ in icon-hider = callPackage ../desktops/gnome-3/extensions/icon-hider { }; impatience = callPackage ../desktops/gnome-3/extensions/impatience.nix { }; mpris-indicator-button = callPackage ../desktops/gnome-3/extensions/mpris-indicator-button { }; + night-theme-switcher = callPackage ../desktops/gnome-3/extensions/night-theme-switcher { }; no-title-bar = callPackage ../desktops/gnome-3/extensions/no-title-bar { }; pidgin-im-integration = callPackage ../desktops/gnome-3/extensions/pidgin-im-integration { }; remove-dropdown-arrows = callPackage ../desktops/gnome-3/extensions/remove-dropdown-arrows { }; -- cgit 1.4.1 From 458964dea2ccdc65c245bc22af0e3b55687e9d6b Mon Sep 17 00:00:00 2001 From: Frederik Rietdijk Date: Sun, 3 Nov 2019 15:35:19 +0100 Subject: gcc8: make building w/LTO support optional, fixes eval --- pkgs/development/compilers/gcc/8/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index b84b8958325..52f568b2ed9 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -6,6 +6,7 @@ , profiledCompiler ? false , staticCompiler ? false , enableShared ? true +, enableLTO ? true , texinfo ? null , perl ? null # optional, for texi2pod (then pod2man) , gmp, mpfr, libmpc, gettext, which @@ -247,7 +248,7 @@ stdenv.mkDerivation ({ # Basic configuration [ - "--enable-lto" + (if enableLTO then "--enable-lto" else "--disable-lto") "--disable-libstdcxx-pch" "--without-included-gettext" "--with-system-zlib" -- cgit 1.4.1 From a88a2387244a5453c19b4a21cee123af37e05c5f Mon Sep 17 00:00:00 2001 From: Benjamin Andresen Date: Sun, 3 Nov 2019 16:20:54 +0100 Subject: clj-kondo: 2019.07.31-alpha -> 2019.10.26 --- pkgs/development/tools/clj-kondo/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/tools/clj-kondo/default.nix b/pkgs/development/tools/clj-kondo/default.nix index 919061c6d96..9b2e80c7674 100644 --- a/pkgs/development/tools/clj-kondo/default.nix +++ b/pkgs/development/tools/clj-kondo/default.nix @@ -2,7 +2,7 @@ stdenv.mkDerivation rec{ pname = "clj-kondo"; - version = "2019.07.31-alpha"; + version = "2019.10.26"; reflectionJson = fetchurl { name = "reflection.json"; @@ -12,7 +12,7 @@ stdenv.mkDerivation rec{ src = fetchurl { url = "https://github.com/borkdude/${pname}/releases/download/v${version}/${pname}-${version}-standalone.jar"; - sha256 = "03ipl7br9pgx2hdbiaxv9ip0ibafkyzkc8qlx8xyi528bcfi54bf"; + sha256 = "1pq03g4bkslpa3jv7vrnw3sy6wnqdgnavl8qyb4lb1y96pmk9hd1"; }; dontUnpack = true; @@ -46,6 +46,6 @@ stdenv.mkDerivation rec{ homepage = https://github.com/borkdude/clj-kondo; license = licenses.epl10; platforms = graalvm8.meta.platforms; - maintainers = with maintainers; [ jlesquembre ]; + maintainers = with maintainers; [ jlesquembre bandresen ]; }; } -- cgit 1.4.1 From a7b49ef140201c059f3108d25a58fb6f638b3ca8 Mon Sep 17 00:00:00 2001 From: Ruud van Asseldonk Date: Sun, 3 Nov 2019 16:23:11 +0100 Subject: acme-client: 0.1.16 -> 0.2.4 * acme-client: 0.1.16 -> 0.2.3 (#71853) The upstream acme-client that used to be at [1] has now been integrated into OpenBSD, and the portable version that it links to at [2] is marked as unmaintained. However, letsencrypt.org links to [3] for a portable version, and indeed, that repository contains a version that has recent activity, so I switched over to that. It is hard to tell what the difference is between the OpenBSD version and what is on Github, and even if that would be easy, there are a lot of Linux-specific changes. This program is dealing with certificates, so I feel it is important to at least check that thare are no obviously unintended differences between the previous version and the new, but I don't know of a good way of doing that at this point. I will continue to investigate before I open a pull request. [1]: https://kristaps.bsd.lv/acme-client/ [2]: https://github.com/kristapsdz/acme-client-portable [3]: https://github.com/graywolf/acme-client-portable * acme-client: fix Linux build of new upstream The new source does not include a configure script in the repository, but we can generate it with automake. Also, the new acme-client-portable has an OpenSSL compatibility layer, but that actually breaks building against LibreSSL. Avoid this issue by patching the compatibility layer to be less eager to define things when linking against LibreSSL. I will also submit a pull request for that upstream. I don't expect this to work on Darwin, and the current package suggests it does, but if the upstream (portable) version is no longer maintained, for Darwin, perhaps we should just drop support for it. But maybe it will just work, CI or somebody with a Darwin system will have to try. * acme-client: 0.2.3 -> 0.2.4 My LibreSSL compatibility patch has been merged upstream into acme-client-portable, and version 0.2.4 that includes it has been released, so we can remove the patch here. * acme-client: address review feedback * Replace the manual autoreconf invocation with autoreconfHook. * Remove DEFAULT_CA_FILE, which no longer affects the build. --- pkgs/tools/networking/acme-client/default.nix | 28 +++++++++++++-------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/pkgs/tools/networking/acme-client/default.nix b/pkgs/tools/networking/acme-client/default.nix index 60b3b6df69a..bf1c96b66b2 100644 --- a/pkgs/tools/networking/acme-client/default.nix +++ b/pkgs/tools/networking/acme-client/default.nix @@ -1,8 +1,8 @@ { stdenv +, fetchFromGitHub +, autoreconfHook +, bison , apple_sdk ? null -, cacert -, defaultCaFile ? "${cacert}/etc/ssl/certs/ca-bundle.crt" -, fetchurl , libbsd , libressl , pkgconfig @@ -12,24 +12,22 @@ with stdenv.lib; stdenv.mkDerivation rec { pname = "acme-client"; - version = "0.1.16"; + version = "0.2.4"; - src = fetchurl { - url = "https://kristaps.bsd.lv/acme-client/snapshots/acme-client-portable-${version}.tgz"; - sha256 = "00q05b3b1dfnfp7sr1nbd212n0mqrycl3cr9lbs51m7ncaihbrz9"; + src = fetchFromGitHub { + owner = "graywolf"; + repo = "acme-client-portable"; + rev = "v${version}"; + sha256 = "1yq2lkrnjwjs0h9mijqysnjmr7kp4zcq1f4cxr9n1db7pw8446xb"; }; - buildInputs = [ libbsd libressl pkgconfig ] - ++ optional stdenv.isDarwin apple_sdk.sdk; + nativeBuildInputs = [ autoreconfHook bison pkgconfig ]; + buildInputs = [ libbsd libressl ] ++ optional stdenv.isDarwin apple_sdk.sdk; - CFLAGS = "-DDEFAULT_CA_FILE='\"${defaultCaFile}\"'"; - - preConfigure = '' - export PREFIX="$out" - ''; + makeFlags = [ "PREFIX=${placeholder "out"}" ]; meta = { - homepage = https://kristaps.bsd.lv/acme-client/; + homepage = "https://github.com/graywolf/acme-client-portable"; description = "Secure ACME/Let's Encrypt client"; platforms = platforms.unix; license = licenses.isc; -- cgit 1.4.1 From 951176ecfc720917841bc642b777786f0babf3c6 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sun, 3 Nov 2019 07:26:06 -0800 Subject: yaru-theme: 19.10.2 -> 19.10.4 (#72709) --- pkgs/data/themes/yaru/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/data/themes/yaru/default.nix b/pkgs/data/themes/yaru/default.nix index 2302aa301e3..f83dbc3ebcc 100644 --- a/pkgs/data/themes/yaru/default.nix +++ b/pkgs/data/themes/yaru/default.nix @@ -3,13 +3,13 @@ stdenv.mkDerivation rec { pname = "yaru"; - version = "19.10.2"; + version = "19.10.4"; src = fetchFromGitHub { owner = "ubuntu"; repo = "yaru"; rev = version; - sha256 = "1azyn8pr0kpbq4wlz91f5amqyxqq0x2mxkglzl488sf39fl0gnbj"; + sha256 = "1dj6awlz13787783ds9mdid75rd4vvgpg52h6x19pxdga3k17s9b"; }; nativeBuildInputs = [ meson sassc pkg-config glib ninja python3 ]; -- cgit 1.4.1 From 1c2ac8d7e0617ef389e9d308109e4b2ce73d8772 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sun, 3 Nov 2019 04:01:53 -0800 Subject: yoshimi: 1.6.0.1 -> 1.6.0.2 --- pkgs/applications/audio/yoshimi/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/audio/yoshimi/default.nix b/pkgs/applications/audio/yoshimi/default.nix index 74a59c0e963..b8acaa5a7e4 100644 --- a/pkgs/applications/audio/yoshimi/default.nix +++ b/pkgs/applications/audio/yoshimi/default.nix @@ -6,11 +6,11 @@ assert stdenv ? glibc; stdenv.mkDerivation rec { pname = "yoshimi"; - version = "1.6.0.1"; + version = "1.6.0.2"; src = fetchurl { url = "mirror://sourceforge/yoshimi/${pname}-${version}.tar.bz2"; - sha256 = "140f2k4akj39pny8c7i794q125415gyvmy4rday0il5ncp3glik4"; + sha256 = "0q2cw168r53r50zghkdqcxba2cybn44axbdkwacvkm7ag2z0j2l8"; }; buildInputs = [ -- cgit 1.4.1 From 7153c484cd960c550cd8eedf4cf271994c121644 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sun, 3 Nov 2019 07:33:19 -0800 Subject: smplayer: 19.5.0 -> 19.10.0 * smplayer: 19.5.0 -> 19.10.0 (#72660) --- pkgs/applications/video/smplayer/default.nix | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkgs/applications/video/smplayer/default.nix b/pkgs/applications/video/smplayer/default.nix index 495fc6f6745..facb8fabe26 100644 --- a/pkgs/applications/video/smplayer/default.nix +++ b/pkgs/applications/video/smplayer/default.nix @@ -1,11 +1,12 @@ { lib, mkDerivation, fetchurl, qmake, qtscript }: mkDerivation rec { - name = "smplayer-19.5.0"; + pname = "smplayer"; + version = "19.10.0"; src = fetchurl { - url = "mirror://sourceforge/smplayer/${name}.tar.bz2"; - sha256 = "1xda9pbrc3dfbs71n5l8yszlcywz9456mwkv52vmn8lszhvjpjxm"; + url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2"; + sha256 = "0sq7hr10b4pbbi0y1q4mxs24h2lb042nv4rqr03r72bp57353xsl"; }; buildInputs = [ qtscript ]; @@ -13,13 +14,12 @@ mkDerivation rec { dontUseQmakeConfigure = true; - preConfigure = '' - makeFlags="PREFIX=$out" - ''; + makeFlags = [ "PREFIX=${placeholder "out"}" ]; meta = { description = "A complete front-end for MPlayer"; - homepage = http://smplayer.sourceforge.net/; + longDescription = "Either mplayer or mpv should also be installed for smplayer to play medias"; + homepage = https://www.smplayer.info; license = lib.licenses.gpl3Plus; platforms = lib.platforms.linux; }; -- cgit 1.4.1 From 73523e026e894e576a6fd8c1cbf7c0cf46aaab39 Mon Sep 17 00:00:00 2001 From: Renaud Date: Sun, 3 Nov 2019 16:44:17 +0100 Subject: shellinabox: fix CVE-2018-16789 (#72620) --- pkgs/servers/shellinabox/default.nix | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pkgs/servers/shellinabox/default.nix b/pkgs/servers/shellinabox/default.nix index af1992fc869..fe1837e907a 100644 --- a/pkgs/servers/shellinabox/default.nix +++ b/pkgs/servers/shellinabox/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, autoreconfHook, pam, openssl, openssh, shadow, makeWrapper }: +{ stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pam, openssl, openssh, shadow, makeWrapper }: stdenv.mkDerivation rec { version = "2.20"; @@ -11,10 +11,17 @@ stdenv.mkDerivation rec { sha256 = "1hmfayh21cks2lyj572944ll0mmgsxbnj981b3hq3nhdg8ywzjfr"; }; - patches = [ ./shellinabox-minus.patch ]; + patches = [ + ./shellinabox-minus.patch + (fetchpatch { + name = "CVE-2018-16789.patch"; + url = "https://github.com/shellinabox/shellinabox/commit/4f0ecc31ac6f985e0dd3f5a52cbfc0e9251f6361.patch"; + sha256 = "1mpm6acxdb0fms9pa2b88fx6hp07ph87ahxi82yyqj2m7p79jx7a"; + }) + ]; - nativeBuildInputs = [ autoreconfHook ]; - buildInputs = [ pam openssl openssh makeWrapper ]; + nativeBuildInputs = [ autoreconfHook makeWrapper ]; + buildInputs = [ pam openssl openssh ]; # Disable GSSAPIAuthentication errors. Also, paths in certain source files are # hardcoded. Replace the hardcoded paths with correct paths. -- cgit 1.4.1 From 9a4ae42195eb99ce2525a458eb40e56471604436 Mon Sep 17 00:00:00 2001 From: Terje Larsen Date: Sun, 3 Nov 2019 16:28:54 +0100 Subject: Revert "python: pg8000: 1.12.5 -> 1.13.2" This reverts commit 35bdea0d6c224a5f1d1cbe8e6ba4ce67959ddbed. --- pkgs/development/python-modules/pg8000/1_12.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/pg8000/1_12.nix b/pkgs/development/python-modules/pg8000/1_12.nix index 444da7adc23..efeee5e077f 100644 --- a/pkgs/development/python-modules/pg8000/1_12.nix +++ b/pkgs/development/python-modules/pg8000/1_12.nix @@ -7,11 +7,11 @@ buildPythonPackage rec { pname = "pg8000"; - version = "1.13.2"; + version = "1.12.5"; src = fetchPypi { inherit pname version; - sha256 = "eebcb4176a7e407987e525a07454882f611985e0becb2b73f76efb93bbdc0aab"; + sha256 = "1yc3knh28cx3rjb2ifg5kmqqa78yyyw2gzzslbm9fj0mzh5aq1sx"; }; propagatedBuildInputs = [ pytz six ]; -- cgit 1.4.1 From 4792479a4133faa6998acdd417931d0cac4d40cc Mon Sep 17 00:00:00 2001 From: Jan Hrnko Date: Sun, 3 Nov 2019 16:43:57 +0100 Subject: dokuwiki: init at stable_2018-04-22b --- pkgs/servers/web-apps/dokuwiki/default.nix | 26 ++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 28 insertions(+) create mode 100644 pkgs/servers/web-apps/dokuwiki/default.nix diff --git a/pkgs/servers/web-apps/dokuwiki/default.nix b/pkgs/servers/web-apps/dokuwiki/default.nix new file mode 100644 index 00000000000..ff6fa982228 --- /dev/null +++ b/pkgs/servers/web-apps/dokuwiki/default.nix @@ -0,0 +1,26 @@ +{ stdenv, fetchFromGitHub }: + +stdenv.mkDerivation rec { + pname = "dokuwiki"; + version = "2018-04-22b"; + + src = fetchFromGitHub { + owner = "splitbrain"; + repo = "${pname}"; + rev = "release_stable_${version}"; + sha256 = "1na5pn4j4mi2la80ywzg1krwqdxz57mjkw0id6ga9rws809gkdjp"; + }; + + installPhase = '' + mkdir -p $out/share/dokuwiki + cp -r * $out/share/dokuwiki + ''; + + meta = with stdenv.lib; { + description = "Simple to use and highly versatile Open Source wiki software that doesn't require a database"; + license = licenses.gpl2; + homepage = "https://www.dokuwiki.org"; + platforms = platforms.all; + maintainers = [ maintainers."1000101" ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8de68c6e924..f6b1ff0ea3d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1555,6 +1555,8 @@ in doitlive = callPackage ../tools/misc/doitlive { }; + dokuwiki = callPackage ../servers/web-apps/dokuwiki { }; + dosage = callPackage ../applications/graphics/dosage { pythonPackages = python3Packages; }; -- cgit 1.4.1 From c4aff4c03abcb3b888c52f94dd102831cc60a768 Mon Sep 17 00:00:00 2001 From: Benjamin Andresen Date: Sun, 3 Nov 2019 16:54:46 +0100 Subject: calibre: add markdown to inputs fixes #72724 --- pkgs/applications/misc/calibre/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/misc/calibre/default.nix b/pkgs/applications/misc/calibre/default.nix index b2c54105946..22ae573353e 100644 --- a/pkgs/applications/misc/calibre/default.nix +++ b/pkgs/applications/misc/calibre/default.nix @@ -47,7 +47,7 @@ mkDerivation rec { poppler_utils libpng imagemagick libjpeg fontconfig podofo qtbase chmlib icu sqlite libusb1 libmtp xdg_utils ] ++ (with pypkgs; [ - apsw cssselect css-parser dateutil dnspython html5-parser lxml netifaces pillow + apsw cssselect css-parser dateutil dnspython html5-parser lxml markdown netifaces pillow python pyqt5_with_qtwebkit sip regex msgpack beautifulsoup4 html2text # the following are distributed with calibre, but we use upstream instead -- cgit 1.4.1 From 3f2bdec5068ab5eda127ee65d407ff169cbe4e12 Mon Sep 17 00:00:00 2001 From: Alkeryn Date: Sun, 3 Nov 2019 17:02:02 +0100 Subject: sdrangel: 4.11.7 -> 4.11.12 --- pkgs/applications/radio/sdrangel/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/radio/sdrangel/default.nix b/pkgs/applications/radio/sdrangel/default.nix index 346c6aeed8e..7cb64f92f3f 100644 --- a/pkgs/applications/radio/sdrangel/default.nix +++ b/pkgs/applications/radio/sdrangel/default.nix @@ -39,7 +39,7 @@ let in mkDerivation rec { pname = "sdrangel"; - version = "4.11.7"; + version = "4.11.12"; src = fetchFromGitHub { owner = "f4exb"; -- cgit 1.4.1 From f3b8d9bae3589e2c6a6804295b9fc6d21eaac0db Mon Sep 17 00:00:00 2001 From: Marek Mahut Date: Sun, 3 Nov 2019 17:24:08 +0100 Subject: nixos/trac: service init --- nixos/modules/module-list.nix | 1 + nixos/modules/services/web-apps/trac.nix | 79 ++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 nixos/modules/services/web-apps/trac.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index df6e4dc1336..164c6dda75e 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -814,6 +814,7 @@ ./services/web-apps/matomo.nix ./services/web-apps/restya-board.nix ./services/web-apps/tt-rss.nix + ./services/web-apps/trac.nix ./services/web-apps/selfoss.nix ./services/web-apps/shiori.nix ./services/web-apps/virtlyst.nix diff --git a/nixos/modules/services/web-apps/trac.nix b/nixos/modules/services/web-apps/trac.nix new file mode 100644 index 00000000000..207fb857438 --- /dev/null +++ b/nixos/modules/services/web-apps/trac.nix @@ -0,0 +1,79 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.services.trac; + + inherit (lib) mkEnableOption mkIf mkOption types; + +in { + + options = { + + services.trac = { + enable = mkEnableOption "Trac service"; + + listen = { + ip = mkOption { + type = types.str; + default = "0.0.0.0"; + description = '' + IP address that Trac should listen on. + ''; + }; + + port = mkOption { + type = types.port; + default = 8000; + description = '' + Listen port for Trac. + ''; + }; + }; + + dataDir = mkOption { + default = "/var/lib/trac"; + type = types.path; + description = '' + The directory for storing the Trac data. + ''; + }; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = '' + Open ports in the firewall for Trac. + ''; + }; + }; + + }; + + config = mkIf cfg.enable { + + systemd.services.trac = { + description = "Trac server"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + DynamicUser = true; + StateDirectory = baseNameOf cfg.dataDir; + ExecStart = '' + ${pkgs.trac}/bin/tracd -s \ + -b ${toString cfg.listen.ip} \ + -p ${toString cfg.listen.port} \ + ${cfg.dataDir} + ''; + }; + preStart = '' + if [ ! -e ${cfg.dataDir}/VERSION ]; then + ${pkgs.trac}/bin/trac-admin ${cfg.dataDir} initenv Trac "sqlite:db/trac.db" + fi + ''; + }; + + networking.firewall = mkIf cfg.openFirewall { + allowedTCPPorts = [ cfg.listen.port ]; + }; + + }; +} -- cgit 1.4.1 From e71b1e3363831a1ae0ded2963142a853cc1e926f Mon Sep 17 00:00:00 2001 From: Marek Mahut Date: Sun, 3 Nov 2019 17:24:22 +0100 Subject: tests: adding trac --- nixos/tests/all-tests.nix | 1 + nixos/tests/trac.nix | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 nixos/tests/trac.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 744d7ed0f83..1b5e0f52084 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -280,6 +280,7 @@ in tinydns = handleTest ./tinydns.nix {}; tor = handleTest ./tor.nix {}; transmission = handleTest ./transmission.nix {}; + trac = handleTest ./trac.nix {}; trezord = handleTest ./trezord.nix {}; trickster = handleTest ./trickster.nix {}; udisks2 = handleTest ./udisks2.nix {}; diff --git a/nixos/tests/trac.nix b/nixos/tests/trac.nix new file mode 100644 index 00000000000..643095d947e --- /dev/null +++ b/nixos/tests/trac.nix @@ -0,0 +1,19 @@ +import ./make-test.nix ({ pkgs, ... }: { + name = "trac"; + meta = with pkgs.stdenv.lib.maintainers; { + maintainers = [ mmahut ]; + }; + + nodes = { + machine = { ... }: { + services.trac.enable = true; + }; + }; + + testScript = '' + startAll; + $machine->waitForUnit("trac.service"); + $machine->waitForOpenPort(8000); + $machine->waitUntilSucceeds("curl -L http://localhost:8000/ | grep 'Trac Powered'"); + ''; +}) -- cgit 1.4.1 From 1af9ccccb0ab26620df4b82e2e5f5519d5b2200c Mon Sep 17 00:00:00 2001 From: Gabriel Ebner Date: Sun, 3 Nov 2019 10:57:15 +0100 Subject: linuxPackages.digimend: init at unstable-2019-06-18 --- pkgs/os-specific/linux/digimend/default.nix | 45 +++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 47 insertions(+) create mode 100644 pkgs/os-specific/linux/digimend/default.nix diff --git a/pkgs/os-specific/linux/digimend/default.nix b/pkgs/os-specific/linux/digimend/default.nix new file mode 100644 index 00000000000..40f801881fc --- /dev/null +++ b/pkgs/os-specific/linux/digimend/default.nix @@ -0,0 +1,45 @@ +{ stdenv, fetchFromGitHub, kernel }: + +assert stdenv.lib.versionAtLeast kernel.version "3.5"; + +stdenv.mkDerivation rec { + pname = "digimend"; + version = "unstable-2019-06-18"; + + src = fetchFromGitHub { + owner = "digimend"; + repo = "digimend-kernel-drivers"; + rev = "8b228a755e44106c11f9baaadb30ce668eede5d4"; + sha256 = "1l54j85540386a8aypqka7p5hy1b63cwmpsscv9rmmf10f78v8mm"; + }; + + INSTALL_MOD_PATH = "\${out}"; + + postPatch = '' + sed 's/udevadm /true /' -i Makefile + sed 's/depmod /true /' -i Makefile + ''; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + postInstall = '' + # Remove module reload hack. + # The hid-rebind unloads and then reloads the hid-* module to ensure that + # the extra/ module is loaded. + rm -r $out/lib/udev + ''; + + makeFlags = [ + "KVERSION=${kernel.modDirVersion}" + "KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "DESTDIR=${placeholder "out"}" + ]; + + meta = with stdenv.lib; { + description = "DIGImend graphics tablet drivers for the Linux kernel"; + homepage = "https://digimend.github.io/"; + license = licenses.gpl2; + maintainers = with maintainers; [ gebner ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6c9a78ab6f0..2a9e38f53cf 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -16120,6 +16120,8 @@ in deepin-anything = callPackage ../os-specific/linux/deepin-anything { }; + digimend = callPackage ../os-specific/linux/digimend { }; + dpdk = callPackage ../os-specific/linux/dpdk { }; exfat-nofuse = callPackage ../os-specific/linux/exfat { }; -- cgit 1.4.1 From a0e4ee31116bc235cdb5430f9c253231403f0596 Mon Sep 17 00:00:00 2001 From: Gabriel Ebner Date: Sun, 3 Nov 2019 10:57:29 +0100 Subject: aggregateModules: support depmod.d configuration --- pkgs/os-specific/linux/kmod/aggregator.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kmod/aggregator.nix b/pkgs/os-specific/linux/kmod/aggregator.nix index 4da87a557cb..cd138f1d7f5 100644 --- a/pkgs/os-specific/linux/kmod/aggregator.nix +++ b/pkgs/os-specific/linux/kmod/aggregator.nix @@ -29,7 +29,7 @@ buildEnv { # kernel version number, otherwise depmod will use `uname -r'. if test -w $out/lib/modules/$kernelVersion; then rm -f $out/lib/modules/$kernelVersion/modules.!(builtin*|order*) - ${kmod}/bin/depmod -b $out -a $kernelVersion + ${kmod}/bin/depmod -b $out -C $out/etc/depmod.d -a $kernelVersion fi ''; } -- cgit 1.4.1 From c2b54c59e804d4755407add9147e2c5108cf051e Mon Sep 17 00:00:00 2001 From: Gabriel Ebner Date: Sun, 3 Nov 2019 10:58:15 +0100 Subject: nixos/digimend: init module --- nixos/modules/module-list.nix | 1 + nixos/modules/services/x11/hardware/digimend.nix | 43 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 nixos/modules/services/x11/hardware/digimend.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index e181cecced7..b70e732edf8 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -863,6 +863,7 @@ ./services/x11/hardware/multitouch.nix ./services/x11/hardware/synaptics.nix ./services/x11/hardware/wacom.nix + ./services/x11/hardware/digimend.nix ./services/x11/hardware/cmt.nix ./services/x11/gdk-pixbuf.nix ./services/x11/redshift.nix diff --git a/nixos/modules/services/x11/hardware/digimend.nix b/nixos/modules/services/x11/hardware/digimend.nix new file mode 100644 index 00000000000..a9f5640905a --- /dev/null +++ b/nixos/modules/services/x11/hardware/digimend.nix @@ -0,0 +1,43 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.xserver.digimend; + + pkg = config.boot.kernelPackages.digimend; + +in + +{ + + options = { + + services.xserver.digimend = { + + enable = mkOption { + default = false; + description = '' + Whether to enable the digimend drivers for Huion/XP-Pen/etc. tablets. + ''; + }; + + }; + + }; + + + config = mkIf cfg.enable { + + # digimend drivers use xsetwacom and wacom X11 drivers + services.xserver.wacom.enable = true; + + boot.extraModulePackages = [ pkg ]; + + environment.etc."X11/xorg.conf.d/50-digimend.conf".source = + "${pkg}/usr/share/X11/xorg.conf.d/50-digimend.conf"; + + }; + +} -- cgit 1.4.1 From d6cf4946da1f79667e01ea4a5defb17ebe015458 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Sun, 3 Nov 2019 11:41:01 -0500 Subject: pantheon.elementary-gtk-theme: 5.2.5 -> 5.3.0 https://github.com/elementary/stylesheet/releases/tag/5.3.0 --- pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix b/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix index fe9db999bb6..34a87a6cb16 100644 --- a/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix +++ b/pkgs/desktops/pantheon/artwork/elementary-gtk-theme/default.nix @@ -3,11 +3,12 @@ , pantheon , meson , ninja +, gettext }: stdenv.mkDerivation rec { pname = "elementary-gtk-theme"; - version = "5.2.5"; + version = "5.3.0"; repoName = "stylesheet"; @@ -15,7 +16,7 @@ stdenv.mkDerivation rec { owner = "elementary"; repo = repoName; rev = version; - sha256 = "0934rfdwkn4315mhayzba8a3b6i1xczp66gl6n45hh5c81gb2p65"; + sha256 = "0kxzgqgzbkwi0h4r7zc5yl57k8cm165d1ki1nzmb442wp42q438y"; }; passthru = { @@ -26,6 +27,7 @@ stdenv.mkDerivation rec { }; nativeBuildInputs = [ + gettext meson ninja ]; -- cgit 1.4.1 From d296e58f6dcfbed9589d9e2ed1ff2d480982148f Mon Sep 17 00:00:00 2001 From: gnidorah Date: Wed, 30 Oct 2019 22:29:51 +0300 Subject: mame: init at 0.215 --- pkgs/misc/emulators/mame/default.nix | 59 ++++++++++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 61 insertions(+) create mode 100644 pkgs/misc/emulators/mame/default.nix diff --git a/pkgs/misc/emulators/mame/default.nix b/pkgs/misc/emulators/mame/default.nix new file mode 100644 index 00000000000..499d7dd6c4a --- /dev/null +++ b/pkgs/misc/emulators/mame/default.nix @@ -0,0 +1,59 @@ +{ stdenv, mkDerivation, fetchFromGitHub, makeDesktopItem +, python, pkgconfig, SDL2, SDL2_ttf, alsaLib, which, qtbase, libXinerama }: + +let + majorVersion = "0"; + minorVersion = "215"; + + desktopItem = makeDesktopItem { + name = "MAME"; + exec = "mame${stdenv.lib.optionalString stdenv.is64bit "64"}"; + desktopName = "MAME"; + genericName = "MAME is a multi-purpose emulation framework"; + categories = "System;Emulator;"; + }; +in mkDerivation { + pname = "mame"; + version = "${majorVersion}.${minorVersion}"; + + src = fetchFromGitHub { + owner = "mamedev"; + repo = "mame"; + rev = "mame${majorVersion}${minorVersion}"; + sha256 = "1phz846p3zzgzrbfiq2vn79iqar2dbf7iv6wfkrp32sdkkvp7l3h"; + }; + + hardeningDisable = [ "fortify" ]; + NIX_CFLAGS_COMPILE = [ "-Wno-error=maybe-uninitialized" ]; + + makeFlags = [ "TOOLS=1" ]; + + buildInputs = [ SDL2 SDL2_ttf alsaLib qtbase libXinerama ]; + nativeBuildInputs = [ python pkgconfig which ]; + + installPhase = '' + dest=$out/opt/mame + + make -f dist.mak PTR64=${if stdenv.is64bit then "1" else "0"} + mkdir -p $dest + mv build/release/${if stdenv.is64bit then "x64" else "x32"}/Release/mame/* $dest + + mkdir -p $out/bin + find $dest -maxdepth 1 -executable -type f -exec mv -t $out/bin {} \; + + mkdir -p $out/share/man/man{1,6} + mv $dest/docs/man/*.1 $out/share/man/man1 + mv $dest/docs/man/*.6 $out/share/man/man6 + + mkdir -p $out/share + ln -s ${desktopItem}/share/applications $out/share + ''; + + meta = with stdenv.lib; { + description = "Is a multi-purpose emulation framework"; + homepage = https://www.mamedev.org/; + license = with licenses; [ bsd3 gpl2Plus ]; + platforms = [ "x86_64-linux" "i686-linux" ]; + maintainers = with maintainers; [ gnidorah ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 42203a18847..b5f9cc462ff 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24311,6 +24311,8 @@ in icu = icu58; }; + mame = libsForQt5.callPackage ../misc/emulators/mame { }; + martyr = callPackage ../development/libraries/martyr { }; mess = callPackage ../misc/emulators/mess { -- cgit 1.4.1 From f73694a64a51586b71fd86837592b794c1fc420e Mon Sep 17 00:00:00 2001 From: gnidorah Date: Wed, 30 Oct 2019 22:32:30 +0300 Subject: mess: drop MAME and MESS are now combined as one distribution as of the 0.162 release and offered as a MAME binary (MESS is included in the build). --- pkgs/misc/emulators/mess/default.nix | 49 ------------------------------------ pkgs/top-level/aliases.nix | 1 + pkgs/top-level/all-packages.nix | 4 --- 3 files changed, 1 insertion(+), 53 deletions(-) delete mode 100644 pkgs/misc/emulators/mess/default.nix diff --git a/pkgs/misc/emulators/mess/default.nix b/pkgs/misc/emulators/mess/default.nix deleted file mode 100644 index fc63bf705f4..00000000000 --- a/pkgs/misc/emulators/mess/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ stdenv, fetchurl, unzip, pkgconfig, SDL, gtk2, GConf, libGLU_combined -, expat, zlib }: - -let - - version = "139"; - - mameSrc = fetchurl { - url = "https://github.com/mamedev/mame/releases/download/mame0139/mame0${version}s.zip"; - sha256 = "1mpkwxfz38cgxzvlni2y3fxas3b8qmnzj2ik2zzbd8mr622jdp79"; - }; - - messSrc = fetchurl { - url = "http://www.progettosnaps.net/MESS/src/mess0${version}s.zip"; - name = "mess0139s.zip"; - sha256 = "1v892cg6wn8cdwc8pf1gcqqdb1v1v295r6jw2hf58svwx3h27xyy"; - }; - -in - -stdenv.mkDerivation { - name = "mess-0.${version}"; - - unpackPhase = - '' - unzip ${mameSrc} - # Yes, the MAME distribution is a zip file containing a zip file... - unzip mame.zip - unzip -o ${messSrc} - ''; - - makeFlags = "TARGET=mess BUILD_EXPAT= BUILD_ZLIB= NOWERROR=1"; - - buildInputs = - [ unzip pkgconfig SDL gtk2 GConf libGLU_combined expat zlib ]; - - installPhase = - '' - mkdir -p $out/bin - cp mess* $out/bin/mess - ''; - - meta = { - homepage = https://www.mess.org/; - license = "non-commercial"; - description = "Multi Emulator Super System, an emulator of many game consoles and computer systems"; - broken = true; - }; -} diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index d443f81d44b..0b7ccb55873 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -209,6 +209,7 @@ mapAliases ({ man_db = man-db; # added 2016-05 manpages = man-pages; # added 2015-12-06 mariadb-client = hiPrio mariadb.client; #added 2019.07.28 + mess = mame; # added 2019-10-30 mysql-client = hiPrio mariadb.client; memtest86 = memtest86plus; # added 2019-05-08 mesa_noglu = mesa; # added 2019-05-28 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b5f9cc462ff..3e3457589e4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24315,10 +24315,6 @@ in martyr = callPackage ../development/libraries/martyr { }; - mess = callPackage ../misc/emulators/mess { - inherit (pkgs.gnome2) GConf; - }; - moltengamepad = callPackage ../misc/drivers/moltengamepad { }; openzwave = callPackage ../development/libraries/openzwave { }; -- cgit 1.4.1 From cf17479caa8e7d366af602943c095598773b605b Mon Sep 17 00:00:00 2001 From: gnidorah Date: Wed, 30 Oct 2019 22:35:04 +0300 Subject: sdlmame: drop There are no longer separate programs called SDLMAME or SDLMESS. Instead, the SDL capability is included in MAME and MESS, and the makefile will auto-detect if you are on a non-Windows system and run accordingly. --- pkgs/games/sdlmame/default.nix | 42 ----------------------------------------- pkgs/top-level/aliases.nix | 1 + pkgs/top-level/all-packages.nix | 2 -- 3 files changed, 1 insertion(+), 44 deletions(-) delete mode 100644 pkgs/games/sdlmame/default.nix diff --git a/pkgs/games/sdlmame/default.nix b/pkgs/games/sdlmame/default.nix deleted file mode 100644 index 7811b4b7373..00000000000 --- a/pkgs/games/sdlmame/default.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ stdenv, fetchurl, alsaLib, qt48, SDL, fontconfig, freetype, SDL_ttf, xorg }: - -stdenv.mkDerivation rec { - version = "0.151.u0-1"; - pname = "sdlmame"; - - src = if stdenv.hostPlatform.system == "x86_64-linux" - then fetchurl { - url = "http://seblu.net/a/archive/packages/s/sdlmame/${pname}-${version}-x86_64.pkg.tar.xz"; - sha256 = "1j9vjxhrhsskrlk5wr7al4wk2hh3983kcva42mqal09bmc8qg3m9"; - } - else fetchurl { - url = "http://seblu.net/a/archive/packages/s/sdlmame/${pname}-${version}-i686.pkg.tar.xz"; - sha256 = "1i38j9ml66pyxzm0zzf1fv4lb40f6w47cdgaw846q91pzakkkqn7"; - }; - - buildPhase = '' - sed -i "s|/usr|$out|" bin/sdlmame - ''; - - installPhase = '' - patchelf \ - --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - --set-rpath "${stdenv.lib.makeLibraryPath [ alsaLib qt48 SDL fontconfig freetype SDL_ttf xorg.libX11 xorg.libXinerama stdenv.cc.cc ]}" \ - share/sdlmame/sdlmame - - mkdir -p "$out/bin" - cp -r bin/sdlmame "$out/bin" - cp -r share "$out" - ''; - - dontPatchELF = true; - dontStrip = true; - - meta = with stdenv.lib; { - homepage = http://sdlmame.lngn.net; - description = "A port of the popular Multiple Arcade Machine Emulator using SDL with OpenGL support"; - license = "MAME"; - maintainers = with maintainers; [ lovek323 ]; - platforms = [ "x86_64-linux" "i686-linux" ]; - }; -} diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 0b7ccb55873..29f14a7754b 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -336,6 +336,7 @@ mapAliases ({ sapic = throw "deprecated 2019-1-19: sapic is bundled with 'tamarin-prover' now"; scim = sc-im; # added 2016-01-22 scollector = bosun; # added 2018-04-25 + sdlmame = mame; # added 2019-10-30 shared_mime_info = shared-mime-info; # added 2018-02-25 skrooge2 = skrooge; # added 2017-02-18 skype = skypeforlinux; # added 2017-07-27 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3e3457589e4..9e2372ee7b0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -22739,8 +22739,6 @@ in scrolls = callPackage ../games/scrolls { }; - sdlmame = callPackage ../games/sdlmame { }; - service-wrapper = callPackage ../os-specific/linux/service-wrapper { }; sgtpuzzles = callPackage (callPackage ../games/sgt-puzzles) { }; -- cgit 1.4.1 From 71184f8e157672789602d3f28bdd3c8079800687 Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sun, 3 Nov 2019 17:40:43 +0000 Subject: stdenv/check-meta: getEnv if the attribute is unset (#72376) There were two issues: * builtins.getEnv was called deep into the nixpkgs tree making it hard to discover. This is solved by moving the call into pkgs/top-level/impure.nix * when the config was explicitly set by the user to false, it would still try and load the environment variable. This meant that it was not possible to guarantee the same outcome on two different systems. --- pkgs/stdenv/generic/check-meta.nix | 11 ++++------- pkgs/top-level/impure.nix | 13 ++++++++++++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index 6bd6a9bf41e..85a1051ceed 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -13,8 +13,7 @@ let # for why this defaults to false, but I (@copumpkin) want to default it to true soon. shouldCheckMeta = config.checkMeta or false; - allowUnfree = config.allowUnfree or false - || builtins.getEnv "NIXPKGS_ALLOW_UNFREE" == "1"; + allowUnfree = config.allowUnfree or false; whitelist = config.whitelistedLicenses or []; blacklist = config.blacklistedLicenses or []; @@ -41,11 +40,9 @@ let hasBlacklistedLicense = assert areLicenseListsValid; attrs: hasLicense attrs && lib.lists.any (l: builtins.elem l blacklist) (lib.lists.toList attrs.meta.license); - allowBroken = config.allowBroken or false - || builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1"; + allowBroken = config.allowBroken or false; - allowUnsupportedSystem = config.allowUnsupportedSystem or false - || builtins.getEnv "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" == "1"; + allowUnsupportedSystem = config.allowUnsupportedSystem or false; isUnfree = licenses: lib.lists.any (l: !l.free or true) licenses; @@ -73,7 +70,7 @@ let hasAllowedInsecure = attrs: (attrs.meta.knownVulnerabilities or []) == [] || allowInsecurePredicate attrs || - builtins.getEnv "NIXPKGS_ALLOW_INSECURE" == "1"; + config.allowInsecure or false; showLicense = license: toString (map (l: l.shortName or "unknown") (lib.lists.toList license)); diff --git a/pkgs/top-level/impure.nix b/pkgs/top-level/impure.nix index 3ba6c08a140..9ed31077172 100644 --- a/pkgs/top-level/impure.nix +++ b/pkgs/top-level/impure.nix @@ -10,6 +10,14 @@ let # Return ‘x’ if it evaluates, or ‘def’ if it throws an exception. try = x: def: let res = tryEval x; in if res.success then res.value else def; + defaultConfig = { + # These attributes are used in pkgs/stdenv/generic/check-meta.nix + allowBroken = builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1"; + allowInsecure = builtins.getEnv "NIXPKGS_ALLOW_INSECURE" == "1"; + allowUnfree = builtins.getEnv "NIXPKGS_ALLOW_UNFREE" == "1"; + allowUnsupportedSystem = builtins.getEnv "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" == "1"; + }; + in { # We combine legacy `system` and `platform` into `localSystem`, if @@ -82,7 +90,10 @@ in assert args ? localSystem -> !(args ? system || args ? platform); import ./. (builtins.removeAttrs args [ "system" "platform" ] // { - inherit config overlays crossSystem crossOverlays; + inherit overlays crossSystem crossOverlays; + + config = defaultConfig // config; + # Fallback: Assume we are building packages on the current (build, in GNU # Autotools parlance) system. localSystem = if builtins.isString localSystem then localSystem -- cgit 1.4.1 From 80a5dd7f0277f37b90ccf65b6a94635dd7b45311 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Sun, 3 Nov 2019 18:37:39 +0100 Subject: gegl: fix darwin build ../gegl/opencl/cl_gl.h:37:10: fatal error: 'OpenGL/CGLDevice.h' file not found #include --- pkgs/development/libraries/gegl/4.0.nix | 6 ++++-- pkgs/top-level/all-packages.nix | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/gegl/4.0.nix b/pkgs/development/libraries/gegl/4.0.nix index 8632035caf7..2edb47cb9bb 100644 --- a/pkgs/development/libraries/gegl/4.0.nix +++ b/pkgs/development/libraries/gegl/4.0.nix @@ -28,6 +28,7 @@ , libwebp , luajit , openexr +, OpenCL }: stdenv.mkDerivation rec { @@ -86,7 +87,7 @@ stdenv.mkDerivation rec { gexiv2 luajit openexr - ]; + ] ++ stdenv.lib.optional stdenv.isDarwin OpenCL; # for gegl-4.0.pc propagatedBuildInputs = [ @@ -115,7 +116,8 @@ stdenv.mkDerivation rec { patchShebangs tests/ff-load-save/tests_ff_load_save.sh tests/opencl/opencl_test.sh tests/buffer/buffer-tests-run.sh tools/xml_insert.sh ''; - doCheck = true; + # tests fail to connect to the com.apple.fonts daemon in sandboxed mode + doCheck = !stdenv.isDarwin; meta = with stdenv.lib; { description = "Graph-based image processing framework"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a98e59e8b6c..4b0d6743a7f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11063,7 +11063,9 @@ in inherit (darwin.apple_sdk.frameworks) OpenGL; }; - gegl_0_4 = callPackage ../development/libraries/gegl/4.0.nix { }; + gegl_0_4 = callPackage ../development/libraries/gegl/4.0.nix { + inherit (darwin.apple_sdk.frameworks) OpenCL; + }; geoclue2 = callPackage ../development/libraries/geoclue {}; -- cgit 1.4.1 From 3894ec0a509f45cd3b0fe035bfab0c4248b5e9ec Mon Sep 17 00:00:00 2001 From: Vadim-Valdis Yudaev Date: Thu, 17 Oct 2019 16:53:45 +0300 Subject: keybase, keybase-gui, kbfs: 4.6.0 -> 4.7.2, added dependencies all: update from 4.6.0 to 4.7.2 keybase: - added gnupg as a dependency and patch fix-patch-keybase.patch kbfs: - added fuse as a dependency and patch fix-patch-kbfs.patch --- pkgs/tools/security/keybase/default.nix | 17 ++++++-- pkgs/tools/security/keybase/fix-paths-kbfs.patch | 48 ++++++++++++++++++++++ .../tools/security/keybase/fix-paths-keybase.patch | 16 ++++++++ pkgs/tools/security/keybase/gui.nix | 6 +-- pkgs/tools/security/keybase/kbfs.nix | 9 +++- 5 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 pkgs/tools/security/keybase/fix-paths-kbfs.patch create mode 100644 pkgs/tools/security/keybase/fix-paths-keybase.patch diff --git a/pkgs/tools/security/keybase/default.nix b/pkgs/tools/security/keybase/default.nix index 559ba0383bd..653858d3696 100644 --- a/pkgs/tools/security/keybase/default.nix +++ b/pkgs/tools/security/keybase/default.nix @@ -1,11 +1,12 @@ -{ stdenv, lib, buildGoPackage, fetchFromGitHub +{ stdenv, substituteAll, lib, buildGoPackage, fetchFromGitHub , AVFoundation, AudioToolbox, ImageIO, CoreMedia , Foundation, CoreGraphics, MediaToolbox +, gnupg }: buildGoPackage rec { pname = "keybase"; - version = "4.6.0"; + version = "4.7.2"; goPackagePath = "github.com/keybase/client"; subPackages = [ "go/keybase" ]; @@ -16,10 +17,18 @@ buildGoPackage rec { owner = "keybase"; repo = "client"; rev = "v${version}"; - sha256 = "1aqj5s3vfji1zl7xdzphnsw3b8pnbg22n9rzdxkcdjf7via5wz2k"; + sha256 = "1ixfq9qv71misg04fvf4892z956w5aydq0r1wk6qk5jjqp6gf4lv"; }; - buildInputs = lib.optionals stdenv.isDarwin [ AVFoundation AudioToolbox ImageIO CoreMedia Foundation CoreGraphics MediaToolbox ]; + patches = [ + (substituteAll { + src = ./fix-paths-keybase.patch; + gpg = "${gnupg}/bin/gpg"; + gpg2 = "${gnupg}/bin/gpg2"; + }) + ]; + + buildInputs = stdenv.lib.optionals stdenv.isDarwin [ AVFoundation AudioToolbox ImageIO CoreMedia Foundation CoreGraphics MediaToolbox ]; buildFlags = [ "-tags production" ]; meta = with stdenv.lib; { diff --git a/pkgs/tools/security/keybase/fix-paths-kbfs.patch b/pkgs/tools/security/keybase/fix-paths-kbfs.patch new file mode 100644 index 00000000000..1180f38b865 --- /dev/null +++ b/pkgs/tools/security/keybase/fix-paths-kbfs.patch @@ -0,0 +1,48 @@ +diff --git a/go/kbfs/libfuse/mounter.go b/go/kbfs/libfuse/mounter.go +index d791ffc2..b116ad5d 100644 +--- a/go/kbfs/libfuse/mounter.go ++++ b/go/kbfs/libfuse/mounter.go +@@ -108,7 +108,7 @@ func (m *mounter) Unmount() (err error) { + case "darwin": + _, err = exec.Command("/sbin/umount", dir).Output() + case "linux": +- fusermountOutput, fusermountErr := exec.Command("fusermount", "-u", dir).CombinedOutput() ++ fusermountOutput, fusermountErr := exec.Command("@fusermount@", "-u", dir).CombinedOutput() + // Only clean up mountdir on a clean unmount. + if fusermountErr == nil { + m.log.Info("Successfully unmounted") +@@ -135,7 +135,7 @@ func (m *mounter) Unmount() (err error) { + "/usr/sbin/diskutil", "unmountDisk", "force", dir).Output() + case "linux": + // Lazy unmount; will unmount when KBFS is no longer in use. +- _, err = exec.Command("fusermount", "-u", "-z", dir).Output() ++ _, err = exec.Command("@fusermount@", "-u", "-z", dir).Output() + default: + err = errors.New("Forced unmount is not supported on this platform yet") + } +diff --git a/go/vendor/bazil.org/fuse/mount_linux.go b/go/vendor/bazil.org/fuse/mount_linux.go +index ec7fd89c..4d0a9e30 100644 +--- a/go/vendor/bazil.org/fuse/mount_linux.go ++++ b/go/vendor/bazil.org/fuse/mount_linux.go +@@ -196,7 +196,7 @@ func mount(dir string, conf *mountConfig, ready chan<- struct{}, _ *error) (fuse + defer readFile.Close() + + cmd := exec.Command( +- "fusermount", ++ "@fusermount@", + "-o", conf.getOptions(), + "--", + dir, +diff --git a/go/vendor/bazil.org/fuse/unmount_linux.go b/go/vendor/bazil.org/fuse/unmount_linux.go +index f02448af..6e4c6c23 100644 +--- a/go/vendor/bazil.org/fuse/unmount_linux.go ++++ b/go/vendor/bazil.org/fuse/unmount_linux.go +@@ -21,7 +21,7 @@ func unmount(dir string) error { + return sysunix.Unmount(dir, sysunix.MNT_DETACH) + } + +- cmd := exec.Command("fusermount", "-u", dir) ++ cmd := exec.Command("@fusermount@", "-u", dir) + output, err := cmd.CombinedOutput() + if err != nil { + if len(output) > 0 { diff --git a/pkgs/tools/security/keybase/fix-paths-keybase.patch b/pkgs/tools/security/keybase/fix-paths-keybase.patch new file mode 100644 index 00000000000..b3de7bbb530 --- /dev/null +++ b/pkgs/tools/security/keybase/fix-paths-keybase.patch @@ -0,0 +1,16 @@ +diff --git a/go/libkb/gpg_cli.go b/go/libkb/gpg_cli.go +index 3c7c6257..ae8f7e2f 100644 +--- a/go/libkb/gpg_cli.go ++++ b/go/libkb/gpg_cli.go +@@ -54,9 +54,9 @@ func (g *GpgCLI) Configure(mctx MetaContext) (err error) { + if len(prog) > 0 { + err = canExec(prog) + } else { +- prog, err = exec.LookPath("gpg2") ++ prog, err = exec.LookPath("@gpg2@") + if err != nil { +- prog, err = exec.LookPath("gpg") ++ prog, err = exec.LookPath("@gpg@") + } + } + if err != nil { diff --git a/pkgs/tools/security/keybase/gui.nix b/pkgs/tools/security/keybase/gui.nix index aa4db75cef1..1d32f1cc881 100644 --- a/pkgs/tools/security/keybase/gui.nix +++ b/pkgs/tools/security/keybase/gui.nix @@ -4,16 +4,16 @@ , runtimeShell, gsettings-desktop-schemas }: let - versionSuffix = "20191010154240.134c2d892b"; + versionSuffix = "20191028173732.6fc2e969b4"; in stdenv.mkDerivation rec { pname = "keybase-gui"; - version = "4.6.0"; # Find latest version from https://prerelease.keybase.io/deb/dists/stable/main/binary-amd64/Packages + version = "4.7.2"; # Find latest version from https://prerelease.keybase.io/deb/dists/stable/main/binary-amd64/Packages src = fetchurl { url = "https://s3.amazonaws.com/prerelease.keybase.io/linux_binaries/deb/keybase_${version + "-" + versionSuffix}_amd64.deb"; - sha256 = "a25f0c676c00d306859d32e4dad7a23dd4955fa0b352be50c281081f2cf000ae"; + sha256 = "01slhdxcjs1543rz1khxhzn25g26vm9fd9mcyd5ahp2v4g37b8sd"; }; nativeBuildInputs = [ diff --git a/pkgs/tools/security/keybase/kbfs.nix b/pkgs/tools/security/keybase/kbfs.nix index 9448182a65a..93c7bd540d8 100644 --- a/pkgs/tools/security/keybase/kbfs.nix +++ b/pkgs/tools/security/keybase/kbfs.nix @@ -1,4 +1,4 @@ -{ stdenv, buildGoPackage, fetchFromGitHub, keybase }: +{ stdenv, substituteAll, buildGoPackage, fetchFromGitHub, fuse, osxfuse, keybase }: buildGoPackage { pname = "kbfs"; @@ -10,6 +10,13 @@ buildGoPackage { dontRenameImports = true; + patches = [ + (substituteAll { + src = ./fix-paths-kbfs.patch; + fusermount = "${fuse}/bin/fusermount"; + }) + ]; + buildFlags = [ "-tags production" ]; meta = with stdenv.lib; { -- cgit 1.4.1 From fbbb67b85879e286a308898351f34c049a682314 Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Sun, 3 Nov 2019 13:21:15 -0500 Subject: quilter: 2.0.2 - 2.0.3 --- pkgs/applications/editors/quilter/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/quilter/default.nix b/pkgs/applications/editors/quilter/default.nix index 7df036cc215..d9c3bd0825d 100644 --- a/pkgs/applications/editors/quilter/default.nix +++ b/pkgs/applications/editors/quilter/default.nix @@ -4,13 +4,13 @@ stdenv.mkDerivation rec { pname = "quilter"; - version = "2.0.2"; + version = "2.0.3"; src = fetchFromGitHub { owner = "lainsce"; repo = pname; rev = version; - sha256 = "0qd8qssqzds06l08f4yf39i3bjl1ljyr85wgc3yn6mn698ynx30g"; + sha256 = "13l8z3bchha4ax14s48pcqdxh8gnj4mlvv06lk9dwk9fplc93821"; }; nativeBuildInputs = [ -- cgit 1.4.1 From dcd89d2c8040182efc40981961fd4ca647f95aeb Mon Sep 17 00:00:00 2001 From: worldofpeace Date: Sun, 3 Nov 2019 13:25:15 -0500 Subject: lollypop: 1.2.2 -> 1.2.5 --- pkgs/applications/audio/lollypop/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/audio/lollypop/default.nix b/pkgs/applications/audio/lollypop/default.nix index f8a2aa8db76..8bdf45a968a 100644 --- a/pkgs/applications/audio/lollypop/default.nix +++ b/pkgs/applications/audio/lollypop/default.nix @@ -19,7 +19,7 @@ python3.pkgs.buildPythonApplication rec { pname = "lollypop"; - version = "1.2.2"; + version = "1.2.5"; format = "other"; doCheck = false; @@ -28,7 +28,7 @@ python3.pkgs.buildPythonApplication rec { url = "https://gitlab.gnome.org/World/lollypop"; rev = "refs/tags/${version}"; fetchSubmodules = true; - sha256 = "02dgp3b10yaw0yqzdzd15msjgxayvjkg9m652is0d7rwgjq1pk6v"; + sha256 = "148p3ab7nnfz13hgjkx1cf2ahq9mgl72csrl35xy6d0nkfqbfr8r"; }; nativeBuildInputs = [ -- cgit 1.4.1 From 83dbd38821f1bd2e76218cabbf428a4d982018e6 Mon Sep 17 00:00:00 2001 From: Niklas Hambüchen Date: Sun, 3 Nov 2019 18:35:55 +0100 Subject: libjpeg-turbo: Add flag to build static libraries as well --- pkgs/development/libraries/libjpeg-turbo/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/libjpeg-turbo/default.nix b/pkgs/development/libraries/libjpeg-turbo/default.nix index cb32b22f45e..f05ac6d521b 100644 --- a/pkgs/development/libraries/libjpeg-turbo/default.nix +++ b/pkgs/development/libraries/libjpeg-turbo/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, cmake, nasm }: +{ stdenv, fetchurl, cmake, nasm, enableStatic ? false }: stdenv.mkDerivation rec { @@ -19,7 +19,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake nasm ]; cmakeFlags = [ - "-DENABLE_STATIC=0" + "-DENABLE_STATIC=${if enableStatic then "1" else "0"}" ]; doInstallCheck = true; -- cgit 1.4.1 From 6ca77c43aecc749218059f090780f91c66c58e12 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sun, 3 Nov 2019 04:04:32 -0800 Subject: yq: 2.7.2 -> 2.8.1 --- pkgs/development/tools/yq/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/yq/default.nix b/pkgs/development/tools/yq/default.nix index f93a24d56f9..e9b54e67f5e 100644 --- a/pkgs/development/tools/yq/default.nix +++ b/pkgs/development/tools/yq/default.nix @@ -2,7 +2,7 @@ buildPythonApplication rec { pname = "yq"; - version = "2.7.2"; + version = "2.8.1"; propagatedBuildInputs = [ pyyaml xmltodict jq ]; @@ -11,7 +11,7 @@ buildPythonApplication rec { src = fetchPypi { inherit pname version; - sha256 = "1fwvwy75n4rqzh6sxyp2jmjqc7939s0xmrhxw7zhdy6iacggvnpp"; + sha256 = "042p3s011635rbjax9wvwjdrb1kyzw38a6qn59b0j0k7krz6rlr4"; }; meta = with lib; { -- cgit 1.4.1 From 049c47c6f633192e7e138dfa800230de5467fbc9 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sun, 3 Nov 2019 03:28:24 -0800 Subject: wpgtk: 6.0.9 -> 6.0.11 --- pkgs/tools/X11/wpgtk/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/X11/wpgtk/default.nix b/pkgs/tools/X11/wpgtk/default.nix index 1a6e99f0393..fce3df19718 100644 --- a/pkgs/tools/X11/wpgtk/default.nix +++ b/pkgs/tools/X11/wpgtk/default.nix @@ -3,13 +3,13 @@ python3Packages.buildPythonApplication rec { pname = "wpgtk"; - version = "6.0.9"; + version = "6.0.11"; src = fetchFromGitHub { owner = "deviantfero"; repo = "wpgtk"; rev = version; - sha256 = "0j2wci85918zsrrvd4qpcqv9bzhzj7qvjchvhvl11fn035jml5l0"; + sha256 = "0da4gj54c361a0bicrjhhb9bp9yr5lx7p1knrsc4dykap1xn23vi"; }; buildInputs = [ -- cgit 1.4.1 From deb201b311f7d8b1d2818fe106cbb3ebc32df86d Mon Sep 17 00:00:00 2001 From: Jonathan Ringer Date: Sun, 3 Nov 2019 11:45:07 -0800 Subject: update-python-libraries: update usage comments --- .../python/update-python-libraries/update-python-libraries.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py b/pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py index e4a79d0c428..82b2aac39a9 100755 --- a/pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py +++ b/pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py @@ -6,9 +6,9 @@ You can pass in multiple files or paths. You'll likely want to use `` - $ ./update-python-libraries ../../pkgs/development/python-modules/* + $ ./update-python-libraries ../../pkgs/development/python-modules/**/default.nix `` -to update all libraries in that folder. +to update all non-pinned libraries in that folder. """ import argparse -- cgit 1.4.1 From 4cf8729c316ecffbe43465ea97a40a83f3cd84da Mon Sep 17 00:00:00 2001 From: Daniel Duan Date: Sun, 3 Nov 2019 12:50:51 -0800 Subject: Add dduan as a maintainer --- maintainers/maintainer-list.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 1f2cdda41d1..724b4e0d55e 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -1563,6 +1563,12 @@ githubId = 14032; name = "Daniel Brockman"; }; + dduan = { + email = "daniel@duan.ca"; + github = "dduan"; + githubId = 75067; + name = "Daniel Duan"; + }; deepfire = { email = "_deepfire@feelingofgreen.ru"; github = "deepfire"; -- cgit 1.4.1 From fcd88c820d546ea8e30b98ae7316c2c9fac4ae5f Mon Sep 17 00:00:00 2001 From: Daniel Duan Date: Sun, 3 Nov 2019 12:51:01 -0800 Subject: tre: init at 0.2.2 tre is a improved version of the command `tree`. Its main additions: 1. colored output 2. ignores paths specified in .gitignore 3. editor alias for each entity listed Source/Homepage: https://github.com/dduan/tre --- pkgs/tools/system/tre-command/default.nix | 24 ++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 26 insertions(+) create mode 100644 pkgs/tools/system/tre-command/default.nix diff --git a/pkgs/tools/system/tre-command/default.nix b/pkgs/tools/system/tre-command/default.nix new file mode 100644 index 00000000000..6050b2a709e --- /dev/null +++ b/pkgs/tools/system/tre-command/default.nix @@ -0,0 +1,24 @@ +{ rustPlatform, fetchFromGitHub, stdenv }: + +rustPlatform.buildRustPackage rec { + pname = "tre"; + version = "0.2.2"; + + src = fetchFromGitHub { + owner = "dduan"; + repo = "tre"; + rev = "v${version}"; + sha256 = "1fazw2wn738iknbv54gv7qll7d4q2gy9bq1s3f3cv21cdv6bqral"; + }; + + cargoSha256 = "0m82zbi610zgvcza6n03xl80g31x6bfkjyrfxcxa6fyf2l5cj9pv"; + verifyCargoDeps = true; + + meta = with stdenv.lib; { + description = "Tree command, improved"; + homepage = "https://github.com/dduan/tre"; + license = licenses.mit; + maintainers = [ maintainers.dduan ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 85270623a5d..161fd3eab10 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21312,6 +21312,8 @@ in tdrop = callPackage ../applications/misc/tdrop { }; + tre-command = callPackage ../tools/system/tre-command {}; + tree = callPackage ../tools/system/tree {}; treesheets = callPackage ../applications/office/treesheets { wxGTK = wxGTK31; }; -- cgit 1.4.1 From 8593904aca8d5a7922feae828db010f4f0d900e6 Mon Sep 17 00:00:00 2001 From: Mario Rodas Date: Sun, 3 Nov 2019 16:20:00 -0500 Subject: protobuf3_9: 3.9.1 -> 3.9.2 Changelog: https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.2 --- pkgs/development/libraries/protobuf/3.9.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/protobuf/3.9.nix b/pkgs/development/libraries/protobuf/3.9.nix index a2f3e0e0164..e74d5c527b1 100644 --- a/pkgs/development/libraries/protobuf/3.9.nix +++ b/pkgs/development/libraries/protobuf/3.9.nix @@ -1,6 +1,6 @@ { callPackage, ... }: callPackage ./generic-v3.nix { - version = "3.9.1"; - sha256 = "0vv85xb65dx6fa76fsnyps13kaamvwfzd8hr6ii1payr73x4zy2h"; + version = "3.9.2"; + sha256 = "080zxa9w1pxp5y05aiwc0c8mlqkkh98wmid4l7m99cliphsd4qnn"; } -- cgit 1.4.1 From b60853cdca2c0004b692bd27b6b3d3a8ed833b32 Mon Sep 17 00:00:00 2001 From: Mario Rodas Date: Sun, 3 Nov 2019 16:20:00 -0500 Subject: ispc: only check on Linux The test suite tries to execute `transcendentals` tests, which is not expected to work anywhere except Linux. --- pkgs/development/compilers/ispc/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/ispc/default.nix b/pkgs/development/compilers/ispc/default.nix index d07bf6b5733..0c44595b24b 100644 --- a/pkgs/development/compilers/ispc/default.nix +++ b/pkgs/development/compilers/ispc/default.nix @@ -20,7 +20,7 @@ stdenv.mkDerivation rec { # there are missing dependencies in the Makefile, causing sporadic build failures enableParallelBuilding = false; - doCheck = true; + doCheck = stdenv.isLinux; buildInputs = with llvmPackages; [ which -- cgit 1.4.1 From 7960ff7d4ea5f55e43daa10e53251d4849e92fee Mon Sep 17 00:00:00 2001 From: Mario Rodas Date: Sun, 3 Nov 2019 16:21:00 -0500 Subject: protobuf3_10: 3.10.0 -> 3.10.1 Changelog: https://github.com/protocolbuffers/protobuf/releases/tag/v3.10.1 --- pkgs/development/libraries/protobuf/3.10.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/protobuf/3.10.nix b/pkgs/development/libraries/protobuf/3.10.nix index 3549d7af75e..5ecb8e67f84 100644 --- a/pkgs/development/libraries/protobuf/3.10.nix +++ b/pkgs/development/libraries/protobuf/3.10.nix @@ -1,6 +1,6 @@ { callPackage, ... }: callPackage ./generic-v3.nix { - version = "3.10.0"; - sha256 = "0cjwfm9v2gv6skzrq4m7w28810p2h3m1jj4kw6df3x8vvg7q842c"; + version = "3.10.1"; + sha256 = "1kbi2i1m5c7ss02ip8h0bdzvns4dgxx30a5c0iiph8g2ns02lr33"; } -- cgit 1.4.1 From 547b5b7a73e8a780b6438cf1128388dbc51b002e Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Sun, 3 Nov 2019 22:09:44 +0000 Subject: ruby.withPackages: preserve setup hooks (#72743) This fixes nix-shell -p 'ruby.withPackages (const [])' ruby.devdoc which otherwise wouldn't find documentation, unlike nix-shell -p ruby ruby.devdoc which would, because ruby has setup hooks to accomodate for this, that were being masked by the withPackages wrapper. --- pkgs/development/ruby-modules/with-packages/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/ruby-modules/with-packages/default.nix b/pkgs/development/ruby-modules/with-packages/default.nix index ac0a33f4561..7d49b0e0134 100644 --- a/pkgs/development/ruby-modules/with-packages/default.nix +++ b/pkgs/development/ruby-modules/with-packages/default.nix @@ -64,6 +64,8 @@ let rm -f $out/bin/$(basename "$i") makeWrapper "$i" $out/bin/$(basename "$i") --set GEM_PATH ${gemEnv}/${ruby.gemPath} done + + ln -s ${ruby}/nix-support $out/nix-support ''; passthru = { -- cgit 1.4.1 From cf8a2d0225d531b3db333aa3c6c89866f90ff4b2 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Sun, 3 Nov 2019 20:38:35 -0500 Subject: Revert "stdenv/check-meta: getEnv if the attribute is unset (#72376)" (#72752) This reverts commit 71184f8e157672789602d3f28bdd3c8079800687. --- pkgs/stdenv/generic/check-meta.nix | 11 +++++++---- pkgs/top-level/impure.nix | 13 +------------ 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index 85a1051ceed..6bd6a9bf41e 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -13,7 +13,8 @@ let # for why this defaults to false, but I (@copumpkin) want to default it to true soon. shouldCheckMeta = config.checkMeta or false; - allowUnfree = config.allowUnfree or false; + allowUnfree = config.allowUnfree or false + || builtins.getEnv "NIXPKGS_ALLOW_UNFREE" == "1"; whitelist = config.whitelistedLicenses or []; blacklist = config.blacklistedLicenses or []; @@ -40,9 +41,11 @@ let hasBlacklistedLicense = assert areLicenseListsValid; attrs: hasLicense attrs && lib.lists.any (l: builtins.elem l blacklist) (lib.lists.toList attrs.meta.license); - allowBroken = config.allowBroken or false; + allowBroken = config.allowBroken or false + || builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1"; - allowUnsupportedSystem = config.allowUnsupportedSystem or false; + allowUnsupportedSystem = config.allowUnsupportedSystem or false + || builtins.getEnv "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" == "1"; isUnfree = licenses: lib.lists.any (l: !l.free or true) licenses; @@ -70,7 +73,7 @@ let hasAllowedInsecure = attrs: (attrs.meta.knownVulnerabilities or []) == [] || allowInsecurePredicate attrs || - config.allowInsecure or false; + builtins.getEnv "NIXPKGS_ALLOW_INSECURE" == "1"; showLicense = license: toString (map (l: l.shortName or "unknown") (lib.lists.toList license)); diff --git a/pkgs/top-level/impure.nix b/pkgs/top-level/impure.nix index 9ed31077172..3ba6c08a140 100644 --- a/pkgs/top-level/impure.nix +++ b/pkgs/top-level/impure.nix @@ -10,14 +10,6 @@ let # Return ‘x’ if it evaluates, or ‘def’ if it throws an exception. try = x: def: let res = tryEval x; in if res.success then res.value else def; - defaultConfig = { - # These attributes are used in pkgs/stdenv/generic/check-meta.nix - allowBroken = builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1"; - allowInsecure = builtins.getEnv "NIXPKGS_ALLOW_INSECURE" == "1"; - allowUnfree = builtins.getEnv "NIXPKGS_ALLOW_UNFREE" == "1"; - allowUnsupportedSystem = builtins.getEnv "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" == "1"; - }; - in { # We combine legacy `system` and `platform` into `localSystem`, if @@ -90,10 +82,7 @@ in assert args ? localSystem -> !(args ? system || args ? platform); import ./. (builtins.removeAttrs args [ "system" "platform" ] // { - inherit overlays crossSystem crossOverlays; - - config = defaultConfig // config; - + inherit config overlays crossSystem crossOverlays; # Fallback: Assume we are building packages on the current (build, in GNU # Autotools parlance) system. localSystem = if builtins.isString localSystem then localSystem -- cgit 1.4.1 From a2f7fc9a5c7edbda770cebb04a6ac92d46808b9a Mon Sep 17 00:00:00 2001 From: Vincent Laporte Date: Sun, 27 Oct 2019 18:14:41 +0000 Subject: ocamlPackages.ocp-indent: 1.7.0 → 1.8.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkgs/development/tools/ocaml/ocp-indent/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/ocaml/ocp-indent/default.nix b/pkgs/development/tools/ocaml/ocp-indent/default.nix index 7ecc15da2b5..6f8d80df564 100644 --- a/pkgs/development/tools/ocaml/ocp-indent/default.nix +++ b/pkgs/development/tools/ocaml/ocp-indent/default.nix @@ -1,12 +1,12 @@ { lib, fetchzip, buildDunePackage, cmdliner }: buildDunePackage rec { - version = "1.7.0"; + version = "1.8.1"; pname = "ocp-indent"; src = fetchzip { url = "https://github.com/OCamlPro/ocp-indent/archive/${version}.tar.gz"; - sha256 = "006x3fsd61vxnxj4chlakyk3b2s10pb0bdl46g0ghf3j8h33x7hc"; + sha256 = "0h4ysh36q1fxc40inhsdq2swqpfm15lpilqqcafs5ska42pn7s68"; }; minimumOCamlVersion = "4.02"; -- cgit 1.4.1 From eb2aa009a3506117b9810763e9ed4ef5cda66bb2 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Mon, 4 Nov 2019 05:26:06 +0100 Subject: pythonPackages.pyatmo: 2.3.2 requires requests --- pkgs/development/python-modules/pyatmo/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/python-modules/pyatmo/default.nix b/pkgs/development/python-modules/pyatmo/default.nix index bd1caba1d27..56467d1e4a5 100644 --- a/pkgs/development/python-modules/pyatmo/default.nix +++ b/pkgs/development/python-modules/pyatmo/default.nix @@ -1,6 +1,7 @@ { lib , buildPythonPackage , fetchPypi +, requests }: buildPythonPackage rec { @@ -12,6 +13,8 @@ buildPythonPackage rec { sha256 = "2c76740e5adbf8b14d8f41d4f84ce23c0e8e738b18b926dc60858c35bf2fa8f2"; }; + propagatedBuildInputs = [ requests ]; + # Upstream provides no unit tests. doCheck = false; -- cgit 1.4.1 From 8db9c3ef4523f7f60789916960892a17c5850af0 Mon Sep 17 00:00:00 2001 From: Sebastian Jordan Date: Mon, 4 Nov 2019 05:08:02 +0100 Subject: nix-prefetch-github: Delete redundant source, build from python3Packages instead --- pkgs/build-support/nix-prefetch-github/default.nix | 29 ---------------------- pkgs/top-level/all-packages.nix | 3 ++- 2 files changed, 2 insertions(+), 30 deletions(-) delete mode 100644 pkgs/build-support/nix-prefetch-github/default.nix diff --git a/pkgs/build-support/nix-prefetch-github/default.nix b/pkgs/build-support/nix-prefetch-github/default.nix deleted file mode 100644 index 10a6daaf53f..00000000000 --- a/pkgs/build-support/nix-prefetch-github/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ python3 -, fetchFromGitHub -, stdenv -}: - -python3.pkgs.buildPythonApplication rec { - pname = "nix-prefetch-github"; - version = "2.3.1"; - - src = fetchFromGitHub { - owner = "seppeljordan"; - repo = "nix-prefetch-github"; - rev = "v${version}"; - sha256 = "13wvq13iiva97a16kahfpxar5ppb015nnbn7d4v9s9jyxdickc2c"; - }; - - propagatedBuildInputs = with python3.pkgs; [ - attrs - click - effect - jinja2 - ]; - meta = with stdenv.lib; { - description = "Prefetch sources from github"; - homepage = https://github.com/seppeljordan/nix-prefetch-github; - license = licenses.gpl3; - maintainers = [ maintainers.seppeljordan ]; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c5598f328a5..3d03ef6257c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24549,7 +24549,8 @@ in nix-prefetch = callPackage ../tools/package-management/nix-prefetch { }; - nix-prefetch-github = callPackage ../build-support/nix-prefetch-github {}; + nix-prefetch-github = with python3Packages; + toPythonApplication nix-prefetch-github; inherit (callPackages ../tools/package-management/nix-prefetch-scripts { }) nix-prefetch-bzr -- cgit 1.4.1 From d7a618ac011abba0444f1a207abea0640cefc24f Mon Sep 17 00:00:00 2001 From: Sebastian Jordan Date: Mon, 4 Nov 2019 05:10:45 +0100 Subject: pythonPackages.nix-prefetch-github: 2.3.1 -> 2.3.2 --- pkgs/development/python-modules/nix-prefetch-github/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/nix-prefetch-github/default.nix b/pkgs/development/python-modules/nix-prefetch-github/default.nix index 71a7701c019..f73fb6dac33 100644 --- a/pkgs/development/python-modules/nix-prefetch-github/default.nix +++ b/pkgs/development/python-modules/nix-prefetch-github/default.nix @@ -9,11 +9,11 @@ buildPythonPackage rec { pname = "nix-prefetch-github"; - version = "2.3.1"; + version = "2.3.2"; src = fetchPypi { inherit pname version; - sha256 = "1jkvmj33xinff0sb47yg33n131yi93pyq86skqc78xd38j6c8q9s"; + sha256 = "18xj618zjs13ib7f996fnl0xiqig0w48yns45nvy3xab55wximdx"; }; propagatedBuildInputs = [ -- cgit 1.4.1 From b07656542939003148d3dfc1f9df5fbd1c800567 Mon Sep 17 00:00:00 2001 From: Keito Kajitani Date: Mon, 4 Nov 2019 15:21:57 +0900 Subject: liberation-sans-narrow: fonttools requires python3 --- pkgs/data/fonts/liberation-sans-narrow/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/data/fonts/liberation-sans-narrow/default.nix b/pkgs/data/fonts/liberation-sans-narrow/default.nix index 4a14e095cf0..51af6a20bae 100644 --- a/pkgs/data/fonts/liberation-sans-narrow/default.nix +++ b/pkgs/data/fonts/liberation-sans-narrow/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, fontforge, pythonPackages, python }: +{ stdenv, fetchFromGitHub, fontforge, python3Packages, python3 }: stdenv.mkDerivation rec { pname = "liberation-sans-narrow"; @@ -11,7 +11,7 @@ stdenv.mkDerivation rec { sha256 = "1qw554jbdnqkg6pjjl4cqkgsalq3398kzvww2naw30vykcz752bm"; }; - buildInputs = [ fontforge pythonPackages.fonttools python ]; + buildInputs = [ fontforge python3Packages.fonttools python3 ]; installPhase = '' find . -name '*Narrow*.ttf' -exec install -m444 -Dt $out/share/fonts/truetype {} \; -- cgit 1.4.1 From 03f38c329f62c98c94d625a85d061cddbe130866 Mon Sep 17 00:00:00 2001 From: Johannes Schleifenbaum Date: Mon, 4 Nov 2019 09:51:09 +0100 Subject: dbeaver: 6.2.3 -> 6.2.4 --- pkgs/applications/misc/dbeaver/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/misc/dbeaver/default.nix b/pkgs/applications/misc/dbeaver/default.nix index 191c6a31972..1549ab00a4f 100644 --- a/pkgs/applications/misc/dbeaver/default.nix +++ b/pkgs/applications/misc/dbeaver/default.nix @@ -7,7 +7,7 @@ stdenv.mkDerivation rec { pname = "dbeaver-ce"; - version = "6.2.3"; + version = "6.2.4"; desktopItem = makeDesktopItem { name = "dbeaver"; @@ -30,7 +30,7 @@ stdenv.mkDerivation rec { src = fetchurl { url = "https://dbeaver.io/files/${version}/dbeaver-ce-${version}-linux.gtk.x86_64.tar.gz"; - sha256 = "1v4sllzvaz4fj8s14ddzw11wczlghbdppv8fl5jg6xglg687sgaj"; + sha256 = "1k3aan290kfy2b53gl8r4yxvb8jas6sms1r052m3jld3i8frqgva"; }; installPhase = '' -- cgit 1.4.1 From cdc5bcdea543406814bbf12f3efefa8358065cc7 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sat, 2 Nov 2019 19:24:55 -0700 Subject: rabbitmq-server: 3.8.0 -> 3.8.1 --- pkgs/servers/amqp/rabbitmq-server/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/servers/amqp/rabbitmq-server/default.nix b/pkgs/servers/amqp/rabbitmq-server/default.nix index 12211f49698..bc83c5a8ea2 100644 --- a/pkgs/servers/amqp/rabbitmq-server/default.nix +++ b/pkgs/servers/amqp/rabbitmq-server/default.nix @@ -6,12 +6,12 @@ stdenv.mkDerivation rec { pname = "rabbitmq-server"; - version = "3.8.0"; + version = "3.8.1"; # when updating, consider bumping elixir version in all-packages.nix src = fetchurl { url = "https://github.com/rabbitmq/rabbitmq-server/releases/download/v${version}/${pname}-${version}.tar.xz"; - sha256 = "174ai8ihk50gwbqinxxxx5is6izvgmfca7skvvp4yk6fl8nbwm15"; + sha256 = "17ymzjgz3544jgf321f8f788gdxs9l252ah61nlgsglv0x8gggrh"; }; buildInputs = -- cgit 1.4.1 From e6bb21812eba789fa0818e0746a790f024d7445e Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:06:04 -0500 Subject: vscode-extensions.ms-vscode.cpptools: 0.26.0 -> 0.26.1 --- pkgs/misc/vscode-extensions/cpptools/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/misc/vscode-extensions/cpptools/default.nix b/pkgs/misc/vscode-extensions/cpptools/default.nix index 70d08aa18a0..08fee83d8ce 100644 --- a/pkgs/misc/vscode-extensions/cpptools/default.nix +++ b/pkgs/misc/vscode-extensions/cpptools/default.nix @@ -83,8 +83,8 @@ vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { name = "cpptools"; publisher = "ms-vscode"; - version = "0.26.0"; - sha256 = "1njclj07amj9n187k3rbjvddkhmsc4aljdbsgjxpj58fv7zdy7kq"; + version = "0.26.1"; + sha256 = "09khm0byxa9mv8qbqrikd7akz3p816ra5z8l86xqkmbm6j1k4wpc"; }; buildInputs = [ -- cgit 1.4.1 From 21529a91d98bf3fe31ee5e14b828d9f658296bda Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:06:41 -0500 Subject: srht: 0.54.3 -> 0.54.4 --- pkgs/applications/version-management/sourcehut/core.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/core.nix b/pkgs/applications/version-management/sourcehut/core.nix index a284873f003..ef9136daefa 100644 --- a/pkgs/applications/version-management/sourcehut/core.nix +++ b/pkgs/applications/version-management/sourcehut/core.nix @@ -6,12 +6,12 @@ buildPythonPackage rec { pname = "srht"; - version = "0.54.3"; + version = "0.54.4"; src = fetchgit { url = "https://git.sr.ht/~sircmpwn/core.sr.ht"; rev = version; - sha256 = "1f4srhp5g6652anifs1vyijzi2v23l2rnfpf3x96j9r8rdap42rq"; + sha256 = "0flxvn178hqd8ljz89ddis80zfnmzgimv4506w4dg2flbwzywy7z"; }; node_modules = fetchNodeModules { -- cgit 1.4.1 From 9bc8540d86303f91163873410a6b853f803816c5 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:07:10 -0500 Subject: buildsrht: 0.47.9 -> 0.48.0 --- pkgs/applications/version-management/sourcehut/builds.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/builds.nix b/pkgs/applications/version-management/sourcehut/builds.nix index 9b6583d6cb8..76edc1b3e64 100644 --- a/pkgs/applications/version-management/sourcehut/builds.nix +++ b/pkgs/applications/version-management/sourcehut/builds.nix @@ -4,7 +4,7 @@ , srht, redis, celery, pyyaml, markdown }: let - version = "0.47.9"; + version = "0.48.0"; buildWorker = src: buildGoModule { inherit src version; @@ -20,7 +20,7 @@ in buildPythonPackage rec { src = fetchgit { url = "https://git.sr.ht/~sircmpwn/builds.sr.ht"; rev = version; - sha256 = "1zgaba58svhksxb1pzz8bym9p0pm7fnxsj5k6jz86095xmfijp34"; + sha256 = "1z5bxsn67cqffixqsrnska86mw0a6494650wbi6dbp10z03870bs"; }; patches = [ -- cgit 1.4.1 From 257f5d6303aaf2cdbe8298d745c576b0d827b106 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:07:15 -0500 Subject: dispatchsrht: 0.11.1 -> 0.12.3 --- pkgs/applications/version-management/sourcehut/dispatch.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/dispatch.nix b/pkgs/applications/version-management/sourcehut/dispatch.nix index 7172cdab402..a61f35b9ee1 100644 --- a/pkgs/applications/version-management/sourcehut/dispatch.nix +++ b/pkgs/applications/version-management/sourcehut/dispatch.nix @@ -4,12 +4,12 @@ buildPythonPackage rec { pname = "dispatchsrht"; - version = "0.11.1"; + version = "0.12.3"; src = fetchgit { url = "https://git.sr.ht/~sircmpwn/dispatch.sr.ht"; rev = version; - sha256 = "1bi7vn0yr326mf2c63f2fahdlrx2c6a8d6p6bzy2ym2835qfcc0v"; + sha256 = "0lpc8jpyz1rg3g98546wlhr27b15g32lds77hl42aixv5f5b8lc9"; }; patches = [ -- cgit 1.4.1 From 7967cb05adc8ffc2589f7169a5db266255cd16d5 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:07:22 -0500 Subject: gitsrht: 0.34.2 -> 0.35.6 --- pkgs/applications/version-management/sourcehut/git.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/git.nix b/pkgs/applications/version-management/sourcehut/git.nix index 9b0b5e2c8e4..39302057b1d 100644 --- a/pkgs/applications/version-management/sourcehut/git.nix +++ b/pkgs/applications/version-management/sourcehut/git.nix @@ -4,7 +4,7 @@ , srht, pygit2, scmsrht }: let - version = "0.34.2"; + version = "0.35.6"; buildDispatcher = src: buildGoModule { inherit src version; @@ -20,7 +20,7 @@ in buildPythonPackage rec { src = fetchgit { url = "https://git.sr.ht/~sircmpwn/git.sr.ht"; rev = version; - sha256 = "1z10r2d9x71n1n36g55j4cswh0dqnzmgj2qiy1h92wwgq8azpiyy"; + sha256 = "0j8caqbzdqkgc1bdhzz4k5hgh8lhsghfgwf46d19ryf83d8ggxqc"; }; patches = [ -- cgit 1.4.1 From 2269781690f5eed29a513ce6686766e100f5d892 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:07:28 -0500 Subject: hgsrht: 0.16.0 -> 0.16.2 --- pkgs/applications/version-management/sourcehut/hg.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/hg.nix b/pkgs/applications/version-management/sourcehut/hg.nix index dc9ced49cea..fd5c3145db0 100644 --- a/pkgs/applications/version-management/sourcehut/hg.nix +++ b/pkgs/applications/version-management/sourcehut/hg.nix @@ -4,12 +4,12 @@ buildPythonPackage rec { pname = "hgsrht"; - version = "0.16.0"; + version = "0.16.2"; src = fetchhg { url = "https://hg.sr.ht/~sircmpwn/hg.sr.ht"; rev = version; - sha256 = "0ncrj1cbls9ix2ig3qqwbzs6q6cmpqy3zs21p9fw3idfw703j3g0"; + sha256 = "02bzy31zplnlqg8rcls5n65q1h920lhy6f51w89w1kskdw7r2mhy"; }; patches = [ -- cgit 1.4.1 From eb9b2ac6a0caa52f76efe2e2bf38bb922895d12f Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:07:48 -0500 Subject: metasrht: 0.35.3 -> 0.37.0 --- pkgs/applications/version-management/sourcehut/meta.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/meta.nix b/pkgs/applications/version-management/sourcehut/meta.nix index bac369088a6..a5458b0b864 100644 --- a/pkgs/applications/version-management/sourcehut/meta.nix +++ b/pkgs/applications/version-management/sourcehut/meta.nix @@ -5,12 +5,12 @@ buildPythonPackage rec { pname = "metasrht"; - version = "0.35.3"; + version = "0.37.0"; src = fetchgit { url = "https://git.sr.ht/~sircmpwn/meta.sr.ht"; rev = version; - sha256 = "1kcmlmdk9v59fr3r0g2q2gfkb735xza0wni9s942wh418dr66x2f"; + sha256 = "1jf3h2v27cbam8bwiw3x35319pzp0r651p8mfhw150jvskyvmkmr"; }; nativeBuildInputs = srht.nativeBuildInputs; -- cgit 1.4.1 From 0d487aef711ad30ead0e563d18d18d6718cd2e5d Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:08:04 -0500 Subject: pastesrht: 0.7.1 -> 0.7.3 --- pkgs/applications/version-management/sourcehut/paste.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/paste.nix b/pkgs/applications/version-management/sourcehut/paste.nix index 4a86285f50d..4e397c649f9 100644 --- a/pkgs/applications/version-management/sourcehut/paste.nix +++ b/pkgs/applications/version-management/sourcehut/paste.nix @@ -4,12 +4,12 @@ buildPythonPackage rec { pname = "pastesrht"; - version = "0.7.1"; + version = "0.7.3"; src = fetchgit { url = "https://git.sr.ht/~sircmpwn/paste.sr.ht"; rev = version; - sha256 = "19y9ghhi4llyg7kd3a888gbjc698vdamin4hb8dk1j6pd2f0qmjp"; + sha256 = "15689gk37djcwdjb636d97k0il2zpdpksb95l9l4d43wipd7x5qi"; }; patches = [ -- cgit 1.4.1 From 09570b1b0c2c382a21f226abf1f22790651e6a23 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:08:12 -0500 Subject: todosrht: 0.51.11 -> 0.51.13 --- pkgs/applications/version-management/sourcehut/todo.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/todo.nix b/pkgs/applications/version-management/sourcehut/todo.nix index aaee9b54477..a7703bd0729 100644 --- a/pkgs/applications/version-management/sourcehut/todo.nix +++ b/pkgs/applications/version-management/sourcehut/todo.nix @@ -5,12 +5,12 @@ buildPythonPackage rec { pname = "todosrht"; - version = "0.51.11"; + version = "0.51.13"; src = fetchgit { url = "https://git.sr.ht/~sircmpwn/todo.sr.ht"; rev = version; - sha256 = "0x4aray1dappalmn2f4wqrhpa5k1idccnafbfhsnfi6nj718i33a"; + sha256 = "19gywq5j7wlpk7j2whm2ivz0z0i3j50n7k7bx29pghndl7l43c18"; }; patches = [ -- cgit 1.4.1 From 78bbf841ea7f23023e41f8b36b161f7756d96860 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:08:19 -0500 Subject: scmsrht: 0.15.3 -> 0.16.0 --- pkgs/applications/version-management/sourcehut/scm.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/sourcehut/scm.nix b/pkgs/applications/version-management/sourcehut/scm.nix index baccfb1b94b..c5209cee46b 100644 --- a/pkgs/applications/version-management/sourcehut/scm.nix +++ b/pkgs/applications/version-management/sourcehut/scm.nix @@ -4,12 +4,12 @@ buildPythonPackage rec { pname = "scmsrht"; - version = "0.15.3"; + version = "0.16.0"; src = fetchgit { url = "https://git.sr.ht/~sircmpwn/scm.sr.ht"; rev = version; - sha256 = "1rzm3r280211w51sjngm5a3pdlzg07c64324k99bqs1fkc2yrfy6"; + sha256 = "0jny8ihn49n7bpw5nhdrfha78yzpxp277l50y1lj142r59kwmh22"; }; nativeBuildInputs = srht.nativeBuildInputs; -- cgit 1.4.1 From 9e78d12878d3757410bfd3c9d27cadfbd3192543 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:09:23 -0500 Subject: pythonPackages.sqlalchemy-utils: 0.34.2 -> 0.35.0 --- pkgs/development/python-modules/sqlalchemy-utils/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/sqlalchemy-utils/default.nix b/pkgs/development/python-modules/sqlalchemy-utils/default.nix index ef30b6917a3..3db00057c90 100644 --- a/pkgs/development/python-modules/sqlalchemy-utils/default.nix +++ b/pkgs/development/python-modules/sqlalchemy-utils/default.nix @@ -5,12 +5,12 @@ buildPythonPackage rec { pname = "sqlalchemy-utils"; - version = "0.34.2"; + version = "0.35.0"; src = fetchPypi { inherit version; pname = "SQLAlchemy-Utils"; - sha256 = "126c9p8rnnb043w57ah7idqfryczbz4vi9lzsz2cgiaig6fv52b6"; + sha256 = "0phsdcnm21qvxd00zmjd6yxbm1s0i7b1q8zrgfy8cqv9xpmz1w01"; }; propagatedBuildInputs = [ -- cgit 1.4.1 From 9051e284cebd3d1dce2506d38186ef7732a87c34 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:19:05 -0500 Subject: sourcehut.core: fix build --- pkgs/applications/version-management/sourcehut/core.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/applications/version-management/sourcehut/core.nix b/pkgs/applications/version-management/sourcehut/core.nix index ef9136daefa..67486bd28f3 100644 --- a/pkgs/applications/version-management/sourcehut/core.nix +++ b/pkgs/applications/version-management/sourcehut/core.nix @@ -1,6 +1,7 @@ { stdenv, fetchgit, fetchNodeModules, buildPythonPackage , pgpy, flask, bleach, misaka, humanize, markdown, psycopg2, pygments, requests , sqlalchemy, flask_login, beautifulsoup4, sqlalchemy-utils, celery, alembic +, importlib-metadata , sassc, nodejs , writeText }: @@ -47,6 +48,7 @@ buildPythonPackage rec { # Unofficial runtime dependencies? celery alembic + importlib-metadata ]; PKGVER = version; -- cgit 1.4.1 From 8fea62011332f4171b24ca2aa501baa5cf7ad0b0 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Sun, 3 Nov 2019 21:20:02 -0500 Subject: sourcehut.gitsrht: build git-srht-shell --- pkgs/applications/version-management/sourcehut/git.nix | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/version-management/sourcehut/git.nix b/pkgs/applications/version-management/sourcehut/git.nix index 39302057b1d..b580e89c747 100644 --- a/pkgs/applications/version-management/sourcehut/git.nix +++ b/pkgs/applications/version-management/sourcehut/git.nix @@ -6,9 +6,17 @@ let version = "0.35.6"; + buildShell = src: buildGoModule { + inherit src version; + pname = "git-srht-shell"; + goPackagePath = "git.sr.ht/~sircmpwn/git.sr.ht/gitsrht-shell"; + + modSha256 = "1v4npijqgv09ssrxf1y1b3syb2fs7smy7k9rcj3ynsfrn9xgfd9y"; + }; + buildDispatcher = src: buildGoModule { inherit src version; - pname = "git-sr-ht-dispatcher"; + pname = "git-srht-dispatcher"; goPackagePath = "git.sr.ht/~sircmpwn/git.sr.ht/gitsrht-dispatch"; modSha256 = "1lmgmlin460g09dph2hw6yz25d4agqwjhrjv0qqsis7df9qpf3i1"; @@ -42,6 +50,7 @@ in buildPythonPackage rec { postInstall = '' mkdir -p $out/bin + cp ${buildShell "${src}/gitsrht-shell"}/bin/gitsrht-shell $out/bin/gitsrht-shell cp ${buildDispatcher "${src}/gitsrht-dispatch"}/bin/gitsrht-dispatch $out/bin/gitsrht-dispatch ''; -- cgit 1.4.1 From c49707f50f095f8e1f4f66b48d34079a98dd49e8 Mon Sep 17 00:00:00 2001 From: Evan Stoll Date: Sat, 2 Nov 2019 18:27:34 -0400 Subject: cargo-geiger: init at 0.7.3 --- .../tools/rust/cargo-geiger/default.nix | 30 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 3 +++ 2 files changed, 33 insertions(+) create mode 100644 pkgs/development/tools/rust/cargo-geiger/default.nix diff --git a/pkgs/development/tools/rust/cargo-geiger/default.nix b/pkgs/development/tools/rust/cargo-geiger/default.nix new file mode 100644 index 00000000000..7d6fc6781df --- /dev/null +++ b/pkgs/development/tools/rust/cargo-geiger/default.nix @@ -0,0 +1,30 @@ +{ stdenv, lib, fetchFromGitHub +, rustPlatform, pkgconfig +, openssl, Security }: + +rustPlatform.buildRustPackage rec { + pname = "cargo-geiger"; + version = "0.7.3"; + + src = fetchFromGitHub { + owner = "anderejd"; + repo = pname; + rev = "${pname}-${version}"; + sha256 = "1lm8dx19svdpg99zbpfcm1272n18y63sq756hf6k99zi51av17xc"; + }; + + doCheck = false; + + cargoSha256 = "16zvm2y0j7ywv6fx0piq99g8q1sayf3qipd6adrwyqyg8rbf4cw6"; + + buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ]; + nativeBuildInputs = [ pkgconfig ]; + + meta = with lib; { + description = "Detects usage of unsafe Rust in a Rust crate and its dependencies."; + homepage = https://github.com/anderejd/cargo-geiger; + license = with licenses; [ asl20 /* or */ mit ]; + maintainers = with maintainers; [ evanjs ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3d03ef6257c..1be6d168b03 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8526,6 +8526,9 @@ in cargo-bloat = callPackage ../development/tools/rust/cargo-bloat { }; cargo-expand = callPackage ../development/tools/rust/cargo-expand { }; cargo-fuzz = callPackage ../development/tools/rust/cargo-fuzz { }; + cargo-geiger = callPackage ../development/tools/rust/cargo-geiger { + inherit (darwin.apple_sdk.frameworks) Security; + }; cargo-inspect = callPackage ../development/tools/rust/cargo-inspect { inherit (darwin.apple_sdk.frameworks) Security; }; -- cgit 1.4.1 From c6705f54c9dc578231619505634b913c70092a4d Mon Sep 17 00:00:00 2001 From: Evan Stoll Date: Sun, 3 Nov 2019 19:13:08 -0500 Subject: cargo-geiger: run tests; skip tests that require network connectivity - Add note on how we might be able to run all tests in the future --- pkgs/development/tools/rust/cargo-geiger/default.nix | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/rust/cargo-geiger/default.nix b/pkgs/development/tools/rust/cargo-geiger/default.nix index 7d6fc6781df..2512a9ec4f4 100644 --- a/pkgs/development/tools/rust/cargo-geiger/default.nix +++ b/pkgs/development/tools/rust/cargo-geiger/default.nix @@ -13,10 +13,19 @@ rustPlatform.buildRustPackage rec { sha256 = "1lm8dx19svdpg99zbpfcm1272n18y63sq756hf6k99zi51av17xc"; }; - doCheck = false; - cargoSha256 = "16zvm2y0j7ywv6fx0piq99g8q1sayf3qipd6adrwyqyg8rbf4cw6"; + # Multiple tests require internet connectivity, so they are disabled here. + # If we ever get cargo-insta (https://crates.io/crates/insta) in tree, + # we might be able to run these with something like + # `cargo insta review` in the `preCheck` phase. + checkPhase = '' + cargo test -- \ + --skip test_package::case_2 \ + --skip test_package::case_3 \ + --skip test_package::case_6 + ''; + buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ]; nativeBuildInputs = [ pkgconfig ]; -- cgit 1.4.1 From 062a4d4081533812592c43ddb48f6b022f2e04f5 Mon Sep 17 00:00:00 2001 From: Jonathan Ringer Date: Sat, 2 Nov 2019 16:45:18 -0700 Subject: paperwork`: add missing dependency --- pkgs/applications/office/paperwork/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/office/paperwork/default.nix b/pkgs/applications/office/paperwork/default.nix index df5e495f936..3506ea8b551 100644 --- a/pkgs/applications/office/paperwork/default.nix +++ b/pkgs/applications/office/paperwork/default.nix @@ -61,7 +61,7 @@ python3Packages.buildPythonApplication rec { ''; propagatedBuildInputs = with python3Packages; [ - paperwork-backend pypillowfight gtk3 cairo pyxdg dateutil setuptools + paperwork-backend pypillowfight gtk3 cairo pyxdg dateutil setuptools pandas ]; makeWrapperArgs = [ -- cgit 1.4.1 From 2d5aa988743c417c5c548854001fc2889e29e5d3 Mon Sep 17 00:00:00 2001 From: Jos van Bakel Date: Sat, 2 Nov 2019 14:11:31 +0100 Subject: pythonPackages.pyglet: 1.3.2 -> 1.4.2 --- pkgs/development/python-modules/pyglet/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/python-modules/pyglet/default.nix b/pkgs/development/python-modules/pyglet/default.nix index e303f3415d7..1e7beddda7f 100644 --- a/pkgs/development/python-modules/pyglet/default.nix +++ b/pkgs/development/python-modules/pyglet/default.nix @@ -43,6 +43,8 @@ buildPythonPackage rec { path = '${gtk2-x11}/lib/libgdk-x11-2.0${ext}' elif name == 'gdk_pixbuf-2.0': path = '${gdk-pixbuf}/lib/libgdk_pixbuf-2.0${ext}' + elif name == 'Xext': + path = '${xorg.libXext}/lib/libXext${ext}' if path is not None: return ctypes.cdll.LoadLibrary(path) raise Exception("Could not load library {}".format(names)) -- cgit 1.4.1 From 018f66f6d8d21eeebbd4ba0bd462982dbde9dcb9 Mon Sep 17 00:00:00 2001 From: Jos van Bakel Date: Sat, 2 Nov 2019 14:12:15 +0100 Subject: pythonPackages.moderngl-window: init at 1.2.0 --- .../python-modules/moderngl_window/default.nix | 38 ++++++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 40 insertions(+) create mode 100644 pkgs/development/python-modules/moderngl_window/default.nix diff --git a/pkgs/development/python-modules/moderngl_window/default.nix b/pkgs/development/python-modules/moderngl_window/default.nix new file mode 100644 index 00000000000..a3c93978ff6 --- /dev/null +++ b/pkgs/development/python-modules/moderngl_window/default.nix @@ -0,0 +1,38 @@ +{ lib +, buildPythonPackage +, fetchFromGitHub +, isPy3k +, numpy +, moderngl +, pyglet +, pillow +, pyrr +, pytest +}: + +buildPythonPackage rec { + pname = "moderngl_window"; + version = "1.2.0"; + + src = fetchFromGitHub { + owner = "moderngl"; + repo = pname; + rev = version; + sha256 = "054w77lyc2nc0dyx76zsrbq2b3xbywdijhb62b2qqm99ldr1k1x5"; + }; + + propagatedBuildInputs = [ numpy moderngl pyglet pillow pyrr ]; + + disabled = !isPy3k; + + # Tests need a display to run. + doCheck = false; + + meta = with lib; { + homepage = "https://github.com/moderngl/moderngl_window"; + description = "Cross platform helper library for ModernGL making window creation and resource loading simple"; + license = licenses.mit; + platforms = platforms.linux; # should be mesaPlatforms, darwin build breaks. + maintainers = with maintainers; [ c0deaddict ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 8fbe53f7904..6691d49137b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -3893,6 +3893,8 @@ in { moderngl = callPackage ../development/python-modules/moderngl { }; + moderngl-window = callPackage ../development/python-modules/moderngl_window { }; + modestmaps = callPackage ../development/python-modules/modestmaps { }; # Needed here because moinmoin is loaded as a Python library. -- cgit 1.4.1 From e764c16083062658123d05a7c477ead616a71da0 Mon Sep 17 00:00:00 2001 From: scalavisison Date: Fri, 11 Oct 2019 23:08:15 +0200 Subject: pythonPackages.py2bit: init at 0.3.0 --- pkgs/development/python-modules/py2bit/default.nix | 27 ++++++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 29 insertions(+) create mode 100644 pkgs/development/python-modules/py2bit/default.nix diff --git a/pkgs/development/python-modules/py2bit/default.nix b/pkgs/development/python-modules/py2bit/default.nix new file mode 100644 index 00000000000..7699ccab3a2 --- /dev/null +++ b/pkgs/development/python-modules/py2bit/default.nix @@ -0,0 +1,27 @@ +{ lib +, buildPythonPackage +, fetchPypi +, pytest +}: + +buildPythonPackage rec { + pname = "py2bit"; + version = "0.3.0"; + + checkInput = [ pytest ]; + + src = fetchPypi { + inherit pname version; + sha256 = "1vw2nvw1yrl7ikkqsqs1pg239yr5nspvd969r1x9arms1k25a1a5"; + }; + + meta = with lib; { + homepage = "https://github.com/deeptools/py2bit"; + description = "File access to 2bit files"; + longDescription = '' + A python extension, written in C, for quick access to 2bit files. The extension uses lib2bit for file access. + ''; + license = licenses.mit; + maintainers = with maintainers; [ scalavision ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 6691d49137b..3876b7b48c9 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4447,6 +4447,8 @@ in { pybfd = callPackage ../development/python-modules/pybfd { }; + py2bit = callPackage ../development/python-modules/py2bit { }; + pyblock = callPackage ../development/python-modules/pyblock { }; pyblosxom = callPackage ../development/python-modules/pyblosxom { }; -- cgit 1.4.1 From 1994ed8c7ee6cac8d2039945701725d95e59c16d Mon Sep 17 00:00:00 2001 From: scalavision Date: Thu, 31 Oct 2019 19:24:22 +0100 Subject: pythonPackages.pybigwig: init at 0.3.17 --- .../python-modules/pybigwig/default.nix | 33 ++++++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 pkgs/development/python-modules/pybigwig/default.nix diff --git a/pkgs/development/python-modules/pybigwig/default.nix b/pkgs/development/python-modules/pybigwig/default.nix new file mode 100644 index 00000000000..be54a38cd99 --- /dev/null +++ b/pkgs/development/python-modules/pybigwig/default.nix @@ -0,0 +1,33 @@ +{ lib +, buildPythonPackage +, fetchPypi +, pytest +, numpy +, zlib +}: + +buildPythonPackage rec { + pname = "pyBigWig"; + version = "0.3.17"; + + src = fetchPypi { + inherit pname version; + sha256 = "157x6v48y299zm382krf1dw08fdxg95im8lnabhp5vc94s04zxj1"; + }; + + buildInputs = [ zlib ]; + + checkInputs = [ numpy pytest ]; + + meta = with lib; { + homepage = "https://github.com/deeptools/pyBigWig"; + description = "File access to bigBed files, and read and write access to bigWig files"; + longDescription = '' + A python extension, written in C, for quick access to bigBed files + and access to and creation of bigWig files. This extension uses + libBigWig for local and remote file access. + ''; + license = licenses.mit; + maintainers = with maintainers; [ scalavision ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 3876b7b48c9..ea114f2dd65 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4447,6 +4447,8 @@ in { pybfd = callPackage ../development/python-modules/pybfd { }; + pybigwig = callPackage ../development/python-modules/pybigwig { }; + py2bit = callPackage ../development/python-modules/py2bit { }; pyblock = callPackage ../development/python-modules/pyblock { }; -- cgit 1.4.1 From f3799926800dcb7f53f738e98cffafde6da3a2d9 Mon Sep 17 00:00:00 2001 From: scalavision Date: Thu, 31 Oct 2019 19:27:48 +0100 Subject: pythonPackages.deeptoolsIntervals: init at 0.1.9 --- .../python-modules/deeptoolsintervals/default.nix | 28 ++++++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 30 insertions(+) create mode 100644 pkgs/development/python-modules/deeptoolsintervals/default.nix diff --git a/pkgs/development/python-modules/deeptoolsintervals/default.nix b/pkgs/development/python-modules/deeptoolsintervals/default.nix new file mode 100644 index 00000000000..eef8d51ae91 --- /dev/null +++ b/pkgs/development/python-modules/deeptoolsintervals/default.nix @@ -0,0 +1,28 @@ +{ lib +, buildPythonPackage +, fetchPypi +, pytest +, zlib +, lzma +}: + +buildPythonPackage rec { + pname = "deeptoolsintervals"; + version = "0.1.9"; + + src = fetchPypi { + inherit pname version; + sha256 = "1xnl80nblysj6dylj4683wgrfa425rkx4dp5k65hvwdns9pw753x"; + }; + + buildInputs = [ zlib lzma ]; + + checkInputs = [ pytest ]; + + meta = with lib; { + homepage = "https://deeptools.readthedocs.io/en/develop"; + description = "Helper library for deeptools"; + license = licenses.mit; + maintainers = with maintainers; [ scalavision ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index ea114f2dd65..c4151922d62 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -521,6 +521,8 @@ in { deap = callPackage ../development/python-modules/deap { }; + deeptoolsintervals = callPackage ../development/python-modules/deeptoolsintervals { }; + dkimpy = callPackage ../development/python-modules/dkimpy { }; dictionaries = callPackage ../development/python-modules/dictionaries { }; -- cgit 1.4.1 From d9b40f6397de11c3d59001fa9a5cec226ee408c1 Mon Sep 17 00:00:00 2001 From: scalavision Date: Thu, 31 Oct 2019 19:34:05 +0100 Subject: deeptools: init at 3.3.1 --- .../science/biology/deeptools/default.nix | 42 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 44 insertions(+) create mode 100644 pkgs/applications/science/biology/deeptools/default.nix diff --git a/pkgs/applications/science/biology/deeptools/default.nix b/pkgs/applications/science/biology/deeptools/default.nix new file mode 100644 index 00000000000..78a6f483337 --- /dev/null +++ b/pkgs/applications/science/biology/deeptools/default.nix @@ -0,0 +1,42 @@ +{ lib +, python +}: +with python.pkgs; +buildPythonApplication rec { + pname = "deepTools"; + version = "3.3.1"; + + src = fetchPypi { + inherit pname version; + sha256 = "08p36p9ncj5s8qf1r7h83x4rnmi63l3yk6mnr3wgpg2qgvwl0hji"; + }; + + propagatedBuildInputs = [ + numpy + numpydoc + scipy + py2bit + pybigwig + pysam + matplotlib + plotly + deeptoolsintervals + ]; + + checkInputs = [ pytest ]; + + meta = with lib; { + homepage = "https://deeptools.readthedocs.io/en/develop"; + description = "Tools for exploring deep DNA sequencing data"; + longDescription = '' + deepTools contains useful modules to process the mapped reads data for multiple + quality checks, creating normalized coverage files in standard bedGraph and bigWig + file formats, that allow comparison between different files (for example, treatment and control). + Finally, using such normalized and standardized files, deepTools can create many + publication-ready visualizations to identify enrichments and for functional + annotations of the genome. + ''; + license = licenses.gpl3; + maintainers = with maintainers; [ scalavision ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1be6d168b03..6e8fe9ac305 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -23286,6 +23286,8 @@ in dcm2niix = callPackage ../applications/science/biology/dcm2niix { }; + deeptools = callPackage ../applications/science/biology/deeptools { python = python3; }; + delly = callPackage ../applications/science/biology/delly { }; diamond = callPackage ../applications/science/biology/diamond { }; -- cgit 1.4.1 From e834edcbddaabe967f51abd4fe1fea0ba1e569ab Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sun, 3 Nov 2019 02:37:52 -0800 Subject: zsh-history-substring-search: 1.0.1 -> 1.0.2 --- pkgs/shells/zsh/zsh-history-substring-search/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/shells/zsh/zsh-history-substring-search/default.nix b/pkgs/shells/zsh/zsh-history-substring-search/default.nix index b7521654667..fcd294f4dce 100644 --- a/pkgs/shells/zsh/zsh-history-substring-search/default.nix +++ b/pkgs/shells/zsh/zsh-history-substring-search/default.nix @@ -2,13 +2,13 @@ stdenv.mkDerivation rec { pname = "zsh-history-substring-search"; - version = "1.0.1"; + version = "1.0.2"; src = fetchFromGitHub { owner = "zsh-users"; repo = "zsh-history-substring-search"; rev = "v${version}"; - sha256 = "0lgmq1xcccnz5cf7vl0r0qj351hwclx9p80cl0qczxry4r2g5qaz"; + sha256 = "0y8va5kc2ram38hbk2cibkk64ffrabfv1sh4xm7pjspsba9n5p1y"; }; installPhase = '' -- cgit 1.4.1 From 59c5bfc86b75247cb48539eeaaea2a3c5f320b1d Mon Sep 17 00:00:00 2001 From: Chuck Date: Thu, 5 Sep 2019 17:29:01 -0700 Subject: nixos/nixos-option: Rewrite in a more suitable language Also add --all, which shows the value of all options. Diffing the --all output on either side of contemplated changes is a lovely way to better understand what's going on inside nixos. --- nixos/doc/manual/man-nixos-option.xml | 21 +- nixos/modules/installer/tools/nixos-option.sh | 327 ------------ .../installer/tools/nixos-option/CMakeLists.txt | 8 + .../installer/tools/nixos-option/default.nix | 8 + .../tools/nixos-option/libnix-copy-paste.cc | 81 +++ .../tools/nixos-option/libnix-copy-paste.hh | 9 + .../installer/tools/nixos-option/nixos-option.cc | 585 +++++++++++++++++++++ nixos/modules/installer/tools/tools.nix | 5 +- 8 files changed, 695 insertions(+), 349 deletions(-) delete mode 100644 nixos/modules/installer/tools/nixos-option.sh create mode 100644 nixos/modules/installer/tools/nixos-option/CMakeLists.txt create mode 100644 nixos/modules/installer/tools/nixos-option/default.nix create mode 100644 nixos/modules/installer/tools/nixos-option/libnix-copy-paste.cc create mode 100644 nixos/modules/installer/tools/nixos-option/libnix-copy-paste.hh create mode 100644 nixos/modules/installer/tools/nixos-option/nixos-option.cc diff --git a/nixos/doc/manual/man-nixos-option.xml b/nixos/doc/manual/man-nixos-option.xml index 81e3739b3be..beabf020c92 100644 --- a/nixos/doc/manual/man-nixos-option.xml +++ b/nixos/doc/manual/man-nixos-option.xml @@ -19,14 +19,10 @@ - + - - - - option.name @@ -62,22 +58,11 @@ - - - - - This option enables verbose mode, which currently is just the Bash - set debug mode. - - - - - - + - This option causes the output to be rendered as XML. + Print the values of all options. diff --git a/nixos/modules/installer/tools/nixos-option.sh b/nixos/modules/installer/tools/nixos-option.sh deleted file mode 100644 index 4560e9c7403..00000000000 --- a/nixos/modules/installer/tools/nixos-option.sh +++ /dev/null @@ -1,327 +0,0 @@ -#! @shell@ -e - -# FIXME: rewrite this in a more suitable language. - -usage () { - exec man nixos-option - exit 1 -} - -##################### -# Process Arguments # -##################### - -xml=false -verbose=false -nixPath="" - -option="" -exit_code=0 - -argfun="" -for arg; do - if test -z "$argfun"; then - case $arg in - -*) - sarg="$arg" - longarg="" - while test "$sarg" != "-"; do - case $sarg in - --*) longarg=$arg; sarg="--";; - -I) argfun="include_nixpath";; - -*) usage;; - esac - # remove the first letter option - sarg="-${sarg#??}" - done - ;; - *) longarg=$arg;; - esac - for larg in $longarg; do - case $larg in - --xml) xml=true;; - --verbose) verbose=true;; - --help) usage;; - -*) usage;; - *) if test -z "$option"; then - option="$larg" - else - usage - fi;; - esac - done - else - case $argfun in - set_*) - var=$(echo $argfun | sed 's,^set_,,') - eval $var=$arg - ;; - include_nixpath) - nixPath="-I $arg $nixPath" - ;; - esac - argfun="" - fi -done - -if $verbose; then - set -x -else - set +x -fi - -############################# -# Process the configuration # -############################# - -evalNix(){ - # disable `-e` flag, it's possible that the evaluation of `nix-instantiate` fails (e.g. due to broken pkgs) - set +e - result=$(nix-instantiate ${nixPath:+$nixPath} - --eval-only "$@" 2>&1) - exit_code=$? - set -e - - if test $exit_code -eq 0; then - sed '/^warning: Nix search path/d' <&2 <" - else if strict then - if isAttrs x then mapAttrs (n: cleanOutput) x - else if isList x then map cleanOutput x - else x - else x; -in - cleanOutput value -EOF -} - -evalOpt(){ - evalAttr "option" "" "$@" -} - -evalCfg(){ - local strict="$1" - evalAttr "config" "$strict" -} - -findSources(){ - local suffix=$1 - evalNix --strict <,0,g; :inner; s/{[^\{\}]*};/0;/g; t inner;' | \ - evalNix --strict -} - -# map a simple list which contains strings or paths. -nixMap() { - local fun="$1" - local list="$2" - local elem - for elem in $list; do - test $elem = '[' -o $elem = ']' && continue; - $fun $elem - done -} - -# This duplicates the work made below, but it is useful for processing -# the output of nixos-option with other tools such as nixos-gui. -if $xml; then - evalNix --xml --no-location < /dev/null)" = '"option"'; then - echo "Value:" - evalCfg 1 - - echo - - echo "Default:" - if default=$(evalOpt "default" - 2> /dev/null); then - echo "$default" - else - echo "" - fi - echo - if example=$(evalOpt "example" - 2> /dev/null); then - echo "Example:" - echo "$example" - echo - fi - echo "Description:" - echo - echo $(evalOpt "description") - - echo $desc; - - printPath () { echo " $1"; } - - echo "Declared by:" - nixMap printPath "$(findSources "declarations")" - echo - echo "Defined by:" - nixMap printPath "$(findSources "files")" - echo - -else - # echo 1>&2 "Warning: This value is not an option." - - result=$(evalCfg "") - if [ ! -z "$result" ]; then - names=$(attrNames "$result" 2> /dev/null) - echo 1>&2 "This attribute set contains:" - escapeQuotes () { eval echo "$1"; } - nixMap escapeQuotes "$names" - else - echo 1>&2 "An error occurred while looking for attribute names. Are you sure that '$option' exists?" - fi -fi - -exit $exit_code diff --git a/nixos/modules/installer/tools/nixos-option/CMakeLists.txt b/nixos/modules/installer/tools/nixos-option/CMakeLists.txt new file mode 100644 index 00000000000..e5834598c4f --- /dev/null +++ b/nixos/modules/installer/tools/nixos-option/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required (VERSION 2.6) +project (nixos-option) + +add_executable(nixos-option nixos-option.cc libnix-copy-paste.cc) +target_link_libraries(nixos-option PRIVATE -lnixmain -lnixexpr -lnixstore -lnixutil) +target_compile_features(nixos-option PRIVATE cxx_std_17) + +install (TARGETS nixos-option DESTINATION bin) diff --git a/nixos/modules/installer/tools/nixos-option/default.nix b/nixos/modules/installer/tools/nixos-option/default.nix new file mode 100644 index 00000000000..6464a91052c --- /dev/null +++ b/nixos/modules/installer/tools/nixos-option/default.nix @@ -0,0 +1,8 @@ +{stdenv, boost, cmake, pkgconfig, nix, ... }: +stdenv.mkDerivation rec { + name = "nixos-option"; + src = ./.; + nativeBuildInputs = [ cmake pkgconfig ]; + buildInputs = [ boost nix ]; + enableParallelBuilding = true; +} diff --git a/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.cc b/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.cc new file mode 100644 index 00000000000..81de5ff8523 --- /dev/null +++ b/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.cc @@ -0,0 +1,81 @@ +// These are useful methods inside the nix library that ought to be exported. +// Since they are not, copy/paste them here. +// TODO: Delete these and use the ones in the library as they become available. + +#include // for nix/globals.hh's reference to SYSTEM + +#include "libnix-copy-paste.hh" +#include // for basic_altstringbuf... +#include // for basic_altstringbuf... +#include // for basic_format +#include // for format +#include // for basic_format::basi... +#include // for get_pointer +#include // for operator<<, basic_... +#include // for Strings, Error +#include // for string, basic_string + +using boost::format; +using nix::Error; +using nix::Strings; +using std::string; + +// From nix/src/libexpr/attr-path.cc +Strings parseAttrPath(const string &s) { + Strings res; + string cur; + string::const_iterator i = s.begin(); + while (i != s.end()) { + if (*i == '.') { + res.push_back(cur); + cur.clear(); + } else if (*i == '"') { + ++i; + while (1) { + if (i == s.end()) + throw Error(format("missing closing quote in selection path '%1%'") % + s); + if (*i == '"') + break; + cur.push_back(*i++); + } + } else + cur.push_back(*i); + ++i; + } + if (!cur.empty()) + res.push_back(cur); + return res; +} + +// From nix/src/nix/repl.cc +bool isVarName(const string &s) { + if (s.size() == 0) + return false; + char c = s[0]; + if ((c >= '0' && c <= '9') || c == '-' || c == '\'') + return false; + for (auto &i : s) + if (!((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || + (i >= '0' && i <= '9') || i == '_' || i == '-' || i == '\'')) + return false; + return true; +} + +// From nix/src/nix/repl.cc +std::ostream &printStringValue(std::ostream &str, const char *string) { + str << "\""; + for (const char *i = string; *i; i++) + if (*i == '\"' || *i == '\\') + str << "\\" << *i; + else if (*i == '\n') + str << "\\n"; + else if (*i == '\r') + str << "\\r"; + else if (*i == '\t') + str << "\\t"; + else + str << *i; + str << "\""; + return str; +} diff --git a/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.hh b/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.hh new file mode 100644 index 00000000000..225e8b1b87e --- /dev/null +++ b/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.hh @@ -0,0 +1,9 @@ +#pragma once + +#include +#include +#include + +nix::Strings parseAttrPath(const std::string &s); +bool isVarName(const std::string &s); +std::ostream &printStringValue(std::ostream &str, const char *string); diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc new file mode 100644 index 00000000000..c778596d615 --- /dev/null +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -0,0 +1,585 @@ +#include // for nix/globals.hh's reference to SYSTEM + +#include // for sort +#include // for function +#include // for operator<<, basic_ostream, ostrin... +#include // for next +#include // for _List_iterator +#include // for allocator, unique_ptr, make_unique +#include // for argvToStrings, UsageError +#include // for findAlongAttrPath +#include // for Attr, Bindings, Bindings::iterator +#include // for MixEvalArgs +#include // for EvalState::forceValue +#include // for EvalState, initGC, operator<< +#include // for initPlugins, Settings, settings +#include // for Pos +#include // for getArg, LegacyArgs, printVersion +#include // for openStore +#include // for Symbol, SymbolTable +#include // for Error, Path, Strings, PathSet +#include // for absPath, baseNameOf +#include // for Value, Value::(anonymous), Value:... +#include // for string, operator+, operator== +#include // for move +#include // for get, holds_alternative, variant +#include // for vector<>::iterator, vector + +#include "libnix-copy-paste.hh" + +using nix::absPath; +using nix::Bindings; +using nix::Error; +using nix::EvalState; +using nix::Path; +using nix::PathSet; +using nix::Strings; +using nix::Symbol; +using nix::tAttrs; +using nix::tLambda; +using nix::tString; +using nix::UsageError; +using nix::Value; + +// An ostream wrapper to handle nested indentation +class Out { +public: + class Separator {}; + const static Separator sep; + enum LinePolicy { ONE_LINE, MULTI_LINE }; + explicit Out(std::ostream &ostream) + : ostream(ostream), policy(ONE_LINE), write_since_sep(true) {} + Out(Out &o, std::string const &start, std::string const &end, + LinePolicy policy); + Out(Out &o, std::string const &start, std::string const &end, int count) + : Out(o, start, end, count < 2 ? ONE_LINE : MULTI_LINE) {} + Out(Out const &) = delete; + Out(Out &&) = default; + Out &operator=(Out const &) = delete; + Out &operator=(Out &&) = delete; + ~Out() { ostream << end; } + +private: + std::ostream &ostream; + std::string indentation; + std::string end; + LinePolicy policy; + bool write_since_sep; + template friend Out &operator<<(Out &o, T thing); +}; + +template Out &operator<<(Out &o, T thing) { + if (!o.write_since_sep && o.policy == Out::MULTI_LINE) { + o.ostream << o.indentation; + } + o.write_since_sep = true; + o.ostream << thing; + return o; +} + +template <> +Out &operator<<(Out &o, Out::Separator /* thing */) { + o.ostream << (o.policy == Out::ONE_LINE ? " " : "\n"); + o.write_since_sep = false; + return o; +} + +Out::Out(Out &o, std::string const &start, std::string const &end, + LinePolicy policy) + : ostream(o.ostream), + indentation(policy == ONE_LINE ? o.indentation : o.indentation + " "), + end(policy == ONE_LINE ? end : o.indentation + end), policy(policy), + write_since_sep(true) { + o << start; + *this << Out::sep; +} + +// Stuff needed for evaluation +struct Context { + Context(EvalState *state, Bindings *autoArgs, Value options_root, + Value config_root) + : state(state), autoArgs(autoArgs), options_root(options_root), + config_root(config_root), + underscore_type(state->symbols.create("_type")) {} + EvalState *state; + Bindings *autoArgs; + Value options_root; + Value config_root; + Symbol underscore_type; +}; + +Value evaluateValue(Context *ctx, Value *v) { + ctx->state->forceValue(*v); + if (ctx->autoArgs->empty()) { + return *v; + } + Value called{}; + ctx->state->autoCallFunction(*ctx->autoArgs, *v, called); + return called; +} + +bool isOption(Context *ctx, Value const &v) { + if (v.type != tAttrs) { + return false; + } + auto const &actual_type = v.attrs->find(ctx->underscore_type); + if (actual_type == v.attrs->end()) { + return false; + } + try { + Value evaluated_type = evaluateValue(ctx, actual_type->value); + if (evaluated_type.type != tString) { + return false; + } + return evaluated_type.string.s == static_cast("option"); + } catch (Error &) { + return false; + } +} + +// Add quotes to a component of a path. +// These are needed for paths like: +// fileSystems."/".fsType +// systemd.units."dbus.service".text +std::string quoteAttribute(std::string const &attribute) { + if (isVarName(attribute)) { + return attribute; + } + std::ostringstream buf; + printStringValue(buf, attribute.c_str()); + return buf.str(); +} + +std::string const appendPath(std::string const &prefix, + std::string const &suffix) { + if (prefix.empty()) { + return quoteAttribute(suffix); + } + return prefix + "." + quoteAttribute(suffix); +} + +bool forbiddenRecursionName(std::string name) { + return (!name.empty() && name[0] == '_') || name == "haskellPackages"; +} + +void recurse(const std::function)> &f, + Context *ctx, Value v, std::string const &path) { + std::variant evaluated; + try { + evaluated = evaluateValue(ctx, &v); + } catch (Error &e) { + evaluated = e; + } + if (!f(path, evaluated)) { + return; + } + if (std::holds_alternative(evaluated)) { + return; + } + Value const &evaluated_value = std::get(evaluated); + if (evaluated_value.type != tAttrs) { + return; + } + for (auto const &child : evaluated_value.attrs->lexicographicOrder()) { + if (forbiddenRecursionName(child->name)) { + continue; + } + recurse(f, ctx, *child->value, appendPath(path, child->name)); + } +} + +// Calls f on all the option names +void mapOptions(const std::function &f, + Context *ctx, Value root) { + recurse( + [f, ctx](std::string const &path, std::variant v) { + bool isOpt = std::holds_alternative(v) || + isOption(ctx, std::get(v)); + if (isOpt) { + f(path); + } + return !isOpt; + }, + ctx, root, ""); +} + +// Calls f on all the config values inside one option. +// Simple options have one config value inside, like sound.enable = true. +// Compound options have multiple config values. For example, the option +// "users.users" has about 1000 config values inside it: +// users.users.avahi.createHome = false; +// users.users.avahi.cryptHomeLuks = null; +// users.users.avahi.description = "`avahi-daemon' privilege separation user"; +// ... +// users.users.avahi.openssh.authorizedKeys.keyFiles = [ ]; +// users.users.avahi.openssh.authorizedKeys.keys = [ ]; +// ... +// users.users.avahi.uid = 10; +// users.users.avahi.useDefaultShell = false; +// users.users.cups.createHome = false; +// ... +// users.users.cups.useDefaultShell = false; +// users.users.gdm = ... ... ... +// users.users.messagebus = ... .. ... +// users.users.nixbld1 = ... .. ... +// ... +// users.users.systemd-timesync = ... .. ... +void mapConfigValuesInOption( + const std::function v)> &f, + std::string const &path, Context *ctx) { + Value *option; + try { + option = + findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, ctx->config_root); + } catch (Error &e) { + f(path, e); + return; + } + recurse( + [f, ctx](std::string const &path, std::variant v) { + bool leaf = std::holds_alternative(v) || + std::get(v).type != tAttrs || + ctx->state->isDerivation(std::get(v)); + if (!leaf) { + return true; // Keep digging + } + f(path, v); + return false; + }, + ctx, *option, path); +} + +std::string describeError(Error const &e) { return "«error: " + e.msg() + "»"; } + +void describeDerivation(Context *ctx, Out &out, Value v) { + // Copy-pasted from nix/src/nix/repl.cc :( + Bindings::iterator i = v.attrs->find(ctx->state->sDrvPath); + PathSet pathset; + try { + Path drvPath = i != v.attrs->end() + ? ctx->state->coerceToPath(*i->pos, *i->value, pathset) + : "???"; + out << "«derivation " << drvPath << "»"; + } catch (Error &e) { + out << describeError(e); + } +} + +Value parseAndEval(EvalState *state, std::string const &expression, + std::string const &path) { + Value v{}; + state->eval(state->parseExprFromString(expression, absPath(path)), v); + return v; +} + +void printValue(Context *ctx, Out &out, std::variant maybe_value, + std::string const &path); + +void printUnsortedList(Context *ctx, Out &out, Value &v) { + Out list_out(out, "[", "]", v.listSize()); + for (unsigned int n = 0; n < v.listSize(); ++n) { + printValue(ctx, list_out, *v.listElems()[n], ""); + list_out << Out::sep; + } +} + +void printSortedList(Context *ctx, Out &out, Value &v) { + std::vector results; + for (unsigned int n = 0; n < v.listSize(); ++n) { + std::ostringstream buf; + Out buf_out(buf); + printValue(ctx, buf_out, *v.listElems()[n], ""); + results.push_back(buf.str()); + } + std::sort(results.begin(), results.end()); + Out list_out(out, "[", "]", v.listSize()); + for (auto const &v : results) { + list_out << v << Out::sep; + } +} + +bool shouldSort(Context *ctx, Value &v) { + // Some lists should clearly be printed in sorted order, like + // environment.systemPackages. Some clearly should not, like + // services.xserver.multitouch.buttonsMap. As a conservative heuristic, sort + // lists of derivations. + return v.listSize() > 0 && ctx->state->isDerivation(*v.listElems()[0]); +} + +void printList(Context *ctx, Out &out, Value &v) { + if (shouldSort(ctx, v)) { + printSortedList(ctx, out, v); + } else { + printUnsortedList(ctx, out, v); + } +} + +void printAttrs(Context *ctx, Out &out, Value &v, std::string const &path) { + Out attrs_out(out, "{", "}", v.attrs->size()); + for (const auto &a : v.attrs->lexicographicOrder()) { + std::string name = a->name; + attrs_out << name << " = "; + printValue(ctx, attrs_out, *a->value, appendPath(path, name)); + attrs_out << ";" << Out::sep; + } +} + +void multiLineStringEscape(Out &out, std::string const &s) { + int i; + for (i = 1; i < s.size(); i++) { + if (s[i - 1] == '$' && s[i] == '{') { + out << "''${"; + i++; + } else if (s[i - 1] == '\'' && s[i] == '\'') { + out << "'''"; + i++; + } else { + out << s[i - 1]; + } + } + if (i == s.size()) { + out << s[i - 1]; + } +} + +void printMultiLineString(Out &out, Value const &v) { + std::string s = v.string.s; + Out str_out(out, "''", "''", Out::MULTI_LINE); + std::string::size_type begin = 0; + while (begin < s.size()) { + std::string::size_type end = s.find('\n', begin); + if (end == std::string::npos) { + multiLineStringEscape(str_out, s.substr(begin, s.size() - begin)); + break; + } + multiLineStringEscape(str_out, s.substr(begin, end - begin)); + str_out << Out::sep; + begin = end + 1; + } +} + +void printValue(Context *ctx, Out &out, std::variant maybe_value, + std::string const &path) { + try { + if (std::holds_alternative(maybe_value)) { + throw Error{std::get(maybe_value)}; + } + Value v = evaluateValue(ctx, &std::get(maybe_value)); + if (ctx->state->isDerivation(v)) { + describeDerivation(ctx, out, v); + } else if (v.isList()) { + printList(ctx, out, v); + } else if (v.type == tAttrs) { + printAttrs(ctx, out, v, path); + } else if (v.type == tString && + std::string(v.string.s).find('\n') != std::string::npos) { + printMultiLineString(out, v); + } else { + ctx->state->forceValueDeep(v); + out << v; + } + } catch (Error &e) { + if (e.msg() == "The option `" + path + "' is used but not defined.") { + // 93% of errors are this, and just letting this message through would be + // misleading. These values may or may not actually be "used" in the + // config. The thing throwing the error message assumes that if anything + // ever looks at this value, it is a "use" of this value. But here in + // nixos-options-summary, we are looking at this value only to print it. + // In order to avoid implying that this undefined value is actually + // referenced, eat the underlying error message and emit "«not defined»". + out << "«not defined»"; + } else { + out << describeError(e); + } + } +} + +void printConfigValue(Context *ctx, Out &out, std::string const &path, + std::variant v) { + out << path << " = "; + printValue(ctx, out, std::move(v), path); + out << ";\n"; +} + +void printAll(Context *ctx, Out &out) { + mapOptions( + [ctx, &out](std::string const &option_path) { + mapConfigValuesInOption( + [ctx, &out](std::string const &config_path, + std::variant v) { + printConfigValue(ctx, out, config_path, v); + }, + option_path, ctx); + }, + ctx, ctx->options_root); +} + +void printAttr(Context *ctx, Out &out, std::string const &path, Value *root) { + try { + printValue(ctx, out, + *findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, *root), + path); + } catch (Error &e) { + out << describeError(e); + } +} + +void printOption(Context *ctx, Out &out, std::string const &path, + Value *option) { + out << "Value:\n"; + printAttr(ctx, out, path, &ctx->config_root); + + out << "\n\nDefault:\n"; + printAttr(ctx, out, "default", option); + + out << "\n\nExample:\n"; + printAttr(ctx, out, "example", option); + + out << "\n\nDescription:\n"; + printAttr(ctx, out, "description", option); + + out << "\n\nDeclared by:\n"; + printAttr(ctx, out, "declarations", option); + + out << "\n\nDefined by:\n"; + printAttr(ctx, out, "files", option); + out << "\n"; +} + +void printListing(Out &out, Value *v) { + // Print this header on stderr rather than stdout because the old shell script + // implementation did. I don't know why. + std::cerr << "This attribute set contains:\n"; + for (const auto &a : v->attrs->lexicographicOrder()) { + std::string name = a->name; + if (!name.empty() && name[0] != '_') { + out << name << "\n"; + } + } +} + +// Carefully walk an option path, looking for sub-options when a path walks past +// an option value. +Value findAlongOptionPath(Context *ctx, std::string const &path) { + Strings tokens = parseAttrPath(path); + Value v = ctx->options_root; + for (auto i = tokens.begin(); i != tokens.end(); i++) { + bool last_attribute = std::next(i) == tokens.end(); + auto const &attr = *i; + v = evaluateValue(ctx, &v); + if (attr.empty()) { + throw Error("empty attribute name in selection path '" + path + "'"); + } + if (isOption(ctx, v) && !last_attribute) { + Value getSubOptions = evaluateValue( + ctx, findAlongAttrPath(*ctx->state, "type.getSubOptions", + *ctx->autoArgs, v)); + if (getSubOptions.type != tLambda) { + throw Error("Option's type.getSubOptions isn't a function at '" + attr + + "' in path '" + path + "'"); + } + Value emptyString{}; + nix::mkString(emptyString, ""); + ctx->state->callFunction(getSubOptions, emptyString, v, nix::Pos{}); + // Note that we've consumed attr, but didn't actually use it. + } else if (v.type != tAttrs) { + throw Error("attribute '" + attr + "' in path '" + path + + "' attempts to index a value that should be a set but is " + + showType(v)); + } else { + auto const &next = v.attrs->find(ctx->state->symbols.create(attr)); + if (next == v.attrs->end()) { + throw Error("attribute '" + attr + "' in path '" + path + + "' not found"); + } + v = *next->value; + } + } + return v; +} + +void printOne(Context *ctx, Out &out, std::string const &path) { + try { + Value option = findAlongOptionPath(ctx, path); + option = evaluateValue(ctx, &option); + if (isOption(ctx, option)) { + printOption(ctx, out, path, &option); + } else { + printListing(out, &option); + } + } catch (Error &e) { + std::cerr << "error: " << e.msg() + << "\nAn error occurred while looking for attribute names. Are " + "you sure that '" + << path << "' exists?\n"; + } +} + +int main(int argc, char **argv) { + bool all = false; + std::string path = "."; + std::string options_expr = "(import {}).options"; + std::string config_expr = "(import {}).config"; + std::vector args; + + struct MyArgs : nix::LegacyArgs, nix::MixEvalArgs { + using nix::LegacyArgs::LegacyArgs; + }; + + MyArgs myArgs(nix::baseNameOf(argv[0]), + [&](Strings::iterator &arg, const Strings::iterator &end) { + if (*arg == "--help") { + nix::showManPage("nixos-options-summary"); + } else if (*arg == "--version") { + nix::printVersion("nixos-options-summary"); + } else if (*arg == "--all") { + all = true; + } else if (*arg == "--path") { + path = nix::getArg(*arg, arg, end); + } else if (*arg == "--options_expr") { + options_expr = nix::getArg(*arg, arg, end); + } else if (*arg == "--config_expr") { + config_expr = nix::getArg(*arg, arg, end); + } else if (!arg->empty() && arg->at(0) == '-') { + return false; + } else { + args.push_back(*arg); + } + return true; + }); + + myArgs.parseCmdline(nix::argvToStrings(argc, argv)); + + nix::initPlugins(); + nix::initGC(); + nix::settings.readOnlyMode = true; + auto store = nix::openStore(); + auto state = std::make_unique(myArgs.searchPath, store); + + Value options_root = parseAndEval(state.get(), options_expr, path); + Value config_root = parseAndEval(state.get(), config_expr, path); + + Context ctx{state.get(), myArgs.getAutoArgs(*state), options_root, + config_root}; + Out out(std::cout); + + if (all) { + if (!args.empty()) { + throw UsageError("--all cannot be used with arguments"); + } + printAll(&ctx, out); + } else { + if (args.empty()) { + printOne(&ctx, out, ""); + } + for (auto const &arg : args) { + printOne(&ctx, out, arg); + } + } + + ctx.state->printStats(); + + return 0; +} diff --git a/nixos/modules/installer/tools/tools.nix b/nixos/modules/installer/tools/tools.nix index 052e7fdd4fc..e4db39b5c81 100644 --- a/nixos/modules/installer/tools/tools.nix +++ b/nixos/modules/installer/tools/tools.nix @@ -41,10 +41,7 @@ let inherit (config.system.nixos-generate-config) configuration; }; - nixos-option = makeProg { - name = "nixos-option"; - src = ./nixos-option.sh; - }; + nixos-option = pkgs.callPackage ./nixos-option { }; nixos-version = makeProg { name = "nixos-version"; -- cgit 1.4.1 From 26c45dfec2716b1508e5d7ac8efdbdf570f2eb99 Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 01:25:00 -0700 Subject: nixos/nixos-option: Show options' types #27920 --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index c778596d615..6787c73e164 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -434,6 +434,9 @@ void printOption(Context *ctx, Out &out, std::string const &path, out << "\n\nDefault:\n"; printAttr(ctx, out, "default", option); + out << "\n\nType:\n"; + printAttr(ctx, out, "type.description", option); + out << "\n\nExample:\n"; printAttr(ctx, out, "example", option); -- cgit 1.4.1 From 74f05df671e6381c1515fc9da72c44051ef8753c Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 02:50:50 -0700 Subject: nixos/nixos-option: Fix references to old name --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 6787c73e164..49da3ce6874 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -386,7 +386,7 @@ void printValue(Context *ctx, Out &out, std::variant maybe_value, // misleading. These values may or may not actually be "used" in the // config. The thing throwing the error message assumes that if anything // ever looks at this value, it is a "use" of this value. But here in - // nixos-options-summary, we are looking at this value only to print it. + // nixos-option, we are looking at this value only to print it. // In order to avoid implying that this undefined value is actually // referenced, eat the underlying error message and emit "«not defined»". out << "«not defined»"; @@ -534,9 +534,9 @@ int main(int argc, char **argv) { MyArgs myArgs(nix::baseNameOf(argv[0]), [&](Strings::iterator &arg, const Strings::iterator &end) { if (*arg == "--help") { - nix::showManPage("nixos-options-summary"); + nix::showManPage("nixos-option"); } else if (*arg == "--version") { - nix::printVersion("nixos-options-summary"); + nix::printVersion("nixos-option"); } else if (*arg == "--all") { all = true; } else if (*arg == "--path") { -- cgit 1.4.1 From 4af8dbf8964924dc3d2ec2bbfa159dae288b29fc Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 09:45:05 -0700 Subject: Reformat for 4-space indentation Specifically, with clang-format --style='{ IndentWidth: 4, BreakBeforeBraces: Mozilla, ColumnLimit: 120, PointerAlignment: Middle }' which was the clang-format invocation that produced the fewest diffs on the nix source out of ~20 that I tried. --- .../tools/nixos-option/libnix-copy-paste.cc | 104 +-- .../tools/nixos-option/libnix-copy-paste.hh | 6 +- .../installer/tools/nixos-option/nixos-option.cc | 877 +++++++++++---------- 3 files changed, 496 insertions(+), 491 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.cc b/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.cc index 81de5ff8523..875c07da639 100644 --- a/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.cc +++ b/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.cc @@ -21,61 +21,63 @@ using nix::Strings; using std::string; // From nix/src/libexpr/attr-path.cc -Strings parseAttrPath(const string &s) { - Strings res; - string cur; - string::const_iterator i = s.begin(); - while (i != s.end()) { - if (*i == '.') { - res.push_back(cur); - cur.clear(); - } else if (*i == '"') { - ++i; - while (1) { - if (i == s.end()) - throw Error(format("missing closing quote in selection path '%1%'") % - s); - if (*i == '"') - break; - cur.push_back(*i++); - } - } else - cur.push_back(*i); - ++i; - } - if (!cur.empty()) - res.push_back(cur); - return res; +Strings parseAttrPath(const string & s) +{ + Strings res; + string cur; + string::const_iterator i = s.begin(); + while (i != s.end()) { + if (*i == '.') { + res.push_back(cur); + cur.clear(); + } else if (*i == '"') { + ++i; + while (1) { + if (i == s.end()) + throw Error(format("missing closing quote in selection path '%1%'") % s); + if (*i == '"') + break; + cur.push_back(*i++); + } + } else + cur.push_back(*i); + ++i; + } + if (!cur.empty()) + res.push_back(cur); + return res; } // From nix/src/nix/repl.cc -bool isVarName(const string &s) { - if (s.size() == 0) - return false; - char c = s[0]; - if ((c >= '0' && c <= '9') || c == '-' || c == '\'') - return false; - for (auto &i : s) - if (!((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || - (i >= '0' && i <= '9') || i == '_' || i == '-' || i == '\'')) - return false; - return true; +bool isVarName(const string & s) +{ + if (s.size() == 0) + return false; + char c = s[0]; + if ((c >= '0' && c <= '9') || c == '-' || c == '\'') + return false; + for (auto & i : s) + if (!((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9') || i == '_' || i == '-' || + i == '\'')) + return false; + return true; } // From nix/src/nix/repl.cc -std::ostream &printStringValue(std::ostream &str, const char *string) { - str << "\""; - for (const char *i = string; *i; i++) - if (*i == '\"' || *i == '\\') - str << "\\" << *i; - else if (*i == '\n') - str << "\\n"; - else if (*i == '\r') - str << "\\r"; - else if (*i == '\t') - str << "\\t"; - else - str << *i; - str << "\""; - return str; +std::ostream & printStringValue(std::ostream & str, const char * string) +{ + str << "\""; + for (const char * i = string; *i; i++) + if (*i == '\"' || *i == '\\') + str << "\\" << *i; + else if (*i == '\n') + str << "\\n"; + else if (*i == '\r') + str << "\\r"; + else if (*i == '\t') + str << "\\t"; + else + str << *i; + str << "\""; + return str; } diff --git a/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.hh b/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.hh index 225e8b1b87e..2274e9a0f85 100644 --- a/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.hh +++ b/nixos/modules/installer/tools/nixos-option/libnix-copy-paste.hh @@ -4,6 +4,6 @@ #include #include -nix::Strings parseAttrPath(const std::string &s); -bool isVarName(const std::string &s); -std::ostream &printStringValue(std::ostream &str, const char *string); +nix::Strings parseAttrPath(const std::string & s); +bool isVarName(const std::string & s); +std::ostream & printStringValue(std::ostream & str, const char * string); diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 49da3ce6874..fe44a347aef 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -42,166 +42,170 @@ using nix::UsageError; using nix::Value; // An ostream wrapper to handle nested indentation -class Out { -public: - class Separator {}; - const static Separator sep; - enum LinePolicy { ONE_LINE, MULTI_LINE }; - explicit Out(std::ostream &ostream) - : ostream(ostream), policy(ONE_LINE), write_since_sep(true) {} - Out(Out &o, std::string const &start, std::string const &end, - LinePolicy policy); - Out(Out &o, std::string const &start, std::string const &end, int count) - : Out(o, start, end, count < 2 ? ONE_LINE : MULTI_LINE) {} - Out(Out const &) = delete; - Out(Out &&) = default; - Out &operator=(Out const &) = delete; - Out &operator=(Out &&) = delete; - ~Out() { ostream << end; } - -private: - std::ostream &ostream; - std::string indentation; - std::string end; - LinePolicy policy; - bool write_since_sep; - template friend Out &operator<<(Out &o, T thing); +class Out +{ + public: + class Separator + {}; + const static Separator sep; + enum LinePolicy + { + ONE_LINE, + MULTI_LINE + }; + explicit Out(std::ostream & ostream) : ostream(ostream), policy(ONE_LINE), write_since_sep(true) {} + Out(Out & o, std::string const & start, std::string const & end, LinePolicy policy); + Out(Out & o, std::string const & start, std::string const & end, int count) + : Out(o, start, end, count < 2 ? ONE_LINE : MULTI_LINE) + {} + Out(Out const &) = delete; + Out(Out &&) = default; + Out & operator=(Out const &) = delete; + Out & operator=(Out &&) = delete; + ~Out() { ostream << end; } + + private: + std::ostream & ostream; + std::string indentation; + std::string end; + LinePolicy policy; + bool write_since_sep; + template friend Out & operator<<(Out & o, T thing); }; -template Out &operator<<(Out &o, T thing) { - if (!o.write_since_sep && o.policy == Out::MULTI_LINE) { - o.ostream << o.indentation; - } - o.write_since_sep = true; - o.ostream << thing; - return o; +template Out & operator<<(Out & o, T thing) +{ + if (!o.write_since_sep && o.policy == Out::MULTI_LINE) { + o.ostream << o.indentation; + } + o.write_since_sep = true; + o.ostream << thing; + return o; } -template <> -Out &operator<<(Out &o, Out::Separator /* thing */) { - o.ostream << (o.policy == Out::ONE_LINE ? " " : "\n"); - o.write_since_sep = false; - return o; +template <> Out & operator<<(Out & o, Out::Separator /* thing */) +{ + o.ostream << (o.policy == Out::ONE_LINE ? " " : "\n"); + o.write_since_sep = false; + return o; } -Out::Out(Out &o, std::string const &start, std::string const &end, - LinePolicy policy) - : ostream(o.ostream), - indentation(policy == ONE_LINE ? o.indentation : o.indentation + " "), - end(policy == ONE_LINE ? end : o.indentation + end), policy(policy), - write_since_sep(true) { - o << start; - *this << Out::sep; +Out::Out(Out & o, std::string const & start, std::string const & end, LinePolicy policy) + : ostream(o.ostream), indentation(policy == ONE_LINE ? o.indentation : o.indentation + " "), + end(policy == ONE_LINE ? end : o.indentation + end), policy(policy), write_since_sep(true) +{ + o << start; + *this << Out::sep; } // Stuff needed for evaluation -struct Context { - Context(EvalState *state, Bindings *autoArgs, Value options_root, - Value config_root) - : state(state), autoArgs(autoArgs), options_root(options_root), - config_root(config_root), - underscore_type(state->symbols.create("_type")) {} - EvalState *state; - Bindings *autoArgs; - Value options_root; - Value config_root; - Symbol underscore_type; +struct Context +{ + Context(EvalState * state, Bindings * autoArgs, Value options_root, Value config_root) + : state(state), autoArgs(autoArgs), options_root(options_root), config_root(config_root), + underscore_type(state->symbols.create("_type")) + {} + EvalState * state; + Bindings * autoArgs; + Value options_root; + Value config_root; + Symbol underscore_type; }; -Value evaluateValue(Context *ctx, Value *v) { - ctx->state->forceValue(*v); - if (ctx->autoArgs->empty()) { - return *v; - } - Value called{}; - ctx->state->autoCallFunction(*ctx->autoArgs, *v, called); - return called; +Value evaluateValue(Context * ctx, Value * v) +{ + ctx->state->forceValue(*v); + if (ctx->autoArgs->empty()) { + return *v; + } + Value called{}; + ctx->state->autoCallFunction(*ctx->autoArgs, *v, called); + return called; } -bool isOption(Context *ctx, Value const &v) { - if (v.type != tAttrs) { - return false; - } - auto const &actual_type = v.attrs->find(ctx->underscore_type); - if (actual_type == v.attrs->end()) { - return false; - } - try { - Value evaluated_type = evaluateValue(ctx, actual_type->value); - if (evaluated_type.type != tString) { - return false; +bool isOption(Context * ctx, Value const & v) +{ + if (v.type != tAttrs) { + return false; + } + auto const & actual_type = v.attrs->find(ctx->underscore_type); + if (actual_type == v.attrs->end()) { + return false; + } + try { + Value evaluated_type = evaluateValue(ctx, actual_type->value); + if (evaluated_type.type != tString) { + return false; + } + return evaluated_type.string.s == static_cast("option"); + } catch (Error &) { + return false; } - return evaluated_type.string.s == static_cast("option"); - } catch (Error &) { - return false; - } } // Add quotes to a component of a path. // These are needed for paths like: // fileSystems."/".fsType // systemd.units."dbus.service".text -std::string quoteAttribute(std::string const &attribute) { - if (isVarName(attribute)) { - return attribute; - } - std::ostringstream buf; - printStringValue(buf, attribute.c_str()); - return buf.str(); +std::string quoteAttribute(std::string const & attribute) +{ + if (isVarName(attribute)) { + return attribute; + } + std::ostringstream buf; + printStringValue(buf, attribute.c_str()); + return buf.str(); } -std::string const appendPath(std::string const &prefix, - std::string const &suffix) { - if (prefix.empty()) { - return quoteAttribute(suffix); - } - return prefix + "." + quoteAttribute(suffix); +std::string const appendPath(std::string const & prefix, std::string const & suffix) +{ + if (prefix.empty()) { + return quoteAttribute(suffix); + } + return prefix + "." + quoteAttribute(suffix); } -bool forbiddenRecursionName(std::string name) { - return (!name.empty() && name[0] == '_') || name == "haskellPackages"; -} +bool forbiddenRecursionName(std::string name) { return (!name.empty() && name[0] == '_') || name == "haskellPackages"; } -void recurse(const std::function)> &f, - Context *ctx, Value v, std::string const &path) { - std::variant evaluated; - try { - evaluated = evaluateValue(ctx, &v); - } catch (Error &e) { - evaluated = e; - } - if (!f(path, evaluated)) { - return; - } - if (std::holds_alternative(evaluated)) { - return; - } - Value const &evaluated_value = std::get(evaluated); - if (evaluated_value.type != tAttrs) { - return; - } - for (auto const &child : evaluated_value.attrs->lexicographicOrder()) { - if (forbiddenRecursionName(child->name)) { - continue; +void recurse(const std::function)> & f, Context * ctx, + Value v, std::string const & path) +{ + std::variant evaluated; + try { + evaluated = evaluateValue(ctx, &v); + } catch (Error & e) { + evaluated = e; + } + if (!f(path, evaluated)) { + return; + } + if (std::holds_alternative(evaluated)) { + return; + } + Value const & evaluated_value = std::get(evaluated); + if (evaluated_value.type != tAttrs) { + return; + } + for (auto const & child : evaluated_value.attrs->lexicographicOrder()) { + if (forbiddenRecursionName(child->name)) { + continue; + } + recurse(f, ctx, *child->value, appendPath(path, child->name)); } - recurse(f, ctx, *child->value, appendPath(path, child->name)); - } } // Calls f on all the option names -void mapOptions(const std::function &f, - Context *ctx, Value root) { - recurse( - [f, ctx](std::string const &path, std::variant v) { - bool isOpt = std::holds_alternative(v) || - isOption(ctx, std::get(v)); - if (isOpt) { - f(path); - } - return !isOpt; - }, - ctx, root, ""); +void mapOptions(const std::function & f, Context * ctx, Value root) +{ + recurse( + [f, ctx](std::string const & path, std::variant v) { + bool isOpt = std::holds_alternative(v) || isOption(ctx, std::get(v)); + if (isOpt) { + f(path); + } + return !isOpt; + }, + ctx, root, ""); } // Calls f on all the config values inside one option. @@ -225,364 +229,363 @@ void mapOptions(const std::function &f, // users.users.nixbld1 = ... .. ... // ... // users.users.systemd-timesync = ... .. ... -void mapConfigValuesInOption( - const std::function v)> &f, - std::string const &path, Context *ctx) { - Value *option; - try { - option = - findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, ctx->config_root); - } catch (Error &e) { - f(path, e); - return; - } - recurse( - [f, ctx](std::string const &path, std::variant v) { - bool leaf = std::holds_alternative(v) || - std::get(v).type != tAttrs || - ctx->state->isDerivation(std::get(v)); - if (!leaf) { - return true; // Keep digging - } - f(path, v); - return false; - }, - ctx, *option, path); +void mapConfigValuesInOption(const std::function v)> & f, + std::string const & path, Context * ctx) +{ + Value * option; + try { + option = findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, ctx->config_root); + } catch (Error & e) { + f(path, e); + return; + } + recurse( + [f, ctx](std::string const & path, std::variant v) { + bool leaf = std::holds_alternative(v) || std::get(v).type != tAttrs || + ctx->state->isDerivation(std::get(v)); + if (!leaf) { + return true; // Keep digging + } + f(path, v); + return false; + }, + ctx, *option, path); } -std::string describeError(Error const &e) { return "«error: " + e.msg() + "»"; } - -void describeDerivation(Context *ctx, Out &out, Value v) { - // Copy-pasted from nix/src/nix/repl.cc :( - Bindings::iterator i = v.attrs->find(ctx->state->sDrvPath); - PathSet pathset; - try { - Path drvPath = i != v.attrs->end() - ? ctx->state->coerceToPath(*i->pos, *i->value, pathset) - : "???"; - out << "«derivation " << drvPath << "»"; - } catch (Error &e) { - out << describeError(e); - } +std::string describeError(Error const & e) { return "«error: " + e.msg() + "»"; } + +void describeDerivation(Context * ctx, Out & out, Value v) +{ + // Copy-pasted from nix/src/nix/repl.cc :( + Bindings::iterator i = v.attrs->find(ctx->state->sDrvPath); + PathSet pathset; + try { + Path drvPath = i != v.attrs->end() ? ctx->state->coerceToPath(*i->pos, *i->value, pathset) : "???"; + out << "«derivation " << drvPath << "»"; + } catch (Error & e) { + out << describeError(e); + } } -Value parseAndEval(EvalState *state, std::string const &expression, - std::string const &path) { - Value v{}; - state->eval(state->parseExprFromString(expression, absPath(path)), v); - return v; +Value parseAndEval(EvalState * state, std::string const & expression, std::string const & path) +{ + Value v{}; + state->eval(state->parseExprFromString(expression, absPath(path)), v); + return v; } -void printValue(Context *ctx, Out &out, std::variant maybe_value, - std::string const &path); +void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path); -void printUnsortedList(Context *ctx, Out &out, Value &v) { - Out list_out(out, "[", "]", v.listSize()); - for (unsigned int n = 0; n < v.listSize(); ++n) { - printValue(ctx, list_out, *v.listElems()[n], ""); - list_out << Out::sep; - } +void printUnsortedList(Context * ctx, Out & out, Value & v) +{ + Out list_out(out, "[", "]", v.listSize()); + for (unsigned int n = 0; n < v.listSize(); ++n) { + printValue(ctx, list_out, *v.listElems()[n], ""); + list_out << Out::sep; + } } -void printSortedList(Context *ctx, Out &out, Value &v) { - std::vector results; - for (unsigned int n = 0; n < v.listSize(); ++n) { - std::ostringstream buf; - Out buf_out(buf); - printValue(ctx, buf_out, *v.listElems()[n], ""); - results.push_back(buf.str()); - } - std::sort(results.begin(), results.end()); - Out list_out(out, "[", "]", v.listSize()); - for (auto const &v : results) { - list_out << v << Out::sep; - } +void printSortedList(Context * ctx, Out & out, Value & v) +{ + std::vector results; + for (unsigned int n = 0; n < v.listSize(); ++n) { + std::ostringstream buf; + Out buf_out(buf); + printValue(ctx, buf_out, *v.listElems()[n], ""); + results.push_back(buf.str()); + } + std::sort(results.begin(), results.end()); + Out list_out(out, "[", "]", v.listSize()); + for (auto const & v : results) { + list_out << v << Out::sep; + } } -bool shouldSort(Context *ctx, Value &v) { - // Some lists should clearly be printed in sorted order, like - // environment.systemPackages. Some clearly should not, like - // services.xserver.multitouch.buttonsMap. As a conservative heuristic, sort - // lists of derivations. - return v.listSize() > 0 && ctx->state->isDerivation(*v.listElems()[0]); +bool shouldSort(Context * ctx, Value & v) +{ + // Some lists should clearly be printed in sorted order, like + // environment.systemPackages. Some clearly should not, like + // services.xserver.multitouch.buttonsMap. As a conservative heuristic, sort + // lists of derivations. + return v.listSize() > 0 && ctx->state->isDerivation(*v.listElems()[0]); } -void printList(Context *ctx, Out &out, Value &v) { - if (shouldSort(ctx, v)) { - printSortedList(ctx, out, v); - } else { - printUnsortedList(ctx, out, v); - } +void printList(Context * ctx, Out & out, Value & v) +{ + if (shouldSort(ctx, v)) { + printSortedList(ctx, out, v); + } else { + printUnsortedList(ctx, out, v); + } } -void printAttrs(Context *ctx, Out &out, Value &v, std::string const &path) { - Out attrs_out(out, "{", "}", v.attrs->size()); - for (const auto &a : v.attrs->lexicographicOrder()) { - std::string name = a->name; - attrs_out << name << " = "; - printValue(ctx, attrs_out, *a->value, appendPath(path, name)); - attrs_out << ";" << Out::sep; - } +void printAttrs(Context * ctx, Out & out, Value & v, std::string const & path) +{ + Out attrs_out(out, "{", "}", v.attrs->size()); + for (const auto & a : v.attrs->lexicographicOrder()) { + std::string name = a->name; + attrs_out << name << " = "; + printValue(ctx, attrs_out, *a->value, appendPath(path, name)); + attrs_out << ";" << Out::sep; + } } -void multiLineStringEscape(Out &out, std::string const &s) { - int i; - for (i = 1; i < s.size(); i++) { - if (s[i - 1] == '$' && s[i] == '{') { - out << "''${"; - i++; - } else if (s[i - 1] == '\'' && s[i] == '\'') { - out << "'''"; - i++; - } else { - out << s[i - 1]; +void multiLineStringEscape(Out & out, std::string const & s) +{ + int i; + for (i = 1; i < s.size(); i++) { + if (s[i - 1] == '$' && s[i] == '{') { + out << "''${"; + i++; + } else if (s[i - 1] == '\'' && s[i] == '\'') { + out << "'''"; + i++; + } else { + out << s[i - 1]; + } + } + if (i == s.size()) { + out << s[i - 1]; } - } - if (i == s.size()) { - out << s[i - 1]; - } } -void printMultiLineString(Out &out, Value const &v) { - std::string s = v.string.s; - Out str_out(out, "''", "''", Out::MULTI_LINE); - std::string::size_type begin = 0; - while (begin < s.size()) { - std::string::size_type end = s.find('\n', begin); - if (end == std::string::npos) { - multiLineStringEscape(str_out, s.substr(begin, s.size() - begin)); - break; +void printMultiLineString(Out & out, Value const & v) +{ + std::string s = v.string.s; + Out str_out(out, "''", "''", Out::MULTI_LINE); + std::string::size_type begin = 0; + while (begin < s.size()) { + std::string::size_type end = s.find('\n', begin); + if (end == std::string::npos) { + multiLineStringEscape(str_out, s.substr(begin, s.size() - begin)); + break; + } + multiLineStringEscape(str_out, s.substr(begin, end - begin)); + str_out << Out::sep; + begin = end + 1; } - multiLineStringEscape(str_out, s.substr(begin, end - begin)); - str_out << Out::sep; - begin = end + 1; - } } -void printValue(Context *ctx, Out &out, std::variant maybe_value, - std::string const &path) { - try { - if (std::holds_alternative(maybe_value)) { - throw Error{std::get(maybe_value)}; - } - Value v = evaluateValue(ctx, &std::get(maybe_value)); - if (ctx->state->isDerivation(v)) { - describeDerivation(ctx, out, v); - } else if (v.isList()) { - printList(ctx, out, v); - } else if (v.type == tAttrs) { - printAttrs(ctx, out, v, path); - } else if (v.type == tString && - std::string(v.string.s).find('\n') != std::string::npos) { - printMultiLineString(out, v); - } else { - ctx->state->forceValueDeep(v); - out << v; - } - } catch (Error &e) { - if (e.msg() == "The option `" + path + "' is used but not defined.") { - // 93% of errors are this, and just letting this message through would be - // misleading. These values may or may not actually be "used" in the - // config. The thing throwing the error message assumes that if anything - // ever looks at this value, it is a "use" of this value. But here in - // nixos-option, we are looking at this value only to print it. - // In order to avoid implying that this undefined value is actually - // referenced, eat the underlying error message and emit "«not defined»". - out << "«not defined»"; - } else { - out << describeError(e); +void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path) +{ + try { + if (std::holds_alternative(maybe_value)) { + throw Error{std::get(maybe_value)}; + } + Value v = evaluateValue(ctx, &std::get(maybe_value)); + if (ctx->state->isDerivation(v)) { + describeDerivation(ctx, out, v); + } else if (v.isList()) { + printList(ctx, out, v); + } else if (v.type == tAttrs) { + printAttrs(ctx, out, v, path); + } else if (v.type == tString && std::string(v.string.s).find('\n') != std::string::npos) { + printMultiLineString(out, v); + } else { + ctx->state->forceValueDeep(v); + out << v; + } + } catch (Error & e) { + if (e.msg() == "The option `" + path + "' is used but not defined.") { + // 93% of errors are this, and just letting this message through would be + // misleading. These values may or may not actually be "used" in the + // config. The thing throwing the error message assumes that if anything + // ever looks at this value, it is a "use" of this value. But here in + // nixos-option, we are looking at this value only to print it. + // In order to avoid implying that this undefined value is actually + // referenced, eat the underlying error message and emit "«not defined»". + out << "«not defined»"; + } else { + out << describeError(e); + } } - } } -void printConfigValue(Context *ctx, Out &out, std::string const &path, - std::variant v) { - out << path << " = "; - printValue(ctx, out, std::move(v), path); - out << ";\n"; +void printConfigValue(Context * ctx, Out & out, std::string const & path, std::variant v) +{ + out << path << " = "; + printValue(ctx, out, std::move(v), path); + out << ";\n"; } -void printAll(Context *ctx, Out &out) { - mapOptions( - [ctx, &out](std::string const &option_path) { - mapConfigValuesInOption( - [ctx, &out](std::string const &config_path, - std::variant v) { - printConfigValue(ctx, out, config_path, v); - }, - option_path, ctx); - }, - ctx, ctx->options_root); +void printAll(Context * ctx, Out & out) +{ + mapOptions( + [ctx, &out](std::string const & option_path) { + mapConfigValuesInOption( + [ctx, &out](std::string const & config_path, std::variant v) { + printConfigValue(ctx, out, config_path, v); + }, + option_path, ctx); + }, + ctx, ctx->options_root); } -void printAttr(Context *ctx, Out &out, std::string const &path, Value *root) { - try { - printValue(ctx, out, - *findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, *root), - path); - } catch (Error &e) { - out << describeError(e); - } +void printAttr(Context * ctx, Out & out, std::string const & path, Value * root) +{ + try { + printValue(ctx, out, *findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, *root), path); + } catch (Error & e) { + out << describeError(e); + } } -void printOption(Context *ctx, Out &out, std::string const &path, - Value *option) { - out << "Value:\n"; - printAttr(ctx, out, path, &ctx->config_root); +void printOption(Context * ctx, Out & out, std::string const & path, Value * option) +{ + out << "Value:\n"; + printAttr(ctx, out, path, &ctx->config_root); - out << "\n\nDefault:\n"; - printAttr(ctx, out, "default", option); + out << "\n\nDefault:\n"; + printAttr(ctx, out, "default", option); - out << "\n\nType:\n"; - printAttr(ctx, out, "type.description", option); + out << "\n\nType:\n"; + printAttr(ctx, out, "type.description", option); - out << "\n\nExample:\n"; - printAttr(ctx, out, "example", option); + out << "\n\nExample:\n"; + printAttr(ctx, out, "example", option); - out << "\n\nDescription:\n"; - printAttr(ctx, out, "description", option); + out << "\n\nDescription:\n"; + printAttr(ctx, out, "description", option); - out << "\n\nDeclared by:\n"; - printAttr(ctx, out, "declarations", option); + out << "\n\nDeclared by:\n"; + printAttr(ctx, out, "declarations", option); - out << "\n\nDefined by:\n"; - printAttr(ctx, out, "files", option); - out << "\n"; + out << "\n\nDefined by:\n"; + printAttr(ctx, out, "files", option); + out << "\n"; } -void printListing(Out &out, Value *v) { - // Print this header on stderr rather than stdout because the old shell script - // implementation did. I don't know why. - std::cerr << "This attribute set contains:\n"; - for (const auto &a : v->attrs->lexicographicOrder()) { - std::string name = a->name; - if (!name.empty() && name[0] != '_') { - out << name << "\n"; +void printListing(Out & out, Value * v) +{ + // Print this header on stderr rather than stdout because the old shell script + // implementation did. I don't know why. + std::cerr << "This attribute set contains:\n"; + for (const auto & a : v->attrs->lexicographicOrder()) { + std::string name = a->name; + if (!name.empty() && name[0] != '_') { + out << name << "\n"; + } } - } } // Carefully walk an option path, looking for sub-options when a path walks past // an option value. -Value findAlongOptionPath(Context *ctx, std::string const &path) { - Strings tokens = parseAttrPath(path); - Value v = ctx->options_root; - for (auto i = tokens.begin(); i != tokens.end(); i++) { - bool last_attribute = std::next(i) == tokens.end(); - auto const &attr = *i; - v = evaluateValue(ctx, &v); - if (attr.empty()) { - throw Error("empty attribute name in selection path '" + path + "'"); - } - if (isOption(ctx, v) && !last_attribute) { - Value getSubOptions = evaluateValue( - ctx, findAlongAttrPath(*ctx->state, "type.getSubOptions", - *ctx->autoArgs, v)); - if (getSubOptions.type != tLambda) { - throw Error("Option's type.getSubOptions isn't a function at '" + attr + - "' in path '" + path + "'"); - } - Value emptyString{}; - nix::mkString(emptyString, ""); - ctx->state->callFunction(getSubOptions, emptyString, v, nix::Pos{}); - // Note that we've consumed attr, but didn't actually use it. - } else if (v.type != tAttrs) { - throw Error("attribute '" + attr + "' in path '" + path + - "' attempts to index a value that should be a set but is " + - showType(v)); - } else { - auto const &next = v.attrs->find(ctx->state->symbols.create(attr)); - if (next == v.attrs->end()) { - throw Error("attribute '" + attr + "' in path '" + path + - "' not found"); - } - v = *next->value; +Value findAlongOptionPath(Context * ctx, std::string const & path) +{ + Strings tokens = parseAttrPath(path); + Value v = ctx->options_root; + for (auto i = tokens.begin(); i != tokens.end(); i++) { + bool last_attribute = std::next(i) == tokens.end(); + auto const & attr = *i; + v = evaluateValue(ctx, &v); + if (attr.empty()) { + throw Error("empty attribute name in selection path '" + path + "'"); + } + if (isOption(ctx, v) && !last_attribute) { + Value getSubOptions = + evaluateValue(ctx, findAlongAttrPath(*ctx->state, "type.getSubOptions", *ctx->autoArgs, v)); + if (getSubOptions.type != tLambda) { + throw Error("Option's type.getSubOptions isn't a function at '" + attr + "' in path '" + path + "'"); + } + Value emptyString{}; + nix::mkString(emptyString, ""); + ctx->state->callFunction(getSubOptions, emptyString, v, nix::Pos{}); + // Note that we've consumed attr, but didn't actually use it. + } else if (v.type != tAttrs) { + throw Error("attribute '" + attr + "' in path '" + path + + "' attempts to index a value that should be a set but is " + showType(v)); + } else { + auto const & next = v.attrs->find(ctx->state->symbols.create(attr)); + if (next == v.attrs->end()) { + throw Error("attribute '" + attr + "' in path '" + path + "' not found"); + } + v = *next->value; + } } - } - return v; + return v; } -void printOne(Context *ctx, Out &out, std::string const &path) { - try { - Value option = findAlongOptionPath(ctx, path); - option = evaluateValue(ctx, &option); - if (isOption(ctx, option)) { - printOption(ctx, out, path, &option); - } else { - printListing(out, &option); +void printOne(Context * ctx, Out & out, std::string const & path) +{ + try { + Value option = findAlongOptionPath(ctx, path); + option = evaluateValue(ctx, &option); + if (isOption(ctx, option)) { + printOption(ctx, out, path, &option); + } else { + printListing(out, &option); + } + } catch (Error & e) { + std::cerr << "error: " << e.msg() + << "\nAn error occurred while looking for attribute names. Are " + "you sure that '" + << path << "' exists?\n"; } - } catch (Error &e) { - std::cerr << "error: " << e.msg() - << "\nAn error occurred while looking for attribute names. Are " - "you sure that '" - << path << "' exists?\n"; - } } -int main(int argc, char **argv) { - bool all = false; - std::string path = "."; - std::string options_expr = "(import {}).options"; - std::string config_expr = "(import {}).config"; - std::vector args; - - struct MyArgs : nix::LegacyArgs, nix::MixEvalArgs { - using nix::LegacyArgs::LegacyArgs; - }; - - MyArgs myArgs(nix::baseNameOf(argv[0]), - [&](Strings::iterator &arg, const Strings::iterator &end) { - if (*arg == "--help") { - nix::showManPage("nixos-option"); - } else if (*arg == "--version") { - nix::printVersion("nixos-option"); - } else if (*arg == "--all") { - all = true; - } else if (*arg == "--path") { - path = nix::getArg(*arg, arg, end); - } else if (*arg == "--options_expr") { - options_expr = nix::getArg(*arg, arg, end); - } else if (*arg == "--config_expr") { - config_expr = nix::getArg(*arg, arg, end); - } else if (!arg->empty() && arg->at(0) == '-') { - return false; - } else { - args.push_back(*arg); - } - return true; - }); - - myArgs.parseCmdline(nix::argvToStrings(argc, argv)); - - nix::initPlugins(); - nix::initGC(); - nix::settings.readOnlyMode = true; - auto store = nix::openStore(); - auto state = std::make_unique(myArgs.searchPath, store); - - Value options_root = parseAndEval(state.get(), options_expr, path); - Value config_root = parseAndEval(state.get(), config_expr, path); - - Context ctx{state.get(), myArgs.getAutoArgs(*state), options_root, - config_root}; - Out out(std::cout); - - if (all) { - if (!args.empty()) { - throw UsageError("--all cannot be used with arguments"); - } - printAll(&ctx, out); - } else { - if (args.empty()) { - printOne(&ctx, out, ""); - } - for (auto const &arg : args) { - printOne(&ctx, out, arg); +int main(int argc, char ** argv) +{ + bool all = false; + std::string path = "."; + std::string options_expr = "(import {}).options"; + std::string config_expr = "(import {}).config"; + std::vector args; + + struct MyArgs : nix::LegacyArgs, nix::MixEvalArgs + { + using nix::LegacyArgs::LegacyArgs; + }; + + MyArgs myArgs(nix::baseNameOf(argv[0]), [&](Strings::iterator & arg, const Strings::iterator & end) { + if (*arg == "--help") { + nix::showManPage("nixos-option"); + } else if (*arg == "--version") { + nix::printVersion("nixos-option"); + } else if (*arg == "--all") { + all = true; + } else if (*arg == "--path") { + path = nix::getArg(*arg, arg, end); + } else if (*arg == "--options_expr") { + options_expr = nix::getArg(*arg, arg, end); + } else if (*arg == "--config_expr") { + config_expr = nix::getArg(*arg, arg, end); + } else if (!arg->empty() && arg->at(0) == '-') { + return false; + } else { + args.push_back(*arg); + } + return true; + }); + + myArgs.parseCmdline(nix::argvToStrings(argc, argv)); + + nix::initPlugins(); + nix::initGC(); + nix::settings.readOnlyMode = true; + auto store = nix::openStore(); + auto state = std::make_unique(myArgs.searchPath, store); + + Value options_root = parseAndEval(state.get(), options_expr, path); + Value config_root = parseAndEval(state.get(), config_expr, path); + + Context ctx{state.get(), myArgs.getAutoArgs(*state), options_root, config_root}; + Out out(std::cout); + + if (all) { + if (!args.empty()) { + throw UsageError("--all cannot be used with arguments"); + } + printAll(&ctx, out); + } else { + if (args.empty()) { + printOne(&ctx, out, ""); + } + for (auto const & arg : args) { + printOne(&ctx, out, arg); + } } - } - ctx.state->printStats(); + ctx.state->printStats(); - return 0; + return 0; } -- cgit 1.4.1 From 36c00c108076915b0074fefc8ae5bb8baba476fa Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 09:51:08 -0700 Subject: Use format strings, not concatenation, in error messages --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index fe44a347aef..d72a2ae3f8d 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -479,25 +479,25 @@ Value findAlongOptionPath(Context * ctx, std::string const & path) auto const & attr = *i; v = evaluateValue(ctx, &v); if (attr.empty()) { - throw Error("empty attribute name in selection path '" + path + "'"); + throw Error("empty attribute name in selection path '%s'", path); } if (isOption(ctx, v) && !last_attribute) { Value getSubOptions = evaluateValue(ctx, findAlongAttrPath(*ctx->state, "type.getSubOptions", *ctx->autoArgs, v)); if (getSubOptions.type != tLambda) { - throw Error("Option's type.getSubOptions isn't a function at '" + attr + "' in path '" + path + "'"); + throw Error("Option's type.getSubOptions isn't a function at '%s' in path '%s'", attr, path); } Value emptyString{}; nix::mkString(emptyString, ""); ctx->state->callFunction(getSubOptions, emptyString, v, nix::Pos{}); // Note that we've consumed attr, but didn't actually use it. } else if (v.type != tAttrs) { - throw Error("attribute '" + attr + "' in path '" + path + - "' attempts to index a value that should be a set but is " + showType(v)); + throw Error("attribute '%s' in path '%s' attempts to index a value that should be a set but is %s", attr, + path, showType(v)); } else { auto const & next = v.attrs->find(ctx->state->symbols.create(attr)); if (next == v.attrs->end()) { - throw Error("attribute '" + attr + "' in path '" + path + "' not found"); + throw Error("attribute '%s' in path '%s' not found", attr, path); } v = *next->value; } -- cgit 1.4.1 From e1ecc2b6c1fe10acf2a1f63f027f002ff4b9ff7c Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 09:58:34 -0700 Subject: Remove list sorting --- .../installer/tools/nixos-option/nixos-option.cc | 37 +--------------------- 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index d72a2ae3f8d..01eb0d5ddd1 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -1,6 +1,5 @@ #include // for nix/globals.hh's reference to SYSTEM -#include // for sort #include // for function #include // for operator<<, basic_ostream, ostrin... #include // for next @@ -276,7 +275,7 @@ Value parseAndEval(EvalState * state, std::string const & expression, std::strin void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path); -void printUnsortedList(Context * ctx, Out & out, Value & v) +void printList(Context * ctx, Out & out, Value & v) { Out list_out(out, "[", "]", v.listSize()); for (unsigned int n = 0; n < v.listSize(); ++n) { @@ -285,40 +284,6 @@ void printUnsortedList(Context * ctx, Out & out, Value & v) } } -void printSortedList(Context * ctx, Out & out, Value & v) -{ - std::vector results; - for (unsigned int n = 0; n < v.listSize(); ++n) { - std::ostringstream buf; - Out buf_out(buf); - printValue(ctx, buf_out, *v.listElems()[n], ""); - results.push_back(buf.str()); - } - std::sort(results.begin(), results.end()); - Out list_out(out, "[", "]", v.listSize()); - for (auto const & v : results) { - list_out << v << Out::sep; - } -} - -bool shouldSort(Context * ctx, Value & v) -{ - // Some lists should clearly be printed in sorted order, like - // environment.systemPackages. Some clearly should not, like - // services.xserver.multitouch.buttonsMap. As a conservative heuristic, sort - // lists of derivations. - return v.listSize() > 0 && ctx->state->isDerivation(*v.listElems()[0]); -} - -void printList(Context * ctx, Out & out, Value & v) -{ - if (shouldSort(ctx, v)) { - printSortedList(ctx, out, v); - } else { - printUnsortedList(ctx, out, v); - } -} - void printAttrs(Context * ctx, Out & out, Value & v, std::string const & path) { Out attrs_out(out, "{", "}", v.attrs->size()); -- cgit 1.4.1 From f3eedb6020a0b2bc8a5ce19cf9761fc60d2873f8 Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 09:59:45 -0700 Subject: Parallel build is the default, so no need to specify --- nixos/modules/installer/tools/nixos-option/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/modules/installer/tools/nixos-option/default.nix b/nixos/modules/installer/tools/nixos-option/default.nix index 6464a91052c..2ba5e73d7c0 100644 --- a/nixos/modules/installer/tools/nixos-option/default.nix +++ b/nixos/modules/installer/tools/nixos-option/default.nix @@ -4,5 +4,4 @@ stdenv.mkDerivation rec { src = ./.; nativeBuildInputs = [ cmake pkgconfig ]; buildInputs = [ boost nix ]; - enableParallelBuilding = true; } -- cgit 1.4.1 From 23369829579594bd8fd1b9423e399f2aeaca5488 Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 10:29:32 -0700 Subject: Add license This is important because this contains some code copied from nix (as an interim expediency until that functionality can be exported via nix's API). The license specified here must be compatible with this borrowing. Select the same license that nix is released under: lgpl2Plus. --- nixos/modules/installer/tools/nixos-option/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/modules/installer/tools/nixos-option/default.nix b/nixos/modules/installer/tools/nixos-option/default.nix index 2ba5e73d7c0..87ba38c29ca 100644 --- a/nixos/modules/installer/tools/nixos-option/default.nix +++ b/nixos/modules/installer/tools/nixos-option/default.nix @@ -4,4 +4,7 @@ stdenv.mkDerivation rec { src = ./.; nativeBuildInputs = [ cmake pkgconfig ]; buildInputs = [ boost nix ]; + meta { + license = stdenv.lib.licenses.lgpl2Plus; + } } -- cgit 1.4.1 From d89ccc1554d9b4e8064c9d07bf23652a3bd52fce Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 10:46:45 -0700 Subject: Correct syntax for license specification --- nixos/modules/installer/tools/nixos-option/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/default.nix b/nixos/modules/installer/tools/nixos-option/default.nix index 87ba38c29ca..2c2674ad28d 100644 --- a/nixos/modules/installer/tools/nixos-option/default.nix +++ b/nixos/modules/installer/tools/nixos-option/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { src = ./.; nativeBuildInputs = [ cmake pkgconfig ]; buildInputs = [ boost nix ]; - meta { + meta = { license = stdenv.lib.licenses.lgpl2Plus; - } + }; } -- cgit 1.4.1 From c7c684aaa3e165287be4b9d8345481e1d85c04e8 Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 11:37:48 -0700 Subject: Preserve type of rethrown exceptions --- .../installer/tools/nixos-option/nixos-option.cc | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 01eb0d5ddd1..5886ee6959b 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -1,10 +1,12 @@ #include // for nix/globals.hh's reference to SYSTEM +#include // for exception_ptr, current_exception #include // for function #include // for operator<<, basic_ostream, ostrin... #include // for next #include // for _List_iterator #include // for allocator, unique_ptr, make_unique +#include // for operator new #include // for argvToStrings, UsageError #include // for findAlongAttrPath #include // for Attr, Bindings, Bindings::iterator @@ -166,19 +168,19 @@ std::string const appendPath(std::string const & prefix, std::string const & suf bool forbiddenRecursionName(std::string name) { return (!name.empty() && name[0] == '_') || name == "haskellPackages"; } -void recurse(const std::function)> & f, Context * ctx, +void recurse(const std::function)> & f, Context * ctx, Value v, std::string const & path) { - std::variant evaluated; + std::variant evaluated; try { evaluated = evaluateValue(ctx, &v); - } catch (Error & e) { - evaluated = e; + } catch (Error &) { + evaluated = std::current_exception(); } if (!f(path, evaluated)) { return; } - if (std::holds_alternative(evaluated)) { + if (std::holds_alternative(evaluated)) { return; } Value const & evaluated_value = std::get(evaluated); @@ -197,8 +199,8 @@ void recurse(const std::function & f, Context * ctx, Value root) { recurse( - [f, ctx](std::string const & path, std::variant v) { - bool isOpt = std::holds_alternative(v) || isOption(ctx, std::get(v)); + [f, ctx](std::string const & path, std::variant v) { + bool isOpt = std::holds_alternative(v) || isOption(ctx, std::get(v)); if (isOpt) { f(path); } @@ -228,19 +230,19 @@ void mapOptions(const std::function & f, Context // users.users.nixbld1 = ... .. ... // ... // users.users.systemd-timesync = ... .. ... -void mapConfigValuesInOption(const std::function v)> & f, +void mapConfigValuesInOption(const std::function v)> & f, std::string const & path, Context * ctx) { Value * option; try { option = findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, ctx->config_root); - } catch (Error & e) { - f(path, e); + } catch (Error &) { + f(path, std::current_exception()); return; } recurse( - [f, ctx](std::string const & path, std::variant v) { - bool leaf = std::holds_alternative(v) || std::get(v).type != tAttrs || + [f, ctx](std::string const & path, std::variant v) { + bool leaf = std::holds_alternative(v) || std::get(v).type != tAttrs || ctx->state->isDerivation(std::get(v)); if (!leaf) { return true; // Keep digging @@ -273,7 +275,7 @@ Value parseAndEval(EvalState * state, std::string const & expression, std::strin return v; } -void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path); +void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path); void printList(Context * ctx, Out & out, Value & v) { @@ -331,11 +333,11 @@ void printMultiLineString(Out & out, Value const & v) } } -void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path) +void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path) { try { - if (std::holds_alternative(maybe_value)) { - throw Error{std::get(maybe_value)}; + if (std::holds_alternative(maybe_value)) { + std::rethrow_exception(std::get(maybe_value)); } Value v = evaluateValue(ctx, &std::get(maybe_value)); if (ctx->state->isDerivation(v)) { @@ -366,7 +368,7 @@ void printValue(Context * ctx, Out & out, std::variant maybe_value } } -void printConfigValue(Context * ctx, Out & out, std::string const & path, std::variant v) +void printConfigValue(Context * ctx, Out & out, std::string const & path, std::variant v) { out << path << " = "; printValue(ctx, out, std::move(v), path); @@ -378,7 +380,7 @@ void printAll(Context * ctx, Out & out) mapOptions( [ctx, &out](std::string const & option_path) { mapConfigValuesInOption( - [ctx, &out](std::string const & config_path, std::variant v) { + [ctx, &out](std::string const & config_path, std::variant v) { printConfigValue(ctx, out, config_path, v); }, option_path, ctx); -- cgit 1.4.1 From 0adf77e2eeb5227666f54ac6476884f9ddb63bee Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 11:38:29 -0700 Subject: Narrow the «not defined» check to just ThrownError MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 5886ee6959b..1fde8986fdf 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -352,7 +352,7 @@ void printValue(Context * ctx, Out & out, std::variantstate->forceValueDeep(v); out << v; } - } catch (Error & e) { + } catch (ThrownError & e) { if (e.msg() == "The option `" + path + "' is used but not defined.") { // 93% of errors are this, and just letting this message through would be // misleading. These values may or may not actually be "used" in the @@ -365,6 +365,8 @@ void printValue(Context * ctx, Out & out, std::variant Date: Fri, 6 Sep 2019 12:27:34 -0700 Subject: Fix missing "using ThrownError" --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 1fde8986fdf..383755f884a 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -37,6 +37,7 @@ using nix::PathSet; using nix::Strings; using nix::Symbol; using nix::tAttrs; +using nix::ThrownError; using nix::tLambda; using nix::tString; using nix::UsageError; -- cgit 1.4.1 From 88349921a46fb303c134f568fbe9d5ba88bb2b6a Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 14:30:27 -0700 Subject: clang-format --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 383755f884a..8e2a8f5c018 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -169,8 +169,8 @@ std::string const appendPath(std::string const & prefix, std::string const & suf bool forbiddenRecursionName(std::string name) { return (!name.empty() && name[0] == '_') || name == "haskellPackages"; } -void recurse(const std::function)> & f, Context * ctx, - Value v, std::string const & path) +void recurse(const std::function)> & f, + Context * ctx, Value v, std::string const & path) { std::variant evaluated; try { @@ -231,8 +231,9 @@ void mapOptions(const std::function & f, Context // users.users.nixbld1 = ... .. ... // ... // users.users.systemd-timesync = ... .. ... -void mapConfigValuesInOption(const std::function v)> & f, - std::string const & path, Context * ctx) +void mapConfigValuesInOption( + const std::function v)> & f, + std::string const & path, Context * ctx) { Value * option; try { @@ -276,7 +277,8 @@ Value parseAndEval(EvalState * state, std::string const & expression, std::strin return v; } -void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path); +void printValue(Context * ctx, Out & out, std::variant maybe_value, + std::string const & path); void printList(Context * ctx, Out & out, Value & v) { @@ -338,7 +340,7 @@ void printValue(Context * ctx, Out & out, std::variant(maybe_value)) { - std::rethrow_exception(std::get(maybe_value)); + std::rethrow_exception(std::get(maybe_value)); } Value v = evaluateValue(ctx, &std::get(maybe_value)); if (ctx->state->isDerivation(v)) { -- cgit 1.4.1 From b8db81573a1e5a4e26da10d778d4400684a96832 Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 6 Sep 2019 14:32:22 -0700 Subject: Support submodules (Fixes #13121) --- .../installer/tools/nixos-option/nixos-option.cc | 56 ++++++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 8e2a8f5c018..755c2f0b002 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -440,6 +440,45 @@ void printListing(Out & out, Value * v) } } +bool optionTypeIs(Context * ctx, Value & v, std::string const & sought_type) +{ + try { + auto const & type_lookup = v.attrs->find(ctx->state->sType); + if (type_lookup == v.attrs->end()) { + return false; + } + Value type = evaluateValue(ctx, type_lookup->value); + if (type.type != tAttrs) { + return false; + } + auto const & name_lookup = type.attrs->find(ctx->state->sName); + if (name_lookup == type.attrs->end()) { + return false; + } + Value name = evaluateValue(ctx, name_lookup->value); + if (name.type != tString) { + return false; + } + return name.string.s == sought_type; + } catch (Error &) { + return false; + } +} + +Value getSubOptions(Context * ctx, Value & option) +{ + Value getSubOptions = + evaluateValue(ctx, findAlongAttrPath(*ctx->state, "type.getSubOptions", *ctx->autoArgs, option)); + if (getSubOptions.type != tLambda) { + throw Error("Option's type.getSubOptions isn't a function"); + } + Value emptyString{}; + nix::mkString(emptyString, ""); + Value v; + ctx->state->callFunction(getSubOptions, emptyString, v, nix::Pos{}); + return v; +} + // Carefully walk an option path, looking for sub-options when a path walks past // an option value. Value findAlongOptionPath(Context * ctx, std::string const & path) @@ -453,16 +492,13 @@ Value findAlongOptionPath(Context * ctx, std::string const & path) if (attr.empty()) { throw Error("empty attribute name in selection path '%s'", path); } - if (isOption(ctx, v) && !last_attribute) { - Value getSubOptions = - evaluateValue(ctx, findAlongAttrPath(*ctx->state, "type.getSubOptions", *ctx->autoArgs, v)); - if (getSubOptions.type != tLambda) { - throw Error("Option's type.getSubOptions isn't a function at '%s' in path '%s'", attr, path); - } - Value emptyString{}; - nix::mkString(emptyString, ""); - ctx->state->callFunction(getSubOptions, emptyString, v, nix::Pos{}); - // Note that we've consumed attr, but didn't actually use it. + if (isOption(ctx, v) && optionTypeIs(ctx, v, "submodule")) { + v = getSubOptions(ctx, v); + } + if (isOption(ctx, v) && optionTypeIs(ctx, v, "loaOf") && !last_attribute) { + v = getSubOptions(ctx, v); + // Note that we've consumed attr, but didn't actually use it. This is the path component that's looked up + // in the list or attribute set that doesn't name an option -- the "root" in "users.users.root.name". } else if (v.type != tAttrs) { throw Error("attribute '%s' in path '%s' attempts to index a value that should be a set but is %s", attr, path, showType(v)); -- cgit 1.4.1 From c352bfeaf096ed11560624b8c5034ba0ed0723b7 Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 08:15:28 -0700 Subject: Switch from east const to west const For consistency with the Nix C++ convention. :~( --- .../installer/tools/nixos-option/nixos-option.cc | 76 +++++++++++----------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 755c2f0b002..79a58e510af 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -56,13 +56,13 @@ class Out MULTI_LINE }; explicit Out(std::ostream & ostream) : ostream(ostream), policy(ONE_LINE), write_since_sep(true) {} - Out(Out & o, std::string const & start, std::string const & end, LinePolicy policy); - Out(Out & o, std::string const & start, std::string const & end, int count) + Out(Out & o, const std::string & start, const std::string & end, LinePolicy policy); + Out(Out & o, const std::string & start, const std::string & end, int count) : Out(o, start, end, count < 2 ? ONE_LINE : MULTI_LINE) {} - Out(Out const &) = delete; + Out(const Out &) = delete; Out(Out &&) = default; - Out & operator=(Out const &) = delete; + Out & operator=(const Out &) = delete; Out & operator=(Out &&) = delete; ~Out() { ostream << end; } @@ -92,7 +92,7 @@ template <> Out & operator<<(Out & o, Out::Separator /* thing */ return o; } -Out::Out(Out & o, std::string const & start, std::string const & end, LinePolicy policy) +Out::Out(Out & o, const std::string & start, const std::string & end, LinePolicy policy) : ostream(o.ostream), indentation(policy == ONE_LINE ? o.indentation : o.indentation + " "), end(policy == ONE_LINE ? end : o.indentation + end), policy(policy), write_since_sep(true) { @@ -125,12 +125,12 @@ Value evaluateValue(Context * ctx, Value * v) return called; } -bool isOption(Context * ctx, Value const & v) +bool isOption(Context * ctx, const Value & v) { if (v.type != tAttrs) { return false; } - auto const & actual_type = v.attrs->find(ctx->underscore_type); + const auto & actual_type = v.attrs->find(ctx->underscore_type); if (actual_type == v.attrs->end()) { return false; } @@ -149,7 +149,7 @@ bool isOption(Context * ctx, Value const & v) // These are needed for paths like: // fileSystems."/".fsType // systemd.units."dbus.service".text -std::string quoteAttribute(std::string const & attribute) +std::string quoteAttribute(const std::string & attribute) { if (isVarName(attribute)) { return attribute; @@ -159,7 +159,7 @@ std::string quoteAttribute(std::string const & attribute) return buf.str(); } -std::string const appendPath(std::string const & prefix, std::string const & suffix) +const std::string appendPath(const std::string & prefix, const std::string & suffix) { if (prefix.empty()) { return quoteAttribute(suffix); @@ -169,8 +169,8 @@ std::string const appendPath(std::string const & prefix, std::string const & suf bool forbiddenRecursionName(std::string name) { return (!name.empty() && name[0] == '_') || name == "haskellPackages"; } -void recurse(const std::function)> & f, - Context * ctx, Value v, std::string const & path) +void recurse(const std::function)> & f, + Context * ctx, Value v, const std::string & path) { std::variant evaluated; try { @@ -184,11 +184,11 @@ void recurse(const std::function(evaluated)) { return; } - Value const & evaluated_value = std::get(evaluated); + const Value & evaluated_value = std::get(evaluated); if (evaluated_value.type != tAttrs) { return; } - for (auto const & child : evaluated_value.attrs->lexicographicOrder()) { + for (const auto & child : evaluated_value.attrs->lexicographicOrder()) { if (forbiddenRecursionName(child->name)) { continue; } @@ -197,10 +197,10 @@ void recurse(const std::function & f, Context * ctx, Value root) +void mapOptions(const std::function & f, Context * ctx, Value root) { recurse( - [f, ctx](std::string const & path, std::variant v) { + [f, ctx](const std::string & path, std::variant v) { bool isOpt = std::holds_alternative(v) || isOption(ctx, std::get(v)); if (isOpt) { f(path); @@ -232,8 +232,8 @@ void mapOptions(const std::function & f, Context // ... // users.users.systemd-timesync = ... .. ... void mapConfigValuesInOption( - const std::function v)> & f, - std::string const & path, Context * ctx) + const std::function v)> & f, + const std::string & path, Context * ctx) { Value * option; try { @@ -243,7 +243,7 @@ void mapConfigValuesInOption( return; } recurse( - [f, ctx](std::string const & path, std::variant v) { + [f, ctx](const std::string & path, std::variant v) { bool leaf = std::holds_alternative(v) || std::get(v).type != tAttrs || ctx->state->isDerivation(std::get(v)); if (!leaf) { @@ -255,7 +255,7 @@ void mapConfigValuesInOption( ctx, *option, path); } -std::string describeError(Error const & e) { return "«error: " + e.msg() + "»"; } +std::string describeError(const Error & e) { return "«error: " + e.msg() + "»"; } void describeDerivation(Context * ctx, Out & out, Value v) { @@ -270,7 +270,7 @@ void describeDerivation(Context * ctx, Out & out, Value v) } } -Value parseAndEval(EvalState * state, std::string const & expression, std::string const & path) +Value parseAndEval(EvalState * state, const std::string & expression, const std::string & path) { Value v{}; state->eval(state->parseExprFromString(expression, absPath(path)), v); @@ -278,7 +278,7 @@ Value parseAndEval(EvalState * state, std::string const & expression, std::strin } void printValue(Context * ctx, Out & out, std::variant maybe_value, - std::string const & path); + const std::string & path); void printList(Context * ctx, Out & out, Value & v) { @@ -289,7 +289,7 @@ void printList(Context * ctx, Out & out, Value & v) } } -void printAttrs(Context * ctx, Out & out, Value & v, std::string const & path) +void printAttrs(Context * ctx, Out & out, Value & v, const std::string & path) { Out attrs_out(out, "{", "}", v.attrs->size()); for (const auto & a : v.attrs->lexicographicOrder()) { @@ -300,7 +300,7 @@ void printAttrs(Context * ctx, Out & out, Value & v, std::string const & path) } } -void multiLineStringEscape(Out & out, std::string const & s) +void multiLineStringEscape(Out & out, const std::string & s) { int i; for (i = 1; i < s.size(); i++) { @@ -319,7 +319,7 @@ void multiLineStringEscape(Out & out, std::string const & s) } } -void printMultiLineString(Out & out, Value const & v) +void printMultiLineString(Out & out, const Value & v) { std::string s = v.string.s; Out str_out(out, "''", "''", Out::MULTI_LINE); @@ -336,7 +336,7 @@ void printMultiLineString(Out & out, Value const & v) } } -void printValue(Context * ctx, Out & out, std::variant maybe_value, std::string const & path) +void printValue(Context * ctx, Out & out, std::variant maybe_value, const std::string & path) { try { if (std::holds_alternative(maybe_value)) { @@ -373,7 +373,7 @@ void printValue(Context * ctx, Out & out, std::variant v) +void printConfigValue(Context * ctx, Out & out, const std::string & path, std::variant v) { out << path << " = "; printValue(ctx, out, std::move(v), path); @@ -383,9 +383,9 @@ void printConfigValue(Context * ctx, Out & out, std::string const & path, std::v void printAll(Context * ctx, Out & out) { mapOptions( - [ctx, &out](std::string const & option_path) { + [ctx, &out](const std::string & option_path) { mapConfigValuesInOption( - [ctx, &out](std::string const & config_path, std::variant v) { + [ctx, &out](const std::string & config_path, std::variant v) { printConfigValue(ctx, out, config_path, v); }, option_path, ctx); @@ -393,7 +393,7 @@ void printAll(Context * ctx, Out & out) ctx, ctx->options_root); } -void printAttr(Context * ctx, Out & out, std::string const & path, Value * root) +void printAttr(Context * ctx, Out & out, const std::string & path, Value * root) { try { printValue(ctx, out, *findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, *root), path); @@ -402,7 +402,7 @@ void printAttr(Context * ctx, Out & out, std::string const & path, Value * root) } } -void printOption(Context * ctx, Out & out, std::string const & path, Value * option) +void printOption(Context * ctx, Out & out, const std::string & path, Value * option) { out << "Value:\n"; printAttr(ctx, out, path, &ctx->config_root); @@ -440,10 +440,10 @@ void printListing(Out & out, Value * v) } } -bool optionTypeIs(Context * ctx, Value & v, std::string const & sought_type) +bool optionTypeIs(Context * ctx, Value & v, const std::string & sought_type) { try { - auto const & type_lookup = v.attrs->find(ctx->state->sType); + const auto & type_lookup = v.attrs->find(ctx->state->sType); if (type_lookup == v.attrs->end()) { return false; } @@ -451,7 +451,7 @@ bool optionTypeIs(Context * ctx, Value & v, std::string const & sought_type) if (type.type != tAttrs) { return false; } - auto const & name_lookup = type.attrs->find(ctx->state->sName); + const auto & name_lookup = type.attrs->find(ctx->state->sName); if (name_lookup == type.attrs->end()) { return false; } @@ -481,13 +481,13 @@ Value getSubOptions(Context * ctx, Value & option) // Carefully walk an option path, looking for sub-options when a path walks past // an option value. -Value findAlongOptionPath(Context * ctx, std::string const & path) +Value findAlongOptionPath(Context * ctx, const std::string & path) { Strings tokens = parseAttrPath(path); Value v = ctx->options_root; for (auto i = tokens.begin(); i != tokens.end(); i++) { bool last_attribute = std::next(i) == tokens.end(); - auto const & attr = *i; + const auto & attr = *i; v = evaluateValue(ctx, &v); if (attr.empty()) { throw Error("empty attribute name in selection path '%s'", path); @@ -503,7 +503,7 @@ Value findAlongOptionPath(Context * ctx, std::string const & path) throw Error("attribute '%s' in path '%s' attempts to index a value that should be a set but is %s", attr, path, showType(v)); } else { - auto const & next = v.attrs->find(ctx->state->symbols.create(attr)); + const auto & next = v.attrs->find(ctx->state->symbols.create(attr)); if (next == v.attrs->end()) { throw Error("attribute '%s' in path '%s' not found", attr, path); } @@ -513,7 +513,7 @@ Value findAlongOptionPath(Context * ctx, std::string const & path) return v; } -void printOne(Context * ctx, Out & out, std::string const & path) +void printOne(Context * ctx, Out & out, const std::string & path) { try { Value option = findAlongOptionPath(ctx, path); @@ -588,7 +588,7 @@ int main(int argc, char ** argv) if (args.empty()) { printOne(&ctx, out, ""); } - for (auto const & arg : args) { + for (const auto & arg : args) { printOne(&ctx, out, arg); } } -- cgit 1.4.1 From 4ded9beea2ea5d0dd739c78a5bf1e5f42a1e1c39 Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 08:21:54 -0700 Subject: Add note: Keep error message in sync with nixos-option --- lib/modules.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/modules.nix b/lib/modules.nix index 71672c7d112..44db77b5d1c 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -326,6 +326,8 @@ rec { # The value with a check that it is defined valueDefined = if res.isDefined then res.mergedValue else + # (nixos-option detects this specific error message and gives it special + # handling. If changed here, please change it there too.) throw "The option `${showOption loc}' is used but not defined."; # Apply the 'apply' function to the merged value. This allows options to -- cgit 1.4.1 From aa8e1d5f1e44d5b24538f4b105b9323bd586be61 Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 08:39:20 -0700 Subject: Always say which path component had trouble --- .../installer/tools/nixos-option/nixos-option.cc | 48 ++++++++++++---------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 79a58e510af..fc9315423dd 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -31,6 +31,7 @@ using nix::absPath; using nix::Bindings; using nix::Error; +using nix::EvalError; using nix::EvalState; using nix::Path; using nix::PathSet; @@ -465,12 +466,14 @@ bool optionTypeIs(Context * ctx, Value & v, const std::string & sought_type) } } +MakeError(OptionPathError, EvalError); + Value getSubOptions(Context * ctx, Value & option) { Value getSubOptions = evaluateValue(ctx, findAlongAttrPath(*ctx->state, "type.getSubOptions", *ctx->autoArgs, option)); if (getSubOptions.type != tLambda) { - throw Error("Option's type.getSubOptions isn't a function"); + throw OptionPathError("Option's type.getSubOptions isn't a function"); } Value emptyString{}; nix::mkString(emptyString, ""); @@ -486,28 +489,31 @@ Value findAlongOptionPath(Context * ctx, const std::string & path) Strings tokens = parseAttrPath(path); Value v = ctx->options_root; for (auto i = tokens.begin(); i != tokens.end(); i++) { - bool last_attribute = std::next(i) == tokens.end(); const auto & attr = *i; - v = evaluateValue(ctx, &v); - if (attr.empty()) { - throw Error("empty attribute name in selection path '%s'", path); - } - if (isOption(ctx, v) && optionTypeIs(ctx, v, "submodule")) { - v = getSubOptions(ctx, v); - } - if (isOption(ctx, v) && optionTypeIs(ctx, v, "loaOf") && !last_attribute) { - v = getSubOptions(ctx, v); - // Note that we've consumed attr, but didn't actually use it. This is the path component that's looked up - // in the list or attribute set that doesn't name an option -- the "root" in "users.users.root.name". - } else if (v.type != tAttrs) { - throw Error("attribute '%s' in path '%s' attempts to index a value that should be a set but is %s", attr, - path, showType(v)); - } else { - const auto & next = v.attrs->find(ctx->state->symbols.create(attr)); - if (next == v.attrs->end()) { - throw Error("attribute '%s' in path '%s' not found", attr, path); + try { + bool last_attribute = std::next(i) == tokens.end(); + v = evaluateValue(ctx, &v); + if (attr.empty()) { + throw OptionPathError("empty attribute name"); + } + if (isOption(ctx, v) && optionTypeIs(ctx, v, "submodule")) { + v = getSubOptions(ctx, v); + } + if (isOption(ctx, v) && optionTypeIs(ctx, v, "loaOf") && !last_attribute) { + v = getSubOptions(ctx, v); + // Note that we've consumed attr, but didn't actually use it. This is the path component that's looked + // up in the list or attribute set that doesn't name an option -- the "root" in "users.users.root.name". + } else if (v.type != tAttrs) { + throw OptionPathError("Value is %s while a set was expected", showType(v)); + } else { + const auto & next = v.attrs->find(ctx->state->symbols.create(attr)); + if (next == v.attrs->end()) { + throw OptionPathError("Attribute not found", attr, path); + } + v = *next->value; } - v = *next->value; + } catch (OptionPathError & e) { + throw OptionPathError("At '%s' in path '%s': %s", attr, path, e.msg()); } } return v; -- cgit 1.4.1 From 88183eb484e14eb12aecd2788f6178fe95ec6256 Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 08:44:33 -0700 Subject: Per reviewer request, cast the other side. I don't think this matters. As long as one or the other of these is a std::string, I get an operator== that looks at content rather than pointer equality. I picked casting the constant over casting the dynamic thing in hopes that the compiler would have a better chance at optimizing away any runtime cost. Deferring to reviewer. --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index fc9315423dd..536d67c2d09 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -140,7 +140,7 @@ bool isOption(Context * ctx, const Value & v) if (evaluated_type.type != tString) { return false; } - return evaluated_type.string.s == static_cast("option"); + return static_cast(evaluated_type.string.s) == "option"; } catch (Error &) { return false; } -- cgit 1.4.1 From c457766a1f3034eb0ae5e30d7524c05cf4925dea Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 09:04:28 -0700 Subject: Use std::get_if --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 536d67c2d09..b81342715c2 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -340,8 +340,8 @@ void printMultiLineString(Out & out, const Value & v) void printValue(Context * ctx, Out & out, std::variant maybe_value, const std::string & path) { try { - if (std::holds_alternative(maybe_value)) { - std::rethrow_exception(std::get(maybe_value)); + if (auto ex = std::get_if(&maybe_value)) { + std::rethrow_exception(*ex); } Value v = evaluateValue(ctx, &std::get(maybe_value)); if (ctx->state->isDerivation(v)) { -- cgit 1.4.1 From c967e3fd3e2a4f311dc5f6676fff1c1266b20663 Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 09:10:29 -0700 Subject: Hold state and autoArgs by reference Switch from convention "appease clang-tidy --checks='*'" to "References are like non-nullptr pointers". The clang-tidy check "google-runtime-references" complains about non-const reference arguments, but this is not a convention used in Nix. --- .../installer/tools/nixos-option/nixos-option.cc | 50 +++++++++++----------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index b81342715c2..4c8dc1ec42c 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -104,12 +104,12 @@ Out::Out(Out & o, const std::string & start, const std::string & end, LinePolicy // Stuff needed for evaluation struct Context { - Context(EvalState * state, Bindings * autoArgs, Value options_root, Value config_root) + Context(EvalState & state, Bindings & autoArgs, Value options_root, Value config_root) : state(state), autoArgs(autoArgs), options_root(options_root), config_root(config_root), - underscore_type(state->symbols.create("_type")) + underscore_type(state.symbols.create("_type")) {} - EvalState * state; - Bindings * autoArgs; + EvalState & state; + Bindings & autoArgs; Value options_root; Value config_root; Symbol underscore_type; @@ -117,12 +117,12 @@ struct Context Value evaluateValue(Context * ctx, Value * v) { - ctx->state->forceValue(*v); - if (ctx->autoArgs->empty()) { + ctx->state.forceValue(*v); + if (ctx->autoArgs.empty()) { return *v; } Value called{}; - ctx->state->autoCallFunction(*ctx->autoArgs, *v, called); + ctx->state.autoCallFunction(ctx->autoArgs, *v, called); return called; } @@ -238,7 +238,7 @@ void mapConfigValuesInOption( { Value * option; try { - option = findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, ctx->config_root); + option = findAlongAttrPath(ctx->state, path, ctx->autoArgs, ctx->config_root); } catch (Error &) { f(path, std::current_exception()); return; @@ -246,7 +246,7 @@ void mapConfigValuesInOption( recurse( [f, ctx](const std::string & path, std::variant v) { bool leaf = std::holds_alternative(v) || std::get(v).type != tAttrs || - ctx->state->isDerivation(std::get(v)); + ctx->state.isDerivation(std::get(v)); if (!leaf) { return true; // Keep digging } @@ -261,20 +261,20 @@ std::string describeError(const Error & e) { return "«error: " + e.msg() + "»" void describeDerivation(Context * ctx, Out & out, Value v) { // Copy-pasted from nix/src/nix/repl.cc :( - Bindings::iterator i = v.attrs->find(ctx->state->sDrvPath); + Bindings::iterator i = v.attrs->find(ctx->state.sDrvPath); PathSet pathset; try { - Path drvPath = i != v.attrs->end() ? ctx->state->coerceToPath(*i->pos, *i->value, pathset) : "???"; + Path drvPath = i != v.attrs->end() ? ctx->state.coerceToPath(*i->pos, *i->value, pathset) : "???"; out << "«derivation " << drvPath << "»"; } catch (Error & e) { out << describeError(e); } } -Value parseAndEval(EvalState * state, const std::string & expression, const std::string & path) +Value parseAndEval(EvalState & state, const std::string & expression, const std::string & path) { Value v{}; - state->eval(state->parseExprFromString(expression, absPath(path)), v); + state.eval(state.parseExprFromString(expression, absPath(path)), v); return v; } @@ -344,7 +344,7 @@ void printValue(Context * ctx, Out & out, std::variant(maybe_value)); - if (ctx->state->isDerivation(v)) { + if (ctx->state.isDerivation(v)) { describeDerivation(ctx, out, v); } else if (v.isList()) { printList(ctx, out, v); @@ -353,7 +353,7 @@ void printValue(Context * ctx, Out & out, std::variantstate->forceValueDeep(v); + ctx->state.forceValueDeep(v); out << v; } } catch (ThrownError & e) { @@ -397,7 +397,7 @@ void printAll(Context * ctx, Out & out) void printAttr(Context * ctx, Out & out, const std::string & path, Value * root) { try { - printValue(ctx, out, *findAlongAttrPath(*ctx->state, path, *ctx->autoArgs, *root), path); + printValue(ctx, out, *findAlongAttrPath(ctx->state, path, ctx->autoArgs, *root), path); } catch (Error & e) { out << describeError(e); } @@ -444,7 +444,7 @@ void printListing(Out & out, Value * v) bool optionTypeIs(Context * ctx, Value & v, const std::string & sought_type) { try { - const auto & type_lookup = v.attrs->find(ctx->state->sType); + const auto & type_lookup = v.attrs->find(ctx->state.sType); if (type_lookup == v.attrs->end()) { return false; } @@ -452,7 +452,7 @@ bool optionTypeIs(Context * ctx, Value & v, const std::string & sought_type) if (type.type != tAttrs) { return false; } - const auto & name_lookup = type.attrs->find(ctx->state->sName); + const auto & name_lookup = type.attrs->find(ctx->state.sName); if (name_lookup == type.attrs->end()) { return false; } @@ -471,14 +471,14 @@ MakeError(OptionPathError, EvalError); Value getSubOptions(Context * ctx, Value & option) { Value getSubOptions = - evaluateValue(ctx, findAlongAttrPath(*ctx->state, "type.getSubOptions", *ctx->autoArgs, option)); + evaluateValue(ctx, findAlongAttrPath(ctx->state, "type.getSubOptions", ctx->autoArgs, option)); if (getSubOptions.type != tLambda) { throw OptionPathError("Option's type.getSubOptions isn't a function"); } Value emptyString{}; nix::mkString(emptyString, ""); Value v; - ctx->state->callFunction(getSubOptions, emptyString, v, nix::Pos{}); + ctx->state.callFunction(getSubOptions, emptyString, v, nix::Pos{}); return v; } @@ -506,7 +506,7 @@ Value findAlongOptionPath(Context * ctx, const std::string & path) } else if (v.type != tAttrs) { throw OptionPathError("Value is %s while a set was expected", showType(v)); } else { - const auto & next = v.attrs->find(ctx->state->symbols.create(attr)); + const auto & next = v.attrs->find(ctx->state.symbols.create(attr)); if (next == v.attrs->end()) { throw OptionPathError("Attribute not found", attr, path); } @@ -579,10 +579,10 @@ int main(int argc, char ** argv) auto store = nix::openStore(); auto state = std::make_unique(myArgs.searchPath, store); - Value options_root = parseAndEval(state.get(), options_expr, path); - Value config_root = parseAndEval(state.get(), config_expr, path); + Value options_root = parseAndEval(*state, options_expr, path); + Value config_root = parseAndEval(*state, config_expr, path); - Context ctx{state.get(), myArgs.getAutoArgs(*state), options_root, config_root}; + Context ctx{*state, *myArgs.getAutoArgs(*state), options_root, config_root}; Out out(std::cout); if (all) { @@ -599,7 +599,7 @@ int main(int argc, char ** argv) } } - ctx.state->printStats(); + ctx.state.printStats(); return 0; } -- cgit 1.4.1 From 3d3ce8df7f29418c28ba02d28927e1a52f6db1e9 Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 09:19:13 -0700 Subject: Pass Context by reference Switch from convention "appease clang-tidy --checks='*'" to "References are like non-nullptr pointers". The clang-tidy check "google-runtime-references" complains about non-const reference arguments, but this is not a convention used in Nix. --- .../installer/tools/nixos-option/nixos-option.cc | 87 +++++++++++----------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 4c8dc1ec42c..bdcfffb47af 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -115,23 +115,23 @@ struct Context Symbol underscore_type; }; -Value evaluateValue(Context * ctx, Value * v) +Value evaluateValue(Context & ctx, Value * v) { - ctx->state.forceValue(*v); - if (ctx->autoArgs.empty()) { + ctx.state.forceValue(*v); + if (ctx.autoArgs.empty()) { return *v; } Value called{}; - ctx->state.autoCallFunction(ctx->autoArgs, *v, called); + ctx.state.autoCallFunction(ctx.autoArgs, *v, called); return called; } -bool isOption(Context * ctx, const Value & v) +bool isOption(Context & ctx, const Value & v) { if (v.type != tAttrs) { return false; } - const auto & actual_type = v.attrs->find(ctx->underscore_type); + const auto & actual_type = v.attrs->find(ctx.underscore_type); if (actual_type == v.attrs->end()) { return false; } @@ -171,7 +171,7 @@ const std::string appendPath(const std::string & prefix, const std::string & suf bool forbiddenRecursionName(std::string name) { return (!name.empty() && name[0] == '_') || name == "haskellPackages"; } void recurse(const std::function)> & f, - Context * ctx, Value v, const std::string & path) + Context & ctx, Value v, const std::string & path) { std::variant evaluated; try { @@ -198,10 +198,10 @@ void recurse(const std::function & f, Context * ctx, Value root) +void mapOptions(const std::function & f, Context & ctx, Value root) { recurse( - [f, ctx](const std::string & path, std::variant v) { + [f, &ctx](const std::string & path, std::variant v) { bool isOpt = std::holds_alternative(v) || isOption(ctx, std::get(v)); if (isOpt) { f(path); @@ -234,11 +234,11 @@ void mapOptions(const std::function & f, Context // users.users.systemd-timesync = ... .. ... void mapConfigValuesInOption( const std::function v)> & f, - const std::string & path, Context * ctx) + const std::string & path, Context & ctx) { Value * option; try { - option = findAlongAttrPath(ctx->state, path, ctx->autoArgs, ctx->config_root); + option = findAlongAttrPath(ctx.state, path, ctx.autoArgs, ctx.config_root); } catch (Error &) { f(path, std::current_exception()); return; @@ -246,7 +246,7 @@ void mapConfigValuesInOption( recurse( [f, ctx](const std::string & path, std::variant v) { bool leaf = std::holds_alternative(v) || std::get(v).type != tAttrs || - ctx->state.isDerivation(std::get(v)); + ctx.state.isDerivation(std::get(v)); if (!leaf) { return true; // Keep digging } @@ -258,13 +258,13 @@ void mapConfigValuesInOption( std::string describeError(const Error & e) { return "«error: " + e.msg() + "»"; } -void describeDerivation(Context * ctx, Out & out, Value v) +void describeDerivation(Context & ctx, Out & out, Value v) { // Copy-pasted from nix/src/nix/repl.cc :( - Bindings::iterator i = v.attrs->find(ctx->state.sDrvPath); + Bindings::iterator i = v.attrs->find(ctx.state.sDrvPath); PathSet pathset; try { - Path drvPath = i != v.attrs->end() ? ctx->state.coerceToPath(*i->pos, *i->value, pathset) : "???"; + Path drvPath = i != v.attrs->end() ? ctx.state.coerceToPath(*i->pos, *i->value, pathset) : "???"; out << "«derivation " << drvPath << "»"; } catch (Error & e) { out << describeError(e); @@ -278,10 +278,10 @@ Value parseAndEval(EvalState & state, const std::string & expression, const std: return v; } -void printValue(Context * ctx, Out & out, std::variant maybe_value, +void printValue(Context & ctx, Out & out, std::variant maybe_value, const std::string & path); -void printList(Context * ctx, Out & out, Value & v) +void printList(Context & ctx, Out & out, Value & v) { Out list_out(out, "[", "]", v.listSize()); for (unsigned int n = 0; n < v.listSize(); ++n) { @@ -290,7 +290,7 @@ void printList(Context * ctx, Out & out, Value & v) } } -void printAttrs(Context * ctx, Out & out, Value & v, const std::string & path) +void printAttrs(Context & ctx, Out & out, Value & v, const std::string & path) { Out attrs_out(out, "{", "}", v.attrs->size()); for (const auto & a : v.attrs->lexicographicOrder()) { @@ -337,14 +337,14 @@ void printMultiLineString(Out & out, const Value & v) } } -void printValue(Context * ctx, Out & out, std::variant maybe_value, const std::string & path) +void printValue(Context & ctx, Out & out, std::variant maybe_value, const std::string & path) { try { if (auto ex = std::get_if(&maybe_value)) { std::rethrow_exception(*ex); } Value v = evaluateValue(ctx, &std::get(maybe_value)); - if (ctx->state.isDerivation(v)) { + if (ctx.state.isDerivation(v)) { describeDerivation(ctx, out, v); } else if (v.isList()) { printList(ctx, out, v); @@ -353,7 +353,7 @@ void printValue(Context * ctx, Out & out, std::variantstate.forceValueDeep(v); + ctx.state.forceValueDeep(v); out << v; } } catch (ThrownError & e) { @@ -374,39 +374,39 @@ void printValue(Context * ctx, Out & out, std::variant v) +void printConfigValue(Context & ctx, Out & out, const std::string & path, std::variant v) { out << path << " = "; printValue(ctx, out, std::move(v), path); out << ";\n"; } -void printAll(Context * ctx, Out & out) +void printAll(Context & ctx, Out & out) { mapOptions( - [ctx, &out](const std::string & option_path) { + [&ctx, &out](const std::string & option_path) { mapConfigValuesInOption( - [ctx, &out](const std::string & config_path, std::variant v) { + [&ctx, &out](const std::string & config_path, std::variant v) { printConfigValue(ctx, out, config_path, v); }, option_path, ctx); }, - ctx, ctx->options_root); + ctx, ctx.options_root); } -void printAttr(Context * ctx, Out & out, const std::string & path, Value * root) +void printAttr(Context & ctx, Out & out, const std::string & path, Value * root) { try { - printValue(ctx, out, *findAlongAttrPath(ctx->state, path, ctx->autoArgs, *root), path); + printValue(ctx, out, *findAlongAttrPath(ctx.state, path, ctx.autoArgs, *root), path); } catch (Error & e) { out << describeError(e); } } -void printOption(Context * ctx, Out & out, const std::string & path, Value * option) +void printOption(Context & ctx, Out & out, const std::string & path, Value * option) { out << "Value:\n"; - printAttr(ctx, out, path, &ctx->config_root); + printAttr(ctx, out, path, &ctx.config_root); out << "\n\nDefault:\n"; printAttr(ctx, out, "default", option); @@ -441,10 +441,10 @@ void printListing(Out & out, Value * v) } } -bool optionTypeIs(Context * ctx, Value & v, const std::string & sought_type) +bool optionTypeIs(Context & ctx, Value & v, const std::string & sought_type) { try { - const auto & type_lookup = v.attrs->find(ctx->state.sType); + const auto & type_lookup = v.attrs->find(ctx.state.sType); if (type_lookup == v.attrs->end()) { return false; } @@ -452,7 +452,7 @@ bool optionTypeIs(Context * ctx, Value & v, const std::string & sought_type) if (type.type != tAttrs) { return false; } - const auto & name_lookup = type.attrs->find(ctx->state.sName); + const auto & name_lookup = type.attrs->find(ctx.state.sName); if (name_lookup == type.attrs->end()) { return false; } @@ -468,26 +468,25 @@ bool optionTypeIs(Context * ctx, Value & v, const std::string & sought_type) MakeError(OptionPathError, EvalError); -Value getSubOptions(Context * ctx, Value & option) +Value getSubOptions(Context & ctx, Value & option) { - Value getSubOptions = - evaluateValue(ctx, findAlongAttrPath(ctx->state, "type.getSubOptions", ctx->autoArgs, option)); + Value getSubOptions = evaluateValue(ctx, findAlongAttrPath(ctx.state, "type.getSubOptions", ctx.autoArgs, option)); if (getSubOptions.type != tLambda) { throw OptionPathError("Option's type.getSubOptions isn't a function"); } Value emptyString{}; nix::mkString(emptyString, ""); Value v; - ctx->state.callFunction(getSubOptions, emptyString, v, nix::Pos{}); + ctx.state.callFunction(getSubOptions, emptyString, v, nix::Pos{}); return v; } // Carefully walk an option path, looking for sub-options when a path walks past // an option value. -Value findAlongOptionPath(Context * ctx, const std::string & path) +Value findAlongOptionPath(Context & ctx, const std::string & path) { Strings tokens = parseAttrPath(path); - Value v = ctx->options_root; + Value v = ctx.options_root; for (auto i = tokens.begin(); i != tokens.end(); i++) { const auto & attr = *i; try { @@ -506,7 +505,7 @@ Value findAlongOptionPath(Context * ctx, const std::string & path) } else if (v.type != tAttrs) { throw OptionPathError("Value is %s while a set was expected", showType(v)); } else { - const auto & next = v.attrs->find(ctx->state.symbols.create(attr)); + const auto & next = v.attrs->find(ctx.state.symbols.create(attr)); if (next == v.attrs->end()) { throw OptionPathError("Attribute not found", attr, path); } @@ -519,7 +518,7 @@ Value findAlongOptionPath(Context * ctx, const std::string & path) return v; } -void printOne(Context * ctx, Out & out, const std::string & path) +void printOne(Context & ctx, Out & out, const std::string & path) { try { Value option = findAlongOptionPath(ctx, path); @@ -589,13 +588,13 @@ int main(int argc, char ** argv) if (!args.empty()) { throw UsageError("--all cannot be used with arguments"); } - printAll(&ctx, out); + printAll(ctx, out); } else { if (args.empty()) { - printOne(&ctx, out, ""); + printOne(ctx, out, ""); } for (const auto & arg : args) { - printOne(&ctx, out, arg); + printOne(ctx, out, arg); } } -- cgit 1.4.1 From 94a068fe36f8b369071d8185f584d31923f7b00e Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 09:24:26 -0700 Subject: Pass values by reference Switch from convention "appease clang-tidy --checks='*'" to "References are like non-nullptr pointers". The clang-tidy check "google-runtime-references" complains about non-const reference arguments, but this is not a convention used in Nix. --- .../installer/tools/nixos-option/nixos-option.cc | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index bdcfffb47af..5fd8f69d800 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -115,14 +115,14 @@ struct Context Symbol underscore_type; }; -Value evaluateValue(Context & ctx, Value * v) +Value evaluateValue(Context & ctx, Value & v) { - ctx.state.forceValue(*v); + ctx.state.forceValue(v); if (ctx.autoArgs.empty()) { - return *v; + return v; } Value called{}; - ctx.state.autoCallFunction(ctx.autoArgs, *v, called); + ctx.state.autoCallFunction(ctx.autoArgs, v, called); return called; } @@ -136,7 +136,7 @@ bool isOption(Context & ctx, const Value & v) return false; } try { - Value evaluated_type = evaluateValue(ctx, actual_type->value); + Value evaluated_type = evaluateValue(ctx, *actual_type->value); if (evaluated_type.type != tString) { return false; } @@ -175,7 +175,7 @@ void recurse(const std::function evaluated; try { - evaluated = evaluateValue(ctx, &v); + evaluated = evaluateValue(ctx, v); } catch (Error &) { evaluated = std::current_exception(); } @@ -343,7 +343,7 @@ void printValue(Context & ctx, Out & out, std::variant(&maybe_value)) { std::rethrow_exception(*ex); } - Value v = evaluateValue(ctx, &std::get(maybe_value)); + Value v = evaluateValue(ctx, std::get(maybe_value)); if (ctx.state.isDerivation(v)) { describeDerivation(ctx, out, v); } else if (v.isList()) { @@ -394,19 +394,19 @@ void printAll(Context & ctx, Out & out) ctx, ctx.options_root); } -void printAttr(Context & ctx, Out & out, const std::string & path, Value * root) +void printAttr(Context & ctx, Out & out, const std::string & path, Value & root) { try { - printValue(ctx, out, *findAlongAttrPath(ctx.state, path, ctx.autoArgs, *root), path); + printValue(ctx, out, *findAlongAttrPath(ctx.state, path, ctx.autoArgs, root), path); } catch (Error & e) { out << describeError(e); } } -void printOption(Context & ctx, Out & out, const std::string & path, Value * option) +void printOption(Context & ctx, Out & out, const std::string & path, Value & option) { out << "Value:\n"; - printAttr(ctx, out, path, &ctx.config_root); + printAttr(ctx, out, path, ctx.config_root); out << "\n\nDefault:\n"; printAttr(ctx, out, "default", option); @@ -428,12 +428,12 @@ void printOption(Context & ctx, Out & out, const std::string & path, Value * opt out << "\n"; } -void printListing(Out & out, Value * v) +void printListing(Out & out, Value & v) { // Print this header on stderr rather than stdout because the old shell script // implementation did. I don't know why. std::cerr << "This attribute set contains:\n"; - for (const auto & a : v->attrs->lexicographicOrder()) { + for (const auto & a : v.attrs->lexicographicOrder()) { std::string name = a->name; if (!name.empty() && name[0] != '_') { out << name << "\n"; @@ -448,7 +448,7 @@ bool optionTypeIs(Context & ctx, Value & v, const std::string & sought_type) if (type_lookup == v.attrs->end()) { return false; } - Value type = evaluateValue(ctx, type_lookup->value); + Value type = evaluateValue(ctx, *type_lookup->value); if (type.type != tAttrs) { return false; } @@ -456,7 +456,7 @@ bool optionTypeIs(Context & ctx, Value & v, const std::string & sought_type) if (name_lookup == type.attrs->end()) { return false; } - Value name = evaluateValue(ctx, name_lookup->value); + Value name = evaluateValue(ctx, *name_lookup->value); if (name.type != tString) { return false; } @@ -470,7 +470,7 @@ MakeError(OptionPathError, EvalError); Value getSubOptions(Context & ctx, Value & option) { - Value getSubOptions = evaluateValue(ctx, findAlongAttrPath(ctx.state, "type.getSubOptions", ctx.autoArgs, option)); + Value getSubOptions = evaluateValue(ctx, *findAlongAttrPath(ctx.state, "type.getSubOptions", ctx.autoArgs, option)); if (getSubOptions.type != tLambda) { throw OptionPathError("Option's type.getSubOptions isn't a function"); } @@ -491,7 +491,7 @@ Value findAlongOptionPath(Context & ctx, const std::string & path) const auto & attr = *i; try { bool last_attribute = std::next(i) == tokens.end(); - v = evaluateValue(ctx, &v); + v = evaluateValue(ctx, v); if (attr.empty()) { throw OptionPathError("empty attribute name"); } @@ -522,11 +522,11 @@ void printOne(Context & ctx, Out & out, const std::string & path) { try { Value option = findAlongOptionPath(ctx, path); - option = evaluateValue(ctx, &option); + option = evaluateValue(ctx, option); if (isOption(ctx, option)) { - printOption(ctx, out, path, &option); + printOption(ctx, out, path, option); } else { - printListing(out, &option); + printListing(out, option); } } catch (Error & e) { std::cerr << "error: " << e.msg() -- cgit 1.4.1 From 2ddd2d07601d11f31f9bffa61060d680a1708b4c Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 09:35:38 -0700 Subject: Explain why header goes on stderr --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 5fd8f69d800..174b7a0cbb6 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -430,8 +430,8 @@ void printOption(Context & ctx, Out & out, const std::string & path, Value & opt void printListing(Out & out, Value & v) { - // Print this header on stderr rather than stdout because the old shell script - // implementation did. I don't know why. + // Print this header on stderr rather than stdout, presumably to make it + // slightly easier to consume this output in other tools. std::cerr << "This attribute set contains:\n"; for (const auto & a : v.attrs->lexicographicOrder()) { std::string name = a->name; -- cgit 1.4.1 From 84d55716a9899954bc05b000287a54a59ee5aefe Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 09:36:00 -0700 Subject: Don't print header on stderr Automated consumers can use 'sed 1d' or similar to remove this header. This probably makes this output *easier* to consume correctly. Having this header show up in consumers' terminal or log output is probably not useful, but hiding it without hiding all error messages would have been more troublesome that just stripping it from stdout. I.e., previously, unsophisticated use would show undesired output: $ some-other-tool This attribute set contains: This attribute set contains: This attribute set contains: This attribute set contains: The simplest way to hide this undesired output would have been nixos-option ... 2>/dev/null, which would hide all error messages. We do not wish to encourage that. Correct use would have been something like: nixos-option ... 2> >( grep --line-buffered -v 'This attribute set contains:') After this change, correct use is simpler: nixos-option ... | sed 1d or nixos-option ... | sed '1/This attribute set contains:/d' if the caller don't know if this invocation of nixos-option will yield an attribute listing or an option description. --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 174b7a0cbb6..2b95f9c9833 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -430,9 +430,7 @@ void printOption(Context & ctx, Out & out, const std::string & path, Value & opt void printListing(Out & out, Value & v) { - // Print this header on stderr rather than stdout, presumably to make it - // slightly easier to consume this output in other tools. - std::cerr << "This attribute set contains:\n"; + out << "This attribute set contains:\n"; for (const auto & a : v.attrs->lexicographicOrder()) { std::string name = a->name; if (!name.empty() && name[0] != '_') { -- cgit 1.4.1 From 4d17d5b31f196416ee4be50b0f7b125966ea210f Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 09:56:07 -0700 Subject: snake_case -> camelCase --- .../installer/tools/nixos-option/nixos-option.cc | 115 ++++++++++----------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 2b95f9c9833..58d66bad1c6 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -56,7 +56,7 @@ class Out ONE_LINE, MULTI_LINE }; - explicit Out(std::ostream & ostream) : ostream(ostream), policy(ONE_LINE), write_since_sep(true) {} + explicit Out(std::ostream & ostream) : ostream(ostream), policy(ONE_LINE), writeSinceSep(true) {} Out(Out & o, const std::string & start, const std::string & end, LinePolicy policy); Out(Out & o, const std::string & start, const std::string & end, int count) : Out(o, start, end, count < 2 ? ONE_LINE : MULTI_LINE) @@ -72,16 +72,16 @@ class Out std::string indentation; std::string end; LinePolicy policy; - bool write_since_sep; + bool writeSinceSep; template friend Out & operator<<(Out & o, T thing); }; template Out & operator<<(Out & o, T thing) { - if (!o.write_since_sep && o.policy == Out::MULTI_LINE) { + if (!o.writeSinceSep && o.policy == Out::MULTI_LINE) { o.ostream << o.indentation; } - o.write_since_sep = true; + o.writeSinceSep = true; o.ostream << thing; return o; } @@ -89,13 +89,13 @@ template Out & operator<<(Out & o, T thing) template <> Out & operator<<(Out & o, Out::Separator /* thing */) { o.ostream << (o.policy == Out::ONE_LINE ? " " : "\n"); - o.write_since_sep = false; + o.writeSinceSep = false; return o; } Out::Out(Out & o, const std::string & start, const std::string & end, LinePolicy policy) : ostream(o.ostream), indentation(policy == ONE_LINE ? o.indentation : o.indentation + " "), - end(policy == ONE_LINE ? end : o.indentation + end), policy(policy), write_since_sep(true) + end(policy == ONE_LINE ? end : o.indentation + end), policy(policy), writeSinceSep(true) { o << start; *this << Out::sep; @@ -104,15 +104,15 @@ Out::Out(Out & o, const std::string & start, const std::string & end, LinePolicy // Stuff needed for evaluation struct Context { - Context(EvalState & state, Bindings & autoArgs, Value options_root, Value config_root) - : state(state), autoArgs(autoArgs), options_root(options_root), config_root(config_root), - underscore_type(state.symbols.create("_type")) + Context(EvalState & state, Bindings & autoArgs, Value optionsRoot, Value configRoot) + : state(state), autoArgs(autoArgs), optionsRoot(optionsRoot), configRoot(configRoot), + underscoreType(state.symbols.create("_type")) {} EvalState & state; Bindings & autoArgs; - Value options_root; - Value config_root; - Symbol underscore_type; + Value optionsRoot; + Value configRoot; + Symbol underscoreType; }; Value evaluateValue(Context & ctx, Value & v) @@ -131,16 +131,16 @@ bool isOption(Context & ctx, const Value & v) if (v.type != tAttrs) { return false; } - const auto & actual_type = v.attrs->find(ctx.underscore_type); - if (actual_type == v.attrs->end()) { + const auto & atualType = v.attrs->find(ctx.underscoreType); + if (atualType == v.attrs->end()) { return false; } try { - Value evaluated_type = evaluateValue(ctx, *actual_type->value); - if (evaluated_type.type != tString) { + Value evaluatedType = evaluateValue(ctx, *atualType->value); + if (evaluatedType.type != tString) { return false; } - return static_cast(evaluated_type.string.s) == "option"; + return static_cast(evaluatedType.string.s) == "option"; } catch (Error &) { return false; } @@ -238,7 +238,7 @@ void mapConfigValuesInOption( { Value * option; try { - option = findAlongAttrPath(ctx.state, path, ctx.autoArgs, ctx.config_root); + option = findAlongAttrPath(ctx.state, path, ctx.autoArgs, ctx.configRoot); } catch (Error &) { f(path, std::current_exception()); return; @@ -278,26 +278,25 @@ Value parseAndEval(EvalState & state, const std::string & expression, const std: return v; } -void printValue(Context & ctx, Out & out, std::variant maybe_value, - const std::string & path); +void printValue(Context & ctx, Out & out, std::variant maybeValue, const std::string & path); void printList(Context & ctx, Out & out, Value & v) { - Out list_out(out, "[", "]", v.listSize()); + Out listOut(out, "[", "]", v.listSize()); for (unsigned int n = 0; n < v.listSize(); ++n) { - printValue(ctx, list_out, *v.listElems()[n], ""); - list_out << Out::sep; + printValue(ctx, listOut, *v.listElems()[n], ""); + listOut << Out::sep; } } void printAttrs(Context & ctx, Out & out, Value & v, const std::string & path) { - Out attrs_out(out, "{", "}", v.attrs->size()); + Out attrsOut(out, "{", "}", v.attrs->size()); for (const auto & a : v.attrs->lexicographicOrder()) { std::string name = a->name; - attrs_out << name << " = "; - printValue(ctx, attrs_out, *a->value, appendPath(path, name)); - attrs_out << ";" << Out::sep; + attrsOut << name << " = "; + printValue(ctx, attrsOut, *a->value, appendPath(path, name)); + attrsOut << ";" << Out::sep; } } @@ -323,27 +322,27 @@ void multiLineStringEscape(Out & out, const std::string & s) void printMultiLineString(Out & out, const Value & v) { std::string s = v.string.s; - Out str_out(out, "''", "''", Out::MULTI_LINE); + Out strOut(out, "''", "''", Out::MULTI_LINE); std::string::size_type begin = 0; while (begin < s.size()) { std::string::size_type end = s.find('\n', begin); if (end == std::string::npos) { - multiLineStringEscape(str_out, s.substr(begin, s.size() - begin)); + multiLineStringEscape(strOut, s.substr(begin, s.size() - begin)); break; } - multiLineStringEscape(str_out, s.substr(begin, end - begin)); - str_out << Out::sep; + multiLineStringEscape(strOut, s.substr(begin, end - begin)); + strOut << Out::sep; begin = end + 1; } } -void printValue(Context & ctx, Out & out, std::variant maybe_value, const std::string & path) +void printValue(Context & ctx, Out & out, std::variant maybeValue, const std::string & path) { try { - if (auto ex = std::get_if(&maybe_value)) { + if (auto ex = std::get_if(&maybeValue)) { std::rethrow_exception(*ex); } - Value v = evaluateValue(ctx, std::get(maybe_value)); + Value v = evaluateValue(ctx, std::get(maybeValue)); if (ctx.state.isDerivation(v)) { describeDerivation(ctx, out, v); } else if (v.isList()) { @@ -384,14 +383,14 @@ void printConfigValue(Context & ctx, Out & out, const std::string & path, std::v void printAll(Context & ctx, Out & out) { mapOptions( - [&ctx, &out](const std::string & option_path) { + [&ctx, &out](const std::string & optionPath) { mapConfigValuesInOption( - [&ctx, &out](const std::string & config_path, std::variant v) { - printConfigValue(ctx, out, config_path, v); + [&ctx, &out](const std::string & configPath, std::variant v) { + printConfigValue(ctx, out, configPath, v); }, - option_path, ctx); + optionPath, ctx); }, - ctx, ctx.options_root); + ctx, ctx.optionsRoot); } void printAttr(Context & ctx, Out & out, const std::string & path, Value & root) @@ -406,7 +405,7 @@ void printAttr(Context & ctx, Out & out, const std::string & path, Value & root) void printOption(Context & ctx, Out & out, const std::string & path, Value & option) { out << "Value:\n"; - printAttr(ctx, out, path, ctx.config_root); + printAttr(ctx, out, path, ctx.configRoot); out << "\n\nDefault:\n"; printAttr(ctx, out, "default", option); @@ -439,26 +438,26 @@ void printListing(Out & out, Value & v) } } -bool optionTypeIs(Context & ctx, Value & v, const std::string & sought_type) +bool optionTypeIs(Context & ctx, Value & v, const std::string & soughtType) { try { - const auto & type_lookup = v.attrs->find(ctx.state.sType); - if (type_lookup == v.attrs->end()) { + const auto & typeLookup = v.attrs->find(ctx.state.sType); + if (typeLookup == v.attrs->end()) { return false; } - Value type = evaluateValue(ctx, *type_lookup->value); + Value type = evaluateValue(ctx, *typeLookup->value); if (type.type != tAttrs) { return false; } - const auto & name_lookup = type.attrs->find(ctx.state.sName); - if (name_lookup == type.attrs->end()) { + const auto & nameLookup = type.attrs->find(ctx.state.sName); + if (nameLookup == type.attrs->end()) { return false; } - Value name = evaluateValue(ctx, *name_lookup->value); + Value name = evaluateValue(ctx, *nameLookup->value); if (name.type != tString) { return false; } - return name.string.s == sought_type; + return name.string.s == soughtType; } catch (Error &) { return false; } @@ -484,11 +483,11 @@ Value getSubOptions(Context & ctx, Value & option) Value findAlongOptionPath(Context & ctx, const std::string & path) { Strings tokens = parseAttrPath(path); - Value v = ctx.options_root; + Value v = ctx.optionsRoot; for (auto i = tokens.begin(); i != tokens.end(); i++) { const auto & attr = *i; try { - bool last_attribute = std::next(i) == tokens.end(); + bool lastAttribute = std::next(i) == tokens.end(); v = evaluateValue(ctx, v); if (attr.empty()) { throw OptionPathError("empty attribute name"); @@ -496,7 +495,7 @@ Value findAlongOptionPath(Context & ctx, const std::string & path) if (isOption(ctx, v) && optionTypeIs(ctx, v, "submodule")) { v = getSubOptions(ctx, v); } - if (isOption(ctx, v) && optionTypeIs(ctx, v, "loaOf") && !last_attribute) { + if (isOption(ctx, v) && optionTypeIs(ctx, v, "loaOf") && !lastAttribute) { v = getSubOptions(ctx, v); // Note that we've consumed attr, but didn't actually use it. This is the path component that's looked // up in the list or attribute set that doesn't name an option -- the "root" in "users.users.root.name". @@ -538,8 +537,8 @@ int main(int argc, char ** argv) { bool all = false; std::string path = "."; - std::string options_expr = "(import {}).options"; - std::string config_expr = "(import {}).config"; + std::string optionsExpr = "(import {}).options"; + std::string configExpr = "(import {}).config"; std::vector args; struct MyArgs : nix::LegacyArgs, nix::MixEvalArgs @@ -557,9 +556,9 @@ int main(int argc, char ** argv) } else if (*arg == "--path") { path = nix::getArg(*arg, arg, end); } else if (*arg == "--options_expr") { - options_expr = nix::getArg(*arg, arg, end); + optionsExpr = nix::getArg(*arg, arg, end); } else if (*arg == "--config_expr") { - config_expr = nix::getArg(*arg, arg, end); + configExpr = nix::getArg(*arg, arg, end); } else if (!arg->empty() && arg->at(0) == '-') { return false; } else { @@ -576,10 +575,10 @@ int main(int argc, char ** argv) auto store = nix::openStore(); auto state = std::make_unique(myArgs.searchPath, store); - Value options_root = parseAndEval(*state, options_expr, path); - Value config_root = parseAndEval(*state, config_expr, path); + Value optionsRoot = parseAndEval(*state, optionsExpr, path); + Value configRoot = parseAndEval(*state, configExpr, path); - Context ctx{*state, *myArgs.getAutoArgs(*state), options_root, config_root}; + Context ctx{*state, *myArgs.getAutoArgs(*state), optionsRoot, configRoot}; Out out(std::cout); if (all) { -- cgit 1.4.1 From 56462408700a39bf49d130a862570ebf48b8e17c Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 10:01:40 -0700 Subject: Only print example when there is one --- .../modules/installer/tools/nixos-option/nixos-option.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 58d66bad1c6..3261b263c2f 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -402,6 +402,15 @@ void printAttr(Context & ctx, Out & out, const std::string & path, Value & root) } } +bool has_example(Context & ctx, Value & option) { + try { + findAlongAttrPath(ctx.state, "example", ctx.autoArgs, option); + return true; + } catch (Error &) { + return false; + } +} + void printOption(Context & ctx, Out & out, const std::string & path, Value & option) { out << "Value:\n"; @@ -413,8 +422,10 @@ void printOption(Context & ctx, Out & out, const std::string & path, Value & opt out << "\n\nType:\n"; printAttr(ctx, out, "type.description", option); - out << "\n\nExample:\n"; - printAttr(ctx, out, "example", option); + if (has_example(ctx, option)) { + out << "\n\nExample:\n"; + printAttr(ctx, out, "example", option); + } out << "\n\nDescription:\n"; printAttr(ctx, out, "description", option); -- cgit 1.4.1 From 57a5752300c3157fe0c2ddea06f694bc78e9ba91 Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 16 Sep 2019 10:35:51 -0700 Subject: Add maintainer --- maintainers/maintainer-list.nix | 6 ++++++ nixos/modules/installer/tools/nixos-option/default.nix | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 1f2cdda41d1..e73e99b47b4 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -1194,6 +1194,12 @@ githubId = 30435868; name = "Okina Matara"; }; + chkno = { + email = "chuck@intelligence.org"; + github = "chkno"; + githubId = 1118859; + name = "Scott Worley"; + }; choochootrain = { email = "hurshal@imap.cc"; github = "choochootrain"; diff --git a/nixos/modules/installer/tools/nixos-option/default.nix b/nixos/modules/installer/tools/nixos-option/default.nix index 2c2674ad28d..753fd92c7bb 100644 --- a/nixos/modules/installer/tools/nixos-option/default.nix +++ b/nixos/modules/installer/tools/nixos-option/default.nix @@ -1,4 +1,4 @@ -{stdenv, boost, cmake, pkgconfig, nix, ... }: +{lib, stdenv, boost, cmake, pkgconfig, nix, ... }: stdenv.mkDerivation rec { name = "nixos-option"; src = ./.; @@ -6,5 +6,6 @@ stdenv.mkDerivation rec { buildInputs = [ boost nix ]; meta = { license = stdenv.lib.licenses.lgpl2Plus; + maintainers = with lib.maintainers; [ chkno ]; }; } -- cgit 1.4.1 From a3e31df4d779943cd462a36d63bb88cc4c3c66ed Mon Sep 17 00:00:00 2001 From: Chuck Date: Tue, 17 Sep 2019 17:36:26 -0700 Subject: (clang-format for has_example) --- .../modules/installer/tools/nixos-option/nixos-option.cc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 3261b263c2f..778b7e32617 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -402,13 +402,14 @@ void printAttr(Context & ctx, Out & out, const std::string & path, Value & root) } } -bool has_example(Context & ctx, Value & option) { - try { - findAlongAttrPath(ctx.state, "example", ctx.autoArgs, option); - return true; - } catch (Error &) { - return false; - } +bool has_example(Context & ctx, Value & option) +{ + try { + findAlongAttrPath(ctx.state, "example", ctx.autoArgs, option); + return true; + } catch (Error &) { + return false; + } } void printOption(Context & ctx, Out & out, const std::string & path, Value & option) -- cgit 1.4.1 From 445145d5b9a33a9ded5a6928c52ddaeb862a8a8e Mon Sep 17 00:00:00 2001 From: Chuck Date: Tue, 17 Sep 2019 17:36:48 -0700 Subject: Support aggregate types attrsOf and listOf --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index 778b7e32617..c0c9ec0e5b4 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -475,6 +475,11 @@ bool optionTypeIs(Context & ctx, Value & v, const std::string & soughtType) } } +bool isAggregateOptionType(Context & ctx, Value & v) +{ + return optionTypeIs(ctx, v, "attrsOf") || optionTypeIs(ctx, v, "listOf") || optionTypeIs(ctx, v, "loaOf"); +} + MakeError(OptionPathError, EvalError); Value getSubOptions(Context & ctx, Value & option) @@ -507,7 +512,7 @@ Value findAlongOptionPath(Context & ctx, const std::string & path) if (isOption(ctx, v) && optionTypeIs(ctx, v, "submodule")) { v = getSubOptions(ctx, v); } - if (isOption(ctx, v) && optionTypeIs(ctx, v, "loaOf") && !lastAttribute) { + if (isOption(ctx, v) && isAggregateOptionType(ctx, v) && !lastAttribute) { v = getSubOptions(ctx, v); // Note that we've consumed attr, but didn't actually use it. This is the path component that's looked // up in the list or attribute set that doesn't name an option -- the "root" in "users.users.root.name". -- cgit 1.4.1 From 1e7985942b4f156d20ce2ddac9fc133a9091ed5b Mon Sep 17 00:00:00 2001 From: Chuck Date: Fri, 20 Sep 2019 13:37:12 -0700 Subject: snake_case -> camelCase --- nixos/modules/installer/tools/nixos-option/nixos-option.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/modules/installer/tools/nixos-option/nixos-option.cc b/nixos/modules/installer/tools/nixos-option/nixos-option.cc index c0c9ec0e5b4..9b92dc829cd 100644 --- a/nixos/modules/installer/tools/nixos-option/nixos-option.cc +++ b/nixos/modules/installer/tools/nixos-option/nixos-option.cc @@ -402,7 +402,7 @@ void printAttr(Context & ctx, Out & out, const std::string & path, Value & root) } } -bool has_example(Context & ctx, Value & option) +bool hasExample(Context & ctx, Value & option) { try { findAlongAttrPath(ctx.state, "example", ctx.autoArgs, option); @@ -423,7 +423,7 @@ void printOption(Context & ctx, Out & out, const std::string & path, Value & opt out << "\n\nType:\n"; printAttr(ctx, out, "type.description", option); - if (has_example(ctx, option)) { + if (hasExample(ctx, option)) { out << "\n\nExample:\n"; printAttr(ctx, out, "example", option); } -- cgit 1.4.1 From 348bafc1dfbdf7aed48d08a55231880dffe149ed Mon Sep 17 00:00:00 2001 From: Tim Steinbach Date: Mon, 4 Nov 2019 08:46:05 -0500 Subject: vivaldi: 2.9.1705.31-1 -> 2.9.1705.38-1 --- pkgs/applications/networking/browsers/vivaldi/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/browsers/vivaldi/default.nix b/pkgs/applications/networking/browsers/vivaldi/default.nix index c8d8d411f2d..f3228b11eb9 100644 --- a/pkgs/applications/networking/browsers/vivaldi/default.nix +++ b/pkgs/applications/networking/browsers/vivaldi/default.nix @@ -17,11 +17,11 @@ let vivaldiName = if isSnapshot then "vivaldi-snapshot" else "vivaldi"; in stdenv.mkDerivation rec { pname = "vivaldi"; - version = "2.9.1705.31-1"; + version = "2.9.1705.38-1"; src = fetchurl { url = "https://downloads.vivaldi.com/${branch}/vivaldi-${branch}_${version}_amd64.deb"; - sha256 = "113bycfygyx09bc5bgsmdniffp3282004yrl7gr16dssxrw52al2"; + sha256 = "0jj2kfdl4788l132ncz3jf1pnjig7dc9gaxjmgv51n1ahmmx8shi"; }; unpackPhase = '' -- cgit 1.4.1 From 754e315fb59252a2bb2db71ad892c8d8b1465a01 Mon Sep 17 00:00:00 2001 From: Robin Gloster Date: Wed, 9 Oct 2019 01:54:56 +0200 Subject: release-notes 20.03: added notice for rewritten nixos-option --- nixos/doc/manual/release-notes/rl-2003.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nixos/doc/manual/release-notes/rl-2003.xml b/nixos/doc/manual/release-notes/rl-2003.xml index f001a18b1c1..72766f16eb9 100644 --- a/nixos/doc/manual/release-notes/rl-2003.xml +++ b/nixos/doc/manual/release-notes/rl-2003.xml @@ -49,6 +49,12 @@ zfs as soon as any zfs mountpoint is configured in fileSystems. + + + nixos-option has been rewritten in C++, speeding it up, improving correctness, + and adding a option which prints all options and their values. + + -- cgit 1.4.1 From ed2484f48a5c589564f6d4fc1068e0a55a0c03d2 Mon Sep 17 00:00:00 2001 From: Andrei Lapshin Date: Mon, 4 Nov 2019 13:06:18 +0300 Subject: hunspell-dicts: add Russian dictionary --- pkgs/development/libraries/hunspell/dictionaries.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkgs/development/libraries/hunspell/dictionaries.nix b/pkgs/development/libraries/hunspell/dictionaries.nix index 3e1799d82cd..fb64aa81d1a 100644 --- a/pkgs/development/libraries/hunspell/dictionaries.nix +++ b/pkgs/development/libraries/hunspell/dictionaries.nix @@ -722,4 +722,14 @@ in rec { platforms = platforms.all; }; }; + + /* RUSSIAN */ + + ru_RU = ru-ru; + ru-ru = mkDictFromLibreOffice { + shortName = "ru-ru"; + dictFileName = "ru_RU"; + shortDescription = "Russian (Russian)"; + license = with stdenv.lib.licenses; [ mpl20 lgpl3 ]; + }; } -- cgit 1.4.1 From c97ca709c1d64927f1dcfbb6cc732e9ddd154039 Mon Sep 17 00:00:00 2001 From: Tim Steinbach Date: Mon, 4 Nov 2019 09:38:27 -0500 Subject: linux: 5.4-rc5 -> 5.4-rc6 --- pkgs/os-specific/linux/kernel/linux-testing.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/linux-testing.nix b/pkgs/os-specific/linux/kernel/linux-testing.nix index 9c91c91eeb4..8096684b137 100644 --- a/pkgs/os-specific/linux/kernel/linux-testing.nix +++ b/pkgs/os-specific/linux/kernel/linux-testing.nix @@ -3,7 +3,7 @@ with stdenv.lib; buildLinux (args // rec { - version = "5.4-rc5"; + version = "5.4-rc6"; extraMeta.branch = "5.4"; # modDirVersion needs to be x.y.z, will always add .0 @@ -11,7 +11,7 @@ buildLinux (args // rec { src = fetchurl { url = "https://git.kernel.org/torvalds/t/linux-${version}.tar.gz"; - sha256 = "0047f1vq93cq9qa0550dnilci0qxy4ygc6brhcr6xbwqakglwr18"; + sha256 = "0ypazqr6z0n8fwaawxca0i56bwd4g4q2bw5qwayf0f4402m34xdh"; }; # Should the testing kernels ever be built on Hydra? -- cgit 1.4.1 From 9b773fd98a02e93cf02e68727096a01da7cc6735 Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Mon, 4 Nov 2019 15:59:33 +0100 Subject: inkscape: fix darwin build Cairo is also a dependency now. /tmp/nix-build-inkscape-0.92.4.drv-0/inkscape-0.92.4/src/display/drawing-context.h:20:10: fatal error: 'cairo.h' file not found #include ^~~~~~~~~ 1 error generated. --- pkgs/applications/graphics/inkscape/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/graphics/inkscape/default.nix b/pkgs/applications/graphics/inkscape/default.nix index c945412bc2c..e3fa897aec6 100644 --- a/pkgs/applications/graphics/inkscape/default.nix +++ b/pkgs/applications/graphics/inkscape/default.nix @@ -1,7 +1,7 @@ { stdenv, fetchurl, pkgconfig, perlPackages, libXft , libpng, zlib, popt, boehmgc, libxml2, libxslt, glib, gtkmm2 , glibmm, libsigcxx, lcms, boost, gettext, makeWrapper -, gsl, gtkspell2, python2, poppler, imagemagick, libwpg, librevenge +, gsl, gtkspell2, cairo, python2, poppler, imagemagick, libwpg, librevenge , libvisio, libcdr, libexif, potrace, cmake , librsvg, wrapGAppsHook }: @@ -52,7 +52,8 @@ stdenv.mkDerivation rec { librsvg # for loading icons python2Env perlPackages.perl - ] ++ stdenv.lib.optional (!stdenv.isDarwin) gtkspell2; + ] ++ stdenv.lib.optional (!stdenv.isDarwin) gtkspell2 + ++ stdenv.lib.optional stdenv.isDarwin cairo; enableParallelBuilding = true; -- cgit 1.4.1 From faf06da0df5824cdb92f8ffe7c66c2c468b7a202 Mon Sep 17 00:00:00 2001 From: Keito Kajitani Date: Tue, 5 Nov 2019 00:23:34 +0900 Subject: rictydiminished-with-firacode: fonttools requires python3 (#72762) * rictydiminished-with-firacode: fonttools requires python3 * rictydiminished-with-firacode: python3 is sufficient, purge python3Full --- pkgs/data/fonts/rictydiminished-with-firacode/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/data/fonts/rictydiminished-with-firacode/default.nix b/pkgs/data/fonts/rictydiminished-with-firacode/default.nix index 2e83d5b12d4..8b6c3749962 100644 --- a/pkgs/data/fonts/rictydiminished-with-firacode/default.nix +++ b/pkgs/data/fonts/rictydiminished-with-firacode/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchgit, fontforge, pythonFull }: +{ stdenv, fetchgit, fontforge, python3 }: stdenv.mkDerivation rec { pname = "rictydiminished-with-firacode"; @@ -27,7 +27,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ fontforge - (pythonFull.withPackages (ps: [ + (python3.withPackages (ps: [ ps.jinja2 ps.py3to2 ps.fonttools -- cgit 1.4.1 From de1cbcc69234d9301eb60bf8b074239f703f4d0e Mon Sep 17 00:00:00 2001 From: Max Veytsman Date: Sun, 3 Nov 2019 22:20:49 -0500 Subject: nixos/nat: fix typo in comment This iptables directive is marking packets coming from the internal interfaces so they can later be NATed by the rule in https://github.com/NixOS/nixpkgs/blob/22378e699682778075bcfb12cb6bf710261586f5/nixos/modules/services/networking/nat.nix#L38-L42 . Fix the comment accordingly. --- nixos/modules/services/networking/nat.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/services/networking/nat.nix b/nixos/modules/services/networking/nat.nix index 89d8590093d..5681bda51cb 100644 --- a/nixos/modules/services/networking/nat.nix +++ b/nixos/modules/services/networking/nat.nix @@ -29,7 +29,7 @@ let iptables -w -t nat -N nixos-nat-post # We can't match on incoming interface in POSTROUTING, so - # mark packets coming from the external interfaces. + # mark packets coming from the internal interfaces. ${concatMapStrings (iface: '' iptables -w -t nat -A nixos-nat-pre \ -i '${iface}' -j MARK --set-mark 1 -- cgit 1.4.1 From a38273aaa58e67ec9c315b8995f9db78fb5f682d Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Mon, 4 Nov 2019 08:09:25 -0800 Subject: asunder: 2.9.4 -> 2.9.5 (#72459) * asunder: 2.9.4 -> 2.9.5 * asunder: cleanup build inputs Move intltool and makeWrapper to nativeBuildInputs --- pkgs/applications/audio/asunder/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/audio/asunder/default.nix b/pkgs/applications/audio/asunder/default.nix index e252635e953..5a0b6797a24 100644 --- a/pkgs/applications/audio/asunder/default.nix +++ b/pkgs/applications/audio/asunder/default.nix @@ -12,15 +12,15 @@ with stdenv.lib; stdenv.mkDerivation rec { - version = "2.9.4"; + version = "2.9.5"; pname = "asunder"; src = fetchurl { url = "http://littlesvr.ca/asunder/releases/${pname}-${version}.tar.bz2"; - sha256 = "1bwc9v9l1f3kqjd7wis6g2sv6ibc618ybh0gsb8mkkfhadp68w30"; + sha256 = "069x6az2r3wlb2hd07iz0hxpxwknw7s9h7pyhnkmzv1pw9ci3kk4"; }; - nativeBuildInputs = [ pkgconfig ]; - buildInputs = [ gtk2 libcddb intltool makeWrapper ]; + nativeBuildInputs = [ intltool makeWrapper pkgconfig ]; + buildInputs = [ gtk2 libcddb ]; runtimeDeps = optional mp3Support lame ++ -- cgit 1.4.1 From 1c336ed6fcb9cbe6559dcf5cfdd450a5a8832336 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sat, 2 Nov 2019 10:59:32 -0700 Subject: ocamlPackages.mlgmpidl: 1.2.10 -> 1.2.11 --- pkgs/development/ocaml-modules/mlgmpidl/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/ocaml-modules/mlgmpidl/default.nix b/pkgs/development/ocaml-modules/mlgmpidl/default.nix index d25a5f4ce06..2733ad2b0fb 100644 --- a/pkgs/development/ocaml-modules/mlgmpidl/default.nix +++ b/pkgs/development/ocaml-modules/mlgmpidl/default.nix @@ -2,12 +2,12 @@ stdenv.mkDerivation rec { name = "ocaml${ocaml.version}-mlgmpidl-${version}"; - version = "1.2.10"; + version = "1.2.11"; src = fetchFromGitHub { owner = "nberth"; repo = "mlgmpidl"; rev = version; - sha256 = "181vpqx8zdairq645b8qpkzj4fnkb508iavk7sqzskag1s8613qn"; + sha256 = "1rycl84sdvgb5avdsya9iz8brx92y2zcb6cn4w1j0164j6q2ril9"; }; buildInputs = [ perl gmp mpfr ocaml findlib camlidl ]; -- cgit 1.4.1 From 5524f4df0daa7e71cb94fd554af67b736361dca2 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sat, 2 Nov 2019 16:02:07 -0700 Subject: gitAndTools.pre-commit: 1.18.3 -> 1.20.0 --- pkgs/development/python-modules/pre-commit/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/pre-commit/default.nix b/pkgs/development/python-modules/pre-commit/default.nix index 18b548faf21..27d56bab06e 100644 --- a/pkgs/development/python-modules/pre-commit/default.nix +++ b/pkgs/development/python-modules/pre-commit/default.nix @@ -14,12 +14,12 @@ buildPythonApplication rec { pname = "pre-commit"; - version = "1.18.3"; + version = "1.20.0"; src = fetchPypi { inherit version; pname = "pre_commit"; - sha256 = "0gqzx5n5kps7z45rgydciz0sq1m09b4g49vclhvybi57pn3hag0x"; + sha256 = "0vmv3hrivm0sm81cn59n2pmw8h323sg4sgncl910djby2a3jc5cz"; }; propagatedBuildInputs = [ -- cgit 1.4.1 From d751e085221cfc019a9fe0409abd0ec24e426a1b Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sat, 2 Nov 2019 14:28:04 -0700 Subject: python38Packages.license-expression: 0.999 -> 1.0 --- pkgs/development/python-modules/license-expression/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/license-expression/default.nix b/pkgs/development/python-modules/license-expression/default.nix index 2bf204a9a62..177949fbd51 100644 --- a/pkgs/development/python-modules/license-expression/default.nix +++ b/pkgs/development/python-modules/license-expression/default.nix @@ -4,13 +4,13 @@ buildPythonPackage rec { pname = "license-expression"; - version = "0.999"; + version = "1.0"; src = fetchFromGitHub { owner = "nexB"; repo = "license-expression"; rev = "v${version}"; - sha256 = "0q8sha38w7ajg7ar0rmbqrwv0n58l8yzyl96cqwcbvp578fn3ir0"; + sha256 = "15dk3j5sr8iypzqqa8wa12b2a84f6ssbfvam1c1vzz00y2y5v3ic"; }; postPatch = "patchShebangs ./configure"; -- cgit 1.4.1 From b1b776b11c2e4b73e69d4bef7f33fd2bb215c286 Mon Sep 17 00:00:00 2001 From: "R. RyanTM" Date: Sat, 2 Nov 2019 17:13:03 -0700 Subject: python38Packages.xdis: 4.0.4 -> 4.1.2 --- pkgs/development/python-modules/xdis/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/xdis/default.nix b/pkgs/development/python-modules/xdis/default.nix index cec21c44657..d120f17780b 100644 --- a/pkgs/development/python-modules/xdis/default.nix +++ b/pkgs/development/python-modules/xdis/default.nix @@ -6,14 +6,14 @@ buildPythonPackage rec { pname = "xdis"; - version = "4.0.4"; + version = "4.1.2"; disabled = isPy27; src = fetchFromGitHub { owner = "rocky"; repo = "python-xdis"; rev = version; - sha256 = "1m54d61ka9wgq0iqlzmsikzxa6qmwvnwsgm2kxb3vw5ic1psv4pv"; + sha256 = "0icqhafsnmcs6628cg3jjgq0d3x835nqmhljcz93yi457hfqd2lp"; }; checkInputs = [ pytest ]; -- cgit 1.4.1 From 7a17d2df56abadf62dc27a2f63190e6a201f93ce Mon Sep 17 00:00:00 2001 From: gnidorah Date: Sat, 26 Oct 2019 03:38:11 +0300 Subject: video2midi: 0.3.9.5 -> 0.3.9.6 --- pkgs/tools/audio/video2midi/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/audio/video2midi/default.nix b/pkgs/tools/audio/video2midi/default.nix index c664c745f32..43539f1ee29 100644 --- a/pkgs/tools/audio/video2midi/default.nix +++ b/pkgs/tools/audio/video2midi/default.nix @@ -8,7 +8,7 @@ let }); in pythonPackages.buildPythonApplication rec { pname = "video2midi"; - version = "0.3.9.5"; + version = "0.3.9.6"; format = "other"; @@ -16,7 +16,7 @@ in pythonPackages.buildPythonApplication rec { owner = "svsdval"; repo = pname; rev = version; - sha256 = "1jc50zimc64ilc1as3dyh16lsygwqyvi381mw8si8m9j3pw6may4"; + sha256 = "0x9b8hwl325gd6v9i60yh95gbn49nydpwyfqs92mbq8vvvq7x8fk"; }; propagatedBuildInputs = with pythonPackages; [ opencv3_ midiutil pygame pyopengl ]; -- cgit 1.4.1 From 2632156cf592bbdce7d54b6e2de7af7e2c14035b Mon Sep 17 00:00:00 2001 From: gnidorah Date: Sat, 26 Oct 2019 04:21:04 +0300 Subject: phodav: 2.2 -> 2.3 --- pkgs/tools/networking/phodav/default.nix | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkgs/tools/networking/phodav/default.nix b/pkgs/tools/networking/phodav/default.nix index 320e7614c7c..0d7b30ae152 100644 --- a/pkgs/tools/networking/phodav/default.nix +++ b/pkgs/tools/networking/phodav/default.nix @@ -1,20 +1,24 @@ { stdenv, fetchurl -, intltool, pkgconfig, glib, libsoup }: +, pkgconfig, libsoup, meson, ninja }: let - version = "2.2"; + version = "2.3"; in stdenv.mkDerivation rec { pname = "phodav"; inherit version; src = fetchurl { url = "http://ftp.gnome.org/pub/GNOME/sources/phodav/${version}/${pname}-${version}.tar.xz"; - sha256 = "1hap0lncbcmivnflh0fbx7y58ry78p9wgj7z03r64ic0kvf0a0q8"; + sha256 = "0ndy5qva6bq7vhk06jq2d4nr5fp98xsdwypg42vjz91h9ii1xxkf"; }; - buildInputs = [ intltool glib libsoup ]; + mesonFlags = [ + "-Davahi=disabled" + "-Dsystemd=disabled" + "-Dgtk_doc=disabled" + ]; - nativeBuildInputs = [ pkgconfig ]; + nativeBuildInputs = [ libsoup pkgconfig meson ninja ]; meta = with stdenv.lib; { description = "WebDav server implementation and library using libsoup"; -- cgit 1.4.1 From f7c032ee008ea0762b46817fb132a1cbe5db4bce Mon Sep 17 00:00:00 2001 From: gnidorah Date: Sat, 26 Oct 2019 11:46:05 +0300 Subject: pythonPackages.pykde4: fix url Became incorrect after #66585 --- pkgs/development/python-modules/pykde4/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/pykde4/default.nix b/pkgs/development/python-modules/pykde4/default.nix index d2c66c8cd2c..5be43a412e5 100644 --- a/pkgs/development/python-modules/pykde4/default.nix +++ b/pkgs/development/python-modules/pykde4/default.nix @@ -19,7 +19,7 @@ in stdenv.mkDerivation rec { pname = "pykde4"; src = fetchurl { - url = "mirror://kde/stable/${version}/src/${pname}-${version}-${version}.tar.xz"; + url = "mirror://kde/stable/${version}/src/${pname}-${version}.tar.xz"; sha256 = "1z40gnkyjlv6ds3cmpzvv99394rhmydr6rxx7qj33m83xnsxgfbz"; }; -- cgit 1.4.1 From 34647cf35b256ea6bb55fc739a3c46ad4c9604ad Mon Sep 17 00:00:00 2001 From: gnidorah Date: Sat, 26 Oct 2019 12:40:13 +0300 Subject: kmsxx: 2018-10-23 -> 2019-10-28 --- pkgs/development/libraries/kmsxx/default.nix | 14 +++++++------- pkgs/top-level/all-packages.nix | 4 +--- pkgs/top-level/python-packages.nix | 5 +++-- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/pkgs/development/libraries/kmsxx/default.nix b/pkgs/development/libraries/kmsxx/default.nix index 71e88559dee..70058db4c0a 100644 --- a/pkgs/development/libraries/kmsxx/default.nix +++ b/pkgs/development/libraries/kmsxx/default.nix @@ -1,25 +1,25 @@ -{ stdenv, fetchFromGitHub, cmake, pkgconfig, libdrm, python }: +{ stdenv, fetchFromGitHub, cmake, pkgconfig, libdrm +, withPython ? false, python }: stdenv.mkDerivation { pname = "kmsxx"; - version = "2018-10-23"; + version = "2019-10-28"; src = fetchFromGitHub { owner = "tomba"; repo = "kmsxx"; fetchSubmodules = true; - rev = "c0093c91f0fa2fd6a5b9d1b206a6f44dcd55bfb5"; - sha256 = "03rv92r938nxb4k4gwcvxy76jnhxdx6x60b58jws83285hd9rgkf"; + rev = "d29da28c7f2a0212d834136fe64fb8ca96a0a235"; + sha256 = "0r94qjyy3s36s32s1xkzij0g2pfwigmyrshw8ni2xli7mg87g1zm"; }; enableParallelBuilding = true; + cmakeFlags = stdenv.lib.optional (!withPython) "-DKMSXX_ENABLE_PYTHON=OFF"; + nativeBuildInputs = [ cmake pkgconfig ]; buildInputs = [ libdrm python ]; - pythonPath = [ ]; - passthru.python = python; - meta = with stdenv.lib; { description = "C++11 library, utilities and python bindings for Linux kernel mode setting"; homepage = https://github.com/tomba/kmsxx; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ec5759cd98f..cf87c9b994b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15923,9 +15923,7 @@ in kmscube = callPackage ../os-specific/linux/kmscube { }; - kmsxx = callPackage ../development/libraries/kmsxx { - stdenv = gcc6Stdenv; - }; + kmsxx = callPackage ../development/libraries/kmsxx { }; latencytop = callPackage ../os-specific/linux/latencytop { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index c4151922d62..1c38b47576a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4322,12 +4322,13 @@ in { kmapper = callPackage ../development/python-modules/kmapper { }; - kmsxx = (callPackage ../development/libraries/kmsxx { + kmsxx = toPythonModule ((callPackage ../development/libraries/kmsxx { inherit (pkgs.kmsxx) stdenv; inherit (pkgs) pkgconfig; + withPython = true; }).overrideAttrs (oldAttrs: { name = "${python.libPrefix}-${pkgs.kmsxx.name}"; - }); + })); precis-i18n = callPackage ../development/python-modules/precis-i18n { }; -- cgit 1.4.1 From 791f835c2ee4ee0ff7b3ade2b53151d78088e59e Mon Sep 17 00:00:00 2001 From: gnidorah Date: Sat, 26 Oct 2019 13:36:51 +0300 Subject: vk-messenger: 4.0.1 -> 4.5.2 --- .../networking/instant-messengers/vk-messenger/default.nix | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix b/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix index 03bf3b3bbdd..983b8509dc2 100644 --- a/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix +++ b/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix @@ -1,19 +1,19 @@ { stdenv, fetchurl, rpmextract, autoPatchelfHook -, xorg, gtk2, gnome2, nss, alsaLib, udev, libnotify }: +, xorg, gtk3, gnome2, nss, alsaLib, udev, libnotify }: let - version = "4.0.1"; + version = "4.5.2"; in stdenv.mkDerivation { pname = "vk-messenger"; inherit version; src = { i686-linux = fetchurl { url = "https://desktop.userapi.com/rpm/master/vk-${version}.i686.rpm"; - sha256 = "0mgppa9qnhix64zp40dc05yc9klsc7qiwcgw7pwq2wm7m3fz3nm8"; + sha256 = "11xsdmvd2diq3m61si87x2c08nap0vakcypm90wjmdjwayg3fdlw"; }; x86_64-linux = fetchurl { url = "https://desktop.userapi.com/rpm/master/vk-${version}.x86_64.rpm"; - sha256 = "0ra0y4dfx4gfa1r3lm6v42j7c9pf7a8vh12kxv3wkg3pvijwgdsm"; + sha256 = "0j65d6mwj6rxczi0p9fsr6jh37jxw3a3h6w67xwgdvibb7lf3gbb"; }; }.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}"); @@ -21,7 +21,7 @@ in stdenv.mkDerivation { buildInputs = (with xorg; [ libXdamage libXtst libXScrnSaver libxkbfile ]) ++ [ - gtk2 gnome2.GConf nss alsaLib + gtk3 nss alsaLib ]; runtimeDependencies = [ udev.lib libnotify ]; @@ -49,6 +49,5 @@ in stdenv.mkDerivation { license = licenses.unfree; maintainers = [ maintainers.gnidorah ]; platforms = ["i686-linux" "x86_64-linux"]; - hydraPlatforms = []; }; } -- cgit 1.4.1 From afb4d447ba4fa56f12d8c2e742dcbb1ebbaec7c2 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Sat, 26 Oct 2019 14:16:47 +0300 Subject: vkquake: 1.01.0 -> 1.02.1 --- pkgs/games/quakespasm/vulkan.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkgs/games/quakespasm/vulkan.nix b/pkgs/games/quakespasm/vulkan.nix index 114f862888d..e8678253b40 100644 --- a/pkgs/games/quakespasm/vulkan.nix +++ b/pkgs/games/quakespasm/vulkan.nix @@ -2,14 +2,13 @@ stdenv.mkDerivation rec { pname = "vkquake"; - majorVersion = "1.01"; - version = "${majorVersion}.0"; + version = "1.02.1"; src = fetchFromGitHub { owner = "Novum"; repo = "vkQuake"; rev = version; - sha256 = "1iwin8j5kbyrknbkhjgpy8nmm7pxqzr0daa9gn7p38qhg2mh0a39"; + sha256 = "0fk9jqql0crnf0s12cxnris392ajciyw1zbz17qgs5hdyivp9vdx"; }; sourceRoot = "source/Quake"; -- cgit 1.4.1 From 1c3407f954f55b63142271295fa864aec9b857c5 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Sat, 26 Oct 2019 15:12:37 +0300 Subject: openmw-tes3mp: 2019-06-09 -> 2019-07-01 --- pkgs/games/openmw/tes3mp.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/games/openmw/tes3mp.nix b/pkgs/games/openmw/tes3mp.nix index 2bc34a6ec9d..4bbddfbb1df 100644 --- a/pkgs/games/openmw/tes3mp.nix +++ b/pkgs/games/openmw/tes3mp.nix @@ -24,20 +24,20 @@ let coreScripts = fetchFromGitHub { owner = "TES3MP"; repo = "CoreScripts"; - # usually latest master - rev = "71e15fa3b1d5131b6607ba1589f41c06672ce376"; - sha256 = "1kwii8rpsxjmz4dh06wb0qaix17hq5s1qsvysv6n6209vlclfxjg"; + # usually latest in stable branch (e.g. 0.7.0) + rev = "506146f5b2297242b713a030a589966156df1e8e"; + sha256 = "0p4a4bgigyxfmaczf3jnz6ik4hgvdaafzc4614hbmbm1qbn8wpf9"; }; in openmw.overrideAttrs (oldAttrs: rec { - version = "2019-06-09"; + version = "2019-07-01"; name = "openmw-tes3mp-${version}"; src = fetchFromGitHub { owner = "TES3MP"; repo = "openmw-tes3mp"; # usually latest in stable branch (e.g. 0.7.0) - rev = "01804af100785bc2c162d568258d9662012627a3"; - sha256 = "0j99v9vvmic0bqw3y4550k1dy058lwvs9s9qcjmxh1wkqkvrpdnp"; + rev = "94a9292cc676a037496f98877b62da80cde2ac47"; + sha256 = "0kc45xs33rsxac1aba248slzvljx90ybdk4ag9jwjjmsjmy7w2w5"; }; nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ makeWrapper ]; -- cgit 1.4.1 From b505f81181bf56eb37a01bc1d8d1532361fdfa16 Mon Sep 17 00:00:00 2001 From: gnidorah Date: Sat, 26 Oct 2019 15:20:36 +0300 Subject: openjk: 2019-06-24 -> 2019-10-25 --- pkgs/games/openjk/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/games/openjk/default.nix b/pkgs/games/openjk/default.nix index 9109d2667c3..fd12c901583 100644 --- a/pkgs/games/openjk/default.nix +++ b/pkgs/games/openjk/default.nix @@ -21,13 +21,13 @@ let }; in stdenv.mkDerivation { pname = "OpenJK"; - version = "2019-06-24"; + version = "2019-10-25"; src = fetchFromGitHub { owner = "JACoders"; repo = "OpenJK"; - rev = "e8b5c135eccb05ddae67e00ff944001f373fddd4"; - sha256 = "0qkbn59swhnb0anvy9gq945rkb58j6axlcfgb7sff0m4swqw2394"; + rev = "e9116155052ef6a22135a1806a10e959aa9a1e00"; + sha256 = "1f1bz1g2ksw4m3rnbh6fdsawcrpbfjdmq1gs2xj0q450yb840l3z"; }; dontAddPrefix = true; -- cgit 1.4.1 From 0f68bf333ccf7b19252c30cb6a772b55c6857baf Mon Sep 17 00:00:00 2001 From: gnidorah Date: Fri, 1 Nov 2019 23:35:59 +0300 Subject: openxray: 510 -> 558 --- pkgs/games/openxray/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/games/openxray/default.nix b/pkgs/games/openxray/default.nix index d8ff0dd8d9e..9960d94a247 100644 --- a/pkgs/games/openxray/default.nix +++ b/pkgs/games/openxray/default.nix @@ -4,13 +4,13 @@ stdenv.mkDerivation rec { pname = "OpenXRay"; - version = "510"; + version = "558"; src = fetchFromGitHub { owner = "OpenXRay"; repo = "xray-16"; rev = version; - sha256 = "0q142l6xvgnd6ycncqld69izxclynqrs73aq89pfy1r1nzhd60ay"; + sha256 = "1wnkx9g0ww4f5pljrb0wzs054jzkig1i5hlz1p509rfvnhc50afp"; fetchSubmodules = true; }; -- cgit 1.4.1 From b7dc9e131f5855d254717e2b2b054400b20aef8a Mon Sep 17 00:00:00 2001 From: gnidorah Date: Mon, 4 Nov 2019 10:31:51 +0300 Subject: pakcs: 2.1.2 -> 2.2.0 --- pkgs/development/compilers/pakcs/curry-base.nix | 2 +- pkgs/development/compilers/pakcs/curry-frontend.nix | 18 ++++++++++-------- pkgs/development/compilers/pakcs/default.nix | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/pkgs/development/compilers/pakcs/curry-base.nix b/pkgs/development/compilers/pakcs/curry-base.nix index 2d98699d283..b34a2146383 100644 --- a/pkgs/development/compilers/pakcs/curry-base.nix +++ b/pkgs/development/compilers/pakcs/curry-base.nix @@ -3,7 +3,7 @@ }: mkDerivation { pname = "curry-base"; - version = "1.0.0"; + version = "1.1.0"; src = ./.; libraryHaskellDepends = [ base containers directory extra filepath mtl parsec pretty time diff --git a/pkgs/development/compilers/pakcs/curry-frontend.nix b/pkgs/development/compilers/pakcs/curry-frontend.nix index d94bef9ec7f..b169578c7c3 100644 --- a/pkgs/development/compilers/pakcs/curry-frontend.nix +++ b/pkgs/development/compilers/pakcs/curry-frontend.nix @@ -1,21 +1,23 @@ -{ mkDerivation, base, Cabal, containers, curry-base, directory -, extra, filepath, mtl, network-uri, pretty, process, set-extra -, stdenv, transformers +{ mkDerivation, base, bytestring, Cabal, containers, curry-base +, directory, extra, file-embed, filepath, mtl, network-uri, pretty +, process, set-extra, stdenv, template-haskell, transformers }: mkDerivation { pname = "curry-frontend"; - version = "1.0.2"; + version = "1.0.4"; src = ./.; isLibrary = true; isExecutable = true; enableSeparateDataOutput = true; libraryHaskellDepends = [ - base containers curry-base directory extra filepath mtl network-uri - pretty process set-extra transformers + base bytestring containers curry-base directory extra file-embed + filepath mtl network-uri pretty process set-extra template-haskell + transformers ]; executableHaskellDepends = [ - base containers curry-base directory extra filepath mtl network-uri - pretty process set-extra transformers + base bytestring containers curry-base directory extra file-embed + filepath mtl network-uri pretty process set-extra template-haskell + transformers ]; testHaskellDepends = [ base Cabal curry-base filepath ]; homepage = "http://curry-language.org"; diff --git a/pkgs/development/compilers/pakcs/default.nix b/pkgs/development/compilers/pakcs/default.nix index 0b46bd1f24d..94b6daa888e 100644 --- a/pkgs/development/compilers/pakcs/default.nix +++ b/pkgs/development/compilers/pakcs/default.nix @@ -4,13 +4,13 @@ , curl, git, unzip, gnutar, coreutils, sqlite }: let - name = "pakcs-2.1.2"; + name = "pakcs-2.2.0"; # Don't switch to development release without a reason, because its # source updates without version bump. Prefer current release instead. src = fetchurl { url = "https://www.informatik.uni-kiel.de/~pakcs/download/${name}-src.tar.gz"; - sha256 = "0i0nprli3knc7zlp5qkqkpiq3ny36v52hnvgph376l3ajjds7wf6"; + sha256 = "0c0a6cp9lwha5i90kv9ya2zi1ggnvkf4gwjfzbffgwwa77s2wz2l"; }; curry-frontend = (haskellPackages.override { -- cgit 1.4.1 From 5842a29159bf2b8287993706f17b3c424b47be0c Mon Sep 17 00:00:00 2001 From: Jonathan Ringer Date: Fri, 1 Nov 2019 09:33:21 -0700 Subject: python3Packages.solo-python: 0.0.15 -> 0.0.18 --- .../python-modules/solo-python/default.nix | 25 +++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/pkgs/development/python-modules/solo-python/default.nix b/pkgs/development/python-modules/solo-python/default.nix index 7b2b578eed8..829874f25ad 100644 --- a/pkgs/development/python-modules/solo-python/default.nix +++ b/pkgs/development/python-modules/solo-python/default.nix @@ -1,21 +1,22 @@ -{ lib, buildPythonPackage, fetchFromGitHub +{ lib, buildPythonPackage, fetchFromGitHub, pythonOlder , click, ecdsa, fido2, intelhex, pyserial, pyusb, requests}: buildPythonPackage rec { pname = "solo-python"; - version = "0.0.15"; + version = "0.0.18"; format = "flit"; + disabled = pythonOlder "3.6"; # only python>=3.6 is supported src = fetchFromGitHub { owner = "solokeys"; repo = pname; rev = version; - sha256 = "14na9s65hxzx141bdv0j7rx1wi3cv85jzpdivsq1rwp6hdhiazr1"; + sha256 = "01mgppjvxlr93vrgz7bzisghpg1vqyaj4cg5wngk0h499iyx4d9q"; }; - # TODO: remove ASAP + # replaced pinned fido, with unrestricted fido version patchPhase = '' - substituteInPlace pyproject.toml --replace "fido2 == 0.7.0" "fido2 >= 0.7.0" + sed -i '/fido2/c\"fido2",' pyproject.toml ''; propagatedBuildInputs = [ @@ -28,6 +29,20 @@ requests ]; + # allow for writable directory for darwin + preBuild = '' + export HOME=$TMPDIR + ''; + + # repo doesn't contain tests, ensure imports aren't broken + pythonImportsCheck = [ + "solo" + "solo.cli" + "solo.commands" + "solo.fido2" + "solo.operations" + ]; + meta = with lib; { description = "Python tool and library for SoloKeys"; homepage = "https://github.com/solokeys/solo-python"; -- cgit 1.4.1 From 1a3f284b9cfcceeb69e1f6d98106a6620f8a0389 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Mon, 4 Nov 2019 18:19:23 +0100 Subject: gnome3.devhelp: clean up * Format with nixpkgs-format * Quote URL * Fix license --- pkgs/desktops/gnome-3/devtools/devhelp/default.nix | 46 ++++++++++++++++++---- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/pkgs/desktops/gnome-3/devtools/devhelp/default.nix b/pkgs/desktops/gnome-3/devtools/devhelp/default.nix index 8d731d829b2..0bc99515b34 100644 --- a/pkgs/desktops/gnome-3/devtools/devhelp/default.nix +++ b/pkgs/desktops/gnome-3/devtools/devhelp/default.nix @@ -1,6 +1,21 @@ -{ stdenv, fetchurl, meson, ninja, pkgconfig, gnome3, gtk3, wrapGAppsHook -, glib, amtk, appstream-glib, gobject-introspection, python3 -, webkitgtk, gettext, itstool, gsettings-desktop-schemas }: +{ stdenv +, fetchurl +, meson +, ninja +, pkgconfig +, gnome3 +, gtk3 +, wrapGAppsHook +, glib +, amtk +, appstream-glib +, gobject-introspection +, python3 +, webkitgtk +, gettext +, itstool +, gsettings-desktop-schemas +}: stdenv.mkDerivation rec { pname = "devhelp"; @@ -11,10 +26,25 @@ stdenv.mkDerivation rec { sha256 = "0zpmn6fgkgiayvn4diia5df0s6s7dqrdnp3nrvpavsmgn0vhb4pg"; }; - nativeBuildInputs = [ meson ninja pkgconfig gettext itstool wrapGAppsHook appstream-glib gobject-introspection python3 ]; + nativeBuildInputs = [ + meson + ninja + pkgconfig + gettext + itstool + wrapGAppsHook + appstream-glib + gobject-introspection + python3 + ]; + buildInputs = [ - glib gtk3 webkitgtk amtk - gnome3.adwaita-icon-theme gsettings-desktop-schemas + glib + gtk3 + webkitgtk + amtk + gnome3.adwaita-icon-theme + gsettings-desktop-schemas ]; doCheck = true; @@ -33,8 +63,8 @@ stdenv.mkDerivation rec { meta = with stdenv.lib; { description = "API documentation browser for GNOME"; - homepage = https://wiki.gnome.org/Apps/Devhelp; - license = licenses.gpl2; + homepage = "https://wiki.gnome.org/Apps/Devhelp"; + license = licenses.gpl3Plus; maintainers = gnome3.maintainers; platforms = platforms.linux; }; -- cgit 1.4.1 From 6160907f85f2e014e885599b0e19d5f302577783 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Mon, 4 Nov 2019 18:20:42 +0100 Subject: gnome3.devhelp: fix blank pages --- pkgs/desktops/gnome-3/devtools/devhelp/default.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/desktops/gnome-3/devtools/devhelp/default.nix b/pkgs/desktops/gnome-3/devtools/devhelp/default.nix index 0bc99515b34..080a332d7df 100644 --- a/pkgs/desktops/gnome-3/devtools/devhelp/default.nix +++ b/pkgs/desktops/gnome-3/devtools/devhelp/default.nix @@ -15,6 +15,7 @@ , gettext , itstool , gsettings-desktop-schemas +, shared-mime-info }: stdenv.mkDerivation rec { @@ -54,6 +55,14 @@ stdenv.mkDerivation rec { patchShebangs meson_post_install.py ''; + preFixup = '' + gappsWrapperArgs+=( + # Fix pages being blank + # https://gitlab.gnome.org/GNOME/devhelp/issues/14 + --prefix XDG_DATA_DIRS : "${shared-mime-info}/share" + ) + ''; + passthru = { updateScript = gnome3.updateScript { packageName = "devhelp"; -- cgit 1.4.1 From c4821a82f880df90987ff56a4e781fc42ed914b5 Mon Sep 17 00:00:00 2001 From: Renaud Date: Mon, 4 Nov 2019 19:41:24 +0100 Subject: theharvester: 3.0.6 -> 3.1 + use buildPythonApplication now that upstream ships a setup.py (#72748) --- pkgs/tools/security/theharvester/default.nix | 44 +++++++++++++--------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/pkgs/tools/security/theharvester/default.nix b/pkgs/tools/security/theharvester/default.nix index 4a1e92e6104..4153ddafbf4 100644 --- a/pkgs/tools/security/theharvester/default.nix +++ b/pkgs/tools/security/theharvester/default.nix @@ -1,40 +1,36 @@ -{ stdenv, fetchFromGitHub, makeWrapper, python3Packages }: +{ lib, fetchFromGitHub, python3 }: -stdenv.mkDerivation rec { +python3.pkgs.buildPythonApplication rec { pname = "theHarvester"; - version = "3.0.6"; + version = "3.1"; src = fetchFromGitHub { owner = "laramies"; repo = pname; - rev = version; - sha256 = "0f33a7sfb5ih21yp1wspb03fxsls1m14yizgrw0srfirm2a6aa0c"; + rev = "V${version}"; + sha256 = "0lxzxfa9wbzim50d2jmd27i57szd0grm1dfayhnym86jn01qpvn3"; }; - nativeBuildInputs = [ makeWrapper ]; + propagatedBuildInputs = with python3.pkgs; [ + aiodns beautifulsoup4 dns grequests netaddr + plotly pyyaml requests retrying shodan texttable + ]; - # add dependencies - propagatedBuildInputs = with python3Packages; [ requests beautifulsoup4 plotly ]; + checkInputs = [ python3.pkgs.pytest ]; - installPhase = '' - # create dirs - mkdir -p $out/share/${pname} $out/bin + checkPhase = "runHook preCheck ; pytest tests/test_myparser.py ; runHook postCheck"; + # We don't run other tests (discovery modules) because they require network access - # move project code - mv * $out/share/${pname}/ - - # make project runnable - chmod +x $out/share/${pname}/theHarvester.py - ln -s $out/share/${pname}/theHarvester.py $out/bin - - wrapProgram "$out/bin/theHarvester.py" --prefix PYTHONPATH : $out/share/${pname}:$PYTHONPATH - ''; - - meta = with stdenv.lib; { + meta = with lib; { description = "Gather E-mails, subdomains and names from different public sources"; + longDescription = '' + theHarvester is a very simple, yet effective tool designed to be used in the early + stages of a penetration test. Use it for open source intelligence gathering and + helping to determine an entity's external threat landscape on the internet. The tool + gathers emails, names, subdomains, IPs, and URLs using multiple public data sources. + ''; homepage = "https://github.com/laramies/theHarvester"; - platforms = platforms.all; - maintainers = with maintainers; [ treemo ]; + maintainers = with maintainers; [ c0bw3b treemo ]; license = licenses.gpl2; }; } -- cgit 1.4.1 From 527dd6e833be4aff9874f296ae1bd5bd9ea3d27a Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Mon, 4 Nov 2019 21:10:41 +0100 Subject: mm-common: 0.9.12 → 1.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://download.gnome.org/sources/mm-common/1.0/mm-common-1.0.0.news --- pkgs/development/libraries/mm-common/default.nix | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/mm-common/default.nix b/pkgs/development/libraries/mm-common/default.nix index f590653df6b..9a789a58cca 100644 --- a/pkgs/development/libraries/mm-common/default.nix +++ b/pkgs/development/libraries/mm-common/default.nix @@ -1,14 +1,26 @@ -{ stdenv, fetchurl, gnome3 }: +{ stdenv +, fetchurl +, gnome3 +, meson +, python3 +, ninja +}: stdenv.mkDerivation rec { pname = "mm-common"; - version = "0.9.12"; + version = "1.0.0"; src = fetchurl { url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz"; - sha256 = "02vwgv404b56wxy0gnm9xq9fvzgn9dhfqcy2hhl78ljv3v7drzyf"; + sha256 = "1m4w33da9f4rx2d6kdj3ix3kl0gn16ml82v2mdn4hljr3q29nzdr"; }; + nativeBuildInputs = [ + meson + python3 + ninja + ]; + passthru = { updateScript = gnome3.updateScript { packageName = pname; @@ -25,7 +37,7 @@ stdenv.mkDerivation rec { control repository. An installation of mm-common is not required for building tarball releases, unless configured to use maintainer-mode. ''; - homepage = https://www.gtkmm.org; + homepage = "https://www.gtkmm.org"; license = licenses.gpl2Plus; maintainers = gnome3.maintainers; platforms = platforms.linux; -- cgit 1.4.1 From 3a28fefe7d4e7d842304ff4eee42c76593194b0a Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Fri, 6 Sep 2019 09:25:22 +0200 Subject: nixos/test: Port test driver to python Thanks @blitz and @jtraue for help with implementing machine methods --- nixos/lib/test-driver/test-driver.py | 762 +++++++++++++++++++++++++++++++++++ nixos/lib/testing-python.nix | 279 +++++++++++++ nixos/tests/make-test-python.nix | 9 + 3 files changed, 1050 insertions(+) create mode 100644 nixos/lib/test-driver/test-driver.py create mode 100644 nixos/lib/testing-python.nix create mode 100644 nixos/tests/make-test-python.nix diff --git a/nixos/lib/test-driver/test-driver.py b/nixos/lib/test-driver/test-driver.py new file mode 100644 index 00000000000..16d4b0b907d --- /dev/null +++ b/nixos/lib/test-driver/test-driver.py @@ -0,0 +1,762 @@ +#! /somewhere/python3 + +from contextlib import contextmanager +from xml.sax.saxutils import XMLGenerator +import _thread +import atexit +import os +import pty +import queue +import re +import shutil +import socket +import subprocess +import sys +import tempfile +import time +import unicodedata + +CHAR_TO_KEY = { + "A": "shift-a", + "N": "shift-n", + "-": "0x0C", + "_": "shift-0x0C", + "B": "shift-b", + "O": "shift-o", + "=": "0x0D", + "+": "shift-0x0D", + "C": "shift-c", + "P": "shift-p", + "[": "0x1A", + "{": "shift-0x1A", + "D": "shift-d", + "Q": "shift-q", + "]": "0x1B", + "}": "shift-0x1B", + "E": "shift-e", + "R": "shift-r", + ";": "0x27", + ":": "shift-0x27", + "F": "shift-f", + "S": "shift-s", + "'": "0x28", + '"': "shift-0x28", + "G": "shift-g", + "T": "shift-t", + "`": "0x29", + "~": "shift-0x29", + "H": "shift-h", + "U": "shift-u", + "\\": "0x2B", + "|": "shift-0x2B", + "I": "shift-i", + "V": "shift-v", + ",": "0x33", + "<": "shift-0x33", + "J": "shift-j", + "W": "shift-w", + ".": "0x34", + ">": "shift-0x34", + "K": "shift-k", + "X": "shift-x", + "/": "0x35", + "?": "shift-0x35", + "L": "shift-l", + "Y": "shift-y", + " ": "spc", + "M": "shift-m", + "Z": "shift-z", + "\n": "ret", + "!": "shift-0x02", + "@": "shift-0x03", + "#": "shift-0x04", + "$": "shift-0x05", + "%": "shift-0x06", + "^": "shift-0x07", + "&": "shift-0x08", + "*": "shift-0x09", + "(": "shift-0x0A", + ")": "shift-0x0B", +} + + +def eprint(*args, **kwargs): + print(*args, file=sys.stderr, **kwargs) + + +def create_vlan(vlan_nr): + global log + log.log("starting VDE switch for network {}".format(vlan_nr)) + vde_socket = os.path.abspath("./vde{}.ctl".format(vlan_nr)) + pty_master, pty_slave = pty.openpty() + vde_process = subprocess.Popen( + ["vde_switch", "-s", vde_socket, "--dirmode", "0777"], + bufsize=1, + stdin=pty_slave, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + shell=False, + ) + fd = os.fdopen(pty_master, "w") + fd.write("version\n") + # TODO: perl version checks if this can be read from + # an if not, dies. we could hang here forever. Fix it. + vde_process.stdout.readline() + if not os.path.exists(os.path.join(vde_socket, "ctl")): + raise Exception("cannot start vde_switch") + + return (vlan_nr, vde_socket, vde_process, fd) + + +def retry(fn): + """Call the given function repeatedly, with 1 second intervals, + until it returns True or a timeout is reached. + """ + + for _ in range(900): + if fn(False): + return + time.sleep(1) + + if not fn(True): + raise Exception("action timed out") + + +class Logger: + def __init__(self): + self.logfile = os.environ.get("LOGFILE", "/dev/null") + self.logfile_handle = open(self.logfile, "wb") + self.xml = XMLGenerator(self.logfile_handle, encoding="utf-8") + self.queue = queue.Queue(1000) + + self.xml.startDocument() + self.xml.startElement("logfile", attrs={}) + + def close(self): + self.xml.endElement("logfile") + self.xml.endDocument() + self.logfile_handle.close() + + def sanitise(self, message): + return "".join(ch for ch in message if unicodedata.category(ch)[0] != "C") + + def maybe_prefix(self, message, attributes): + if "machine" in attributes: + return "{}: {}".format(attributes["machine"], message) + return message + + def log_line(self, message, attributes): + self.xml.startElement("line", attributes) + self.xml.characters(message) + self.xml.endElement("line") + + def log(self, message, attributes={}): + eprint(self.maybe_prefix(message, attributes)) + self.drain_log_queue() + self.log_line(message, attributes) + + def enqueue(self, message): + self.queue.put(message) + + def drain_log_queue(self): + try: + while True: + item = self.queue.get_nowait() + attributes = {"machine": item["machine"], "type": "serial"} + self.log_line(self.sanitise(item["msg"]), attributes) + except queue.Empty: + pass + + @contextmanager + def nested(self, message, attributes={}): + eprint(self.maybe_prefix(message, attributes)) + + self.xml.startElement("nest", attrs={}) + self.xml.startElement("head", attributes) + self.xml.characters(message) + self.xml.endElement("head") + + tic = time.time() + self.drain_log_queue() + yield + self.drain_log_queue() + toc = time.time() + self.log("({:.2f} seconds)".format(toc - tic)) + + self.xml.endElement("nest") + + +class Machine: + def __init__(self, args): + if "name" in args: + self.name = args["name"] + else: + self.name = "machine" + try: + cmd = args["startCommand"] + self.name = re.search("run-(.+)-vm$", cmd).group(1) + except KeyError: + pass + except AttributeError: + pass + + self.script = args.get("startCommand", self.create_startcommand(args)) + + tmp_dir = os.environ.get("TMPDIR", tempfile.gettempdir()) + + def create_dir(name): + path = os.path.join(tmp_dir, name) + os.makedirs(path, mode=0o700, exist_ok=True) + return path + + self.state_dir = create_dir("vm-state-{}".format(self.name)) + self.shared_dir = create_dir("xchg-shared") + + self.booted = False + self.connected = False + self.pid = None + self.socket = None + self.monitor = None + self.logger = args["log"] + self.allow_reboot = args.get("allowReboot", False) + + @staticmethod + def create_startcommand(args): + net_backend = "-netdev user,id=net0" + net_frontend = "-device virtio-net-pci,netdev=net0" + + if "netBackendArgs" in args: + net_backend += "," + args["netBackendArgs"] + + if "netFrontendArgs" in args: + net_frontend += "," + args["netFrontendArgs"] + + start_command = ( + "qemu-kvm -m 384 " + net_backend + " " + net_frontend + " $QEMU_OPTS " + ) + + if "hda" in args: + hda_path = os.path.abspath(args["hda"]) + if args.get("hdaInterface", "") == "scsi": + start_command += ( + "-drive id=hda,file=" + + hda_path + + ",werror=report,if=none " + + "-device scsi-hd,drive=hda " + ) + else: + start_command += ( + "-drive file=" + + hda_path + + ",if=" + + args["hdaInterface"] + + ",werror=report " + ) + + if "cdrom" in args: + start_command += "-cdrom " + args["cdrom"] + " " + + if "usb" in args: + start_command += ( + "-device piix3-usb-uhci -drive " + + "id=usbdisk,file=" + + args["usb"] + + ",if=none,readonly " + + "-device usb-storage,drive=usbdisk " + ) + if "bios" in args: + start_command += "-bios " + args["bios"] + " " + + start_command += args.get("qemuFlags", "") + + return start_command + + def is_up(self): + return self.booted and self.connected + + def log(self, msg): + self.logger.log(msg, {"machine": self.name}) + + def nested(self, msg, attrs={}): + my_attrs = {"machine": self.name} + my_attrs.update(attrs) + return self.logger.nested(msg, my_attrs) + + def wait_for_monitor_prompt(self): + while True: + answer = self.monitor.recv(1024).decode() + if answer.endswith("(qemu) "): + return answer + + def send_monitor_command(self, command): + message = ("{}\n".format(command)).encode() + self.log("sending monitor command: {}".format(command)) + self.monitor.send(message) + return self.wait_for_monitor_prompt() + + def wait_for_unit(self, unit, user=None): + while True: + info = self.get_unit_info(unit, user) + state = info["ActiveState"] + if state == "failed": + raise Exception('unit "{}" reached state "{}"'.format(unit, state)) + + if state == "inactive": + status, jobs = self.systemctl("list-jobs --full 2>&1", user) + if "No jobs" in jobs: + info = self.get_unit_info(unit) + if info["ActiveState"] == state: + raise Exception( + ( + 'unit "{}" is inactive and there ' "are no pending jobs" + ).format(unit) + ) + if state == "active": + return True + + def get_unit_info(self, unit, user=None): + status, lines = self.systemctl('--no-pager show "{}"'.format(unit), user) + if status != 0: + return None + + line_pattern = re.compile(r"^([^=]+)=(.*)$") + + def tuple_from_line(line): + match = line_pattern.match(line) + return match[1], match[2] + + return dict( + tuple_from_line(line) + for line in lines.split("\n") + if line_pattern.match(line) + ) + + def systemctl(self, q, user=None): + if user is not None: + q = q.replace("'", "\\'") + return self.execute( + ( + "su -l {} -c " + "$'XDG_RUNTIME_DIR=/run/user/`id -u` " + "systemctl --user {}'" + ).format(user, q) + ) + return self.execute("systemctl {}".format(q)) + + def execute(self, command): + self.connect() + + out_command = "( {} ); echo '|!EOF' $?\n".format(command) + self.shell.send(out_command.encode()) + + output = "" + status_code_pattern = re.compile(r"(.*)\|\!EOF\s+(\d+)") + + while True: + chunk = self.shell.recv(4096).decode() + match = status_code_pattern.match(chunk) + if match: + output += match[1] + status_code = int(match[2]) + return (status_code, output) + output += chunk + + def succeed(self, *commands): + """Execute each command and check that it succeeds.""" + for command in commands: + with self.nested("must succeed: {}".format(command)): + status, output = self.execute(command) + if status != 0: + self.log("output: {}".format(output)) + raise Exception( + "command `{}` failed (exit code {})".format(command, status) + ) + return output + + def fail(self, *commands): + """Execute each command and check that it fails.""" + for command in commands: + with self.nested("must fail: {}".format(command)): + status, output = self.execute(command) + if status == 0: + raise Exception( + "command `{}` unexpectedly succeeded".format(command) + ) + + def wait_until_succeeds(self, command): + with self.nested("waiting for success: {}".format(command)): + while True: + status, output = self.execute(command) + if status == 0: + return output + + def wait_until_fails(self, command): + with self.nested("waiting for failure: {}".format(command)): + while True: + status, output = self.execute(command) + if status != 0: + return output + + def wait_for_shutdown(self): + if not self.booted: + return + + with self.nested("waiting for the VM to power off"): + sys.stdout.flush() + self.process.wait() + + self.pid = None + self.booted = False + self.connected = False + + def get_tty_text(self, tty): + status, output = self.execute( + "fold -w$(stty -F /dev/tty{0} size | " + "awk '{{print $2}}') /dev/vcs{0}".format(tty) + ) + return output + + def wait_until_tty_matches(self, tty, regexp): + matcher = re.compile(regexp) + with self.nested("waiting for {} to appear on tty {}".format(regexp, tty)): + while True: + text = self.get_tty_text(tty) + if len(matcher.findall(text)) > 0: + return True + + def send_chars(self, chars): + with self.nested("sending keys ‘{}‘".format(chars)): + for char in chars: + self.send_key(char) + + def wait_for_file(self, filename): + with self.nested("waiting for file ‘{}‘".format(filename)): + while True: + status, _ = self.execute("test -e {}".format(filename)) + if status == 0: + return True + + def wait_for_open_port(self, port): + def port_is_open(_): + status, _ = self.execute("nc -z localhost {}".format(port)) + return status == 0 + + with self.nested("waiting for TCP port {}".format(port)): + retry(port_is_open) + + def wait_for_closed_port(self, port): + def port_is_closed(_): + status, _ = self.execute("nc -z localhost {}".format(port)) + return status != 0 + + retry(port_is_closed) + + def start_job(self, jobname, user=None): + return self.systemctl("start {}".format(jobname), user) + + def stop_job(self, jobname, user=None): + return self.systemctl("stop {}".format(jobname), user) + + def wait_for_job(self, jobname): + return self.wait_for_unit(jobname) + + def connect(self): + if self.connected: + return + + with self.nested("waiting for the VM to finish booting"): + self.start() + + tic = time.time() + self.shell.recv(1024) + # TODO: Timeout + toc = time.time() + + self.log("connected to guest root shell") + self.log("(connecting took {:.2f} seconds)".format(toc - tic)) + self.connected = True + + def screenshot(self, filename): + out_dir = os.environ.get("out", os.getcwd()) + word_pattern = re.compile(r"^\w+$") + if word_pattern.match(filename): + filename = os.path.join(out_dir, "{}.png".format(filename)) + tmp = "{}.ppm".format(filename) + + with self.nested( + "making screenshot {}".format(filename), + {"image": os.path.basename(filename)}, + ): + self.send_monitor_command("screendump {}".format(tmp)) + ret = subprocess.run("pnmtopng {} > {}".format(tmp, filename), shell=True) + os.unlink(tmp) + if ret.returncode != 0: + raise Exception("Cannot convert screenshot") + + def get_screen_text(self): + if shutil.which("tesseract") is None: + raise Exception("get_screen_text used but enableOCR is false") + + magick_args = ( + "-filter Catrom -density 72 -resample 300 " + + "-contrast -normalize -despeckle -type grayscale " + + "-sharpen 1 -posterize 3 -negate -gamma 100 " + + "-blur 1x65535" + ) + + tess_args = "-c debug_file=/dev/null --psm 11 --oem 2" + + with self.nested("performing optical character recognition"): + with tempfile.NamedTemporaryFile() as tmpin: + self.send_monitor_command("screendump {}".format(tmpin.name)) + + cmd = "convert {} {} tiff:- | tesseract - - {}".format( + magick_args, tmpin.name, tess_args + ) + ret = subprocess.run(cmd, shell=True, capture_output=True) + if ret.returncode != 0: + raise Exception( + "OCR failed with exit code {}".format(ret.returncode) + ) + + return ret.stdout.decode("utf-8") + + def wait_for_text(self, regex): + def screen_matches(last): + text = self.get_screen_text() + m = re.search(regex, text) + + if last and not m: + self.log("Last OCR attempt failed. Text was: {}".format(text)) + + return m + + with self.nested("waiting for {} to appear on screen".format(regex)): + retry(screen_matches) + + def send_key(self, key): + key = CHAR_TO_KEY.get(key, key) + self.send_monitor_command("sendkey {}".format(key)) + + def start(self): + if self.booted: + return + + self.log("starting vm") + + def create_socket(path): + if os.path.exists(path): + os.unlink(path) + s = socket.socket(family=socket.AF_UNIX, type=socket.SOCK_STREAM) + s.bind(path) + s.listen(1) + return s + + monitor_path = os.path.join(self.state_dir, "monitor") + self.monitor_socket = create_socket(monitor_path) + + shell_path = os.path.join(self.state_dir, "shell") + self.shell_socket = create_socket(shell_path) + + qemu_options = ( + " ".join( + [ + "" if self.allow_reboot else "-no-reboot", + "-monitor unix:{}".format(monitor_path), + "-chardev socket,id=shell,path={}".format(shell_path), + "-device virtio-serial", + "-device virtconsole,chardev=shell", + "-device virtio-rng-pci", + "-serial stdio" if "DISPLAY" in os.environ else "-nographic", + ] + ) + + " " + + os.environ.get("QEMU_OPTS", "") + ) + + environment = { + "QEMU_OPTS": qemu_options, + "SHARED_DIR": self.shared_dir, + "USE_TMPDIR": "1", + } + environment.update(dict(os.environ)) + + self.process = subprocess.Popen( + self.script, + bufsize=1, + stdin=subprocess.DEVNULL, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + shell=False, + cwd=self.state_dir, + env=environment, + ) + self.monitor, _ = self.monitor_socket.accept() + self.shell, _ = self.shell_socket.accept() + + def process_serial_output(): + for line in self.process.stdout: + line = line.decode().replace("\r", "").rstrip() + eprint("{} # {}".format(self.name, line)) + self.logger.enqueue({"msg": line, "machine": self.name}) + + _thread.start_new_thread(process_serial_output, ()) + + self.wait_for_monitor_prompt() + + self.pid = self.process.pid + self.booted = True + + self.log("QEMU running (pid {})".format(self.pid)) + + def shutdown(self): + if self.booted: + return + + self.shell.send("poweroff\n".encode()) + self.wait_for_shutdown() + + def crash(self): + if self.booted: + return + + self.log("forced crash") + self.send_monitor_command("quit") + self.wait_for_shutdown() + + def wait_for_x(self): + """Wait until it is possible to connect to the X server. Note that + testing the existence of /tmp/.X11-unix/X0 is insufficient. + """ + with self.nested("waiting for the X11 server"): + while True: + cmd = ( + "journalctl -b SYSLOG_IDENTIFIER=systemd | " + + 'grep "Reached target Current graphical"' + ) + status, _ = self.execute(cmd) + if status != 0: + continue + status, _ = self.execute("[ -e /tmp/.X11-unix/X0 ]") + if status == 0: + return + + def sleep(self, secs): + time.sleep(secs) + + def block(self): + """Make the machine unreachable by shutting down eth1 (the multicast + interface used to talk to the other VMs). We keep eth0 up so that + the test driver can continue to talk to the machine. + """ + self.send_monitor_command("set_link virtio-net-pci.1 off") + + def unblock(self): + """Make the machine reachable. + """ + self.send_monitor_command("set_link virtio-net-pci.1 on") + + +def create_machine(args): + global log + args["log"] = log + args["redirectSerial"] = os.environ.get("USE_SERIAL", "0") == "1" + return Machine(args) + + +def start_all(): + with log.nested("starting all VMs"): + for machine in machines: + machine.start() + + +def join_all(): + with log.nested("waiting for all VMs to finish"): + for machine in machines: + machine.wait_for_shutdown() + + +def test_script(): + exec(os.environ["testScript"]) + + +def run_tests(): + tests = os.environ.get("tests", None) + if tests is not None: + with log.nested("running the VM test script"): + try: + exec(tests) + except Exception as e: + eprint("error: {}".format(str(e))) + sys.exit(1) + else: + while True: + try: + value = input("> ") + exec(value) + except EOFError: + break + + # TODO: Collect coverage data + + for machine in machines: + if machine.is_up(): + machine.execute("sync") + + if nr_tests != 0: + log.log("{} out of {} tests succeeded".format(nr_succeeded, nr_tests)) + + +@contextmanager +def subtest(name): + global nr_tests + global nr_succeeded + + with log.nested(name): + nr_tests += 1 + try: + yield + nr_succeeded += 1 + return True + except Exception as e: + log.log("error: {}".format(str(e))) + + return False + + +if __name__ == "__main__": + global log + log = Logger() + + vlan_nrs = list(dict.fromkeys(os.environ["VLANS"].split())) + vde_sockets = [create_vlan(v) for v in vlan_nrs] + for nr, vde_socket, _, _ in vde_sockets: + os.environ["QEMU_VDE_SOCKET_{}".format(nr)] = vde_socket + + vm_scripts = sys.argv[1:] + machines = [create_machine({"startCommand": s}) for s in vm_scripts] + machine_eval = [ + "{0} = machines[{1}]".format(m.name, idx) for idx, m in enumerate(machines) + ] + exec("\n".join(machine_eval)) + + nr_tests = 0 + nr_succeeded = 0 + + @atexit.register + def clean_up(): + with log.nested("cleaning up"): + for machine in machines: + if machine.pid is None: + continue + log.log("killing {} (pid {})".format(machine.name, machine.pid)) + machine.process.kill() + + for _, _, process, _ in vde_sockets: + process.kill() + log.close() + + tic = time.time() + run_tests() + toc = time.time() + print("test script finished in {:.2f}s".format(toc - tic)) diff --git a/nixos/lib/testing-python.nix b/nixos/lib/testing-python.nix new file mode 100644 index 00000000000..5240cba116f --- /dev/null +++ b/nixos/lib/testing-python.nix @@ -0,0 +1,279 @@ +{ system +, pkgs ? import ../.. { inherit system config; } + # Use a minimal kernel? +, minimal ? false + # Ignored +, config ? {} + # Modules to add to each VM +, extraConfigurations ? [] }: + +with import ./build-vms.nix { inherit system pkgs minimal extraConfigurations; }; +with pkgs; + +let + jquery-ui = callPackage ./testing/jquery-ui.nix { }; + jquery = callPackage ./testing/jquery.nix { }; + +in rec { + + inherit pkgs; + + + testDriver = let + testDriverScript = ./test-driver/test-driver.py; + in stdenv.mkDerivation { + name = "nixos-test-driver"; + + nativeBuildInputs = [ makeWrapper ]; + buildInputs = [ python3 ]; + checkInputs = with python3Packages; [ pylint black ]; + + dontUnpack = true; + + preferLocalBuild = true; + + doCheck = true; + checkPhase = '' + pylint --errors-only ${testDriverScript} + black --check --diff ${testDriverScript} + ''; + + installPhase = + '' + mkdir -p $out/bin + cp ${testDriverScript} $out/bin/nixos-test-driver + chmod u+x $out/bin/nixos-test-driver + # TODO: copy user script part into this file (append) + + wrapProgram $out/bin/nixos-test-driver \ + --prefix PATH : "${lib.makeBinPath [ qemu_test vde2 netpbm coreutils ]}" \ + ''; + }; + + + # Run an automated test suite in the given virtual network. + # `driver' is the script that runs the network. + runTests = driver: + stdenv.mkDerivation { + name = "vm-test-run-${driver.testName}"; + + requiredSystemFeatures = [ "kvm" "nixos-test" ]; + + buildInputs = [ libxslt ]; + + buildCommand = + '' + mkdir -p $out/nix-support + + LOGFILE=$out/log.xml tests='exec(os.environ["testScript"])' ${driver}/bin/nixos-test-driver + + # Generate a pretty-printed log. + xsltproc --output $out/log.html ${./test-driver/log2html.xsl} $out/log.xml + ln -s ${./test-driver/logfile.css} $out/logfile.css + ln -s ${./test-driver/treebits.js} $out/treebits.js + ln -s ${jquery}/js/jquery.min.js $out/ + ln -s ${jquery}/js/jquery.js $out/ + ln -s ${jquery-ui}/js/jquery-ui.min.js $out/ + ln -s ${jquery-ui}/js/jquery-ui.js $out/ + + touch $out/nix-support/hydra-build-products + echo "report testlog $out log.html" >> $out/nix-support/hydra-build-products + + for i in */xchg/coverage-data; do + mkdir -p $out/coverage-data + mv $i $out/coverage-data/$(dirname $(dirname $i)) + done + ''; + }; + + + makeTest = + { testScript + , makeCoverageReport ? false + , enableOCR ? false + , name ? "unnamed" + , ... + } @ t: + + let + # A standard store path to the vm monitor is built like this: + # /tmp/nix-build-vm-test-run-$name.drv-0/vm-state-machine/monitor + # The max filename length of a unix domain socket is 108 bytes. + # This means $name can at most be 50 bytes long. + maxTestNameLen = 50; + testNameLen = builtins.stringLength name; + + testDriverName = with builtins; + if testNameLen > maxTestNameLen then + abort ("The name of the test '${name}' must not be longer than ${toString maxTestNameLen} " + + "it's currently ${toString testNameLen} characters long.") + else + "nixos-test-driver-${name}"; + + nodes = buildVirtualNetwork ( + t.nodes or (if t ? machine then { machine = t.machine; } else { })); + + testScript' = + # Call the test script with the computed nodes. + if lib.isFunction testScript + then testScript { inherit nodes; } + else testScript; + + vlans = map (m: m.config.virtualisation.vlans) (lib.attrValues nodes); + + vms = map (m: m.config.system.build.vm) (lib.attrValues nodes); + + ocrProg = tesseract4.override { enableLanguages = [ "eng" ]; }; + + imagemagick_tiff = imagemagick_light.override { inherit libtiff; }; + + # Generate onvenience wrappers for running the test driver + # interactively with the specified network, and for starting the + # VMs from the command line. + driver = runCommand testDriverName + { buildInputs = [ makeWrapper]; + testScript = testScript'; + preferLocalBuild = true; + testName = name; + } + '' + mkdir -p $out/bin + + echo -n "$testScript" > $out/test-script + ${python3Packages.black}/bin/black --check --diff $out/test-script + + ln -s ${testDriver}/bin/nixos-test-driver $out/bin/ + vms=($(for i in ${toString vms}; do echo $i/bin/run-*-vm; done)) + wrapProgram $out/bin/nixos-test-driver \ + --add-flags "''${vms[*]}" \ + ${lib.optionalString enableOCR + "--prefix PATH : '${ocrProg}/bin:${imagemagick_tiff}/bin'"} \ + --run "export testScript=\"\$(cat $out/test-script)\"" \ + --set VLANS '${toString vlans}' + ln -s ${testDriver}/bin/nixos-test-driver $out/bin/nixos-run-vms + wrapProgram $out/bin/nixos-run-vms \ + --add-flags "''${vms[*]}" \ + ${lib.optionalString enableOCR "--prefix PATH : '${ocrProg}/bin'"} \ + --set tests 'start_all(); join_all();' \ + --set VLANS '${toString vlans}' \ + ${lib.optionalString (builtins.length vms == 1) "--set USE_SERIAL 1"} + ''; # " + + passMeta = drv: drv // lib.optionalAttrs (t ? meta) { + meta = (drv.meta or {}) // t.meta; + }; + + test = passMeta (runTests driver); + report = passMeta (releaseTools.gcovReport { coverageRuns = [ test ]; }); + + nodeNames = builtins.attrNames nodes; + invalidNodeNames = lib.filter + (node: builtins.match "^[A-z_][A-z0-9_]+$" node == null) nodeNames; + + in + if lib.length invalidNodeNames > 0 then + throw '' + Cannot create machines out of (${lib.concatStringsSep ", " invalidNodeNames})! + All machines are referenced as perl variables in the testing framework which will break the + script when special characters are used. + + Please stick to alphanumeric chars and underscores as separation. + '' + else + (if makeCoverageReport then report else test) // { + inherit nodes driver test; + }; + + runInMachine = + { drv + , machine + , preBuild ? "" + , postBuild ? "" + , ... # ??? + }: + let + vm = buildVM { } + [ machine + { key = "run-in-machine"; + networking.hostName = "client"; + nix.readOnlyStore = false; + virtualisation.writableStore = false; + } + ]; + + buildrunner = writeText "vm-build" '' + source $1 + + ${coreutils}/bin/mkdir -p $TMPDIR + cd $TMPDIR + + exec $origBuilder $origArgs + ''; + + testScript = '' + startAll; + $client->waitForUnit("multi-user.target"); + ${preBuild} + $client->succeed("env -i ${bash}/bin/bash ${buildrunner} /tmp/xchg/saved-env >&2"); + ${postBuild} + $client->succeed("sync"); # flush all data before pulling the plug + ''; + + vmRunCommand = writeText "vm-run" '' + xchg=vm-state-client/xchg + ${coreutils}/bin/mkdir $out + ${coreutils}/bin/mkdir -p $xchg + + for i in $passAsFile; do + i2=''${i}Path + _basename=$(${coreutils}/bin/basename ''${!i2}) + ${coreutils}/bin/cp ''${!i2} $xchg/$_basename + eval $i2=/tmp/xchg/$_basename + ${coreutils}/bin/ls -la $xchg + done + + unset i i2 _basename + export | ${gnugrep}/bin/grep -v '^xchg=' > $xchg/saved-env + unset xchg + + export tests='${testScript}' + ${testDriver}/bin/nixos-test-driver ${vm.config.system.build.vm}/bin/run-*-vm + ''; # */ + + in + lib.overrideDerivation drv (attrs: { + requiredSystemFeatures = [ "kvm" ]; + builder = "${bash}/bin/sh"; + args = ["-e" vmRunCommand]; + origArgs = attrs.args; + origBuilder = attrs.builder; + }); + + + runInMachineWithX = { require ? [], ... } @ args: + let + client = + { ... }: + { + inherit require; + virtualisation.memorySize = 1024; + services.xserver.enable = true; + services.xserver.displayManager.slim.enable = false; + services.xserver.displayManager.auto.enable = true; + services.xserver.windowManager.default = "icewm"; + services.xserver.windowManager.icewm.enable = true; + services.xserver.desktopManager.default = "none"; + }; + in + runInMachine ({ + machine = client; + preBuild = + '' + $client->waitForX; + ''; + } // args); + + + simpleTest = as: (makeTest as).test; + +} diff --git a/nixos/tests/make-test-python.nix b/nixos/tests/make-test-python.nix new file mode 100644 index 00000000000..89897fe7e61 --- /dev/null +++ b/nixos/tests/make-test-python.nix @@ -0,0 +1,9 @@ +f: { + system ? builtins.currentSystem, + pkgs ? import ../.. { inherit system; config = {}; }, + ... +} @ args: + +with import ../lib/testing-python.nix { inherit system pkgs; }; + +makeTest (if pkgs.lib.isFunction f then f (args // { inherit pkgs; inherit (pkgs) lib; }) else f) -- cgit 1.4.1 From ac97edf013368c10c0c0978780d89b60bc520900 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Mon, 4 Nov 2019 22:49:45 +0100 Subject: nixos/test: use ptpython as repl --- nixos/lib/test-driver/test-driver.py | 8 ++------ nixos/lib/testing-python.nix | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/nixos/lib/test-driver/test-driver.py b/nixos/lib/test-driver/test-driver.py index 16d4b0b907d..45b7e229a5c 100644 --- a/nixos/lib/test-driver/test-driver.py +++ b/nixos/lib/test-driver/test-driver.py @@ -15,6 +15,7 @@ import sys import tempfile import time import unicodedata +import ptpython.repl CHAR_TO_KEY = { "A": "shift-a", @@ -690,12 +691,7 @@ def run_tests(): eprint("error: {}".format(str(e))) sys.exit(1) else: - while True: - try: - value = input("> ") - exec(value) - except EOFError: - break + ptpython.repl.embed(locals(), globals()) # TODO: Collect coverage data diff --git a/nixos/lib/testing-python.nix b/nixos/lib/testing-python.nix index 5240cba116f..21f6172e967 100644 --- a/nixos/lib/testing-python.nix +++ b/nixos/lib/testing-python.nix @@ -25,7 +25,7 @@ in rec { name = "nixos-test-driver"; nativeBuildInputs = [ makeWrapper ]; - buildInputs = [ python3 ]; + buildInputs = [ (python3.withPackages (p: [ p.ptpython ])) ]; checkInputs = with python3Packages; [ pylint black ]; dontUnpack = true; -- cgit 1.4.1 From 7d19c5aaa76a43f8c63c665c09601a6ad3cdbc01 Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Mon, 4 Nov 2019 23:50:50 +0100 Subject: nixos/test: Pythonify documentation --- .../running-nixos-tests-interactively.xml | 12 +-- .../doc/manual/development/writing-nixos-tests.xml | 87 +++++++++++----------- 2 files changed, 50 insertions(+), 49 deletions(-) diff --git a/nixos/doc/manual/development/running-nixos-tests-interactively.xml b/nixos/doc/manual/development/running-nixos-tests-interactively.xml index e390d62fde2..ea3ba0e4bf7 100644 --- a/nixos/doc/manual/development/running-nixos-tests-interactively.xml +++ b/nixos/doc/manual/development/running-nixos-tests-interactively.xml @@ -14,14 +14,14 @@ starting VDE switch for network 1 > - You can then take any Perl statement, e.g. + You can then take any Python statement, e.g. -> startAll -> testScript -> $machine->succeed("touch /tmp/foo") -> print($machine->succeed("pwd")) # Show stdout of command +> start_all() +> test_script() +> machine.succeed("touch /tmp/foo") +> print(machine.succeed("pwd")) # Show stdout of command - The function testScript executes the entire test script + The function test_script executes the entire test script and drops you back into the test driver command line upon its completion. This allows you to inspect the state of the VMs after the test (e.g. to debug the test script). diff --git a/nixos/doc/manual/development/writing-nixos-tests.xml b/nixos/doc/manual/development/writing-nixos-tests.xml index 6be2d0a4d23..24efd2e3273 100644 --- a/nixos/doc/manual/development/writing-nixos-tests.xml +++ b/nixos/doc/manual/development/writing-nixos-tests.xml @@ -8,7 +8,7 @@ A NixOS test is a Nix expression that has the following structure: -import ./make-test.nix { +import ./make-test-python.nix { # Either the configuration of a single machine: machine = @@ -27,11 +27,11 @@ import ./make-test.nix { testScript = '' - Perl code… + Python code… ''; } - The attribute testScript is a bit of Perl code that + The attribute testScript is a bit of Python code that executes the test (described below). During the test, it will start one or more virtual machines, the configuration of which is described by the attribute machine (if you need only one machine in your @@ -96,26 +96,27 @@ xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualis - The test script is a sequence of Perl statements that perform various + The test script is a sequence of Python statements that perform various actions, such as starting VMs, executing commands in the VMs, and so on. Each virtual machine is represented as an object stored in the variable - $name, where - name is the identifier of the machine (which is - just machine if you didn’t specify multiple machines - using the nodes attribute). For instance, the following - starts the machine, waits until it has finished booting, then executes a - command and checks that the output is more-or-less correct: + name if this is also the + identifier of the machine in the declarative config. + If you didn't specify multiple machines using the nodes + attribute, it is just machine. + The following example starts the machine, waits until it has finished booting, + then executes a command and checks that the output is more-or-less correct: -$machine->start; -$machine->waitForUnit("default.target"); -$machine->succeed("uname") =~ /Linux/ or die; +machine.start() +machine.wait_for_unit("default.target") +if not "Linux" in machine.succeed("uname"): + raise Exception("Wrong OS") The first line is actually unnecessary; machines are implicitly started when - you first execute an action on them (such as waitForUnit + you first execute an action on them (such as wait_for_unit or succeed). If you have multiple machines, you can speed up the test by starting them in parallel: -startAll; +start_all() @@ -187,7 +188,7 @@ startAll; - getScreenText + get_screen_text @@ -204,7 +205,7 @@ startAll; - sendMonitorCommand + send_monitor_command @@ -215,23 +216,23 @@ startAll; - sendKeys + send_keys Simulate pressing keys on the virtual keyboard, e.g., - sendKeys("ctrl-alt-delete"). + send_keys("ctrl-alt-delete"). - sendChars + send_chars Simulate typing a sequence of characters on the virtual keyboard, e.g., - sendKeys("foobar\n") will type the string + send_keys("foobar\n") will type the string foobar followed by the Enter key. @@ -272,7 +273,7 @@ startAll; - waitUntilSucceeds + wait_until_succeeds @@ -282,7 +283,7 @@ startAll; - waitUntilFails + wait_until_fails @@ -292,7 +293,7 @@ startAll; - waitForUnit + wait_for_unit @@ -302,7 +303,7 @@ startAll; - waitForFile + wait_for_file @@ -312,7 +313,7 @@ startAll; - waitForOpenPort + wait_for_open_port @@ -323,7 +324,7 @@ startAll; - waitForClosedPort + wait_for_closed_port @@ -333,7 +334,7 @@ startAll; - waitForX + wait_for_x @@ -343,13 +344,13 @@ startAll; - waitForText + wait_for_text Wait until the supplied regular expressions matches the textual contents of the screen by using optical character recognition (see - getScreenText). + get_screen_text). @@ -361,23 +362,23 @@ startAll; - waitForWindow + wait_for_window Wait until an X11 window has appeared whose name matches the given - regular expression, e.g., waitForWindow(qr/Terminal/). + regular expression, e.g., wait_for_window("Terminal"). - copyFileFromHost + copy_file_from_host Copies a file from host to machine, e.g., - copyFileFromHost("myfile", "/etc/my/important/file"). + copy_file_from_host("myfile", "/etc/my/important/file"). The first argument is the file on the host. The file needs to be @@ -397,8 +398,8 @@ startAll; -$machine->systemctl("list-jobs --no-pager"); // runs `systemctl list-jobs --no-pager` -$machine->systemctl("list-jobs --no-pager", "any-user"); // spawns a shell for `any-user` and runs `systemctl --user list-jobs --no-pager` +machine.systemctl("list-jobs --no-pager") # runs `systemctl list-jobs --no-pager` +machine.systemctl("list-jobs --no-pager", "any-user") # spawns a shell for `any-user` and runs `systemctl --user list-jobs --no-pager` @@ -408,14 +409,14 @@ $machine->systemctl("list-jobs --no-pager", "any-user"); // spawns a shell for ` To test user units declared by systemd.user.services the - optional $user argument can be used: + optional user argument can be used: -$machine->start; -$machine->waitForX; -$machine->waitForUnit("xautolock.service", "x-session-user"); +machine.start() +machine.wait_for_x() +machine.wait_for_unit("xautolock.service", "x-session-user") - This applies to systemctl, getUnitInfo, - waitForUnit, startJob and - stopJob. + This applies to systemctl, get_unit_info, + wait_for_unit, start_job and + stop_job. -- cgit 1.4.1 From be48c5c5714146debbb13038d7c125fcba1b5e38 Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Tue, 10 Sep 2019 16:00:04 +0200 Subject: nixos/login: Port test to python --- nixos/tests/login.nix | 104 ++++++++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 59 deletions(-) diff --git a/nixos/tests/login.nix b/nixos/tests/login.nix index bd8ed23a7b8..d36c1a91be4 100644 --- a/nixos/tests/login.nix +++ b/nixos/tests/login.nix @@ -1,4 +1,4 @@ -import ./make-test.nix ({ pkgs, latestKernel ? false, ... }: +import ./make-test-python.nix ({ pkgs, latestKernel ? false, ... }: { name = "login"; @@ -12,62 +12,48 @@ import ./make-test.nix ({ pkgs, latestKernel ? false, ... }: sound.enable = true; # needed for the factl test, /dev/snd/* exists without them but udev doesn't care then }; - testScript = - '' - $machine->waitForUnit('multi-user.target'); - $machine->waitUntilSucceeds("pgrep -f 'agetty.*tty1'"); - $machine->screenshot("postboot"); - - subtest "create user", sub { - $machine->succeed("useradd -m alice"); - $machine->succeed("(echo foobar; echo foobar) | passwd alice"); - }; - - # Check whether switching VTs works. - subtest "virtual console switching", sub { - $machine->fail("pgrep -f 'agetty.*tty2'"); - $machine->sendKeys("alt-f2"); - $machine->waitUntilSucceeds("[ \$(fgconsole) = 2 ]"); - $machine->waitForUnit('getty@tty2.service'); - $machine->waitUntilSucceeds("pgrep -f 'agetty.*tty2'"); - }; - - # Log in as alice on a virtual console. - subtest "virtual console login", sub { - $machine->waitUntilTTYMatches(2, "login: "); - $machine->sendChars("alice\n"); - $machine->waitUntilTTYMatches(2, "login: alice"); - $machine->waitUntilSucceeds("pgrep login"); - $machine->waitUntilTTYMatches(2, "Password: "); - $machine->sendChars("foobar\n"); - $machine->waitUntilSucceeds("pgrep -u alice bash"); - $machine->sendChars("touch done\n"); - $machine->waitForFile("/home/alice/done"); - }; - - # Check whether systemd gives and removes device ownership as - # needed. - subtest "device permissions", sub { - $machine->succeed("getfacl -p /dev/snd/timer | grep -q alice"); - $machine->sendKeys("alt-f1"); - $machine->waitUntilSucceeds("[ \$(fgconsole) = 1 ]"); - $machine->fail("getfacl -p /dev/snd/timer | grep -q alice"); - $machine->succeed("chvt 2"); - $machine->waitUntilSucceeds("getfacl -p /dev/snd/timer | grep -q alice"); - }; - - # Log out. - subtest "virtual console logout", sub { - $machine->sendChars("exit\n"); - $machine->waitUntilFails("pgrep -u alice bash"); - $machine->screenshot("mingetty"); - }; - - # Check whether ctrl-alt-delete works. - subtest "ctrl-alt-delete", sub { - $machine->sendKeys("ctrl-alt-delete"); - $machine->waitForShutdown; - }; - ''; - + testScript = '' + machine.wait_for_unit("multi-user.target") + machine.wait_until_succeeds("pgrep -f 'agetty.*tty1'") + machine.screenshot("postboot") + + with subtest("create user"): + machine.succeed("useradd -m alice") + machine.succeed("(echo foobar; echo foobar) | passwd alice") + + with subtest("Check whether switching VTs works"): + machine.fail("pgrep -f 'agetty.*tty2'") + machine.send_key("alt-f2") + machine.wait_until_succeeds("[ $(fgconsole) = 2 ]") + machine.wait_for_unit("getty@tty2.service") + machine.wait_until_succeeds("pgrep -f 'agetty.*tty2'") + + with subtest("Log in as alice on a virtual console"): + machine.wait_until_tty_matches(2, "login: ") + machine.send_chars("alice\n") + machine.wait_until_tty_matches(2, "login: alice") + machine.wait_until_succeeds("pgrep login") + machine.wait_until_tty_matches(2, "Password: ") + machine.send_chars("foobar\n") + machine.wait_until_succeeds("pgrep -u alice bash") + machine.send_chars("touch done\n") + machine.wait_for_file("/home/alice/done") + + with subtest("Systemd gives and removes device ownership as needed"): + machine.succeed("getfacl /dev/snd/timer | grep -q alice") + machine.send_key("alt-f1") + machine.wait_until_succeeds("[ $(fgconsole) = 1 ]") + machine.fail("getfacl /dev/snd/timer | grep -q alice") + machine.succeed("chvt 2") + machine.wait_until_succeeds("getfacl /dev/snd/timer | grep -q alice") + + with subtest("Virtual console logout"): + machine.send_chars("exit\n") + machine.wait_until_fails("pgrep -u alice bash") + machine.screenshot("mingetty") + + with subtest("Check whether ctrl-alt-delete works"): + machine.send_key("ctrl-alt-delete") + machine.wait_for_shutdown() + ''; }) -- cgit 1.4.1 From 75d3e810d68418b27d3e888bafe5c033c11735c7 Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Tue, 10 Sep 2019 15:59:50 +0200 Subject: nixos/bittorrent: Port test to python --- nixos/tests/bittorrent.nix | 58 ++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/nixos/tests/bittorrent.nix b/nixos/tests/bittorrent.nix index 3b1169a1b7f..e5be652c711 100644 --- a/nixos/tests/bittorrent.nix +++ b/nixos/tests/bittorrent.nix @@ -6,7 +6,7 @@ # which only works if the first client successfully uses the UPnP-IGD # protocol to poke a hole in the NAT. -import ./make-test.nix ({ pkgs, ... }: +import ./make-test-python.nix ({ pkgs, ... }: let @@ -108,42 +108,56 @@ in testScript = { nodes, ... }: '' - startAll; + start_all() # Wait for network and miniupnpd. - $router->waitForUnit("network-online.target"); - $router->waitForUnit("miniupnpd"); + router.wait_for_unit("network-online.target") + router.wait_for_unit("miniupnpd") # Create the torrent. - $tracker->succeed("mkdir /tmp/data"); - $tracker->succeed("cp ${file} /tmp/data/test.tar.bz2"); - $tracker->succeed("transmission-create /tmp/data/test.tar.bz2 --private --tracker http://${externalTrackerAddress}:6969/announce --outfile /tmp/test.torrent"); - $tracker->succeed("chmod 644 /tmp/test.torrent"); + tracker.succeed("mkdir /tmp/data") + tracker.succeed( + "cp ${file} /tmp/data/test.tar.bz2" + ) + tracker.succeed( + "transmission-create /tmp/data/test.tar.bz2 --private --tracker http://${externalTrackerAddress}:6969/announce --outfile /tmp/test.torrent" + ) + tracker.succeed("chmod 644 /tmp/test.torrent") # Start the tracker. !!! use a less crappy tracker - $tracker->waitForUnit("network-online.target"); - $tracker->waitForUnit("opentracker.service"); - $tracker->waitForOpenPort(6969); + tracker.wait_for_unit("network-online.target") + tracker.wait_for_unit("opentracker.service") + tracker.wait_for_open_port(6969) # Start the initial seeder. - $tracker->succeed("transmission-remote --add /tmp/test.torrent --no-portmap --no-dht --download-dir /tmp/data"); + tracker.succeed( + "transmission-remote --add /tmp/test.torrent --no-portmap --no-dht --download-dir /tmp/data" + ) # Now we should be able to download from the client behind the NAT. - $tracker->waitForUnit("httpd"); - $client1->waitForUnit("network-online.target"); - $client1->succeed("transmission-remote --add http://${externalTrackerAddress}/test.torrent --download-dir /tmp >&2 &"); - $client1->waitForFile("/tmp/test.tar.bz2"); - $client1->succeed("cmp /tmp/test.tar.bz2 ${file}"); + tracker.wait_for_unit("httpd") + client1.wait_for_unit("network-online.target") + client1.succeed( + "transmission-remote --add http://${externalTrackerAddress}/test.torrent --download-dir /tmp >&2 &" + ) + client1.wait_for_file("/tmp/test.tar.bz2") + client1.succeed( + "cmp /tmp/test.tar.bz2 ${file}" + ) # Bring down the initial seeder. - # $tracker->stopJob("transmission"); + # tracker.stop_job("transmission") # Now download from the second client. This can only succeed if # the first client created a NAT hole in the router. - $client2->waitForUnit("network-online.target"); - $client2->succeed("transmission-remote --add http://${externalTrackerAddress}/test.torrent --no-portmap --no-dht --download-dir /tmp >&2 &"); - $client2->waitForFile("/tmp/test.tar.bz2"); - $client2->succeed("cmp /tmp/test.tar.bz2 ${file}"); + client2.wait_for_unit("network-online.target") + client2.succeed( + "transmission-remote --add http://${externalTrackerAddress}/test.torrent --no-portmap --no-dht --download-dir /tmp >&2 &" + ) + client2.wait_for_file("/tmp/test.tar.bz2") + client2.succeed( + "cmp /tmp/test.tar.bz2 ${file}" + ) ''; }) -- cgit 1.4.1 From 8eead58520f45f55cec40b7d7f0ca47e458356a8 Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Tue, 10 Sep 2019 19:55:35 +0200 Subject: nixos/postgres: Port test to python --- nixos/tests/postgresql.nix | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/nixos/tests/postgresql.nix b/nixos/tests/postgresql.nix index ae5d6d095ea..e71c3888288 100644 --- a/nixos/tests/postgresql.nix +++ b/nixos/tests/postgresql.nix @@ -3,7 +3,7 @@ pkgs ? import ../.. { inherit system config; } }: -with import ../lib/testing.nix { inherit system pkgs; }; +with import ../lib/testing-python.nix { inherit system pkgs; }; with pkgs.lib; let @@ -40,29 +40,33 @@ let backupName = if backup-all then "all" else "postgres"; backupService = if backup-all then "postgresqlBackup" else "postgresqlBackup-postgres"; in '' - sub check_count { - my ($select, $nlines) = @_; - return 'test $(sudo -u postgres psql postgres -tAc "' . $select . '"|wc -l) -eq ' . $nlines; - } + def check_count(statement, lines): + return 'test $(sudo -u postgres psql postgres -tAc "{}"|wc -l) -eq {}'.format( + statement, lines + ) + + + machine.start() + machine.wait_for_unit("postgresql") - $machine->start; - $machine->waitForUnit("postgresql"); # postgresql should be available just after unit start - $machine->succeed("cat ${test-sql} | sudo -u postgres psql"); - $machine->shutdown; # make sure that postgresql survive restart (bug #1735) - sleep(2); - $machine->start; - $machine->waitForUnit("postgresql"); - $machine->fail(check_count("SELECT * FROM sth;", 3)); - $machine->succeed(check_count("SELECT * FROM sth;", 5)); - $machine->fail(check_count("SELECT * FROM sth;", 4)); - $machine->succeed(check_count("SELECT xpath(\'/test/text()\', doc) FROM xmltest;", 1)); + machine.succeed( + "cat ${test-sql} | sudo -u postgres psql" + ) + machine.shutdown() # make sure that postgresql survive restart (bug #1735) + time.sleep(2) + machine.start() + machine.wait_for_unit("postgresql") + machine.fail(check_count("SELECT * FROM sth;", 3)) + machine.succeed(check_count("SELECT * FROM sth;", 5)) + machine.fail(check_count("SELECT * FROM sth;", 4)) + machine.succeed(check_count("SELECT xpath('/test/text()', doc) FROM xmltest;", 1)) # Check backup service - $machine->succeed("systemctl start ${backupService}.service"); - $machine->succeed("zcat /var/backup/postgresql/${backupName}.sql.gz | grep 'ok'"); - $machine->succeed("stat -c '%a' /var/backup/postgresql/${backupName}.sql.gz | grep 600"); - $machine->shutdown; + machine.succeed("systemctl start ${backupService}.service") + machine.succeed("zcat /var/backup/postgresql/${backupName}.sql.gz | grep 'ok'") + machine.succeed("stat -c '%a' /var/backup/postgresql/${backupName}.sql.gz | grep 600") + machine.shutdown() ''; }; -- cgit 1.4.1 From 9b33b5d38c3f2f93ff03e195b090ed1b25f6d51c Mon Sep 17 00:00:00 2001 From: Jana Traue Date: Sun, 27 Oct 2019 11:24:26 +0100 Subject: nixos/gitea: convert test to python --- nixos/tests/gitea.nix | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/nixos/tests/gitea.nix b/nixos/tests/gitea.nix index b8ab6dabc8c..ffbc07cfbb2 100644 --- a/nixos/tests/gitea.nix +++ b/nixos/tests/gitea.nix @@ -3,7 +3,7 @@ pkgs ? import ../.. { inherit system config; } }: -with import ../lib/testing.nix { inherit system pkgs; }; +with import ../lib/testing-python.nix { inherit system pkgs; }; with pkgs.lib; { @@ -18,11 +18,11 @@ with pkgs.lib; }; testScript = '' - startAll; + start_all() - $machine->waitForUnit('gitea.service'); - $machine->waitForOpenPort('3000'); - $machine->succeed("curl --fail http://localhost:3000/"); + machine.wait_for_unit("gitea.service") + machine.wait_for_open_port(3000) + machine.succeed("curl --fail http://localhost:3000/") ''; }; @@ -37,11 +37,11 @@ with pkgs.lib; }; testScript = '' - startAll; + start_all() - $machine->waitForUnit('gitea.service'); - $machine->waitForOpenPort('3000'); - $machine->succeed("curl --fail http://localhost:3000/"); + machine.wait_for_unit("gitea.service") + machine.wait_for_open_port(3000) + machine.succeed("curl --fail http://localhost:3000/") ''; }; @@ -56,12 +56,14 @@ with pkgs.lib; }; testScript = '' - startAll; + start_all() - $machine->waitForUnit('gitea.service'); - $machine->waitForOpenPort('3000'); - $machine->succeed("curl --fail http://localhost:3000/"); - $machine->succeed("curl --fail http://localhost:3000/user/sign_up | grep 'Registration is disabled. Please contact your site administrator.'"); + machine.wait_for_unit("gitea.service") + machine.wait_for_open_port(3000) + machine.succeed("curl --fail http://localhost:3000/") + machine.succeed( + "curl --fail http://localhost:3000/user/sign_up | grep 'Registration is disabled. Please contact your site administrator.'" + ) ''; }; } -- cgit 1.4.1 From 2af2d59fd611ae6ee3ed8e7867243bdd6945f020 Mon Sep 17 00:00:00 2001 From: Julian Stecklina Date: Sun, 27 Oct 2019 11:44:06 +0100 Subject: nixos/emacs-daemon: convert test to python --- nixos/tests/emacs-daemon.nix | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/nixos/tests/emacs-daemon.nix b/nixos/tests/emacs-daemon.nix index 3594e35e343..b89d9b1bde6 100644 --- a/nixos/tests/emacs-daemon.nix +++ b/nixos/tests/emacs-daemon.nix @@ -1,4 +1,4 @@ -import ./make-test.nix ({ pkgs, ...} : { +import ./make-test-python.nix ({ pkgs, ...} : { name = "emacs-daemon"; meta = with pkgs.stdenv.lib.maintainers; { maintainers = [ ]; @@ -21,25 +21,28 @@ import ./make-test.nix ({ pkgs, ...} : { environment.variables.TEST_SYSTEM_VARIABLE = "system variable"; }; - testScript = - '' - $machine->waitForUnit("multi-user.target"); + testScript = '' + machine.wait_for_unit("multi-user.target") # checks that the EDITOR environment variable is set - $machine->succeed("test \$(basename \"\$EDITOR\") = emacseditor"); + machine.succeed('test $(basename "$EDITOR") = emacseditor') # waits for the emacs service to be ready - $machine->waitUntilSucceeds("systemctl --user status emacs.service | grep 'Active: active'"); + machine.wait_until_succeeds( + "systemctl --user status emacs.service | grep 'Active: active'" + ) # connects to the daemon - $machine->succeed("emacsclient --create-frame \$EDITOR &"); + machine.succeed("emacsclient --create-frame $EDITOR &") # checks that Emacs shows the edited filename - $machine->waitForText("emacseditor"); + machine.wait_for_text("emacseditor") # makes sure environment variables are accessible from Emacs - $machine->succeed("emacsclient --eval '(getenv \"TEST_SYSTEM_VARIABLE\")'") =~ /system variable/ or die; + machine.succeed( + "emacsclient --eval '(getenv \"TEST_SYSTEM_VARIABLE\")' | grep -q 'system variable'" + ) - $machine->screenshot("emacsclient"); + machine.screenshot("emacsclient") ''; }) -- cgit 1.4.1 From 8b12f0ddcc02ed2fd5fa5fc8d465cae765668f04 Mon Sep 17 00:00:00 2001 From: Jana Traue Date: Sun, 27 Oct 2019 12:08:55 +0100 Subject: nixos/quake3: convert test to python --- nixos/tests/quake3.nix | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/nixos/tests/quake3.nix b/nixos/tests/quake3.nix index 4253ce4a867..4d57e219790 100644 --- a/nixos/tests/quake3.nix +++ b/nixos/tests/quake3.nix @@ -1,4 +1,4 @@ -import ./make-test.nix ({ pkgs, ...} : +import ./make-test-python.nix ({ pkgs, ...} : let @@ -59,37 +59,37 @@ rec { testScript = '' - startAll; + start_all() - $server->waitForUnit("quake3-server"); - $client1->waitForX; - $client2->waitForX; + server.wait_for_unit("quake3-server") + client1.wait_for_x() + client2.wait_for_x() - $client1->execute("quake3 +set r_fullscreen 0 +set name Foo +connect server &"); - $client2->execute("quake3 +set r_fullscreen 0 +set name Bar +connect server &"); + client1.execute("quake3 +set r_fullscreen 0 +set name Foo +connect server &") + client2.execute("quake3 +set r_fullscreen 0 +set name Bar +connect server &") - $server->waitUntilSucceeds("grep -q 'Foo.*entered the game' /tmp/log"); - $server->waitUntilSucceeds("grep -q 'Bar.*entered the game' /tmp/log"); + server.wait_until_succeeds("grep -q 'Foo.*entered the game' /tmp/log") + server.wait_until_succeeds("grep -q 'Bar.*entered the game' /tmp/log") - $server->sleep(10); # wait for a while to get a nice screenshot + server.sleep(10) # wait for a while to get a nice screenshot - $client1->block(); + client1.block() - $server->sleep(20); + server.sleep(20) - $client1->screenshot("screen1"); - $client2->screenshot("screen2"); + client1.screenshot("screen1") + client2.screenshot("screen2") - $client1->unblock(); + client1.unblock() - $server->sleep(10); + server.sleep(10) - $client1->screenshot("screen3"); - $client2->screenshot("screen4"); + client1.screenshot("screen3") + client2.screenshot("screen4") - $client1->shutdown(); - $client2->shutdown(); - $server->stopJob("quake3-server"); + client1.shutdown() + client2.shutdown() + server.stop_job("quake3-server") ''; }) -- cgit 1.4.1 From baec88a119949d5a4875a9063c0a199901c0415f Mon Sep 17 00:00:00 2001 From: Jana Traue Date: Sun, 27 Oct 2019 12:23:36 +0100 Subject: nixos/wireguard: convert default test to python --- nixos/tests/wireguard/default.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nixos/tests/wireguard/default.nix b/nixos/tests/wireguard/default.nix index b0797b96323..8206823a918 100644 --- a/nixos/tests/wireguard/default.nix +++ b/nixos/tests/wireguard/default.nix @@ -2,7 +2,7 @@ let wg-snakeoil-keys = import ./snakeoil-keys.nix; in -import ../make-test.nix ({ pkgs, ...} : { +import ../make-test-python.nix ({ pkgs, ...} : { name = "wireguard"; meta = with pkgs.stdenv.lib.maintainers; { maintainers = [ ma27 ]; @@ -86,12 +86,12 @@ import ../make-test.nix ({ pkgs, ...} : { }; testScript = '' - startAll; + start_all() - $peer0->waitForUnit("wireguard-wg0.service"); - $peer1->waitForUnit("wireguard-wg0.service"); + peer0.wait_for_unit("wireguard-wg0.service") + peer1.wait_for_unit("wireguard-wg0.service") - $peer1->succeed("ping -c5 fc00::1"); - $peer1->succeed("ping -c5 10.23.42.1") + peer1.succeed("ping -c5 fc00::1") + peer1.succeed("ping -c5 10.23.42.1") ''; }) -- cgit 1.4.1 From cdd4d4fadf0d2d0b8ce9c92fabf2a808d8a97e07 Mon Sep 17 00:00:00 2001 From: Jana Traue Date: Sun, 27 Oct 2019 12:35:15 +0100 Subject: nixos/wireguard: convert generated test to python --- nixos/tests/wireguard/generated.nix | 56 ++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/nixos/tests/wireguard/generated.nix b/nixos/tests/wireguard/generated.nix index 897feafe3ff..a29afd2d466 100644 --- a/nixos/tests/wireguard/generated.nix +++ b/nixos/tests/wireguard/generated.nix @@ -1,4 +1,4 @@ -import ../make-test.nix ({ pkgs, ...} : { +import ../make-test-python.nix ({ pkgs, ...} : { name = "wireguard-generated"; meta = with pkgs.stdenv.lib.maintainers; { maintainers = [ ma27 grahamc ]; @@ -28,30 +28,34 @@ import ../make-test.nix ({ pkgs, ...} : { }; testScript = '' - startAll; - - $peer1->waitForUnit("wireguard-wg0.service"); - $peer2->waitForUnit("wireguard-wg0.service"); - - my ($retcode, $peer1pubkey) = $peer1->execute("wg pubkey < /etc/wireguard/private"); - $peer1pubkey =~ s/\s+$//; - if ($retcode != 0) { - die "Could not read public key from peer1"; - } - - my ($retcode, $peer2pubkey) = $peer2->execute("wg pubkey < /etc/wireguard/private"); - $peer2pubkey =~ s/\s+$//; - if ($retcode != 0) { - die "Could not read public key from peer2"; - } - - $peer1->succeed("wg set wg0 peer $peer2pubkey allowed-ips 10.10.10.2/32 endpoint 192.168.1.2:12345 persistent-keepalive 1"); - $peer1->succeed("ip route replace 10.10.10.2/32 dev wg0 table main"); - - $peer2->succeed("wg set wg0 peer $peer1pubkey allowed-ips 10.10.10.1/32 endpoint 192.168.1.1:12345 persistent-keepalive 1"); - $peer2->succeed("ip route replace 10.10.10.1/32 dev wg0 table main"); - - $peer1->succeed("ping -c1 10.10.10.2"); - $peer2->succeed("ping -c1 10.10.10.1"); + start_all() + + peer1.wait_for_unit("wireguard-wg0.service") + peer2.wait_for_unit("wireguard-wg0.service") + + retcode, peer1pubkey = peer1.execute("wg pubkey < /etc/wireguard/private") + if retcode != 0: + raise Exception("Could not read public key from peer1") + + retcode, peer2pubkey = peer2.execute("wg pubkey < /etc/wireguard/private") + if retcode != 0: + raise Exception("Could not read public key from peer2") + + peer1.succeed( + "wg set wg0 peer {} allowed-ips 10.10.10.2/32 endpoint 192.168.1.2:12345 persistent-keepalive 1".format( + peer2pubkey.strip() + ) + ) + peer1.succeed("ip route replace 10.10.10.2/32 dev wg0 table main") + + peer2.succeed( + "wg set wg0 peer {} allowed-ips 10.10.10.1/32 endpoint 192.168.1.1:12345 persistent-keepalive 1".format( + peer1pubkey.strip() + ) + ) + peer2.succeed("ip route replace 10.10.10.1/32 dev wg0 table main") + + peer1.succeed("ping -c1 10.10.10.2") + peer2.succeed("ping -c1 10.10.10.1") ''; }) -- cgit 1.4.1 From d4a5ea5219c548287d0c4f253e9b43b159199244 Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Sun, 27 Oct 2019 13:22:46 +0100 Subject: nixos/boot: Port test to python --- nixos/tests/boot.nix | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/nixos/tests/boot.nix b/nixos/tests/boot.nix index 57d8006d7ac..c5040f3b31f 100644 --- a/nixos/tests/boot.nix +++ b/nixos/tests/boot.nix @@ -3,7 +3,7 @@ pkgs ? import ../.. { inherit system config; } }: -with import ../lib/testing.nix { inherit system pkgs; }; +with import ../lib/testing-python.nix { inherit system pkgs; }; with pkgs.lib; let @@ -17,11 +17,11 @@ let ]; }).config.system.build.isoImage; - perlAttrs = params: "{ ${concatStringsSep ", " (mapAttrsToList (name: param: "${name} => ${builtins.toJSON param}") params)} }"; + pythonDict = params: "\n {\n ${concatStringsSep ",\n " (mapAttrsToList (name: param: "\"${name}\": \"${param}\"") params)},\n }\n"; makeBootTest = name: extraConfig: let - machineConfig = perlAttrs ({ qemuFlags = "-m 768"; } // extraConfig); + machineConfig = pythonDict ({ qemuFlags = "-m 768"; } // extraConfig); in makeTest { inherit iso; @@ -29,16 +29,16 @@ let nodes = { }; testScript = '' - my $machine = createMachine(${machineConfig}); - $machine->start; - $machine->waitForUnit("multi-user.target"); - $machine->succeed("nix verify -r --no-trust /run/current-system"); + machine = create_machine(${machineConfig}) + machine.start() + machine.wait_for_unit("multi-user.target") + machine.succeed("nix verify -r --no-trust /run/current-system") - # Test whether the channel got installed correctly. - $machine->succeed("nix-instantiate --dry-run '' -A hello"); - $machine->succeed("nix-env --dry-run -iA nixos.procps"); + with subtest("Check whether the channel got installed correctly"): + machine.succeed("nix-instantiate --dry-run '' -A hello") + machine.succeed("nix-env --dry-run -iA nixos.procps") - $machine->shutdown; + machine.shutdown() ''; }; @@ -60,7 +60,7 @@ let config.system.build.netbootIpxeScript ]; }; - machineConfig = perlAttrs ({ + machineConfig = pythonDict ({ qemuFlags = "-boot order=n -m 2000"; netBackendArgs = "tftp=${ipxeBootDir},bootfile=netboot.ipxe"; } // extraConfig); @@ -68,12 +68,11 @@ let makeTest { name = "boot-netboot-" + name; nodes = { }; - testScript = - '' - my $machine = createMachine(${machineConfig}); - $machine->start; - $machine->waitForUnit("multi-user.target"); - $machine->shutdown; + testScript = '' + machine = create_machine(${machineConfig}) + machine.start() + machine.wait_for_unit("multi-user.target") + machine.shutdown() ''; }; in { -- cgit 1.4.1 From e5ee59626309a3af57fe1befbff75081f942f5e3 Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Sun, 27 Oct 2019 13:53:55 +0100 Subject: nixos/acme: Port test to python --- nixos/tests/acme.nix | 65 ++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/nixos/tests/acme.nix b/nixos/tests/acme.nix index 206d97849f0..6bd315ff1ea 100644 --- a/nixos/tests/acme.nix +++ b/nixos/tests/acme.nix @@ -1,6 +1,6 @@ let commonConfig = ./common/letsencrypt/common.nix; -in import ./make-test.nix { +in import ./make-test-python.nix { name = "acme"; nodes = rec { @@ -90,39 +90,44 @@ in import ./make-test.nix { newServerSystem = nodes.webserver2.config.system.build.toplevel; switchToNewServer = "${newServerSystem}/bin/switch-to-configuration test"; in - # Note, waitForUnit does not work for oneshot services that do not have RemainAfterExit=true, + # Note, wait_for_unit does not work for oneshot services that do not have RemainAfterExit=true, # this is because a oneshot goes from inactive => activating => inactive, and never # reaches the active state. To work around this, we create some mock target units which # get pulled in by the oneshot units. The target units linger after activation, and hence we # can use them to probe that a oneshot fired. It is a bit ugly, but it is the best we can do '' - $client->start; - $letsencrypt->start; - $acmeStandalone->start; - - $letsencrypt->waitForUnit("default.target"); - $letsencrypt->waitForUnit("pebble.service"); - - subtest "can request certificate with HTTPS-01 challenge", sub { - $acmeStandalone->waitForUnit("default.target"); - $acmeStandalone->succeed("systemctl start acme-standalone.com.service"); - $acmeStandalone->waitForUnit("acme-finished-standalone.com.target"); - }; - - $client->waitForUnit("default.target"); - - $client->succeed('curl https://acme-v02.api.letsencrypt.org:15000/roots/0 > /tmp/ca.crt'); - $client->succeed('curl https://acme-v02.api.letsencrypt.org:15000/intermediate-keys/0 >> /tmp/ca.crt'); - - subtest "Can request certificate for nginx service", sub { - $webserver->waitForUnit("acme-finished-a.example.com.target"); - $client->succeed('curl --cacert /tmp/ca.crt https://a.example.com/ | grep -qF "hello world"'); - }; - - subtest "Can add another certificate for nginx service", sub { - $webserver->succeed("/run/current-system/fine-tune/child-1/bin/switch-to-configuration test"); - $webserver->waitForUnit("acme-finished-b.example.com.target"); - $client->succeed('curl --cacert /tmp/ca.crt https://b.example.com/ | grep -qF "hello world"'); - }; + client.start() + letsencrypt.start() + acmeStandalone.start() + + letsencrypt.wait_for_unit("default.target") + letsencrypt.wait_for_unit("pebble.service") + + with subtest("can request certificate with HTTPS-01 challenge"): + acmeStandalone.wait_for_unit("default.target") + acmeStandalone.succeed("systemctl start acme-standalone.com.service") + acmeStandalone.wait_for_unit("acme-finished-standalone.com.target") + + client.wait_for_unit("default.target") + + client.succeed("curl https://acme-v02.api.letsencrypt.org:15000/roots/0 > /tmp/ca.crt") + client.succeed( + "curl https://acme-v02.api.letsencrypt.org:15000/intermediate-keys/0 >> /tmp/ca.crt" + ) + + with subtest("Can request certificate for nginx service"): + webserver.wait_for_unit("acme-finished-a.example.com.target") + client.succeed( + "curl --cacert /tmp/ca.crt https://a.example.com/ | grep -qF 'hello world'" + ) + + with subtest("Can add another certificate for nginx service"): + webserver.succeed( + "/run/current-system/fine-tune/child-1/bin/switch-to-configuration test" + ) + webserver.wait_for_unit("acme-finished-b.example.com.target") + client.succeed( + "curl --cacert /tmp/ca.crt https://b.example.com/ | grep -qF 'hello world'" + ) ''; } -- cgit 1.4.1 From 986a1eb32b9e9f8c099de6153e13492be96820f4 Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Sun, 27 Oct 2019 13:56:33 +0100 Subject: nixos/ammonite: Port test to python --- nixos/tests/ammonite.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/tests/ammonite.nix b/nixos/tests/ammonite.nix index fedfde233e8..1955e42be5f 100644 --- a/nixos/tests/ammonite.nix +++ b/nixos/tests/ammonite.nix @@ -1,4 +1,4 @@ -import ./make-test.nix ({ pkgs, ...} : { +import ./make-test-python.nix ({ pkgs, ...} : { name = "ammonite"; meta = with pkgs.stdenv.lib.maintainers; { maintainers = [ nequissimus ]; @@ -13,8 +13,8 @@ import ./make-test.nix ({ pkgs, ...} : { }; testScript = '' - startAll; + start_all() - $amm->succeed("amm -c 'val foo = 21; println(foo * 2)' | grep 42") + amm.succeed("amm -c 'val foo = 21; println(foo * 2)' | grep 42") ''; }) -- cgit 1.4.1 From 48508da01e754f3ed3a7d2656bbc695ab66036bc Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Sun, 27 Oct 2019 14:20:06 +0100 Subject: nixos/automysqlackup: Port test to python --- nixos/tests/automysqlbackup.nix | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/nixos/tests/automysqlbackup.nix b/nixos/tests/automysqlbackup.nix index ada104a34de..224b93862fb 100644 --- a/nixos/tests/automysqlbackup.nix +++ b/nixos/tests/automysqlbackup.nix @@ -1,4 +1,4 @@ -import ./make-test.nix ({ pkgs, lib, ... }: +import ./make-test-python.nix ({ pkgs, lib, ... }: { name = "automysqlbackup"; @@ -15,20 +15,24 @@ import ./make-test.nix ({ pkgs, lib, ... }: }; testScript = '' - startAll; + start_all() # Need to have mysql started so that it can be populated with data. - $machine->waitForUnit("mysql.service"); - - # Wait for testdb to be fully populated (5 rows). - $machine->waitUntilSucceeds("mysql -u root -D testdb -N -B -e 'select count(id) from tests' | grep -q 5"); - - # Do a backup and wait for it to start - $machine->startJob("automysqlbackup.service"); - $machine->waitForJob("automysqlbackup.service"); - - # wait for backup file and check that data appears in backup - $machine->waitForFile("/var/backup/mysql/daily/testdb"); - $machine->succeed("${pkgs.gzip}/bin/zcat /var/backup/mysql/daily/testdb/daily_testdb_*.sql.gz | grep hello"); + machine.wait_for_unit("mysql.service") + + with subtest("Wait for testdb to be fully populated (5 rows)."): + machine.wait_until_succeeds( + "mysql -u root -D testdb -N -B -e 'select count(id) from tests' | grep -q 5" + ) + + with subtest("Do a backup and wait for it to start"): + machine.start_job("automysqlbackup.service") + machine.wait_for_job("automysqlbackup.service") + + with subtest("wait for backup file and check that data appears in backup"): + machine.wait_for_file("/var/backup/mysql/daily/testdb") + machine.succeed( + "${pkgs.gzip}/bin/zcat /var/backup/mysql/daily/testdb/daily_testdb_*.sql.gz | grep hello" + ) ''; }) -- cgit 1.4.1 From 40396a7e12419fc772063d2a3fa87ec7d14a46d9 Mon Sep 17 00:00:00 2001 From: Julian Stecklina Date: Sun, 27 Oct 2019 13:53:36 +0100 Subject: nixos/zfs: convert test to python --- nixos/tests/zfs.nix | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/nixos/tests/zfs.nix b/nixos/tests/zfs.nix index d7a08268e98..8f844aca416 100644 --- a/nixos/tests/zfs.nix +++ b/nixos/tests/zfs.nix @@ -7,7 +7,7 @@ with import ../lib/testing.nix { inherit system pkgs; }; let - makeTest = import ./make-test.nix; + makeTest = import ./make-test-python.nix; makeZfsTest = name: { kernelPackage ? pkgs.linuxPackages_latest @@ -34,12 +34,12 @@ let }; testScript = '' - $machine->succeed("modprobe zfs"); - $machine->succeed("zpool status"); + machine.succeed("modprobe zfs") + machine.succeed("zpool status") - $machine->succeed("ls /dev"); + machine.succeed("ls /dev") - $machine->succeed( + machine.succeed( "mkdir /tmp/mnt", "udevadm settle", @@ -55,9 +55,7 @@ let "umount /tmp/mnt", "zpool destroy rpool", "udevadm settle" - - ); - + ) '' + extraTest; }; @@ -70,8 +68,8 @@ in { unstable = makeZfsTest "unstable" { enableUnstable = true; extraTest = '' - $machine->succeed( - "echo password | zpool create -o altroot='/tmp/mnt' -O encryption=aes-256-gcm -O keyformat=passphrase rpool /dev/vdb1", + machine.succeed( + "echo password | zpool create -o altroot=\"/tmp/mnt\" -O encryption=aes-256-gcm -O keyformat=passphrase rpool /dev/vdb1", "zfs create -o mountpoint=legacy rpool/root", "mount -t zfs rpool/root /tmp/mnt", "udevadm settle", @@ -79,7 +77,7 @@ in { "umount /tmp/mnt", "zpool destroy rpool", "udevadm settle" - ); + ) ''; }; -- cgit 1.4.1