Merge master into staging-next

This commit is contained in:
github-actions[bot] 2021-07-16 12:01:03 +00:00 committed by GitHub
commit 9fe75f18c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 844 additions and 521 deletions

View file

@ -560,6 +560,22 @@
<literal>claws-mail-gtk2</literal> package. <literal>claws-mail-gtk2</literal> package.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The wordpress module provides a new interface which allows to
use different webservers with the new option
<link xlink:href="options.html#opt-services.wordpress.webserver"><literal>services.wordpress.webserver</literal></link>.
Currently <literal>httpd</literal> and
<literal>nginx</literal> are supported. The definitions of
wordpress sites should now be set in
<link xlink:href="options.html#opt-services.wordpress.sites"><literal>services.wordpress.sites</literal></link>.
</para>
<para>
Sites definitions that use the old interface are automatically
migrated in the new option. This backward compatibility will
be removed in 22.05.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>
</section> </section>

View file

@ -139,3 +139,7 @@ In addition to numerous new and upgraded packages, this release has the followin
- `python3` now defaults to Python 3.9. Python 3.9 introduces many deprecation warnings, please look at the [What's New In Python 3.9 post](https://docs.python.org/3/whatsnew/3.9.html) for more information. - `python3` now defaults to Python 3.9. Python 3.9 introduces many deprecation warnings, please look at the [What's New In Python 3.9 post](https://docs.python.org/3/whatsnew/3.9.html) for more information.
- The `claws-mail` package now references the new GTK+ 3 release branch, major version 4. To use the GTK+ 2 releases, one can install the `claws-mail-gtk2` package. - The `claws-mail` package now references the new GTK+ 3 release branch, major version 4. To use the GTK+ 2 releases, one can install the `claws-mail-gtk2` package.
- The wordpress module provides a new interface which allows to use different webservers with the new option [`services.wordpress.webserver`](options.html#opt-services.wordpress.webserver). Currently `httpd` and `nginx` are supported. The definitions of wordpress sites should now be set in [`services.wordpress.sites`](options.html#opt-services.wordpress.sites).
Sites definitions that use the old interface are automatically migrated in the new option. This backward compatibility will be removed in 22.05.

View file

@ -3,13 +3,18 @@
let let
inherit (lib) mkDefault mkEnableOption mkForce mkIf mkMerge mkOption types; inherit (lib) mkDefault mkEnableOption mkForce mkIf mkMerge mkOption types;
inherit (lib) any attrValues concatMapStringsSep flatten literalExample; inherit (lib) any attrValues concatMapStringsSep flatten literalExample;
inherit (lib) mapAttrs mapAttrs' mapAttrsToList nameValuePair optional optionalAttrs optionalString; inherit (lib) filterAttrs mapAttrs mapAttrs' mapAttrsToList nameValuePair optional optionalAttrs optionalString;
eachSite = config.services.wordpress; cfg = migrateOldAttrs config.services.wordpress;
eachSite = cfg.sites;
user = "wordpress"; user = "wordpress";
group = config.services.httpd.group; webserver = config.services.${cfg.webserver};
stateDir = hostName: "/var/lib/wordpress/${hostName}"; stateDir = hostName: "/var/lib/wordpress/${hostName}";
# Migrate config.services.wordpress.<hostName> to config.services.wordpress.sites.<hostName>
oldSites = filterAttrs (o: _: o != "sites" && o != "webserver");
migrateOldAttrs = cfg: cfg // { sites = cfg.sites // oldSites cfg; };
pkg = hostName: cfg: pkgs.stdenv.mkDerivation rec { pkg = hostName: cfg: pkgs.stdenv.mkDerivation rec {
pname = "wordpress-${hostName}"; pname = "wordpress-${hostName}";
version = src.version; version = src.version;
@ -261,21 +266,48 @@ in
# interface # interface
options = { options = {
services.wordpress = mkOption { services.wordpress = mkOption {
type = types.attrsOf (types.submodule siteOpts); type = types.submodule {
# Used to support old interface
freeformType = types.attrsOf (types.submodule siteOpts);
# New interface
options.sites = mkOption {
type = types.attrsOf (types.submodule siteOpts);
default = {};
description = "Specification of one or more WordPress sites to serve";
};
options.webserver = mkOption {
type = types.enum [ "httpd" "nginx" ];
default = "httpd";
description = ''
Whether to use apache2 or nginx for virtual host management.
Further nginx configuration can be done by adapting <literal>services.nginx.virtualHosts.&lt;name&gt;</literal>.
See <xref linkend="opt-services.nginx.virtualHosts"/> for further information.
Further apache2 configuration can be done by adapting <literal>services.httpd.virtualHosts.&lt;name&gt;</literal>.
See <xref linkend="opt-services.httpd.virtualHosts"/> for further information.
'';
};
};
default = {}; default = {};
description = "Specification of one or more WordPress sites to serve via Apache."; description = "Wordpress configuration";
}; };
}; };
# implementation # implementation
config = mkIf (eachSite != {}) { config = mkIf (eachSite != {}) (mkMerge [{
assertions = mapAttrsToList (hostName: cfg: assertions = mapAttrsToList (hostName: cfg:
{ assertion = cfg.database.createLocally -> cfg.database.user == user; { assertion = cfg.database.createLocally -> cfg.database.user == user;
message = "services.wordpress.${hostName}.database.user must be ${user} if the database is to be automatically provisioned"; message = ''services.wordpress.sites."${hostName}".database.user must be ${user} if the database is to be automatically provisioned'';
} }
) eachSite; ) eachSite;
warnings = mapAttrsToList (hostName: _: ''services.wordpress."${hostName}" is deprecated use services.wordpress.sites."${hostName}"'') (oldSites cfg);
services.mysql = mkIf (any (v: v.database.createLocally) (attrValues eachSite)) { services.mysql = mkIf (any (v: v.database.createLocally) (attrValues eachSite)) {
enable = true; enable = true;
package = mkDefault pkgs.mariadb; package = mkDefault pkgs.mariadb;
@ -289,14 +321,18 @@ in
services.phpfpm.pools = mapAttrs' (hostName: cfg: ( services.phpfpm.pools = mapAttrs' (hostName: cfg: (
nameValuePair "wordpress-${hostName}" { nameValuePair "wordpress-${hostName}" {
inherit user group; inherit user;
group = webserver.group;
settings = { settings = {
"listen.owner" = config.services.httpd.user; "listen.owner" = webserver.user;
"listen.group" = config.services.httpd.group; "listen.group" = webserver.group;
} // cfg.poolConfig; } // cfg.poolConfig;
} }
)) eachSite; )) eachSite;
}
(mkIf (cfg.webserver == "httpd") {
services.httpd = { services.httpd = {
enable = true; enable = true;
extraModules = [ "proxy_fcgi" ]; extraModules = [ "proxy_fcgi" ];
@ -332,11 +368,13 @@ in
''; '';
} ]) eachSite; } ]) eachSite;
}; };
})
{
systemd.tmpfiles.rules = flatten (mapAttrsToList (hostName: cfg: [ systemd.tmpfiles.rules = flatten (mapAttrsToList (hostName: cfg: [
"d '${stateDir hostName}' 0750 ${user} ${group} - -" "d '${stateDir hostName}' 0750 ${user} ${webserver.group} - -"
"d '${cfg.uploadsDir}' 0750 ${user} ${group} - -" "d '${cfg.uploadsDir}' 0750 ${user} ${webserver.group} - -"
"Z '${cfg.uploadsDir}' 0750 ${user} ${group} - -" "Z '${cfg.uploadsDir}' 0750 ${user} ${webserver.group} - -"
]) eachSite); ]) eachSite);
systemd.services = mkMerge [ systemd.services = mkMerge [
@ -350,7 +388,7 @@ in
serviceConfig = { serviceConfig = {
Type = "oneshot"; Type = "oneshot";
User = user; User = user;
Group = group; Group = webserver.group;
}; };
})) eachSite) })) eachSite)
@ -360,9 +398,65 @@ in
]; ];
users.users.${user} = { users.users.${user} = {
group = group; group = webserver.group;
isSystemUser = true; isSystemUser = true;
}; };
}
}; (mkIf (cfg.webserver == "nginx") {
services.nginx = {
enable = true;
virtualHosts = mapAttrs (hostName: cfg: {
serverName = mkDefault hostName;
root = "${pkg hostName cfg}/share/wordpress";
extraConfig = ''
index index.php;
'';
locations = {
"/" = {
priority = 200;
extraConfig = ''
try_files $uri $uri/ /index.php$is_args$args;
'';
};
"~ \\.php$" = {
priority = 500;
extraConfig = ''
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:${config.services.phpfpm.pools."wordpress-${hostName}".socket};
fastcgi_index index.php;
include "${config.services.nginx.package}/conf/fastcgi.conf";
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
# Mitigate https://httpoxy.org/ vulnerabilities
fastcgi_param HTTP_PROXY "";
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
'';
};
"~ /\\." = {
priority = 800;
extraConfig = "deny all;";
};
"~* /(?:uploads|files)/.*\\.php$" = {
priority = 900;
extraConfig = "deny all;";
};
"~* \\.(js|css|png|jpg|jpeg|gif|ico)$" = {
priority = 1000;
extraConfig = ''
expires max;
log_not_found off;
'';
};
};
}) eachSite;
};
})
]);
} }

