0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-14 06:00:33 +03:00

Merge master into staging-next

This commit is contained in:
github-actions[bot] 2024-09-03 06:04:33 +00:00 committed by GitHub
commit b7b46e40c2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
59 changed files with 1325 additions and 901 deletions

View file

@ -3,7 +3,7 @@ Anderson Torres <torres.anderson.85@protonmail.com>
Atemu <git@atemu.net> <atemu.main@gmail.com>
Daniel Løvbrøtte Olsen <me@dandellion.xyz> <daniel.olsen99@gmail.com>
Fabian Affolter <mail@fabian-affolter.ch> <fabian@affolter-engineering.ch>
goatastronaut0212 <goatastronaut0212@proton.me> <goatastronaut0212@outlook.com>
goatastronaut0212 <goatastronaut0212@outlook.com> <goatastronaut0212@proton.me>
Janne Heß <janne@hess.ooo> <dasJ@users.noreply.github.com>
Jörg Thalheim <joerg@thalheim.io> <Mic92@users.noreply.github.com>
Martin Weinelt <hexa@darmstadt.ccc.de> <mweinelt@users.noreply.github.com>

View file

@ -17035,6 +17035,12 @@
githubId = 1332289;
name = "Quentin Machu";
};
quincepie = {
email = "flaky@quincepie.dev";
github = "Quince-Pie";
githubId = 127546159;
name = "QuincePie";
};
quinn-dougherty = {
email = "quinnd@riseup.net";
github = "quinn-dougherty";

View file

@ -390,6 +390,9 @@
- The `antennas` package and the `services.antennas` module have been
removed as they only work with `tvheadend` (see above).
- The `services.syncplay` module now exposes all currently available command-line arguments for `syncplay-server` as options, as well as a `useACMEHost` option for easy TLS setup.
The systemd service now uses `DynamicUser`/`StateDirectory` and the `user` and `group` options have been deprecated.
## Other Notable Changes {#sec-release-24.11-notable-changes}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->

View file

@ -1479,6 +1479,7 @@
./services/web-apps/pretix.nix
./services/web-apps/prosody-filer.nix
./services/web-apps/rimgo.nix
./services/web-apps/rutorrent.nix
./services/web-apps/screego.nix
./services/web-apps/sftpgo.nix
./services/web-apps/suwayomi-server.nix

View file

@ -7,18 +7,41 @@ let
cmdArgs =
[ "--port" cfg.port ]
++ optionals (cfg.isolateRooms) [ "--isolate-rooms" ]
++ optionals (!cfg.ready) [ "--disable-ready" ]
++ optionals (!cfg.chat) [ "--disable-chat" ]
++ optionals (cfg.salt != null) [ "--salt" cfg.salt ]
++ optionals (cfg.motdFile != null) [ "--motd-file" cfg.motdFile ]
++ optionals (cfg.roomsDBFile != null) [ "--rooms-db-file" cfg.roomsDBFile ]
++ optionals (cfg.permanentRoomsFile != null) [ "--permanent-rooms-file" cfg.permanentRoomsFile ]
++ [ "--max-chat-message-length" cfg.maxChatMessageLength ]
++ [ "--max-username-length" cfg.maxUsernameLength ]
++ optionals (cfg.statsDBFile != null) [ "--stats-db-file" cfg.statsDBFile ]
++ optionals (cfg.certDir != null) [ "--tls" cfg.certDir ]
++ optionals cfg.ipv4Only [ "--ipv4-only" ]
++ optionals cfg.ipv6Only [ "--ipv6-only" ]
++ optionals (cfg.interfaceIpv4 != "") [ "--interface-ipv4" cfg.interfaceIpv4 ]
++ optionals (cfg.interfaceIpv6 != "") [ "--interface-ipv6" cfg.interfaceIpv6 ]
++ cfg.extraArgs;
useACMEHostDir = optionalString (cfg.useACMEHost != null) config.security.acme.certs.${cfg.useACMEHost}.directory;
in
{
imports = [
(mkRemovedOptionModule [ "services" "syncplay" "user" ]
"The syncplay service now uses DynamicUser, override the systemd unit settings if you need the old functionality.")
(mkRemovedOptionModule [ "services" "syncplay" "group" ]
"The syncplay service now uses DynamicUser, override the systemd unit settings if you need the old functionality.")
];
options = {
services.syncplay = {
enable = mkOption {
type = types.bool;
default = false;
description = "If enabled, start the Syncplay server.";
description = ''
If enabled, start the Syncplay server.
'';
};
port = mkOption {
@ -29,6 +52,39 @@ in
'';
};
passwordFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
Path to the file that contains the server password. If
`null`, the server doesn't require a password.
'';
};
isolateRooms = mkOption {
type = types.bool;
default = false;
description = ''
Enable room isolation.
'';
};
ready = mkOption {
type = types.bool;
default = true;
description = ''
Check readiness of users.
'';
};
chat = mkOption {
type = types.bool;
default = true;
description = ''
Chat with users in the same room.
'';
};
salt = mkOption {
type = types.nullOr types.str;
default = null;
@ -37,7 +93,7 @@ in
instance to still work when the server is restarted. The salt will be
readable in the nix store and the processlist. If this is not
intended use `saltFile` instead. Mutually exclusive with
<option>services.syncplay.saltFile</option>.
{option}`services.syncplay.saltFile`.
'';
};
@ -49,7 +105,83 @@ in
operator passwords generated by this server instance to still work
when the server is restarted. `null`, the server doesn't load the
salt from a file. Mutually exclusive with
<option>services.syncplay.salt</option>.
{option}`services.syncplay.salt`.
'';
};
motd = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
Text to display when users join. The motd will be readable in the nix store
and the processlist. If this is not intended use `motdFile` instead.
Will be overriden by {option}`services.syncplay.motdFile`.
'';
};
motdFile = mkOption {
type = types.nullOr types.str;
default = if cfg.motd != null then (builtins.toFile "motd" cfg.motd) else null;
defaultText = literalExpression ''if services.syncplay.motd != null then (builtins.toFile "motd" services.syncplay.motd) else null'';
description = ''
Path to text to display when users join.
Will override {option}`services.syncplay.motd`.
'';
};
roomsDBFile = mkOption {
type = types.nullOr types.str;
default = null;
example = "rooms.db";
description = ''
Path to SQLite database file to store room states.
Relative to the working directory provided by systemd.
'';
};
permanentRooms = mkOption {
type = types.listOf types.str;
default = [ ];
description = ''
List of rooms that will be listed even if the room is empty.
Will be overriden by {option}`services.syncplay.permanentRoomsFile`.
'';
};
permanentRoomsFile = mkOption {
type = types.nullOr types.str;
default = if cfg.permanentRooms != [ ] then (builtins.toFile "perm" (builtins.concatStringsSep "\n" cfg.permanentRooms)) else null;
defaultText = literalExpression ''if services.syncplay.permanentRooms != [ ] then (builtins.toFile "perm" (builtins.concatStringsSep "\n" services.syncplay.permanentRooms)) else null'';
description = ''
File with list of rooms that will be listed even if the room is empty,
newline delimited.
Will override {option}`services.syncplay.permanentRooms`.
'';
};
maxChatMessageLength = mkOption {
type = types.ints.unsigned;
default = 150;
description = ''
Maximum number of characters in a chat message.
'';
};
maxUsernameLength = mkOption {
type = types.ints.unsigned;
default = 16;
description = ''
Maximum number of characters in a username.
'';
};
statsDBFile = mkOption {
type = types.nullOr types.str;
default = null;
example = "stats.db";
description = ''
Path to SQLite database file to store stats.
Relative to the working directory provided by systemd.
'';
};
@ -62,6 +194,49 @@ in
'';
};
useACMEHost = mkOption {
type = types.nullOr types.str;
default = null;
example = "syncplay.example.com";
description = ''
If set, use NixOS-generated ACME certificate with the specified name for TLS.
Note that it requires {option}`security.acme` to be setup, e.g., credentials provided if using DNS-01 validation.
'';
};
ipv4Only = mkOption {
type = types.bool;
default = false;
description = ''
Listen only on IPv4 when strting the server.
'';
};
ipv6Only = mkOption {
type = types.bool;
default = false;
description = ''
Listen only on IPv6 when strting the server.
'';
};
interfaceIpv4 = mkOption {
type = types.str;
default = "";
description = ''
The IP address to bind to for IPv4. Leaving it empty defaults to using all.
'';
};
interfaceIpv6 = mkOption {
type = types.str;
default = "";
description = ''
The IP address to bind to for IPv6. Leaving it empty defaults to using all.
'';
};
extraArgs = mkOption {
type = types.listOf types.str;
default = [ ];
@ -70,28 +245,12 @@ in
'';
};
user = mkOption {
type = types.str;
default = "nobody";
package = mkOption {
type = types.package;
default = pkgs.syncplay-nogui;
defaultText = literalExpression "pkgs.syncplay-nogui";
description = ''
User to use when running Syncplay.
'';
};
group = mkOption {
type = types.str;
default = "nogroup";
description = ''
Group to use when running Syncplay.
'';
};
passwordFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
Path to the file that contains the server password. If
`null`, the server doesn't require a password.
Package to use for syncplay.
'';
};
};
@ -103,7 +262,24 @@ in
assertion = cfg.salt == null || cfg.saltFile == null;
message = "services.syncplay.salt and services.syncplay.saltFile are mutually exclusive.";
}
{
assertion = cfg.certDir == null || cfg.useACMEHost == null;
message = "services.syncplay.certDir and services.syncplay.useACMEHost are mutually exclusive.";
}
{
assertion = !cfg.ipv4Only || !cfg.ipv6Only;
message = "services.syncplay.ipv4Only and services.syncplay.ipv6Only are mutually exclusive.";
}
];
warnings = optional (cfg.interfaceIpv4 != "" && cfg.ipv6Only) "You have specified services.syncplay.interfaceIpv4 but IPv4 is disabled by services.syncplay.ipv6Only."
++ optional (cfg.interfaceIpv6 != "" && cfg.ipv4Only) "You have specified services.syncplay.interfaceIpv6 but IPv6 is disabled by services.syncplay.ipv4Only.";
security.acme.certs = mkIf (cfg.useACMEHost != null) {
"${cfg.useACMEHost}".reloadServices = [ "syncplay.service" ];
};
networking.firewall.allowedTCPPorts = [ cfg.port ];
systemd.services.syncplay = {
description = "Syncplay Service";
wantedBy = [ "multi-user.target" ];
@ -111,20 +287,26 @@ in
after = [ "network-online.target" ];
serviceConfig = {
User = cfg.user;
Group = cfg.group;
LoadCredential = lib.optional (cfg.passwordFile != null) "password:${cfg.passwordFile}"
++ lib.optional (cfg.saltFile != null) "salt:${cfg.saltFile}";
DynamicUser = true;
StateDirectory = "syncplay";
WorkingDirectory = "%S/syncplay";
LoadCredential = optional (cfg.passwordFile != null) "password:${cfg.passwordFile}"
++ optional (cfg.saltFile != null) "salt:${cfg.saltFile}"
++ optionals (cfg.useACMEHost != null) [
"cert.pem:${useACMEHostDir}/cert.pem"
"privkey.pem:${useACMEHostDir}/key.pem"
"chain.pem:${useACMEHostDir}/chain.pem"
];
};
script = ''
${lib.optionalString (cfg.passwordFile != null) ''
${optionalString (cfg.passwordFile != null) ''
export SYNCPLAY_PASSWORD=$(cat "''${CREDENTIALS_DIRECTORY}/password")
''}
${lib.optionalString (cfg.saltFile != null) ''
${optionalString (cfg.saltFile != null) ''
export SYNCPLAY_SALT=$(cat "''${CREDENTIALS_DIRECTORY}/salt")
''}
exec ${pkgs.syncplay-nogui}/bin/syncplay-server ${escapeShellArgs cmdArgs}
exec ${cfg.package}/bin/syncplay-server ${escapeShellArgs cmdArgs} ${optionalString (cfg.useACMEHost != null) "--tls $CREDENTIALS_DIRECTORY"}
'';
};
};

View file

@ -0,0 +1,302 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.rutorrent;
rtorrentPluginDependencies = with pkgs; {
_task = [ procps ];
unpack = [ unzip unrar ];
rss = [ curl ];
mediainfo = [ mediainfo ];
spectrogram = [ sox ];
screenshots = [ ffmpeg ];
};
phpPluginDependencies = with pkgs; {
_cloudflare = [ python3 ];
};
getPluginDependencies = dependencies: concatMap (p: attrByPath [ p ] [] dependencies);
in {
options = {
services.rutorrent = {
enable = mkEnableOption "ruTorrent";
hostName = mkOption {
type = types.str;
description = "FQDN for the ruTorrent instance.";
};
dataDir = mkOption {
type = types.str;
default = "/var/lib/rutorrent";
description = "Storage path of ruTorrent.";
};
user = mkOption {
type = types.str;
default = "rutorrent";
description = ''
User which runs the ruTorrent service.
'';
};
group = mkOption {
type = types.str;
default = "rutorrent";
description = ''
Group which runs the ruTorrent service.
'';
};
rpcSocket = mkOption {
type = types.str;
default = config.services.rtorrent.rpcSocket;
defaultText = "config.services.rtorrent.rpcSocket";
description = ''
Path to rtorrent rpc socket.
'';
};
plugins = mkOption {
type = with types; listOf (either str package);
default = [ "httprpc" ];
example = literalExpression ''[ "httprpc" "data" "diskspace" "edit" "erasedata" "theme" "trafic" ]'';
description = ''
List of plugins to enable. See the list of <link xlink:href="https://github.com/Novik/ruTorrent/wiki/Plugins#currently-there-are-the-following-plugins">available plugins</link>. Note: the <literal>unpack</literal> plugin needs the nonfree <literal>unrar</literal> package.
You need to either enable one of the <literal>rpc</literal> or <literal>httprpc</literal> plugin or enable the <xref linkend="opt-services.rutorrent.nginx.exposeInsecureRPC2mount"/> option.
'';
};
poolSettings = mkOption {
type = with types; attrsOf (oneOf [ str int bool ]);
default = {
"pm" = "dynamic";
"pm.max_children" = 32;
"pm.start_servers" = 2;
"pm.min_spare_servers" = 2;
"pm.max_spare_servers" = 4;
"pm.max_requests" = 500;
};
description = ''
Options for ruTorrent's PHP pool. See the documentation on <literal>php-fpm.conf</literal> for details on configuration directives.
'';
};
nginx = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable nginx 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.
'';
};
exposeInsecureRPC2mount = mkOption {
type = types.bool;
default = false;
description = ''
If you do not enable one of the <literal>rpc</literal> or <literal>httprpc</literal> plugins you need to expose an RPC mount through scgi using this option.
Warning: This allow to run arbitrary commands, as the rtorrent user, so make sure to use authentification. The simplest way would be to use the <literal>services.nginx.virtualHosts.&lt;name&gt;.basicAuth</literal> option.
'';
};
};
};
};
config = mkIf cfg.enable (mkMerge [
{ assertions = let
usedRpcPlugins = intersectLists cfg.plugins [ "httprpc" "rpc" ];
in [
{ assertion = (length usedRpcPlugins < 2);
message = "Please specify only one of httprpc or rpc plugins";
}
{ assertion = !(length usedRpcPlugins > 0 && cfg.nginx.exposeInsecureRPC2mount);
message = "Please do not use exposeInsecureRPC2mount if you use one of httprpc or rpc plugins";
}
];
warnings = let
nginxVhostCfg = config.services.nginx.virtualHosts."${cfg.hostName}";
in []
++ (optional (cfg.nginx.exposeInsecureRPC2mount && (nginxVhostCfg.basicAuth == {} || nginxVhostCfg.basicAuthFile == null )) ''
You are using exposeInsecureRPC2mount without using basic auth on the virtual host. The exposed rpc mount allow for remote command execution.
Please make sure it is not accessible from the outside.
'');
systemd = {
services = {
rtorrent.path = getPluginDependencies rtorrentPluginDependencies cfg.plugins;
rutorrent-setup = let
rutorrentConfig = pkgs.writeText "rutorrent-config.php" ''
<?php
// configuration parameters
// for snoopy client
@define('HTTP_USER_AGENT', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36', true);
@define('HTTP_TIME_OUT', 30, true); // in seconds
@define('HTTP_USE_GZIP', true, true);
$httpIP = null; // IP string. Or null for any.
$httpProxy = array
(
'use' => false,
'proto' => 'http', // 'http' or 'https'
'host' => 'PROXY_HOST_HERE',
'port' => 3128
);
@define('RPC_TIME_OUT', 5, true); // in seconds
@define('LOG_RPC_CALLS', false, true);
@define('LOG_RPC_FAULTS', true, true);
// for php
@define('PHP_USE_GZIP', false, true);
@define('PHP_GZIP_LEVEL', 2, true);
$schedule_rand = 10; // rand for schedulers start, +0..X seconds
$do_diagnostic = true;
$log_file = '${cfg.dataDir}/logs/errors.log'; // path to log file (comment or leave blank to disable logging)
$saveUploadedTorrents = true; // Save uploaded torrents to profile/torrents directory or not
$overwriteUploadedTorrents = false; // Overwrite existing uploaded torrents in profile/torrents directory or make unique name
$topDirectory = '/'; // Upper available directory. Absolute path with trail slash.
$forbidUserSettings = false;
$scgi_port = 0;
$scgi_host = "unix://${cfg.rpcSocket}";
$XMLRPCMountPoint = "/RPC2"; // DO NOT DELETE THIS LINE!!! DO NOT COMMENT THIS LINE!!!
$throttleMaxSpeed = 327625*1024;
$pathToExternals = array(
"php" => "${pkgs.php}/bin/php", // Something like /usr/bin/php. If empty, will be found in PATH.
"curl" => "${pkgs.curl}/bin/curl", // Something like /usr/bin/curl. If empty, will be found in PATH.
"gzip" => "${pkgs.gzip}/bin/gzip", // Something like /usr/bin/gzip. If empty, will be found in PATH.
"id" => "${pkgs.coreutils}/bin/id", // Something like /usr/bin/id. If empty, will be found in PATH.
"stat" => "${pkgs.coreutils}/bin/stat", // Something like /usr/bin/stat. If empty, will be found in PATH.
"pgrep" => "${pkgs.procps}/bin/pgrep", // TODO why can't we use phpEnv.PATH
);
$localhosts = array( // list of local interfaces
"127.0.0.1",
"localhost",
);
$profilePath = '${cfg.dataDir}/share'; // Path to user profiles
$profileMask = 0770; // Mask for files and directory creation in user profiles.
// Both Webserver and rtorrent users must have read-write access to it.
// For example, if Webserver and rtorrent users are in the same group then the value may be 0770.
$tempDirectory = null; // Temp directory. Absolute path with trail slash. If null, then autodetect will be used.
$canUseXSendFile = false; // If true then use X-Sendfile feature if it exist
$locale = "UTF8";
'';
in {
wantedBy = [ "multi-user.target" ];
before = [ "phpfpm-rutorrent.service" ];
script = ''
ln -sf ${pkgs.rutorrent}/{css,images,js,lang,index.html} ${cfg.dataDir}/
mkdir -p ${cfg.dataDir}/{conf,logs,plugins} ${cfg.dataDir}/share/{settings,torrents,users}
ln -sf ${pkgs.rutorrent}/conf/{access.ini,plugins.ini} ${cfg.dataDir}/conf/
ln -sf ${rutorrentConfig} ${cfg.dataDir}/conf/config.php
cp -r ${pkgs.rutorrent}/php ${cfg.dataDir}/
${optionalString (cfg.plugins != [])
''cp -r ${concatMapStringsSep " " (p: "${pkgs.rutorrent}/plugins/${p}") cfg.plugins} ${cfg.dataDir}/plugins/''}
chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir}/{conf,share,logs,plugins}
chmod -R 755 ${cfg.dataDir}/{conf,share,logs,plugins}
'';
serviceConfig.Type = "oneshot";
};
};
tmpfiles.rules = [ "d '${cfg.dataDir}' 0775 ${cfg.user} ${cfg.group} -" ];
};
users.groups."${cfg.group}" = {};
users.users = {
"${cfg.user}" = {
home = cfg.dataDir;
group = cfg.group;
extraGroups = [ config.services.rtorrent.group ];
description = "ruTorrent Daemon user";
isSystemUser = true;
};
"${config.services.rtorrent.user}" = {
extraGroups = [ cfg.group ];
};
};
}
(mkIf cfg.nginx.enable (mkMerge [
{ services = {
phpfpm.pools.rutorrent = let
envPath = lib.makeBinPath (getPluginDependencies phpPluginDependencies cfg.plugins);
pool = {
user = cfg.user;
group = config.services.rtorrent.group;
settings = mapAttrs (name: mkDefault) {
"listen.owner" = config.services.nginx.user;
"listen.group" = config.services.nginx.group;
} // cfg.poolSettings;
};
in if (envPath == "") then pool else pool // { phpEnv.PATH = envPath; };
nginx = {
enable = true;
virtualHosts = {
${cfg.hostName} = {
root = cfg.dataDir;
locations = {
"~ [^/]\.php(/|$)" = {
extraConfig = ''
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
# Mitigate https://httpoxy.org/ vulnerabilities
fastcgi_param HTTP_PROXY "";
fastcgi_pass unix:${config.services.phpfpm.pools.rutorrent.socket};
fastcgi_index index.php;
include ${pkgs.nginx}/conf/fastcgi.conf;
'';
};
};
};
};
};
};
}
(mkIf cfg.nginx.exposeInsecureRPC2mount {
services.nginx.virtualHosts."${cfg.hostName}".locations."/RPC2" = {
extraConfig = ''
include ${pkgs.nginx}/conf/scgi_params;
scgi_pass unix:${cfg.rpcSocket};
'';
};
services.rtorrent.group = "nginx";
})
]))
]);
}

