Merge staging-next into staging

This commit is contained in:
nixpkgs-ci[bot]
2026-07-09 18:37:50 +00:00
committed by GitHub
114 changed files with 6058 additions and 612 deletions

View File

@@ -38,6 +38,9 @@
- `hurl` has been updated to `8.x.x` which has some breaking changes. See [upstream changelog](https://github.com/Orange-OpenSource/hurl/releases/tag/8.0.0) for details.
- `gotosocial` has been updated to 0.22.0. This release contains a very long database migration, which should not be cancelled or interrupted under any circumstances.
- Postgres users: Following the migration, if you encounter slowdown on Postgres specifically (ie., timing out while loading timelines) you may need to run some manual database maintenance steps. Please check https://docs.gotosocial.org/en/stable/admin/database_maintenance/#postgres.
- `xsecurelock` no longer supports authentication via htaccess files (`~/.xsecurelock.pw`) or via the `pamtester` program by default. Only the recommended PAM module is supported unless rebuilt with `withHtaccess` or `withPamtester`.
- `python3Packages.django-health-check` has been updated to major version 4. See its [migration guide](https://codingjoe.dev/django-health-check/migrate-to-v4/) and [changelog](https://github.com/codingjoe/django-health-check/releases/tag/4.0.0) for breaking changes.

View File

@@ -8660,6 +8660,13 @@
githubId = 63652646;
name = "Xaver Oswald";
};
examosa = {
email = "examosa@fastmail.com";
github = "examosa";
githubId = 23395221;
matrix = "@jamonith:matrix.org";
name = "Jules Amonith";
};
exarkun = {
email = "exarkun@twistedmatrix.com";
github = "exarkun";
@@ -18896,6 +18903,12 @@
githubId = 68156310;
name = "Benjamin Strachan";
};
mrbjarksen = {
email = "bjarki@harksen.is";
github = "mrbjarksen";
githubId = 62466569;
name = "Bjarki B. Harksen";
};
mrcjkb = {
email = "marc@jakobi.dev";
matrix = "@mrcjk:matrix.org";

View File

@@ -48,6 +48,8 @@
- [Matrix Authentication Service](https://github.com/element-hq/matrix-authentication-service) is an OAuth2.0 and OpenID Connect provider for Matrix homeservers (such as Synapse). It replaces standard password authentication with modern OpenID Connect flows, and can delegate authentication to upstream OIDC providers. Available as [services.matrix-authentication-service](#opt-services.matrix-authentication-service.enable).
- [stash-clipboard](https://github.com/NotAShelf/stash), a Wayland clipboard "manager" with fast persistent history and multi-media support. Available as [services.stash-clipboard](#opt-services.stash-clipboard.enable).
## Backward Incompatibilities {#sec-release-26.11-incompatibilities}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
@@ -77,6 +79,8 @@
- `systemd.user.extraConfig` has been removed in favor of the structured [](#opt-systemd.user.settings.Manager) option. Use `systemd.user.settings.Manager` to set any `systemd-user.conf(5)` option directly. For example, replace `systemd.user.extraConfig = "DefaultTimeoutStartSec=60";` with `systemd.user.settings.Manager.DefaultTimeoutStartSec = 60;`.
- `matrix-appservice-discord` was removed from nixpkgs along with its NixOS module (`services.matrix-appservice-discord`) as it is no longer actively maintained upstream. Use the actively-maintained puppeting bridge [`mautrix-discord`](#opt-services.mautrix-discord.enable) instead.
- `services.timesyncd.extraConfig` has been removed in favor of the structured [](#opt-services.timesyncd.settings.Time) option. Use `services.timesyncd.settings.Time` to set any `timesyncd.conf(5)` option directly. For example, replace `services.timesyncd.extraConfig = "PollIntervalMaxSec=180";` with `services.timesyncd.settings.Time.PollIntervalMaxSec = 180;`.
- `services.firezone.server.provision` has been removed due to it being unmaintanable. Remove all uses of provisioning and use the WebUI to configure firezone.

View File

@@ -801,7 +801,6 @@
./services/mail/sympa.nix
./services/mail/tlsrpt.nix
./services/mail/zeyple.nix
./services/matrix/appservice-discord.nix
./services/matrix/appservice-irc.nix
./services/matrix/conduit.nix
./services/matrix/continuwuity.nix
@@ -982,6 +981,7 @@
./services/misc/spice-webdavd.nix
./services/misc/spoolman.nix
./services/misc/sssd.nix
./services/misc/stash-clipboard.nix
./services/misc/subsonic.nix
./services/misc/sundtek.nix
./services/misc/svnserve.nix

View File

@@ -277,6 +277,13 @@ in
"services"
"marathon"
] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule
[
"services"
"matrix-appservice-discord"
]
"The matrix-appservice-discord package has been removed as it is no longer actively maintained upstream. Use `services.mautrix-discord` instead."
)
(mkRemovedOptionModule [ "services" "mathics" ] "The Mathics module has been removed")
(mkRemovedOptionModule [ "services" "matrix-sliding-sync" ]
"The matrix-sliding-sync package has been removed, since matrix-synapse incorporated its functionality. Remove `services.sliding-sync` from your NixOS Configuration, and the `.well-known` record for `org.matrix.msc3575.proxy` from your webserver"

View File

@@ -1,163 +0,0 @@
{
config,
options,
pkgs,
lib,
...
}:
let
dataDir = "/var/lib/matrix-appservice-discord";
registrationFile = "${dataDir}/discord-registration.yaml";
cfg = config.services.matrix-appservice-discord;
opt = options.services.matrix-appservice-discord;
# TODO: switch to configGen.json once RFC42 is implemented
settingsFile = pkgs.writeText "matrix-appservice-discord-settings.json" (
builtins.toJSON cfg.settings
);
in
{
options = {
services.matrix-appservice-discord = {
enable = lib.mkEnableOption "a bridge between Matrix and Discord";
package = lib.mkPackageOption pkgs "matrix-appservice-discord" { };
settings = lib.mkOption rec {
# TODO: switch to lib.types.config.json as prescribed by RFC42 once it's implemented
type = lib.types.attrs;
apply = lib.recursiveUpdate default;
default = {
database = {
filename = "${dataDir}/discord.db";
};
# empty values necessary for registration file generation
# actual values defined in environmentFile
auth = {
clientID = "";
botToken = "";
};
};
example = lib.literalExpression ''
{
bridge = {
domain = "public-domain.tld";
homeserverUrl = "http://public-domain.tld:8008";
};
}
'';
description = ''
{file}`config.yaml` configuration as a Nix attribute set.
Configuration options should match those described in
[config.sample.yaml](https://github.com/Half-Shot/matrix-appservice-discord/blob/master/config/config.sample.yaml).
{option}`config.bridge.domain` and {option}`config.bridge.homeserverUrl`
should be set to match the public host name of the Matrix homeserver for webhooks and avatars to work.
Secret tokens should be specified using {option}`environmentFile`
instead of this world-readable attribute set.
'';
};
environmentFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
File containing environment variables to be passed to the matrix-appservice-discord service,
in which secret tokens can be specified securely by defining values for
`APPSERVICE_DISCORD_AUTH_CLIENT_I_D` and
`APPSERVICE_DISCORD_AUTH_BOT_TOKEN`.
'';
};
url = lib.mkOption {
type = lib.types.str;
default = "http://localhost:${toString cfg.port}";
defaultText = lib.literalExpression ''"http://localhost:''${toString config.${opt.port}}"'';
description = ''
The URL where the application service is listening for HS requests.
'';
};
port = lib.mkOption {
type = lib.types.port;
default = 9005; # from https://github.com/Half-Shot/matrix-appservice-discord/blob/master/package.json#L11
description = ''
Port number on which the bridge should listen for internal communication with the Matrix homeserver.
'';
};
localpart = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
The user_id localpart to assign to the AS.
'';
};
serviceDependencies = lib.mkOption {
type = with lib.types; listOf str;
default = lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit;
defaultText = lib.literalExpression ''
lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit
'';
description = ''
List of Systemd services to require and wait for when starting the application service,
such as the Matrix homeserver if it's running on the same host.
'';
};
};
};
config = lib.mkIf cfg.enable {
systemd.services.matrix-appservice-discord = {
description = "A bridge between Matrix and Discord.";
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ] ++ cfg.serviceDependencies;
after = [ "network-online.target" ] ++ cfg.serviceDependencies;
preStart = ''
if [ ! -f '${registrationFile}' ]; then
${cfg.package}/bin/matrix-appservice-discord \
--generate-registration \
--url=${lib.escapeShellArg cfg.url} \
${
lib.optionalString (cfg.localpart != null) "--localpart=${lib.escapeShellArg cfg.localpart}"
} \
--config='${settingsFile}' \
--file='${registrationFile}'
fi
'';
serviceConfig = {
Type = "simple";
Restart = "always";
ProtectSystem = "strict";
ProtectHome = true;
ProtectKernelTunables = true;
ProtectKernelModules = true;
ProtectControlGroups = true;
DynamicUser = true;
PrivateTmp = true;
WorkingDirectory = "${cfg.package}/${cfg.package.passthru.nodeAppDir}";
StateDirectory = baseNameOf dataDir;
UMask = "0027";
EnvironmentFile = cfg.environmentFile;
ExecStart = ''
${cfg.package}/bin/matrix-appservice-discord \
--file='${registrationFile}' \
--config='${settingsFile}' \
--port='${toString cfg.port}'
'';
};
};
};
meta.maintainers = with lib.maintainers; [ euxane ];
}

View File

@@ -0,0 +1,73 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.stash-clipboard;
inherit (lib)
mkPackageOption
mkEnableOption
mkOption
types
mkIf
getExe
concatStringsSep
;
in
{
options.services.stash-clipboard = {
enable = mkEnableOption "stash, a Wayland clipboard manager";
package = mkPackageOption pkgs [ "stash-clipboard" ] { };
arguments = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "--max-items 10" ];
description = "A list of arguments to pass to stash watch.";
};
filterFile = mkOption {
type = types.str;
default = "";
example = "/etc/stash/clipboard_filter";
description = ''
Stash can be configured to avoid storing clipboard entries that match a sensitive pattern, using a regular expression.
The file set here should contain your regex pattern (no quotes).
Example regex to block common password patterns:
- (password|secret|api[_-]?key|token)[=: ]+[^\s]+
'';
};
excludedApps = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "Bitwarden" ];
description = ''
List of application classes to exclude from the database.
Entries from these apps are still copied to the clipboard, but it will never be put inside the database.
'';
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
systemd = {
user.services.stash-clipboard = {
description = "Stash clipboard manager daemon";
wantedBy = [ "graphical-session.target" ];
after = [ "graphical-session.target" ];
serviceConfig = {
ExecStart = "${getExe cfg.package} ${concatStringsSep " " cfg.arguments} watch";
LoadCredential = mkIf (cfg.filterFile != "") "clipboard_filter:${cfg.filterFile}";
};
environment = mkIf (cfg.excludedApps != [ ]) {
STASH_EXCLUDED_APPS = concatStringsSep "," cfg.excludedApps;
};
};
};
};
}

View File

@@ -3,7 +3,7 @@
name = "gotosocial";
meta.maintainers = with lib.maintainers; [ blakesmith ];
nodes.machine =
containers.machine =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.jq ];

View File

