Merge staging-next into staging

This commit is contained in:
github-actions[bot] 2024-08-07 12:01:49 +00:00 committed by GitHub
commit 4b7471c330
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
82 changed files with 5930 additions and 3428 deletions

View File

@ -2,7 +2,7 @@
let
cfg = config.services.librenms;
settingsFormat = pkgs.formats.json {};
settingsFormat = pkgs.formats.json { };
configJson = settingsFormat.generate "librenms-config.json" cfg.settings;
package = pkgs.librenms.override {
@ -16,7 +16,8 @@ let
upload_max_filesize = 100M
date.timezone = "${config.time.timeZone}"
'';
phpIni = pkgs.runCommand "php.ini" {
phpIni = pkgs.runCommand "php.ini"
{
inherit (package) phpPackage;
inherit phpOptions;
preferLocalBuild = true;
@ -31,14 +32,20 @@ let
if [[ "$USER" != ${cfg.user} ]]; then
sudo='exec /run/wrappers/bin/sudo -u ${cfg.user}'
fi
$sudo ${package}/artisan $*
$sudo ${package}/artisan "$@"
'';
lnmsWrapper = pkgs.writeShellScriptBin "lnms" ''
cd ${package}
exec ${package}/lnms $*
sudo=exec
if [[ "$USER" != ${cfg.user} ]]; then
sudo='exec /run/wrappers/bin/sudo -u ${cfg.user}'
fi
$sudo ${package}/lnms "$@"
'';
configFile = pkgs.writeText "config.php" ''
<?php
$new_config = json_decode(file_get_contents("${cfg.dataDir}/config.json"), true);
@ -47,7 +54,8 @@ let
${lib.optionalString (cfg.extraConfig != null) cfg.extraConfig}
'';
in {
in
{
options.services.librenms = with lib; {
enable = mkEnableOption "LibreNMS network monitoring system";
@ -191,7 +199,8 @@ in {
nginx = mkOption {
type = types.submodule (
recursiveUpdate
(import ../web-servers/nginx/vhost-options.nix { inherit config lib; }) {}
(import ../web-servers/nginx/vhost-options.nix { inherit config lib; })
{ }
);
default = { };
example = literalExpression ''
@ -240,6 +249,7 @@ in {
default = "localhost";
description = ''
Hostname or IP of the MySQL/MariaDB server.
Ignored if 'socket' is defined.
'';
};
@ -248,6 +258,7 @@ in {
default = 3306;
description = ''
Port of the MySQL/MariaDB server.
Ignored if 'socket' is defined.
'';
};
@ -264,15 +275,28 @@ in {
default = "librenms";
description = ''
Name of the user on the MySQL/MariaDB server.
Ignored if 'socket' is defined.
'';
};
passwordFile = mkOption {
type = types.path;
type = types.nullOr types.path;
default = null;
example = "/run/secrets/mysql.pass";
description = ''
A file containing the password for the user of the MySQL/MariaDB server.
Must be readable for the LibreNMS user.
Ignored if 'socket' is defined, mandatory otherwise.
'';
};
socket = mkOption {
type = types.nullOr types.str;
default = null;
example = "/run/mysqld/mysqld.sock";
description = ''
A unix socket to mysql, accessible by the librenms user.
Useful when mysql is on the localhost.
'';
};
};
@ -289,7 +313,7 @@ in {
settings = mkOption {
type = types.submodule {
freeformType = settingsFormat.type;
options = {};
options = { };
};
description = ''
Attrset of the LibreNMS configuration.
@ -483,13 +507,15 @@ in {
EnvironmentFile = lib.mkIf (cfg.environmentFile != null) [ cfg.environmentFile ];
User = cfg.user;
Group = cfg.group;
ExecStartPre = lib.mkIf cfg.database.createLocally [ "!${pkgs.writeShellScript "librenms-db-init" ''
ExecStartPre = lib.mkIf cfg.database.createLocally [
"!${pkgs.writeShellScript "librenms-db-init" ''
DB_PASSWORD=$(cat ${cfg.database.passwordFile} | tr -d '\n')
echo "ALTER USER '${cfg.database.username}'@'localhost' IDENTIFIED BY '$DB_PASSWORD';" | ${pkgs.mariadb}/bin/mysql
${lib.optionalString cfg.useDistributedPollers ''
echo "ALTER USER '${cfg.database.username}'@'%' IDENTIFIED BY '$DB_PASSWORD';" | ${pkgs.mariadb}/bin/mysql
''}
''}"];
''}"
];
};
script = ''
set -euo pipefail
@ -516,13 +542,24 @@ in {
${lib.optionalString (cfg.useDistributedPollers || cfg.distributedPoller.enable) ''
echo "CACHE_DRIVER=memcached" >> ${cfg.dataDir}/.env
''}
echo "DB_DATABASE=${cfg.database.database}" >> ${cfg.dataDir}/.env
''
+ (
if ! isNull cfg.database.socket
then ''
# use socket connection
echo "DB_SOCKET=${cfg.database.socket}" >> ${cfg.dataDir}/.env
''
else ''
# use TCP connection
echo "DB_HOST=${cfg.database.host}" >> ${cfg.dataDir}/.env
echo "DB_PORT=${toString cfg.database.port}" >> ${cfg.dataDir}/.env
echo "DB_DATABASE=${cfg.database.database}" >> ${cfg.dataDir}/.env
echo "DB_USERNAME=${cfg.database.username}" >> ${cfg.dataDir}/.env
echo -n "DB_PASSWORD=" >> ${cfg.dataDir}/.env
cat ${cfg.database.passwordFile} >> ${cfg.dataDir}/.env
''
)
+ ''
# clear cache after update
OLD_VERSION=$(cat ${cfg.dataDir}/version)
if [[ $OLD_VERSION != "${package.version}" ]]; then
@ -560,9 +597,11 @@ in {
services.cron = {
enable = true;
systemCronJobs = let
systemCronJobs =
let
env = "PHPRC=${phpIni}";
in [
in
[
# based on crontab provided by LibreNMS
"33 */6 * * * ${cfg.user} ${env} ${package}/cronic ${package}/discovery-wrapper.py 1"
"*/5 * * * * ${cfg.user} ${env} ${package}/discovery.php -h new >> /dev/null 2>&1"

View File

@ -168,7 +168,7 @@ in {
message = "Backups for database backends other than sqlite will need customization";
}
{
assertion = !(lib.hasPrefix dataDir cfg.backupDir);
assertion = cfg.backupDir != null -> !(lib.hasPrefix dataDir cfg.backupDir);
message = "Backup directory can not be in ${dataDir}";
}
];

View File

@ -3,7 +3,8 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
let
api_token = "f87f42114e44b63ad1b9e3c3d33d6fbe"; # random md5 hash
wrong_api_token = "e68ba041fcf1eab923a7a6de3af5f726"; # another random md5 hash
in {
in
{
name = "librenms";
meta.maintainers = lib.teams.wdz.members;
@ -60,19 +61,12 @@ in {
};
nodes.snmphost = {
networking.firewall.allowedUDPPorts = [ 161 ];
systemd.services.snmpd = {
description = "snmpd";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "forking";
User = "root";
Group = "root";
ExecStart = let
snmpd-config = pkgs.writeText "snmpd-config" ''
services.snmpd = {
enable = true;
openFirewall = true;
configText = ''
com2sec readonly default public
group MyROGroup v2c readonly
@ -82,15 +76,14 @@ in {
syslocation Testcity, Testcountry
syscontact Testi mc Test <test@example.com>
'';
in "${pkgs.net-snmp}/bin/snmpd -c ${snmpd-config} -C";
};
};
};
testScript = ''
start_all()
snmphost.wait_until_succeeds("pgrep snmpd")
snmphost.wait_for_unit("snmpd.service")
librenms.wait_for_unit("lnms-api-init.service")
librenms.wait_for_open_port(80)

View File

@ -8,6 +8,7 @@
, librttopo
, libspatialite
, libxml2
, libz
, minizip
, proj
, readosm
@ -34,6 +35,7 @@ stdenv.mkDerivation rec {
librttopo
libspatialite
libxml2
libz
minizip
proj
readosm

View File

@ -14,12 +14,12 @@
}:
stdenv.mkDerivation rec {
pname = "vdr-softhddevice";
version = "2.3.6";
version = "2.3.7";
src = fetchFromGitHub {
owner = "ua0lnj";
repo = "vdr-plugin-softhddevice";
sha256 = "sha256-T3OG93Bx1RVyXeqkNJvhOSGojZHIWT3DHHEIzUoykds=";
sha256 = "sha256-gn1Z3pw8f0Tpo8Ot0hP9+p/KbK/EGOInE34BCH3aVp0=";
rev = "v${version}";
};

View File

@ -5,7 +5,10 @@
}:
let
python3 = python311;
python3 = python311.override {
self = python3;
packageOverrides = _: super: { tree-sitter = super.tree-sitter_0_21; };
};
in
python3.pkgs.buildPythonApplication rec {
pname = "autotools-language-server";

View File

@ -15,14 +15,14 @@ let
"cli"
"desktop"
];
version = "0.39.0";
version = "0.40.0";
cli = fetchurl {
url = "https://storage.googleapis.com/caido-releases/v${version}/caido-cli-v${version}-linux-x86_64.tar.gz";
hash = "sha256-I8UF2rzIKfpcrxyvDa4AReWDIHOKTCj3ERaWhG1xGG0=";
hash = "sha256-G8sg+3Cp9QkSiiZ810z4jCfGvEJUFLorKT0JmHrO6Ao=";
};
desktop = fetchurl {
url = "https://storage.googleapis.com/caido-releases/v${version}/caido-desktop-v${version}-linux-x86_64.AppImage";
hash = "sha256-KYQck2+YYPLJN3L6qchacjyVyyXR3nmJDTX5GPB4WvI=";
hash = "sha256-iNhitCNc221pYwcG+07GvP+bnTdtQGFjsloQ5Pth2l0=";
};
appimageContents = appimageTools.extractType2 {
inherit pname version;

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,7 @@
, rustPlatform
, fetchFromGitHub
, makeBinaryWrapper
, pixman
, pkg-config
, libinput
, libglvnd
@ -18,27 +19,34 @@
, useSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
}:
rustPlatform.buildRustPackage {
rustPlatform.buildRustPackage rec {
pname = "cosmic-comp";
version = "unstable-2023-11-13";
version = "1.0.0-alpha.1";
src = fetchFromGitHub {
owner = "pop-os";
repo = "cosmic-comp";
rev = "d051d141979820f50b75bd686c745fb7f84fcd05";
hash = "sha256-8okRiVVPzmuPJjnv1YoQPQFI8g0j1DQhwUoO51dHgGA=";
rev = "epoch-${version}";
hash = "sha256-4NAIpyaITFNaTDBcsleIwKPq8nHNa77C7y+5hCIYXZE=";
};
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"cosmic-config-0.1.0" = "sha256-5WajbfcfCc0ZRpJfysqEydthOsF04ipb35QVWuWKrEs=";
"cosmic-protocols-0.1.0" = "sha256-st46wmOncJvu0kj6qaot6LT/ojmW/BwXbbGf8s0mdZ8=";
"atomicwrites-0.4.2" = "sha256-QZSuGPrJXh+svMeFWqAXoqZQxLq/WfIiamqvjJNVhxA=";
"clipboard_macos-0.1.0" = "sha256-cG5vnkiyDlQnbEfV2sPbmBYKv1hd3pjJrymfZb8ziKk=";
"cosmic-config-0.1.0" = "sha256-nZCefRCq40K0Mcsav+akZbX89kHnliqAkB7vKx5WIwY=";
"cosmic-protocols-0.1.0" = "sha256-qgo8FMKo/uCbhUjfykRRN8KSavbyhZpu82M8npLcIPI=";
"cosmic-settings-config-0.1.0" = "sha256-/Qav6r4VQ8ZDSs/tqHeutxYH3u4HiTBFWTfAYUSl2HQ=";
"cosmic-text-0.12.1" = "sha256-x0XTxzbmtE2d4XCG/Nuq3DzBpz15BbnjRRlirfNJEiU=";
"d3d12-0.19.0" = "sha256-usrxQXWLGJDjmIdw1LBXtBvX+CchZDvE8fHC0LjvhD4=";
"glyphon-0.5.0" = "sha256-j1HrbEpUBqazWqNfJhpyjWuxYAxkvbXzRKeSouUoPWg=";
"id_tree-1.8.0" = "sha256-uKdKHRfPGt3vagOjhnri3aYY5ar7O3rp2/ivTfM2jT0=";
"smithay-0.3.0" = "sha256-e6BSrsrVSBcOuF8m21m74h7DWZnYHGIYs/4D4ABvqNM=";
"smithay-0.3.0" = "sha256-puo6xbWRTIco8luz3Jz83VXoRMkyb0ZH7kKHGlTzS5Q=";
"smithay-clipboard-0.8.0" = "sha256-4InFXm0ahrqFrtNLeqIuE3yeOpxKZJZx+Bc0yQDtv34=";
"smithay-egui-0.1.0" = "sha256-FcSoKCwYk3okwQURiQlDUcfk9m/Ne6pSblGAzHDaVHg=";
"softbuffer-0.2.0" = "sha256-VD2GmxC58z7Qfu/L+sfENE+T8L40mvUKKSfgLmCTmjY=";
"taffy-0.3.11" = "sha256-0hXOEj6IjSW8e1t+rvxBFX6V9XRum3QO2Des1XlHJEw=";
"softbuffer-0.4.1" = "sha256-a0bUFz6O8CWRweNt/OxTvflnPYwO5nm6vsyc/WcXyNg=";
"taffy-0.3.11" = "sha256-SCx9GEIJjWdoNVyq+RZAGn0N71qraKZxf9ZWhvyzLaI=";
};
};
@ -50,6 +58,7 @@ rustPlatform.buildRustPackage {
libinput
libxkbcommon
mesa
pixman
seatd
udev
wayland

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,7 @@
, cosmic-icons
, just
, pkg-config
, glib
, libxkbcommon
, wayland
, xorg
@ -13,34 +14,38 @@
rustPlatform.buildRustPackage rec {
pname = "cosmic-files";
version = "0-unstable-2024-06-10";
version = "1.0.0-alpha.1";
src = fetchFromGitHub {
owner = "pop-os";
repo = pname;
rev = "6123108f3ae3c7074264184952f0a53e49a981d5";
hash = "sha256-BeqpoLIZbR5Dg7OGYGQMFWBLdD96n4t7fX8Ju9/h5JU=";
rev = "epoch-${version}";
hash = "sha256-UwQwZRzOyMvLRRmU2noxGrqblezkR8J2PNMVoyG0M0w=";
};
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"accesskit-0.12.2" = "sha256-ksaYMGT/oug7isQY8/1WD97XDUsX2ShBdabUzxWffYw=";
"accesskit-0.12.2" = "sha256-1UwgRyUe0PQrZrpS7574oNLi13fg5HpgILtZGW6JNtQ=";
"atomicwrites-0.4.2" = "sha256-QZSuGPrJXh+svMeFWqAXoqZQxLq/WfIiamqvjJNVhxA=";
"cosmic-config-0.1.0" = "sha256-eaG/HCwlKqSfEp6GEPeBS63j5WHq4qdYTNHqnW2zeeE=";
"cosmic-text-0.11.2" = "sha256-Y9i5stMYpx+iqn4y5DJm1O1+3UIGp0/fSsnNq3Zloug=";
"clipboard_macos-0.1.0" = "sha256-cG5vnkiyDlQnbEfV2sPbmBYKv1hd3pjJrymfZb8ziKk=";
"cosmic-client-toolkit-0.1.0" = "sha256-1XtyEvednEMN4MApxTQid4eed19dEN5ZBDt/XRjuda0=";
"cosmic-config-0.1.0" = "sha256-d2R5xytwf0BIbllG6elc/nn7nmiC3+VI1g3EiW8WEHA=";
"cosmic-text-0.12.1" = "sha256-x0XTxzbmtE2d4XCG/Nuq3DzBpz15BbnjRRlirfNJEiU=";
"d3d12-0.19.0" = "sha256-usrxQXWLGJDjmIdw1LBXtBvX+CchZDvE8fHC0LjvhD4=";
"fs_extra-1.3.0" = "sha256-ftg5oanoqhipPnbUsqnA4aZcyHqn9XsINJdrStIPLoE=";
"glyphon-0.5.0" = "sha256-j1HrbEpUBqazWqNfJhpyjWuxYAxkvbXzRKeSouUoPWg=";
"smithay-clipboard-0.8.0" = "sha256-4InFXm0ahrqFrtNLeqIuE3yeOpxKZJZx+Bc0yQDtv34=";
"softbuffer-0.4.1" = "sha256-a0bUFz6O8CWRweNt/OxTvflnPYwO5nm6vsyc/WcXyNg=";
"systemicons-0.7.0" = "sha256-zzAI+6mnpQOh+3mX7/sJ+w4a7uX27RduQ99PNxLNF78=";
"taffy-0.3.11" = "sha256-SCx9GEIJjWdoNVyq+RZAGn0N71qraKZxf9ZWhvyzLaI=";
"trash-5.0.0" = "sha256-6cMo2GtMJjU+fbehlsGNmj3LbzSP+vOjA4en3OgmZ54=";
"winit-0.29.10" = "sha256-ScTII2AzK3SC8MVeASZ9jhVWsEaGrSQ2BnApTxgfxK4=";
};
};
# COSMIC applications now uses vergen for the About page
# Update the COMMIT_DATE to match when the commit was made
env.VERGEN_GIT_COMMIT_DATE = "2024-06-10";
env.VERGEN_GIT_COMMIT_DATE = "2024-08-05";
env.VERGEN_GIT_SHA = src.rev;
postPatch = ''
@ -48,7 +53,7 @@ rustPlatform.buildRustPackage rec {
'';
nativeBuildInputs = [ just pkg-config makeBinaryWrapper ];
buildInputs = [ wayland ];
buildInputs = [ glib libxkbcommon wayland ];
dontUseJustBuild = true;
@ -65,7 +70,7 @@ rustPlatform.buildRustPackage rec {
postInstall = ''
wrapProgram "$out/bin/${pname}" \
--suffix XDG_DATA_DIRS : "${cosmic-icons}/share" \
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ xorg.libX11 xorg.libXcursor xorg.libXrandr xorg.libXi wayland libxkbcommon ]}
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ xorg.libX11 xorg.libXcursor xorg.libXrandr xorg.libXi wayland ]}
'';
meta = with lib; {

View File

@ -0,0 +1,288 @@
diff --git a/fsnotifier.h b/fsnotifier.h
index e7b2a42456bc..9dfb61d8d5d0 100644
--- a/fsnotifier.h
+++ b/fsnotifier.h
@@ -61,7 +61,7 @@ bool init_inotify(void);
void set_inotify_callback(void (*callback)(const char *, uint32_t));
int get_inotify_fd(void);
int watch(const char* root, array* mounts);
-void unwatch(int id);
+void unwatch(int id, char* path, unsigned int path_len);
bool process_inotify_input(void);
void close_inotify(void);
diff --git a/inotify.c b/inotify.c
index a42846379476..0a33eded78bf 100644
--- a/inotify.c
+++ b/inotify.c
@@ -22,6 +22,8 @@ typedef struct watch_node_str {
struct watch_node_str* parent;
array* kids;
unsigned int path_len;
+ struct watch_node_str* prev;
+ struct watch_node_str* next;
char path[];
} watch_node;
@@ -102,7 +104,7 @@ int get_inotify_fd(void) {
#define EVENT_MASK (IN_MODIFY | IN_ATTRIB | IN_CREATE | IN_DELETE | IN_MOVE | IN_DELETE_SELF | IN_MOVE_SELF)
-static int add_watch(unsigned int path_len, watch_node* parent) {
+static int add_watch(unsigned int path_len, watch_node* parent, watch_node** out) {
int wd = inotify_add_watch(inotify_fd, path_buf, EVENT_MASK);
if (wd < 0) {
if (errno == EACCES || errno == ENOENT) {
@@ -123,36 +125,39 @@ static int add_watch(unsigned int path_len, watch_node* parent) {
userlog(LOG_INFO, "watching %s: %d", path_buf, wd);
}
- watch_node* node = table_get(watches, wd);
- if (node != NULL) {
- if (node->wd != wd) {
- userlog(LOG_ERR, "table error: corruption at %d:%s / %d:%s / %d", wd, path_buf, node->wd, node->path, watch_count);
- return ERR_ABORT;
- }
- else if (strcmp(node->path, path_buf) != 0) {
- char buf1[PATH_MAX], buf2[PATH_MAX];
- const char* normalized1 = realpath(node->path, buf1);
- const char* normalized2 = realpath(path_buf, buf2);
- if (normalized1 == NULL || normalized2 == NULL || strcmp(normalized1, normalized2) != 0) {
- userlog(LOG_ERR, "table error: collision at %d (new %s, existing %s)", wd, path_buf, node->path);
- return ERR_ABORT;
- }
- else {
- userlog(LOG_INFO, "intersection at %d: (new %s, existing %s, real %s)", wd, path_buf, node->path, normalized1);
- return ERR_IGNORE;
- }
- }
-
- return wd;
- }
-
- node = malloc(sizeof(watch_node) + path_len + 1);
+ watch_node* existing = table_get(watches, wd);
+ if (existing != NULL) {
+ for (;;) {
+ if (existing->wd != wd) {
+ userlog(LOG_ERR, "table error: corruption at %d:%s / %d:%s / %d", wd, path_buf, existing->wd, existing->path, watch_count);
+ return ERR_ABORT;
+ }
+ if (existing->path_len == path_len && strncmp(existing->path, path_buf, path_len) == 0) {
+ return wd;
+ }
+ char buf1[PATH_MAX], buf2[PATH_MAX];
+ const char* normalized1 = realpath(existing->path, buf1);
+ const char* normalized2 = realpath(path_buf, buf2);
+ if (normalized1 != NULL && normalized2 != NULL && strcmp(normalized1, normalized2) == 0) {
+ userlog(LOG_INFO, "intersection at %d: (new %s, existing %s, real %s)", wd, path_buf, existing->path, normalized1);
+ return ERR_IGNORE;
+ }
+ if (existing->next == NULL) {
+ break;
+ }
+ existing = existing->next;
+ }
+ }
+
+ watch_node* node = malloc(sizeof(watch_node) + path_len + 1);
CHECK_NULL(node, ERR_ABORT)
memcpy(node->path, path_buf, path_len + 1);
node->path_len = path_len;
node->wd = wd;
node->parent = parent;
node->kids = NULL;
+ node->prev = existing;
+ node->next = NULL;
if (parent != NULL) {
if (parent->kids == NULL) {
@@ -162,11 +167,15 @@ static int add_watch(unsigned int path_len, watch_node* parent) {
CHECK_NULL(array_push(parent->kids, node), ERR_ABORT)
}
- if (table_put(watches, wd, node) == NULL) {
+ if (existing != NULL) {
+ existing->next = node;
+ }
+ else if (table_put(watches, wd, node) == NULL) {
userlog(LOG_ERR, "table error: unable to put (%d:%s)", wd, path_buf);
return ERR_ABORT;
}
+ *out = node;
return wd;
}
@@ -177,22 +186,27 @@ static void watch_limit_reached(void) {
}
}
-static void rm_watch(int wd, bool update_parent) {
- watch_node* node = table_get(watches, wd);
- if (node == NULL) {
- return;
+static void rm_watch(watch_node* node, bool update_parent) {
+ if (node->prev != NULL) {
+ node->prev->next = node->next;
+ node->next->prev = node->prev;
}
-
- userlog(LOG_INFO, "unwatching %s: %d (%p)", node->path, node->wd, node);
-
- if (inotify_rm_watch(inotify_fd, node->wd) < 0) {
- userlog(LOG_INFO, "inotify_rm_watch(%d:%s): %s", node->wd, node->path, strerror(errno));
+ else if (node->next != NULL) {
+ table_put(watches, node->wd, node->next);
+ node->next->prev = NULL;
+ }
+ else {
+ userlog(LOG_INFO, "unwatching %s: %d (%p)", node->path, node->wd, node);
+ if (inotify_rm_watch(inotify_fd, node->wd) < 0) {
+ userlog(LOG_INFO, "inotify_rm_watch(%d:%s): %s", node->wd, node->path, strerror(errno));
+ }
+ table_put(watches, node->wd, NULL);
}
for (int i = 0; i < array_size(node->kids); i++) {
watch_node* kid = array_get(node->kids, i);
if (kid != NULL) {
- rm_watch(kid->wd, false);
+ rm_watch(kid, false);
}
}
@@ -207,7 +221,6 @@ static void rm_watch(int wd, bool update_parent) {
array_delete(node->kids);
free(node);
- table_put(watches, wd, NULL);
}
@@ -234,7 +247,9 @@ static int walk_tree(unsigned int path_len, watch_node* parent, bool recursive,
}
}
- int id = add_watch(path_len, parent);
+
+ watch_node* node;
+ int id = add_watch(path_len, parent, &node);
if (dir == NULL) {
return id;
@@ -271,7 +286,7 @@ static int walk_tree(unsigned int path_len, watch_node* parent, bool recursive,
int subdir_id = walk_tree(path_len + 1 + name_len, table_get(watches, id), recursive, mounts);
if (subdir_id < 0 && subdir_id != ERR_IGNORE) {
- rm_watch(id, true);
+ rm_watch(node, true);
id = subdir_id;
break;
}
@@ -323,47 +338,49 @@ int watch(const char* root, array* mounts) {
}
-void unwatch(int id) {
- rm_watch(id, true);
+void unwatch(int wd, char* path, unsigned int path_len) {
+ for (watch_node* node = table_get(watches, wd); node != NULL; node = node->next) {
+ if (node->path_len == path_len && strncmp(node->path, path, path_len) == 0) {
+ rm_watch(node, true);
+ return;
+ }
+ }
}
static bool process_inotify_event(struct inotify_event* event) {
- watch_node* node = table_get(watches, event->wd);
- if (node == NULL) {
- return true;
- }
-
- bool is_dir = (event->mask & IN_ISDIR) == IN_ISDIR;
- userlog(LOG_INFO, "inotify: wd=%d mask=%d dir=%d name=%s", event->wd, event->mask & (~IN_ISDIR), is_dir, node->path);
-
- unsigned int path_len = node->path_len;
- memcpy(path_buf, node->path, path_len + 1);
- if (event->len > 0) {
- path_buf[path_len] = '/';
- unsigned int name_len = strlen(event->name);
- memcpy(path_buf + path_len + 1, event->name, name_len + 1);
- path_len += name_len + 1;
- }
+ for (watch_node* node = table_get(watches, event->wd); node != NULL; node = node->next) {
+ bool is_dir = (event->mask & IN_ISDIR) == IN_ISDIR;
+ userlog(LOG_INFO, "inotify: wd=%d mask=%d dir=%d name=%s", event->wd, event->mask & (~IN_ISDIR), is_dir, node->path);
+
+ unsigned int path_len = node->path_len;
+ memcpy(path_buf, node->path, path_len + 1);
+ if (event->len > 0) {
+ path_buf[path_len] = '/';
+ unsigned int name_len = strlen(event->name);
+ memcpy(path_buf + path_len + 1, event->name, name_len + 1);
+ path_len += name_len + 1;
+ }
- if (callback != NULL) {
- (*callback)(path_buf, event->mask);
- }
+ if (callback != NULL) {
+ (*callback)(path_buf, event->mask);
+ }
- if (is_dir && event->mask & (IN_CREATE | IN_MOVED_TO)) {
- int result = walk_tree(path_len, node, true, NULL);
- if (result < 0 && result != ERR_IGNORE && result != ERR_CONTINUE) {
- return false;
+ if (is_dir && event->mask & (IN_CREATE | IN_MOVED_TO)) {
+ int result = walk_tree(path_len, node, true, NULL);
+ if (result < 0 && result != ERR_IGNORE && result != ERR_CONTINUE) {
+ return false;
+ }
}
- }
- if (is_dir && event->mask & (IN_DELETE | IN_MOVED_FROM)) {
- for (int i = 0; i < array_size(node->kids); i++) {
- watch_node* kid = array_get(node->kids, i);
- if (kid != NULL && strncmp(path_buf, kid->path, kid->path_len) == 0) {
- rm_watch(kid->wd, false);
- array_put(node->kids, i, NULL);
- break;
+ if (is_dir && event->mask & (IN_DELETE | IN_MOVED_FROM)) {
+ for (int i = 0; i < array_size(node->kids); i++) {
+ watch_node* kid = array_get(node->kids, i);
+ if (kid != NULL && strncmp(path_buf, kid->path, kid->path_len) == 0) {
+ rm_watch(kid, false);
+ array_put(node->kids, i, NULL);
+ break;
+ }
}
}
}
diff --git a/main.c b/main.c
index b6b2e6fdb5b0..32cc8efe7856 100644
--- a/main.c
+++ b/main.c
@@ -246,7 +246,7 @@ static void unregister_roots(void) {
watch_root* root;
while ((root = array_pop(roots)) != NULL) {
userlog(LOG_INFO, "unregistering root: %s", root->path);
- unwatch(root->id);
+ unwatch(root->id, root->path, strlen(root->path));
free(root->path);
free(root);
}
@@ -422,7 +422,7 @@ static void check_root_removal(const char* path) {
for (int i = 0; i < array_size(roots); i++) {
watch_root* root = array_get(roots, i);
if (root->id >= 0 && strcmp(path, UNFLATTEN(root->path)) == 0) {
- unwatch(root->id);
+ unwatch(root->id, root->path, strlen(root->path));
root->id = -1;
userlog(LOG_INFO, "root deleted: %s\n", root->path);
report_event("DELETE", path);

View File

@ -0,0 +1,39 @@
{ lib
, stdenv
, fetchFromGitHub
}:
stdenv.mkDerivation rec {
version = "2024.2.0";
pname = "fsnotifier";
src = fetchFromGitHub {
owner = "JetBrains";
repo = "intellij-community";
rev = "0f6d9ccb67b8fcad0d802cd76209d503c4ed66a6";
sha256 = "3TAiVvKi50JQRrVG6J7LUJKTiuOTDyKt4DhoA1QmbrM=";
sparseCheckout = [ "native/fsNotifier/linux" ];
};
# fix for hard-links in nix-store, https://github.com/JetBrains/intellij-community/pull/2171
patches = [ ./fsnotifier.patch ];
sourceRoot = "${src.name}/native/fsNotifier/linux";
buildPhase = ''
mkdir -p $out/bin
$CC -O2 -Wall -Wextra -Wpedantic -D "VERSION=\"${version}\"" -std=c11 main.c inotify.c util.c -o fsnotifier
cp fsnotifier $out/bin/fsnotifier
'';
meta = {
homepage = "https://github.com/JetBrains/intellij-community/tree/master/native/fsNotifier/linux";
description = "IntelliJ Platform companion program for watching and reporting file and directory structure modification";
license = lib.licenses.asl20;
mainProgram = "fsnotifier";
maintainers = with lib.maintainers; [ shyim ];
platforms = lib.platforms.linux;
};
}

View File

@ -16,17 +16,17 @@
buildGoModule rec {
pname = "grafana-alloy";
version = "1.2.1";
version = "1.3.0";
src = fetchFromGitHub {
rev = "v${version}";
owner = "grafana";
repo = "alloy";
hash = "sha256-RwTwwWz5nEk5eeCK/cZivd3r6WmoIqKjNtEQ0RVk1pw=";
hash = "sha256-2OpBRSX/t6hwf1fHogrNTuDAmKArVXxwKHXuHyTXnYA=";
};
proxyVendor = true;
vendorHash = "sha256-UYFZmrE0Pm5bdhloaR9zSEvlPWV/uWo85zjmIuN8Jvc=";
vendorHash = "sha256-eMtwmADYbvpIm4FHTHieQ1i4xCty5xCwsZ/JD9r94/8=";
nativeBuildInputs = [ fixup-yarn-lock yarn nodejs installShellFiles ];
@ -57,7 +57,7 @@ buildGoModule rec {
yarnOfflineCache = fetchYarnDeps {
yarnLock = "${src}/internal/web/ui/yarn.lock";
hash = "sha256-8/siWMFoUokMXJ13QT8050AXynsApiC67TP/7Hvugsk=";
hash = "sha256-Jk+zqR/+NBde9ywncIEJM4kgavqiDvcIAjxJCSMrZDc=";
};
preBuild = ''

View File

@ -1,13 +1,13 @@
{ lib, buildGoModule, fetchFromGitHub, nix-update-script, testers, immich-go }:
buildGoModule rec {
pname = "immich-go";
version = "0.20.1";
version = "0.21.1";
src = fetchFromGitHub {
owner = "simulot";
repo = "immich-go";
rev = "${version}";
hash = "sha256-9pIQ3xRskPZtwjCJ7MG8IaVsVkqM6s3Jxy4qG842/h8=";
hash = "sha256-mN/3ctEX5R7UepJUs3Ble0s2c0gRxHe5CDey9MoE4YA=";
# Inspired by: https://github.com/NixOS/nixpkgs/blob/f2d7a289c5a5ece8521dd082b81ac7e4a57c2c5c/pkgs/applications/graphics/pdfcpu/default.nix#L20-L32
# The intention here is to write the information into files in the `src`'s
@ -24,7 +24,7 @@ buildGoModule rec {
'';
};
vendorHash = "sha256-MKWlMoJZ0OECa7Ej26m4D6JYWjnnRuh0rdBUUPnF6SY=";
vendorHash = "sha256-Y6awfvbKV0G3VFXCUHLSwUkGaMkTaacruSz8KVi6NoQ=";
# options used by upstream:
# https://github.com/simulot/immich-go/blob/0.13.2/.goreleaser.yaml

View File

@ -5,25 +5,24 @@
}:
appimageTools.wrapType2 rec {
pname = "lunar-client";
version = "3.2.11";
pname = "lunarclient";
version = "3.2.12";
src = fetchurl {
url = "https://launcherupdates.lunarclientcdn.com/Lunar%20Client-${version}.AppImage";
hash = "sha512-qRucW9x4LMmTb8pw0zY1EKXkPfjdahCi2PN/bfdB8CYA4wZp0bfZNaGtPpI/BKPlnR/nfpypEdnHsoqlL9KiCg==";
hash = "sha512-dqFFi5Vri5oEbyDdzKiWPF1mbSf0Qv2MBuEqF/rIs1aYMNjCQDu2CqTrhLtctu2VXxKlgzaqktFWKs9WMZayZA==";
};
extraInstallCommands =
let contents = appimageTools.extract { inherit pname version src; };
in ''
source "${makeWrapper}/nix-support/setup-hook"
wrapProgram $out/bin/lunar-client \
wrapProgram $out/bin/lunarclient \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
install -Dm444 ${contents}/launcher.desktop $out/share/applications/lunar-client.desktop
install -Dm444 ${contents}/launcher.png $out/share/pixmaps/lunar-client.png
substituteInPlace $out/share/applications/lunar-client.desktop \
--replace 'Exec=AppRun --no-sandbox %U' 'Exec=lunar-client' \
--replace 'Icon=launcher' 'Icon=lunar-client'
install -Dm444 ${contents}/lunarclient.desktop -t $out/share/applications/
install -Dm444 ${contents}/lunarclient.png -t $out/share/pixmaps/
substituteInPlace $out/share/applications/lunarclient.desktop \
--replace-fail 'Exec=AppRun --no-sandbox %U' 'Exec=lunarclient' \
'';
passthru.updateScript = ./update.sh;
@ -32,7 +31,7 @@ appimageTools.wrapType2 rec {
description = "Free Minecraft client with mods, cosmetics, and performance boost";
homepage = "https://www.lunarclient.com/";
license = with licenses; [ unfree ];
mainProgram = "lunar-client";
mainProgram = "lunarclient";
maintainers = with maintainers; [ Technical27 surfaceflinger ];
platforms = [ "x86_64-linux" ];
};

View File

@ -2,7 +2,6 @@
lib,
rustPlatform,
fetchFromGitHub,
nix-update-script,
pkg-config,
udev,
stdenv,
@ -24,8 +23,6 @@ rustPlatform.buildRustPackage rec {
lockFile = ./Cargo.lock;
};
passthru.updateScript = nix-update-script { };
postPatch = ''
ln -s ${./Cargo.lock} Cargo.lock
'';

View File

@ -0,0 +1,80 @@
{
lib,
stdenv,
removeReferencesTo,
fetchFromGitHub,
autoconf,
automake,
libtool,
gitMinimal,
perl,
python3,
flex,
hwloc,
libevent,
zlib,
pmix,
}:
stdenv.mkDerivation rec {
pname = "prrte";
version = "3.0.5";
src = fetchFromGitHub {
owner = "openpmix";
repo = "prrte";
rev = "v${version}";
sha256 = "sha256-RDxd4veLGbN+T7xCDnNp2lbOM7mwKKD+SKdPmExr1C8=";
fetchSubmodules = true;
};
outputs = [
"out"
"dev"
];
postPatch = ''
patchShebangs ./autogen.pl ./config
'';
preConfigure = ''
./autogen.pl
'';
postInstall = ''
moveToOutput "bin/prte_info" "''${!outputDev}"
# Fix a broken symlink, created due to FHS assumptions
rm "$out/bin/pcc"
ln -s ${lib.getDev pmix}/bin/pmixcc "''${!outputDev}"/bin/pcc
remove-references-to -t "''${!outputDev}" $(readlink -f $out/lib/libprrte${stdenv.hostPlatform.extensions.library})
'';
nativeBuildInputs = [
removeReferencesTo
perl
python3
autoconf
automake
libtool
flex
gitMinimal
];
buildInputs = [
libevent
hwloc
zlib
pmix
];
enableParallelBuilding = true;
meta = {
description = "PMIx Reference Runtime Environment";
homepage = "https://docs.prrte.org/";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ markuskowa ];
platforms = lib.platforms.linux;
};
}

View File

@ -21,13 +21,13 @@ let
in
stdenv'.mkDerivation (finalAttrs: {
pname = "renovate";
version = "37.440.7";
version = "38.18.17";
src = fetchFromGitHub {
owner = "renovatebot";
repo = "renovate";
rev = "refs/tags/${finalAttrs.version}";
hash = "sha256-VMv55BVeauRa/hmg1Y7D15ltAbccdcMd4Azk5IInuH0=";
hash = "sha256-Mur4UH63unYjgwkj9Rscg9V2M38XLrsNuqz+mWn0wR4=";
};
postPatch = ''
@ -44,7 +44,7 @@ stdenv'.mkDerivation (finalAttrs: {
pnpmDeps = pnpm_9.fetchDeps {
inherit (finalAttrs) pname version src;
hash = "sha256-ZYQ7G2BKkRxuyg31dysim+P1Vje0VysJm+UFyy4xuKI=";
hash = "sha256-3XSseB0rjFv1bsJ5S2fCveFicSQFnTwz4MmjzC7t9Jw=";
};
env.COREPACK_ENABLE_STRICT = 0;

View File

@ -0,0 +1,69 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
autoreconfHook,
gettext,
perl,
pkg-config,
libxml2,
pango,
cairo,
groff,
tcl,
darwin,
}:
perl.pkgs.toPerlModule (
stdenv.mkDerivation rec {
pname = "rrdtool";
version = "1.9.0";
src = fetchFromGitHub {
owner = "oetiker";
repo = "rrdtool-1.x";
rev = "v${version}";
hash = "sha256-CPbSu1mosNlfj2nqiNVH14a5C5njkfvJM8ix3X3aP8E=";
};
# Fix darwin build
patches = lib.optional stdenv.isDarwin (fetchpatch {
url = "https://github.com/oetiker/rrdtool-1.x/pull/1262.patch";
hash = "sha256-aP0rmDlILn6VC8Tg7HpRXbxL9+KD/PRTbXnbQ7HgPEg=";
});
nativeBuildInputs = [
pkg-config
autoreconfHook
];
buildInputs =
[
gettext
perl
libxml2
pango
cairo
groff
]
++ lib.optionals stdenv.isDarwin [
tcl
darwin.apple_sdk.frameworks.ApplicationServices
];
postInstall = ''
# for munin and rrdtool support
mkdir -p $out/${perl.libPrefix}
mv $out/lib/perl/5* $out/${perl.libPrefix}
'';
meta = with lib; {
homepage = "https://oss.oetiker.ch/rrdtool/";
description = "High performance logging in Round Robin Databases";
license = licenses.gpl2Only;
platforms = platforms.linux ++ platforms.darwin;
maintainers = with maintainers; [ pSub ];
};
}
)

View File

@ -16,13 +16,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "saunafs";
version = "4.3.0";
version = "4.4.0";
src = fetchFromGitHub {
owner = "leil-io";
repo = "saunafs";
rev = "v${finalAttrs.version}";
hash = "sha256-T/K13JygU7Q/ylPk5ZAby3Kepi8I4z3vBBaigboJhus=";
hash = "sha256-t2fb8AA9m2I7Qna/v4F2GNL02iCU0r7zz5TgajHUmrg=";
};
patches = [

View File

@ -9,18 +9,18 @@
buildGoModule rec {
pname = "shopware-cli";
version = "0.4.50";
version = "0.4.51";
src = fetchFromGitHub {
repo = "shopware-cli";
owner = "FriendsOfShopware";
rev = version;
hash = "sha256-dVq2Aw6oYkr8LAdd0LeFvkzMYSronCsDxesqUh2IGV0=";
hash = "sha256-mimFOZjWiDodCopJ23RZxWijOT7bDPUOH+A8GL/UyXs=";
};
nativeBuildInputs = [ installShellFiles makeWrapper ];
nativeCheckInputs = [ git dart-sass ];
vendorHash = "sha256-ABvjNRADmamYiq5A0NZjv1HlGxxAHQlut1ZR2kA04oU=";
vendorHash = "sha256-NXk3wH/XHohI7aYK+dvUmh+0hUrBNiH6xouT9EM8eiE=";
postInstall = ''
export HOME="$(mktemp -d)"

View File

@ -6,13 +6,13 @@
buildGoModule rec {
pname = "trickest-cli";
version = "1.8.1";
version = "1.8.2";
src = fetchFromGitHub {
owner = "trickest";
repo = "trickest-cli";
rev = "refs/tags/v${version}";
hash = "sha256-6fshMuwGv4tkaqySHVsCwX+kBpUt+u/x9qnJNZ3c0HA=";
hash = "sha256-X7JGzTaTm7CE5+mTvnV93d5Hx2A1vF+aufmC5/xWRtc=";
};
vendorHash = "sha256-gk8YMMvTHBL7yoXU9n0jhtUS472fqLW5m+mSl4Lio6c=";

View File

@ -2,11 +2,11 @@
appimageTools.wrapType2 rec {
pname = "xlights";
version = "2024.13";
version = "2024.14";
src = fetchurl {
url = "https://github.com/smeighan/xLights/releases/download/${version}/xLights-${version}-x86_64.AppImage";
hash = "sha256-Oiavnnk5geFao7lq0GpmNg+xs1FeUOt3JhSbLUV8GkE=";
hash = "sha256-WqLPesH6KaOAj7gYycyrmzG2NIkKs3cjUm+K83rvha0=";
};
meta = {

View File

@ -0,0 +1,37 @@
{ lib, mkCoqDerivation, coq, version ? null }:
let
repo = "stalmarck";
defaultVersion = with lib.versions; lib.switch coq.coq-version [
{ case = isEq "8.20"; out = "8.20.0"; }
] null;
release = {
"8.20.0".sha256 = "sha256-jITxQT1jLyZvWCGPnmK8i3IrwsZwMPOV0aBe9r22TIQ=";
};
releaseRev = v: "v${v}";
packages = [ "stalmarck" "stalmarck-tactic" ];
stalmarck_ = package: let
pname = package;
istac = package == "stalmarck-tactic";
propagatedBuildInputs =
lib.optional istac (stalmarck_ "stalmarck");
description =
if istac then
"Coq tactic and verified tool for proving tautologies using Stålmarck's algorithm"
else
"A two-level approach to prove tautologies using Stålmarck's algorithm in Coq.";
in mkCoqDerivation {
inherit version pname defaultVersion release releaseRev repo
propagatedBuildInputs;
mlPlugin = istac;
useDune = istac;
meta = { inherit description; license = lib.licenses.lgpl21Plus; };
passthru = lib.genAttrs packages stalmarck_;
};
in
stalmarck_ "stalmarck-tactic"

View File

@ -139,10 +139,12 @@ in stdenv.mkDerivation {
patches = [
./opencl.patch
# Manual backport of https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30510
# Fixes video corruption / crashes when decoding video on AMD iGPUs
# FIXME: remove when merged
./vcn-pagefault.patch
# FIXME: remove in the next update
(fetchpatch {
url = "https://gitlab.freedesktop.org/mesa/mesa/-/commit/8b35da91b23afc65256b78a59d116fd09544cd28.patch";
hash = "sha256-z0KKBtot3VxXiS16YcmwZbeg8HSCLzEbvWdufI/fOk8=";
})
];
postPatch = ''

View File

@ -1,10 +0,0 @@
--- a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c
+++ b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c
@@ -1390,6 +1390,7 @@ static unsigned rvcn_dec_dynamic_dpb_t2_message(struct radeon_decoder *dec, rvcn
dummy->dpb.res;
addr = dec->ws->buffer_get_virtual_address(dummy_res->buf);
}
+ dec->ws->cs_add_buffer(&dec->cs, d->dpb.res->buf, RADEON_USAGE_READWRITE | RADEON_USAGE_SYNCHRONIZED, RADEON_DOMAIN_VRAM);
dynamic_dpb_t2->dpbAddrLo[i] = addr;
dynamic_dpb_t2->dpbAddrHi[i] = addr >> 32;
++dynamic_dpb_t2->dpbArraySize;

View File

@ -1,136 +1,270 @@
{ lib, stdenv, fetchurl, removeReferencesTo, gfortran, perl, libnl
, rdma-core, zlib, numactl, libevent, hwloc, targetPackages
, libpsm2, libfabric, pmix, ucx, ucc, makeWrapper
, config
# Enable CUDA support
, cudaSupport ? config.cudaSupport, cudaPackages
# Enable the Sun Grid Engine bindings
, enableSGE ? false
# Pass PATH/LD_LIBRARY_PATH to point to current mpirun by default
, enablePrefix ? false
# Enable libfabric support (necessary for Omnipath networks) on x86_64 linux
, fabricSupport ? stdenv.isLinux && stdenv.isx86_64
# Enable Fortran support
, fortranSupport ? true
{
lib,
stdenv,
fetchurl,
removeReferencesTo,
gfortran,
perl,
libnl,
rdma-core,
zlib,
numactl,
libevent,
hwloc,
targetPackages,
libpsm2,
libfabric,
pmix,
ucx,
ucc,
prrte,
makeWrapper,
python3,
config,
# Enable CUDA support
cudaSupport ? config.cudaSupport,
cudaPackages,
# Enable the Sun Grid Engine bindings
enableSGE ? false,
# Pass PATH/LD_LIBRARY_PATH to point to current mpirun by default
enablePrefix ? false,
# Enable libfabric support (necessary for Omnipath networks) on x86_64 linux
fabricSupport ? stdenv.isLinux && stdenv.isx86_64,
# Enable Fortran support
fortranSupport ? true,
# AVX/SSE options. See passthru.defaultAvxOptions for the available options.
# note that opempi fails to build with AVX disabled, meaning that everything
# up to AVX is enabled by default.
avxOptions ? { },
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "openmpi";
version = "4.1.6";
version = "5.0.3";
src = with lib.versions; fetchurl {
url = "https://www.open-mpi.org/software/ompi/v${major version}.${minor version}/downloads/${pname}-${version}.tar.bz2";
sha256 = "sha256-90CZRIVRbetjtTEa8SLCZRefUyig2FelZ7hdsAsR5BU=";
src = fetchurl {
url = "https://www.open-mpi.org/software/ompi/v${lib.versions.majorMinor finalAttrs.version}/downloads/openmpi-${finalAttrs.version}.tar.bz2";
sha256 = "sha256-mQWC8gazqzLpOKoxu/B8Y5No5EBdyhlvq+fw927tqQs=";
};
postPatch = ''
patchShebangs ./
# Ensure build is reproducible
ts=`date -d @$SOURCE_DATE_EPOCH`
sed -i 's/OPAL_CONFIGURE_USER=.*/OPAL_CONFIGURE_USER="nixbld"/' configure
sed -i 's/OPAL_CONFIGURE_HOST=.*/OPAL_CONFIGURE_HOST="localhost"/' configure
sed -i "s/OPAL_CONFIGURE_DATE=.*/OPAL_CONFIGURE_DATE=\"$ts\"/" configure
find -name "Makefile.in" -exec sed -i "s/\`date\`/$ts/" \{} \;
# This is dynamically detected. Configure does not provide fine grained options
# We just disable the check in the configure script for now
${lib.pipe (finalAttrs.passthru.defaultAvxOptions // avxOptions) [
(lib.mapAttrsToList (
option: val: ''
substituteInPlace configure \
--replace-fail \
ompi_cv_op_avx_check_${option}=yes \
ompi_cv_op_avx_check_${option}=${if val then "yes" else "no"}
''
))
(lib.concatStringsSep "\n")
]}
'';
outputs = [ "out" "man" "dev" ];
# Ensure build is reproducible according to manual
# https://docs.open-mpi.org/en/v5.0.x/release-notes/general.html#general-notes
env = {
USER = "nixbld";
HOSTNAME = "localhost";
SOURCE_DATE_EPOCH = "0";
};
buildInputs = [ zlib ]
++ lib.optionals stdenv.isLinux [ libnl numactl pmix ucx ucc ]
outputs =
[ "out" ]
++ lib.optionals stdenv.isLinux [
"man"
"dev"
];
buildInputs =
[
zlib
libevent
hwloc
]
++ lib.optionals stdenv.isLinux [
libnl
numactl
pmix
ucx
ucc
prrte
]
++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ]
++ [ libevent hwloc ]
++ lib.optional (stdenv.isLinux || stdenv.isFreeBSD) rdma-core
++ lib.optionals fabricSupport [ libpsm2 libfabric ];
++ lib.optionals (stdenv.isLinux || stdenv.isFreeBSD) [ rdma-core ]
# needed for internal pmix
++ lib.optionals (!stdenv.isLinux) [ python3 ]
++ lib.optionals fabricSupport [
libpsm2
libfabric
];
nativeBuildInputs = [ perl removeReferencesTo makeWrapper ]
nativeBuildInputs =
[
perl
removeReferencesTo
makeWrapper
]
++ lib.optionals cudaSupport [ cudaPackages.cuda_nvcc ]
++ lib.optionals fortranSupport [ gfortran ];
configureFlags = lib.optional (!cudaSupport) "--disable-mca-dso"
++ lib.optional (!fortranSupport) "--disable-mpi-fortran"
++ lib.optionals stdenv.isLinux [
"--with-libnl=${lib.getDev libnl}"
"--with-pmix=${lib.getDev pmix}"
"--with-pmix-libdir=${pmix}/lib"
"--enable-mpi-cxx"
] ++ lib.optional enableSGE "--with-sge"
++ lib.optional enablePrefix "--enable-mpirun-prefix-by-default"
configureFlags = [
(lib.enableFeature cudaSupport "mca-dso")
(lib.enableFeature fortranSupport "mpi-fortran")
(lib.withFeatureAs stdenv.isLinux "libnl" (lib.getDev libnl))
"--with-pmix=${if stdenv.isLinux then (lib.getDev pmix) else "internal"}"
(lib.withFeatureAs stdenv.isLinux "pmix-libdir" "${lib.getLib pmix}/lib")
# Puts a "default OMPI_PRTERUN" value to mpirun / mpiexec executables
(lib.withFeatureAs stdenv.isLinux "prrte" (lib.getBin prrte))
(lib.withFeature enableSGE "sge")
(lib.enableFeature enablePrefix "mpirun-prefix-by-default")
# TODO: add UCX support, which is recommended to use with cuda for the most robust OpenMPI build
# https://github.com/openucx/ucx
# https://www.open-mpi.org/faq/?category=buildcuda
++ lib.optionals cudaSupport [ "--with-cuda=${lib.getDev cudaPackages.cuda_cudart}" "--enable-dlopen" ]
++ lib.optionals fabricSupport [ "--with-psm2=${lib.getDev libpsm2}" "--with-libfabric=${lib.getDev libfabric}" ]
;
(lib.withFeatureAs cudaSupport "cuda" (lib.getDev cudaPackages.cuda_cudart))
(lib.enableFeature cudaSupport "dlopen")
(lib.withFeatureAs fabricSupport "psm2" (lib.getDev libpsm2))
(lib.withFeatureAs fabricSupport "ofi" (lib.getDev libfabric))
# The flag --without-ofi-libdir is not supported from some reason, so we
# don't use lib.withFeatureAs
] ++ lib.optionals fabricSupport [ "--with-ofi-libdir=${lib.getLib libfabric}/lib" ];
enableParallelBuilding = true;
postInstall = ''
postInstall =
let
# The file names we need to iterate are a combination of ${p}${s}, and there
# are 7x3 such options. We use lib.mapCartesianProduct to iterate them all.
fileNamesToIterate = {
p = [
"mpi"
"shmem"
"osh"
];
s =
[
"CC"
"c++"
"cxx"
"cc"
]
++ lib.optionals fortranSupport [
"f77"
"f90"
"fort"
];
};
wrapperDataSubstitutions =
{
# The attr key is the filename prefix. The list's 1st value is the
# compiler=_ line that should be replaced by a compiler=#2 string, where
# #2 is the 2nd value in the list.
"cc" = [
"gcc"
"${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc"
];
"c++" = [
"g++"
"${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++"
];
}
// lib.optionalAttrs fortranSupport {
"fort" = [
"gfortran"
"${targetPackages.gfortran}/bin/${targetPackages.gfortran.targetPrefix}gfortran"
];
};
# The -wrapper-data.txt files that are not symlinks, need to be iterated as
# well, here they start withw ${part1}${part2}, and we use
# lib.mapCartesianProduct as well.
wrapperDataFileNames = {
part1 = [
"mpi"
"shmem"
];
part2 = builtins.attrNames wrapperDataSubstitutions;
};
in
''
find $out/lib/ -name "*.la" -exec rm -f \{} \;
for f in mpi shmem osh; do
for i in f77 f90 CC c++ cxx cc fort; do
moveToOutput "bin/$f$i" "''${!outputDev}"
echo "move $fi$i"
moveToOutput "share/openmpi/$f$i-wrapper-data.txt" "''${!outputDev}"
done
done
for i in ortecc orte-info ompi_info oshmem_info opal_wrapper; do
moveToOutput "bin/$i" "''${!outputDev}"
done
moveToOutput "share/openmpi/ortecc-wrapper-data.txt" "''${!outputDev}"
'';
postFixup = ''
remove-references-to -t $dev $(readlink -f $out/lib/libopen-pal${stdenv.hostPlatform.extensions.sharedLibrary})
remove-references-to -t $man $(readlink -f $out/lib/libopen-pal${stdenv.hostPlatform.extensions.sharedLibrary})
# The path to the wrapper is hard coded in libopen-pal.so, which we just cleared.
wrapProgram $dev/bin/opal_wrapper \
--set OPAL_INCLUDEDIR $dev/include \
--set OPAL_PKGDATADIR $dev/share/openmpi
# The main wrapper that all the rest of the commonly used binaries are
# symlinked to
moveToOutput "bin/opal_wrapper" "''${!outputDev}"
# All of the following files are symlinks to opal_wrapper
${lib.pipe fileNamesToIterate [
(lib.mapCartesianProduct (
{ p, s }:
''
echo "handling ${p}${s}"
moveToOutput "bin/${p}${s}" "''${!outputDev}"
moveToOutput "share/openmpi/${p}${s}-wrapper-data.txt" "''${!outputDev}"
''
))
(lib.concatStringsSep "\n")
]}
# default compilers should be indentical to the
# compilers at build time
${lib.pipe wrapperDataFileNames [
(lib.mapCartesianProduct (
{ part1, part2 }:
''
substituteInPlace "''${!outputDev}/share/openmpi/${part1}${part2}-wrapper-data.txt" \
--replace-fail \
compiler=${lib.elemAt wrapperDataSubstitutions.${part2} 0} \
compiler=${lib.elemAt wrapperDataSubstitutions.${part2} 1}
''
))
(lib.concatStringsSep "\n")
]}
# A symlink to ${lib.getDev pmix}/bin/pmixcc upstreeam puts here as well
# from some reason.
moveToOutput "bin/pcc" "''${!outputDev}"
echo "$dev/share/openmpi/mpicc-wrapper-data.txt"
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
$dev/share/openmpi/mpicc-wrapper-data.txt
# Handle informative binaries about the compilation
for i in {prte,ompi,oshmem}_info; do
moveToOutput "bin/$i" "''${!outputDev}"
done
'';
echo "$dev/share/openmpi/ortecc-wrapper-data.txt"
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
$dev/share/openmpi/ortecc-wrapper-data.txt
echo "$dev/share/openmpi/mpic++-wrapper-data.txt"
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++:' \
$dev/share/openmpi/mpic++-wrapper-data.txt
'' + lib.optionalString fortranSupport ''
echo "$dev/share/openmpi/mpifort-wrapper-data.txt"
sed -i 's:compiler=.*:compiler=${gfortran}/bin/${gfortran.targetPrefix}gfortran:' \
$dev/share/openmpi/mpifort-wrapper-data.txt
postFixup =
lib.optionalString (lib.elem "man" finalAttrs.outputs) ''
remove-references-to -t "''${!outputMan}" $(readlink -f $out/lib/libopen-pal${stdenv.hostPlatform.extensions.sharedLibrary})
''
+ lib.optionalString (lib.elem "dev" finalAttrs.outputs) ''
remove-references-to -t "''${!outputDev}" $out/bin/mpirun
remove-references-to -t "''${!outputDev}" $(readlink -f $out/lib/libopen-pal${stdenv.hostPlatform.extensions.sharedLibrary})
# The path to the wrapper is hard coded in libopen-pal.so, which we just cleared.
wrapProgram "''${!outputDev}/bin/opal_wrapper" \
--set OPAL_INCLUDEDIR "''${!outputDev}/include" \
--set OPAL_PKGDATADIR "''${!outputDev}/share/openmpi"
'';
doCheck = true;
passthru = {
defaultAvxOptions = {
sse3 = true;
sse41 = true;
avx = true;
avx2 = stdenv.hostPlatform.avx2Support;
avx512 = stdenv.hostPlatform.avx512Support;
};
inherit cudaSupport;
cudatoolkit = cudaPackages.cudatoolkit; # For backward compatibility only
};
meta = with lib; {
meta = {
homepage = "https://www.open-mpi.org/";
description = "Open source MPI-3 implementation";
longDescription = "The Open MPI Project is an open source MPI-3 implementation that is developed and maintained by a consortium of academic, research, and industry partners. Open MPI is therefore able to combine the expertise, technologies, and resources from all across the High Performance Computing community in order to build the best MPI library available. Open MPI offers advantages for system and software vendors, application developers and computer science researchers.";
maintainers = with maintainers; [ markuskowa ];
license = licenses.bsd3;
platforms = platforms.unix;
maintainers = with lib.maintainers; [ markuskowa ];
license = lib.licenses.bsd3;
platforms = lib.platforms.unix;
};
}
})

View File

@ -71,8 +71,9 @@ stdenv.mkDerivation rec {
# Pin the compiler to the current version in a cross compiler friendly way.
# Same pattern as for openmpi (see https://github.com/NixOS/nixpkgs/pull/58964#discussion_r275059427).
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
$dev/share/pmix/pmixcc-wrapper-data.txt
substituteInPlace $dev/share/pmix/pmixcc-wrapper-data.txt \
--replace-fail compiler=gcc \
compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc
'';
enableParallelBuilding = true;

View File

@ -7,7 +7,7 @@
buildDunePackage rec {
pname = "algaeff";
version = "1.1.0";
version = "2.0.0";
minimalOCamlVersion = "5.0";
@ -15,7 +15,7 @@ buildDunePackage rec {
owner = "RedPRL";
repo = pname;
rev = version;
hash = "sha256-7kwQmoT8rpQWPHc+BZQi9fcZhgHxS99158ebXAXlpQ8=";
hash = "sha256-VRZfULbXKRcExU1bnEu/X1KPX+L+dzcRYZVD985rQT4=";
};
doCheck = true;

View File

@ -1,29 +1,21 @@
{ lib, fetchFromGitHub, buildDunePackage
, algaeff
, bwd
, eio
, eio_main
, lsp
, notty
}:
buildDunePackage rec {
pname = "asai";
version = "0.1.1";
version = "0.3.0";
src = fetchFromGitHub {
owner = "RedPRL";
repo = pname;
rev = version;
hash = "sha256-Jd90WhSjK4K2amFA5uyGF57NzsgHA8QiccX6qtxO1rQ=";
hash = "sha256-Rp4TvSbRz+5+X4XJ1tKUDDgldpLzHHtaF7G7AG6HgKU=";
};
propagatedBuildInputs = [
algaeff
bwd
lsp
eio
eio_main
notty
];
meta = {

View File

@ -1,6 +1,7 @@
{ lib, fetchFromGitHub, nix-update-script
, buildDunePackage
, core
, base
, ppx_sexp_conv
}:
buildDunePackage rec {
@ -14,10 +15,11 @@ buildDunePackage rec {
sha256 = "sha256-Z2rOaiNGvVDbRwf5XfoNIcenQdrE3fxHnfzyi6Ki2Ic=";
};
minimalOCamlVersion = "4.08";
minimalOCamlVersion = "4.14";
propagatedBuildInputs = [
core
base
ppx_sexp_conv
];
passthru.updateScript = nix-update-script { };

View File

@ -4,8 +4,8 @@
}:
let params = if lib.versionAtLeast ocaml.version "5.0" then {
version = "5.1.0";
hash = "sha256-J3qkytgJkk2gT83KJ47nNM4cXqVHbx4iTPK+fLwR7Wk=";
version = "5.2.0";
hash = "sha256-DJzXjV5Tjf69FKUiRioeHghks72pOOHYd73vqhmecS8=";
propagatedBuildInputs = [ algaeff bwd ];
} else {
version = "2.0.0";

View File

@ -4,7 +4,7 @@
buildPythonPackage,
fetchFromGitHub,
hypothesis,
poetry-core,
hatchling,
pytest-asyncio,
pytestCheckHook,
pythonOlder,
@ -13,8 +13,8 @@
buildPythonPackage rec {
pname = "aiosmtplib";
version = "3.0.1";
format = "pyproject";
version = "3.0.2";
pyproject = true;
disabled = pythonOlder "3.7";
@ -22,10 +22,10 @@ buildPythonPackage rec {
owner = "cole";
repo = "aiosmtplib";
rev = "refs/tags/v${version}";
hash = "sha256-67Z+k+PBIGP2oGb/52dMtsapUsHufvFcX+wWiMj5Jsg=";
hash = "sha256-1GuxlgNvzVv6hEQY1Mkv7NxAoOik9gpIS90a6flfC+k=";
};
nativeBuildInputs = [ poetry-core ];
build-system = [ hatchling ];
nativeCheckInputs = [
aiosmtpd

View File

@ -15,7 +15,7 @@
buildPythonPackage rec {
pname = "dvc-data";
version = "3.15.1";
version = "3.15.2";
pyproject = true;
disabled = pythonOlder "3.8";
@ -24,7 +24,7 @@ buildPythonPackage rec {
owner = "iterative";
repo = "dvc-data";
rev = "refs/tags/${version}";
hash = "sha256-pr5RtVlGKKtpcmmCNGqcLiBFzJcajpqtPjBbzeCCHF8=";
hash = "sha256-8720nqWmi/1Be2ckuCvctfJbOSFCME27OOtA3qZMr7E=";
};
nativeBuildInputs = [ setuptools-scm ];

View File

@ -33,7 +33,7 @@
buildPythonPackage rec {
pname = "dvclive";
version = "3.47.0";
version = "3.48.0";
pyproject = true;
disabled = pythonOlder "3.9";
@ -42,7 +42,7 @@ buildPythonPackage rec {
owner = "iterative";
repo = "dvclive";
rev = "refs/tags/${version}";
hash = "sha256-oC45cSqiKeorbyPe3GIsJ824U3OS1cKvWxUM901/QwQ=";
hash = "sha256-WIVRpJD7B6OI7ZfdHT+DunRRiaxHhri5Ge/B1BQ1kJY=";
};
build-system = [ setuptools-scm ];

View File

@ -13,14 +13,14 @@
buildPythonPackage rec {
pname = "hcloud";
version = "2.1.0";
version = "2.2.0";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-cDyy2x1JINthvhuzQdwgMcykGrypnTkk4rJBk1WQ1HQ=";
hash = "sha256-NlEpnSmNY8rcfCJVgKqufCmEMSp4UBr5Po2rh1V8OrA=";
};
build-system = [ setuptools ];

View File

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

View File

@ -1,14 +1,15 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, setuptools-generate
, setuptools-scm
, colorama
, jinja2
, jsonschema
, pygls
, tree-sitter0_21
, pytestCheckHook
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools-generate,
setuptools-scm,
colorama,
jinja2,
jsonschema,
pygls,
tree-sitter,
pytestCheckHook,
}:
buildPythonPackage rec {
@ -33,16 +34,9 @@ buildPythonPackage rec {
jinja2
jsonschema
pygls
# The build won't fail if we had used tree-sitter (version > 0.21), but
# this package is only a dependency of autotools-language-server which also
# depends on tree-sitter-languages which must use tree-sitter0_21 and not
# tree-sitter. Hence we avoid different tree-sitter versions dependency
# mismatch by defaulting here to this lower version.
tree-sitter0_21
];
nativeCheckInputs = [
pytestCheckHook
tree-sitter
];
nativeCheckInputs = [ pytestCheckHook ];
pythonImportsCheck = [ "lsp_tree_sitter" ];

View File

@ -4,10 +4,16 @@
buildPythonPackage,
dotmap,
fetchFromGitHub,
hypothesis,
packaging,
parse,
pexpect,
platformdirs,
ppk2-api,
print-color,
protobuf,
pygatt,
pyarrow,
pyparsing,
pypubsub,
pyqrcode,
pyserial,
@ -19,6 +25,7 @@
setuptools,
tabulate,
timeago,
webencodings,
}:
buildPythonPackage rec {
@ -35,15 +42,22 @@ buildPythonPackage rec {
hash = "sha256-s56apVx7+EXkdw3FUjyGKGFjP+IVbO0/VDB4urXEtXQ=";
};
pythonRelaxDeps = [ "protobuf" ];
build-system = [ setuptools ];
dependencies = [
bleak
dotmap
packaging
parse
pexpect
platformdirs
ppk2-api
print-color
protobuf
pygatt
pyarrow
pyparsing
pypubsub
pyqrcode
pyserial
@ -52,6 +66,7 @@ buildPythonPackage rec {
setuptools
tabulate
timeago
webencodings
];
passthru.optional-dependencies = {
@ -59,9 +74,9 @@ buildPythonPackage rec {
};
nativeCheckInputs = [
pytap2
hypothesis
pytestCheckHook
];
] ++ lib.flatten (builtins.attrValues passthru.optional-dependencies);
preCheck = ''
export PATH="$PATH:$out/bin";
@ -79,6 +94,7 @@ buildPythonPackage rec {
"test_main_support"
"test_MeshInterface"
"test_message_to_json_shows_all"
"test_node"
"test_SerialInterface_single_port"
"test_support_info"
"test_TCPInterface"

View File

@ -1,37 +1,34 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
fetchPypi,
setuptools,
pythonOlder,
pyserial,
pytestCheckHook,
}:
buildPythonPackage rec {
pname = "modbus-tk";
version = "1.1.1";
version = "1.1.3";
pyproject = true;
disabled = pythonOlder "3.10";
src = fetchFromGitHub {
owner = "ljean";
repo = "modbus-tk";
rev = "refs/tags/${version}";
hash = "sha256-zikfVMFdlOJvuKVQGEsK03i58X6BGFsGWGrGOJZGC0g=";
src = fetchPypi {
pname = "modbus_tk";
inherit version;
hash = "sha256-aQ+nu4bql4mSRl0tYci1rMY5zg6LgzoKqW1N0XLFZEo=";
};
build-system = [ setuptools ];
dependencies = [ pyserial ];
nativeCheckInputs = [ pytestCheckHook ];
# Source no tagged anymore and PyPI doesn't ship tests
doCheck = false;
pythonImportsCheck = [ "modbus_tk" ];
pytestFlagsArray = [ "tests/unittest_*.py" ];
meta = with lib; {
description = "Module for simple Modbus interactions";
homepage = "https://github.com/ljean/modbus-tk";

View File

@ -22,7 +22,7 @@
buildPythonPackage rec {
pname = "proxy-py";
version = "2.4.4";
version = "2.4.5";
pyproject = true;
disabled = pythonOlder "3.7";
@ -31,7 +31,7 @@ buildPythonPackage rec {
owner = "abhinavsingh";
repo = "proxy.py";
rev = "refs/tags/v${version}";
hash = "sha256-QWwIbNt2MtRfQaX7uZJzYmS++2MH+gTjWO0aEKYSETI=";
hash = "sha256-pn4YYGntG9C8mhECb7PYgN5wwicdlPcZu6Xn2M3iIKA=";
};
postPatch = ''

View File

@ -13,14 +13,14 @@
buildPythonPackage rec {
pname = "pyfaidx";
version = "0.8.1.1";
version = "0.8.1.2";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-bwSCNSYZ8sxWADyiIyG9sNB2S2VnlbweQGKx+psIaGs=";
hash = "sha256-2EUkcEVbHnePk5aUR9uOok3rRiTHxAdpUWRZy2+HvDM=";
};
build-system = [

View File

@ -3,7 +3,6 @@
buildPythonPackage,
fetchFromGitHub,
mock,
nose,
pexpect,
pyserial,
pytestCheckHook,
@ -13,40 +12,33 @@
buildPythonPackage rec {
pname = "pygatt";
version = "4.0.5";
version = "5.0.0";
pyproject = true;
disabled = pythonOlder "3.5";
disabled = pythonOlder "3.10";
src = fetchFromGitHub {
owner = "peplin";
repo = "pygatt";
rev = "refs/tags/v${version}";
hash = "sha256-DUZGsztZViVNZwmhXoRN5FOQ7BgUeI0SsYgCHlvsrv0=";
hash = "sha256-TMIqC+JvNOLU38a9jkacRAbdmAAd4UekFUDRoAWhHFo=";
};
postPatch = ''
# Not support for Python < 3.4
substituteInPlace setup.py \
--replace-fail "'enum-compat'" "" \
--replace-fail "'coverage >= 3.7.1'," "" \
--replace-fail "'nose >= 1.3.7'" ""
substituteInPlace tests/bgapi/test_bgapi.py \
--replace-fail "assertEquals" "assertEqual"
--replace-fail "setup_requires" "test_requires"
'';
pythonRemoveDeps = [ "enum-compat" ];
build-system = [ setuptools ];
dependencies = [ pyserial ];
optional-dependencies.GATTTOOL = [ pexpect ];
# tests require nose
doCheck = pythonOlder "3.12";
nativeCheckInputs = [
mock
nose
pytestCheckHook
] ++ optional-dependencies.GATTTOOL;

View File

@ -1,28 +1,20 @@
{
lib,
setuptools,
stdenv,
pythonPackages,
fetchPypi,
pkg-config,
qmake,
qtbase,
qtsvg,
qtwebengine,
qtwebchannel,
qtdeclarative,
wrapQtAppsHook,
libsForQt5,
darwin,
buildPythonPackage,
python,
isPy27,
pyqt5,
sip,
pyqt-builder,
}:
let
inherit (pythonPackages)
buildPythonPackage
python
isPy27
pyqt5
sip
pyqt-builder
;
inherit (darwin) autoSignDarwinBinariesHook;
in
buildPythonPackage (
@ -52,32 +44,33 @@ buildPythonPackage (
nativeBuildInputs =
[
pkg-config
qmake
libsForQt5.qmake
libsForQt5.wrapQtAppsHook
]
++ lib.optionals (stdenv.buildPlatform == stdenv.hostPlatform) [ sip ]
++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
python.pythonOnBuildForHost.pkgs.sip
]
++ [
qtbase
qtsvg
qtwebengine
libsForQt5.qtbase
libsForQt5.qtsvg
libsForQt5.qtwebengine
pyqt-builder
pythonPackages.setuptools
setuptools
]
++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ qtdeclarative ]
++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ libsForQt5.qtdeclarative ]
++ lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [ autoSignDarwinBinariesHook ];
buildInputs =
[
sip
qtbase
qtsvg
qtwebengine
libsForQt5.qtbase
libsForQt5.qtsvg
libsForQt5.qtwebengine
]
++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
qtwebchannel
qtdeclarative
libsForQt5.qtwebchannel
libsForQt5.qtdeclarative
];
propagatedBuildInputs = [ pyqt5 ];
@ -98,21 +91,21 @@ buildPythonPackage (
enableParallelBuilding = true;
passthru = {
inherit wrapQtAppsHook;
inherit (libsForQt5) wrapQtAppsHook;
};
meta = with lib; {
meta = {
description = "Python bindings for Qt5";
homepage = "http://www.riverbankcomputing.co.uk";
license = licenses.gpl3;
hydraPlatforms = lib.lists.intersectLists qtwebengine.meta.platforms platforms.mesaPlatforms;
license = lib.licenses.gpl3;
hydraPlatforms = lib.lists.intersectLists libsForQt5.qtwebengine.meta.platforms lib.platforms.mesaPlatforms;
};
}
// lib.optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) {
# TODO: figure out why the env hooks aren't adding these inclusions automatically
env.NIX_CFLAGS_COMPILE = lib.concatStringsSep " " [
"-I${lib.getDev qtbase}/include/QtPrintSupport/"
"-I${lib.getDev qtwebchannel}/include/QtWebChannel/"
"-I${lib.getDev libsForQt5.qtbase}/include/QtPrintSupport/"
"-I${lib.getDev libsForQt5.qtwebchannel}/include/QtWebChannel/"
];
}
)

View File

@ -0,0 +1,101 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
setuptools-scm,
pillow,
qrcode,
python-barcode,
six,
appdirs,
pyyaml,
argcomplete,
importlib-resources,
pyusb,
pyserial,
pycups,
jaconv,
pytestCheckHook,
pytest-mock,
scripttest,
mock,
hypothesis,
}:
buildPythonPackage rec {
pname = "python-escpos";
version = "3.1";
pyproject = true;
src = fetchFromGitHub {
owner = "python-escpos";
repo = "python-escpos";
rev = "refs/tags/v${version}";
hash = "sha256-f7qA1+8PwnXS526jjULEoyn0ejnvsneuWDt863p4J2g=";
fetchSubmodules = true;
};
build-system = [
setuptools
setuptools-scm
];
dependencies = [
pillow
qrcode
python-barcode
six
appdirs
pyyaml
argcomplete
importlib-resources
];
optional-dependencies = {
usb = [ pyusb ];
serial = [ pyserial ];
cups = [ pycups ];
all = [
pyusb
pyserial
pycups
];
};
preCheck = ''
# force the tests to use the module in $out
rm -r src
# disable checking coverage
substituteInPlace pyproject.toml \
--replace-fail "--cov escpos --cov-report=xml" ""
# allow tests to find the cli executable
export PATH="$out/bin:$PATH"
'';
nativeCheckInputs = [
jaconv
pytestCheckHook
pytest-mock
scripttest
mock
hypothesis
] ++ optional-dependencies.all;
pythonImportsCheck = [ "escpos" ];
meta = {
changelog = "https://github.com/python-escpos/python-escpos/blob/${src.rev}/CHANGELOG.rst";
description = "Python library to manipulate ESC/POS printers";
homepage = "https://python-escpos.readthedocs.io/";
license = lib.licenses.mit;
mainProgram = "python-escpos";
maintainers = with lib.maintainers; [ tomasajt ];
};
}

View File

@ -16,7 +16,7 @@
buildPythonPackage rec {
pname = "python-gitlab";
version = "4.8.0";
version = "4.9.0";
pyproject = true;
disabled = pythonOlder "3.7";
@ -24,7 +24,7 @@ buildPythonPackage rec {
src = fetchPypi {
pname = "python_gitlab";
inherit version;
hash = "sha256-wsTXsc1QPZBa/l38Dz9mGZNDYfdq6FXGzsmmZoZNN88=";
hash = "sha256-30TbtunJQefr+5JE5+1KpNuQ9cFkmMstE1uObn8Imho=";
};
nativeBuildInputs = [ setuptools ];

View File

@ -0,0 +1,45 @@
{
lib,
fetchFromGitHub,
buildPythonPackage,
pytestCheckHook,
setuptools,
cachecontrol,
lxml-html-clean,
requests,
six,
}:
buildPythonPackage rec {
pname = "pywebcopy";
version = "7.0.2";
pyproject = true;
src = fetchFromGitHub {
owner = "rajatomar788";
repo = "pywebcopy";
rev = "v${version}";
hash = "sha256-XTPk3doF9dqImsLtTB03YKMWLzQrJpJtjNXe+691rZo=";
};
nativeCheckInputs = [ pytestCheckHook ];
pythonImportsCheck = [ "pywebcopy" ];
build-system = [ setuptools ];
dependencies = [
cachecontrol
lxml-html-clean
requests
six
];
meta = {
changelog = "https://github.com/rajatomar788/pywebcopy/blob/master/docs/changelog.md";
description = "Python package for cloning complete webpages and websites to local storage";
homepage = "https://github.com/rajatomar788/pywebcopy/";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ d3vil0p3r ];
};
}

View File

@ -2,11 +2,13 @@
lib,
fetchFromGitHub,
buildPythonPackage,
python3Packages,
pythonOlder,
pyqt5,
poppler-qt5,
pycups,
}:
python3Packages.buildPythonPackage rec {
buildPythonPackage rec {
pname = "qpageview";
version = "0.6.2";
format = "setuptools";
@ -20,7 +22,7 @@ python3Packages.buildPythonPackage rec {
hash = "sha256-XFMTOD7ums8sbFHUViEI9q6/rCjUmEtXAdd3/OmLsHU=";
};
propagatedBuildInputs = with python3Packages; [
propagatedBuildInputs = [
pyqt5
poppler-qt5
pycups

View File

@ -0,0 +1,50 @@
{
lib,
buildPythonPackage,
click,
fetchFromGitHub,
modbus-tk,
poetry-core,
pyserial,
pythonOlder,
setuptools,
}:
buildPythonPackage rec {
pname = "riden";
version = "1.2.1";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchFromGitHub {
owner = "geeksville";
repo = "riden";
rev = "refs/tags/${version}";
hash = "sha256-uR1CsVsGn/QC4krHaxl6GqRnTPbFdRaqyMEl2RVMHPU=";
};
build-system = [
poetry-core
setuptools
];
dependencies = [
click
modbus-tk
pyserial
];
# Module has no tests
doCheck = false;
pythonImportsCheck = [ "riden" ];
meta = with lib; {
description = "Module for Riden RD power supplies";
homepage = "https://github.com/geeksville/riden";
changelog = "https://github.com/geeksville/Riden/releases/tag/${version}";
license = licenses.mit;
maintainers = with maintainers; [ fab ];
};
}

View File

@ -18,7 +18,7 @@
buildPythonPackage rec {
pname = "textual";
version = "0.75.0";
version = "0.72.0";
pyproject = true;
disabled = pythonOlder "3.8";
@ -39,7 +39,10 @@ buildPythonPackage rec {
] ++ markdown-it-py.optional-dependencies.plugins ++ markdown-it-py.optional-dependencies.linkify;
optional-dependencies = {
syntax = [ tree-sitter ] ++ lib.optionals (pythonOlder "3.12") [ tree-sitter-languages ];
syntax = [
tree-sitter
tree-sitter-languages
];
};
nativeCheckInputs = [
@ -48,7 +51,8 @@ buildPythonPackage rec {
pytestCheckHook
syrupy
time-machine
] ++ lib.flatten (builtins.attrValues optional-dependencies);
tree-sitter
];
disabledTestPaths = [
# Snapshot tests require syrupy<4

View File

@ -59,7 +59,7 @@
buildPythonPackage rec {
pname = "transformers";
version = "4.43.4";
version = "4.44.0";
pyproject = true;
disabled = pythonOlder "3.8";
@ -68,7 +68,7 @@ buildPythonPackage rec {
owner = "huggingface";
repo = "transformers";
rev = "refs/tags/v${version}";
hash = "sha256-NgCYBBFQpXF5QZEmvPBjiJfcoDvCg+aWx9+ljAcqv6Q=";
hash = "sha256-i3KKfkYvKRYrs/kiwBJdyFzMiXKwyBEeUuZcHszip3k=";
};
build-system = [ setuptools ];

View File

@ -1,12 +1,12 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, setuptools
, wheel
, cython
, tree-sitter0_21
, pytestCheckHook
, python
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
cython,
tree-sitter,
pytestCheckHook,
python,
}:
buildPythonPackage rec {
@ -34,20 +34,14 @@ buildPythonPackage rec {
build-system = [
setuptools
wheel
cython
];
dependencies = [
# https://github.com/grantjenks/py-tree-sitter-languages/issues/67
tree-sitter0_21
];
dependencies = [ tree-sitter ];
# Generate languages.so file (build won't fail without this, but tests will).
preBuild = ''
${python.pythonOnBuildForHost.interpreter} build.py
'';
nativeCheckInputs = [
pytestCheckHook
];
nativeCheckInputs = [ pytestCheckHook ];
# Without cd $out, tests fail to import the compiled cython extensions.
# Without copying the ./tests/ directory to $out, pytest won't detect the
# tests and run them. See also:
@ -64,5 +58,7 @@ buildPythonPackage rec {
homepage = "https://github.com/grantjenks/py-tree-sitter-languages";
license = licenses.asl20;
maintainers = with maintainers; [ doronbehar ];
# https://github.com/grantjenks/py-tree-sitter-languages/issues/67
broken = versionAtLeast tree-sitter.version "0.22";
};
}

View File

@ -10,7 +10,7 @@
}:
buildPythonPackage rec {
pname = "tree-sitter0_21";
pname = "tree-sitter";
version = "0.21.3";
pyproject = true;

View File

@ -18,14 +18,14 @@
buildPythonPackage rec {
pname = "ufo2ft";
version = "3.2.5";
version = "3.2.7";
pyproject = true;
disabled = pythonOlder "3.8";
src = fetchPypi {
inherit pname version;
hash = "sha256-PUPk92wugtIZWXP8vq8bJNxqTDhDENKdNhW1kNEcL3E=";
hash = "sha256-fA5It0mr6sjAQECGPOsS//lZJ9OqKelfhdzV770sMHQ=";
};
nativeBuildInputs = [

View File

@ -57,7 +57,7 @@
grpcio,
}:
let
version = "0.15.0";
version = "0.15.1";
optional-dependencies = {
huggingflace = [
langdetect
@ -100,7 +100,7 @@ buildPythonPackage {
owner = "Unstructured-IO";
repo = "unstructured";
rev = "refs/tags/${version}";
hash = "sha256-O44zmD+giqnfrEoKjU/+AkDykZdn2jLjpm+X65Em2KY=";
hash = "sha256-zDlkqeP89O3u5Yir9Xi+Z6BpLd6r0QXJ563kc2krjAs=";
};
propagatedBuildInputs = [

View File

@ -12,7 +12,7 @@
buildPythonPackage rec {
pname = "zha-quirks";
version = "0.0.117";
version = "0.0.118";
pyproject = true;
disabled = pythonOlder "3.12";
@ -21,7 +21,7 @@ buildPythonPackage rec {
owner = "zigpy";
repo = "zha-device-handlers";
rev = "refs/tags/${version}";
hash = "sha256-uk1G8X5TLuA4spTrd+077wggCooqvqJZh3NIwC4/BFM=";
hash = "sha256-LudwIENP1KCX7+HwyklCUdAu5mRLDcnMEZBzbRH2FM0=";
};
postPatch = ''

View File

@ -26,7 +26,7 @@
buildPythonPackage rec {
pname = "zha";
version = "0.0.23";
version = "0.0.27";
pyproject = true;
disabled = pythonOlder "3.12";
@ -35,7 +35,7 @@ buildPythonPackage rec {
owner = "zigpy";
repo = "zha";
rev = "refs/tags/${version}";
hash = "sha256-a0rr8pJCoVtDR3iNCDpLZnapetzNHMj8uCu667lNcGE=";
hash = "sha256-urECZtYmwKWboF84SVTiUJthYW0hRBKL9kwRpWvcSoc=";
};
postPatch = ''

View File

@ -16,7 +16,7 @@
buildPythonPackage rec {
pname = "zigpy-zigate";
version = "0.13.0";
version = "0.13.1";
pyproject = true;
disabled = pythonOlder "3.8";
@ -25,7 +25,7 @@ buildPythonPackage rec {
owner = "zigpy";
repo = "zigpy-zigate";
rev = "refs/tags/${version}";
hash = "sha256-fLNUTrPR1bc6H2mpdHj6O4pbrfLTb3filBE4mSDhZn0=";
hash = "sha256-Mwccb0OQgSknH8prbFejkGRVI7ii/r9D87aRyQrGgWs=";
};
postPatch = ''

View File

@ -19,7 +19,7 @@
buildPythonPackage rec {
pname = "zigpy-znp";
version = "0.12.3";
version = "0.12.4";
pyproject = true;
disabled = pythonOlder "3.7";
@ -28,7 +28,7 @@ buildPythonPackage rec {
owner = "zigpy";
repo = pname;
rev = "refs/tags/v${version}";
hash = "sha256-qrIYcGumOHu3/gG9MOyKngAhOkeZEmCgXIDDcghoYn0=";
hash = "sha256-5DuqM7MgntV/3WquR+0Cr/vIwYL35ZVpGlNZPj92jJ4=";
};
nativeBuildInputs = [ setuptools ];

View File

@ -11,6 +11,7 @@
cryptography,
fetchFromGitHub,
freezegun,
frozendict,
importlib-resources,
jsonschema,
pycryptodome,
@ -26,7 +27,7 @@
buildPythonPackage rec {
pname = "zigpy";
version = "0.65.0";
version = "0.65.2";
pyproject = true;
disabled = pythonOlder "3.8";
@ -35,7 +36,7 @@ buildPythonPackage rec {
owner = "zigpy";
repo = "zigpy";
rev = "refs/tags/${version}";
hash = "sha256-CyVmMDZ+8B3SYRR6JKFeI/dyQbJk70/slm3hRV1f3ig=";
hash = "sha256-rNqo4NtIdg9MoOKde26/RUcfX/VYiVkNj97v/RJcB4E=";
};
postPatch = ''
@ -53,6 +54,7 @@ buildPythonPackage rec {
aiosqlite
crccheck
cryptography
frozendict
jsonschema
pyserial-asyncio
typing-extensions

View File

@ -2,16 +2,16 @@
buildNpmPackage rec {
pname = "eslint_d";
version = "13.1.2";
version = "14.0.3";
src = fetchFromGitHub {
owner = "mantoni";
repo = "eslint_d.js";
rev = "v${version}";
hash = "sha256-2G6I6Tx6LqgZ5EpVw4ux/JXv+Iky6Coenbh51JoFg7Q=";
hash = "sha256-r0pb9qbWfyVUHuHrNhiYm+0zlF5WId3dH7QCubzZDts=";
};
npmDepsHash = "sha256-L6abWbSnxY6gGMXBjxobEg8cpl0p3lMST9T42QGk4yM=";
npmDepsHash = "sha256-0Db18y7MUnnnr8v+bBOUhGBCsZcZ9OGtGqSVH7/wYQc=";
dontNpmBuild = true;

View File

@ -1,5 +1,9 @@
{
lib,
mkKdeDerivation,
substituteAll,
procps,
xsettingsd,
pkg-config,
wrapGAppsHook3,
sass,
@ -11,7 +15,17 @@ mkKdeDerivation {
# The gtkconfig KDED module will crash the daemon if the GSettings schemas
# aren't found.
patches = [./0001-gsettings-schemas-path.patch];
patches = [
./0001-gsettings-schemas-path.patch
(
substituteAll {
src = ./dependency-paths.patch;
pgrep = lib.getExe' procps "pgrep";
xsettingsd = lib.getExe xsettingsd;
}
)
];
preConfigure = ''
NIX_CFLAGS_COMPILE+=" -DGSETTINGS_SCHEMAS_PATH=\"$GSETTINGS_SCHEMAS_PATH\""
'';
@ -21,4 +35,10 @@ mkKdeDerivation {
dontWrapGApps = true; # There is nothing to wrap
extraCmakeFlags = ["-DGLIB_SCHEMAS_DIR=${gsettings-desktop-schemas.out}/"];
# Hardcoded as QStrings, which are UTF-16 so Nix can't pick these up automatically
postFixup = ''
mkdir -p $out/nix-support
echo "${procps} ${xsettingsd}" > $out/nix-support/depends
'';
}

View File

@ -0,0 +1,22 @@
diff --git a/kded/config_editor/xsettings.cpp b/kded/config_editor/xsettings.cpp
index 1f9fe5b..9824973 100644
--- a/kded/config_editor/xsettings.cpp
+++ b/kded/config_editor/xsettings.cpp
@@ -46,7 +46,7 @@ void replaceValueInXSettingsdContents(QString &xSettingsdContents, const QString
pid_t pidOfXSettingsd()
{
QProcess pgrep;
- pgrep.start(QStringLiteral("pgrep"),
+ pgrep.start(QStringLiteral("@pgrep@"),
QStringList{
QStringLiteral("-u"),
QString::number(getuid()),
@@ -67,7 +67,7 @@ reloadXSettingsd(void *)
{
pid_t xSettingsdPid = pidOfXSettingsd();
if (xSettingsdPid == 0) {
- QProcess::startDetached(QStandardPaths::findExecutable(QStringLiteral("xsettingsd")), QStringList());
+ QProcess::startDetached(QStringLiteral("@xsettingsd@"), QStringList());
} else {
kill(xSettingsdPid, SIGHUP);
}

View File

@ -2,7 +2,9 @@
lib,
mkKdeDerivation,
substituteAll,
fontconfig,
xorg,
lsof,
pkg-config,
spirv-tools,
qtsvg,
@ -19,10 +21,13 @@ mkKdeDerivation {
patches = [
(substituteAll {
src = ./tool-paths.patch;
xmessage = "${lib.getBin xorg.xmessage}/bin/xmessage";
xsetroot = "${lib.getBin xorg.xsetroot}/bin/xsetroot";
qdbus = "${lib.getBin qttools}/bin/qdbus";
src = ./dependency-paths.patch;
fc-match = lib.getExe' fontconfig "fc-match";
lsof = lib.getExe lsof;
qdbus = lib.getExe' qttools "qdbus";
xmessage = lib.getExe xorg.xmessage;
xrdb = lib.getExe xorg.xrdb;
xsetroot = lib.getExe xorg.xsetroot;
})
];
@ -50,5 +55,11 @@ mkKdeDerivation {
gpsd
];
# Hardcoded as QStrings, which are UTF-16 so Nix can't pick these up automatically
postFixup = ''
mkdir -p $out/nix-support
echo "${lsof} ${xorg.xmessage} ${xorg.xsetroot}" > $out/nix-support/depends
'';
passthru.providedSessions = ["plasma" "plasmax11"];
}

View File

@ -0,0 +1,149 @@
diff --git a/applets/devicenotifier/plugin/ksolidnotify.cpp b/applets/devicenotifier/plugin/ksolidnotify.cpp
index bcbb58a034..be2570ce97 100644
--- a/applets/devicenotifier/plugin/ksolidnotify.cpp
+++ b/applets/devicenotifier/plugin/ksolidnotify.cpp
@@ -169,7 +169,7 @@ void KSolidNotify::queryBlockingApps(const QString &devicePath)
Q_EMIT blockingAppsReady(blockApps);
p->deleteLater();
});
- p->start(QStringLiteral("lsof"), {QStringLiteral("-t"), devicePath});
+ p->start(QStringLiteral("@lsof@"), {QStringLiteral("-t"), devicePath});
// p.start(QStringLiteral("fuser"), {QStringLiteral("-m"), devicePath});
}
diff --git a/kcms/fonts/fontinit.cpp b/kcms/fonts/fontinit.cpp
index e27e21a7bd..abbf7f32e1 100644
--- a/kcms/fonts/fontinit.cpp
+++ b/kcms/fonts/fontinit.cpp
@@ -27,7 +27,7 @@ Q_DECL_EXPORT void kcminit()
const QByteArray input = "Xft.dpi: " + QByteArray::number(dpi);
QProcess p;
- p.start(QStringLiteral("xrdb"), {QStringLiteral("-quiet"), QStringLiteral("-merge"), QStringLiteral("-nocpp")});
+ p.start(QStringLiteral("@xrdb@"), {QStringLiteral("-quiet"), QStringLiteral("-merge"), QStringLiteral("-nocpp")});
p.setProcessChannelMode(QProcess::ForwardedChannels);
p.write(input);
p.closeWriteChannel();
diff --git a/kcms/fonts/fonts.cpp b/kcms/fonts/fonts.cpp
index 92d8fadd44..2a973d76ef 100644
--- a/kcms/fonts/fonts.cpp
+++ b/kcms/fonts/fonts.cpp
@@ -135,7 +135,7 @@ void KFonts::save()
if (fontsAASettings()->forceFontDPI() == 0 && forceFontDPIChanged && KWindowSystem::isPlatformX11()) {
QProcess proc;
proc.setProcessChannelMode(QProcess::ForwardedChannels);
- proc.start("xrdb",
+ proc.start("@xrdb@",
QStringList() << "-quiet"
<< "-remove"
<< "-nocpp");
diff --git a/kcms/kfontinst/kcmfontinst/FcQuery.cpp b/kcms/kfontinst/kcmfontinst/FcQuery.cpp
index 771c790c74..1be64b0527 100644
--- a/kcms/kfontinst/kcmfontinst/FcQuery.cpp
+++ b/kcms/kfontinst/kcmfontinst/FcQuery.cpp
@@ -44,7 +44,7 @@ void CFcQuery::run(const QString &query)
connect(m_proc, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(procExited()));
connect(m_proc, &QProcess::readyReadStandardOutput, this, &CFcQuery::data);
- m_proc->start("fc-match", args);
+ m_proc->start("@fc-match@", args);
}
void CFcQuery::procExited()
diff --git a/kcms/krdb/krdb.cpp b/kcms/krdb/krdb.cpp
index 8fdd99f9ed..1bd7d552a5 100644
--- a/kcms/krdb/krdb.cpp
+++ b/kcms/krdb/krdb.cpp
@@ -423,7 +423,7 @@ void runRdb(unsigned int flags)
contents += "Xft.dpi: " + QString::number(dpi) + '\n';
else {
KProcess queryProc;
- queryProc << QStringLiteral("xrdb") << QStringLiteral("-query");
+ queryProc << QStringLiteral("@xrdb@") << QStringLiteral("-query");
queryProc.setOutputChannelMode(KProcess::OnlyStdoutChannel);
queryProc.start();
if (queryProc.waitForFinished()) {
@@ -443,7 +443,7 @@ void runRdb(unsigned int flags)
}
KProcess loadProc;
- loadProc << QStringLiteral("xrdb") << QStringLiteral("-quiet") << QStringLiteral("-load") << QStringLiteral("-nocpp");
+ loadProc << QStringLiteral("@xrdb@") << QStringLiteral("-quiet") << QStringLiteral("-load") << QStringLiteral("-nocpp");
loadProc.start();
if (loadProc.waitForStarted()) {
loadProc.write(db);
@@ -461,16 +461,16 @@ void runRdb(unsigned int flags)
KProcess proc;
#ifndef NDEBUG
- proc << QStringLiteral("xrdb") << QStringLiteral("-merge") << tmpFile.fileName();
+ proc << QStringLiteral("@xrdb@") << QStringLiteral("-merge") << tmpFile.fileName();
#else
- proc << "xrdb"
+ proc << "@xrdb@"
<< "-quiet"
<< "-merge" << tmpFile.fileName();
#endif
proc.execute();
// Needed for applications that don't set their own cursor.
- QProcess::execute(QStringLiteral("xsetroot"), {QStringLiteral("-cursor_name"), QStringLiteral("left_ptr")});
+ QProcess::execute(QStringLiteral("@xsetroot@"), {QStringLiteral("-cursor_name"), QStringLiteral("left_ptr")});
applyGtkStyles(1);
applyGtkStyles(2);
diff --git a/ksmserver/plasma-restoresession.service.in b/ksmserver/plasma-restoresession.service.in
index 2c52a4b87d..fd7fdc8ac1 100644
--- a/ksmserver/plasma-restoresession.service.in
+++ b/ksmserver/plasma-restoresession.service.in
@@ -5,5 +5,5 @@ RefuseManualStart=yes
[Service]
Type=oneshot
-ExecStart=-@QtBinariesDir@/qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.restoreSession
+ExecStart=-@qdbus@ org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.restoreSession
Slice=session.slice
diff --git a/startkde/kcminit/plasma-kcminit-phase1.service.in b/startkde/kcminit/plasma-kcminit-phase1.service.in
index 7218628ce9..9126475ea4 100644
--- a/startkde/kcminit/plasma-kcminit-phase1.service.in
+++ b/startkde/kcminit/plasma-kcminit-phase1.service.in
@@ -6,5 +6,5 @@ PartOf=graphical-session.target
[Service]
Type=oneshot
-ExecStart=@QtBinariesDir@/qdbus org.kde.kcminit /kcminit org.kde.KCMInit.runPhase1
+ExecStart=@qdbus@ org.kde.kcminit /kcminit org.kde.KCMInit.runPhase1
Slice=session.slice
diff --git a/startkde/startplasma.cpp b/startkde/startplasma.cpp
index 0bd4511189..602b7e9eb0 100644
--- a/startkde/startplasma.cpp
+++ b/startkde/startplasma.cpp
@@ -57,7 +57,7 @@ void sigtermHandler(int signalNumber)
void messageBox(const QString &text)
{
out << text;
- runSync(QStringLiteral("xmessage"), {QStringLiteral("-geometry"), QStringLiteral("500x100"), text});
+ runSync(QStringLiteral("@xmessage@"), {QStringLiteral("-geometry"), QStringLiteral("500x100"), text});
}
QStringList allServices(const QLatin1String &prefix)
@@ -507,7 +507,7 @@ QProcess *setupKSplash()
if (ksplashCfg.readEntry("Engine", QStringLiteral("KSplashQML")) == QLatin1String("KSplashQML")) {
p = new QProcess;
p->setProcessChannelMode(QProcess::ForwardedChannels);
- p->start(QStringLiteral("ksplashqml"), {ksplashCfg.readEntry("Theme", QStringLiteral("Breeze"))});
+ p->start(QStringLiteral(CMAKE_INSTALL_FULL_BINDIR "/ksplashqml"), {ksplashCfg.readEntry("Theme", QStringLiteral("Breeze"))});
}
}
return p;
diff --git a/startkde/systemd/plasma-ksplash-ready.service.in b/startkde/systemd/plasma-ksplash-ready.service.in
index 3f6744f378..c51266794d 100644
--- a/startkde/systemd/plasma-ksplash-ready.service.in
+++ b/startkde/systemd/plasma-ksplash-ready.service.in
@@ -6,5 +6,5 @@ PartOf=graphical-session.target
[Service]
Type=oneshot
-ExecStart=-@QtBinariesDir@/qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage ready
+ExecStart=-@qdbus@ org.kde.KSplash /KSplash org.kde.KSplash.setStage ready
Slice=session.slice

View File

@ -1,68 +0,0 @@
diff --git a/kcms/krdb/krdb.cpp b/kcms/krdb/krdb.cpp
index 46363ddcb..d787f9993 100644
--- a/kcms/krdb/krdb.cpp
+++ b/kcms/krdb/krdb.cpp
@@ -468,7 +468,7 @@ void runRdb(unsigned int flags)
proc.execute();
// Needed for applications that don't set their own cursor.
- QProcess::execute(QStringLiteral("xsetroot"), {QStringLiteral("-cursor_name"), QStringLiteral("left_ptr")});
+ QProcess::execute(QStringLiteral("@xsetroot@"), {QStringLiteral("-cursor_name"), QStringLiteral("left_ptr")});
applyGtkStyles(1);
applyGtkStyles(2);
diff --git a/startkde/startplasma.cpp b/startkde/startplasma.cpp
index b0158c97d..c8f7fe223 100644
--- a/startkde/startplasma.cpp
+++ b/startkde/startplasma.cpp
@@ -50,7 +50,7 @@ void sigtermHandler(int signalNumber)
void messageBox(const QString &text)
{
out << text;
- runSync(QStringLiteral("xmessage"), {QStringLiteral("-geometry"), QStringLiteral("500x100"), text});
+ runSync(QStringLiteral("@xmessage@"), {QStringLiteral("-geometry"), QStringLiteral("500x100"), text});
}
QStringList allServices(const QLatin1String &prefix)
@@ -484,7 +484,7 @@ QProcess *setupKSplash()
if (ksplashCfg.readEntry("Engine", QStringLiteral("KSplashQML")) == QLatin1String("KSplashQML")) {
p = new QProcess;
p->setProcessChannelMode(QProcess::ForwardedChannels);
- p->start(QStringLiteral("ksplashqml"), {ksplashCfg.readEntry("Theme", QStringLiteral("Breeze"))});
+ p->start(QStringLiteral(CMAKE_INSTALL_FULL_BINDIR "/ksplashqml"), {ksplashCfg.readEntry("Theme", QStringLiteral("Breeze"))});
}
}
return p;
diff --git a/ksmserver/plasma-restoresession.service.in b/ksmserver/plasma-restoresession.service.in
index 2c52a4b87..fd7fdc8ac 100644
--- a/ksmserver/plasma-restoresession.service.in
+++ b/ksmserver/plasma-restoresession.service.in
@@ -5,5 +5,5 @@ RefuseManualStart=yes
[Service]
Type=oneshot
-ExecStart=-@QtBinariesDir@/qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.restoreSession
+ExecStart=-@qdbus@ org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.restoreSession
Slice=session.slice
diff --git a/startkde/kcminit/plasma-kcminit-phase1.service.in b/startkde/kcminit/plasma-kcminit-phase1.service.in
index 7218628ce..9126475ea 100644
--- a/startkde/kcminit/plasma-kcminit-phase1.service.in
+++ b/startkde/kcminit/plasma-kcminit-phase1.service.in
@@ -6,5 +6,5 @@ PartOf=graphical-session.target
[Service]
Type=oneshot
-ExecStart=@QtBinariesDir@/qdbus org.kde.kcminit /kcminit org.kde.KCMInit.runPhase1
+ExecStart=@qdbus@ org.kde.kcminit /kcminit org.kde.KCMInit.runPhase1
Slice=session.slice
diff --git a/startkde/systemd/plasma-ksplash-ready.service.in b/startkde/systemd/plasma-ksplash-ready.service.in
index 3f6744f37..c51266794 100644
--- a/startkde/systemd/plasma-ksplash-ready.service.in
+++ b/startkde/systemd/plasma-ksplash-ready.service.in
@@ -6,5 +6,5 @@ PartOf=graphical-session.target
[Service]
Type=oneshot
-ExecStart=-@QtBinariesDir@/qdbus org.kde.KSplash /KSplash org.kde.KSplash.setStage ready
+ExecStart=-@qdbus@ org.kde.KSplash /KSplash org.kde.KSplash.setStage ready
Slice=session.slice

View File

@ -1,6 +1,6 @@
{ lib, stdenv, buildPythonApplication, fetchFromGitHub, python3Packages, pyqtwebengine, lilypond }:
{ lib, stdenv, fetchFromGitHub, python311Packages, lilypond }:
buildPythonApplication rec {
python311Packages.buildPythonApplication rec {
pname = "frescobaldi";
version = "3.3.0";
@ -11,7 +11,7 @@ buildPythonApplication rec {
sha256 = "sha256-Q6ruthNcpjLlYydUetkuTECiCIzu055bw40O8BPGq/A=";
};
propagatedBuildInputs = with python3Packages; [
propagatedBuildInputs = with python311Packages; [
qpageview
lilypond
pygame
@ -22,7 +22,7 @@ buildPythonApplication rec {
pyqtwebengine
];
nativeBuildInputs = [ pyqtwebengine.wrapQtAppsHook ];
nativeBuildInputs = [ python311Packages.pyqtwebengine.wrapQtAppsHook ];
# Needed because source is fetched from git
preBuild = ''

View File

@ -15,12 +15,12 @@ callPackage ./generic.nix args {
# this attribute is the correct one for this package.
kernelModuleAttribute = "zfs_2_2";
# check the release notes for compatible kernels
kernelCompatible = kernel.kernelOlder "6.9";
kernelCompatible = kernel.kernelOlder "6.10";
latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_8;
latestCompatibleLinuxPackages = linuxKernel.packages.linux_6_9;
# this package should point to the latest release.
version = "2.2.4";
version = "2.2.5";
tests = [
nixosTests.zfs.installer
@ -29,5 +29,5 @@ callPackage ./generic.nix args {
maintainers = with lib.maintainers; [ adamcstephens amarshall ];
hash = "sha256-SSp/1Tu1iGx5UDcG4j0k2fnYxK05cdE8gzfSn8DU5Z4=";
hash = "sha256-BkwcNPk+jX8CXp5xEVrg4THof7o/5j8RY2SY6+IPNTg=";
}

View File

@ -23,31 +23,13 @@ callPackage ./generic.nix args {
# IMPORTANT: Always use a tagged release candidate or commits from the
# zfs-<version>-staging branch, because this is tested by the OpenZFS
# maintainers.
version = "2.2.4-unstable-2024-07-15";
rev = "/54ef0fdf60a8e7633c38cb46e1f5bcfcec792f4e";
version = "2.2.5";
# rev = "";
isUnstable = true;
tests = [
nixosTests.zfs.unstable
];
# 6.10 patches approved+merged to the default branch, not in staging yet
# https://github.com/openzfs/zfs/pull/16250
extraPatches = [
(fetchpatch {
url = "https://github.com/openzfs/zfs/commit/7ca7bb7fd723a91366ce767aea53c4f5c2d65afb.patch";
hash = "sha256-vUX4lgywh5ox6DjtIfeC90KjbLoW3Ol0rK/L65jOENo=";
})
(fetchpatch {
url = "https://github.com/openzfs/zfs/commit/e951dba48a6330aca9c161c50189f6974e6877f0.patch";
hash = "sha256-A1h0ZLY+nlReBMTlEm3O9kwBqto1cgsZdnJsHpR6hw0=";
})
(fetchpatch {
url = "https://github.com/openzfs/zfs/commit/b409892ae5028965a6fe98dde1346594807e6e45.patch";
hash = "sha256-pW1b8ktglFhwVRapTB5th9UCyjyrPmCVPg53nMENax8=";
})
];
hash = "sha256-7vZeIzA2yDW/gSCcS2AM3+C9qbRIbA9XbCRUxikW2+M=";
hash = "sha256-BkwcNPk+jX8CXp5xEVrg4THof7o/5j8RY2SY6+IPNTg=";
}

View File

@ -11,7 +11,9 @@ buildPythonPackage rec {
hash = "sha256-GmbIqO+03LgbUxJ1nTStXrYN3t2MfvzbeYRAipfTW1o=";
};
propagatedBuildInputs = [ django-mailman3 readme-renderer ];
propagatedBuildInputs = [
django-mailman3 readme-renderer
] ++ readme-renderer.optional-dependencies.md;
nativeCheckInputs = [ beautifulsoup4 vcrpy mock ];
# Tries to connect to database.

View File

@ -29,10 +29,6 @@ lib.fix (self: python3.override {
hash = "sha256-WF3FFrnrBCphnvCjnD19Vf6BvbTfCaUsnN3g0Hvxqn0=";
};
});
readme-renderer = super.readme-renderer.overridePythonAttrs (_: {
propagatedBuildInputs = [ self.cmarkgfm ];
});
})
overlay;

View File

@ -38,7 +38,18 @@ in phpPackage.buildComposerProject rec {
php = phpPackage;
buildInputs = [
graphviz
ipmitool
libvirt
monitoring-plugins
mtr
net-snmp
nfdump
nmap
rrdtool
system-sendmail
unixtools.whereis
whois
(python3.withPackages (ps: with ps; [
pymysql
python-dotenv
@ -80,13 +91,15 @@ in phpPackage.buildComposerProject rec {
--replace '"default": "/usr/bin/snmpwalk",' '"default": "${net-snmp}/bin/snmpwalk",' \
--replace '"default": "/usr/bin/virsh",' '"default": "${libvirt}/bin/virsh",' \
--replace '"default": "/usr/bin/whois",' '"default": "${whois}/bin/whois",' \
--replace '"default": "/usr/lib/nagios/plugins",' '"default": "${monitoring-plugins}/libexec",' \
--replace '"default": "/usr/lib/nagios/plugins",' '"default": "${monitoring-plugins}/bin",' \
--replace '"default": "/usr/sbin/sendmail",' '"default": "${system-sendmail}/bin/sendmail",'
substituteInPlace $out/LibreNMS/wrapper.py --replace '/usr/bin/env php' '${phpPackage}/bin/php'
substituteInPlace $out/LibreNMS/__init__.py --replace '"/usr/bin/env", "php"' '"${phpPackage}/bin/php"'
substituteInPlace $out/snmp-scan.py --replace '"/usr/bin/env", "php"' '"${phpPackage}/bin/php"'
substituteInPlace $out/lnms --replace '\App\Checks::runningUser();' '//\App\Checks::runningUser(); //removed as nix forces ownership to root'
wrapProgram $out/daily.sh --prefix PATH : ${phpPackage}/bin
rm -rf $out/logs $out/rrd $out/bootstrap/cache $out/storage $out/.env

View File

@ -104,7 +104,7 @@ rec {
NIX_CFLAGS_LINK = toString args.env.NIX_CFLAGS_LINK + " -static";
};
} else {
NIX_CFLAGS_LINK = toString (args.env.NIX_CFLAGS_LINK or "") + " -static";
NIX_CFLAGS_LINK = toString (args.NIX_CFLAGS_LINK or "") + " -static";
} // lib.optionalAttrs (!(args.dontAddStaticConfigureFlags or false)) {
configureFlags = (args.configureFlags or []) ++ [
"--disable-shared" # brrr...

View File

@ -356,7 +356,7 @@ else let
then attrs.name + hostSuffix
else
# we cannot coerce null to a string below
assert assertMsg (attrs ? version && attrs.version != null) "The version attribute cannot be null.";
assert assertMsg (attrs ? version && attrs.version != null) "The `version` attribute cannot be null.";
"${attrs.pname}${staticMarker}${hostSuffix}-${attrs.version}"
);
}) // {
@ -572,14 +572,17 @@ let
checkedEnv =
let
overlappingNames = attrNames (builtins.intersectAttrs env derivationArg);
prettyPrint = lib.generators.toPretty {};
makeError = name: " - ${name}: in `env`: ${prettyPrint env.${name}}; in derivation arguments: ${prettyPrint derivationArg.${name}}";
errors = lib.concatMapStringsSep "\n" makeError overlappingNames;
in
assert assertMsg envIsExportable
"When using structured attributes, `env` must be an attribute set of environment variables.";
assert assertMsg (overlappingNames == [ ])
"The env attribute set cannot contain any attributes passed to derivation. The following attributes are overlapping: ${concatStringsSep ", " overlappingNames}";
"The `env` attribute set cannot contain any attributes passed to derivation. The following attributes are overlapping:\n${errors}";
mapAttrs
(n: v: assert assertMsg (isString v || isBool v || isInt v || isDerivation v)
"The env attribute set can only contain derivation, string, boolean or integer attributes. The ${n} attribute is of type ${builtins.typeOf v}."; v)
"The `env` attribute set can only contain derivation, string, boolean or integer attributes. The `${n}` attribute is of type ${builtins.typeOf v}."; v)
env;
# Fixed-output derivations may not reference other paths, which means that

View File

@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
license = licenses.bsd3;
maintainers = with maintainers; [ romildo ];
platforms = platforms.linux;
mainProgram = "xsettingsd";
};
}

View File

@ -1,19 +1,20 @@
{ lib
, fetchFromGitLab
, mkDerivation
, qtbase
, cmake
, kconfig
, kio
, kiconthemes
, kxmlgui
, ki18n
, kguiaddons
, extra-cmake-modules
, boost
, shared-mime-info
, rrdtool
, breeze-icons
{
lib,
fetchFromGitLab,
mkDerivation,
qtbase,
cmake,
kconfig,
kio,
kiconthemes,
kxmlgui,
ki18n,
kguiaddons,
extra-cmake-modules,
boost,
shared-mime-info,
rrdtool,
breeze-icons,
}:
mkDerivation rec {
@ -26,6 +27,10 @@ mkDerivation rec {
hash = "sha256-bUVL5eRQ5UkSZo562pnyEcj0fVoSC5WHRq4BfN67jEM=";
};
postPatch = lib.optional (!lib.versionOlder rrdtool.version "1.9.0") ''
substituteInPlace kcollectd/rrd_interface.cc --replace-fail 'char *arg[] =' 'const char *arg[] ='
'';
nativeBuildInputs = [
cmake
extra-cmake-modules

View File

@ -1,48 +0,0 @@
{ lib
, stdenv
, fetchFromGitHub
, autoreconfHook
, gettext
, perl
, pkg-config
, libxml2
, pango
, cairo
, groff
, tcl
, darwin
}:
perl.pkgs.toPerlModule (stdenv.mkDerivation rec {
pname = "rrdtool";
version = "1.8.0";
src = fetchFromGitHub {
owner = "oetiker";
repo = "rrdtool-1.x";
rev = "v${version}";
hash = "sha256-a+AxU1+YpkGoFs1Iu/CHAEZ4XIkWs7Vsnr6RcfXzsBE=";
};
nativeBuildInputs = [
pkg-config
autoreconfHook
];
buildInputs = [ gettext perl libxml2 pango cairo groff ]
++ lib.optionals stdenv.isDarwin [ tcl darwin.apple_sdk.frameworks.ApplicationServices ];
postInstall = ''
# for munin and rrdtool support
mkdir -p $out/${perl.libPrefix}
mv $out/lib/perl/5* $out/${perl.libPrefix}
'';
meta = with lib; {
homepage = "https://oss.oetiker.ch/rrdtool/";
description = "High performance logging in Round Robin Databases";
license = licenses.gpl2Only;
platforms = platforms.linux ++ platforms.darwin;
maintainers = with maintainers; [ pSub ];
};
})

View File

@ -1,27 +1,29 @@
{ lib
, stdenv
, autoreconfHook
, curl
, expat
, fetchFromGitHub
, git
, json_c
, libcap
, libmaxminddb
, libmysqlclient
, libpcap
, libsodium
, ndpi
, net-snmp
, openssl
, pkg-config
, rdkafka
, gtest
, rrdtool
, hiredis
, sqlite
, which
, zeromq
{
lib,
stdenv,
autoreconfHook,
curl,
expat,
fetchFromGitHub,
fetchpatch,
git,
json_c,
libcap,
libmaxminddb,
libmysqlclient,
libpcap,
libsodium,
ndpi,
net-snmp,
openssl,
pkg-config,
rdkafka,
gtest,
rrdtool,
hiredis,
sqlite,
which,
zeromq,
}:
stdenv.mkDerivation (finalAttrs: {
@ -36,6 +38,11 @@ stdenv.mkDerivation (finalAttrs: {
fetchSubmodules = true;
};
patches = lib.optional (!lib.versionOlder rrdtool.version "1.9.0") (fetchpatch {
url = "https://github.com/ntop/ntopng/commit/5069aa4a6259bd0830a33f2ece980612dba5ace9.patch";
hash = "sha256-CnYzSE39J7pC2wHxp7Xst6g5pzQbpNUynJUVrTrtuOg=";
});
preConfigure = ''
substituteInPlace Makefile.in \
--replace "/bin/rm" "rm"

View File

@ -7968,7 +7968,7 @@ with pkgs;
wxGTK = wxGTK32;
};
frescobaldi = python3Packages.callPackage ../misc/frescobaldi { };
frescobaldi = callPackage ../misc/frescobaldi { };
freshfetch = callPackage ../tools/misc/freshfetch {
inherit (darwin.apple_sdk.frameworks) AppKit CoreFoundation DiskArbitration Foundation IOKit;
@ -12295,8 +12295,6 @@ with pkgs;
rpmextract = callPackage ../tools/archivers/rpmextract { };
rrdtool = callPackage ../tools/misc/rrdtool { };
rscw = callPackage ../applications/radio/rscw { };
rset = callPackage ../tools/admin/rset { };

View File

@ -121,6 +121,8 @@ let
smpl = callPackage ../development/coq-modules/smpl { };
smtcoq = callPackage ../development/coq-modules/smtcoq { };
ssprove = callPackage ../development/coq-modules/ssprove {};
stalmarck-tactic = callPackage ../development/coq-modules/stalmarck {};
stalmarck = self.stalmarck-tactic.stalmarck;
stdpp = callPackage ../development/coq-modules/stdpp { };
StructTact = callPackage ../development/coq-modules/StructTact {};
tlc = callPackage ../development/coq-modules/tlc {};

View File

@ -10403,6 +10403,8 @@ self: super: with self; {
pytlv = callPackage ../development/python-modules/pytlv { };
pywebcopy = callPackage ../development/python-modules/pywebcopy { };
python-codon-tables = callPackage ../development/python-modules/python-codon-tables { };
python-creole = callPackage ../development/python-modules/python-creole { };
@ -10415,6 +10417,8 @@ self: super: with self; {
python-ecobee-api = callPackage ../development/python-modules/python-ecobee-api { };
python-escpos = callPackage ../development/python-modules/python-escpos { };
python-ffmpeg = callPackage ../development/python-modules/python-ffmpeg { };
python-flirt = callPackage ../development/python-modules/python-flirt { };
@ -12029,9 +12033,7 @@ self: super: with self; {
pyqtgraph = callPackage ../development/python-modules/pyqtgraph { };
pyqtwebengine = pkgs.libsForQt5.callPackage ../development/python-modules/pyqtwebengine {
pythonPackages = self;
};
pyqtwebengine = callPackage ../development/python-modules/pyqtwebengine { };
pyquery = callPackage ../development/python-modules/pyquery { };
@ -13684,6 +13686,8 @@ self: super: with self; {
rich-theme-manager = callPackage ../development/python-modules/rich-theme-manager { };
riden = callPackage ../development/python-modules/riden { };
ring-doorbell = callPackage ../development/python-modules/ring-doorbell { };
rio-tiler = callPackage ../development/python-modules/rio-tiler { };
@ -15810,7 +15814,7 @@ self: super: with self; {
tree-sitter = callPackage ../development/python-modules/tree-sitter { };
tree-sitter0_21 = callPackage ../development/python-modules/tree-sitter0_21 { };
tree-sitter_0_21 = callPackage ../development/python-modules/tree-sitter/0_21.nix { };
tree-sitter-html = callPackage ../development/python-modules/tree-sitter-html { };