View file

@ -3,27 +3,27 @@
, fetchFromGitHub
, pnpm
, nodejs
, electron_30
, electron_31
, makeWrapper
, copyDesktopItems
, makeDesktopItem
}:
stdenv.mkDerivation rec {
pname = "armcord";
version = "3.2.8";
version = "3.3.0";
src = fetchFromGitHub {
owner = "ArmCord";
repo = "ArmCord";
rev = "v${version}";
hash = "sha256-H/Y3xA7gE24UsUkrxmrRFSvs16qZCVxli9vdnt7ihi8=";
hash = "sha256-nVirmGgR5yssMRXFUialMjTTSEa5nVNtue207eYUJCg=";
};
nativeBuildInputs = [ pnpm.configHook nodejs makeWrapper copyDesktopItems ];
pnpmDeps = pnpm.fetchDeps {
inherit pname version src;
hash = "sha256-hYp1XbWQL5NbIzzUSnZ7y7V+vYQmymRNo+EiSjn5d9E=";
hash = "sha256-ETnTWErdOIdcyK/v42bx+dFPPt+Lc0Lxyzo+RpxvEjU=";
};
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
@ -35,8 +35,8 @@ stdenv.mkDerivation rec {
npm exec electron-builder -- \
--dir \
-c.electronDist="${electron_30.dist}" \
-c.electronVersion="${electron_30.version}"
-c.electronDist="${electron_31.dist}" \
-c.electronVersion="${electron_31.version}"
runHook postBuild
'';
@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
install -Dm644 "build/icon.png" "$out/share/icons/hicolor/256x256/apps/armcord.png"
makeShellWrapper "${lib.getExe electron_30}" "$out/bin/armcord" \
makeShellWrapper "${lib.getExe electron_31}" "$out/bin/armcord" \
--add-flags "$out/share/lib/armcord/resources/app.asar" \
"''${gappsWrapperArgs[@]}" \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \

View file

@ -84,20 +84,20 @@ buildGoModule rec {
printf "#!/bin/sh\ntrue" > ./Tools/src/checkstyle.sh
substituteInPlace agent/platform/platform_unix.go \
--replace "/usr/bin/uname" "${coreutils}/bin/uname" \
--replace '"/bin", "hostname"' '"${nettools}/bin/hostname"' \
--replace '"lsb_release"' '"${fake-lsb-release}/bin/lsb_release"'
--replace-fail "/usr/bin/uname" "${coreutils}/bin/uname" \
--replace-fail '"/bin", "hostname"' '"${nettools}/bin/hostname"' \
--replace-fail '"lsb_release"' '"${fake-lsb-release}/bin/lsb_release"'
substituteInPlace agent/session/shell/shell_unix.go \
--replace '"script"' '"${util-linux}/bin/script"'
--replace-fail '"script"' '"${util-linux}/bin/script"'
substituteInPlace agent/rebooter/rebooter_unix.go \
--replace "/sbin/shutdown" "shutdown"
--replace-fail "/sbin/shutdown" "shutdown"
echo "${version}" > VERSION
'' + lib.optionalString stdenv.isLinux ''
substituteInPlace agent/managedInstances/fingerprint/hardwareInfo_unix.go \
--replace /usr/sbin/dmidecode ${dmidecode}/bin/dmidecode
--replace-fail /usr/sbin/dmidecode ${dmidecode}/bin/dmidecode
'';
preBuild = ''

View file

@ -20,7 +20,7 @@ stdenv.mkDerivation (finalAttrs: {
in ''
substituteInPlace \
apfs-snap/Makefile apfsck/Makefile mkapfs/Makefile \
--replace \
--replace-fail \
'$(shell git describe --always HEAD | tail -c 9)' \
'${shortRev}'
'';

View file

@ -87,13 +87,13 @@ stdenv.mkDerivation (finalAttrs: {
install -Dm755 dist/unix/armitage $out/bin/armitage
substituteInPlace $out/bin/armitage \
--replace "armitage.jar" "$JAR"
--replace-fail "armitage.jar" "$JAR"
wrapProgram $out/bin/armitage \
--prefix PATH : "${lib.makeBinPath [ jdk11 metasploit ]}"
install -Dm755 dist/unix/teamserver $out/bin/teamserver
substituteInPlace $out/bin/teamserver \
--replace "armitage.jar" "$JAR"
--replace-fail "armitage.jar" "$JAR"
wrapProgram $out/bin/teamserver \
--prefix PATH : "${lib.makeBinPath [ jdk11 metasploit ]}"

View file

@ -10,13 +10,13 @@
stdenv.mkDerivation rec {
pname = "marwaita-red";
version = "20.3.1";
version = "21";
src = fetchFromGitHub {
owner = "darkomarko42";
repo = pname;
rev = version;
hash = "sha256-cMZDd/WQFrfr6Zrq1/1It26OmML3cf7+ZU/I8IMjuX4=";
hash = "sha256-VCNwWtAzMORF+gXjcLhJCsmllGD2xGgRSS3WxaVoRfU=";
};
buildInputs = [

View file

@ -6,13 +6,13 @@
buildGoModule rec {
pname = "meteor-git";
version = "0.23.0";
version = "0.23.1";
src = fetchFromGitHub {
owner = "stefanlogue";
repo = "meteor";
rev = "v${version}";
hash = "sha256-UA6bye9ti9AwnZkBIGjljDElkIEOhsiJ0NyYdKbF5m0=";
hash = "sha256-APsP9kzO5QMCgqIaMF01/NB3bT17gNNFZ1mxFThfvgQ=";
};
vendorHash = "sha256-jKd/eJwp5SZvTrP3RN7xT7ibAB0PQondGR3RT+HQXIo=";

View file

@ -7,17 +7,17 @@
let
pname = "mqttx";
version = "1.9.9";
version = "1.10.1";
suffixedUrl = suffix: "https://github.com/emqx/MQTTX/releases/download/v${version}/MQTTX-${version}${suffix}.AppImage";
sources = {
"aarch64-linux" = fetchurl {
url = suffixedUrl "-arm64";
hash = "sha256-mCCRvLS6diKoKYZNUMsyiWyFWmyYYB0pAxNT0yriJHI=";
hash = "sha256-QumOqOOFXOXf0oqXWVaz0+69kHDk3HQKvNcQl8X7Fp8=";
};
"x86_64-linux" = fetchurl {
url = suffixedUrl "";
hash = "sha256-InGfGiT3c5M8ueFZl5/hFmYRPeXnwSCUPhAqmz0jsU8=";
hash = "sha256-+TyZnx3/qraoA3rcpIDKedGyTzFvdaAE/v4pzXrB0zU=";
};
};

View file

@ -10,11 +10,11 @@
stdenv.mkDerivation rec {
pname = "nexus";
version = "3.69.0-02";
version = "3.70.1-02";
src = fetchurl {
url = "https://download.sonatype.com/nexus/3/nexus-${version}-unix.tar.gz";
hash = "sha256-7sgLPuM93mFEPlTd3qJY+FGVHErvgcTGJWwSBcqBgWI=";
hash = "sha256-oBappm8WRcgyD5HWqJKPbMHjlwCUo9y5+FtB2Kq1PCE=";
};
preferLocalBuild = true;

View file

@ -0,0 +1,25 @@
{stdenv, lib, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "rutorrent";
version = "4.2.10";
src = fetchFromGitHub {
owner = "Novik";
repo = "ruTorrent";
rev = "v${version}";
sha256 = "Hkh2fWaZpJLxUYaojR97XVQWXTRzmFkQe4xKsmY1E8M=";
};
installPhase = ''
mkdir -p $out/
cp -r . $out/
'';
meta = with lib; {
description = "Yet another web front-end for rTorrent";
homepage = "https://github.com/Novik/ruTorrent";
license = licenses.gpl3Plus;
platforms = platforms.unix;
};
}

View file

@ -26,13 +26,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "swayimg";
version = "2.3";
version = "3.2";
src = fetchFromGitHub {
owner = "artemsen";
repo = "swayimg";
rev = "v${finalAttrs.version}";
hash = "sha256-MAVxOUM1x6dkvbWPz/JS+sITi3BhCeaweKZZserkXz8=";
hash = "sha256-Eqs8U2BpjcweDi4oGS9nWpoyoXeuiD+6jviPA3s9/YY=";
};
strictDeps = true;

View file

@ -14,16 +14,16 @@
rustPlatform.buildRustPackage rec {
pname = "tpnote";
version = "1.24.7";
version = "1.24.8";
src = fetchFromGitHub {
owner = "getreu";
repo = "tp-note";
rev = "v${version}";
hash = "sha256-BSq+9qjBdJZvx65mumyPbjhbBHpHXgWeGqdx/xevL50=";
hash = "sha256-tn6GCBX3DrqyZZz2FJLTn1vJd4eEbawyJM5huco21/8=";
};
cargoHash = "sha256-jwG68aAG4D+ulsQa+UEyJu5fVwbrHeeW9bJNQfcpg4o=";
cargoHash = "sha256-2qGObTu7g6GbUwd4obgqufig7bABFLBsCWSyZt8AVac=";
nativeBuildInputs = [
cmake

View file

@ -102,8 +102,9 @@ in stdenv.mkDerivation {
runHook postInstall
'';
# .so files in the SystemARM64 directory are not loaded properly on aarch64-linux
appendRunpaths = lib.optionals (stdenv.hostPlatform.system == "aarch64-linux") [
# Bring in game's .so files into lookup. Otherwise game fails to start
# as: `Object not found: Class Render.Render`
appendRunpaths = [
"${placeholder "out"}/${systemDir}"
];

View file

@ -19,7 +19,7 @@ stdenv.mkDerivation (finalAttrs: {
postPatch = ''
substituteInPlace Makefile \
--replace '/bin/echo' 'echo'
--replace-fail '/bin/echo' 'echo'
'';
dontConfigure = true;

View file

@ -26,7 +26,7 @@ stdenv.mkDerivation (finalAttrs: {
postPatch = ''
patchShebangs findsymbols scripts/
substituteInPlace Makefile \
--replace '/bin/echo' 'echo'
--replace-fail '/bin/echo' 'echo'
'';
dontConfigure = true;

View file

@ -1,7 +1,7 @@
{
"branch": "master",
"commit_hash": "4ac238a00ca0b36e9755e55e54a22d3107ba443c",
"commit_message": "Update packages",
"date": "2024-08-27",
"tag": "v5.13.2"
"commit_hash": "8d7a26f3f3095044dd08422d9bca5607aa173103",
"commit_message": "Merge pull request #105 from byBenPuls/master",
"date": "2024-09-02",
"tag": "v5.14.0"
}

View file

@ -14,13 +14,13 @@
}:
stdenvNoCC.mkDerivation rec {
pname = "yandex-music";
version = "5.13.2";
version = "5.14.0";
src = fetchFromGitHub {
owner = "cucumber-sp";
repo = "yandex-music-linux";
rev = "v${version}";
hash = "sha256-yQX2GEulAQ02BndpwAAwGdTYtUlNXCgsCUdmXxPwtKU=";
hash = "sha256-M0UcnrYtlrRY1sN65UPXcgEAzcdSpKWeHn4kbLDRRaw=";
};
nativeBuildInputs = [

View file

@ -1,9 +1,9 @@
{
"ym": {
"version": "5.13.2",
"exe_name": "Yandex_Music_x64_5.13.2.exe",
"exe_link": "https://music-desktop-application.s3.yandex.net/stable/Yandex_Music_x64_5.13.2.exe",
"exe_sha256": "ac7a489a59e074358559f544a26143ca81a6bdfa41481242f3419b76eaffdb0b"
"version": "5.14.0",
"exe_name": "Yandex_Music_x64_5.14.0.exe",
"exe_link": "https://music-desktop-application.s3.yandex.net/stable/Yandex_Music_x64_5.14.0.exe",
"exe_sha256": "b7a0a974666e68b5ed324a72ca9f53dcbdb35271e2b48fe5adc6bc6c8876e03d"
},
"electron": {
"version": "29.4.6",

View file

@ -43,7 +43,7 @@ let
elvis-erlang = callPackage ./elvis-erlang { };
# BEAM-based languages.
elixir = elixir_1_16;
elixir = elixir_1_17;
elixir_1_17 = lib'.callElixir ../interpreters/elixir/1.17.nix {
inherit erlang;

View file

@ -84,8 +84,13 @@ let
}
{
after = "19";
before = "20";
path = ../19;
}
{
after = "20";
path = ../git;
}
];
"clang/purity.patch" = [
{

View file

@ -25,9 +25,9 @@ let
"18.1.8".officialRelease.sha256 = "sha256-iiZKMRo/WxJaBXct9GdAcAT3cz9d9pnAcO1mmR6oPNE=";
"19.1.0-rc3".officialRelease.sha256 = "sha256-SRonSpXt1pH6Xk+rQZk9mrfMdvYIvOImwUfMUu3sBgs=";
"20.0.0-git".gitRelease = {
rev = "2579b411a13799534c8b8a22246134b88ba7785d";
rev-version = "20.0.0-unstable-2024-08-25";
sha256 = "sha256-/Gymj9bEoaAAH5kWPRflD+lBWyPjWBpYGnQsP5vAlsk=";
rev = "837ee5b46a5f7f898f0de7e46a19600b896a0a1f";
rev-version = "20.0.0-unstable-2024-09-01";
sha256 = "sha256-GZDc1o7dLhPWrHA/LELsKs5ydHv9gn1bNFMg6Lfjs5Y=";
};
} // llvmVersions;

View file

@ -0,0 +1,71 @@
diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake
index 75b0080f6..c895b884c 100644
--- a/cmake/modules/AddClang.cmake
+++ b/cmake/modules/AddClang.cmake
@@ -119,8 +119,8 @@ macro(add_clang_library name)
install(TARGETS ${lib}
COMPONENT ${lib}
${export_to_clangtargets}
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
if (NOT LLVM_ENABLE_IDE)
diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt
index e6ae4e19e..5ef01aea2 100644
--- a/lib/Headers/CMakeLists.txt
+++ b/lib/Headers/CMakeLists.txt
@@ -337,6 +337,7 @@ set(llvm_libc_wrapper_files
include(GetClangResourceDir)
get_clang_resource_dir(output_dir PREFIX ${LLVM_LIBRARY_OUTPUT_INTDIR}/.. SUBDIR include)
+set(header_install_dir ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}/include)
set(out_files)
set(generated_files)
diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt
index b5b6d2807..6b592d255 100644
--- a/tools/libclang/CMakeLists.txt
+++ b/tools/libclang/CMakeLists.txt
@@ -246,7 +246,7 @@ foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS})
COMPONENT
libclang-python-bindings
DESTINATION
- "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
+ "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
endforeach()
if(NOT LLVM_ENABLE_IDE)
add_custom_target(libclang-python-bindings)
diff --git a/tools/scan-build-py/CMakeLists.txt b/tools/scan-build-py/CMakeLists.txt
index 3aca22c0b..3115353e3 100644
--- a/tools/scan-build-py/CMakeLists.txt
+++ b/tools/scan-build-py/CMakeLists.txt
@@ -88,7 +88,7 @@ foreach(lib ${LibScanbuild})
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib})
install(FILES lib/libscanbuild/${lib}
- DESTINATION lib/libscanbuild
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild"
COMPONENT scan-build-py)
endforeach()
@@ -106,7 +106,7 @@ foreach(resource ${LibScanbuildResources})
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource})
install(FILES lib/libscanbuild/resources/${resource}
- DESTINATION lib/libscanbuild/resources
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild/resources"
COMPONENT scan-build-py)
endforeach()
@@ -122,7 +122,7 @@ foreach(lib ${LibEar})
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libear/${lib})
install(FILES lib/libear/${lib}
- DESTINATION lib/libear
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libear"
COMPONENT scan-build-py)
endforeach()

View file

@ -5,13 +5,15 @@ mkCoqDerivation rec {
owner = "DeepSpec";
inherit version;
defaultVersion = with lib.versions; lib.switch coq.version [
{ case = range "8.13" "8.20"; out = "5.1.2"; }
{ case = range "8.13" "8.20"; out = "5.2.0"; }
{ case = range "8.10" "8.16"; out = "4.0.0"; }
] null;
release."5.2.0".sha256 = "sha256-rKLz7ekZf/9xcQefBRsAdULmk81olzQ1W28y61vCDsY=";
release."5.1.2".sha256 = "sha256-uKJIjNXGWl0YS0WH52Rnr9Jz98Eo2k0X0qWB9hUYJMk=";
release."5.1.1".sha256 = "sha256-VlmPNwaGkdWrH7Z6DGXRosGtjuuQ+FBiGcadN2Hg5pY=";
release."5.1.0".sha256 = "sha256-ny7Mi1KgWADiFznkNJiRgD7Djc5SUclNgKOmWRxK+eo=";
release."4.0.0".sha256 = "0h5rhndl8syc24hxq1gch86kj7mpmgr89bxp2hmf28fd7028ijsm";
release."3.2.0".sha256 = "sha256-10ckCAqSQ0I3CZKlSllI1obOgWVxDagTd7eyhrl1xpE=";
releaseRev = v: "${v}";
propagatedBuildInputs = [ coq-ext-lib paco ];
meta = {

View file

@ -14,13 +14,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "libphonenumber";
version = "8.13.43";
version = "8.13.44";
src = fetchFromGitHub {
owner = "google";
repo = "libphonenumber";
rev = "v${finalAttrs.version}";
hash = "sha256-EJjtPqSk2p+J4f6tiaGEnik5LrrqGpGa0XfcnLLp9vg=";
hash = "sha256-DnYWHrOePDdQ9tZnKu8W9jnqpp5MjhjrrSfbD1jV/fU=";
};
patches = [

View file

@ -20,13 +20,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "indilib";
version = "2.0.8";
version = "2.0.9";
src = fetchFromGitHub {
owner = "indilib";
repo = "indi";
rev = "v${finalAttrs.version}";
hash = "sha256-qdPQMC8HCMdcbHyO8B0OFiefO+jM1ytA2dYNymE0Xuc=";
hash = "sha256-CV8nSz53wFeS/h7hGj9adN8qmyhsqOkTYj/0nuvhlSM=";
};
nativeBuildInputs = [

View file

@ -24,6 +24,7 @@
libexif,
libftdi1,
libgphoto2,
libgpiod_1,
libpng,
libraw,
ninja,
@ -44,7 +45,7 @@ let
owner = "indilib";
repo = "indi-3rdparty";
rev = "v${indilib.version}";
hash = "sha256-0M+k3A2Lw9EU9V5bX9dGztmdcJzc71XQZv8srmY5NmY=";
hash = "sha256-RhtdhMvseQUUFcKDuR1N5qc/86IxmQ/7owpjT+qweqc=";
};
buildIndi3rdParty =
@ -217,7 +218,7 @@ let
pname = "libfishcamp";
postPatch = ''
substituteInPlace CMakeLists.txt --replace "/lib/firmware" "lib/firmware"
substituteInPlace CMakeLists.txt --replace-fail "/lib/firmware" "lib/firmware"
'';
buildInputs = [
@ -327,7 +328,7 @@ let
postPatch = ''
substituteInPlace CMakeLists.txt \
--replace "set (PK_DATADIR /usr/share/pktriggercord)" "set (PK_DATADIR $out/share/pkgtriggercord)"
--replace-fail "set (PK_DATADIR /usr/share/pktriggercord)" "set (PK_DATADIR $out/share/pkgtriggercord)"
'';
buildInputs = [ indilib ];
@ -342,7 +343,7 @@ let
pname = "libplayerone";
postPatch = ''
substituteInPlace 99-player_one_astronomy.rules \
--replace "/bin/echo" "${coreutils}/bin/echo" \
--replace-fail "/bin/echo" "${coreutils}/bin/echo" \
--replace "/bin/sh" "${bash}/bin/sh"
'';
@ -362,14 +363,13 @@ let
pname = "libqhy";
postPatch = ''
sed -ie 's/LIBQHY_SOVERSION "24"/LIBQHY_SOVERSION "20"/' CMakeLists.txt
substituteInPlace CMakeLists.txt \
substituteInPlace --replace-fail CMakeLists.txt \
--replace "/lib/firmware" "lib/firmware"
substituteInPlace 85-qhyccd.rules \
--replace "/sbin/fxload" "${fxload}/sbin/fxload" \
--replace "/lib/firmware" "$out/lib/firmware" \
--replace "/bin/sleep" "${coreutils}/bin/sleep"
--replace-fail "/sbin/fxload" "${fxload}/sbin/fxload" \
--replace-fail "/lib/firmware" "$out/lib/firmware" \
--replace-fail "/bin/sleep" "${coreutils}/bin/sleep"
sed -e 's|-D $env{DEVNAME}|-p $env{BUSNUM},$env{DEVNUM}|' -i 85-qhyccd.rules
'';
@ -418,10 +418,10 @@ let
pname = "libsbig";
postPatch = ''
substituteInPlace CMakeLists.txt --replace "/lib/firmware" "lib/firmware"
substituteInPlace CMakeLists.txt --replace-fail "/lib/firmware" "lib/firmware"
substituteInPlace 51-sbig-debian.rules \
--replace "/sbin/fxload" "${fxload}/sbin/fxload" \
--replace "/lib/firmware" "$out/lib/firmware"
--replace-fail "/sbin/fxload" "${fxload}/sbin/fxload" \
--replace-fail "/lib/firmware" "$out/lib/firmware"
sed -e 's|-D $env{DEVNAME}|-p $env{BUSNUM},$env{DEVNUM}|' -i 51-sbig-debian.rules
'';
@ -516,7 +516,7 @@ in
libnova
];
postPatch = ''
substituteInPlace CMakeLists.txt --replace "/lib/udev/rules.d" "lib/udev/rules.d"
substituteInPlace CMakeLists.txt --replace-fail "/lib/udev/rules.d" "lib/udev/rules.d"
'';
};
@ -637,11 +637,11 @@ in
postPatch = ''
substituteInPlace CMakeLists.txt \
--replace "/lib/udev/rules.d" "lib/udev/rules.d" \
--replace "/lib/firmware" "lib/firmware"
--replace-fail "/lib/udev/rules.d" "lib/udev/rules.d" \
--replace-fail "/lib/firmware" "lib/firmware"
substituteInPlace 99-meadedsi.rules \
--replace "/sbin/fxload" "${fxload}/sbin/fxload" \
--replace "/lib/firmware" "$out/lib/firmware"
--replace-fail "/sbin/fxload" "${fxload}/sbin/fxload" \
--replace-fail "/lib/firmware" "$out/lib/firmware"
sed -e 's|-D $env{DEVNAME}|-p $env{BUSNUM},$env{DEVNUM}|' -i 99-meadedsi.rules
'';
@ -725,6 +725,16 @@ in
propagatedBuildInputs = [ libgphoto2 ];
};
indi-gpio = buildIndi3rdParty {
pname = "indi-gpio";
buildInputs = [
indilib
libgpiod_1
libnova
zlib
];
};
indi-gpsd = buildIndi3rdParty {
pname = "indi-gpsd";
buildInputs = [
@ -862,7 +872,7 @@ in
];
postPatch = ''
substituteInPlace CMakeLists.txt --replace "/lib/udev/rules.d" "lib/udev/rules.d"
substituteInPlace CMakeLists.txt --replace-fail "/lib/udev/rules.d" "lib/udev/rules.d"
'';
};
@ -918,7 +928,7 @@ in
];
postPatch = ''
substituteInPlace CMakeLists.txt --replace "/lib/udev/rules.d" "lib/udev/rules.d"
substituteInPlace CMakeLists.txt --replace-fail "/lib/udev/rules.d" "lib/udev/rules.d"
'';
meta.platforms = libqsi.meta.platforms;
@ -1015,7 +1025,7 @@ in
libusb1
];
postPatch = ''
substituteInPlace CMakeLists.txt --replace "/lib/udev/rules.d" "lib/udev/rules.d"
substituteInPlace CMakeLists.txt --replace-fail "/lib/udev/rules.d" "lib/udev/rules.d"
'';
};

View file

@ -1,12 +0,0 @@
diff --git a/nyxt.asd b/nyxt.asd
index ea2630ce..fdf837e4 100644
--- a/nyxt.asd
+++ b/nyxt.asd
@@ -480,7 +480,6 @@ The renderer is configured from NYXT_RENDERER or `*nyxt-renderer*'."))
:defsystem-depends-on ("nasdf")
:class :nasdf-system
:depends-on (nyxt/gi-gtk)
- :build-operation "program-op"
:build-pathname "nyxt"
:entry-point "nyxt:entry-point")

View file

@ -14,7 +14,7 @@
buildPythonPackage rec {
pname = "holidays";
version = "0.55";
version = "0.56";
pyproject = true;
disabled = pythonOlder "3.8";
@ -23,7 +23,7 @@ buildPythonPackage rec {
owner = "vacanza";
repo = "python-holidays";
rev = "refs/tags/v${version}";
hash = "sha256-4TJgXY0n7UMr5dGuhfE7WqPCgEBfvb0QUxJNYdaAOLE=";
hash = "sha256-oNqgkDIMWfu48vVt1382IWdwHhhvpoR2U60l9jSF6Qo=";
};
build-system = [

View file

@ -8,7 +8,7 @@
buildPythonPackage rec {
pname = "hstspreload";
version = "2024.8.1";
version = "2024.9.1";
pyproject = true;
disabled = pythonOlder "3.6";
@ -17,7 +17,7 @@ buildPythonPackage rec {
owner = "sethmlarson";
repo = "hstspreload";
rev = "refs/tags/${version}";
hash = "sha256-zVBwV+pCmZAnTJi8oyTCs9FxUktDFOxctGeB8fZcsfw=";
hash = "sha256-mpHJG2TqhlTNZ9fbyOZsoKusAvx8EiiP7dATCZh19dQ=";
};
build-system = [ setuptools ];

View file

@ -2,14 +2,13 @@
buildPythonPackage,
fetchPypi,
setuptools,
wheel,
comm,
ipykernel,
ipython,
jsonschema,
jupyterlab-widgets,
lib,
pytest7CheckHook,
pytestCheckHook,
pytz,
traitlets,
widgetsnbextension,
@ -17,20 +16,17 @@
buildPythonPackage rec {
pname = "ipywidgets";
version = "8.1.3";
version = "8.1.5";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-9fnuquCCsYI86erCV1JylS9A10iJOXKVbcCXAKY5LZw=";
hash = "sha256-hw5DsaNWVqgMGMlQO78tFoAtsctIfuxvqyfWgzgd3hc=";
};
nativeBuildInputs = [
setuptools
wheel
];
build-system = [ setuptools ];
propagatedBuildInputs = [
dependencies = [
comm
ipython
jupyterlab-widgets
@ -41,7 +37,7 @@ buildPythonPackage rec {
nativeCheckInputs = [
ipykernel
jsonschema
pytest7CheckHook
pytestCheckHook
pytz
];

View file

@ -2,41 +2,45 @@
lib,
buildPythonPackage,
fetchPypi,
notebook,
qtconsole,
jupyter-console,
nbconvert,
setuptools,
ipykernel,
ipywidgets,
jupyter-console,
jupyterlab,
nbconvert,
notebook,
}:
buildPythonPackage rec {
version = "1.0.0";
format = "setuptools";
pname = "jupyter";
version = "1.1.1";
pyproject = true;
src = fetchPypi {
inherit pname version;
sha256 = "d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f";
hash = "sha256-1VRnvOq96knX42JK9+M9WcN//1PtOjUOGslXvtcx3no=";
};
propagatedBuildInputs = [
notebook
qtconsole
jupyter-console
nbconvert
build-system = [ setuptools ];
dependencies = [
ipykernel
ipywidgets
jupyter-console
jupyterlab
nbconvert
notebook
];
# Meta-package, no tests
doCheck = false;
dontUsePythonImportsCheck = true;
meta = with lib; {
description = "Installs all the Jupyter components in one go";
homepage = "https://jupyter.org/";
license = licenses.bsd3;
platforms = platforms.all;
priority = 100; # This is a metapackage which is unimportant
};
}

View file

@ -7,13 +7,13 @@
buildPythonPackage rec {
pname = "jupyterlab-widgets";
version = "3.0.11";
version = "3.0.13";
pyproject = true;
src = fetchPypi {
pname = "jupyterlab_widgets";
inherit version;
hash = "sha256-3VrGeVk8lprynJvtBUwk8mhCuqUTUhFHNnVrwDXe7ic=";
hash = "sha256-opZtOFMowZQraDqM2WuJuN2CyLj4HdqQK7K8BtRvW+0=";
};
# jupyterlab is required to build from source but we use the pre-build package

View file

@ -21,14 +21,14 @@
buildPythonPackage rec {
pname = "jupyterlab";
version = "4.2.4";
version = "4.2.5";
pyproject = true;
disabled = pythonOlder "3.8";
src = fetchPypi {
inherit pname version;
hash = "sha256-NDqXn7lYL9CMhRGCPjIHAygc0HKgBJvNr9x6/tp/JTc=";
hash = "sha256-rn86G4y4i09VAJznn6fAb5nXDNY2Ae5KqRgV0FT0b3U=";
};
build-system = [

View file

@ -24,14 +24,14 @@
buildPythonPackage rec {
pname = "marimo";
version = "0.8.3";
version = "0.8.7";
pyproject = true;
disabled = pythonOlder "3.8";
src = fetchPypi {
inherit pname version;
hash = "sha256-t7VYKInsZ0hYW+svD0vnsMyGcMtIeuWaor8nijyDhn8=";
hash = "sha256-gxfb5MYPbl8KnvIL+93CyYLOaJ6UflqaikXLAWCS55g=";
};
build-system = [ setuptools ];

View file

@ -14,14 +14,14 @@
buildPythonPackage rec {
pname = "nbsphinx";
version = "0.9.4";
version = "0.9.5";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-BCpggG/CPVGbxb71nZVXBxORP+RC/adZ1T46r2IQR5Q=";
hash = "sha256-c2kW57Daso/JBPSprjtTqaUMKfzMYynAUvzHSFq88rc=";
};
build-system = [ setuptools ];

View file

@ -1,360 +0,0 @@
Based on upstream 66b7fb630903fdcf3e83b6b6d56d82e904264a20, adjusted to
apply to 1.15.0 & avoid implicit inclusion of changes from other
intermediate commits
diff --git a/onnx/checker.cc b/onnx/checker.cc
index fac56f56..c9fda9b2 100644
--- a/onnx/checker.cc
+++ b/onnx/checker.cc
@@ -13,7 +13,6 @@
#include <vector>
#include "onnx/common/file_utils.h"
-#include "onnx/common/path.h"
#include "onnx/defs/schema.h"
#include "onnx/defs/tensor_proto_util.h"
#include "onnx/proto_utils.h"
@@ -135,85 +134,7 @@ void check_tensor(const TensorProto& tensor, const CheckerContext& ctx) {
for (const StringStringEntryProto& entry : tensor.external_data()) {
if (entry.has_key() && entry.has_value() && entry.key() == "location") {
has_location = true;
-#ifdef _WIN32
- auto file_path = std::filesystem::path(utf8str_to_wstring(entry.value()));
- if (file_path.is_absolute()) {
- fail_check(
- "Location of external TensorProto ( tensor name: ",
- tensor.name(),
- ") should be a relative path, but it is an absolute path: ",
- entry.value());
- }
- auto relative_path = file_path.lexically_normal().make_preferred().wstring();
- // Check that normalized relative path contains ".." on Windows.
- if (relative_path.find(L"..", 0) != std::string::npos) {
- fail_check(
- "Data of TensorProto ( tensor name: ",
- tensor.name(),
- ") should be file inside the ",
- ctx.get_model_dir(),
- ", but the '",
- entry.value(),
- "' points outside the directory");
- }
- std::wstring data_path = path_join(utf8str_to_wstring(ctx.get_model_dir()), relative_path);
- struct _stat64 buff;
- if (_wstat64(data_path.c_str(), &buff) != 0) {
- fail_check(
- "Data of TensorProto ( tensor name: ",
- tensor.name(),
- ") should be stored in ",
- entry.value(),
- ", but it doesn't exist or is not accessible.");
- }
-#else // POSIX
- if (entry.value().empty()) {
- fail_check("Location of external TensorProto ( tensor name: ", tensor.name(), ") should not be empty.");
- } else if (entry.value()[0] == '/') {
- fail_check(
- "Location of external TensorProto ( tensor name: ",
- tensor.name(),
- ") should be a relative path, but it is an absolute path: ",
- entry.value());
- }
- std::string relative_path = clean_relative_path(entry.value());
- // Check that normalized relative path contains ".." on POSIX
- if (relative_path.find("..", 0) != std::string::npos) {
- fail_check(
- "Data of TensorProto ( tensor name: ",
- tensor.name(),
- ") should be file inside the ",
- ctx.get_model_dir(),
- ", but the '",
- entry.value(),
- "' points outside the directory");
- }
- std::string data_path = path_join(ctx.get_model_dir(), relative_path);
- // use stat64 to check whether the file exists
-#if defined(__APPLE__) || defined(__wasm__) || !defined(__GLIBC__)
- struct stat buffer; // APPLE, wasm and non-glic stdlibs do not have stat64
- if (stat((data_path).c_str(), &buffer) != 0) {
-#else
- struct stat64 buffer; // All POSIX under glibc except APPLE and wasm have stat64
- if (stat64((data_path).c_str(), &buffer) != 0) {
-#endif
- fail_check(
- "Data of TensorProto ( tensor name: ",
- tensor.name(),
- ") should be stored in ",
- data_path,
- ", but it doesn't exist or is not accessible.");
- }
- // Do not allow symlinks or directories.
- if (!S_ISREG(buffer.st_mode)) {
- fail_check(
- "Data of TensorProto ( tensor name: ",
- tensor.name(),
- ") should be stored in ",
- data_path,
- ", but it is not regular file.");
- }
-#endif
+ resolve_external_data_location(ctx.get_model_dir(), entry.value(), tensor.name());
}
}
if (!has_location) {
@@ -1054,6 +975,93 @@ void check_model(const ModelProto& model, bool full_check, bool skip_opset_compa
}
}
+std::string resolve_external_data_location(
+ const std::string& base_dir,
+ const std::string& location,
+ const std::string& tensor_name) {
+#ifdef _WIN32
+ auto file_path = std::filesystem::path(utf8str_to_wstring(location));
+ if (file_path.is_absolute()) {
+ fail_check(
+ "Location of external TensorProto ( tensor name: ",
+ tensor_name,
+ ") should be a relative path, but it is an absolute path: ",
+ location);
+ }
+ auto relative_path = file_path.lexically_normal().make_preferred().wstring();
+ // Check that normalized relative path contains ".." on Windows.
+ if (relative_path.find(L"..", 0) != std::string::npos) {
+ fail_check(
+ "Data of TensorProto ( tensor name: ",
+ tensor_name,
+ ") should be file inside the ",
+ base_dir,
+ ", but the '",
+ location,
+ "' points outside the directory");
+ }
+ std::wstring data_path = path_join(utf8str_to_wstring(base_dir), relative_path);
+ struct _stat64 buff;
+ if (_wstat64(data_path.c_str(), &buff) != 0) {
+ fail_check(
+ "Data of TensorProto ( tensor name: ",
+ tensor_name,
+ ") should be stored in ",
+ location,
+ ", but it doesn't exist or is not accessible.");
+ }
+ return wstring_to_utf8str(data_path);
+#else // POSIX
+ if (location.empty()) {
+ fail_check("Location of external TensorProto ( tensor name: ", tensor_name, ") should not be empty.");
+ } else if (location[0] == '/') {
+ fail_check(
+ "Location of external TensorProto ( tensor name: ",
+ tensor_name,
+ ") should be a relative path, but it is an absolute path: ",
+ location);
+ }
+ std::string relative_path = clean_relative_path(location);
+ // Check that normalized relative path contains ".." on POSIX
+ if (relative_path.find("..", 0) != std::string::npos) {
+ fail_check(
+ "Data of TensorProto ( tensor name: ",
+ tensor_name,
+ ") should be file inside the ",
+ base_dir,
+ ", but the '",
+ location,
+ "' points outside the directory");
+ }
+ std::string data_path = path_join(base_dir, relative_path);
+ // use stat64 to check whether the file exists
+#if defined(__APPLE__) || defined(__wasm__) || !defined(__GLIBC__)
+ struct stat buffer; // APPLE, wasm and non-glic stdlibs do not have stat64
+ if (stat((data_path).c_str(), &buffer) != 0) {
+#else
+ struct stat64 buffer; // All POSIX under glibc except APPLE and wasm have stat64
+ if (stat64((data_path).c_str(), &buffer) != 0) {
+#endif
+ fail_check(
+ "Data of TensorProto ( tensor name: ",
+ tensor_name,
+ ") should be stored in ",
+ data_path,
+ ", but it doesn't exist or is not accessible.");
+ }
+ // Do not allow symlinks or directories.
+ if (!S_ISREG(buffer.st_mode)) {
+ fail_check(
+ "Data of TensorProto ( tensor name: ",
+ tensor_name,
+ ") should be stored in ",
+ data_path,
+ ", but it is not regular file.");
+ }
+ return data_path;
+#endif
+}
+
std::set<std::string> experimental_ops = {
"ATen",
"Affine",
diff --git a/onnx/checker.h b/onnx/checker.h
index 6796acab..83012213 100644
--- a/onnx/checker.h
+++ b/onnx/checker.h
@@ -160,7 +160,10 @@ void check_model_local_functions(
void check_model(const ModelProto& model, bool full_check = false, bool skip_opset_compatibility_check = false);
void check_model(const std::string& model_path, bool full_check = false, bool skip_opset_compatibility_check = false);
-
+std::string resolve_external_data_location(
+ const std::string& base_dir,
+ const std::string& location,
+ const std::string& tensor_name);
bool check_is_experimental_op(const NodeProto& node);
} // namespace checker
diff --git a/onnx/common/path.h b/onnx/common/path.h
index 6eaf5e67..09212747 100644
--- a/onnx/common/path.h
+++ b/onnx/common/path.h
@@ -31,11 +31,22 @@ inline std::wstring utf8str_to_wstring(const std::string& utf8str) {
if (utf8str.size() > INT_MAX) {
fail_check("utf8str_to_wstring: string is too long for converting to wstring.");
}
- int size_required = MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(), (int)utf8str.size(), NULL, 0);
+ int size_required = MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(), static_cast<int>(utf8str.size()), NULL, 0);
std::wstring ws_str(size_required, 0);
- MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(), (int)utf8str.size(), &ws_str[0], size_required);
+ MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(), static_cast<int>(utf8str.size()), &ws_str[0], size_required);
return ws_str;
}
+inline std::string wstring_to_utf8str(const std::wstring& ws_str) {
+ if (ws_str.size() > INT_MAX) {
+ fail_check("wstring_to_utf8str: string is too long for converting to UTF-8.");
+ }
+ int size_required =
+ WideCharToMultiByte(CP_UTF8, 0, ws_str.c_str(), static_cast<int>(ws_str.size()), NULL, 0, NULL, NULL);
+ std::string utf8str(size_required, 0);
+ WideCharToMultiByte(
+ CP_UTF8, 0, ws_str.c_str(), static_cast<int>(ws_str.size()), &utf8str[0], size_required, NULL, NULL);
+ return utf8str;
+}
#else
std::string path_join(const std::string& origin, const std::string& append);
diff --git a/onnx/cpp2py_export.cc b/onnx/cpp2py_export.cc
index bc2594db..83cea68f 100644
--- a/onnx/cpp2py_export.cc
+++ b/onnx/cpp2py_export.cc
@@ -545,6 +545,8 @@ PYBIND11_MODULE(onnx_cpp2py_export, onnx_cpp2py_export) {
"full_check"_a = false,
"skip_opset_compatibility_check"_a = false);
+ checker.def("_resolve_external_data_location", &checker::resolve_external_data_location);
+
// Submodule `version_converter`
auto version_converter = onnx_cpp2py_export.def_submodule("version_converter");
version_converter.doc() = "VersionConverter submodule";
diff --git a/onnx/external_data_helper.py b/onnx/external_data_helper.py
index bbc2717f..05c486c6 100644
--- a/onnx/external_data_helper.py
+++ b/onnx/external_data_helper.py
@@ -8,6 +8,7 @@ import uuid
from itertools import chain
from typing import Callable, Iterable, Optional
+import onnx.onnx_cpp2py_export.checker as c_checker
from onnx.onnx_pb import AttributeProto, GraphProto, ModelProto, TensorProto
@@ -39,9 +40,9 @@ def load_external_data_for_tensor(tensor: TensorProto, base_dir: str) -> None:
base_dir: directory that contains the external data.
"""
info = ExternalDataInfo(tensor)
- file_location = _sanitize_path(info.location)
- external_data_file_path = os.path.join(base_dir, file_location)
-
+ external_data_file_path = c_checker._resolve_external_data_location( # type: ignore[attr-defined]
+ base_dir, info.location, tensor.name
+ )
with open(external_data_file_path, "rb") as data_file:
if info.offset:
data_file.seek(info.offset)
@@ -259,14 +260,6 @@ def _get_attribute_tensors(onnx_model_proto: ModelProto) -> Iterable[TensorProto
yield from _get_attribute_tensors_from_graph(onnx_model_proto.graph)
-def _sanitize_path(path: str) -> str:
- """Remove path components which would allow traversing up a directory tree from a base path.
-
- Note: This method is currently very basic and should be expanded.
- """
- return path.lstrip("/.")
-
-
def _is_valid_filename(filename: str) -> bool:
"""Utility to check whether the provided filename is valid."""
exp = re.compile('^[^<>:;,?"*|/]+$')
diff --git a/onnx/test/test_external_data.py b/onnx/test/test_external_data.py
index 63f6b4ef..bb14d279 100644
--- a/onnx/test/test_external_data.py
+++ b/onnx/test/test_external_data.py
@@ -3,6 +3,7 @@
# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations
+import itertools
import os
import pathlib
import tempfile
@@ -204,6 +205,52 @@ class TestLoadExternalDataSingleFile(TestLoadExternalDataBase):
attribute_tensor = new_model.graph.node[0].attribute[0].t
np.testing.assert_allclose(to_array(attribute_tensor), self.attribute_value)
+ @parameterized.parameterized.expand(itertools.product((True, False), (True, False)))
+ def test_save_external_invalid_single_file_data_and_check(
+ self, use_absolute_path: bool, use_model_path: bool
+ ) -> None:
+ model = onnx.load_model(self.model_filename, self.serialization_format)
+
+ model_dir = os.path.join(self.temp_dir, "save_copy")
+ os.mkdir(model_dir)
+
+ traversal_external_data_dir = os.path.join(
+ self.temp_dir, "invlid_external_data"
+ )
+ os.mkdir(traversal_external_data_dir)
+
+ if use_absolute_path:
+ traversal_external_data_location = os.path.join(
+ traversal_external_data_dir, "tensors.bin"
+ )
+ else:
+ traversal_external_data_location = "../invlid_external_data/tensors.bin"
+
+ external_data_dir = os.path.join(self.temp_dir, "external_data")
+ os.mkdir(external_data_dir)
+ new_model_filepath = os.path.join(model_dir, "model.onnx")
+
+ def convert_model_to_external_data_no_check(model: ModelProto, location: str):
+ for tensor in model.graph.initializer:
+ if tensor.HasField("raw_data"):
+ set_external_data(tensor, location)
+
+ convert_model_to_external_data_no_check(
+ model,
+ location=traversal_external_data_location,
+ )
+
+ onnx.save_model(model, new_model_filepath, self.serialization_format)
+ if use_model_path:
+ with self.assertRaises(onnx.checker.ValidationError):
+ _ = onnx.load_model(new_model_filepath, self.serialization_format)
+ else:
+ onnx_model = onnx.load_model(
+ new_model_filepath, self.serialization_format, load_external_data=False
+ )
+ with self.assertRaises(onnx.checker.ValidationError):
+ load_external_data_for_model(onnx_model, external_data_dir)
+
@parameterized.parameterized_class(
[

View file

@ -9,10 +9,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
[[package]]
name = "atomic_refcell"
version = "0.1.13"
name = "async-lock"
version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c"
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
dependencies = [
"event-listener",
"event-listener-strategy",
"pin-project-lite",
]
[[package]]
name = "async-trait"
version = "0.1.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "autocfg"
@ -20,6 +36,12 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
[[package]]
name = "bitflags"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
[[package]]
name = "bumpalo"
version = "3.16.0"
@ -33,10 +55,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "fastrand"
version = "2.1.0"
name = "concurrent-queue"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
[[package]]
name = "dashmap"
version = "6.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28"
dependencies = [
"cfg-if",
"crossbeam-utils",
"hashbrown",
"lock_api",
"once_cell",
"parking_lot_core",
]
[[package]]
name = "event-listener"
version = "5.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
dependencies = [
"concurrent-queue",
"parking",
"pin-project-lite",
]
[[package]]
name = "event-listener-strategy"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1"
dependencies = [
"event-listener",
"pin-project-lite",
]
[[package]]
name = "fastrand"
version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
dependencies = [
"getrandom",
]
@ -54,6 +126,12 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "heck"
version = "0.5.0"
@ -74,18 +152,28 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
[[package]]
name = "js-sys"
version = "0.3.69"
version = "0.3.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
dependencies = [
"wasm-bindgen",
]
[[package]]
name = "libc"
version = "0.2.155"
version = "0.2.158"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
[[package]]
name = "lock_api"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
dependencies = [
"autocfg",
"scopeguard",
]
[[package]]
name = "log"
@ -114,6 +202,31 @@ version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "parking"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
[[package]]
name = "parking_lot_core"
version = "0.9.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
"windows-targets",
]
[[package]]
name = "pin-project-lite"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
[[package]]
name = "portable-atomic"
version = "1.7.0"
@ -131,7 +244,7 @@ dependencies = [
[[package]]
name = "pycrdt"
version = "0.9.8"
version = "0.9.11"
dependencies = [
"pyo3",
"yrs",
@ -202,13 +315,22 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.36"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
dependencies = [
"proc-macro2",
]
[[package]]
name = "redox_syscall"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
dependencies = [
"bitflags",
]
[[package]]
name = "ryu"
version = "1.0.18"
@ -216,19 +338,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
[[package]]
name = "serde"
version = "1.0.206"
name = "scopeguard"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b3e4cd94123dd520a128bcd11e34d9e9e423e7e3e50425cb1b4b1e3549d0284"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "serde"
version = "1.0.209"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.206"
version = "1.0.209"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fabfb6138d2383ea8208cf98ccf69cdfb1aff4088460681d84189aa259762f97"
checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170"
dependencies = [
"proc-macro2",
"quote",
@ -237,9 +365,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.124"
version = "1.0.127"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d"
checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad"
dependencies = [
"itoa",
"memchr",
@ -264,9 +392,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "syn"
version = "2.0.74"
version = "2.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7"
checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
dependencies = [
"proc-macro2",
"quote",
@ -319,19 +447,20 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
version = "0.2.92"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
dependencies = [
"cfg-if",
"once_cell",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.92"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
dependencies = [
"bumpalo",
"log",
@ -344,9 +473,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.92"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@ -354,9 +483,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.92"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
dependencies = [
"proc-macro2",
"quote",
@ -367,18 +496,84 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.92"
version = "0.2.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
[[package]]
name = "windows-targets"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_gnullvm",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "yrs"
version = "0.19.2"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8ca5126331b9a5ef5bb10f3f1c3d01b05f298d348c66f8fb15497d83ee73176"
checksum = "7a6eac182a01ef4cbf4edb5e71e2c560a34144ae82680aab66a62c172b7ae2a2"
dependencies = [
"arc-swap",
"atomic_refcell",
"async-lock",
"async-trait",
"dashmap",
"fastrand",
"serde",
"serde_json",

View file

@ -16,14 +16,14 @@
buildPythonPackage rec {
pname = "pycrdt";
version = "0.9.8";
version = "0.9.11";
pyproject = true;
src = fetchFromGitHub {
owner = "jupyter-server";
repo = "pycrdt";
rev = "refs/tags/v${version}";
hash = "sha256-W93rLSDcCB9jrxC/Z88ToCkcfMGnCTGjBkVRNk3lLaI=";
hash = "sha256-62r3AO+x9du6UjIdtqDPmwJ30/YmQxbPcCXgOaGNtL0=";
};
postPatch = ''
@ -39,6 +39,8 @@ buildPythonPackage rec {
buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
dependencies = [ anyio ];
pythonImportsCheck = [ "pycrdt" ];
nativeCheckInputs = [
@ -52,11 +54,11 @@ buildPythonPackage rec {
passthru.updateScript = nix-update-script { extraArgs = [ "--generate-lockfile" ]; };
meta = with lib; {
meta = {
description = "CRDTs based on Yrs";
homepage = "https://github.com/jupyter-server/pycrdt";
changelog = "https://github.com/jupyter-server/pycrdt/releases/tag/${lib.removePrefix "refs/tags/" src.rev}";
license = licenses.mit;
maintainers = teams.jupyter.members;
license = lib.licenses.mit;
maintainers = lib.teams.jupyter.members;
};
}

View file

@ -14,14 +14,14 @@
buildPythonPackage rec {
pname = "rules";
version = "3.4.0";
version = "3.5.0";
pyproject = true;
src = fetchFromGitHub {
owner = "dfunckt";
repo = "django-rules";
rev = "v${version}";
hash = "sha256-fxLaxjni+0S59vtvKBduR0pYMwJWWBPzR5mnH+j6gVE=";
rev = "refs/tags/v${version}";
hash = "sha256-8Kay2b2uwaI/ml/cPpcj9svoDQI0ptV8tyGeZ76SgZw=";
};
build-system = [ setuptools ];

View file

@ -1,25 +0,0 @@
From 02266a00ce0eb6a089e7efe07816da1aa5152fc9 Mon Sep 17 00:00:00 2001
From: Maksim Terpilovskii <maximtrp@gmail.com>
Date: Sun, 31 Jul 2022 12:25:14 +0300
Subject: [PATCH] increased abs tolerance for wilcoxon test
---
tests/test_posthocs.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/test_posthocs.py b/tests/test_posthocs.py
index 956d808..8cc65e4 100644
--- a/tests/test_posthocs.py
+++ b/tests/test_posthocs.py
@@ -471,7 +471,7 @@ class TestPosthocs(unittest.TestCase):
[2.857818e-06, 1.230888e-05, 1]])
results = sp.posthoc_wilcoxon(self.df.sort_index(), val_col = 'pulse', group_col = 'kind')
- self.assertTrue(np.allclose(results, r_results))
+ self.assertTrue(np.allclose(results, r_results, atol=1e-4))
def test_posthoc_scheffe(self):
--
2.36.1

View file

@ -1,34 +0,0 @@
From 5416ffba3ab01aebab3909400b5a9e847022898e Mon Sep 17 00:00:00 2001
From: Maksim Terpilovskii <maximtrp@gmail.com>
Date: Thu, 16 Mar 2023 00:20:02 +0300
Subject: [PATCH] Update test_posthocs.py
---
tests/test_posthocs.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/test_posthocs.py b/tests/test_posthocs.py
index 8cc65e4..42ca5f3 100644
--- a/tests/test_posthocs.py
+++ b/tests/test_posthocs.py
@@ -71,7 +71,7 @@ class TestPosthocs(unittest.TestCase):
a = splt.sign_plot(x, flat=True, labels=False)
with self.assertRaises(ValueError):
splt.sign_plot(x.astype(float), flat=True, labels=False)
- self.assertTrue(isinstance(a, ma._subplots.Axes))
+ self.assertTrue(isinstance(a, ma._axes.Axes))
def test_sign_plot_nonflat(self):
@@ -85,7 +85,7 @@ class TestPosthocs(unittest.TestCase):
with self.assertRaises(ValueError):
splt.sign_plot(x.astype(np.int64), labels=False)
- self.assertTrue(isinstance(a, ma._subplots.Axes) and isinstance(cbar, mpl.colorbar.ColorbarBase))
+ self.assertTrue(isinstance(a, ma._axes.Axes) and isinstance(cbar, mpl.colorbar.ColorbarBase))
# Outliers tests
def test_outliers_iqr(self):
--
2.36.1

View file

@ -1,96 +0,0 @@
diff --git a/sopel/plugins/handlers.py b/sopel/plugins/handlers.py
index 76902aa0..05f0279d 100644
--- a/sopel/plugins/handlers.py
+++ b/sopel/plugins/handlers.py
@@ -46,20 +46,15 @@ from __future__ import absolute_import, division, print_function, unicode_litera
import imp
import importlib
+import importlib.util
import inspect
import itertools
import os
+import sys
from sopel import loader
from . import exceptions
-try:
- reload = importlib.reload
-except AttributeError:
- # py2: no reload function
- # TODO: imp is deprecated, to be removed when py2 support is dropped
- reload = imp.reload
-
class AbstractPluginHandler(object):
"""Base class for plugin handlers.
@@ -301,7 +296,7 @@ class PyModulePlugin(AbstractPluginHandler):
This method assumes the plugin is already loaded.
"""
- self._module = reload(self._module)
+ self._module = importlib.reload(self._module)
def is_loaded(self):
return self._module is not None
@@ -402,45 +397,31 @@ class PyFilePlugin(PyModulePlugin):
if good_file:
name = os.path.basename(filename)[:-3]
- module_type = imp.PY_SOURCE
+ spec = importlib.util.spec_from_file_location(
+ name,
+ filename,
+ )
elif good_dir:
name = os.path.basename(filename)
- module_type = imp.PKG_DIRECTORY
+ spec = importlib.util.spec_from_file_location(
+ name,
+ os.path.join(filename, '__init__.py'),
+ submodule_search_locations=filename,
+ )
else:
raise exceptions.PluginError('Invalid Sopel plugin: %s' % filename)
self.filename = filename
self.path = filename
- self.module_type = module_type
+ self.module_spec = spec
super(PyFilePlugin, self).__init__(name)
def _load(self):
- # The current implementation uses `imp.load_module` to perform the
- # load action, which also reloads the module. However, `imp` is
- # deprecated in Python 3, so that might need to be changed when the
- # support for Python 2 is dropped.
- #
- # However, the solution for Python 3 is non-trivial, since the
- # `importlib` built-in module does not have a similar function,
- # therefore requires to dive into its public internals
- # (``importlib.machinery`` and ``importlib.util``).
- #
- # All of that is doable, but represents a lot of work. As long as
- # Python 2 is supported, we can keep it for now.
- #
- # TODO: switch to ``importlib`` when Python2 support is dropped.
- if self.module_type == imp.PY_SOURCE:
- with open(self.path) as mod:
- description = ('.py', 'U', self.module_type)
- mod = imp.load_module(self.name, mod, self.path, description)
- elif self.module_type == imp.PKG_DIRECTORY:
- description = ('', '', self.module_type)
- mod = imp.load_module(self.name, None, self.path, description)
- else:
- raise TypeError('Unsupported module type')
-
- return mod
+ module = importlib.util.module_from_spec(self.module_spec)
+ sys.modules[self.name] = module
+ self.module_spec.loader.exec_module(module)
+ return module
def get_meta_description(self):
"""Retrieve a meta description for the plugin.

View file

@ -7,12 +7,12 @@
buildPythonPackage rec {
pname = "widgetsnbextension";
version = "4.0.11";
version = "4.0.13";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-iyKo8ZEL/RiOWW/n/AXcvYfoEMikugEL2z2oZjc5hHQ=";
hash = "sha256-/8tnvJ/r0QI0o2J5X2Q5J/TgwF2TQscntl0jhPj+rLY=";
};
nativeBuildInputs = [ jupyter-packaging ];

View file

@ -48,11 +48,11 @@ buildGoModule rec {
installShellCompletion completion/{bash,fish,zsh}/*
substituteInPlace $out/share/bash-completion/completions/task.bash \
--replace-warn 'complete -F _task task' 'complete -F _task task go-task'
--replace-fail 'complete -F _task task' 'complete -F _task task go-task'
substituteInPlace $out/share/fish/vendor_completions.d/task.fish \
--replace-warn 'complete -c $GO_TASK_PROGNAME' 'complete -c $GO_TASK_PROGNAME -c go-task'
--replace-fail 'complete -c $GO_TASK_PROGNAME' 'complete -c $GO_TASK_PROGNAME -c go-task'
substituteInPlace $out/share/zsh/site-functions/_task \
--replace-warn '#compdef task' '#compdef task go-task'
--replace-fail '#compdef task' '#compdef task go-task'
'';
passthru.tests = {

View file

@ -1,12 +1,12 @@
{ lib, stdenv, fetchurl, alsa-lib, fixDarwinDylibNames }:
{ lib, stdenv, fetchurl, alsa-lib, fixDarwinDylibNames, gitUpdater }:
stdenv.mkDerivation (finalAttrs: {
pname = "sndio";
version = "1.9.0";
version = "1.10.0";
src = fetchurl {
url = "https://www.sndio.org/sndio-${finalAttrs.version}.tar.gz";
hash = "sha256-8wgm/JwH42nTkk1fzt9qClPA30rh9atQ/pzygFQPaZo=";
hash = "sha256-vr07/QHFDJN2zz54FLk3m+2eF9A5O1ETt+t6PQ0DjFQ=";
};
nativeBuildInputs = lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
@ -18,6 +18,13 @@ stdenv.mkDerivation (finalAttrs: {
'';
enableParallelBuilding = true;
# does not provide --disable-static
dontDisableStatic = true;
passthru.updateScript = gitUpdater {
url = "https://sndio.org/git/sndio";
rev-prefix = "v";
};
meta = {
homepage = "https://www.sndio.org";

View file

@ -8,13 +8,13 @@ let
x86_64-darwin = "x64";
}."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
hash = {
x64-linux_hash = "sha256-ulWg9BhDr/RFE4sfXGf+i9W0KpOYKjtk49qBeIwI9dU=";
arm64-linux_hash = "sha256-iSXXx89I7Pj2nAuapHwJtIblj+TDrd/k9OiBK8QExSg=";
x64-osx_hash = "sha256-xjnDePaxQWRNo1VmH1sbp0Xtvbac3nu0+fiMg0wMddg=";
x64-linux_hash = "sha256-RrxGd96O9vFtBR5AEKTr58XfHzYST3TW3eG95+5vsHA=";
arm64-linux_hash = "sha256-SqRE62hIOmaE6kAyu7903OiDQC2byd/Q4S1WKxpIwuU=";
x64-osx_hash = "sha256-9/P9B4iIcB0/OF/ZjdAvaPhrwJ1VJtbL6NgYJ5CVf8A=";
}."${arch}-${os}_hash";
in stdenv.mkDerivation rec {
pname = "lidarr";
version = "2.3.3.4204";
version = "2.5.3.4341";
src = fetchurl {
url = "https://github.com/lidarr/Lidarr/releases/download/v${version}/Lidarr.master.${version}.${os}-core-${arch}.tar.gz";

View file

@ -17,20 +17,20 @@ let
in
python3.pkgs.buildPythonApplication rec {
pname = "matrix-synapse";
version = "1.113.0";
version = "1.114.0";
format = "pyproject";
src = fetchFromGitHub {
owner = "element-hq";
repo = "synapse";
rev = "v${version}";
hash = "sha256-8Ts2QOSugPU8Do1Mpusez9tSqiaB+UzCWWY4XJk/KRM=";
hash = "sha256-AvUc6vE2gjsUEbRLaexDbvEPwJio7W3YMyN3fJvr4c0=";
};
cargoDeps = rustPlatform.fetchCargoTarball {
inherit src;
name = "${pname}-${version}";
hash = "sha256-Jlnv3GAobrXaO5fBq6oI9Gq8phz2/jFc+QIUYsUyeNo=";
hash = "sha256-cAGTEi7UwNVfTzckWBpjxfEMWXZRZDdkXIhx/HjAiTg=";
};
postPatch = ''

View file

@ -33,6 +33,7 @@ python3.pkgs.buildPythonApplication rec {
chardet
cryptography
dnspython
elementpath
eventlet
feedgen
flask

View file

@ -15,11 +15,11 @@
}:
python3Packages.buildPythonApplication rec {
pname = "borgmatic";
version = "1.8.13";
version = "1.8.14";
src = fetchPypi {
inherit pname version;
hash = "sha256-4Z5imxNjfvd4fkpFsggSO9XueN5Yzcz4RCl+BqmddCM=";
hash = "sha256-WYs7wiwZ1TvTdeUpWv7FbREXWfdGcYRarP4FXFOfp0Y=";
};
nativeCheckInputs = with python3Packages; [ flexmock pytestCheckHook pytest-cov ] ++ passthru.optional-dependencies.apprise;

View file

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "gvproxy";
version = "0.7.4";
version = "0.7.5";
src = fetchFromGitHub {
owner = "containers";
repo = "gvisor-tap-vsock";
rev = "v${version}";
hash = "sha256-ovNYPYLC01xt7uiaXkFsLHiywAhQVa0tELk/AA8dxqs=";
hash = "sha256-A2nG3Or5EhUSjTIpV05rWVcLJpGHtAWP5/n07KjM/E8=";
};
vendorHash = null;

View file

@ -5,20 +5,13 @@
, runCommand
, python3
, encryptionSupport ? true
, sqliteSupport ? true
}:
let
python = python3.override {
self = python;
packageOverrides = final: prev: {
# aiosqlite>=0.16,<0.19
aiosqlite = prev.aiosqlite.overridePythonAttrs (old: rec {
version = "0.18.0";
src = old.src.override {
rev = "refs/tags/v${version}";
hash = "sha256-yPGSKqjOz1EY5/V0oKz2EiZ90q2O4TINoXdxHuB7Gqk=";
};
});
# SQLAlchemy>=1,<1.4
# SQLAlchemy 2.0's derivation is very different, so don't override, just write it from scratch
# (see https://github.com/NixOS/nixpkgs/blob/65dbed73949e4c0207e75dcc7271b29f9e457670/pkgs/development/python-modules/sqlalchemy/default.nix)
@ -43,29 +36,27 @@ let
maubot = python.pkgs.buildPythonPackage rec {
pname = "maubot";
version = "0.4.2";
disabled = python.pythonOlder "3.9";
version = "0.5.0";
disabled = python.pythonOlder "3.10";
src = fetchPypi {
inherit pname version;
hash = "sha256-svdg7KpCy/+T9Hu+FbsgLNU8nVuIn0flPg7qyn7I+30=";
hash = "sha256-PkeZ7C4Srs2I10g7X1XD/HclumUwWTYj2F3J2CxN4Hs=";
};
patches = [
# add entry point - https://github.com/maubot/maubot/pull/146
(fetchpatch {
url = "https://github.com/maubot/maubot/commit/283f0a3ed5dfae13062b6f0fd153fbdc477f4381.patch";
sha256 = "0yn5357z346qzy5v5g124mgiah1xsi9yyfq42zg028c8paiw8s8x";
url = "https://github.com/maubot/maubot/commit/ef6e23eccb530187dd3447b6aac2047d4a32fb83.patch";
hash = "sha256-d5fu47F93aXZmk6MiSsxTE8pHjMKNL0FUdU+ynUqY2o=";
})
];
propagatedBuildInputs = with python.pkgs; [
setuptools
# requirements.txt
(mautrix.override { withOlm = encryptionSupport; })
aiohttp
yarl
sqlalchemy
asyncpg
aiosqlite
commonmark
@ -77,12 +68,22 @@ let
colorama
questionary
jinja2
setuptools
]
# optional-requirements.txt
++ lib.optionals encryptionSupport [
python-olm
pycryptodome
unpaddedbase64
]
++ lib.optionals sqliteSupport [
sqlalchemy
];
# used for plugin tests
propagatedNativeBuildInputs = with python.pkgs; [
pytest
pytest-asyncio
];
postInstall = ''

View file

@ -1,35 +1,4 @@
{
"activity-tracker": {
"attrs": {
"meta": {
"changelog": "https://github.com/williamkray/maubot-kickbot/releases",
"description": "A plugin that minimally tracks user activity within a space. Useful for kicking inactive users from a private community.",
"downloadPage": "https://github.com/williamkray/maubot-kickbot/releases",
"homepage": "https://github.com/williamkray/maubot-kickbot"
}
},
"github": {
"hash": "sha256-TLaGpLrTR4TLR0TjY3v9FFST8JxEP4swJ7kzt0fDwJI=",
"owner": "williamkray",
"repo": "maubot-kickbot",
"rev": "a4c31c7a1492585f2155705be8cab7e3f73f6b69"
},
"manifest": {
"database": true,
"database_type": "asyncpg",
"extra_files": [
"base-config.yaml"
],
"id": "org.jobmachine.kickbot",
"license": "MIT",
"main_class": "KickBot",
"maubot": "0.1.0",
"modules": [
"kickbot"
],
"version": "0.0.10"
}
},
"alertbot": {
"attrs": {
"meta": {
@ -116,17 +85,17 @@
"attrs": {
"meta": {
"changelog": "https://github.com/coffeebank/coffee-maubot/releases",
"description": "An anime/manga bot for Matrix. Search anime, manga (manhwa/manhua), and light novels from Anilist. See series info, status, and episodes/chapters.",
"description": "An anime/manga bot for Matrix. Search anime, manga (manhwa/manhua), and light novels. See series info, status, episodes/chapters, and tags. Search Anilist, MangaDex, and Batoto.",
"downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
"homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/animemanga"
},
"postPatch": "cd animemanga"
},
"github": {
"hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
"hash": "sha256-dKSXBwkIVFnoTcjXQXPf8xdzP44VZR8Bq3KQhsBpABA=",
"owner": "coffeebank",
"repo": "coffee-maubot",
"rev": "b25112508d65f7560910e67d3074dd60f4048821"
"rev": "f2329cf643a80fc7200fd225ba697fea639f2e99"
},
"manifest": {
"database": false,
@ -140,7 +109,7 @@
"modules": [
"animemanga"
],
"version": "0.1.1.216"
"version": "0.2.0.66"
}
},
"antithread": {
@ -201,36 +170,36 @@
"version": "1.0.0"
}
},
"bard": {
"awareness-bot": {
"attrs": {
"meta": {
"changelog": "https://github.com/ser/maubot-bard/releases",
"description": "Allow your maubot instance to return queries from Google(TM) Bard(TM) pseudoAI",
"downloadPage": "https://github.com/ser/maubot-bard/releases",
"homepage": "https://github.com/ser/maubot-bard/",
"license": "MIT"
"changelog": "https://github.com/besendorf/awareness-bot/releases",
"description": "maubot plugin that helps moderate a matrix room by muting users that use foul language",
"downloadPage": "https://github.com/besendorf/awareness-bot/releases",
"homepage": "https://github.com/besendorf/awareness-bot",
"license": "AGPL-3.0-only"
}
},
"github": {
"hash": "sha256-E8pz71wfH+SmFNzBcPUrnqK0xs7wlyB6SaRXH/PDqKw=",
"owner": "ser",
"repo": "maubot-bard",
"rev": "4ff3ce8d86ed19c973dee89228779fed74811341"
"hash": "sha256-ZXmsDQSr07M46BLRmSnKw1KkBwCQt7Ki6dPx9oxunwE=",
"owner": "besendorf",
"repo": "awareness-bot",
"rev": "a7d77491c371e189f8fac7f8c2ff31ac48c32e08"
},
"manifest": {
"config": true,
"dependencies": [
"bardapi"
],
"database": true,
"database_type": "asyncpg",
"extra_files": [
"base-config.yaml"
],
"id": "sergevictor.eu.maubot.bard",
"main_class": "BardPlugin",
"id": "org.besendorf.awarenessbot",
"main_class": "Awareness",
"maubot": "0.1.0",
"modules": [
"bard"
"awarenessbot"
],
"version": "0.99.100"
"version": "1.0.0"
}
},
"characterai": {
@ -279,10 +248,10 @@
}
},
"github": {
"hash": "sha256-XOhjSrgbVUwMO6/v/Znoc5l/k2n6Zi42Ydhv9/vyX7E=",
"hash": "sha256-ZloRMHaYl1rt2vurLo7pugQRg9gIT4X2LCmxOqACb2c=",
"owner": "williamkray",
"repo": "maubot-chatgpt",
"rev": "d313920165f8fca7a04314a73bb1dca30c67d9f5"
"rev": "101ea08743ed7bd251c3c0de7386d322e650af26"
},
"manifest": {
"config": true,
@ -296,7 +265,7 @@
"modules": [
"gpt"
],
"version": "0.0.10"
"version": "0.0.11"
}
},
"choose": {
@ -310,10 +279,10 @@
"postPatch": "cd choose"
},
"github": {
"hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
"hash": "sha256-dKSXBwkIVFnoTcjXQXPf8xdzP44VZR8Bq3KQhsBpABA=",
"owner": "coffeebank",
"repo": "coffee-maubot",
"rev": "b25112508d65f7560910e67d3074dd60f4048821"
"rev": "f2329cf643a80fc7200fd225ba697fea639f2e99"
},
"manifest": {
"database": false,
@ -358,35 +327,35 @@
"version": "1.0.0"
}
},
"create-room": {
"communitybot": {
"attrs": {
"meta": {
"changelog": "https://github.com/williamkray/maubot-createroom/releases",
"description": "A plugin that creates new rooms and automatically sets them to be part of a private Matrix Space.",
"downloadPage": "https://github.com/williamkray/maubot-createroom/releases",
"homepage": "https://github.com/williamkray/maubot-createroom"
"changelog": "https://github.com/williamkray/maubot-communitybot/releases",
"description": "helps admins manage a matrix space, with user management, room creation\ntools, and much more! replaces activity-tracker, createroom, and welcome\nplugins.\n",
"downloadPage": "https://github.com/williamkray/maubot-communitybot/releases",
"homepage": "https://github.com/williamkray/maubot-communitybot"
}
},
"github": {
"hash": "sha256-x1eoUX8u1IR/hLgS8YcpSoTByl+m3GoTW3fnFMDs1XA=",
"hash": "sha256-wO63G2mdpz2FWjatVY5R+L7Chki087Ev7oMfpgyOnxM=",
"owner": "williamkray",
"repo": "maubot-createroom",
"rev": "4eecdcffa6c06276287c2a3d4e65905a72ad18ad"
"repo": "maubot-communitybot",
"rev": "v0.1.7"
},
"manifest": {
"config": true,
"database": false,
"database": true,
"database_type": "asyncpg",
"extra_files": [
"base-config.yaml"
],
"id": "org.jobmachine.createspaceroom",
"id": "org.jobmachine.communitybot",
"license": "MIT",
"main_class": "CreateSpaceRoom",
"main_class": "CommunityBot",
"maubot": "0.1.0",
"modules": [
"createspaceroom"
"community"
],
"version": "0.1.2"
"version": "0.1.7"
}
},
"dice": {
@ -533,6 +502,36 @@
"version": "3.0.0"
}
},
"gemini": {
"attrs": {
"meta": {
"changelog": "https://github.com/shanks219/maubot-gemini-bot/releases",
"description": "A simple gemini-pro chatbot.",
"downloadPage": "https://github.com/shanks219/maubot-gemini-bot/releases",
"homepage": "https://github.com/shanks219/maubot-gemini-bot/"
}
},
"github": {
"hash": "sha256-mPKPksfgK1eyCiqqxC3/mPKEwVXjVAMYz8PHf78l7wk=",
"owner": "shanks219",
"repo": "maubot-gemini-bot",
"rev": "v0.1.0"
},
"manifest": {
"config": true,
"extra_files": [
"base-config.yaml"
],
"id": "com.shanks.matrix.bot.gemini",
"license": "MIT",
"main_class": "GeminiBot",
"maubot": "0.1.0",
"modules": [
"geminibot"
],
"version": "1.0.0"
}
},
"gifme": {
"attrs": {
"meta": {
@ -543,10 +542,10 @@
}
},
"github": {
"hash": "sha256-5MHLtm3qktUyvWyuwQEUQWL8fxszZ6h/hHClLLr0Uvs=",
"hash": "sha256-VtZp4c3bbKCgbqQoJRnkle7Qn1zSGhgSPFAIlijQDOs=",
"owner": "williamkray",
"repo": "maubot-gifme",
"rev": "6dbbb9ebce903887b62f95b04f4640779762e57a"
"rev": "a896a07fba53c90455431e79904f79d949c91f92"
},
"manifest": {
"database": true,
@ -715,10 +714,10 @@
}
},
"github": {
"hash": "sha256-twvVeMD2nRwpazc21inbdr6mUjMXJ4T6v5ieNrwB+O4=",
"hash": "sha256-UWJGvLs/zrg3pNtZjc2PLNZfmiWl7QWGesyjojljXeQ=",
"owner": "ser",
"repo": "maubot-hateheif",
"rev": "52cf166960ac3fb71d291e13d5f3621caa9d7af1"
"rev": "64b36a2447c6bb3bedc25e8afd85abde60c3d755"
},
"manifest": {
"config": true,
@ -838,10 +837,10 @@
"postPatch": "cd jadict"
},
"github": {
"hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
"hash": "sha256-dKSXBwkIVFnoTcjXQXPf8xdzP44VZR8Bq3KQhsBpABA=",
"owner": "coffeebank",
"repo": "coffee-maubot",
"rev": "b25112508d65f7560910e67d3074dd60f4048821"
"rev": "f2329cf643a80fc7200fd225ba697fea639f2e99"
},
"manifest": {
"database": false,
@ -855,7 +854,7 @@
"modules": [
"jadict"
],
"version": "0.1.0.10"
"version": "0.1.1.12"
}
},
"join": {
@ -868,10 +867,10 @@
}
},
"github": {
"hash": "sha256-aqpL+KO5p0hre7RCUZrM270Ah+cR4cQxZn7LTXLT79k=",
"hash": "sha256-6bggnk3196M0eCkfYTJWLhiIwIVTtluffQzc58yIYzw=",
"owner": "williamkray",
"repo": "maubot-join",
"rev": "1b57758dfe3a2191588bb903ea546328146e69d8"
"rev": "v0.3.1"
},
"manifest": {
"database": false,
@ -885,7 +884,7 @@
"modules": [
"join"
],
"version": "0.3.0"
"version": "0.3.1"
}
},
"karma": {
@ -919,6 +918,44 @@
"version": "1.0.1"
}
},
"kodict": {
"attrs": {
"meta": {
"changelog": "https://github.com/coffeebank/coffee-maubot/releases",
"description": "A Korean dictionary Matrix bot for searching and translating Korean vocabulary (Hangul/Hangeul, Hanja). Searches National Institute of Korean Language's Korean-English Learners' Dictionary (\ud55c\uad6d\uc5b4\uae30\ucd08\uc0ac\uc804).",
"downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
"homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/kodict"
},
"postPatch": "cd kodict"
},
"github": {
"hash": "sha256-dKSXBwkIVFnoTcjXQXPf8xdzP44VZR8Bq3KQhsBpABA=",
"owner": "coffeebank",
"repo": "coffee-maubot",
"rev": "f2329cf643a80fc7200fd225ba697fea639f2e99"
},
"manifest": {
"database": false,
"dependencies": [
"cssselect",
"kodict-core",
"korean-romanizer",
"krdict.py@git+https://github.com/coffeebank/krdict.py",
"lxml"
],
"extra_files": [
"base-config.yaml"
],
"id": "coffee.maubot.kodict",
"license": "AGPL-3.0-or-later",
"main_class": "KodictBot",
"maubot": "0.1.0",
"modules": [
"kodict"
],
"version": "0.1.0.366"
}
},
"ldap-ad-inviterbot": {
"attrs": {
"meta": {
@ -954,6 +991,68 @@
"version": "0.1.6"
}
},
"ldap-inviter": {
"attrs": {
"meta": {
"changelog": "https://github.com/davidmehren/maubot-ldap-inviter/releases",
"description": "A maubot plugin to invite users to Matrix rooms according to LDAP groups",
"downloadPage": "https://github.com/davidmehren/maubot-ldap-inviter/releases",
"homepage": "https://github.com/davidmehren/maubot-ldap-inviter"
}
},
"github": {
"hash": "sha256-eLbAFGQ/WGXvL8N4B1MW9Q4mY5axXl8PEdIEYtmiyb0=",
"owner": "davidmehren",
"repo": "maubot-ldap-inviter",
"rev": "ece581ba397df0030f65eeccbe141b7fc3fcfb19"
},
"manifest": {
"config": true,
"extra_files": [
"base-config.yaml"
],
"id": "de.herrmehren.ldap-inviter",
"license": "MIT",
"main_class": "LDAPInviterBot",
"maubot": "0.1.0",
"modules": [
"inviter"
],
"version": "0.0.1"
}
},
"llm": {
"attrs": {
"meta": {
"changelog": "https://github.com/brokensandals/maubot-llm/releases",
"description": "Allows chatting with LLMs running on OpenAI-compatible servers (including local instances like LM Studio). Can use different backends, models, and system prompts per room.",
"downloadPage": "https://github.com/brokensandals/maubot-llm/releases",
"homepage": "https://github.com/brokensandals/maubot-llm"
}
},
"github": {
"hash": "sha256-b/zFfgZPaODyyfk8ZgU+fihgqbsuxspGQj+oDmG3Nqc=",
"owner": "brokensandals",
"repo": "maubot-llm",
"rev": "fc527836acf57cad90020d2dc0127a44ae7f73bd"
},
"manifest": {
"config": true,
"database": true,
"database_type": "asyncpg",
"extra_files": [
"base-config.yaml"
],
"id": "net.brokensandals.llm",
"license": "MIT",
"main_class": "LlmBot",
"maubot": "0.1.0",
"modules": [
"maubot_llm"
],
"version": "1.0.0"
}
},
"local-stt": {
"attrs": {
"meta": {
@ -1020,6 +1119,40 @@
"version": "1.0.0"
}
},
"matrix-to-discourse": {
"attrs": {
"meta": {
"changelog": "https://github.com/gitayam/matrix-to-discourse/releases",
"description": "A plugin create Discourse forum post from messages in Matrix or Bridged rooms and perform advanced forum searches directly from Matrix or Bridged rooms. Perfect for community building and engagement.",
"downloadPage": "https://github.com/gitayam/matrix-to-discourse/releases",
"homepage": "https://github.com/gitayam/matrix-to-discourse"
}
},
"github": {
"hash": "sha256-QIFgCQL9O/SVemXfxlXzPcPQ/qx68IU7ntArCk946iA=",
"owner": "gitayam",
"repo": "matrix-to-discourse",
"rev": "v0.1.0.1"
},
"manifest": {
"dependencies": [
"aiohttp",
"maubot",
"mautrix",
"openai",
"pyyaml",
"requests"
],
"id": "com.irregularchat.matrix_to_discourse",
"license": "GPL-3.0",
"main_class": "MatrixToDiscourseBot",
"maubot": "0.1.0",
"modules": [
"bot"
],
"version": "0.1.0.0"
}
},
"media": {
"attrs": {
"meta": {
@ -1056,10 +1189,10 @@
}
},
"github": {
"hash": "sha256-qtGGCaATIzJMRhLWzFN0kSa6P/tlckCkxatKEfXyi0E=",
"hash": "sha256-dSsCmDAKfr1HyxiOUb+ogB86FRzuRYJIZ4/vk+PP8r8=",
"owner": "edwardsdean",
"repo": "maubot_metric_bot",
"rev": "0.0.4"
"rev": "0.0.5"
},
"manifest": {
"database": false,
@ -1070,7 +1203,7 @@
"modules": [
"metric"
],
"version": "0.0.4"
"version": "0.0.5"
}
},
"ntfy": {
@ -1116,24 +1249,24 @@
}
},
"github": {
"hash": "sha256-+aDQF/hW66M25zsvIsjNt7K2l32rV1g3fPrb45XdHVU=",
"hash": "sha256-vw2MT4pwmUUWolgzkq0nZ/YaAlKUANrN0NPXXFf7B1k=",
"owner": "tcpipuk",
"repo": "maubot-openai-translate",
"rev": "v0.3.0"
"rev": "v0.3.1"
},
"manifest": {
"config": true,
"extra_files": [
"base-config.yaml"
],
"id": "xyz.maubot.openaitranslate",
"id": "uk.tcpip.openaitranslate",
"license": "AGPL-3.0-or-later",
"main_class": "OpenAITranslate",
"maubot": "0.1.0",
"modules": [
"openaitranslate"
],
"version": "0.3.0"
"version": "0.3.1"
}
},
"ovgumensabot": {
@ -1259,6 +1392,36 @@
"version": "3.0.1"
}
},
"pretix-inviter": {
"attrs": {
"meta": {
"changelog": "https://github.com/fedora-infra/maubot-pretix-invite/blob/v0.3.2/CHANGELOG.md",
"description": "A maubot plugin for inviting event participants from the pretix ticketing platform into a matrix room",
"downloadPage": "https://github.com/fedora-infra/maubot-pretix-invite/releases",
"homepage": "https://github.com/fedora-infra/maubot-pretix-invite"
}
},
"github": {
"hash": "sha256-KgWGvZ7QHcH0/u6+kodW8MAXtco4MM5MpbKscW903nQ=",
"owner": "fedora-infra",
"repo": "maubot-pretix-invite",
"rev": "v0.3.2"
},
"manifest": {
"config": true,
"extra_files": [
"base-config.yaml"
],
"id": "org.fedoraproject.maubot.events",
"license": "MIT",
"main_class": "EventManagement",
"modules": [
"event_helper"
],
"version": "0.3.2",
"webapp": true
}
},
"random-quote": {
"attrs": {
"meta": {
@ -1331,10 +1494,10 @@
}
},
"github": {
"hash": "sha256-GfroQ7iaBfN8WClORrkYccPHq8FsKupZtYKJvHGZg1o=",
"hash": "sha256-IKuOJFBfSC4sKSKoD+MuvuLBrsAMhs/PC1qYb5nP5jk=",
"owner": "ajkessel",
"repo": "reacjibot",
"rev": "v0.7.4"
"rev": "v2.7.14"
},
"manifest": {
"extra_files": [
@ -1347,7 +1510,7 @@
"modules": [
"reacjibot"
],
"version": "0.7.4"
"version": "2.7.14"
}
},
"reactbot": {
@ -1590,10 +1753,10 @@
"postPatch": "cd send-custom-html"
},
"github": {
"hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
"hash": "sha256-dKSXBwkIVFnoTcjXQXPf8xdzP44VZR8Bq3KQhsBpABA=",
"owner": "coffeebank",
"repo": "coffee-maubot",
"rev": "b25112508d65f7560910e67d3074dd60f4048821"
"rev": "f2329cf643a80fc7200fd225ba697fea639f2e99"
},
"manifest": {
"database": false,
@ -1607,7 +1770,7 @@
"modules": [
"sendcustomhtml"
],
"version": "0.1.0.6"
"version": "0.2.0.256"
}
},
"social-media-download": {
@ -1620,10 +1783,10 @@
}
},
"github": {
"hash": "sha256-RMyQzGz2Z4m9FN0Nt5E6Tj0yZarysygCtvEZDfG143M=",
"hash": "sha256-naHY6f034uGnPIHidI7WXjcf2h/t0IYaPkO5QfKkXMs=",
"owner": "ggogel",
"repo": "SocialMediaDownloadMaubot",
"rev": "1.2.0"
"rev": "1.4.2"
},
"manifest": {
"config": true,
@ -1639,7 +1802,7 @@
"instaloader",
"socialmediadownload"
],
"version": "1.2.0"
"version": "1.4.2"
}
},
"songwhip": {
@ -1799,17 +1962,17 @@
"attrs": {
"meta": {
"changelog": "https://github.com/coffeebank/coffee-maubot/releases",
"description": "Get the time in specific cities. Check timezones. !timein New York (Python 3.9+) (Python <3.9 requires pytz, fuzzywuzzy)",
"description": "Get the time in specific cities. Check timezones. !timein America/New_York (Python 3.9+)",
"downloadPage": "https://github.com/coffeebank/coffee-maubot/releases",
"homepage": "https://github.com/coffeebank/coffee-maubot/tree/master/timein"
},
"postPatch": "cd timein"
},
"github": {
"hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
"hash": "sha256-dKSXBwkIVFnoTcjXQXPf8xdzP44VZR8Bq3KQhsBpABA=",
"owner": "coffeebank",
"repo": "coffee-maubot",
"rev": "b25112508d65f7560910e67d3074dd60f4048821"
"rev": "f2329cf643a80fc7200fd225ba697fea639f2e99"
},
"manifest": {
"database": false,
@ -1892,10 +2055,10 @@
}
},
"github": {
"hash": "sha256-8ZAH9Kn0EQYY9gLx48gF+aEsFOdlZlrbUIvLMP0uwi4=",
"hash": "sha256-Gm90IsokLEhbWGksHgjSQNBY/WOpccqfKJTmwD2cvBE=",
"owner": "yoxcu",
"repo": "maubot-token",
"rev": "v1.1.0"
"rev": "v1.1.1"
},
"manifest": {
"config": true,
@ -1911,7 +2074,7 @@
"modules": [
"tokenbot"
],
"version": "1.1.0"
"version": "1.1.1"
}
},
"translate": {
@ -1953,16 +2116,17 @@
}
},
"github": {
"hash": "sha256-WlrFt+uj6E7Ecg+3KW6fjrMXSUP5YFA5ZyitvBON3pA=",
"hash": "sha256-CMEwzkvHnBpFUg7HssAF7ga221XCQlU/dScMy7JhmuQ=",
"owner": "jeffcasavant",
"repo": "MaubotTrumpTweet",
"rev": "v1.1.2"
"rev": "v1.1.3"
},
"isPoetry": true,
"manifest": {
"database": false,
"dependencies": [
"Pillow>=9.0.1, <10.0.0"
"Pillow>=9.3.0, <10.0.0",
"asyncpg>=0.26.0"
],
"extra_files": [
"res/font/Roboto-Black.ttf",
@ -2021,7 +2185,7 @@
"modules": [
"trumptweet"
],
"version": "1.1.2"
"version": "1.1.3"
}
},
"twilio": {
@ -2128,10 +2292,10 @@
"postPatch": "cd urlpreview"
},
"github": {
"hash": "sha256-k+M/Wk4nyXUZBJxmxQr64dPp3rK7i1oQeLFtncle3dI=",
"hash": "sha256-dKSXBwkIVFnoTcjXQXPf8xdzP44VZR8Bq3KQhsBpABA=",
"owner": "coffeebank",
"repo": "coffee-maubot",
"rev": "b25112508d65f7560910e67d3074dd60f4048821"
"rev": "f2329cf643a80fc7200fd225ba697fea639f2e99"
},
"manifest": {
"database": false,
@ -2187,10 +2351,10 @@
}
},
"github": {
"hash": "sha256-GGbd7PvW2P0u1h7Cp1GMuEg3uQ0osZBWWHzSW524aBc=",
"hash": "sha256-1UCQxUldc9nE9wh4OUsHcQay5TuPLkY8ppcTAb/10EQ=",
"owner": "jkhsjdhjs",
"repo": "maubot-webhook",
"rev": "v0.2.0"
"rev": "v0.4.0"
},
"manifest": {
"config": true,
@ -2207,40 +2371,10 @@
"modules": [
"plugin"
],
"version": "0.2.0",
"version": "0.4.0",
"webapp": true
}
},
"welcome": {
"attrs": {
"meta": {
"changelog": "https://github.com/williamkray/maubot-welcome/releases",
"description": "A plugin that greets new people with a configurable message when they join a room.",
"downloadPage": "https://github.com/williamkray/maubot-welcome/releases",
"homepage": "https://github.com/williamkray/maubot-welcome"
}
},
"github": {
"hash": "sha256-8BIDj/kHys/Pw1n1lLtxjYOstI/UG5UAlxD+3rpKj0Q=",
"owner": "williamkray",
"repo": "maubot-welcome",
"rev": "a6d3e6cbea87056a1d4694f5379c9ae9d9cdf1c5"
},
"manifest": {
"database": false,
"extra_files": [
"base-config.yaml"
],
"id": "org.jobmachine.welcome",
"license": "MIT",
"main_class": "Greeter",
"maubot": "0.1.0",
"modules": [
"welcome"
],
"version": "0.0.4"
}
},
"wolframalpha": {
"attrs": {
"meta": {

View file

@ -19,7 +19,7 @@ let
resolveDeps = deps: map
(name:
let
packageName = builtins.head (builtins.match "([^~=<>]*).*" name);
packageName = builtins.head (builtins.match "([^~=<>@]*).*" name);
lower = lib.toLower packageName;
dash = builtins.replaceStrings ["_"] ["-"] packageName;
lowerDash = builtins.replaceStrings ["_"] ["-"] lower;

View file

@ -1,23 +1,24 @@
{ fetchFromGitHub
, lib
, makeWrapper
, nodejs
, node-gyp
, pnpm_9
, python3
, stdenv
, xcbuild
{
fetchFromGitHub,
lib,
makeWrapper,
nodejs,
node-gyp,
pnpm_9,
python3,
stdenv,
xcbuild,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "cdxgen";
version = "10.8.1";
version = "10.9.6";
src = fetchFromGitHub {
owner = "CycloneDX";
repo = "cdxgen";
rev = "v${finalAttrs.version}";
hash = "sha256-PFvSHuIaHaGfKI5s7DOW1adSKpnURaQtk5lAO9lr1OM=";
hash = "sha256-WgY0soHwedYbQNDvDIqtaxMSzVcaOVV2/22wOXU2nbA=";
};
nativeBuildInputs = [
@ -30,7 +31,7 @@ stdenv.mkDerivation (finalAttrs: {
pnpmDeps = pnpm_9.fetchDeps {
inherit (finalAttrs) pname version src;
hash = "sha256-IO7hn5xHdlQ+uyH8RWc7ZnnthXydCnMSde22YYMWOoc=";
hash = "sha256-IgmTYmCmZ65Da5zL6Tx7P4bt2o+YhX0UvU0DEONmr7w=";
};
buildPhase = ''
@ -56,12 +57,14 @@ stdenv.mkDerivation (finalAttrs: {
runHook postInstall
'';
meta = with lib; {
description = "Creates CycloneDX Software Bill-of-Materials (SBOM) for your projects from source and container images";
mainProgram = "cdxgen";
homepage = "https://github.com/CycloneDX/cdxgen";
license = licenses.asl20;
maintainers = with maintainers; [ dit7ya ];
maintainers = with maintainers; [
dit7ya
quincepie
];
};
})