View file

@ -10,48 +10,68 @@ import ./make-test-python.nix ({ pkgs, ... }:
]; ];
}; };
machine = nodes = {
{ ... }: wp_httpd = { ... }: {
{ services.httpd.adminAddr = "webmaster@site.local"; services.httpd.adminAddr = "webmaster@site.local";
services.httpd.logPerVirtualHost = true; services.httpd.logPerVirtualHost = true;
services.wordpress."site1.local" = { services.wordpress = {
database.tablePrefix = "site1_"; # Test support for old interface
}; "site1.local" = {
database.tablePrefix = "site1_";
services.wordpress."site2.local" = { };
database.tablePrefix = "site2_"; sites = {
"site2.local" = {
database.tablePrefix = "site2_";
};
};
}; };
networking.firewall.allowedTCPPorts = [ 80 ];
networking.hosts."127.0.0.1" = [ "site1.local" "site2.local" ]; networking.hosts."127.0.0.1" = [ "site1.local" "site2.local" ];
}; };
wp_nginx = { ... }: {
services.wordpress.webserver = "nginx";
services.wordpress.sites = {
"site1.local" = {
database.tablePrefix = "site1_";
};
"site2.local" = {
database.tablePrefix = "site2_";
};
};
networking.firewall.allowedTCPPorts = [ 80 ];
networking.hosts."127.0.0.1" = [ "site1.local" "site2.local" ];
};
};
testScript = '' testScript = ''
import re import re
start_all() start_all()
machine.wait_for_unit("httpd") wp_httpd.wait_for_unit("httpd")
wp_nginx.wait_for_unit("nginx")
machine.wait_for_unit("phpfpm-wordpress-site1.local")
machine.wait_for_unit("phpfpm-wordpress-site2.local")
site_names = ["site1.local", "site2.local"] site_names = ["site1.local", "site2.local"]
with subtest("website returns welcome screen"): for machine in (wp_httpd, wp_nginx):
for site_name in site_names: for site_name in site_names:
assert "Welcome to the famous" in machine.succeed(f"curl -fL {site_name}") machine.wait_for_unit(f"phpfpm-wordpress-{site_name}")
with subtest("wordpress-init went through"): with subtest("website returns welcome screen"):
for site_name in site_names: assert "Welcome to the famous" in machine.succeed(f"curl -L {site_name}")
info = machine.get_unit_info(f"wordpress-init-{site_name}")
assert info["Result"] == "success"
with subtest("secret keys are set"): with subtest("wordpress-init went through"):
pattern = re.compile(r"^define.*NONCE_SALT.{64,};$", re.MULTILINE) info = machine.get_unit_info(f"wordpress-init-{site_name}")
for site_name in site_names: assert info["Result"] == "success"
assert pattern.search(
machine.succeed(f"cat /var/lib/wordpress/{site_name}/secret-keys.php") with subtest("secret keys are set"):
) pattern = re.compile(r"^define.*NONCE_SALT.{64,};$", re.MULTILINE)
assert pattern.search(
machine.succeed(f"cat /var/lib/wordpress/{site_name}/secret-keys.php")
)
''; '';
}) })