@@ -15,7 +15,7 @@ stdenv.mkDerivation (finalAttrs: {
version = "1.4";
src = fetchurl {
url = "http://www.delorie.com/store/ace/ace-${finalAttrs.version}.tar.gz";
url = "https://www.delorie.com/store/ace/ace-${finalAttrs.version}.tar.gz";
hash = "sha256-H+47BTOSGkKHPAYj8z2HOgZ7HuxY8scMAUSRRueaTM4=";
};
@@ -67,7 +67,7 @@ stdenv.mkDerivation (finalAttrs: {
];
meta = {
homepage = "http://www.delorie.com/store/ace/";
homepage = "https://www.delorie.com/store/ace/";
description = "Solitaire games in X11";
longDescription = ''
The Ace of Penguins is a set of Unix/X solitaire games based on the ones

View File

@@ -3,7 +3,6 @@
stdenv,
rustPlatform,
fetchFromGitLab,
fetchpatch,
pkg-config,
sqlite,
openssl,
@@ -14,7 +13,7 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "arti";
version = "2.4.0";
version = "2.5.0";
src = fetchFromGitLab {
domain = "gitlab.torproject.org";
@@ -22,29 +21,18 @@ rustPlatform.buildRustPackage (finalAttrs: {
owner = "core";
repo = "arti";
tag = "arti-v${finalAttrs.version}";
hash = "sha256-YLOdrHstmN2pLl75uclkbpN5h3iBs3xpraZ8XN6R/+Q=";
hash = "sha256-jOCFXlBI2xAzgpb7Fa8ap53SpDF6kcRGYnBXcu3vpk4=";
};
patches = [
# Fixes a panic that could allow malicious directory caches to crash
# clients.
# https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4062
(fetchpatch {
name = "TROVE-2026-024.patch";
url = "https://gitlab.torproject.org/tpo/core/arti/-/commit/f69be8c70561629e63004788f0aa4bf898025f93.patch";
hash = "sha256-P0sXTKOBW7ulqQZwmTVJfrpLksLyaonuDpxGF2keDqE=";
})
];
# Working around a bug in cargo that appears with cargo-auditable, see
# https://github.com/rust-secure-code/cargo-auditable/issues/124.
postPatch = ''
substituteInPlace crates/arti/Cargo.toml \
--replace-fail '"tor-rpcbase"' '"dep:tor-rpcbase"'
--replace-fail '"tokio-util"' '"dep:tokio-util"'
'';
buildAndTestSubdir = "crates/arti";
cargoHash = "sha256-7X3JJbt0/jxaMvBR3XQvguR7tqd96kiqX66G2byvPjM=";
cargoHash = "sha256-JK6ubp697jZ98ErNrZdFe0mXIez3lUZ5SmAHkyD97WQ=";
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ pkg-config ];

View File

@@ -38,12 +38,12 @@
stdenv.mkDerivation (finalAttrs: {
pname = "bitwig-studio6";
version = "6.0.6";
version = "6.0.11";
src = fetchurl {
name = "bitwig-studio-${finalAttrs.version}.deb";
url = "https://www.bitwig.com/dl/Bitwig%20Studio/${finalAttrs.version}/installer_linux";
hash = "sha256-tczgtA4v3a5Qjxaa6ZvaiFDWD6dhRw19vj8IMxkyCNI=";
hash = "sha256-rnr/Z8y6klKrU2gT5/XT+sRryl/HZZZ04n565L0HPEw=";
};
strictDeps = true;

View File

@@ -0,0 +1,25 @@
From 6e438d1ab9f9da5e55b0cc96ea81fbac1f1a871b Mon Sep 17 00:00:00 2001
From: phanirithvij <phanirithvij2000@gmail.com>
Date: Sun, 5 Jul 2026 19:40:36 +0530
Subject: [PATCH] fix: handle None default_account on startup
---
blink/mainwindow.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blink/mainwindow.py b/blink/mainwindow.py
index d0baa21..77c67e8 100644
--- a/blink/mainwindow.py
+++ b/blink/mainwindow.py
@@ -1109,7 +1109,7 @@ class MainWindow(base_class, ui_class):
def _NH_SIPAccountManagerDidStart(self, notification):
account = notification.sender.default_account
- if account is not BonjourAccount() and account.sms.enable_pgp and account.sms.private_key is not None and os.path.exists(account.sms.private_key.normalized):
+ if account is not None and account is not BonjourAccount() and account.sms.enable_pgp and account.sms.private_key is not None and os.path.exists(account.sms.private_key.normalized):
self.export_pgp_key_action.setEnabled(True)
def _NH_SIPAccountManagerDidRemoveAccount(self, notification):
--
2.54.0

View File

@@ -5,26 +5,24 @@
python3Packages,
qt6Packages,
libvncserver,
stdenv,
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "blink-qt";
version = "6.0.4";
version = "6.0.6";
pyproject = true;
src = fetchFromGitHub {
owner = "AGProjects";
repo = "blink-qt";
tag = finalAttrs.version;
hash = "sha256-QESg9yo5oddYqSKuFLSMI2Oju3FCq97+j0uJDK85Yy8=";
hash = "sha256-0hsuAYYp7KvfxErAcN4EX8G3goirGRmpijJfAMvbZJQ=";
};
patches = [
# Remove when version > 6.0.4
(fetchpatch2 {
url = "https://github.com/AGProjects/blink-qt/commit/45343c90ae0680a3d03589fa8a12ac1eb85a6925.patch";
hash = "sha256-XwV5L3r0IqWkhlaJypS2cHkDCcoumOgEEqDpdcaTviE=";
})
# Remove once https://github.com/AGProjects/blink-qt/pull/7 is mereged and tagged
./fix-none-account.patch
];
nativeBuildInputs = [ qt6Packages.wrapQtAppsHook ];
@@ -40,26 +38,31 @@ python3Packages.buildPythonApplication (finalAttrs: {
qt6Packages.qtsvg
];
dependencies = with python3Packages; [
dateutils
dnspython
google-api-python-client
lxml
lxml-html-clean
msrplib
oauth2client
otr
pgpy
pyqt6
pyqt6-webengine
python3-application
python3-eventlib
python3-gnutls
python3-sipsimple
sqlobject
standard-imghdr
xcaplib
];
dependencies =
with python3Packages;
[
dateutils
dnspython
google-auth-oauthlib
google-api-python-client
lxml
lxml-html-clean
msrplib
otr
pgpy
pyqt6
pyqt6-webengine
python3-application
python3-eventlib
python3-gnutls
python3-sipsimple
sqlobject
standard-imghdr
xcaplib
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
numpy
];
dontWrapQtApps = true;

View File

@@ -4,7 +4,7 @@
removeReferencesTo,
srcOnly,
python3,
pnpm_9,
pnpm_10,
fetchPnpmDeps,
pnpmConfigHook,
fetchFromGitHub,
@@ -15,6 +15,7 @@
lib,
nix-update-script,
cctools,
fetchpatch2,
}:
let
@@ -22,22 +23,30 @@ let
nodejs = nodejs_24;
nodeSources = srcOnly nodejs;
pythonEnv = python3.withPackages (p: [ p.setuptools ]);
pnpm = pnpm_9;
pnpm = pnpm_10;
in
stdenv.mkDerivation (finalAttrs: {
pname = "pds";
version = "0.4.5006";
version = "0.4.5009";
src = fetchFromGitHub {
owner = "bluesky-social";
repo = "pds";
tag = "v${finalAttrs.version}";
hash = "sha256-Jb2qAB6P5KlRu4L99fcK/v0/Fspr8IFaFXuYg+PBxhM=";
hash = "sha256-3IEbVn7ThiVL7E2fXMHzsRSLT7Tm1eiX8bPQ88rJCvs=";
};
sourceRoot = "${finalAttrs.src.name}/service";
patchFlags = [ "-p2" ];
patches = [
(fetchpatch2 {
url = "https://github.com/bluesky-social/pds/commit/f8de5f08900c42023b01a4d10995556f16d05145.patch?full_index=1";
hash = "sha256-E0mWvLWQ4lFjkFgqtmMIESpNH7PSAB/QpSqxIwsj6Q8=";
})
];
nativeBuildInputs = [
makeBinaryWrapper
nodejs
@@ -60,10 +69,12 @@ stdenv.mkDerivation (finalAttrs: {
version
src
sourceRoot
patchFlags
patches
;
inherit pnpm;
fetcherVersion = 4;
hash = "sha256-YfwoUkTJJ2qANqwtSWKDGfFmahAtIDNyYFwCUE72oB0=";
hash = "sha256-BTSMmGhLpQ6KrI7/XfinRwe8ap7btIrPa55f6HB63M8=";
};
buildPhase = ''

View File

@@ -3,24 +3,24 @@
let
pname = "brave";
version = "1.91.180";
version = "1.92.134";
allArchives = {
aarch64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_arm64.deb";
hash = "sha256-HdmJBLANsmlBi3EtzeuMn4USmW8x/LaYKUWDlqw3a2I=";
hash = "sha256-qo40t+PGl1RO2ajJ2Hev4G1FWvzTx7Ak5CVxjdxabLI=";
};
x86_64-linux = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
hash = "sha256-mM2SOn6V1KQJEjxR0KH1lXJMLSzpx/IiZDeSrJtIFt0=";
hash = "sha256-T3A/ejmLkIRYGWc8GXQmvIAZvQFwYEyhQJxssNDalhQ=";
};
aarch64-darwin = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-arm64.zip";
hash = "sha256-WkBudj8I0/pIzhA4fynkfY4t6M/6d1zPTZPSQeX3d5Y=";
hash = "sha256-K1p5mAYfEDJNZFSmoOQV7kHNsA5RQuyUl3T2KVsNcbw=";
};
x86_64-darwin = {
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-v${version}-darwin-x64.zip";
hash = "sha256-mxKhtUiLoloUvYK0hv1WHpVytadHPLGN8IePrscxWxs=";
hash = "sha256-IrhvRVFZGLoGSVNy10ppFL9rEy7MRTb/HIhzspDsrs8=";
};
};

View File

@@ -6,16 +6,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "chainsaw";
version = "2.16.0";
version = "2.16.2";
src = fetchFromGitHub {
owner = "WithSecureLabs";
repo = "chainsaw";
tag = "v${finalAttrs.version}";
hash = "sha256-ywHPDVHpw0TrzeWPzZ3cvQSxCr2Di2YjS0Not1B9vlg=";
hash = "sha256-EKL2MTo5qirpY4TCWwBptpRWJRd6Yp/dLz/5sIsdsbg=";
};
cargoHash = "sha256-AA8JQiGukh4SRZyciuE2u4OUo7HNeb6+SWej9vlw5z8=";
cargoHash = "sha256-bbgRqp3bNw2U69aVqwvJNWOKgW0YhR8SlqzH9jdrHZU=";
ldflags = [
"-w"

View File

@@ -40,6 +40,8 @@ buildNpmPackage (finalAttrs: {
ONNXRUNTIME_NODE_INSTALL = "skip";
ONNXRUNTIME_NODE_INSTALL_CUDA = "skip";
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
# electron-forge's console output is squeezed into one narrow column if unset
CI = "1";
};
makeCacheWritable = true;

View File

@@ -20,35 +20,30 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "cinny-desktop";
# We have to be using the same version as cinny-web or this isn't going to work.
version = "4.12.2";
version = "4.12.5";
src = fetchFromGitHub {
owner = "cinnyapp";
repo = "cinny-desktop";
tag = "v${finalAttrs.version}";
hash = "sha256-gaTgNTn0/HHzULHRL03+t73MEUOGdqcEyqaIt8CWA0k=";
hash = "sha256-/A/O42jwwK2iDV1IdRjOO8fE/AZ0h7UWAZZLozOqUWs=";
};
sourceRoot = "${finalAttrs.src.name}/src-tauri";
cargoHash = "sha256-x7rpnhTz454Ftolu4x50NSGKdg8NfenUwdhPY4a+lbA=";
cargoHash = "sha256-EF8gpfeZasazq0NKrjItt4bkgautQjYjEegf1OlWLOw=";
postPatch =
let
cinny' =
assert lib.assertMsg (
cinny.version == finalAttrs.version
) "cinny.version (${cinny.version}) != cinny-desktop.version (${finalAttrs.version})";
cinny.override {
conf = {
hashRouter.enabled = true;
};
cinny' = cinny.override {
conf = {
hashRouter.enabled = true;
};
};
in
''
${lib.getExe jq} \
'del(.plugins.tauri.updater) | .build.frontendDist = "${cinny'}" | del(.build.beforeBuildCommand) | .bundle.createUpdaterArtifacts = false' tauri.conf.json \
'.build.frontendDist = "${cinny'}" | del(.build.beforeBuildCommand) | .bundle.createUpdaterArtifacts = false' tauri.conf.json \
| ${lib.getExe' moreutils "sponge"} tauri.conf.json
'';
@@ -82,6 +77,9 @@ rustPlatform.buildRustPackage (finalAttrs: {
webkitgtk_4_1
];
buildNoDefaultFeatures = true;
buildFeatures = [ "custom-protocol" ];
passthru = {
updateScript = _experimental-update-script-combinators.sequence [
(nix-update-script { attrPath = "cinny-unwrapped"; })

View File

@@ -7,17 +7,17 @@
buildNpmPackage (finalAttrs: {
pname = "cinny-unwrapped";
# Remember to update cinny-desktop when bumping this version.
version = "4.12.2";
version = "4.12.3";
# nixpkgs-update: no auto update
src = fetchFromGitHub {
owner = "cinnyapp";
repo = "cinny";
tag = "v${finalAttrs.version}";
hash = "sha256-UF5MwV02G0oYIXtvyzHn+DifYM8PFlyb9DZ4w1fuyDE=";
hash = "sha256-RjPdq9xNvUbJESV7CqxmgfqAx+MoKZbhUtJNTcH9aUk=";
};
npmDepsHash = "sha256-8SyUFv1wgnqfSyBlykmeGI8RAmFt5Q5uS6OFLi+qPPY=";
npmDepsHash = "sha256-CU8AVRuMFOGI0/LbN0LGysBk+qc2XQYxQGfrrH72stc=";
# Skip rebuilding native modules since they're not needed for the web app
npmRebuildFlags = [

View File

@@ -0,0 +1,43 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
nix-update-script,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "cormorant";
version = "4.002";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "CatharsisFonts";
repo = "Cormorant";
tag = "v${finalAttrs.version}";
hash = "sha256-vYn6MV+P+YVH329NM9tfAsNG8bsgGTJtDLOgnNYRMFk=";
};
dontBuild = true;
installPhase = ''
runHook preInstall
install -m444 -Dt $out/share/fonts/truetype fonts/ttf/*.ttf
install -m444 -Dt $out/share/fonts/opentype fonts/otf/*.otf
runHook postInstall
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Open-source display font family";
longDescription = "Cormorant is a free display type family developed by Christian Thalmann (Catharsis Fonts).";
homepage = "https://www.behance.net/gallery/28579883/Cormorant-an-open-source-display-font-family";
license = lib.licenses.ofl;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [ mrbjarksen ];
};
})

View File

@@ -8,13 +8,13 @@
buildGoModule (finalAttrs: {
pname = "dns-collector";
version = "2.3.0";
version = "2.4.0";
src = fetchFromGitHub {
owner = "dmachard";
repo = "dns-collector";
tag = "v${finalAttrs.version}";
hash = "sha256-5SFdTDuXnVdMFGxoraUMbDV3o476sc9c7D9qWBoQXr4=";
hash = "sha256-Gm5PXEEgw98NnsfKN8JxhyTqEL9KSA6L2CgRTRJirdY=";
};
subPackages = [ "." ];
@@ -28,7 +28,7 @@ buildGoModule (finalAttrs: {
"-X=github.com/prometheus/common/version.Version=${finalAttrs.version}"
];
vendorHash = "sha256-eoUsiRGtq1ucAIyeCRNEuro2Qj4iRe+3aE8DrqIcCWs=";
vendorHash = "sha256-pEex5xu3Cf6vqFp7YLwk+Ku+Yc0coOGLXP7/NUtDYbg=";
passthru.updateScript = nix-update-script { };

View File

@@ -0,0 +1,48 @@
diff --git a/package-lock.json b/package-lock.json
index 921ffcdc..f1a2aeeb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,7 +17,7 @@
"@electron/remote": "2.1.3",
"@fortawesome/fontawesome-free": "^6.6.0",
"angular-split": "14.1.0",
- "better-sqlite3": "12.5.0",
+ "better-sqlite3": "12.11.1",
"cheerio": "1.0.0-rc.12",
"discord-rpc": "4.0.1",
"electron-log": "4.4.8",
@@ -10353,9 +10353,9 @@
"license": "MIT"
},
"node_modules/better-sqlite3": {
- "version": "12.5.0",
- "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.5.0.tgz",
- "integrity": "sha512-WwCZ/5Diz7rsF29o27o0Gcc1Du+l7Zsv7SYtVPG0X3G/uUI1LqdxrQI7c9Hs2FWpqXXERjW9hp6g3/tH7DlVKg==",
+ "version": "12.11.1",
+ "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz",
+ "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -10363,7 +10363,7 @@
"prebuild-install": "^7.1.1"
},
"engines": {
- "node": "20.x || 22.x || 23.x || 24.x || 25.x"
+ "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x"
}
},
"node_modules/big.js": {
diff --git a/package.json b/package.json
index 2c07792f..9023e10c 100644
--- a/package.json
+++ b/package.json
@@ -98,7 +98,7 @@
"@electron/remote": "2.1.3",
"@fortawesome/fontawesome-free": "^6.6.0",
"angular-split": "14.1.0",
- "better-sqlite3": "12.5.0",
+ "better-sqlite3": "12.11.1",
"cheerio": "1.0.0-rc.12",
"discord-rpc": "4.0.1",
"electron-log": "4.4.8",

View File

@@ -3,30 +3,36 @@
stdenv,
fetchFromGitHub,
buildNpmPackage,
electron_40,
electron,
python3,
xcodebuild,
applyPatches,
}:
buildNpmPackage (finalAttrs: {
pname = "dopamine";
version = "3.0.6";
src = fetchFromGitHub {
owner = "digimezzo";
repo = "dopamine";
tag = "v${finalAttrs.version}";
hash = "sha256-HTPWejm5Wi6yGJyS/f1RhjIluTz01ue8lAsnAcQY3IY=";
# needed to upgrade better-sqlite3 in npmConfigHook
src = applyPatches {
src = fetchFromGitHub {
owner = "digimezzo";
repo = "dopamine";
tag = "v${finalAttrs.version}";
hash = "sha256-HTPWejm5Wi6yGJyS/f1RhjIluTz01ue8lAsnAcQY3IY=";
};
patches = [
# register-scheme contains install scripts, but has no lockfile
./remove-register-scheme.patch
# fixes node-addon-api errors with aarch64-darwin
./update-node-addon-api.patch
# bump better-sqlite3 to work with electron 41
./bump-better-sqlite3.patch
];
};
npmDepsHash = "sha256-JkGS0YmjsdUiOD48HcGXy/fPTP33JQAtJui0mQWicmc=";
patches = [
# register-scheme contains install scripts, but has no lockfile
./remove-register-scheme.patch
# fixes node-addon-api errors with aarch64-darwin
./update-node-addon-api.patch
];
npmDepsHash = "sha256-9dQUqoLfzYXOgmE9j2lkew9b/1m4XOghT7roD82y+qg=";
nativeBuildInputs = [
(python3.withPackages (ps: with ps; [ distutils ]))
@@ -39,8 +45,8 @@ buildNpmPackage (finalAttrs: {
runHook preBuild
# needed for better-sqlite3 rebuild
export npm_config_nodedir="${electron_40.headers}"
export npm_config_target="${electron_40.version}"
export npm_config_nodedir="${electron.headers}"
export npm_config_target="${electron.version}"
npm rebuild --verbose --no-progress --offline
@@ -57,7 +63,7 @@ buildNpmPackage (finalAttrs: {
${
if stdenv.hostPlatform.isDarwin then
''
cp -r ${electron_40.dist}/Electron.app ./
cp -r ${electron.dist}/Electron.app ./
find ./Electron.app -name 'Info.plist' -exec chmod +rw {} \;
npm exec electron-builder -- \
@@ -65,7 +71,7 @@ buildNpmPackage (finalAttrs: {
-c.npmRebuild=false \
-c.mac.identity=null \
-c.electronDist=./ \
-c.electronVersion=${electron_40.version} \
-c.electronVersion=${electron.version} \
-c.extraMetadata.version=v${finalAttrs.version} \
--config electron-builder.config.js
''
@@ -74,8 +80,8 @@ buildNpmPackage (finalAttrs: {
npm exec electron-builder -- \
--dir \
-c.npmRebuild=false \
-c.electronDist=${electron_40.dist} \
-c.electronVersion=${electron_40.version} \
-c.electronDist=${electron.dist} \
-c.electronVersion=${electron.version} \
-c.extraMetadata.version=v${finalAttrs.version} \
--config electron-builder.config.js
''
@@ -99,7 +105,7 @@ buildNpmPackage (finalAttrs: {
mkdir -p $out/share/dopamine
cp -r release/linux*unpacked/{locales,resources{,.pak}} $out/share/dopamine
makeWrapper ${lib.getExe electron_40} $out/bin/dopamine \
makeWrapper ${lib.getExe electron} $out/bin/dopamine \
--add-flags $out/share/dopamine/resources/app.asar \
--inherit-argv0

View File

@@ -7,16 +7,16 @@
buildNpmPackage (finalAttrs: {
pname = "dotenvx";
version = "1.75.1";
version = "2.3.2";
src = fetchFromGitHub {
owner = "dotenvx";
repo = "dotenvx";
tag = "v${finalAttrs.version}";
hash = "sha256-pcn4YyFMba8oX0gFrlHHuKucMy+F0FMtM/FaSb6ZWDE=";
hash = "sha256-eDwnuwL+rJiUGV8+Q6zm7ADnSF9WKquu55GJDocDLRA=";
};
npmDepsHash = "sha256-RucWpXNW1whEyqRtqtaq6NiGz9/Jh5N9N4GUP92/k44=";
npmDepsHash = "sha256-MpGKkyj0UdvyjImH04NhNWgZ2POFIf7pzSkxkgglrp4=";
dontNpmBuild = true;

View File

@@ -0,0 +1,23 @@
diff --git a/tools/contributors.ts b/tools/contributors.ts
index ad085d3..1a30ab4 100644
--- a/tools/contributors.ts
+++ b/tools/contributors.ts
@@ -126,6 +126,7 @@ async function fetchDetailsContributors(
}
async function fetchContributors() {
+ return []
const response = await fetch(CONTRIBUTORS_URL, { headers: HEADERS });
if (!response.ok) {
@@ -173,10 +174,6 @@ async function fetchAndWriteContributorsFile() {
try {
data = await fetchContributors();
-
- if (!data || data.length === 0) {
- throw new Error('Contributors array is empty');
- }
} catch (error) {
if (process.env.CI) {
throw error;

View File

@@ -27,6 +27,7 @@ let
patches = [
./dont-use-initial-releases-json.patch
./dont-fetch-contributors.patch
# zip extraction fails on newer nodejs versions without this fix
./bump-yauzl.patch
@@ -66,6 +67,9 @@ let
--replace-fail 'await this.getElectronZipPath(downloadOpts)' '"electron.zip"'
'';
# electron-forge's console output is squeezed into one narrow column if unset
env.CI = "1";
yarnBuildScript = "package";
installPhase = ''
@@ -101,6 +105,8 @@ buildFHSEnv {
inherit pname version;
runScript = "${lib.getExe electron} ${unwrapped}/lib/electron-fiddle/resources/app.asar";
passthru = { inherit unwrapped; };
extraInstallCommands = ''
mkdir -p "$out/share/icons/hicolor/scalable/apps"
ln -s "${unwrapped}/share/icons/hicolor/scalable/apps/electron-fiddle.svg" "$out/share/icons/hicolor/scalable/apps/"

View File

@@ -3,17 +3,17 @@
buildGoModule,
fetchFromGitHub,
}:
buildGoModule {
buildGoModule rec {
pname = "fast";
version = "0-unstable-2026-07-01";
version = "0.1.0";
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "maaslalani";
repo = "fast";
rev = "26d8fc9c189ba748c68f8930af11dee5c2467f7e";
hash = "sha256-YeDx082+ySqzamo9UutFTXXkrb37nmqt3ZUNzUHShf4=";
tag = "v${version}";
hash = "sha256-/Li5AAuuHkVqJzmh38g5CPQXWj4RY0TRwvtjlpydosg=";
};
vendorHash = "sha256-YSjJ8NOL97hXZLnfGYIjoKmARv+gWOsv+5qkl9konnA=";

View File

@@ -19,14 +19,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "faugus-launcher";
version = "1.22.6";
version = "1.22.8";
pyproject = false;
src = fetchFromGitHub {
owner = "Faugus";
repo = "faugus-launcher";
tag = finalAttrs.version;
hash = "sha256-hN0DU7MFlG8+TVQ2pWRRIVIDlmmHE54Dv/PqFAwwECs=";
hash = "sha256-2FsuD40u5O7VwbziTqhsfVyceyfmSRvdmsizfBy/Xys=";
};
nativeBuildInputs = [

View File

@@ -11,17 +11,17 @@
buildNpmPackage rec {
pname = "firebase-tools";
version = "15.22.3";
version = "15.22.4";
nodejs = nodejs_22;
src = fetchFromGitHub {
owner = "firebase";
repo = "firebase-tools";
tag = "v${version}";
hash = "sha256-jj1cbJ/AlBDTDhIK/5J0XMn+8opZJ72o3O9JmB35RpE=";
hash = "sha256-0O6/tOd9PNtsTzXvgFMl7bneejMJ4uAGvinWZFjlkUo=";
};
npmDepsHash = "sha256-31d0VqbM7vnKyKF7GxNr4V4Z3EqfsgdeKzWbXOOIHYU=";
npmDepsHash = "sha256-TlAcsOKmHnXPNdOpgXhr16tMWFjtahT/CG5INBR59fM=";
# No more package-lock.json in upstream src
postPatch = ''

View File

@@ -8,13 +8,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "gcstar";
version = "1.8.0";
version = "1.8.1";
src = fetchFromGitLab {
owner = "Kerenoc";
repo = "GCstar";
rev = "v${finalAttrs.version}";
hash = "sha256-37yjKI4l/nUzDnra1AGxDQxNafMsLi1bSifG6pz33zg=";
hash = "sha256-cVDOu1BH3WEHhaHa5d8usTrc5M8ZKaKCLNzsSIC+HsU=";
};
nativeBuildInputs = [ wrapGAppsHook3 ];
@@ -34,6 +34,7 @@ stdenv.mkDerivation (finalAttrs: {
JSON
ImageExifTool
librelative
LocaleCodes
LWP
LWPProtocolHttps
MP3Info
@@ -45,6 +46,9 @@ stdenv.mkDerivation (finalAttrs: {
XMLParser
];
# DateTime::Format::Strptime requires lang locale to be defined for correct date formatting.
env.LANG = "C.UTF-8";
installPhase = ''
runHook preInstall

View File

@@ -9,13 +9,13 @@
buildGoModule (finalAttrs: {
pname = "gcx";
version = "0.4.2";
version = "0.4.3";
src = fetchFromGitHub {
owner = "grafana";
repo = "gcx";
tag = "v${finalAttrs.version}";
hash = "sha256-Gf05N13ZJLjB55eCcIfXIoJn3CVAAR5mcFyEq8s+RxY=";
hash = "sha256-nSopsew5QMOs/QyJg7TzALokZagIGCjxMCNsairB5PA=";
};
vendorHash = "sha256-JioNpEqGFxD6Gg84ZZ/9OrETxTGn2V+HMlGGiiZfeIo=";

View File

@@ -7,33 +7,42 @@
pkg-config,
libusb1,
iproute2,
net-tools,
}:
buildGoModule (finalAttrs: {
pname = "go-ios";
version = "1.0.207";
version = "1.2.0";
src = fetchFromGitHub {
owner = "danielpaulus";
repo = "go-ios";
rev = "v${finalAttrs.version}";
sha256 = "sha256-2GjUrt1F8MrPOITCsuWHHsi/85pfzbLeY+WbPfLYDY4=";
sha256 = "sha256-5fMsHSwJUH/JBaZXyB11rHCNOqzHF3MYI9gg29hj0O4=";
};
proxyVendor = true;
vendorHash = "sha256-/aVaTC9lfoXQvhDVQm31HmXBnDYYOv6RH69Nm3I/K7s=";
vendorHash = "sha256-Bl9nlRnclqVgFF6mS6DX6oS+1c26DoISqDBY2rMS2yw=";
excludedPackages = [
"restapi"
"test/e2e"
];
postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
ldflags = [
"-X main.version=${finalAttrs.version}"
];
postPatch = ''
substituteInPlace main.go \
--replace-fail 'const version = ' 'var version = '
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
substituteInPlace ncm/linux_commands.go \
--replace-fail "ip " "${lib.getExe' iproute2 "ip"} "
substituteInPlace ios/tunnel/tunnel.go \
--replace-fail "ifconfig" "${lib.getExe' net-tools "ifconfig"}"
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
substituteInPlace ios/tunnel/tunnel_darwin.go \
--replace-fail "ifconfig" "/sbin/ifconfig"
'';
nativeBuildInputs = [

View File

@@ -7,16 +7,16 @@
buildGoModule (finalAttrs: {
pname = "goimapnotify";
version = "2.5.5";
version = "2.5.6";
src = fetchFromGitLab {
owner = "shackra";
repo = "goimapnotify";
tag = finalAttrs.version;
hash = "sha256-kPyL6sObr1WvCjjGJZk2Rk4YsY4rH836OzXP/MEgpL0=";
hash = "sha256-3sHksrutag7gznxUrETDmd3VbJaTH1BqaGKEPTCCtL0=";
};
vendorHash = "sha256-5cZzaCoOR1R7iST0q3GaJbYIbKKEigeWqhp87maOL04=";
vendorHash = "sha256-3yavkH0b4ZLLt1a7MhdeHSNVAAOYKiKC+D9zfEv9bSA=";
postPatch = ''
for f in internal/util/command.go internal/util/command_test.go; do

View File

@@ -11,13 +11,13 @@
}:
buildGo125Module (finalAttrs: {
pname = "gotosocial";
version = "0.21.3";
version = "0.22.0";
src = fetchFromCodeberg {
owner = "superseriousbusiness";
repo = "gotosocial";
tag = "v${finalAttrs.version}";
hash = "sha256-gemi9t4wTjmCHEXfdXz1X9Q4gcvj/3LMtlrO5UpQ19M=";
hash = "sha256-rslzi9WqPqN/wm9PN6SWdXtLdMRJJV6Hhb3whJ0RicU=";
};
vendorHash = null;
@@ -63,6 +63,9 @@ buildGo125Module (finalAttrs: {
'';
postInstall = ''
# remove a Go codegen helper binary
rm $out/bin/gen
mkdir -p $out/share/gotosocial/web
mv web/{assets,template} $out/share/gotosocial/web
'';

View File

@@ -11,13 +11,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "hdrhistogram_c";
version = "0.11.9";
version = "0.11.10";
src = fetchFromGitHub {
owner = "HdrHistogram";
repo = "HdrHistogram_c";
tag = finalAttrs.version;
hash = "sha256-9Xp+gPqJpB7xZr5dzyc9Via9gxG9q/EriCx3cm++0kU=";
hash = "sha256-LMZj7vuxOA1bgU/J10IKnyNe3R0dk2AA1ydLTHun4vg=";
};
buildInputs = [ zlib ];

View File

@@ -2,33 +2,34 @@
lib,
stdenv,
rustPlatform,
fetchFromGitHub,
libGL,
libinput,
pkgconf,
xkeyboard_config,
libgbm,
pango,
udev,
libglvnd,
vulkan-loader,
autoPatchelfHook,
fetchFromGitHub,
installShellFiles,
libGL,
libgbm,
libglvnd,
libinput,
nix-update-script,
pango,
pkgconf,
sqlite,
udev,
vulkan-loader,
xkeyboard_config,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "jay";
version = "1.13.0";
version = "1.14.0";
src = fetchFromGitHub {
owner = "mahkoh";
repo = "jay";
rev = "v${finalAttrs.version}";
sha256 = "sha256-tC2V1BgUGsUMpZsKXjFSS8Mp28LrNI/QNu761zpgAkc=";
sha256 = "sha256-bdvcGO1E9fkmKiXQxc3nvISwjIAegY8g37HmxXolsmU=";
};
cargoHash = "sha256-96vCkZR/8dgZH0hJPeKzP7jQZ41W7XTi9yMnxFaIhoY=";
cargoHash = "sha256-5yjMPDh7liaa9+KntfdCzUXz4vWzTcAhFmXrnVZ+pjM=";
nativeBuildInputs = [
autoPatchelfHook
@@ -38,16 +39,17 @@ rustPlatform.buildRustPackage (finalAttrs: {
buildInputs = [
libGL
xkeyboard_config
libgbm
pango
udev
libinput
pango
sqlite
udev
vulkan-loader
xkeyboard_config
];
runtimeDependencies = [
libglvnd
vulkan-loader
];
checkFlags = [

View File

@@ -2,6 +2,7 @@
lib,
stdenvNoCC,
fetchFromGitHub,
fetchpatch,
nixosTests,
nix-update-script,
php,
@@ -18,6 +19,16 @@ stdenvNoCC.mkDerivation (finalAttrs: {
hash = "sha256-iI9Dyno1s9P9t7IxfDs5gQUl9yFyu2taXvKY0WnF2Q0=";
};
# CVE-2026-56774 / NIXPKGS-2026-2001: scope remember-me session removal to
# the owning user so a session row can only be deleted by its owner.
# Remove this patch once upgraded past 1.2.52.
patches = [
(fetchpatch {
url = "https://github.com/kanboard/kanboard/commit/928c68aa2b7c00092dd71084d329b912e229f3d1.patch";
hash = "sha256-K616dTwAsLJAJMqY+DJjebfi6MV5wSICbd1iy6VynlM=";
})
];
dontBuild = true;
installPhase = ''

View File

@@ -69,6 +69,8 @@ buildNpmPackage.override { inherit nodejs; } rec {
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
# use our own node headers since we skip downloading them
NIX_CFLAGS_COMPILE = "-I${nodejs}/include/node";
# electron-forge's console output is squeezed into one narrow column if unset
CI = "1";
};
postConfigure = ''

View File

@@ -7,7 +7,7 @@
}:
buildGoModule (finalAttrs: {
pname = "ketch";
version = "0.9.4";
version = "0.10.0";
__structuredAttrs = true;
strictDeps = true;
@@ -16,10 +16,10 @@ buildGoModule (finalAttrs: {
owner = "1broseidon";
repo = "ketch";
tag = "v${finalAttrs.version}";
hash = "sha256-Ww92Y+v+u0YttjGPK7mF2mFGWHSuPCdKP6MTd/Jj0LI=";
hash = "sha256-m6KEPbNd13eJsNigJyGGlV2dt0bcZTZcDBCBh/l5rjY=";
};
vendorHash = "sha256-m3IwAYsczsxcVk9fay+f2AsNjmXoPk7NS0abES6b594=";
vendorHash = "sha256-UsTR7+GSuxUQ0aBq8fv1M18LegeDqf/XoiyASQKe5EI=";
ldflags = [
"-s"

View File

@@ -13,14 +13,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "libchewing";
version = "0.12.0";
version = "0.13.0";
src = fetchFromCodeberg {
owner = "chewing";
repo = "libchewing";
tag = "v${finalAttrs.version}";
fetchSubmodules = true;
hash = "sha256-+oSO1HgLMF5+UcY+2NwQjPmspGqaPYuI7mdvSLrhkNg=";
hash = "sha256-1/aamkc66pjAf/jl4pD2rJ9ipFW0bAWjvKg6KtINWuQ=";
};
# ld: unknown option: -version-script
@@ -31,7 +31,7 @@ stdenv.mkDerivation (finalAttrs: {
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (finalAttrs) src;
hash = "sha256-TcNhoGCN+S/Tt3IdysVnGmXNl+hXQoWMppp8yN9N0NY=";
hash = "sha256-1b8GbZ75jBVmvXquOjG2CEcLXg4AthAwQzdO68CjjPs=";
};
nativeBuildInputs = [

View File

@@ -34,7 +34,7 @@
npmHooks,
pkg-config,
metalSupport ? stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64 && !openclSupport,
metalSupport ? stdenv.hostPlatform.isDarwin && !openclSupport,
vulkanSupport ? false,
rpcSupport ? false,
openssl,
@@ -206,9 +206,6 @@ effectiveStdenv.mkDerivation (finalAttrs: {
doCheck = false;
passthru = {
tests = lib.optionalAttrs stdenv.hostPlatform.isDarwin {
metal = llama-cpp.override { metalSupport = true; };
};
updateScript = nix-update-script {
attrPath = "llama-cpp";
extraArgs = [

View File

@@ -244,6 +244,9 @@ stdenv.mkDerivation (finalAttrs: {
cp -r static/node_modules resources/node_modules
'';
# electron-forge's console output is squeezed into one narrow column if unset
env.CI = "1";
yarnBuildScript = "release-electron";
installPhase = ''
@@ -260,7 +263,7 @@ stdenv.mkDerivation (finalAttrs: {
makeWrapper ${lib.getExe electron} $out/bin/logseq \
--add-flags $out/share/logseq/resources/app \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}" \
--set-default LOCAL_GIT_DIRECTORY ${git} \
--inherit-argv0
''

View File

@@ -0,0 +1,296 @@
diff --git a/package-lock.json b/package-lock.json
index 1beb8ee..7160473 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"license": "Apache-2.0",
"dependencies": {
"@simonwep/pickr": "^1.9.1",
- "better-sqlite3": "^12.9.0",
+ "better-sqlite3": "^12.11.1",
"bufferutil": "^4.1.0",
"comlink": "~4.3.1",
"crypto-js": "^4.2.0",
@@ -50,7 +50,7 @@
"css-loader": "^7.1.4",
"css-minimizer-webpack-plugin": "^8.0.0",
"del": "^6.1.1",
- "electron": "40.9.2",
+ "electron": "42.6.0",
"electron-builder": "^26.9.0",
"electron-debug": "^3.2.0",
"electron-devtools-installer": "github:lyswhut/electron-devtools-installer#64596d615c1fc891eefd8aef1dfcb2c87aaadf03",
@@ -210,6 +210,16 @@
"node": ">=14.17.0"
}
},
+ "node_modules/@electron-internal/extract-zip": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.4.tgz",
+ "integrity": "sha512-Zr1Vs7E9tpCNhZHDAbFVXc2gEVCG9RqPDjrno5+bdgB6LRAuvgyMHJut4NCVyYwtAieapMzc3fiQ3CSTi75ARg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=22.12.0"
+ }
+ },
"node_modules/@electron/asar": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz",
@@ -283,25 +293,37 @@
}
},
"node_modules/@electron/get": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz",
- "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.0.0.tgz",
+ "integrity": "sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.1.1",
- "env-paths": "^2.2.0",
- "fs-extra": "^8.1.0",
- "got": "^11.8.5",
+ "env-paths": "^3.0.0",
+ "graceful-fs": "^4.2.11",
"progress": "^2.0.3",
- "semver": "^6.2.0",
+ "semver": "^7.6.3",
"sumchecker": "^3.0.1"
},
"engines": {
- "node": ">=12"
+ "node": ">=22.12.0"
},
"optionalDependencies": {
- "global-agent": "^3.0.0"
+ "undici": "^7.24.4"
+ }
+ },
+ "node_modules/@electron/get/node_modules/env-paths": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
+ "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@electron/notarize": {
@@ -2014,17 +2036,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/yauzl": {
- "version": "2.10.3",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
- "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
@@ -3373,9 +3384,9 @@
"license": "MIT"
},
"node_modules/better-sqlite3": {
- "version": "12.9.0",
- "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.9.0.tgz",
- "integrity": "sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==",
+ "version": "12.11.1",
+ "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz",
+ "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -3383,7 +3394,7 @@
"prebuild-install": "^7.1.1"
},
"engines": {
- "node": "20.x || 22.x || 23.x || 24.x || 25.x"
+ "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x"
}
},
"node_modules/big.js": {
@@ -3632,16 +3643,6 @@
"ieee754": "^1.1.13"
}
},
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -5529,22 +5530,22 @@
}
},
"node_modules/electron": {
- "version": "40.9.2",
- "resolved": "https://registry.npmjs.org/electron/-/electron-40.9.2.tgz",
- "integrity": "sha512-gTLLTlfMyORZDj+03tkxsstQOQlmu6dYl0X8cwlmFb+gMmCM9Gc+rmBGSaCb5KI11IMUWHu4hvKA/spP8oJe+w==",
+ "version": "42.6.0",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-42.6.0.tgz",
+ "integrity": "sha512-axGNgd+yCTg+vi1VEGrQqAj9WVWkePKwbICSAvMiT2eTaxhij9a/xhBHD6rXV8wrlW9ZfJzE5+xg752ImxrmTw==",
"dev": true,
- "hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "@electron/get": "^2.0.0",
- "@types/node": "^24.9.0",
- "extract-zip": "^2.0.1"
+ "@electron-internal/extract-zip": "^1.0.1",
+ "@electron/get": "^5.0.0",
+ "@types/node": "^24.9.0"
},
"bin": {
- "electron": "cli.js"
+ "electron": "cli.js",
+ "install-electron": "install.js"
},
"engines": {
- "node": ">= 12.20.55"
+ "node": ">= 22.12.0"
}
},
"node_modules/electron-builder": {
@@ -6963,27 +6964,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
"node_modules/extsprintf": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz",
@@ -7096,16 +7076,6 @@
"node": ">=0.8.0"
}
},
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
"node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
@@ -7390,21 +7360,6 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
"license": "MIT"
},
- "node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -10819,13 +10774,6 @@
"url": "https://github.com/sponsors/jet2jet"
}
},
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -16252,17 +16200,6 @@
"node": ">=12"
}
},
- "node_modules/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index cc041c3..b656a6b 100644
--- a/package.json
+++ b/package.json
@@ -123,7 +123,7 @@
"css-loader": "^7.1.4",
"css-minimizer-webpack-plugin": "^8.0.0",
"del": "^6.1.1",
- "electron": "40.9.2",
+ "electron": "42.6.0",
"electron-builder": "^26.9.0",
"electron-debug": "^3.2.0",
"electron-devtools-installer": "github:lyswhut/electron-devtools-installer#64596d615c1fc891eefd8aef1dfcb2c87aaadf03",
@@ -167,7 +167,7 @@
},
"dependencies": {
"@simonwep/pickr": "^1.9.1",
- "better-sqlite3": "^12.9.0",
+ "better-sqlite3": "^12.11.1",
"bufferutil": "^4.1.0",
"comlink": "~4.3.1",
"crypto-js": "^4.2.0",

View File

@@ -10,12 +10,12 @@
makeWrapper,
makeDesktopItem,
electron_40,
electron_42,
commandLineArgs ? "",
}:
let
electron = electron_40;
electron = electron_42;
in
buildNpmPackage (finalAttrs: {
pname = "lx-music-desktop";
@@ -56,6 +56,13 @@ buildNpmPackage (finalAttrs: {
(replaceVars ./electron-builder.patch {
electron_version = electron.version;
})
# the upstream repository hasn't released a version with a newer
# electron yet, so we patch `package.json` and the lock file to use
# electron 42. updating better-sqlite3 is also required due to the
# ABI incompatibility between the original one with electron 42, see
# https://github.com/WiseLibs/better-sqlite3/issues/1474
./npm-deps.patch
];
nativeBuildInputs = [
@@ -63,7 +70,7 @@ buildNpmPackage (finalAttrs: {
copyDesktopItems
];
npmDepsHash = "sha256-iIymnYIAE8rFEa8I2nVt2JrMyRiZL5nBS+HfNoDN1Hk=";
npmDepsHash = "sha256-1gizfbnkdG84VxB2MaoGoIEQoydiVHbGeWmy2A03FCI=";
makeCacheWritable = true;
@@ -118,6 +125,13 @@ buildNpmPackage (finalAttrs: {
meta = {
broken = stdenv.hostPlatform.isDarwin;
description = "Music software based on Electron and Vue";
longDescription = ''
Some functionalities (e.g. lyrics window) are broken when lx-music-desktop
runs using a Wayland ozone platform due to Electron's lack of support
for Wayland. If you do need these features, please consider unsetting
`NIXOS_OZONE_WL` and passing `--ozone-platform=x11` from the command line
to restore the expected behavior.
'';
homepage = "https://github.com/lyswhut/lx-music-desktop";
changelog = "https://github.com/lyswhut/lx-music-desktop/releases/tag/v${finalAttrs.version}";
license = lib.licenses.asl20;

View File

@@ -7,11 +7,11 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "instantview";
version = "3.22R0002";
version = "3.24R0004";
src = fetchurl {
url = "https://www.siliconmotion.com/downloads/macOS_InstantView_V${finalAttrs.version}.dmg";
hash = "sha256-PdgX9zCrVYtNbuOCYKVo9cegCG/VY7QXetivVsUltbg=";
hash = "sha256-lozVykKK1edUQlwxNKy/GyMKjsQaXeR9XVoau72Bwhg=";
};
nativeBuildInputs = [ _7zz ];
@@ -19,6 +19,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
dontUnpack = true;
dontConfigure = true;
dontBuild = true;
dontFixup = true;
installPhase = ''
runHook preInstall
@@ -27,8 +28,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
# Extract the DMG using 7zip
7zz x "$src" -oextracted -y
# Move the extracted contents to $out
cp -r extracted/* "$out/Applications/"
cp -r extracted/*.app "$out/Applications/"
runHook postInstall
'';

View File

@@ -1,123 +0,0 @@
{
lib,
stdenv,
fetchYarnDeps,
fetchFromGitHub,
# native
yarn,
yarnConfigHook,
node-gyp,
python3,
srcOnly,
removeReferencesTo,
yarnBuildHook,
makeWrapper,
# buildInputs
nodejs_20,
matrix-sdk-crypto-nodejs,
napi-rs-cli,
}:
let
yarn' = yarn.override {
nodejs = nodejs_20;
};
yarnConfigHook' = yarnConfigHook.override {
nodejs-slim = nodejs_20;
yarn = yarn';
};
yarnBuildHook' = yarnBuildHook.override {
nodejs-slim = nodejs_20;
yarn = yarn';
};
matrix-sdk-crypto-nodejs' = matrix-sdk-crypto-nodejs.override {
nodejs = nodejs_20;
napi-rs-cli = napi-rs-cli.override {
nodejs = nodejs_20;
};
};
nodeSources = srcOnly nodejs_20;
in
stdenv.mkDerivation (finalAttrs: {
pname = "matrix-appservice-discord";
version = "4.0.0";
src = fetchFromGitHub {
owner = "matrix-org";
repo = "matrix-appservice-discord";
tag = "v${finalAttrs.version}";
hash = "sha256-UyRMMbnX4aJVv8oQfgn/rkZT1cRATtcgFj4fXszDKqo=";
};
yarnOfflineCache = fetchYarnDeps {
yarnLock = "${finalAttrs.src}/yarn.lock";
hash = "sha256-s8ictJX65mSU2oxaIuCswfb2flo2RN9a1JZevacN/Ic=";
};
nativeBuildInputs = [
yarnConfigHook'
yarnBuildHook'
nodejs_20
node-gyp
python3
removeReferencesTo
makeWrapper
];
preBuild = ''
cp -r ${matrix-sdk-crypto-nodejs'}/lib/node_modules/@matrix-org ./node_modules
cd ./node_modules/better-sqlite3
npm run build-release --offline --nodedir="${nodeSources}"
find build -type f -exec remove-references-to -t "${nodeSources}" {} \;
cd ../../
'';
# npmHooks.npmInstallHook and yarnInstallHook don't work for this package
# because:
#
# - There is no `bin` key in
# package.json, which instructs it to create a binary file for the package.
# - The build/ directory, containing the compiled `.js` files from some
# doesn't get picked up by `yarn pack`.
installPhase = ''
runHook preInstall
mkdir -p $out/lib/node_modules
mv build $out/lib/node_modules/matrix-appservice-discord
cp -r node_modules $out/lib/node_modules/matrix-appservice-discord
makeWrapper '${nodejs_20}/bin/node' "$out/bin/matrix-appservice-discord" \
--add-flags "$out/lib/node_modules/matrix-appservice-discord/src/discordas.js"
# admin tools wrappers
for toolPath in $out/lib/node_modules/matrix-appservice-discord/tools/*; do
makeWrapper '${nodejs_20}/bin/node' \
"$out/bin/matrix-appservice-discord-$(basename $toolPath .js)" \
--add-flags "$toolPath"
done
runHook postInstall
'';
doCheck = true;
checkPhase = ''
runHook preCheck
# the default 2000ms timeout is sometimes too short on our busy builders
yarn --offline test --timeout 10000
runHook postCheck
'';
meta = {
description = "Bridge between Matrix and Discord";
homepage = "https://github.com/matrix-org/matrix-appservice-discord";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ euxane ];
platforms = lib.platforms.linux;
mainProgram = "matrix-appservice-discord";
};
})

View File

@@ -2,21 +2,21 @@
lib,
buildNpmPackage,
fetchFromGitHub,
nodejs_22,
nodejs_24,
}:
buildNpmPackage.override { nodejs = nodejs_22; } (finalAttrs: {
buildNpmPackage.override { nodejs = nodejs_24; } (finalAttrs: {
pname = "mongosh";
version = "2.8.3";
version = "2.9.2";
src = fetchFromGitHub {
owner = "mongodb-js";
repo = "mongosh";
tag = "v${finalAttrs.version}";
hash = "sha256-CHHGQYJBv1sVo2LT9jxx+c15TU8ecG9R5DVQOA9yG+A=";
hash = "sha256-mwc9Mv8BJgI/7DzUH6QwHsWzgAquB8ehmnElM5+mYuI=";
};
npmDepsHash = "sha256-FlVKJqXiDW3FdBrm2lN2vw+xFkvm7J1FgCEI6rFfR4o=";
npmDepsHash = "sha256-xI+6a0sMuZmij46N5aqsprLLiVaSZifGW8tMq189fww=";
patches = [
./disable-telemetry.patch

View File

@@ -38,7 +38,7 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "mudlet";
version = "4.20.1";
version = "4.22.0";
__structuredAttrs = true;
strictDeps = true;
@@ -48,7 +48,7 @@ stdenv.mkDerivation (finalAttrs: {
repo = "Mudlet";
rev = "Mudlet-${finalAttrs.version}";
fetchSubmodules = true;
hash = "sha256-o3f2ChQ7COql+WEe2diATx7wIR0fOlxkXcGWlL1AYkE=";
hash = "sha256-on0LBf+FY91R4IEDcEM/at+J07MOStc7V1yT+khxVoM=";
};
nativeBuildInputs = [

View File

@@ -26,20 +26,20 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "n8n";
version = "2.27.4";
version = "2.28.6";
src = fetchFromGitHub {
owner = "n8n-io";
repo = "n8n";
tag = "n8n@${finalAttrs.version}";
hash = "sha256-Z8oAetoSJLTCO7UO+DrlSDFAIjLSLND9bQzrcLz0hYg=";
hash = "sha256-xll2dZon+WyJUXaCoel0htwgOGUqzpZvef/tDLTomZQ=";
};
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) pname version src;
pnpm = pnpm_10;
fetcherVersion = 3;
hash = "sha256-xTZlv8YZC8u9pzD/WroduyO2MVtRvZ7ajKTphsHfObs=";
hash = "sha256-SjmKXjxIuRY1uFbFLTMlXd0WW+3cVfu4TU+NoZtEYSo=";
};
nativeBuildInputs = [

View File

@@ -6,13 +6,13 @@
buildGoModule (finalAttrs: {
pname = "nerva";
version = "1.38.0";
version = "1.39.0";
src = fetchFromGitHub {
owner = "praetorian-inc";
repo = "nerva";
tag = "v${finalAttrs.version}";
hash = "sha256-7d6sib2nr1LZty3KRRAhvrOIVQr2KFQTvtoHNmte4Kc=";
hash = "sha256-SdSgBjbxsrnFuHVVa3yewzT9LTh6E2lW1rmZoWftVyg=";
};
vendorHash = "sha256-Z0MSD+1/1VzrJ+pz5x0JvxrCxtJe59ckaTqHK/+TVN8=";

View File

@@ -21,13 +21,13 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "nix-unit";
version = "2.34.0";
version = "2.34.1";
src = fetchFromGitHub {
owner = "nix-community";
repo = "nix-unit";
rev = "v${finalAttrs.version}";
hash = "sha256-vZfRXBDC9FTO2Vpz8TroVMqOYqp+hcVk6Nwx6+kRN1Q=";
hash = "sha256-XUgPlbtvuqxJHqaiVtwwxPxGa4seC/7XqZP2k0m3RXo=";
};
buildInputs = [

View File

@@ -3,6 +3,7 @@ from dataclasses import dataclass
from typing import cast, Optional
from .md import md_escape, md_make_code, Renderer
from .types import AdmonitionStyle
from markdown_it.token import Token
@@ -20,12 +21,16 @@ class Par:
class CommonMarkRenderer(Renderer):
__output__ = "commonmark"
_admonition_style: AdmonitionStyle
_div_fence_sizes: list[int]
_parstack: list[Par]
_link_stack: list[str]
_list_stack: list[List]
def __init__(self, manpage_urls: Mapping[str, str]):
def __init__(self, manpage_urls: Mapping[str, str], admonition_style: AdmonitionStyle = AdmonitionStyle.PLAIN):
super().__init__(manpage_urls)
self._admonition_style = admonition_style
self._div_fence_sizes = [ ]
self._parstack = [ Par("") ]
self._link_stack = []
self._list_stack = []
@@ -43,12 +48,46 @@ class CommonMarkRenderer(Renderer):
self._parstack[-1].continuing = True
return result
def _admonition_open(self, kind: str) -> str:
def _fenced_div_open(self, classes: Sequence[str] = ()) -> str:
fence_size = (
self._div_fence_sizes[-1] + 1
if self._div_fence_sizes
else 3
)
fence = ":" * fence_size
class_refs = [f".{c}" for c in classes]
annotation = (" {" + " ".join(class_refs) + "}") if classes else ""
pbreak = self._maybe_parbreak()
self._enter_block("")
return f"{pbreak}**{kind}:** "
self._div_fence_sizes.append(fence_size)
return f"{pbreak}{fence}{annotation}"
def _fenced_div_close(self) -> str:
fence_size = self._div_fence_sizes.pop()
fence = ":" * fence_size
pbreak = self._maybe_parbreak()
return f"{pbreak}{fence}"
def _admonition_open(self, kind: str) -> str:
match self._admonition_style:
case AdmonitionStyle.PLAIN:
pbreak = self._maybe_parbreak()
self._enter_block("")
return f"{pbreak}**{kind}:** "
case AdmonitionStyle.GFM:
pbreak = self._maybe_parbreak()
lbreak = self._break()
self._enter_block("> ")
return f"{pbreak}> [!{kind}]{lbreak}> "
case AdmonitionStyle.PANDOC:
return self._fenced_div_open(classes=[kind.lower()])
def _admonition_close(self) -> str:
self._leave_block()
match self._admonition_style:
case AdmonitionStyle.PLAIN:
self._leave_block()
case AdmonitionStyle.GFM:
self._leave_block()
case AdmonitionStyle.PANDOC:
return self._fenced_div_close()
return ""
def _indent_raw(self, s: str) -> str:

View File

@@ -579,6 +579,58 @@ def _block_titles(block: str) -> Callable[[markdown_it.MarkdownIt], None]:
return do_add
def _gfm_alerts(md: markdown_it.MarkdownIt) -> None:
_ALERT_PATTERN = re.compile(r"^\[\!(TIP|NOTE|IMPORTANT|WARNING|CAUTION)\][ \t]*(?:\n|$)", re.IGNORECASE)
@dataclasses.dataclass
class Entry:
open: Token
content: Token | None = None
"""
Find blockquote tokens and convert GFM-alert-style blockquotes to admonition tokens.
"""
def gfm_alert(state: markdown_it.rules_core.StateCore) -> None:
stack: list[Entry] = []
size = len(state.tokens)
for i, token in enumerate(state.tokens):
match token.type:
case "blockquote_open":
entry = Entry(token)
# Get the first inline token of the blockquote's first paragraph
if i + 2 < size:
para = state.tokens[i + 1]
inline = state.tokens[i + 2]
if para and para.type == "paragraph_open" and inline and inline.type == "inline":
entry.content = inline
stack.append(entry)
case "blockquote_close":
entry = stack.pop()
if entry.content is None:
continue
m = _ALERT_PATTERN.match(entry.content.content)
if m is None:
continue
# Remove the alert marker from the rendered text.
entry.content.content = entry.content.content[m.end() :]
# Rewrite the enclosing blockquote as an admonition.
entry.open.type = "admonition_open"
entry.open.tag = "div"
entry.open.meta["kind"] = m.group(1).lower()
token.type = "admonition_close"
token.tag = "div"
md.core.ruler.after("block", "github-alerts", gfm_alert)
TR = TypeVar('TR', bound='Renderer')
class Converter(ABC, Generic[TR]):
@@ -626,6 +678,7 @@ class Converter(ABC, Generic[TR]):
self._md.use(_block_attr)
self._md.use(_block_titles("example"))
self._md.use(_block_titles("figure"))
self._md.use(_gfm_alerts)
self._md.enable(["smartquotes", "replacements"])
def _parse(self, src: str) -> list[Token]:

View File

@@ -21,7 +21,7 @@ from .html import HTMLRenderer
from .manpage import ManpageRenderer, man_escape
from .manual_structure import make_xml_id, XrefTarget
from .md import Converter, md_escape, md_make_code
from .types import OptionLoc, Option, RenderedOption, AnchorStyle
from .types import OptionLoc, Option, RenderedOption, AnchorStyle, AdmonitionStyle
def option_is(option: Option, key: str, typ: str) -> Optional[dict[str, str]]:
if key not in option:
@@ -317,18 +317,20 @@ class OptionsCommonMarkRenderer(OptionDocsRestrictions, CommonMarkRenderer):
class CommonMarkConverter(BaseConverter[OptionsCommonMarkRenderer]):
__option_block_separator__ = ""
_admonition_style: AdmonitionStyle
_anchor_style: AnchorStyle
_anchor_prefix: str
def __init__(self, manpage_urls: Mapping[str, str], revision: str, anchor_style: AnchorStyle = AnchorStyle.NONE, anchor_prefix: str = ""):
def __init__(self, manpage_urls: Mapping[str, str], revision: str, anchor_style: AnchorStyle = AnchorStyle.NONE, anchor_prefix: str = "", admonition_style: AdmonitionStyle = AdmonitionStyle.PLAIN):
super().__init__(revision)
self._renderer = OptionsCommonMarkRenderer(manpage_urls)
self._renderer = OptionsCommonMarkRenderer(manpage_urls, admonition_style)
self._admonition_style = admonition_style
self._anchor_style = anchor_style
self._anchor_prefix = anchor_prefix
def _parallel_render_prepare(self) -> Any:
return (self._renderer._manpage_urls, self._revision)
return (self._renderer._manpage_urls, self._revision, self._anchor_style, self._anchor_prefix, self._admonition_style)
@classmethod
def _parallel_render_init_worker(cls, a: Any) -> CommonMarkConverter:
return cls(*a)
@@ -514,6 +516,15 @@ def parse_anchor_style(value: str|AnchorStyle) -> AnchorStyle:
except ValueError:
raise argparse.ArgumentTypeError(f"Invalid value {value}\nExpected one of {', '.join(style.value for style in AnchorStyle)}")
def parse_admonition_style(value: str|AdmonitionStyle) -> AdmonitionStyle:
if isinstance(value, AdmonitionStyle):
# Used by `argparse.add_argument`'s `default`
return value
try:
return AdmonitionStyle(value.lower())
except ValueError:
raise argparse.ArgumentTypeError(f"Invalid value {value}\nExpected one of {', '.join(style.value for style in AdmonitionStyle)}")
def _build_cli_commonmark(p: argparse.ArgumentParser) -> None:
p.add_argument('--manpage-urls', required=True)
p.add_argument('--revision', required=True)
@@ -529,6 +540,13 @@ def _build_cli_commonmark(p: argparse.ArgumentParser) -> None:
default="",
help="(default: no prefix) String to prepend to anchor ids. Not used when anchor style is none."
)
p.add_argument(
'--admonition-style',
required=False,
default=AdmonitionStyle.PLAIN.value,
choices = [style.value for style in AdmonitionStyle],
help = "(default: %(default)s) Admonition style to use for notes, warnings, etc. \nOnly plain is standard CommonMark."
)
p.add_argument("infile")
p.add_argument("outfile")
@@ -566,7 +584,9 @@ def _run_cli_commonmark(args: argparse.Namespace) -> None:
md = CommonMarkConverter(json.load(manpage_urls),
revision = args.revision,
anchor_style = parse_anchor_style(args.anchor_style),
anchor_prefix = args.anchor_prefix)
anchor_prefix = args.anchor_prefix,
admonition_style = parse_admonition_style(args.admonition_style),
)
with open(args.infile, 'r') as f:
md.add_options(json.load(f))

View File

@@ -17,3 +17,8 @@ RenderFn = Callable[[Token, Sequence[Token], int], str]
class AnchorStyle(Enum):
NONE = "none"
LEGACY = "legacy"
class AdmonitionStyle(Enum):
PLAIN = "plain"
PANDOC = "pandoc"
GFM = "gfm"

View File

@@ -1,4 +1,10 @@
sample1 = """\
> [!NOTE]
> This is a *GFM* note.
>
> > [!caution]
> > This is a **nested** GFM alert.
:::: {.warning}
foo
::: {.note}

View File

@@ -0,0 +1,17 @@
{
"services.frobnicator.types.<name>.enable": {
"declarations": [
"nixos/modules/services/frobnicator.nix"
],
"description": "Whether to enable the frobnication of this (`<name>`) type.\n::: {.important}\n\nAdmonition.\n\n:::",
"loc": [
"services",
"frobnicator",
"types",
"<name>",
"enable"
],
"readOnly": false,
"type": "boolean"
}
}

View File

@@ -0,0 +1,16 @@
## services\.frobnicator\.types\.\<name>\.enable
Whether to enable the frobnication of this (` <name> `) type\.
> [!Important]
> Admonition\.
*Type:*
boolean
*Declared by:*
- [\<nixpkgs/nixos/modules/services/frobnicator\.nix>](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/frobnicator.nix)

View File

@@ -0,0 +1,19 @@
## services\.frobnicator\.types\.\<name>\.enable
Whether to enable the frobnication of this (` <name> `) type\.
::: {.important}
Admonition\.
:::
*Type:*
boolean
*Declared by:*
- [\<nixpkgs/nixos/modules/services/frobnicator\.nix>](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/frobnicator.nix)

View File

@@ -0,0 +1,15 @@
## services\.frobnicator\.types\.\<name>\.enable
Whether to enable the frobnication of this (` <name> `) type\.
**Important:** Admonition\.
*Type:*
boolean
*Declared by:*
- [\<nixpkgs/nixos/modules/services/frobnicator\.nix>](https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/frobnicator.nix)

View File

@@ -45,6 +45,18 @@ f
def test_full() -> None:
c = Converter({ 'man(1)': 'http://example.org' })
assert c._render(sample1) == """\
[NOTE]
====
This is a __GFM__ note{zwsp}.
[CAUTION]
=====
This is a **nested** GFM alert{zwsp}.
=====
====
[WARNING]
====
foo

View File

@@ -1,3 +1,5 @@
import pytest
import nixos_render_docs as nrd
from sample_md import sample1
@@ -6,9 +8,14 @@ from typing import Mapping
class Converter(nrd.md.Converter[nrd.commonmark.CommonMarkRenderer]):
def __init__(self, manpage_urls: Mapping[str, str]):
def __init__(
self,
manpage_urls: Mapping[str, str],
admonition_style: nrd.types.AdmonitionStyle = nrd.types.AdmonitionStyle.PLAIN,
):
super().__init__()
self._renderer = nrd.commonmark.CommonMarkRenderer(manpage_urls)
self._renderer = nrd.commonmark.CommonMarkRenderer(manpage_urls, admonition_style)
# NOTE: in these tests we represent trailing spaces by ` ` and replace them with real space later,
# since a number of editors will strip trailing whitespace on save and that would break the tests.
@@ -24,9 +31,132 @@ def test_indented_fence() -> None:
""".replace(' ', ' ')
assert c._render(s) == s
@pytest.mark.parametrize(
("style", "expected"),
[
(
nrd.types.AdmonitionStyle.PLAIN,
"""\
**Warning:** foo
**Note:** nested
**Important:** nested GFM
:::
**Caution:** GFM caution
**Important:** nested fenced
**Note:** nested GFM\
""",
),
(
nrd.types.AdmonitionStyle.GFM,
f"""\
> [!Warning]
> foo
>{" "}
> > [!Note]
> > nested
> [!Important]
> nested GFM
:::
> [!Caution]
> GFM caution
>{" "}
> > [!Important]
> > nested fenced
>{" "}
> > [!Note]
> > nested GFM\
""",
),
(
nrd.types.AdmonitionStyle.PANDOC,
"""\
::: {.warning}
foo
:::: {.note}
nested
::::
:::
::: {.important}
nested GFM
:::
:::
::: {.caution}
GFM caution
:::: {.important}
nested fenced
::::
:::: {.note}
nested GFM
::::
:::""",
),
],
)
def test_admonition_styles(
style: nrd.types.AdmonitionStyle,
expected: str,
) -> None:
c = Converter({}, admonition_style=style)
assert c._render("""\
:::: {.warning}
foo
::: {.note}
nested
:::
::::
> [!important]
> nested GFM
:::
> [!caution]
> GFM caution
>
> ::: {.important}
> nested fenced
> :::
>
> > [!note]
> > nested GFM
""") == expected
def test_full() -> None:
c = Converter({ 'man(1)': 'http://example.org' })
assert c._render(sample1) == """\
**Note:** This is a *GFM* note\\.
**Caution:** This is a **nested** GFM alert\\.
**Warning:** foo
**Note:** nested

View File

@@ -149,6 +149,14 @@ def test_footnotes() -> None:
def test_full() -> None:
c = Converter({ 'man(1)': 'http://example.org' }, {})
assert c._render(sample1) == unpretty("""
<div class="note">
<h3 class="title">Note</h3>
<p>This is a <span class="emphasis"><em>GFM</em></span> note.</p>
<div class="caution">
<h3 class="title">Caution</h3>
<p>This is a <span class="strong"><strong>nested</strong></span> GFM alert.</p>
</div>
</div>
<div class="warning">
<h3 class="title">Warning</h3>
<p>foo</p>

View File

@@ -41,6 +41,18 @@ def test_full() -> None:
assert c._render(sample1) == """\
.sp
.RS 4
\\fBNote\\fP
.br
This is a \\fIGFM\\fR note\\&.
.sp
.RS 4
\\fBCaution\\fP
.br
This is a \\fBnested\\fR GFM alert\\&.
.RE
.RE
.sp
.RS 4
\\fBWarning\\fP
.br
foo

View File

@@ -39,3 +39,31 @@ def test_options_commonmark_legacy_anchors() -> None:
c.add_options(opts)
s = c.finalize()
assert s == expected
@pytest.mark.parametrize(
("style", "expected_file"),
[
(nixos_render_docs.types.AdmonitionStyle.PLAIN,
"tests/sample_options_admonition_plain.md"),
(nixos_render_docs.types.AdmonitionStyle.GFM,
"tests/sample_options_admonition_gfm.md"),
(nixos_render_docs.types.AdmonitionStyle.PANDOC,
"tests/sample_options_admonition_pandoc.md"),
],
)
def test_options_commonmark_admonition_style(style, expected_file):
c = nixos_render_docs.options.CommonMarkConverter(
{},
"local",
admonition_style=style,
)
with Path("tests/sample_options_admonition.json").open() as f:
opts = json.load(f)
with Path(expected_file).open() as f:
expected = f.read()
c.add_options(opts)
assert c.finalize() == expected

View File

@@ -429,6 +429,90 @@ def test_admonitions() -> None:
children=None, content='', markup=':::', info='', meta={}, block=True, hidden=False)
]
@pytest.mark.parametrize(
("alert", "kind"),
[
("NOTE", "note"),
("TIP", "tip"),
("IMPORTANT", "important"),
("WARNING", "warning"),
("CAUTION", "caution"),
],
)
def test_gfm_alert_kinds(alert: str, kind: str) -> None:
c = Converter({})
assert c._parse(f"> [!{alert}]\n> body") == [
Token(type='admonition_open', tag='div', markup='>', meta={'kind': kind}, nesting=1, map=[0, 2], block=True),
Token(type='paragraph_open', tag='p', nesting=1, map=[0, 2], level=1, block=True),
Token(type='inline', tag='', nesting=0, map=[0, 2], level=2, block=True, content='body', children=[
Token(type='text', tag='', nesting=0, content='body'),
]),
Token(type='paragraph_close', tag='p', nesting=-1, level=1, block=True),
Token(type='admonition_close', tag='div', nesting=-1, markup='>', block=True)
]
def test_gfm_alert_basic_structure_preserved() -> None:
c = Converter({})
tokens = c._parse("> [!NOTE]\n> body text")
assert any(t.type == "inline" for t in tokens)
@pytest.mark.parametrize(
"md",
[
"> # [!NOTE]",
"> - [!NOTE]",
"> - [!WARNING] body",
"> ### [!TIP]",
"> ```\n> [!NOTE]\n> ```",
"> This is not [!NOTE] an alert",
"> [!NOTE] with trailing text is ignored",
],
)
def test_gfm_alert_rejected(md: str) -> None:
c = Converter({})
tokens = c._parse(md)
assert all(t.type != "admonition_open" for t in tokens)
assert tokens[0].type == "blockquote_open"
assert tokens[-1].type == "blockquote_close"
def test_gfm_alert_multi_paragraph() -> None:
c = Converter({})
assert c._parse(
"> [!NOTE]\n"
"> line 1\n"
">\n"
"> line 2"
) == [
Token(type='admonition_open', tag='div', markup='>', meta={'kind': 'note'}, nesting=1, map=[0, 4], block=True),
Token(type='paragraph_open', tag='p', nesting=1, map=[0, 2], level=1, block=True),
Token(type='inline', tag='', nesting=0, map=[0, 2], level=2, block=True, content='line 1', children=[
Token(type='text', tag='', nesting=0, content='line 1'),
]),
Token(type='paragraph_close', tag='p', nesting=-1, level=1, block=True),
Token(type='paragraph_open', tag='p', nesting=1, map=[3, 4], level=1, block=True),
Token(type='inline', tag='', nesting=0, map=[3, 4], level=2, block=True, content='line 2', children=[
Token(type='text', tag='', nesting=0, content='line 2')
]),
Token(type='paragraph_close', tag='p', nesting=-1, level=1, block=True),
Token(type='admonition_close', tag='div', markup='>', block=True, nesting=-1),
]
def test_gfm_alert_whitespace_tolerant() -> None:
c = Converter({})
tokens = c._parse("> [!NOTE] \n> body")
assert tokens[0].type == "admonition_open"
assert tokens[0].meta["kind"] == "note"
def test_gfm_alert_empty_body_allowed() -> None:
c = Converter({})
assert c._parse("> [!NOTE]\n>") == [
Token(type='admonition_open', tag='div', markup='>', meta={'kind': 'note'}, nesting=1, map=[0, 2], block=True),
Token(type='paragraph_open', tag='p', nesting=1, map=[0, 1], level=1, block=True),
Token(type='inline', tag='', nesting=0, map=[0, 1], level=2, block=True, children=[]),
Token(type='paragraph_close', tag='p', nesting=-1, level=1, block=True),
Token(type='admonition_close', tag='div', markup='>', nesting=-1, block=True),
]
def test_example() -> None:
c = Converter({})
assert c._parse("::: {.example}\n# foo") == [

View File

@@ -2,6 +2,7 @@
lib,
stdenv,
fetchurl,
removeReferencesTo,
fstrm,
libevent,
openssl,
@@ -32,15 +33,26 @@
stdenv.mkDerivation (finalAttrs: {
pname = "nsd";
version = "4.14.3";
version = "4.15.0";
src = fetchurl {
url = "https://www.nlnetlabs.nl/downloads/nsd/nsd-${finalAttrs.version}.tar.gz";
hash = "sha256-limtZNnBsBm74iKW1RSNeuZfWIziZaZCR1B0DwUrsSs=";
hash = "sha256-hPG+4ukqna20HZXsxkET5NPe+GIk3ndM2SADrdjE9XA=";
};
patches = [
# https://github.com/NLnetLabs/nsd/pull/495 -- Without this patch, the build
# breaks with { openssl = libressl; bind8Stats = true; }. The patch will be
# included in 4.15.1, so we can drop it here on the next update.
(fetchurl {
url = "https://github.com/NLnetLabs/nsd/commit/15cf8736e3bfa0fd8f426b13637c44e638fa0d40.patch";
hash = "sha256-JVazJ83U80ASZypjic0epE92PZd3F1yi8UU6EapdW5U=";
})
];
nativeBuildInputs = [
pkg-config
removeReferencesTo
]
++ lib.optionals withDnstap [ protobuf ];
@@ -57,12 +69,8 @@ stdenv.mkDerivation (finalAttrs: {
enableParallelBuilding = true;
# TODO: prePatch doesn't actually get executed because patchPhase is overridden
prePatch = ''
substituteInPlace nsd-control-setup.sh.in --replace openssl ${openssl}/bin/openssl
'';
patchPhase = ''
# Prevent the install script from copying nsd.conf.sample into /etc/nsd.
postPatch = ''
sed 's@$(INSTALL_DATA) nsd.conf.sample $(DESTDIR)$(nsdconfigfile).sample@@g' -i Makefile.in
'';
@@ -90,6 +98,10 @@ stdenv.mkDerivation (finalAttrs: {
"--with-configdir=etc/nsd"
];
postFixup = ''
find "$out" -type f -exec remove-references-to -t ${openssl.dev} -t ${libevent.dev} '{}' +
'';
passthru.tests = {
inherit (nixosTests) nsd;
};

View File

@@ -2,23 +2,24 @@
stdenv,
lib,
fetchFromGitHub,
cmake,
qt6Packages,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "openfortivpn-webview-qt";
version = "1.2.3";
version = "1.3.0";
src = fetchFromGitHub {
owner = "gm-vm";
repo = "openfortivpn-webview";
rev = "v${finalAttrs.version}-electron";
hash = "sha256-jGDCFdqRfnYwUgVs3KO1pDr52JgkYVRHi2KvABaZFl4=";
rev = "v${finalAttrs.version}-qt";
hash = "sha256-TohrOgLzvxmUsRVV36XHgE9ul38CjU/qKF+LZOZQieE=";
};
sourceRoot = "${finalAttrs.src.name}/openfortivpn-webview-qt";
nativeBuildInputs = [
cmake
qt6Packages.wrapQtAppsHook
qt6Packages.qmake
];
buildInputs = [ qt6Packages.qtwebengine ];
installPhase = ''

View File

@@ -6,7 +6,6 @@
cmake,
argtable,
enet,
git,
libconfuse,
libnatpmp,
libepoxy,
@@ -18,7 +17,8 @@
SDL2_mixer,
unzip,
zlib,
withRemix ? true,
nix-update-script,
versionCheckHook,
}:
let
@@ -30,25 +30,42 @@ let
url = "https://www.omf2097.com/pub/files/omf/openomf-icons.zip";
hash = "sha256-8LWmrkY3ZiXcuVe0Zj90RQFUTwM27dJ4ev9TiBGoVk0=";
};
remix = fetchurl {
url = "https://github.com/omf2097/openomf/releases/download/0.8.0/ARENA2.ogg";
hash = "sha256-jOIzDaIwQDlwCaPrRZdG5Y0g7bWKwc38mPKP030PGb4=";
musicRemixes = fetchurl {
url = "https://github.com/omf2097/openomf-music-mod/releases/download/1.0/openomf-mods-1.0.zip";
hash = "sha256-uiaM6n+dDcTeBNNnypEWXPNG8Xac1JQXCTfVkORfvi0=";
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "openomf";
version = "0.8.5";
version = "0.8.6";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "omf2097";
repo = "openomf";
tag = finalAttrs.version;
hash = "sha256-5X8drQKMwYZ5M/i7hxyI25AysQGedQ5BLEYcNXWHgNk=";
hash = "sha256-KzT2leU52nxUIsuiVM5soWmi+x1LStdxY5JLoCkSSb8=";
};
postPatch = ''
# TODO: Take this upstream
substituteInPlace cmake-scripts/version.cmake \
--replace-fail "set(VERSION_MAJOR 0)" "set(VERSION_MAJOR ${lib.versions.major finalAttrs.version})" \
--replace-fail "set(VERSION_MINOR 0)" "set(VERSION_MINOR ${lib.versions.minor finalAttrs.version})" \
--replace-fail "set(VERSION_PATCH 0)" "set(VERSION_PATCH ${lib.versions.patch finalAttrs.version})" \
--replace-fail "set(VERSION_LABEL)" "set(VERSION_LABEL)
return()"
substituteInPlace src/resources/resource_paths.c \
--replace-fail \
"/usr/local/share/games:/usr/share/games:/usr/local/share:/usr/share" \
"$out/share/games"
'';
nativeBuildInputs = [
cmake
git
unzip
];
@@ -69,20 +86,39 @@ stdenv.mkDerivation (finalAttrs: {
postInstall = ''
mkdir -p $out/share/icons/hicolor/256x256/apps
unzip -j ${assets} -d $out/share/games/openomf
unzip -j ${assets} -d $out/share/games/openomf/resources
unzip ${musicRemixes} -d $out/share/games/openomf/mods
unzip -p ${icons} omf-logo/omf-256x256.png > $out/share/icons/hicolor/256x256/apps/org.openomf.OpenOMF.png
install -Dm644 $src/resources/flatpak/org.openomf.OpenOMF.desktop $out/share/applications/org.openomf.OpenOMF.desktop
''
+ lib.optionalString withRemix ''
ln -s ${remix} $out/share/games/openomf/ARENA2.ogg
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p $out/resources
ln -s $out/share/games/openomf/* $out/resources
'';
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
passthru.updateScript = nix-update-script { };
meta = {
description = "One Must Fall 2097 Remake";
longDescription = ''
OpenOMF is an open-source remake of the 1994 DOS fighting game One Must
Fall 2097 by Diversions Entertainment. It reimplements the original
engine from scratch, uses the original (now freeware) game assets, and
adds modern conveniences such as online netplay.
Includes remixed music mod. To add other mods: drop its .zip file
into the user mods directory as-is; it does not need to be extracted.
The user mods directory is <state>/mods, where <state> is resolved at
launch in the following order.
1. $OPENOMF_STATE_PATH, if set
2. $XDG_STATE_HOME, if set
(e.g. ~/.local/state, giving ~/.local/state/mods)
3. SDL's preference path, ~/.local/share/OpenOMF/mods
'';
homepage = "https://www.openomf.org";
changelog = "https://github.com/omf2097/openomf/releases/tag/${finalAttrs.version}/CHANGELOG.md";
license = lib.licenses.mit;

View File

@@ -5,9 +5,9 @@
},
"osquery": {
"fetchSubmodules": true,
"hash": "sha256-m66JfsC1+YU1k3BKEwHx6jmqpRleaqP6f8M/NXJU8dg=",
"hash": "sha256-UeA3xnaNkOLFmNq4mgZM4f2BX0cidtantaSxgy/ahlk=",
"owner": "osquery",
"repo": "osquery",
"rev": "5.23.0"
"rev": "5.23.1"
}
}

View File

@@ -16,7 +16,7 @@
stdenv.mkDerivation (finalAttrs: {
pname = "parla";
version = "0.5.8";
version = "0.6.0";
__structuredAttrs = true;
strictDeps = true;
@@ -24,7 +24,7 @@ stdenv.mkDerivation (finalAttrs: {
owner = "trufae";
repo = "parla";
tag = finalAttrs.version;
hash = "sha256-R+7+UfBpBYjMmITFy0hJ+Be5QQJSxQYU9W7d5sQ37lY=";
hash = "sha256-UnLZQ71M1yMpoYNbMdoRq+dmMFr2A/pk7GjMXtSChkY=";
};
nativeBuildInputs = [

View File

@@ -17,14 +17,14 @@ rustPlatform.buildRustPackage (finalAttrs: {
__structuredAttrs = true;
pname = "pijul";
version = "1.0.0-beta.14";
version = "1.0.0-beta.18";
src = fetchCrate {
inherit (finalAttrs) version pname;
hash = "sha256-Ex8fCIcif2lmZ3ytLARwgGzEeq6GB2NDvwd96niDKbQ=";
hash = "sha256-vU41JiuxB6Bsi88st/tkt02054oN3HEN52pnLu5hMA4=";
};
cargoHash = "sha256-yPzDzfD+QdhAXdyvzDV1z9HDe1mwF9cRCsliejr8H88=";
cargoHash = "sha256-Ach8wLBhZ3pA5+m910Gt+oftEaO3Mu/ii+bxgnla0ak=";
# Tests require a TTY, which the Nix sandbox does not provide.
doCheck = false;

View File

@@ -14,16 +14,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "pixi";
version = "0.71.2";
version = "0.72.1";
src = fetchFromGitHub {
owner = "prefix-dev";
repo = "pixi";
tag = "v${finalAttrs.version}";
hash = "sha256-zpeAJdvT5FXz0DLw/OuN3ejTUc/SPhmHSK1A4QB5JKs=";
hash = "sha256-+6qMOJFFzOJyAoa20yYaS0tjBW0A+dNgZ4/ABYHSx60=";
};
cargoHash = "sha256-KNnSwSPDrcps9uWYUhQYWCjuZukMzEz9UjA5kO/gxTM=";
cargoHash = "sha256-7cW+HIZ15ziD2fVrOtA5oY4g6K9V6SbvNt9HGs5iGPU=";
nativeBuildInputs = [
pkg-config

View File

@@ -11,7 +11,7 @@
mesa-demos,
netcat-gnu,
p7zip,
python3,
python312,
unzip,
wget,
wine,
@@ -70,7 +70,7 @@ let
libGL
];
python = python3.withPackages (
python = python312.withPackages (
ps: with ps; [
wxpython
setuptools

View File

@@ -8,18 +8,17 @@
stdenv,
wrapGAppsHook3,
libjack2,
iconConvTools,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "praat";
version = "6.4.65";
version = "6.6.30";
src = fetchFromGitHub {
owner = "praat";
repo = "praat.github.io";
tag = "v${finalAttrs.version}";
hash = "sha256-v4cAFLSJllrNgTm6ewR40HYvdi8a1bZcEBz/BTdFsxA=";
hash = "sha256-D6XnrN+pvUpgUcgyU8pEtuOx2cIMoSm8Px0+f5xi1aM=";
};
strictDeps = true;
@@ -27,7 +26,6 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
pkg-config
wrapGAppsHook3
iconConvTools
];
buildInputs = [
@@ -41,27 +39,15 @@ stdenv.mkDerivation (finalAttrs: {
"AR=${stdenv.cc.targetPrefix}ar"
];
configurePhase = ''
runHook preConfigure
cp makefiles/makefile.defs.linux.pulse-gcc makefile.defs
runHook postConfigure
'';
installPhase = ''
runHook preInstall
install -Dt $out/bin praat
install -Dm444 main/praat.desktop -t $out/share/applications
icoFileToHiColorTheme main/praat.ico praat $out
install -Dm444 main/praat-480.svg $out/share/icons/hicolor/scalable/apps/praat.svg
runHook postInstall
'';
buildFlags = [ "PRAAT_AUDIO=pulse" ];
installFlags = [ "PREFIX=${placeholder "out"}" ];
enableParallelBuilding = true;
postInstall = ''
mv $out/share/applications/org.praat.Praat.desktop $out/share/applications/praat.desktop
'';
meta = {
description = "Doing phonetics by computer";
mainProgram = "praat";

View File

@@ -14,14 +14,14 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "radicle-ci-broker";
version = "0.29.0";
version = "0.30.0";
src = fetchFromRadicle {
seed = "seed.radicle.dev";
repo = "zwTxygwuz5LDGBq255RA2CbNGrz8";
node = "z6MkgEMYod7Hxfy9qCvDv5hYHkZ4ciWmLFgfvm3Wn1b2w2FV";
tag = "v${finalAttrs.version}";
hash = "sha256-QivsYWg88dyS3dxeMvXojRbxFyDAEpKkHZzcY85Lwjo=";
hash = "sha256-30+s//C9uMpGgA976RRduHmnmF6YEYmmG+V5P/1TYhA=";
leaveDotGit = true;
postFetch = ''
git -C $out rev-parse --short HEAD > $out/.git_head
@@ -29,7 +29,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
'';
};
cargoHash = "sha256-o2h+XDKt7611j8PtTIyio7lJyc2VioFINb69mW/sxEk=";
cargoHash = "sha256-9DzdeJcjl8IpmDR+kXdbEHrGi/5e9P26HsZJ9OPZRSA=";
postPatch = ''
substituteInPlace build.rs \

View File

@@ -7,10 +7,10 @@
}:
let
pname = "remnote";
version = "1.26.20";
version = "1.26.30";
src = fetchurl {
url = "https://download2.remnote.io/remnote-desktop2/RemNote-${version}.AppImage";
hash = "sha256-3/gb/7LO18exAmFYzzfJM7lCbMPrVqCcD32LfkVIO5g=";
hash = "sha256-GNUoyor7P3icfHurlwttn+TyAhiOvjYhFckMCiNW/Mk=";
};
appimageContents = appimageTools.extract { inherit pname version src; };
in

View File

@@ -21,13 +21,13 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "rocketchat-desktop";
version = "4.15.0";
version = "4.15.2";
src = fetchFromGitHub {
owner = "RocketChat";
repo = "Rocket.Chat.Electron";
tag = finalAttrs.version;
hash = "sha256-2ko2medsG0C6uq8Lp7ej2RgEgA7OIDsVlMG2BD1ENcM=";
hash = "sha256-wme3RKGaHuoOf7yyXH3PZ/0xL73LqS9rPqL8IcxyAkA=";
};
patches = [
@@ -42,7 +42,7 @@ stdenv.mkDerivation (finalAttrs: {
offlineCache = yarn-berry.fetchYarnBerryDeps {
inherit (finalAttrs) src missingHashes patches;
hash = "sha256-WfIY3kCVsL7rXbXiH7OTuiIZmGs7itdK2DG4onua3Bc=";
hash = "sha256-XYfC5K7oXVjxP6Ndlc3qYb47Zh3GnwPx7c4+vBiA2AI=";
};
nativeBuildInputs = [

View File

@@ -191,6 +191,9 @@ stdenv.mkDerivation (finalAttrs: {
env = {
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
# electron-forge's console output is squeezed into one narrow column if unset
CI = "1";
# on Darwin, cmake uses find_library to locate R instead of using the PATH
NIX_LDFLAGS = "-L${R}/lib/R/lib";

View File

@@ -10,15 +10,15 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "shen-sbcl";
version = "41.1";
version = "41.2";
src = fetchzip {
url = "https://www.shenlanguage.org/Download/S${finalAttrs.version}.zip";
hash = "sha256-v/hlP23yfpkpFEDCTKYoxeMJbfR2qVF9LFUkqsFwo6g=";
url = "https://shenlanguage.org/Download/S${finalAttrs.version}.zip";
hash = "sha256-hgO/g0XefSXn5pjiV5LzGmoZ8nsqmZcyZpK6nbcE0es=";
};
sourceRoot = "${finalAttrs.src.name}/S41";
nativeBuildInputs = [ sbcl ];
strictDeps = true;
dontStrip = true; # necessary to prevent runtime errors with sbcl
buildPhase = ''
@@ -45,15 +45,11 @@ stdenvNoCC.mkDerivation (finalAttrs: {
# remove interactive prompts during image creation
# shen/tk requires further configuration and isn't supported by default
substituteInPlace Lib/install.shen \
--replace-fail '(y-or-n? "install standard library?")' '${
if installStandardLibrary then "true" else "false"
}' \
--replace-fail '(y-or-n? "install concurrency? (required for Shen/tk)")' '${
if installConcurrency then "true" else "false"
}' \
--replace-fail '(y-or-n? "install standard library?")' '${lib.boolToString installStandardLibrary}' \
--replace-fail '(y-or-n? "install concurrency? (required for Shen/tk)")' '${lib.boolToString installConcurrency}' \
--replace-fail '(y-or-n? "install Shen/tk + IDE?")' 'false' \
--replace-fail '(y-or-n? "install THORN?")' '${if installThorn then "true" else "false"}' \
--replace-fail '(y-or-n? "install Logic Lab?")' '${if installLogicLab then "true" else "false"}'
--replace-fail '(y-or-n? "install THORN?")' '${lib.boolToString installThorn}' \
--replace-fail '(y-or-n? "install Logic Lab?")' '${lib.boolToString installLogicLab}'
'';
meta = {

View File

@@ -7,14 +7,14 @@
python3.pkgs.buildPythonApplication (finalAttrs: {
pname = "snmpen";
version = "1.1.3";
version = "1.1.4";
pyproject = true;
src = fetchFromGitHub {
owner = "fabaff";
repo = "snmpen";
tag = finalAttrs.version;
hash = "sha256-XJP+f5Ahizxgk80B0896sbE6JeNB0Bm7aafwJsFaHYY=";
hash = "sha256-4/QLPq4td2o17lIhktl5aVKz5esWibVoVm8OdVIxWmM=";
};
build-system = with python3.pkgs; [ hatchling ];

View File

@@ -0,0 +1,36 @@
{
lib,
rustPlatform,
fetchFromGitHub,
nix-update-script,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "stash-clipboard";
version = "0.4.0";
src = fetchFromGitHub {
owner = "NotAShelf";
repo = "stash";
tag = "v${finalAttrs.version}";
hash = "sha256-L5UfPKzdU8qQIyXSCMglLhv22J7xInxg3NNKCLkxszM=";
};
cargoHash = "sha256-iXL3G1H8tNS1oPAoEvvx7qwWUef95NBU3dwlEe+34zw=";
__structuredAttrs = true;
passthru.updateScript = nix-update-script { };
meta = {
description = "Wayland clipboard manager with fast persistent history and multi-media support";
homepage = "https://github.com/NotAShelf/stash";
changelog = "https://github.com/NotAShelf/stash/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mpl20;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [
NotAShelf
fazzi
];
mainProgram = "stash";
};
})

View File

@@ -72,6 +72,9 @@ stdenv.mkDerivation (finalAttrs: {
env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
# electron-forge's console output is squeezed into one narrow column if unset
env.CI = "1";
buildPhase = ''
runHook preBuild

View File

@@ -19,6 +19,7 @@
glslang,
libogg,
makeBinaryWrapper,
gettext,
# Runtime depends
sdl3,
@@ -29,19 +30,20 @@
zlib,
zstd,
spirv-cross,
libunibreak,
gamemodeSupport ? stdenv.hostPlatform.isLinux,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "taisei";
version = "1.4.4";
version = "1.4.5";
src = fetchFromGitHub {
owner = "taisei-project";
repo = "taisei";
tag = "v${finalAttrs.version}";
hash = "sha256-Cs66kyNSVjUZUH+ddZGjFwSUQtwqX4uuGQh+ZLv6N6o=";
hash = "sha256-xjEfSrtxZBBWUU8nv0fyNAofHSGVTeO3CBR/BhKSGHg=";
fetchSubmodules = true;
};
@@ -51,11 +53,11 @@ stdenv.mkDerivation (finalAttrs: {
ninja
pkg-config
python3Packages.python
python3Packages.zstandard
shaderc
makeWrapper
makeBinaryWrapper
cmake
gettext
];
buildInputs = [
@@ -70,6 +72,7 @@ stdenv.mkDerivation (finalAttrs: {
openssl
mimalloc
libogg
libunibreak
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
glslang
@@ -81,7 +84,6 @@ stdenv.mkDerivation (finalAttrs: {
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin " -Dsincos=__builtin_sincos";
mesonFlags = [
(lib.mesonEnable "vfs_zip" false)
(lib.mesonEnable "shader_transpiler_dxbc" false)
(lib.mesonEnable "package_data" false)
(lib.mesonBool "b_lto" false)

View File

@@ -9,7 +9,7 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "tombi";
version = "1.1.7";
version = "1.2.0";
__structuredAttrs = true;
@@ -17,7 +17,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
owner = "tombi-toml";
repo = "tombi";
tag = "v${finalAttrs.version}";
hash = "sha256-Pm+OMtVd0zSPiE56N5WjpF8mM5pft+jVEQJufqiTkG8=";
hash = "sha256-0ACGYRexG39FG5DzcayEUdsF1JvSPbzJq4m9I1ZWnSI=";
};
# Tests relies on the presence of network

View File

@@ -45,6 +45,8 @@ lib.extendMkDerivation {
RossSmyth
];
license = lib.map (lib.flip lib.getAttr lib.licensesSpdx) license;
# Sending a bunch of trivial jobs to Hydra is not that great.
hydraPlatforms = [ ];
}
// lib.optionalAttrs (homepage != null) { inherit homepage; };
};

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@
installShellFiles,
makeBinaryWrapper,
opentxl,
jre,
jre_headless,
}:
let
versions = lib.importJSON ./versions.json;
@@ -112,7 +112,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
done
# Create wrappers
for file in *.jar; do
makeWrapper ${lib.getExe jre} "$out/bin/''${file%.jar}" \
makeWrapper ${lib.getExe jre_headless} "$out/bin/''${file%.jar}" \
--add-flags "-jar $out/share/java/$file"
done
popd

View File

@@ -7,16 +7,16 @@
buildGoModule (finalAttrs: {
pname = "vacuum-go";
version = "0.29.7";
version = "0.29.9";
src = fetchFromGitHub {
owner = "daveshanley";
repo = "vacuum";
tag = "v${finalAttrs.version}";
hash = "sha256-pRTR+6L0C5GQwT6ce11Bq0Pgxvh1zS/NKY/NSmUGhdU=";
hash = "sha256-dcc29hbllJqEI9Qv3UnLVEHfzWF0CQYalKCyUlCBsEA=";
};
vendorHash = "sha256-NSSXFBOAFfavdSblrs3hTHiCTvOD09bIxc+jV4awTqs=";
vendorHash = "sha256-/0dAwcg3s5dTu97msrnwuOWjeCbmYJqxcldC2xLm3y0=";
env.CGO_ENABLED = 0;
ldflags = [

View File

@@ -10,13 +10,13 @@
buildGoModule (finalAttrs: {
pname = "vcluster";
version = "0.34.1";
version = "0.35.1";
src = fetchFromGitHub {
owner = "loft-sh";
repo = "vcluster";
tag = "v${finalAttrs.version}";
hash = "sha256-sjpijDrh86dAOqKW+wPPcPRLNZNyfQTxhkAO335BxPM=";
hash = "sha256-31PGY6x+D0QJCS8VyTPS2AVEB/aw1hV/miijsqwpALI=";
};
vendorHash = null;

View File

@@ -3,11 +3,12 @@
python3Packages,
fetchFromGitHub,
nix-update-script,
testers,
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "vimhjkl";
version = "0.5.1";
version = "0.6.0";
pyproject = true;
__structuredAttrs = true;
@@ -15,7 +16,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
owner = "S-Sigdel";
repo = "vimhjkl";
tag = "v${finalAttrs.version}";
hash = "sha256-1Hh6bXuuK3udixgU32yFWkBa9NA3Z7kqI50ynSGCZ+o=";
hash = "sha256-uBXz2O2PwtnmibaR4e/l+lKIUh7WN2Hvh6nUfpUuEeA=";
};
build-system = [
@@ -31,7 +32,12 @@ python3Packages.buildPythonApplication (finalAttrs: {
--replace-fail "uv_build>=0.11,<0.12" "uv_build"
'';
passthru.updateScript = nix-update-script { };
passthru = {
updateScript = nix-update-script { };
tests.version = testers.testVersion {
package = finalAttrs.finalPackage;
};
};
meta = {
description = "Learn vim from your terminal with spaced repetition";

View File

@@ -7,16 +7,16 @@
buildGoModule (finalAttrs: {
pname = "vulnx";
version = "2.0.1";
version = "2.0.2";
src = fetchFromGitHub {
owner = "projectdiscovery";
repo = "vulnx";
tag = "v${finalAttrs.version}";
hash = "sha256-HejAK/KXpQ9HouA3JpX7MoMzMUoMmKX7eEKwMGfgSx4=";
hash = "sha256-oIoLInhErN1AojJ8GLLfxsp4Yy/S0UjnCESrVfOGp/4=";
};
vendorHash = "sha256-WVskArdIieEof/GDlzEZbY4QDYfAQyP0+Le24q+Kfu0=";
vendorHash = "sha256-xAdaTu/DRtolP6tXge42ntJvq7Wi9gDErRfX1HZposc=";
subPackages = [ "cmd/vulnx/" ];

View File

@@ -8,20 +8,20 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "wasm-tools";
version = "1.252.0";
version = "1.253.0";
src = fetchFromGitHub {
owner = "bytecodealliance";
repo = "wasm-tools";
tag = "v${finalAttrs.version}";
hash = "sha256-ehWAkTckRftWC/fIxMxFxmTkTowNQ/OWbcQqwJyWbQw=";
hash = "sha256-z17Y6bqsAkZ25Rkbtx7g0x2R9+tllYrpumLkgL13gjI=";
fetchSubmodules = true;
};
# Disable cargo-auditable until https://github.com/rust-secure-code/cargo-auditable/issues/124 is solved.
auditable = false;
cargoHash = "sha256-vdRdX4WiPq1NutWwdadWE9tFZKPVdU6eZ4RXf++SSpo=";
cargoHash = "sha256-mBp9QbjEpwT3v0Bmvur+HTUOncSNYkqmfoyORzEqR+k=";
cargoBuildFlags = [
"--package"
"wasm-tools"

View File

@@ -19,20 +19,20 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "wealthfolio";
version = "3.5.3";
version = "3.6.1";
src = fetchFromGitHub {
owner = "afadil";
repo = "wealthfolio";
rev = "v${finalAttrs.version}";
hash = "sha256-9dE0IQtDUcveZk2eWu9+UDpAYPgk/LbY+jsTNH3N9hg=";
hash = "sha256-7RX5u4Qr5OSBCQvsf9F0LlIVd9VycpvoVvIKj08xA3A=";
};
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) src pname version;
pnpm = pnpm_10;
fetcherVersion = 4;
hash = "sha256-ELOwrrRHmHAMZg6K+5MWXdUj/gyNNBgMl6OY11zxbB4=";
hash = "sha256-dpxUdXqRbYPwq/wKu8XFdcjhDSGYo5ory9rIovHGJwk=";
};
cargoRoot = ".";
@@ -45,7 +45,7 @@ stdenv.mkDerivation (finalAttrs: {
src
cargoRoot
;
hash = "sha256-P93AAivBXWBLik8M/DNUWyKXVsq7ttvX3DpiXwaDL2I=";
hash = "sha256-vNFYouLMP462N6G8cJppnKMBp9Wphh4mrMVO4WWaPJ4=";
};
nativeBuildInputs = [

View File

@@ -28,14 +28,14 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "wezterm";
version = "0-unstable-2026-06-22";
version = "0-unstable-2026-07-05";
src = fetchFromGitHub {
owner = "wezterm";
repo = "wezterm";
rev = "6ff5492866490be859f23db01541df0ec67dcc3b";
rev = "5cc2d1ef0b7f2ac82f965fe6becd8657ccd0067b";
fetchSubmodules = true;
hash = "sha256-1QPLiudM2rmD3OYrc+LKvzE9VJS6Ut7QiS48pf0zU14=";
hash = "sha256-HTzKidRDyf2d6ajuKbfbGlpwAjzfRgOzNHipOgkWWD4=";
};
postPatch = ''
@@ -58,7 +58,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
# https://github.com/wezterm/wezterm/blob/main/nix/flake.nix#L134
auditable = false;
cargoHash = "sha256-UDCTHu/BiAXXQOEJtZhVVJ9lYFyHSSxviLSqXuZismk=";
cargoHash = "sha256-jY7lTOfbT74tAZ7he1xudCN7BUxZBzY+8+e1d2g2v4I=";
nativeBuildInputs = [
installShellFiles
@@ -161,6 +161,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
mainProgram = "wezterm";
maintainers = with lib.maintainers; [
SuperSandro2000
yvnth
];
};
})

View File

@@ -3,7 +3,7 @@
set -euo pipefail
OWNER="wez"
OWNER="wezterm"
REPO="wezterm"
NIXPKGS_ROOT=$(git rev-parse --show-toplevel)

View File

@@ -0,0 +1,62 @@
{
fetchFromCodeberg,
lib,
stdenv,
versionCheckHook,
nix-update-script,
runCommand,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "within";
version = "1.1.4";
strictDeps = true;
__structuredAttrs = true;
src = fetchFromCodeberg {
owner = "sjmulder";
repo = "within";
tag = finalAttrs.version;
hash = "sha256-UyOgEe07K1LW5IbB7ngxelp+9Njq/NPPkWw3sxAQyVY=";
};
doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
nativeInstallCheckInputs = [ versionCheckHook ];
doInstallCheck = true;
preVersionCheck = ''
versionCheckProgram=$(type -P echo)
versionCheckProgramArg=$(head -n 1 CHANGELOG.md)
'';
dontVersionCheck = lib.hasInfix "unstable" finalAttrs.version;
installFlags = [ "PREFIX:=$(out)" ];
passthru = {
tests.within =
runCommand "within-test"
{
nativeBuildInputs = [ finalAttrs.finalPackage ];
}
''
mkdir $out
result=$(within $PWD $out - pwd)
expected=$(printf '%s\n' "$PWD: $PWD" "$out: $out")
test "$result" = "$expected"
'';
updateScript = nix-update-script { };
};
meta = {
homepage = "https://codeberg.org/sjmulder/within";
description = "Run a command in other directories";
changelog = "https://codeberg.org/sjmulder/within/src/tag/${finalAttrs.version}/CHANGELOG.md";
license = lib.licenses.bsd2;
maintainers = [ lib.maintainers.examosa ];
platforms = lib.platforms.all;
mainProgram = "within";
};
})

View File

@@ -97,6 +97,9 @@ stdenv.mkDerivation (finalAttrs: {
substituteInPlace node_modules/@electron/packager/dist/packager.js \
--replace-fail 'await this.getElectronZipPath(downloadOpts)' '"electron.zip"'
# electron-forge's console output is squeezed into one narrow column if unset
export CI="1";
yarn run package
runHook postBuild

View File

@@ -98,7 +98,7 @@ let
in
rustPlatform.buildRustPackage (finalAttrs: {
pname = "zed-editor";
version = "1.9.0";
version = "1.10.0";
outputs = [
"out"
@@ -111,7 +111,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
owner = "zed-industries";
repo = "zed";
tag = "v${finalAttrs.version}";
hash = "sha256-jD77wB/86DsZKO6Qh7pyszK4QgkzfgJthdQhbPVKeh0=";
hash = "sha256-KLoowntT7rrUWJdZ+uA2qvKih+Ygo58RIxd5jR7fFYE=";
};
postPatch = ''
@@ -134,7 +134,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
--replace-fail 'builder.include(&glib_path_config);' 'builder.include("${lib.getLib glib}/lib/glib-2.0/include");'
'';
cargoHash = "sha256-sISPA9qZriyN2po3LM5n/YCdosQBgNnA4n9tmq/UC7w=";
cargoHash = "sha256-HzDxvX72H3nLmfI0nIGZISpoF5vTiPj+hT/pz/6MUF4=";
__structuredAttrs = true;

View File

@@ -0,0 +1,67 @@
{
lib,
stdenv,
buildPythonPackage,
fetchFromGitHub,
setuptools,
aiosqlite,
cyscale,
websockets,
xxhash,
pytestCheckHook,
pytest-asyncio,
}:
buildPythonPackage (finalAttrs: {
pname = "async-substrate-interface";
version = "2.2.0";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "latent-to";
repo = "async-substrate-interface";
tag = "v${finalAttrs.version}";
hash = "sha256-39QL0h47ubKI26rIYxniNlchNAFEkPtKw6MyKuu2AXY=";
};
# On darwin the sandbox isolation is not as strict as on linux,
# and we can get permission erros when trying to create/delete arbitrary dirs in /tmp
postPatch = lib.optionalString stdenv.isDarwin ''
substituteInPlace tests/unit_tests/test_types.py \
--replace-fail '/tmp/async-substrate-interface-test-cache' "$(mktemp -d)/cache"
'';
build-system = [ setuptools ];
dependencies = [
aiosqlite
cyscale
websockets
xxhash
];
nativeCheckInputs = [
pytestCheckHook
pytest-asyncio
];
# these tests open a live websocket/subtensor endpoint, unavailable in the build sandbox
disabledTestPaths = [
"tests/integration_tests"
"tests/e2e_tests"
"tests/unit_tests/sync/test_block.py"
];
pythonImportsCheck = [ "async_substrate_interface" ];
meta = {
description = "Modernised py-substrate-interface and associated utils";
longDescription = "This project provides an asynchronous interface for interacting with Substrate-based blockchains. It is based on the py-substrate-interface project.";
homepage = "https://github.com/latent-to/async-substrate-interface";
changelog = "https://github.com/latent-to/async-substrate-interface/blob/${finalAttrs.src.tag}/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ kilyanni ];
};
})

Some files were not shown because too many files have changed in this diff Show More