diff --git a/.mailmap b/.mailmap index d7e9caacea7e4..f5e0752527f0e 100644 --- a/.mailmap +++ b/.mailmap @@ -3,7 +3,7 @@ Anderson Torres Atemu Daniel Løvbrøtte Olsen Fabian Affolter -goatastronaut0212 +goatastronaut0212 Janne Heß Jörg Thalheim Martin Weinelt diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 94afcc5b3e762..a8b1d62352844 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -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"; diff --git a/nixos/doc/manual/release-notes/rl-2411.section.md b/nixos/doc/manual/release-notes/rl-2411.section.md index 546624969e747..f7d65d7018367 100644 --- a/nixos/doc/manual/release-notes/rl-2411.section.md +++ b/nixos/doc/manual/release-notes/rl-2411.section.md @@ -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} diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 88715af4dc0e1..5e7d7b203e95d 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -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 diff --git a/nixos/modules/services/networking/syncplay.nix b/nixos/modules/services/networking/syncplay.nix index b56754ea3f2e4..22808248abbc4 100644 --- a/nixos/modules/services/networking/syncplay.nix +++ b/nixos/modules/services/networking/syncplay.nix @@ -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`. ''; }; @@ -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`. + ''; + }; + + 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,36 +194,63 @@ in ''; }; - extraArgs = mkOption { - type = types.listOf types.str; - default = [ ]; + useACMEHost = mkOption { + type = types.nullOr types.str; + default = null; + example = "syncplay.example.com"; description = '' - Additional arguments to be passed to the service. + 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. ''; }; - user = mkOption { + ipv6Only = mkOption { + type = types.bool; + default = false; + description = '' + Listen only on IPv6 when strting the server. + ''; + }; + + interfaceIpv4 = mkOption { type = types.str; - default = "nobody"; + default = ""; description = '' - User to use when running Syncplay. + The IP address to bind to for IPv4. Leaving it empty defaults to using all. ''; }; - group = mkOption { + interfaceIpv6 = mkOption { type = types.str; - default = "nogroup"; + default = ""; description = '' - Group to use when running Syncplay. + The IP address to bind to for IPv6. Leaving it empty defaults to using all. ''; }; - passwordFile = mkOption { - type = types.nullOr types.path; - default = null; + extraArgs = mkOption { + type = types.listOf types.str; + default = [ ]; description = '' - Path to the file that contains the server password. If - `null`, the server doesn't require a password. + Additional arguments to be passed to the service. + ''; + }; + + package = mkOption { + type = types.package; + default = pkgs.syncplay-nogui; + defaultText = literalExpression "pkgs.syncplay-nogui"; + description = '' + 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"} ''; }; }; diff --git a/nixos/modules/services/web-apps/rutorrent.nix b/nixos/modules/services/web-apps/rutorrent.nix new file mode 100644 index 0000000000000..cce701fef4978 --- /dev/null +++ b/nixos/modules/services/web-apps/rutorrent.nix @@ -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 available plugins. Note: the unpack plugin needs the nonfree unrar package. + You need to either enable one of the rpc or httprpc plugin or enable the 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 php-fpm.conf 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 services.nginx.virtualHosts.<name>. + See for further information. + ''; + }; + + exposeInsecureRPC2mount = mkOption { + type = types.bool; + default = false; + description = '' + If you do not enable one of the rpc or httprpc 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 services.nginx.virtualHosts.<name>.basicAuth 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" '' + 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"; + }) + ])) + ]); +} diff --git a/pkgs/applications/networking/instant-messengers/armcord/default.nix b/pkgs/applications/networking/instant-messengers/armcord/default.nix index 4d07c850986ef..659025d6538af 100644 --- a/pkgs/applications/networking/instant-messengers/armcord/default.nix +++ b/pkgs/applications/networking/instant-messengers/armcord/default.nix @@ -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}}" \ diff --git a/pkgs/by-name/am/amazon-ssm-agent/package.nix b/pkgs/by-name/am/amazon-ssm-agent/package.nix index 37eb2388cecc4..f7272dafbea9e 100644 --- a/pkgs/by-name/am/amazon-ssm-agent/package.nix +++ b/pkgs/by-name/am/amazon-ssm-agent/package.nix @@ -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 = '' diff --git a/pkgs/by-name/ap/apfsprogs/package.nix b/pkgs/by-name/ap/apfsprogs/package.nix index 526cff28dbca1..5498d05422cec 100644 --- a/pkgs/by-name/ap/apfsprogs/package.nix +++ b/pkgs/by-name/ap/apfsprogs/package.nix @@ -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}' ''; diff --git a/pkgs/by-name/ar/armitage/package.nix b/pkgs/by-name/ar/armitage/package.nix index ef2b5c3101c7d..411d503728b55 100644 --- a/pkgs/by-name/ar/armitage/package.nix +++ b/pkgs/by-name/ar/armitage/package.nix @@ -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 ]}" diff --git a/pkgs/by-name/ma/marwaita-red/package.nix b/pkgs/by-name/ma/marwaita-red/package.nix index bb647ae1977c7..4e65a2d83614e 100644 --- a/pkgs/by-name/ma/marwaita-red/package.nix +++ b/pkgs/by-name/ma/marwaita-red/package.nix @@ -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 = [ diff --git a/pkgs/by-name/me/meteor-git/package.nix b/pkgs/by-name/me/meteor-git/package.nix index 46676277aec0e..0f922c2dfcac0 100644 --- a/pkgs/by-name/me/meteor-git/package.nix +++ b/pkgs/by-name/me/meteor-git/package.nix @@ -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="; diff --git a/pkgs/by-name/mq/mqttx/package.nix b/pkgs/by-name/mq/mqttx/package.nix index 975db394ab189..1e36ad57ab41e 100644 --- a/pkgs/by-name/mq/mqttx/package.nix +++ b/pkgs/by-name/mq/mqttx/package.nix @@ -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="; }; }; diff --git a/pkgs/by-name/ne/nexus/package.nix b/pkgs/by-name/ne/nexus/package.nix index 68822ba5dcb84..401511fedd68d 100644 --- a/pkgs/by-name/ne/nexus/package.nix +++ b/pkgs/by-name/ne/nexus/package.nix @@ -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; diff --git a/pkgs/by-name/ru/rutorrent/package.nix b/pkgs/by-name/ru/rutorrent/package.nix new file mode 100644 index 0000000000000..eeff6207d9151 --- /dev/null +++ b/pkgs/by-name/ru/rutorrent/package.nix @@ -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; + }; +} diff --git a/pkgs/by-name/sw/swayimg/package.nix b/pkgs/by-name/sw/swayimg/package.nix index a6e1a4a8d48d9..b05395fc4c7cc 100644 --- a/pkgs/by-name/sw/swayimg/package.nix +++ b/pkgs/by-name/sw/swayimg/package.nix @@ -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; diff --git a/pkgs/by-name/tp/tpnote/package.nix b/pkgs/by-name/tp/tpnote/package.nix index 9e8bdca664018..a19eed1281dcb 100644 --- a/pkgs/by-name/tp/tpnote/package.nix +++ b/pkgs/by-name/tp/tpnote/package.nix @@ -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 diff --git a/pkgs/by-name/ut/ut1999/package.nix b/pkgs/by-name/ut/ut1999/package.nix index 2e2652f411781..9604c4f51a53c 100644 --- a/pkgs/by-name/ut/ut1999/package.nix +++ b/pkgs/by-name/ut/ut1999/package.nix @@ -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}" ]; diff --git a/pkgs/by-name/x1/x16/package.nix b/pkgs/by-name/x1/x16/package.nix index 5f53898b338cb..aa731c436cd25 100644 --- a/pkgs/by-name/x1/x16/package.nix +++ b/pkgs/by-name/x1/x16/package.nix @@ -19,7 +19,7 @@ stdenv.mkDerivation (finalAttrs: { postPatch = '' substituteInPlace Makefile \ - --replace '/bin/echo' 'echo' + --replace-fail '/bin/echo' 'echo' ''; dontConfigure = true; diff --git a/pkgs/by-name/x1/x16/rom.nix b/pkgs/by-name/x1/x16/rom.nix index e44884436f88e..b7c290dd64898 100644 --- a/pkgs/by-name/x1/x16/rom.nix +++ b/pkgs/by-name/x1/x16/rom.nix @@ -26,7 +26,7 @@ stdenv.mkDerivation (finalAttrs: { postPatch = '' patchShebangs findsymbols scripts/ substituteInPlace Makefile \ - --replace '/bin/echo' 'echo' + --replace-fail '/bin/echo' 'echo' ''; dontConfigure = true; diff --git a/pkgs/by-name/ya/yandex-music/info.json b/pkgs/by-name/ya/yandex-music/info.json index 809ec521526ae..abd8451dd3219 100644 --- a/pkgs/by-name/ya/yandex-music/info.json +++ b/pkgs/by-name/ya/yandex-music/info.json @@ -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" } diff --git a/pkgs/by-name/ya/yandex-music/package.nix b/pkgs/by-name/ya/yandex-music/package.nix index 581bea8904569..a4a450af0b4a7 100644 --- a/pkgs/by-name/ya/yandex-music/package.nix +++ b/pkgs/by-name/ya/yandex-music/package.nix @@ -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 = [ diff --git a/pkgs/by-name/ya/yandex-music/ym_info.json b/pkgs/by-name/ya/yandex-music/ym_info.json index 4a1609ca71197..7ea7db9e9cdaf 100644 --- a/pkgs/by-name/ya/yandex-music/ym_info.json +++ b/pkgs/by-name/ya/yandex-music/ym_info.json @@ -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", diff --git a/pkgs/development/beam-modules/default.nix b/pkgs/development/beam-modules/default.nix index 8b93f09dd92d5..23649ca76f261 100644 --- a/pkgs/development/beam-modules/default.nix +++ b/pkgs/development/beam-modules/default.nix @@ -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; diff --git a/pkgs/development/compilers/llvm/common/default.nix b/pkgs/development/compilers/llvm/common/default.nix index 86873c1dbe1de..fe5b432f8cf0d 100644 --- a/pkgs/development/compilers/llvm/common/default.nix +++ b/pkgs/development/compilers/llvm/common/default.nix @@ -84,8 +84,13 @@ let } { after = "19"; + before = "20"; path = ../19; } + { + after = "20"; + path = ../git; + } ]; "clang/purity.patch" = [ { diff --git a/pkgs/development/compilers/llvm/default.nix b/pkgs/development/compilers/llvm/default.nix index 7b1fc3efebfbc..490b90e2de049 100644 --- a/pkgs/development/compilers/llvm/default.nix +++ b/pkgs/development/compilers/llvm/default.nix @@ -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; diff --git a/pkgs/development/compilers/llvm/git/clang/gnu-install-dirs.patch b/pkgs/development/compilers/llvm/git/clang/gnu-install-dirs.patch new file mode 100644 index 0000000000000..30fdf2c56d5b2 --- /dev/null +++ b/pkgs/development/compilers/llvm/git/clang/gnu-install-dirs.patch @@ -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() + diff --git a/pkgs/development/coq-modules/ITree/default.nix b/pkgs/development/coq-modules/ITree/default.nix index dc768e2db460c..693b1b260c1e0 100644 --- a/pkgs/development/coq-modules/ITree/default.nix +++ b/pkgs/development/coq-modules/ITree/default.nix @@ -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 = { diff --git a/pkgs/development/libraries/libphonenumber/default.nix b/pkgs/development/libraries/libphonenumber/default.nix index 298873033e0ea..1bd4ac8db7abe 100644 --- a/pkgs/development/libraries/libphonenumber/default.nix +++ b/pkgs/development/libraries/libphonenumber/default.nix @@ -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 = [ diff --git a/pkgs/development/libraries/science/astronomy/indilib/default.nix b/pkgs/development/libraries/science/astronomy/indilib/default.nix index 74bb75878f9a2..78ba7f42fd504 100644 --- a/pkgs/development/libraries/science/astronomy/indilib/default.nix +++ b/pkgs/development/libraries/science/astronomy/indilib/default.nix @@ -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 = [ diff --git a/pkgs/development/libraries/science/astronomy/indilib/indi-3rdparty.nix b/pkgs/development/libraries/science/astronomy/indilib/indi-3rdparty.nix index 6d19253bcce3b..50ec95ee2f8f5 100644 --- a/pkgs/development/libraries/science/astronomy/indilib/indi-3rdparty.nix +++ b/pkgs/development/libraries/science/astronomy/indilib/indi-3rdparty.nix @@ -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" ''; }; diff --git a/pkgs/development/lisp-modules/patches/nyxt-remove-build-operation.patch b/pkgs/development/lisp-modules/patches/nyxt-remove-build-operation.patch deleted file mode 100644 index e050ce10b4876..0000000000000 --- a/pkgs/development/lisp-modules/patches/nyxt-remove-build-operation.patch +++ /dev/null @@ -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") - diff --git a/pkgs/development/python-modules/holidays/default.nix b/pkgs/development/python-modules/holidays/default.nix index df4237a8e9a6b..df4c7e09bd282 100644 --- a/pkgs/development/python-modules/holidays/default.nix +++ b/pkgs/development/python-modules/holidays/default.nix @@ -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 = [ diff --git a/pkgs/development/python-modules/hstspreload/default.nix b/pkgs/development/python-modules/hstspreload/default.nix index 64ed6cba12e97..12de293358e86 100644 --- a/pkgs/development/python-modules/hstspreload/default.nix +++ b/pkgs/development/python-modules/hstspreload/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/ipywidgets/default.nix b/pkgs/development/python-modules/ipywidgets/default.nix index 8c985163653b0..e21b5ac8bbf02 100644 --- a/pkgs/development/python-modules/ipywidgets/default.nix +++ b/pkgs/development/python-modules/ipywidgets/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/jupyter/default.nix b/pkgs/development/python-modules/jupyter/default.nix index 72f9238edb8bf..a3c9be6510592 100644 --- a/pkgs/development/python-modules/jupyter/default.nix +++ b/pkgs/development/python-modules/jupyter/default.nix @@ -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 }; } diff --git a/pkgs/development/python-modules/jupyterlab-widgets/default.nix b/pkgs/development/python-modules/jupyterlab-widgets/default.nix index cd538beade251..bf8b0a0141aef 100644 --- a/pkgs/development/python-modules/jupyterlab-widgets/default.nix +++ b/pkgs/development/python-modules/jupyterlab-widgets/default.nix @@ -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 diff --git a/pkgs/development/python-modules/jupyterlab/default.nix b/pkgs/development/python-modules/jupyterlab/default.nix index ab4c0c705323f..8105bf1ebc6fd 100644 --- a/pkgs/development/python-modules/jupyterlab/default.nix +++ b/pkgs/development/python-modules/jupyterlab/default.nix @@ -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 = [ diff --git a/pkgs/development/python-modules/marimo/default.nix b/pkgs/development/python-modules/marimo/default.nix index c5adc0e91f3c0..626f358bbc84c 100644 --- a/pkgs/development/python-modules/marimo/default.nix +++ b/pkgs/development/python-modules/marimo/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/nbsphinx/default.nix b/pkgs/development/python-modules/nbsphinx/default.nix index aac9c4e6ef259..c819eee79ab60 100644 --- a/pkgs/development/python-modules/nbsphinx/default.nix +++ b/pkgs/development/python-modules/nbsphinx/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/onnx/1.15.0-CVE-2024-27318.patch b/pkgs/development/python-modules/onnx/1.15.0-CVE-2024-27318.patch deleted file mode 100644 index 3b95d1fc588c9..0000000000000 --- a/pkgs/development/python-modules/onnx/1.15.0-CVE-2024-27318.patch +++ /dev/null @@ -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 - - #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 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(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(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(ws_str.size()), NULL, 0, NULL, NULL); -+ std::string utf8str(size_required, 0); -+ WideCharToMultiByte( -+ CP_UTF8, 0, ws_str.c_str(), static_cast(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( - [ diff --git a/pkgs/development/python-modules/pycrdt/Cargo.lock b/pkgs/development/python-modules/pycrdt/Cargo.lock index 1b6ad5bb32ce3..a2182a11dc06d 100644 --- a/pkgs/development/python-modules/pycrdt/Cargo.lock +++ b/pkgs/development/python-modules/pycrdt/Cargo.lock @@ -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" @@ -32,11 +54,61 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +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.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +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 = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" + +[[package]] +name = "lock_api" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +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,33 +315,48 @@ 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" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "serde" -version = "1.0.206" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b3e4cd94123dd520a128bcd11e34d9e9e423e7e3e50425cb1b4b1e3549d0284" +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 = "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 = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +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", diff --git a/pkgs/development/python-modules/pycrdt/default.nix b/pkgs/development/python-modules/pycrdt/default.nix index 056cc2f306f3b..f95b0d7d21d48 100644 --- a/pkgs/development/python-modules/pycrdt/default.nix +++ b/pkgs/development/python-modules/pycrdt/default.nix @@ -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; }; } diff --git a/pkgs/development/python-modules/rules/default.nix b/pkgs/development/python-modules/rules/default.nix index c2ab611d6f9c0..81af412a75d63 100644 --- a/pkgs/development/python-modules/rules/default.nix +++ b/pkgs/development/python-modules/rules/default.nix @@ -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 ]; diff --git a/pkgs/development/python-modules/scikit-posthocs/0001-increased-abs-tolerance-for-wilcoxon-test.patch b/pkgs/development/python-modules/scikit-posthocs/0001-increased-abs-tolerance-for-wilcoxon-test.patch deleted file mode 100644 index e3fa524e5a4ff..0000000000000 --- a/pkgs/development/python-modules/scikit-posthocs/0001-increased-abs-tolerance-for-wilcoxon-test.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 02266a00ce0eb6a089e7efe07816da1aa5152fc9 Mon Sep 17 00:00:00 2001 -From: Maksim Terpilovskii -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 - diff --git a/pkgs/development/python-modules/scikit-posthocs/0002-Update-test_posthocs.py.patch b/pkgs/development/python-modules/scikit-posthocs/0002-Update-test_posthocs.py.patch deleted file mode 100644 index fa4d6d3ececff..0000000000000 --- a/pkgs/development/python-modules/scikit-posthocs/0002-Update-test_posthocs.py.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 5416ffba3ab01aebab3909400b5a9e847022898e Mon Sep 17 00:00:00 2001 -From: Maksim Terpilovskii -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 - diff --git a/pkgs/development/python-modules/sopel/python311-support.patch b/pkgs/development/python-modules/sopel/python311-support.patch deleted file mode 100644 index dfa0283409acd..0000000000000 --- a/pkgs/development/python-modules/sopel/python311-support.patch +++ /dev/null @@ -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. diff --git a/pkgs/development/python-modules/widgetsnbextension/default.nix b/pkgs/development/python-modules/widgetsnbextension/default.nix index 6cf9a308b8202..e717e925cf16f 100644 --- a/pkgs/development/python-modules/widgetsnbextension/default.nix +++ b/pkgs/development/python-modules/widgetsnbextension/default.nix @@ -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 ]; diff --git a/pkgs/development/tools/go-task/default.nix b/pkgs/development/tools/go-task/default.nix index 3bbb466eaae4b..8c456874899bb 100644 --- a/pkgs/development/tools/go-task/default.nix +++ b/pkgs/development/tools/go-task/default.nix @@ -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 = { diff --git a/pkgs/misc/sndio/default.nix b/pkgs/misc/sndio/default.nix index 2da49d1f45bca..40f308280e629 100644 --- a/pkgs/misc/sndio/default.nix +++ b/pkgs/misc/sndio/default.nix @@ -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"; diff --git a/pkgs/servers/lidarr/default.nix b/pkgs/servers/lidarr/default.nix index 4fa70976e8554..279a099c9c3c4 100644 --- a/pkgs/servers/lidarr/default.nix +++ b/pkgs/servers/lidarr/default.nix @@ -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"; diff --git a/pkgs/servers/matrix-synapse/default.nix b/pkgs/servers/matrix-synapse/default.nix index c5179d10f848b..b3a54b1e622b9 100644 --- a/pkgs/servers/matrix-synapse/default.nix +++ b/pkgs/servers/matrix-synapse/default.nix @@ -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 = '' diff --git a/pkgs/servers/web-apps/changedetection-io/default.nix b/pkgs/servers/web-apps/changedetection-io/default.nix index 55d27b196362c..3ddc34fd95a3a 100644 --- a/pkgs/servers/web-apps/changedetection-io/default.nix +++ b/pkgs/servers/web-apps/changedetection-io/default.nix @@ -33,6 +33,7 @@ python3.pkgs.buildPythonApplication rec { chardet cryptography dnspython + elementpath eventlet feedgen flask diff --git a/pkgs/tools/backup/borgmatic/default.nix b/pkgs/tools/backup/borgmatic/default.nix index 18318dc8e584b..4fff9111bd1a7 100644 --- a/pkgs/tools/backup/borgmatic/default.nix +++ b/pkgs/tools/backup/borgmatic/default.nix @@ -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; diff --git a/pkgs/tools/networking/gvproxy/default.nix b/pkgs/tools/networking/gvproxy/default.nix index 621c931c3e240..742c24659db68 100644 --- a/pkgs/tools/networking/gvproxy/default.nix +++ b/pkgs/tools/networking/gvproxy/default.nix @@ -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; diff --git a/pkgs/tools/networking/maubot/default.nix b/pkgs/tools/networking/maubot/default.nix index dd932804fd1ad..f2cdf39b5e579 100644 --- a/pkgs/tools/networking/maubot/default.nix +++ b/pkgs/tools/networking/maubot/default.nix @@ -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 = '' diff --git a/pkgs/tools/networking/maubot/plugins/generated.json b/pkgs/tools/networking/maubot/plugins/generated.json index 7051bf3e5b508..abd5e3d517654 100644 --- a/pkgs/tools/networking/maubot/plugins/generated.json +++ b/pkgs/tools/networking/maubot/plugins/generated.json @@ -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": { diff --git a/pkgs/tools/networking/maubot/plugins/generated.nix b/pkgs/tools/networking/maubot/plugins/generated.nix index 241151eb6ca0e..1ac34284ab54f 100644 --- a/pkgs/tools/networking/maubot/plugins/generated.nix +++ b/pkgs/tools/networking/maubot/plugins/generated.nix @@ -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; diff --git a/pkgs/tools/security/cdxgen/default.nix b/pkgs/tools/security/cdxgen/default.nix index c494598c10d2b..3a6c14ea5f1c8 100644 --- a/pkgs/tools/security/cdxgen/default.nix +++ b/pkgs/tools/security/cdxgen/default.nix @@ -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 + ]; }; })