View file

@ -1,8 +1,8 @@
{ {
"stable": { "stable": {
"version": "91.0.4472.114", "version": "91.0.4472.164",
"sha256": "0wbyiwbdazgjjgj9vs56x26q3g9r80a57gfl0f2rfl1j7xwgxiy1", "sha256": "1g96hk72ds2b0aymgw7yjr0akgx7mkp17i99nk511ncnmni6zrc4",
"sha256bin64": "00ac1dyqxpxy1j11jvc5j35bgc629n2f2pll3912gzih4ir0vrys", "sha256bin64": "1j6p2gqlikaibcwa40k46dsm9jlrpbj21lv1snnjw8apjnjfd2wr",
"deps": { "deps": {
"gn": { "gn": {
"version": "2021-04-06", "version": "2021-04-06",

View file

@ -32,10 +32,10 @@ rec {
firefox-esr-78 = common rec { firefox-esr-78 = common rec {
pname = "firefox-esr"; pname = "firefox-esr";
ffversion = "78.11.0esr"; ffversion = "78.12.0esr";
src = fetchurl { src = fetchurl {
url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz"; url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz";
sha512 = "d02fc2eda587155b1c54ca12a6c5cde220a29f41f154f1c9b71ae8f966d8cc9439201a5b241e03fc0795b74e2479f7aa5d6b69f70b7639432e5382f321f7a6f4"; sha512 = "646eb803e0d0e541773e3111708c7eaa85e784e4bae6e4a77dcecdc617ee29e2e349c9ef16ae7e663311734dd7491aebd904359124dda62672dbc18bfb608f0a";
}; };
meta = { meta = {

View file

@ -36,9 +36,9 @@ appimageTools.wrapType2 {
git git
glib glib
glibc glibc
gnome.gdk_pixbuf gdk-pixbuf
gnome.gtk gtk3
gnome.gtk.dev gtk3.dev
gnome.zenity gnome.zenity
gnome2.GConf gnome2.GConf
gnumake gnumake
@ -48,7 +48,7 @@ appimageTools.wrapType2 {
gtk3.dev gtk3.dev
gtk3-x11 gtk3-x11
gtk3-x11.dev gtk3-x11.dev
kdialog plasma5Packages.kdialog
libappindicator-gtk2.out libappindicator-gtk2.out
libexif libexif
(libjpeg.override { enableJpeg8 = true; }).out (libjpeg.override { enableJpeg8 = true; }).out
@ -70,12 +70,12 @@ appimageTools.wrapType2 {
sqlite.dev sqlite.dev
udev udev
unzip unzip
utillinux util-linux
watch watch
wget wget
which which
wrapGAppsHook wrapGAppsHook
xdg_utils xdg-utils
xorg.libX11 xorg.libX11
xorg.libXau xorg.libXau
xorg.libXaw xorg.libXaw

View file

@ -16,12 +16,12 @@ with lib;
buildGoPackage rec { buildGoPackage rec {
pname = "gitea"; pname = "gitea";
version = "1.14.4"; version = "1.14.5";
# not fetching directly from the git repo, because that lacks several vendor files for the web UI # not fetching directly from the git repo, because that lacks several vendor files for the web UI
src = fetchurl { src = fetchurl {
url = "https://github.com/go-gitea/gitea/releases/download/v${version}/gitea-src-${version}.tar.gz"; url = "https://github.com/go-gitea/gitea/releases/download/v${version}/gitea-src-${version}.tar.gz";
sha256 = "sha256-sl/Vml8QmwZEAd2PIYWQcP7s6NYeomGJQGKhRiddtoo="; sha256 = "sha256-8nwLVpe/5IjXJqO179lN80B/3WGUL3LKM8OWdh/bYOE=";
}; };
unpackPhase = '' unpackPhase = ''

View file

@ -312,7 +312,7 @@ lib.makeScope pkgs.newScope (self: with self; {
# added 2019-02-08 # added 2019-02-08
inherit (pkgs) atk glib gobject-introspection gspell webkitgtk gtk3 gtkmm3 inherit (pkgs) atk glib gobject-introspection gspell webkitgtk gtk3 gtkmm3
libgtop libgudev libhttpseverywhere librsvg libsecret gdk_pixbuf gtksourceview gtksourceviewmm gtksourceview4 libgtop libgudev libhttpseverywhere librsvg libsecret gdk-pixbuf gtksourceview gtksourceviewmm gtksourceview4
easytag meld orca rhythmbox shotwell gnome-usage easytag meld orca rhythmbox shotwell gnome-usage
clutter clutter-gst clutter-gtk cogl gtk-vnc libdazzle libgda libgit2-glib libgxps libgdata libgepub libpeas libgee geocode-glib libgweather librest libzapojit libmediaart gfbgraph gexiv2 folks totem-pl-parser gcr gsound libgnomekbd vte vte_290 gnome-menus gdl; clutter clutter-gst clutter-gtk cogl gtk-vnc libdazzle libgda libgit2-glib libgxps libgdata libgepub libpeas libgee geocode-glib libgweather librest libzapojit libmediaart gfbgraph gexiv2 folks totem-pl-parser gcr gsound libgnomekbd vte vte_290 gnome-menus gdl;
inherit (pkgs) gsettings-desktop-schemas; # added 2019-04-16 inherit (pkgs) gsettings-desktop-schemas; # added 2019-04-16

View file

@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
doCheck = true; doCheck = true;
configureFlags = lib.optional stdenv.targetPlatform.isWindows "--disable-examples"; configureFlags = lib.optional (stdenv.targetPlatform.isWindows || stdenv.hostPlatform.isStatic) "--disable-examples";
meta = with lib; { meta = with lib; {
homepage = "http://www.hyperrealm.com/libconfig"; homepage = "http://www.hyperrealm.com/libconfig";

View file

@ -0,0 +1,48 @@
{ lib
, fetchFromGitLab
, buildDunePackage
, gmp
, dune-configurator
, cstruct
, bigstring
, alcotest
, hex
}:
buildDunePackage rec {
pname = "secp256k1-internal";
version = "0.2";
src = fetchFromGitLab {
owner = "nomadic-labs";
repo = "ocaml-secp256k1-internal";
rev = "v${version}";
sha256 = "1g9fyi78nmmm19l2cggwj14m4n80rz7gmnh1gq376zids71s6qxv";
};
useDune2 = true;
minimalOCamlVersion = "4.08";
propagatedBuildInputs = [
gmp
cstruct
bigstring
];
buildInputs = [
dune-configurator
];
checkInputs = [
alcotest
hex
];
doCheck = true;
meta = {
description = "Bindings to secp256k1 internal functions (generic operations on the curve)";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.ulrikstrid ];
};
}

View file

@ -6,12 +6,12 @@
buildPythonPackage rec { buildPythonPackage rec {
pname = "adafruit-platformdetect"; pname = "adafruit-platformdetect";
version = "3.14.2"; version = "3.15.1";
src = fetchPypi { src = fetchPypi {
pname = "Adafruit-PlatformDetect"; pname = "Adafruit-PlatformDetect";
inherit version; inherit version;
sha256 = "sha256-SFqSTNKZMETRf9RxSD6skzAVpxepmW+JG/gqZgFX06A="; sha256 = "sha256-aUYerhg5iqKsZ5SW3dI6EpFnaB7dRGjXpIDVsjwS7vY=";
}; };
nativeBuildInputs = [ setuptools-scm ]; nativeBuildInputs = [ setuptools-scm ];

View file

@ -0,0 +1,38 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, autopep8
, nose
, pycodestyle
, twine
}:
buildPythonPackage rec {
pname = "opensimplex";
version = "0.3";
src = fetchFromGitHub {
owner = "lmas";
repo = pname;
rev = "v${version}";
sha256 = "idF5JQGnAye6z3c3YU9rsHaebB3rlHJfA8vSpjDnFeM=";
};
checkInputs = [ autopep8 nose pycodestyle twine ];
checkPhase = ''
nosetests tests/
'';
meta = with lib; {
description = "OpenSimplex Noise functions for 2D, 3D and 4D";
longDescription = ''
OpenSimplex noise is an n-dimensional gradient noise function that was
developed in order to overcome the patent-related issues surrounding
Simplex noise, while continuing to also avoid the visually-significant
directional artifacts characteristic of Perlin noise.
'';
homepage = "https://github.com/lmas/opensimplex";
license = with licenses; [ mit ];
maintainers = with maintainers; [ angustrau ];
};
}

View file

@ -1,4 +1,5 @@
{ lib { lib
, appdirs
, buildPythonPackage , buildPythonPackage
, defusedxml , defusedxml
, fetchFromGitHub , fetchFromGitHub
@ -17,13 +18,13 @@
buildPythonPackage rec { buildPythonPackage rec {
pname = "pytenable"; pname = "pytenable";
version = "1.3.1"; version = "1.3.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "tenable"; owner = "tenable";
repo = "pyTenable"; repo = "pyTenable";
rev = version; rev = version;
sha256 = "sha256-9qkNQ3+yDplPHIXDwlghpJP1f+UoDYObWpPhl6UVtHU="; sha256 = "sha256-S39rl8bJsxYAmTcaZk9+s9G45lOvREjlGVBk1m30tJo=";
}; };
propagatedBuildInputs = [ propagatedBuildInputs = [
@ -31,6 +32,7 @@ buildPythonPackage rec {
]; ];
buildInputs = [ buildInputs = [
appdirs
defusedxml defusedxml
marshmallow marshmallow
python-box python-box

View file

@ -19,6 +19,7 @@
, python-lsp-jsonrpc , python-lsp-jsonrpc
, pythonOlder , pythonOlder
, rope , rope
, setuptools
, ujson , ujson
, yapf , yapf
}: }:
@ -47,6 +48,7 @@ buildPythonPackage rec {
pylint pylint
python-lsp-jsonrpc python-lsp-jsonrpc
rope rope
setuptools
ujson ujson
yapf yapf
]; ];

View file

@ -11,9 +11,7 @@
, isPy3k , isPy3k
, psutil , psutil
, pytest-asyncio , pytest-asyncio
, pytest-cov
, pytestCheckHook , pytestCheckHook
, pytestrunner
, sqlalchemy , sqlalchemy
, websocket-client , websocket-client
, websockets , websockets
@ -21,14 +19,14 @@
buildPythonPackage rec { buildPythonPackage rec {
pname = "slack-sdk"; pname = "slack-sdk";
version = "3.7.0"; version = "3.8.0";
disabled = !isPy3k; disabled = !isPy3k;
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "slackapi"; owner = "slackapi";
repo = "python-slack-sdk"; repo = "python-slack-sdk";
rev = "v${version}"; rev = "v${version}";
sha256 = "0bc52v5n8r3b2fy1c90w253r1abl752kaqdk6bgzkwsvbhgcxf2s"; sha256 = "sha256-r3GgcU4K2jj+4aIytpY2HiVqHzChynn2BCn1VNTL2t0=";
}; };
propagatedBuildInputs = [ propagatedBuildInputs = [
@ -47,20 +45,23 @@ buildPythonPackage rec {
flask-sockets flask-sockets
psutil psutil
pytest-asyncio pytest-asyncio
pytest-cov
pytestCheckHook pytestCheckHook
pytestrunner
]; ];
preCheck = '' preCheck = ''
export HOME=$(mktemp -d) export HOME=$(mktemp -d)
''; '';
# Exclude tests that requires network features disabledTestPaths = [
pytestFlagsArray = [ "--ignore=integration_tests" ]; # Exclude tests that requires network features
"integration_tests"
];
disabledTests = [ disabledTests = [
# Requires network features
"test_start_raises_an_error_if_rtm_ws_url_is_not_returned" "test_start_raises_an_error_if_rtm_ws_url_is_not_returned"
"test_org_installation" "test_org_installation"
"test_interactions"
]; ];
pythonImportsCheck = [ "slack_sdk" ]; pythonImportsCheck = [ "slack_sdk" ];

View file

@ -5,7 +5,7 @@ let
in appimageTools.wrapType2 rec { in appimageTools.wrapType2 rec {
name = "unityhub"; name = "unityhub";
extraPkgs = (pkgs: with pkgs; with xorg; [ gtk2 gdk_pixbuf glib libGL libGLU nss nspr extraPkgs = (pkgs: with pkgs; with xorg; [ gtk2 gdk-pixbuf glib libGL libGLU nss nspr
alsa-lib cups gnome2.GConf libcap fontconfig freetype pango alsa-lib cups gnome2.GConf libcap fontconfig freetype pango
cairo dbus dbus-glib libdbusmenu libdbusmenu-gtk2 expat zlib libpng12 udev tbb cairo dbus dbus-glib libdbusmenu libdbusmenu-gtk2 expat zlib libpng12 udev tbb
libpqxx gtk3 libsecret lsb-release openssl nodejs ncurses5 libpqxx gtk3 libsecret lsb-release openssl nodejs ncurses5

View file

@ -1,4 +1,4 @@
{ stdenv, lib, python, kernel, makeWrapper, writeText { stdenv, lib, python2, python3, kernel, makeWrapper, writeText
, gawk, iproute2 }: , gawk, iproute2 }:
let let
@ -9,6 +9,7 @@ let
inherit (kernel) src version; inherit (kernel) src version;
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper ];
buildInputs = [ (if lib.versionOlder version "4.19" then python2 else python3) ];
# as of 4.9 compilation will fail due to -Werror=format-security # as of 4.9 compilation will fail due to -Werror=format-security
hardeningDisable = [ "format" ]; hardeningDisable = [ "format" ];
@ -33,10 +34,6 @@ let
install -Dm755 hv_get_dhcp_info.sh $out/${libexec}/hv_get_dhcp_info install -Dm755 hv_get_dhcp_info.sh $out/${libexec}/hv_get_dhcp_info
install -Dm755 hv_get_dns_info.sh $out/${libexec}/hv_get_dns_info install -Dm755 hv_get_dns_info.sh $out/${libexec}/hv_get_dns_info
# I don't know why this isn't being handled automatically by fixupPhase
substituteInPlace $out/bin/lsvmbus \
--replace '/usr/bin/env python' ${python.interpreter}
runHook postInstall runHook postInstall
''; '';
@ -86,7 +83,7 @@ in stdenv.mkDerivation {
Wants=hv-fcopy.service hv-kvp.service hv-vss.service Wants=hv-fcopy.service hv-kvp.service hv-vss.service
EOF EOF
for f in $lib/lib/systemd/system/* ; do for f in $lib/lib/systemd/system/*.service ; do
substituteInPlace $f --replace @out@ ${daemons}/bin substituteInPlace $f --replace @out@ ${daemons}/bin
done done

View file

@ -2,13 +2,13 @@
buildGoModule rec { buildGoModule rec {
pname = "tailscale"; pname = "tailscale";
version = "1.10.1"; version = "1.10.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "tailscale"; owner = "tailscale";
repo = "tailscale"; repo = "tailscale";
rev = "v${version}"; rev = "v${version}";
sha256 = "1s4qpz4jwar3lcqyzkgyvgm4bghzass974lq1pw4fziqlsblh0vm"; sha256 = "sha256-bAWQTdpqDF7ERQzNY1k0NtxdA9M9bIyfHtvX0nKfIQY=";
}; };
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper ];

View file

@ -1,25 +1,16 @@
{ lib, rustPlatform, fetchFromGitHub }: { lib, rustPlatform, fetchCrate }:
rustPlatform.buildRustPackage rec { rustPlatform.buildRustPackage rec {
pname = "svgbob"; pname = "svgbob";
version = "0.4.2"; version = "0.5.3";
src = fetchFromGitHub { src = fetchCrate {
owner = "ivanceras"; inherit version;
repo = pname; crateName = "svgbob_cli";
rev = "0febc4377134a2ea3b3cd43ebdf5ea688a0e7432"; sha256 = "1gi8h4wzpi477y1gwi4708pn2kr65934a4dmphbhwppxbw447qiw";
sha256 = "1n0w5b3fjgbczy1iw52172x1p3y1bvw1qpz77fkaxkhrkgfd7vwr";
}; };
sourceRoot = "source/svgbob_cli";
postPatch = ''
substituteInPlace ../svgbob/src/lib.rs \
--replace '#![deny(warnings)]' ""
'';
cargoSha256 = "1jyycr95gjginx6bzmay9b5dbpnbwdqbv13w1qy58znicsmh3v8a"; cargoSha256 = "1x8phpllwm12igaachghwq6wgxl7nl8bhh7xybfrmn447viwxhq2";
# Test tries to build outdated examples
doCheck = false;
meta = with lib; { meta = with lib; {
description = "Convert your ascii diagram scribbles into happy little SVG"; description = "Convert your ascii diagram scribbles into happy little SVG";

View file

@ -0,0 +1,43 @@
{ lib, stdenv, fetchurl }:
let
pname = "ookla-speedtest";
version = "1.0.0";
srcs = {
x86_64-linux = fetchurl {
url = "https://install.speedtest.net/app/cli/${pname}-${version}-x86_64-linux.tgz";
sha256 = "sha256-X+ICjw1EJ+T0Ix2fnPcOZpG7iQpwY211Iy/k2XBjMWg=";
};
aarch64-linux = fetchurl {
url = "https://install.speedtest.net/app/cli/${pname}-${version}-aarch64-linux.tgz";
sha256 = "sha256-BzaE3DSQUIygGwTFhV4Ez9eX/tM/bqam7cJt+8b2qp4=";
};
};
in
stdenv.mkDerivation rec {
inherit pname version;
src = srcs.${stdenv.hostPlatform.system};
setSourceRoot = ''
sourceRoot=$PWD
'';
dontBuild = true;
dontConfigure = true;
installPhase = ''
install -D speedtest $out/bin/speedtest
install -D speedtest.5 $out/share/man/man5/speedtest.5
'';
meta = with lib; {
description = "Command line internet speedtest tool by Ookla";
homepage = "https://www.speedtest.net/apps/cli";
license = licenses.unfree;
maintainers = with maintainers; [ kranzes ];
platforms = lib.attrNames srcs;
};
}

View file

@ -1,4 +1,4 @@
# frozen_string_literal: true # frozen_string_literal: true
source "https://rubygems.org" source "https://rubygems.org"
gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.0.52" gem "metasploit-framework", git: "https://github.com/rapid7/metasploit-framework", ref: "refs/tags/6.0.53"

View file

@ -1,9 +1,9 @@
GIT GIT
remote: https://github.com/rapid7/metasploit-framework remote: https://github.com/rapid7/metasploit-framework
revision: f376002331f03483d56ade1c19134dbf02ef2cff revision: b7cef30d11f0509b7e27334030dae6b8cb34e7f2
ref: refs/tags/6.0.52 ref: refs/tags/6.0.53
specs: specs:
metasploit-framework (6.0.52) metasploit-framework (6.0.53)
actionpack (~> 5.2.2) actionpack (~> 5.2.2)
activerecord (~> 5.2.2) activerecord (~> 5.2.2)
activesupport (~> 5.2.2) activesupport (~> 5.2.2)
@ -85,6 +85,7 @@ GIT
thin thin
tzinfo tzinfo
tzinfo-data tzinfo-data
unix-crypt
warden warden
windows_error windows_error
xdr xdr
@ -126,13 +127,13 @@ GEM
arel-helpers (2.12.0) arel-helpers (2.12.0)
activerecord (>= 3.1.0, < 7) activerecord (>= 3.1.0, < 7)
aws-eventstream (1.1.1) aws-eventstream (1.1.1)
aws-partitions (1.475.0) aws-partitions (1.478.0)
aws-sdk-core (3.116.0) aws-sdk-core (3.117.0)
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0) aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
jmespath (~> 1.0) jmespath (~> 1.0)
aws-sdk-ec2 (1.248.0) aws-sdk-ec2 (1.249.0)
aws-sdk-core (~> 3, >= 3.112.0) aws-sdk-core (~> 3, >= 3.112.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sdk-iam (1.56.0) aws-sdk-iam (1.56.0)
@ -173,7 +174,7 @@ GEM
eventmachine (1.2.7) eventmachine (1.2.7)
faker (2.18.0) faker (2.18.0)
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
faraday (1.5.0) faraday (1.5.1)
faraday-em_http (~> 1.0) faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0) faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1) faraday-excon (~> 1.1)
@ -188,7 +189,7 @@ GEM
faraday-excon (1.1.0) faraday-excon (1.1.0)
faraday-httpclient (1.0.1) faraday-httpclient (1.0.1)
faraday-net_http (1.0.1) faraday-net_http (1.0.1)
faraday-net_http_persistent (1.1.0) faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0) faraday-patron (1.0.0)
faye-websocket (0.11.1) faye-websocket (0.11.1)
eventmachine (>= 0.12.0) eventmachine (>= 0.12.0)
@ -312,7 +313,7 @@ GEM
rex-core rex-core
rex-struct2 rex-struct2
rex-text rex-text
rex-core (0.1.16) rex-core (0.1.17)
rex-encoder (0.1.5) rex-encoder (0.1.5)
metasm metasm
rex-arch rex-arch
@ -331,7 +332,7 @@ GEM
rex-arch rex-arch
rex-ole (0.1.7) rex-ole (0.1.7)
rex-text rex-text
rex-powershell (0.1.90) rex-powershell (0.1.91)
rex-random_identifier rex-random_identifier
rex-text rex-text
ruby-rc4 ruby-rc4
@ -356,7 +357,7 @@ GEM
rkelly-remix (0.0.7) rkelly-remix (0.0.7)
ruby-macho (2.5.1) ruby-macho (2.5.1)
ruby-rc4 (0.1.5) ruby-rc4 (0.1.5)
ruby2_keywords (0.0.4) ruby2_keywords (0.0.5)
ruby_smb (2.0.10) ruby_smb (2.0.10)
bindata bindata
openssl-ccm openssl-ccm
@ -393,6 +394,7 @@ GEM
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.7.7) unf_ext (0.0.7.7)
unix-crypt (1.3.0)
warden (1.2.9) warden (1.2.9)
rack (>= 2.0.9) rack (>= 2.0.9)
webrick (1.7.0) webrick (1.7.0)

View file

@ -8,13 +8,13 @@ let
}; };
in stdenv.mkDerivation rec { in stdenv.mkDerivation rec {
pname = "metasploit-framework"; pname = "metasploit-framework";
version = "6.0.52"; version = "6.0.53";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "rapid7"; owner = "rapid7";
repo = "metasploit-framework"; repo = "metasploit-framework";
rev = version; rev = version;
sha256 = "sha256-JN+ulGd47xZFSR7AdxfvviR5mwCHdfBmFkaAJPdaLJ8="; sha256 = "sha256-0tg2FSRtwo1LRxA5jNQ1Pxx54TPs3ZwErXim8uj24VI=";
}; };
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper ];

View file

@ -114,30 +114,30 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0x9d0awfm8s9y025iwn7d5an476f6xq9v99lnynj2vvj1kgya79s"; sha256 = "0vsxqayzh04gxxan5i8vvfxh0n238dc9305bc89xs2mx2x1pw167";
type = "gem"; type = "gem";
}; };
version = "1.475.0"; version = "1.478.0";
}; };
aws-sdk-core = { aws-sdk-core = {
groups = ["default"]; groups = ["default"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0vjr1lzddm1pcs5vkpxns1gmrv0l0wb53kcxhh1xdznb7hm8h5km"; sha256 = "1mcagbyzy7l39lxm9g85frvjwlv3yfd9x8jddd1pfc0xsy9y0rax";
type = "gem"; type = "gem";
}; };
version = "3.116.0"; version = "3.117.0";
}; };
aws-sdk-ec2 = { aws-sdk-ec2 = {
groups = ["default"]; groups = ["default"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1s0r1vk39sjxkc5km2ldvcm1l5ac2c4w5z9bvz18jgqis98j6zd5"; sha256 = "1n6yl7qbzmjlxp3rzm3a62vinzdg9a8rqspq7xdaa9sxrf4zsamf";
type = "gem"; type = "gem";
}; };
version = "1.248.0"; version = "1.249.0";
}; };
aws-sdk-iam = { aws-sdk-iam = {
groups = ["default"]; groups = ["default"];
@ -354,10 +354,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0gwbii45plm9bljk22bwzhzxrc5xid8qx24f54vrm74q3zaz00ah"; sha256 = "1xpq9w46alagszx2mx82mqxxmsmyni2bpxd08gygzpl03zwbpr63";
type = "gem"; type = "gem";
}; };
version = "1.5.0"; version = "1.5.1";
}; };
faraday-em_http = { faraday-em_http = {
groups = ["default"]; groups = ["default"];
@ -414,10 +414,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0l2c835wl7gv34xp49fhd1bl4czkpw2g3ahqsak2251iqv5589ka"; sha256 = "0dc36ih95qw3rlccffcb0vgxjhmipsvxhn6cw71l7ffs0f7vq30b";
type = "gem"; type = "gem";
}; };
version = "1.1.0"; version = "1.2.0";
}; };
faraday-patron = { faraday-patron = {
groups = ["default"]; groups = ["default"];
@ -594,12 +594,12 @@
platforms = []; platforms = [];
source = { source = {
fetchSubmodules = false; fetchSubmodules = false;
rev = "f376002331f03483d56ade1c19134dbf02ef2cff"; rev = "b7cef30d11f0509b7e27334030dae6b8cb34e7f2";
sha256 = "17rcbbvj90262rkg0xc702dpj95yxwbpgh0y952idvvqcyaaxpr4"; sha256 = "0lp1yvlg59kqml29rpgc6ghpj71z6pa8qf8h8x5qvhkd4hakdn6j";
type = "git"; type = "git";
url = "https://github.com/rapid7/metasploit-framework"; url = "https://github.com/rapid7/metasploit-framework";
}; };
version = "6.0.52"; version = "6.0.53";
}; };
metasploit-model = { metasploit-model = {
groups = ["default"]; groups = ["default"];
@ -1036,10 +1036,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "08krnf05mbq6x2d92fv34bl8xdz1d3yq2m0mp8bfbq5kd6a13l2w"; sha256 = "0b0f9s18d2ax2k1xmwrvr97gxh8gfm79kfibv55fqmv846vgkkvk";
type = "gem"; type = "gem";
}; };
version = "0.1.16"; version = "0.1.17";
}; };
rex-encoder = { rex-encoder = {
groups = ["default"]; groups = ["default"];
@ -1106,10 +1106,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "08a9s82y4bv2bis0szasrrqvz6imwx94ckg259f7w39ng1fbc7b1"; sha256 = "0zrc0pr1pla0amw6hagllj82hyq8pyy6wb38xry2cxg7q70ghfq7";
type = "gem"; type = "gem";
}; };
version = "0.1.90"; version = "0.1.91";
}; };
rex-random_identifier = { rex-random_identifier = {
groups = ["default"]; groups = ["default"];
@ -1236,10 +1236,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "15wfcqxyfgka05v2a7kpg64x57gl1y4xzvnc9lh60bqx5sf1iqrs"; sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
type = "gem"; type = "gem";
}; };
version = "0.0.4"; version = "0.0.5";
}; };
ruby_smb = { ruby_smb = {
groups = ["default"]; groups = ["default"];
@ -1421,6 +1421,16 @@
}; };
version = "0.0.7.7"; version = "0.0.7.7";
}; };
unix-crypt = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1wflipsmmicmgvqilp9pml4x19b337kh6p6jgrzqrzpkq2z52gdq";
type = "gem";
};
version = "1.3.0";
};
warden = { warden = {
groups = ["default"]; groups = ["default"];
platforms = []; platforms = [];

View file

@ -12,20 +12,20 @@
rustPlatform.buildRustPackage rec { rustPlatform.buildRustPackage rec {
pname = "mdcat"; pname = "mdcat";
version = "0.23.0"; version = "0.23.1";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "lunaryorn"; owner = "lunaryorn";
repo = pname; repo = pname;
rev = "mdcat-${version}"; rev = "mdcat-${version}";
hash = "sha256-bGXuYGQyrXa9gUEQfB7BF9K04z88r1UoM8R5gpL2nRM="; sha256 = "sha256-aJ7rL+EKa5zWmCmekVuRmdeOwTmVo0IQ+GJ8Ga4iTI0=";
}; };
nativeBuildInputs = [ pkg-config asciidoctor installShellFiles ]; nativeBuildInputs = [ pkg-config asciidoctor installShellFiles ];
buildInputs = [ openssl ] buildInputs = [ openssl ]
++ lib.optional stdenv.isDarwin Security; ++ lib.optional stdenv.isDarwin Security;
cargoSha256 = "sha256-hmv4LNk7NEYjT/5XXUpMd+xGS19KHOW+HIgsiFEWeig="; cargoSha256 = "sha256-r0dJ/lDOfRzEdwySR/eEvsrO8qn4g7ZIfpekiirUp3Q=";
checkInputs = [ ansi2html ]; checkInputs = [ ansi2html ];
# Skip tests that use the network and that include files. # Skip tests that use the network and that include files.

View file

@ -11,17 +11,17 @@
}: }:
let let
specVersion = "4.96.0"; # Version taken from: https://www.linode.com/docs/api/openapi.yaml at `info.version`. specVersion = "4.98.0"; # Version taken from: https://www.linode.com/docs/api/openapi.yaml at `info.version`.
spec = fetchurl { spec = fetchurl {
url = "https://raw.githubusercontent.com/linode/linode-api-docs/v${specVersion}/openapi.yaml"; url = "https://raw.githubusercontent.com/linode/linode-api-docs/v${specVersion}/openapi.yaml";
sha256 = "sha256-4+j5BBTOFLLiA+n0YEUH/ICK4Iuxr6nNB7ZRrYACW2I="; sha256 = "sha256-3SweDMfgq2+QQIdeb6EjL7A2Grd/7KQzsbMNZKPtXts=";
}; };
in in
buildPythonApplication rec { buildPythonApplication rec {
pname = "linode-cli"; pname = "linode-cli";
version = "5.4.3"; version = "5.5.1";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "linode"; owner = "linode";

View file

@ -0,0 +1,30 @@
{ lib, fetchFromSourcehut, rustPlatform }:
rustPlatform.buildRustPackage rec {
pname = "swayr";
version = "0.6.1";
src = fetchFromSourcehut {
owner = "~tsdh";
repo = "swayr";
rev = "v${version}";
sha256 = "1865064q8jb75nfb0hbx4swbbijpibm0n7m4cid8qgylzp4bxvs2";
};
cargoSha256 = "0w6zjnywifdlaw01xz2824lwm4b6r1b7r99wi3p12vgbrmks4jcr";
patches = [
./icon-paths.patch
];
preCheck = ''
export HOME=$TMPDIR
'';
meta = with lib; {
description = "A window switcher (and more) for sway";
homepage = "https://git.sr.ht/~tsdh/swayr";
license = with licenses; [ gpl3Plus ];
maintainers = with maintainers; [ artturin ];
};
}

View file

@ -0,0 +1,17 @@
diff --git a/src/config.rs b/src/config.rs
index de7d04b..291114b 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -197,6 +197,12 @@ impl Default for Format {
),
urgency_end: Some("</span>".to_string()),
icon_dirs: Some(vec![
+ "/run/current-system/sw/share/icons/hicolor/scalable/apps".to_string(),
+ "/run/current-system/sw/share/icons/hicolor/48x48/apps".to_string(),
+ "/run/current-system/sw/share/pixmaps".to_string(),
+ "~/.nix-profile/share/icons/hicolor/scalable/apps".to_string(),
+ "~/.nix-profile/share/icons/hicolor/48x48/apps".to_string(),
+ "~/.nix-profile/share/pixmaps".to_string(),
"/usr/share/icons/hicolor/scalable/apps".to_string(),
"/usr/share/icons/hicolor/48x48/apps".to_string(),
"/usr/share/pixmaps".to_string(),

View file

@ -2313,6 +2313,8 @@ in
swaycwd = callPackage ../tools/wayland/swaycwd { }; swaycwd = callPackage ../tools/wayland/swaycwd { };
swayr = callPackage ../tools/wayland/swayr { };
wayland-utils = callPackage ../tools/wayland/wayland-utils { }; wayland-utils = callPackage ../tools/wayland/wayland-utils { };
wayland-proxy-virtwl = callPackage ../tools/wayland/wayland-proxy-virtwl { }; wayland-proxy-virtwl = callPackage ../tools/wayland/wayland-proxy-virtwl { };
@ -17674,6 +17676,8 @@ in
oobicpl = callPackage ../development/libraries/science/biology/oobicpl { }; oobicpl = callPackage ../development/libraries/science/biology/oobicpl { };
ookla-speedtest = callPackage ../tools/networking/ookla-speedtest { };
openalSoft = callPackage ../development/libraries/openal-soft { openalSoft = callPackage ../development/libraries/openal-soft {
inherit (darwin.apple_sdk.frameworks) CoreServices AudioUnit AudioToolbox; inherit (darwin.apple_sdk.frameworks) CoreServices AudioUnit AudioToolbox;
}; };

View file

@ -1031,6 +1031,8 @@ let
inherit (pkgs) secp256k1; inherit (pkgs) secp256k1;
}; };
secp256k1-internal = callPackage ../development/ocaml-modules/secp256k1-internal { };
seq = callPackage ../development/ocaml-modules/seq { }; seq = callPackage ../development/ocaml-modules/seq { };
sosa = callPackage ../development/ocaml-modules/sosa { }; sosa = callPackage ../development/ocaml-modules/sosa { };

View file

@ -4989,6 +4989,8 @@ in {
openshift = callPackage ../development/python-modules/openshift { }; openshift = callPackage ../development/python-modules/openshift { };
opensimplex = callPackage ../development/python-modules/opensimplex { };
opentimestamps = callPackage ../development/python-modules/opentimestamps { }; opentimestamps = callPackage ../development/python-modules/opentimestamps { };
opentracing = callPackage ../development/python-modules/opentracing { }; opentracing = callPackage ../development/python-modules/opentracing { };