Merge remote-tracking branch 'origin/master' into staging-next

This commit is contained in:
Martin Weinelt 2026-06-27 01:09:32 +02:00
commit fd12708a57
No known key found for this signature in database
GPG key ID: 87C1E9888F856759
144 changed files with 2121 additions and 843 deletions

View file

@ -1,85 +0,0 @@
# This expression will, as efficiently as possible, dump a
# *superset* of all attrpaths of derivations which might be
# part of a release on *any* platform.
#
# This expression runs single-threaded under all current Nix
# implementations, but much faster and with much less memory
# used than ./outpaths.nix itself.
#
# Once you have the list of attrnames you can split it up into
# $NUM_CORES batches and evaluate the outpaths separately for each
# batch, in parallel.
#
# To dump the attrnames:
#
# nix-instantiate --eval --strict --json ci/eval/attrpaths.nix -A names
#
{
lib ? import (path + "/lib"),
trace ? false,
path ? ./../..,
extraNixpkgsConfigJson ? "{}",
}:
let
# TODO: Use mapAttrsToListRecursiveCond when this PR lands:
# https://github.com/NixOS/nixpkgs/pull/395160
justAttrNames =
path: value:
let
result =
if path == [ "AAAAAASomeThingsFailToEvaluate" ] || !(lib.isAttrs value) then
[ ]
else if lib.isDerivation value then
[ path ]
else
lib.pipe value [
(lib.mapAttrsToList (
name: value:
lib.addErrorContext "while evaluating package set attribute path '${
lib.showAttrPath (path ++ [ name ])
}'" (justAttrNames (path ++ [ name ]) value)
))
lib.concatLists
];
in
lib.traceIf trace "** ${lib.showAttrPath path}" result;
outpaths = import ./outpaths.nix {
inherit path;
extraNixpkgsConfig = builtins.fromJSON extraNixpkgsConfigJson;
attrNamesOnly = true;
};
paths = [
# Some of the following are based on variants, which are disabled with `attrNamesOnly = true`.
# Until these have been removed from release.nix / hydra, we manually add them to the list.
[
"pkgsLLVM"
"stdenv"
]
[
"pkgsArocc"
"stdenv"
]
[
"pkgsZig"
"stdenv"
]
[
"pkgsStatic"
"stdenv"
]
[
"pkgsMusl"
"stdenv"
]
]
++ justAttrNames [ ] outpaths;
names = map lib.showAttrPath paths;
in
{
inherit paths names;
}

View file

@ -2,8 +2,8 @@
{
lib ? import ../../lib,
path ? ../..,
# The file containing all available attribute paths, which are split into chunks here
attrpathFile,
# The file containing the preEval result
preEvalFile,
chunkSize,
myChunk,
includeBroken,
@ -12,12 +12,13 @@
}:
let
attrpaths = lib.importJSON attrpathFile;
myAttrpaths = lib.sublist (chunkSize * myChunk) chunkSize attrpaths;
preEvalResult = lib.importJSON preEvalFile;
myAttrpaths = lib.sublist (chunkSize * myChunk) chunkSize preEvalResult.paths;
unfiltered = import ./outpaths.nix {
inherit path;
inherit includeBroken systems;
inherit (preEvalResult) attrPathsDisallowedForInternalUse;
extraNixpkgsConfig = builtins.fromJSON extraNixpkgsConfigJson;
};

View file

@ -38,7 +38,7 @@ let
fileset = unions (
map (lib.path.append ../..) [
".version"
"ci/eval/attrpaths.nix"
"ci/eval/pre-eval.nix"
"ci/eval/chunk.nix"
"ci/eval/outpaths.nix"
"default.nix"
@ -56,11 +56,11 @@ let
builtins.readFile ../../pkgs/top-level/release-supported-systems.json
);
attrpathsSuperset =
preEval =
{
evalSystem,
}:
runCommand "attrpaths-superset.json"
runCommand "pre-eval"
{
src = nixpkgs;
# Don't depend on -dev outputs to reduce closure size for CI.
@ -73,15 +73,15 @@ let
export NIX_STATE_DIR=$(mktemp -d)
mkdir $out
export GC_INITIAL_HEAP_SIZE=4g
command time -f "Attribute eval done [%MKB max resident, %Es elapsed] %C" \
command time -f "Pre-eval done [%MKB max resident, %Es elapsed] %C" \
nix-instantiate --eval --strict --json --show-trace \
"$src/ci/eval/attrpaths.nix" \
-A paths \
"$src/ci/eval/pre-eval.nix" \
-A result \
-I "$src" \
--argstr extraNixpkgsConfigJson ${lib.escapeShellArg (builtins.toJSON extraNixpkgsConfig)} \
--option restrict-eval true \
--option allow-import-from-derivation false \
--option eval-system "${evalSystem}" > $out/paths.json
--option eval-system "${evalSystem}" > $out/result.json
'';
singleSystem =
@ -90,8 +90,8 @@ let
# Note that this is intentionally not called `system`,
# because `--argstr system` would only be passed to the ci/default.nix file!
evalSystem ? builtins.currentSystem,
# The path to the `paths.json` file from `attrpathsSuperset`
attrpathFile ? "${attrpathsSuperset { inherit evalSystem; }}/paths.json",
# The path to the `result.json` file from `preEval`
preEvalFile ? "${preEval { inherit evalSystem; }}/result.json",
}:
let
singleChunk = writeShellScript "single-chunk" ''
@ -121,12 +121,12 @@ let
--show-trace \
--arg chunkSize "$chunkSize" \
--arg myChunk "$myChunk" \
--arg attrpathFile "${attrpathFile}" \
--arg preEvalFile "${preEvalFile}" \
--arg systems "[ \"$system\" ]" \
--arg includeBroken ${lib.boolToString includeBroken} \
--argstr extraNixpkgsConfigJson ${lib.escapeShellArg (builtins.toJSON extraNixpkgsConfig)} \
-I ${nixpkgs} \
-I ${attrpathFile} \
-I ${preEvalFile} \
> "$outputDir/result/$myChunk" \
2> "$outputDir/stderr/$myChunk"
exitCode=$?
@ -164,7 +164,7 @@ let
echo "System: $evalSystem"
cores=$NIX_BUILD_CORES
echo "Cores: $cores"
attrCount=$(jq length "${attrpathFile}")
attrCount=$(jq '.paths | length' "${preEvalFile}")
echo "Attribute count: $attrCount"
echo "Chunk size: $chunkSize"
# Same as `attrCount / chunkSize` but rounded up
@ -316,7 +316,7 @@ let
in
{
inherit
attrpathsSuperset
preEval
singleSystem
diff
combine

View file

@ -6,7 +6,7 @@
includeBroken ? true, # set this to false to exclude meta.broken packages from the output
path ? ./../..,
# used by ./attrpaths.nix
# used by ./pre-eval.nix
attrNamesOnly ? false,
# Set this to `null` to build for builtins.currentSystem only
@ -14,6 +14,8 @@
builtins.readFile (path + "/pkgs/top-level/release-supported-systems.json")
),
attrPathsDisallowedForInternalUse ? [ ],
# Customize the config used to evaluate nixpkgs
extraNixpkgsConfig ? { },
}:
@ -35,6 +37,22 @@ let
allowVariants = !attrNamesOnly;
checkMeta = true;
# We don't need to care about problems being caught using the
# standard mechanism, because any problems whose kind is not
# nixpkgsInternalUseAllowed cause the corresponding attributes to
# be disallowed entirely for internal use with
# attrPathsDisallowedForInternalUse, see also ./pre-eval.nix
problems.matchers = lib.mkForce [
# We only need to set the broken handler to error, so that CI
# doesn't evaluate those. No reason it couldn't evaluate them
# afaik, but this is how it's been before.
{
kind = "broken";
handler = "error";
}
];
inherit attrPathsDisallowedForInternalUse;
# Silence the `x86_64-darwin` deprecation warning.
allowDeprecatedx86_64Darwin = true;

128
ci/eval/pre-eval.nix Normal file
View file

@ -0,0 +1,128 @@
# This file does a fast pre-evaluation of Nixpkgs to determine:
# - paths: A *superset* of all attrpaths of derivations which might be part of a release on *any* platform.
# - attrPathsDisallowedForInternalUse: Attribute paths whose meta.problems has problems whose kinds should not be used internally in Nixpkgs
#
# This expression runs single-threaded under all current Nix
# implementations, but much faster and with much less memory
# used than ./outpaths.nix itself.
#
# Once you have the list of attrnames you can split it up into
# $NUM_CORES batches and evaluate the outpaths separately for each
# batch, in parallel.
#
# To dump the result:
#
# nix-instantiate --eval --strict --json ci/eval/pre-eval.nix -A result
#
{
lib ? import (path + "/lib"),
trace ? false,
path ? ./../..,
extraNixpkgsConfigJson ? "{}",
}:
let
# TODO: Use mapAttrsToListRecursiveCond when this PR lands:
# https://github.com/NixOS/nixpkgs/pull/395160
listAttrs =
path: value:
let
result =
if path == [ "AAAAAASomeThingsFailToEvaluate" ] || !(lib.isAttrs value) then
[ ]
else if lib.isDerivation value then
[
{
inherit path value;
}
]
else
lib.pipe value [
(lib.mapAttrsToList (
name: value:
lib.addErrorContext "while evaluating package set attribute path '${
lib.showAttrPath (path ++ [ name ])
}'" (listAttrs (path ++ [ name ]) value)
))
lib.concatLists
];
in
lib.traceIf trace "** ${lib.showAttrPath path}" result;
outpaths = import ./outpaths.nix {
inherit path;
extraNixpkgsConfig = builtins.fromJSON extraNixpkgsConfigJson;
attrNamesOnly = true;
};
list =
map
(path: {
inherit path;
# This looks a bit weird, but the only reason we care about this value
# is for the meta.problems check below, and stdenv's certainly don't
# have any problems, so this is fine :)
value = { };
})
[
# Some of the following are based on variants, which are disabled with `attrNamesOnly = true`.
# Until these have been removed from release.nix / hydra, we manually add them to the list.
[
"pkgsLLVM"
"stdenv"
]
[
"pkgsArocc"
"stdenv"
]
[
"pkgsZig"
"stdenv"
]
[
"pkgsStatic"
"stdenv"
]
[
"pkgsMusl"
"stdenv"
]
]
++ listAttrs [ ] outpaths;
paths = map (attrs: attrs.path) list;
names = map lib.showAttrPath paths;
inherit (import ../../pkgs/stdenv/generic/problems.nix { inherit lib; })
disallowNixpkgsInternalUseKinds
;
# Determine the list of attributes whose packages have any meta.problems
# with a kind that's disallowed from internal Nixpkgs use
attrPathsDisallowedForInternalUse = lib.pipe list [
(lib.map (
attrs:
attrs
// {
problematicProblems = builtins.tryEval (
lib.filterAttrs (name: problem: disallowNixpkgsInternalUseKinds ? ${problem.kind}) (
attrs.value.meta.problems or { }
)
);
}
))
(lib.filter (attrs: attrs.problematicProblems.success && attrs.problematicProblems.value != { }))
(lib.map (attrs: {
attrPath = attrs.path;
reason = "it has certain meta.problems whose kinds are disallowed: ${
lib.generators.toPretty { } attrs.problematicProblems.value
}";
}))
];
in
{
# TODO: Do we still need these? Probably not
inherit paths names;
result = {
inherit paths attrPathsDisallowedForInternalUse;
};
}

View file

@ -248,6 +248,43 @@ You can install the standalone parsers and queries directly without installing `
})
```
### Treesitter setup using WASM parsers and queries {#neovim-plugin-treesitter-wasm}
Neovim can load WASM parsers when it is built with Wasmtime support.
In nixpkgs, WASM parser plugins are available from the `wasi32` cross package set:
```nix
(pkgs.wrapNeovim (pkgs.neovim-unwrapped.override { wasmSupport = true; }) {
configure = {
packages.myPlugins =
with pkgs.pkgsCross.wasi32.vimPlugins;
let
# Select the grammars you need
treesitter-grammars = with nvim-treesitter-parsers; [
nix
python
];
# Queries are needed for treesitter based syntax highlighting and folds.
treesitter-queries = map (p: p.associatedQuery) treesitter-grammars;
in
{
start = [
# regular plugins
]
++ treesitter-grammars
++ treesitter-queries;
};
};
})
```
Do not install both native and WASM parsers for the same language.
For example, installing both `pkgs.vimPlugins.nvim-treesitter-parsers.nix` and
`pkgs.pkgsCross.wasi32.vimPlugins.nvim-treesitter-parsers.nix` is invalid because Neovim
loads the first `parser/nix.*` found on `runtimepath`.
Use `:checkhealth vim.treesitter` to verify Nix-managed WASM parsers.
You can enable treesitter features for installed grammars in a `FileType` autocommand
or in an `ftplugin/<language>.lua` script, e.g.

View file

@ -224,6 +224,9 @@
"neovim-luarocks-based-plugins": [
"index.html#neovim-luarocks-based-plugins"
],
"neovim-plugin-treesitter-wasm": [
"index.html#neovim-plugin-treesitter-wasm"
],
"nixpkgs-manual": [
"index.html#nixpkgs-manual"
],

View file

@ -4396,6 +4396,13 @@
githubId = 48105979;
name = "Caitlin Davitt";
};
cakeforcat = {
email = "julia@cakeforcat.dev";
github = "cakeforcat";
githubId = 37912991;
name = "Julia Czarny";
matrix = "@cakeforcat:matrix.org";
};
calavera = {
email = "david.calavera@gmail.com";
github = "calavera";

View file

@ -22,6 +22,8 @@
- [Stump](https://www.stumpapp.dev/), a free and open source comics, manga and digital book server with OPDS support. Available as [services.stump](#opt-services.stump.enable).
- [Freescout](https://freescout.net/), a free, open source Helpdesk and shared mailbox. Available as [services.freescout](#opt-services.freescout.enable).
- [FlapAlerted](https://github.com/Kioubit/FlapAlerted), detects BGP flapping events and provides statistics based on BGP update messages. Available as [services.flap-alerted](#opt-services.flap-alerted.enable).
- [Unpackerr](https://unpackerr.zip), extracts downloads for Radarr, Sonarr, Lidarr, Readarr, and/or a Watch folder. Available as [services.unpackerr](#opt-services.unpackerr.enable).

View file

@ -1664,6 +1664,7 @@
./services/web-apps/firefly-iii.nix
./services/web-apps/flarum.nix
./services/web-apps/fluidd.nix
./services/web-apps/freescout.nix
./services/web-apps/freshrss.nix
./services/web-apps/froide-govplan.nix
./services/web-apps/galene.nix

View file

@ -0,0 +1,487 @@
{
lib,
config,
pkgs,
...
}:
let
# Simple alias variables
user = "freescout";
group = user;
cfg = config.services.freescout;
datadir = "/var/lib/freescout";
cachedir = "/var/cache/freescout";
fpmService = "phpfpm-${user}";
# Generated config and more complex templates / default variables
autoDb = if !cfg.databaseSetup.enable then false else cfg.databaseSetup.kind;
dbService = lib.optional (autoDb != false) (
if autoDb == "mysql" then "mysql.service" else "postgresql.service"
);
db_config = lib.optionalAttrs (autoDb != false) (
if autoDb == "mysql" then
{
DB_CONNECTION = "mysql";
DB_HOST = "";
DB_SOCKET = "/run/mysqld/mysqld.sock";
DB_USERNAME = user;
DB_DATABASE = user;
}
else
{
DB_CONNECTION = "pgsql";
DB_HOST = "/run/postgresql";
DB_DATABASE = user;
DB_USERNAME = user;
}
);
raw_config = {
APP_ENV = "production";
APP_FORCE_HTTPS = true;
APP_URL = "https://${cfg.domain}";
APP_TIMEZONE = config.time.timeZone;
APP_DISABLE_UPDATING = true;
}
// cfg.settings
// db_config;
app_config = dropNull raw_config;
baseService = {
path = [
pkgs.ps
artisanWrapped
];
requires = [
# Using requires (instead of wants) since a failing config
# is indeed critical and should not allow this service to continue
"freescout-setup.service"
]
++ dbService;
serviceConfig = {
User = user;
Group = group;
};
};
# Custom built packages / files / scripts
phpPackage = cfg.phpPackage.buildEnv {
# As of php8.5 opcache is required and automatically compiled in and thus is not available in
# all anymore. To keep compatibility with older versions, still add if available.
extensions =
{ all, enabled }: enabled ++ [ all.iconv ] ++ (lib.optional (all ? opcache) all.opcache);
# Don't log anything because we are not sure, if this may leak secrets
# Logging can be increased, if we have time to check the logging library
extraConfig = ''
error_reporting = 0
'';
};
package = cfg.package.overrideAttrs (prev: {
pname = "${prev.pname}-${cfg.domain}";
postInstall = prev.postInstall or "" + ''
ln -s ${datadir} $out/share/freescout/data
'';
});
artisanWrapped = pkgs.writeShellApplication {
name = "artisan-wrapped";
runtimeInputs = with pkgs; [
util-linux
];
text = ''
cd ${datadir}
_runuser='exec'
if [[ "$USER" != ${user} ]]; then
_runuser='exec runuser --user ${user}'
fi
''${_runuser} ${lib.getExe phpPackage} ${package}/share/freescout/artisan "$@"
'';
};
configFile = mkEnvFile "freescout.env" app_config;
allSecrets = lib.catAttrs "_secret" (lib.collect isSecret app_config);
configSetupScript = pkgs.writeShellScript "freescout-config-setup" ''
set -o errexit -o pipefail -o nounset -o errtrace
shopt -s inherit_errexit
PATH=${lib.makeBinPath [ pkgs.replace-secret ]}:$PATH
cp ${configFile} "/tmp/raw.env";
${mkSecretsReplacement "/tmp/raw.env" allSecrets}
install -T --mode 400 -o ${user} -g ${group} "/tmp/raw.env" "${datadir}/.env"
rm "/tmp/raw.env"
'';
freescoutSetupScript =
let
rwPaths = [
"storage/app"
"storage/framework"
"storage/framework/sessions"
"storage/framework/views"
"storage/framework/cache/data"
"storage/logs"
"bootstrap/cache"
"public/css/builds"
"public/js/builds"
"Modules"
"public/modules"
];
in
''
set -x
umask 027
# Working arround https://github.com/freescout-helpdesk/freescout/issues/2547
# and having to manually clear cache when migrating from something around
# ~1.8.159 (╯°□°)╯︵ ┻━┻
# See: https://github.com/freescout-help-desk/freescout/issues/4366#issuecomment-2495993397
rm -f ${datadir}/bootstrap/cache.php ${datadir}/bootstrap/cache/{config,packages,services}.php
ln -sf "${artisanWrapped}/bin/artisan-wrapped" "${datadir}/artisan"
${lib.concatMapStringsSep "\n" (p: "mkdir -p ${datadir}/${p}") rwPaths}
# Migrate database and stuff
# This does migrate, cache:clear, queue:restart
${lib.getExe artisanWrapped} freescout:after-app-update
'';
# Helper functions
isSecret = v: lib.isAttrs v && v ? _secret && lib.strings.isConvertibleWithToString v._secret;
hashSecret = p: builtins.hashString "sha256" (toString p);
dropNull = lib.filterAttrsRecursive (
_: v:
!lib.elem v [
null
[ ]
{ }
]
);
mkEnvVars = lib.generators.toKeyValue {
mkKeyValue =
k: v:
let
value =
with builtins;
if isInt v then
toString v
else if isString v then
v
else if isBool v then
lib.boolToString v
else if isSecret v then
hashSecret v._secret
else
throw "freescout: ${k} has unsupported type ${typeOf v}: ${(lib.generators.toPretty { }) v}";
in
"${k}=${value}";
};
mkEnvFile = fname: values: pkgs.writeText fname (mkEnvVars values);
mkSecretsReplacement =
filePath:
lib.concatMapStringsSep "\n" (
sp:
"replace-secret ${
lib.escapeShellArgs [
(hashSecret sp)
sp
]
} ${filePath}"
);
in
{
options.services.freescout = with lib; {
enable = mkEnableOption "FreeScout helpdesk application";
package = mkPackageOption pkgs "freescout" { };
phpPackage = mkOption {
type = types.package;
default = pkgs.php;
description = "The php package to use";
defaultText = literalExpression "pkgs.php";
};
domain = mkOption {
type = types.str;
description = "Domain the freescout installation will run under";
example = "support.mydomain.net";
};
settings = mkOption {
type = with types; attrsOf anything;
apply = mapAttrs' (
k: v: {
name = toUpper k;
value = v;
}
);
default = { };
description = ''
Settings to be set in the `.env` file. See
<https://github.com/freescout-help-desk/freescout/blob/master/.env.example>
for reference on available environment variables.
Will be merged with the shown defaults.
'';
defaultText = lib.literalExpression ''
{
APP_ENV = "production";
APP_FORCE_HTTPS = true;
APP_URL = "https://''${config.services.freescout.domain}";
APP_TIMEZONE = config.time.timeZone;
APP_DISABLE_UPDATING = true;
}
'';
example = lib.literalExpression ''
{
# NOTE: MUST be 256 bits (32 bytes) in length, the form of base64:<base64 encoded key> is recommended.
# You can generate a valid one using `echo "base64:$(openssl rand -base64 32)"`
APP_KEY_FILE = "/run/secret/freescout/app_key";
DB_CONNECTION = "mysql";
DB_HOST = "localhost";
DB_PORT = 3306;
DB_DATABASE = "freescout";
DB_USERNAME = "freescout";
DB_PASSWORD._secret = "/run/secret/freescout/db_pass";
}
'';
};
poolConfig = mkOption {
type =
with types;
attrsOf (oneOf [
str
int
bool
]);
default = {
"pm" = "ondemand";
"pm.max_children" = 32;
"pm.process_idle_timeout" = "120s";
"pm.max_requests" = 500;
};
description = ''
Options for the freescout PHP pool. See the documentation on `php-fpm.conf`
for details on configuration directives.
'';
};
databaseSetup = {
enable = mkOption {
type = types.bool;
description = "Whether to enable automatic database setup and configuration";
default = true;
};
kind = mkOption {
type = types.enum [
"mysql"
"pgsql"
];
default = "pgsql";
example = "mysql";
description = "Type of database to automatically set up";
};
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = (app_config ? "APP_KEY" || app_config ? "APP_KEY_FILE");
message = "`services.freescout.settings.APP_KEY_FILE` is required!";
}
];
warnings =
lib.optional (app_config ? "APP_KEY" && lib.isString app_config.APP_KEY)
"`services.freescout.settings.APP_KEY` will be stored in the world readable nix store. Use `APP_KEY._secret` or `APP_KEY_FILE` instead!";
users.users.${user} = {
inherit group;
isSystemUser = true;
createHome = true;
home = datadir;
homeMode = "750";
};
users.users.${config.services.nginx.user}.extraGroups = [ group ];
users.groups.${group} = { };
services.postgresql = lib.mkIf (autoDb == "pgsql") {
enable = true;
ensureUsers = [
{
name = user;
ensureDBOwnership = true;
}
];
ensureDatabases = [
app_config.DB_DATABASE
];
};
services.mysql = lib.mkIf (autoDb == "mysql") {
enable = true;
package = lib.mkDefault pkgs.mariadb;
ensureUsers = [
{
name = user;
ensurePermissions = {
"${app_config.DB_DATABASE}.*" = "ALL PRIVILEGES";
};
}
];
ensureDatabases = [
app_config.DB_DATABASE
];
};
services.phpfpm.pools.${user} = {
inherit phpPackage user group;
phpOptions = ''
display_errors = On
display_startup_errors = On
'';
settings = {
"listen.owner" = user;
"listen.group" = config.services.nginx.group;
"catch_workers_output" = true;
}
// cfg.poolConfig;
};
systemd.services.${fpmService} = {
# Somehow the webinterface shows
inherit (baseService) path;
};
systemd.services.freescout-setup = lib.recursiveUpdate baseService {
description = "Preparational tasks for freescout";
requires = dbService;
wantedBy = [ "multi-user.target" ];
after = dbService;
script = freescoutSetupScript;
serviceConfig = {
PrivateTmp = true;
Type = "oneshot";
RemainAfterExit = true;
ExecStartPre = "+${configSetupScript}";
};
};
# This needs to be manually started again and again
# Freescout has its own scheduler built in to ensure tasks run at the desired frequency
# --no-interaction makes sure, that the queue worker is not executed.
# This is needed, because otherweise the queue worker process would continue running
# thus block further schedule invocations until the queue worker terminates.
# See https://github.com/freescout-help-desk/freescout/blob/74fa4b7d4f8288f8d3fb1d343308d3289c4d72e2/app/Console/Kernel.php#L195-L267
systemd.services."freescout-schedule-run" = baseService // {
startAt = "minutely";
script = "${lib.getExe artisanWrapped} schedule:run --no-interaction";
};
# This is both long-running but also stops quite frequently.
# Seeing job restart counts in the thousands here is normal.
systemd.services."freescout-queue" = lib.recursiveUpdate baseService {
# Copying the output to storage/logs because it makes
# debugging connection issues easier for the user.
script = ''
${lib.getExe artisanWrapped} \
queue:work \
--queue emails,default \
--sleep=5 \
-vv \
--tries=20 \
| tee -a ${datadir}/storage/logs/queue-jobs.log
'';
serviceConfig = {
RestartSec = "15s";
RuntimeMaxSec = "1h";
Restart = "always";
};
wantedBy = [ "multi-user.target" ];
after = [ "freescout-setup.service" ] ++ dbService;
};
services.nginx = {
enable = true;
virtualHosts.${cfg.domain} =
let
vhostCfg = config.services.nginx.virtualHosts.${cfg.domain};
optSsl = lib.optionalString (vhostCfg.forceSSL || vhostCfg.onlySSL) "fastcgi_param HTTPS on;";
in
{
root = lib.mkForce "${package}/share/freescout/public";
locations = {
"/" = {
index = "index.php";
tryFiles = "$uri $uri/ /index.php$is_args$args";
extraConfig = ''
# Defeats E-Mail open tracking or possibly "real" exploits
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'";
'';
};
"~ \\.php$" = {
tryFiles = "$uri $uri/ =404";
extraConfig = ''
fastcgi_index index.php;
include ${pkgs.nginx}/conf/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:${config.services.phpfpm.pools.${user}.socket};
${optSsl}
# Defeats E-Mail open tracking or possibly "real" exploits
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'";
'';
};
"~* ^/storage/attachment/" = {
tryFiles = "$uri $uri/ /index.php?$query_string";
extraConfig = ''
expires 1M;
access_log off;
'';
};
"~* ^/(?:css|js)/.*\\.(?:css|js)$".extraConfig = ''
expires 2d;
access_log off;
add_header Cache-Control "public, must-revalidate";
# Defeats E-Mail open tracking or possibly "real" exploits
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'";
'';
"~* ^/(?:css|fonts|img|installer|js|modules)$".extraConfig = ''
expires 1M;
access_log off;
add_header Cache-Control "public, must-revalidate";
'';
"~ /\\.".extraConfig = ''
deny all;
'';
"^~ /(css|js)/builds/".root = "${cachedir}/public/";
"^~ /storage/app/attachment/" = {
alias = "${datadir}/storage/app/attachment/";
extraConfig = ''
internal;
'';
};
};
};
};
};
}

View file

@ -630,6 +630,9 @@ in
forgejoPackage = pkgs.forgejo-lts;
};
freenet = runTest ./freenet.nix;
freescout = import ./freescout {
inherit runTest;
};
freeswitch = runTest ./freeswitch.nix;
freetube = discoverTests (import ./freetube.nix);
freshrss = import ./freshrss { inherit runTest; };

View file

@ -0,0 +1,5 @@
{ runTest }:
{
integration = runTest ./integration.nix;
upgrade = runTest ./upgrade.nix;
}

View file

@ -0,0 +1,195 @@
# This tests runs freescout and performs the following tests:
# - Create amin user via the CLI
# - Create mailbox, configured for sending and receiving
# - Test if receiving, sending and notifications work
{ pkgs, lib, ... }:
let
mailDomain = "freemail.local";
freescoutDomain = "freescout.local";
sendInitial = pkgs.writeShellScriptBin "send-initial" ''
exec ${pkgs.dovecot}/libexec/dovecot/deliver -d freescout <<MAIL
From: root@localhost
To: freescout@localhost
Subject: Hello NixOS!
Message-ID: initialtestmail-$(date +%s)@localhost
I am just a test E-Mail to see if freescout is (somewhat) working.
MAIL
'';
keyFile = pkgs.writeText "freescout-app-key" "base64:J8ZgK5LZkhVKpmZvjjA700sNL7+Y6aQTus8ZnUNNAaE=";
baseTestNode =
{
config,
...
}:
{
virtualisation.memorySize = 1024;
environment.systemPackages = with pkgs; [
curl
sendInitial
jq
];
networking.firewall.allowedTCPPorts = [
80
8025
];
networking.extraHosts = ''
127.0.0.1 ${mailDomain} ${freescoutDomain}
'';
services.mailhog = {
enable = true;
setSendmail = false;
};
users.users.alice = {
isNormalUser = true;
description = "Alice Foobar";
password = "foobar";
uid = 1000;
};
users.users.bob = {
isNormalUser = true;
description = "Bob Foobar";
password = "foobar";
};
# Taken from from the parsedmarc.nix test
services.postfix.enable = true;
services.dovecot2 = {
enable = true;
settings = {
dovecot_config_version = "2.4.4";
dovecot_storage_version = "2.4.4";
mail_uid = "vmail";
mail_gid = "vmail";
protocols = [
"imap"
"lmtp"
];
mail_driver = "maildir";
mail_home = "${config.services.postfix.settings.main.mail_spool_directory}/{user}";
"passdb static" = {
fields = {
nopassword = true;
allow_nets = "local,0.0.0.0/0,::/0";
};
};
};
};
users.users.freescout = {
password = "foobar2342";
};
services.freescout = {
enable = true;
domain = freescoutDomain;
settings = {
APP_KEY._secret = toString keyFile;
APP_FORCE_HTTPS = false;
APP_URL = "http://${freescoutDomain}";
APP_REMOTE_HOST_WHITE_LIST = "localhost,127.0.0.1,::1";
APP_DEBUG = true;
};
};
};
mkNode =
dbType:
{ config, pkgs, ... }:
{
imports = [
baseTestNode
];
services.freescout.databaseSetup = {
enable = true;
kind = dbType;
};
};
in
{
name = "freescout-integration";
meta.maintainers = with lib.maintainers; [
e1mo
];
nodes = {
# This may lead to duplicate tests, but ensures that
# it's always tested on the current default version
# even if the tests are not updated
freescout_pgsql = mkNode "pgsql";
# Same as the freescout_pgsql_default node
freescout_mysql = mkNode "mysql";
};
testScript = ''
start_all()
for machine in [freescout_pgsql]:
machine.wait_for_unit("postgresql")
for machine in [freescout_mysql]:
machine.wait_for_unit("mysql")
all=[
freescout_pgsql,
freescout_mysql
]
for machine in all:
machine.wait_for_unit("nginx")
machine.wait_for_unit("dovecot")
machine.wait_for_unit("mailhog")
machine.wait_for_open_port(1025)
machine.wait_for_open_port(8025)
machine.wait_for_unit("freescout-setup")
with subtest("Login works"):
machine.succeed("/var/lib/freescout/artisan freescout:create-user --role=admin --firstName=Xenia --lastName=TheFox --email xenia@${freescoutDomain} --no-interaction --password=foo | grep 'User created with id'")
token=machine.succeed("curl -fsSL --cookie-jar cjar 'http://${freescoutDomain}/login' | grep -Po '(?<= name=\"_token\" value=\")(\\w+)(?=\")'").strip()
data=f"email=xenia%40${freescoutDomain}&password=foo&_token={token}&remember=on"
machine.succeed(f"curl -sSfX POST --cookie-jar cjar --cookie cjar --data-raw '{data}' 'http://${freescoutDomain}/login' | grep 'Redirecting to'")
machine.succeed("curl -fsSL --cookie-jar cjar --cookie cjar 'http://${freescoutDomain}' | grep 'Dashboard'")
# Enable all (most except following) notifications
to_enable=list(range(1, 9))
enable_data="&".join(map(lambda n: "subscriptions%5B1%5D%5B%5D=" + str(n), range(1,9)))
data=f"_token={token}&{enable_data}"
machine.succeed(f"curl -sSfX POST --cookie-jar cjar --cookie cjar --data-raw '{data}' 'http://${freescoutDomain}/users/notifications/1'")
with subtest("Create and edit Mailbox"):
data=f"email=freescout%40${mailDomain}&name=Test+Mailbox&_token={token}"
machine.succeed(f"curl -sSfX POST --cookie-jar cjar --cookie cjar --data-raw '{data}' 'http://${freescoutDomain}/mailbox/new'")
machine.succeed("curl -fsSL --cookie-jar cjar --cookie cjar 'http://${freescoutDomain}' | grep 'Test Mailbox'")
machine.succeed("curl -sSf --cookie-jar cjar --cookie cjar 'http://${freescoutDomain}/mailbox/1' | grep 'freescout@${mailDomain}'")
data=f"out_method=3&out_server=localhost&out_port=1025&out_username=&out_password=&out_encryption=1&_token={token}"
machine.succeed(f"curl -sSfX POST --cookie-jar cjar --cookie cjar --data-raw '{data}' 'http://${freescoutDomain}/mailbox/connection-settings/1/outgoing'")
data=f"&in_protocol=1&in_server=localhost&in_port=143&in_username=freescout&in_password=super_secret&in_encryption=1&in_imap_folders%5B%5D=INBOX&imap_sent_folder=&_token={token}"
machine.succeed(f"curl -fsSX POST --cookie-jar cjar --cookie cjar --data-raw '{data}' 'http://${freescoutDomain}/mailbox/connection-settings/1/incoming'")
data="&action=fetch_test&mailbox_id=1"
machine.succeed(f"test $(curl -sSfX POST --cookie-jar cjar --cookie cjar -H 'X-CSRF-TOKEN: {token}' --data-raw '{data}' 'http://${freescoutDomain}/mailbox/ajax' | jq -r '.status') = 'success'")
with subtest("Send E-Mails"):
machine.succeed("send-initial")
# Doing a second loop so that we won't have to wait that much
for machine in all:
with subtest("E-Mails ae received"):
machine.wait_until_succeeds("curl -sSf --cookie-jar cjar --cookie cjar 'http://${freescoutDomain}/mailbox/1' | grep 'Hello NixOS'", timeout=180)
# Notifactions to users are being sent
for machine in all:
with subtest("Notifications are sent"):
machine.wait_until_succeeds("test $(curl -sSf http://127.0.0.1:8025/api/v2/messages | jq '.total') -eq 1", timeout=180)
machine.succeed("curl -sSf http://127.0.0.1:8025/api/v2/messages | jq '.items[].Content.Headers[\"X-FreeScout-Mail-Type\"] | .[0]'")
with subtest("Ensure vars are being generated"):
machine.succeed("curl -sSf 'http://${freescoutDomain}/'")
machine.succeed("curl -sSf 'http://${freescoutDomain}/storage/js/vars.js'")
'';
}

View file

@ -0,0 +1,94 @@
# This tests checks, wether upgrading between versions works fine
# In the past, there have been releases that would require manual deletion of specific
# cache files, otherwise bricking the installation.
# This test should catch similar instances in the future.
# The oldFreescoutVersion may need a bump from time to time as there may be incompatibilities
# with up-to-date databases on older freescout versions.
{
pkgs,
lib,
...
}:
let
freescoutDomain = "freescout.local";
oldFreescoutVersion = pkgs.freescout.overrideAttrs (oa: rec {
version = "1.8.220";
src = pkgs.fetchFromGitHub {
owner = "freescout-help-desk";
repo = "freescout";
tag = version;
hash = "sha256-bOkazBcd9EKzQdZZA6YMn4+UNYhpDFV9hDMHR5kXke0=";
};
});
newFreescoutVersion = pkgs.freescout;
in
{
name = "freescout-upgrade";
meta.maintainers = with lib.maintainers; [
e1mo
];
nodes.machine =
{ config, lib, ... }:
{
networking.extraHosts = ''
127.0.0.1 ${freescoutDomain}
'';
virtualisation.memorySize = 1024;
environment.systemPackages = with pkgs; [
curl
jq
];
services.freescout = {
package = oldFreescoutVersion;
enable = true;
domain = freescoutDomain;
settings = {
APP_KEY = "base64:J8ZgK5LZkhVKpmZvjjA700sNL7+Y6aQTus8ZnUNNAaE=";
APP_FORCE_HTTPS = false;
APP_URL = "http://${freescoutDomain}:8888";
APP_DEBUG = true;
};
databaseSetup = {
enable = true;
kind = "pgsql";
};
};
specialisation.upgrade.configuration.services.freescout.package = lib.mkForce newFreescoutVersion;
};
testScript =
{ nodes, ... }:
let
oldVersion = nodes.machine.services.freescout.package.version;
newVersion = nodes.machine.specialisation.upgrade.configuration.services.freescout.package.version;
in
''
machine.start()
machine.wait_for_unit("nginx")
machine.wait_for_unit("postgresql")
machine.wait_for_unit("freescout-setup")
with subtest("Create user and log in"):
# Create uesr
machine.succeed("/var/lib/freescout/artisan freescout:create-user --role=admin --firstName=Xenia --lastName=TheFox --email xenia@${freescoutDomain} --no-interaction --password=foo | grep 'User created with id'")
# Obtain CSRF token
token=machine.succeed("curl -fsSL --cookie-jar cjar 'http://${freescoutDomain}/login' | grep -Po '(?<= name=\"_token\" value=\")(\w+)(?=\")'").strip()
# Actually log in
data=f"email=xenia%40${freescoutDomain}&password=foo&_token={token}&remember=on"
machine.succeed(f"curl -sSfX POST --cookie-jar cjar --cookie cjar --data-raw '{data}' 'http://${freescoutDomain}/login' | grep 'Redirecting to'")
with subtest("Check old API version"):
machine.succeed("curl -fsSL --cookie-jar cjar --cookie cjar 'http://${freescoutDomain}/system/status' | grep ${oldVersion}")
machine.execute("${nodes.machine.system.build.toplevel}/specialisation/upgrade/bin/switch-to-configuration test >&2")
machine.wait_for_unit("nginx")
machine.wait_for_unit("freescout-setup")
with subtest("Check new API version"):
machine.succeed("curl -fsSL --cookie-jar cjar --cookie cjar 'http://${freescoutDomain}/system/status' | grep ${newVersion}")
'';
}

View file

@ -230,13 +230,11 @@ stdenv.mkDerivation (finalAttrs: {
"aarch64-linux"
"x86_64-linux"
];
# FIXME: gated behind allowAliases to workaround https://github.com/NixOS/nixpkgs/issues/523712
problems =
lib.optionalAttrs config.allowAliases {
removal.message = "We have removed Python 3.3 package support ahead of upstream schedule but if you do not use any old packages, this should just work.";
}
// lib.optionalAttrs (lib.versionOlder buildVersion "4205") {
broken.message = "Packages, including core ones, do not run without plug-in host depending on insecure OpenSSL.";
};
problems = {
removal.message = "We have removed Python 3.3 package support ahead of upstream schedule but if you do not use any old packages, this should just work.";
}
// lib.optionalAttrs (lib.versionOlder buildVersion "4205") {
broken.message = "Packages, including core ones, do not run without plug-in host depending on insecure OpenSSL.";
};
};
})

View file

@ -9,15 +9,15 @@
vimPlugins,
vimUtils,
makeWrapper,
pkgs,
perl,
}:
let
version = "0.0.27-unstable-2026-03-11";
version = "release-v0.1";
src = fetchFromGitHub {
owner = "yetone";
repo = "avante.nvim";
rev = "9a7793461549939f1d52b2b309a1aa44680170c8";
hash = "sha256-EEkAoufj29P46RIUrRNG0xJL9Wu4X7LZCS1fer4/nZQ=";
rev = "2033b42ab72fb9f27b35769f9cb7a9f4f1993db4";
hash = "sha256-Ql/17DSHpBVbihUHssyZe3MGC5fgasbjgxdABp8xk24=";
};
avante-nvim-lib = rustPlatform.buildRustPackage {
pname = "avante-nvim-lib";
@ -28,7 +28,7 @@ let
nativeBuildInputs = [
pkg-config
makeWrapper
pkgs.perl
perl
];
buildInputs = [
@ -66,15 +66,12 @@ vimUtils.buildVimPlugin {
ext = stdenv.hostPlatform.extensions.sharedLibrary;
in
''
mkdir -p $out/build
cp ${avante-nvim-lib}/lib/libavante_repo_map${ext} $out/build/avante_repo_map${ext}
cp ${avante-nvim-lib}/lib/libavante_templates${ext} $out/build/avante_templates${ext}
cp ${avante-nvim-lib}/lib/libavante_tokenizers${ext} $out/build/avante_tokenizers${ext}
cp ${avante-nvim-lib}/lib/libavante_html2md${ext} $out/build/avante_html2md${ext}
# Fixes PKCE auth flows not finding libcrypto
substituteInPlace "$out/lua/avante/auth/pkce.lua" \
--replace-fail 'pcall(ffi.load, "crypto")' 'pcall(ffi.load, "${lib.getLib openssl}/lib/libcrypto${ext}")'
# place dynamic shared libraries directly into lua/ for native C-module discovery
mkdir -p $out/lua
cp ${avante-nvim-lib}/lib/libavante_repo_map${ext} $out/lua/avante_repo_map${ext}
cp ${avante-nvim-lib}/lib/libavante_templates${ext} $out/lua/avante_templates${ext}
cp ${avante-nvim-lib}/lib/libavante_tokenizers${ext} $out/lua/avante_tokenizers${ext}
cp ${avante-nvim-lib}/lib/libavante_html2md${ext} $out/lua/avante_html2md${ext}
'';
passthru = {

View file

@ -2031,8 +2031,8 @@ let
mktplcRef = {
name = "gleam";
publisher = "gleam";
version = "2.12.2";
hash = "sha256-41HgkDcgyStJtyeE0x1H9rFOZ18imcKF7XQixDOmurE=";
version = "2.13.0";
hash = "sha256-eCiBbdKMeXcRS4kyI2rH1iAT0CmQmo2SybeW+Y7FRio=";
};
meta = {
description = "Support for the Gleam programming language";

View file

@ -7,19 +7,19 @@
let
supported = {
x86_64-linux = {
hash = "sha256-8KZE2+kpzU7fRRBsroZtCnJyPyUHPuysZrggZojpG98=";
hash = "sha256-YLic8tKnb6WSx4rdwTu8B2ybfjoSbXc+QfEZ0Vc4umo=";
arch = "linux-x64";
};
x86_64-darwin = {
hash = "sha256-Zf/O2KRDlzCi4qWnmT5CctagjJoLiNgZfnh5+gQWRAA=";
hash = "sha256-nbftXgjEAxGfT4sfTjd+bp+Ti/rWJGHLkaSXQWlRGBM=";
arch = "darwin-x64";
};
aarch64-linux = {
hash = "sha256-zN49L+gLrLNL7XM3+POgBgSX64IMUYtNZ54+i8lpLqE=";
hash = "sha256-FG6OIoeeDenMbgwM/ZE8YyTySt/XcoFJj1RxvlrPsXc=";
arch = "linux-arm64";
};
aarch64-darwin = {
hash = "sha256-vTf86rNeS/97//1D2e1h5DpnAFb1cceIuF5XyCCq520=";
hash = "sha256-FW+pmz8YTw6pYxx1x3UsT3Dtp00GT804MJX4HBarMZo=";
arch = "darwin-arm64";
};
};
@ -34,7 +34,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = base // {
name = "tombi";
publisher = "tombi-toml";
version = "1.1.3";
version = "1.1.5";
};
meta = {
description = "TOML Language Server";

View file

@ -1,10 +1,10 @@
{
"chromium": {
"version": "149.0.7827.196",
"version": "149.0.7827.200",
"chromedriver": {
"version": "149.0.7827.197",
"hash_darwin": "sha256-tN7s6s/pbfAGRCMcoT3QWYHD8QRq2gcHfFSXoSG9V5Y=",
"hash_darwin_aarch64": "sha256-DZ8CZ4Obp67Zo2m4iyqUnShyhTK8+/75cJ/WmZZqQhE="
"version": "149.0.7827.201",
"hash_darwin": "sha256-MHCcid+7wdYm8uIdrUIlXrk8ADHNUUXzPyMPFGP98WY=",
"hash_darwin_aarch64": "sha256-Gwmdo9qNyV/BnCj18f0BFpNgDf28e8vjNF98e5/vVjQ="
},
"deps": {
"depot_tools": {
@ -21,8 +21,8 @@
"DEPS": {
"src": {
"url": "https://chromium.googlesource.com/chromium/src.git",
"rev": "43eb30368c6ca3d14d540487954abb2780aeae3a",
"hash": "sha256-pwSfASgR4SiQTJBERhOVyR8mANYJk67f+u2pmCCW6ko=",
"rev": "c35c164b1b6d1adca9eddf914ed6d0d0743dba6a",
"hash": "sha256-b2gBRUzRjqVZEb/tWUL1JF6Afq5gHJ3aOM02My1FyYU=",
"recompress": true
},
"src/third_party/clang-format/script": {
@ -823,7 +823,7 @@
}
},
"ungoogled-chromium": {
"version": "149.0.7827.196",
"version": "149.0.7827.200",
"deps": {
"depot_tools": {
"rev": "45dedc4c3b87c982fd846b3dc599b233ed3aff90",
@ -835,16 +835,16 @@
"hash": "sha256-oFs7fZAZEs/gQ7X1A4uigo9+Y+iEN9sMMQYwAjEuD04="
},
"ungoogled-patches": {
"rev": "149.0.7827.196-1",
"hash": "sha256-nRcMTP+su+mFP/JkyLBIDrG+dKYhvPANFw0Y8qVWzrA="
"rev": "149.0.7827.200-1",
"hash": "sha256-D7c1ToAoUzAMpXoe60YPimRqe6/LRe0T95TduXUeTFo="
},
"npmHash": "sha256-pF0JtwFpPC4/fodbhSJnQKkczA9WlDg4VqEAy9aDVLg="
},
"DEPS": {
"src": {
"url": "https://chromium.googlesource.com/chromium/src.git",
"rev": "43eb30368c6ca3d14d540487954abb2780aeae3a",
"hash": "sha256-pwSfASgR4SiQTJBERhOVyR8mANYJk67f+u2pmCCW6ko=",
"rev": "c35c164b1b6d1adca9eddf914ed6d0d0743dba6a",
"hash": "sha256-b2gBRUzRjqVZEb/tWUL1JF6Afq5gHJ3aOM02My1FyYU=",
"recompress": true
},
"src/third_party/clang-format/script": {

View file

@ -1067,11 +1067,11 @@
"vendorHash": null
},
"ovh_ovh": {
"hash": "sha256-rNJ6ibD8VbvUopKYc6Ao6I7lJqTw6gw8A71YzW8OYJE=",
"hash": "sha256-JaZdCten+5mV8aKCRhkoifqP4EwNrytK25TLJl1eQjQ=",
"homepage": "https://registry.terraform.io/providers/ovh/ovh",
"owner": "ovh",
"repo": "terraform-provider-ovh",
"rev": "v2.14.0",
"rev": "v2.15.0",
"spdx": "MPL-2.0",
"vendorHash": null
},

View file

@ -8,16 +8,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "ab-av1";
version = "0.11.3";
version = "0.11.4";
src = fetchFromGitHub {
owner = "alexheretic";
repo = "ab-av1";
tag = "v${finalAttrs.version}";
hash = "sha256-lLZAECwF8V19Qx/FugbjLeVns7lhVlwWDTK9cdYb0xo=";
hash = "sha256-830STu0YfEhsYr4EU3ATF6kgH5J/tUEhm4b47VOwMEQ=";
};
cargoHash = "sha256-AONJz1BoDi6weHT7W9DmzwoPW5khfgYjDqLNl7OM5bY=";
cargoHash = "sha256-mKtP+QoG0MjbBB4kMLlioyxshlgVyhqLH4C5GKx9Hes=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -44,7 +44,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
dependencies = with python3Packages; [
configobj
gpgme
gpg
notmuch2
python-magic
standard-mailcap

View file

@ -9,14 +9,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "ansible-doctor";
version = "8.3.2";
version = "8.3.3";
pyproject = true;
src = fetchFromGitHub {
owner = "thegeeklab";
repo = "ansible-doctor";
tag = "v${finalAttrs.version}";
hash = "sha256-Asp26tGyzFPOCLESXe2Je4i+0u8OGX2GSaGy/cQC3AI=";
hash = "sha256-3xdMTuy6Rtb2VwfzN6SV73UZmp+9fmU9SfPySHCayJg=";
};
build-system = with python3Packages; [

View file

@ -11,13 +11,13 @@
buildGoModule (finalAttrs: {
pname = "apko";
version = "1.2.17";
version = "1.2.19";
src = fetchFromGitHub {
owner = "chainguard-dev";
repo = "apko";
tag = "v${finalAttrs.version}";
hash = "sha256-6Z+1LpgvdRpcy2PmgSFeKHuMLh3jeA03KhfS2j2AhKQ=";
hash = "sha256-Iia0U/oibPuUYC3adeXvL5m4nhEPHqBvHw7J7Uxn88s=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
@ -29,7 +29,7 @@ buildGoModule (finalAttrs: {
find "$out" -name .git -print0 | xargs -0 rm -rf
'';
};
vendorHash = "sha256-K2fqDAzex0EgrGPK5I4Bp5oqmIOnnuI1sztlySrX1Pc=";
vendorHash = "sha256-vYUxwtqGUDbJhbhlajPtlUZKD4TKreHEGR1dCSuSiA4=";
excludedPackages = [
"internal/gen-jsonschema"

View file

@ -7,13 +7,13 @@
buildGoModule (finalAttrs: {
pname = "atlantis";
version = "0.44.0";
version = "0.44.1";
src = fetchFromGitHub {
owner = "runatlantis";
repo = "atlantis";
tag = "v${finalAttrs.version}";
hash = "sha256-ZHd/RSzFXbcZ7324Bbgtx681zwdHi5xYgqVlTR4glHY=";
hash = "sha256-CMMsW0VFUi5c2AsuvH5uxggzJ3wD1k24Zrk4tjlBczo=";
};
ldflags = [

View file

@ -7,16 +7,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "basalt";
version = "0.12.4";
version = "0.12.6";
src = fetchFromGitHub {
owner = "erikjuhani";
repo = "basalt";
tag = "basalt/v${finalAttrs.version}";
hash = "sha256-fijpPGPeF3f81WMWj1tIc0ht8hUIubAe19ja3iBNOh0=";
hash = "sha256-MlKrVxNU9PNakIA9hiv5ll7ImkPDekQnassWFO/smkE=";
};
cargoHash = "sha256-jY3EDM+jYwCsMpd5cA5WKzmhdS4rVCLz3h5gfshzhOQ=";
cargoHash = "sha256-sTU0AUwR5xdnqLvrRycxuMk+KNcsEcYU3XvyODKT1Ns=";
nativeInstallCheckInputs = [ versionCheckHook ];
doInstallCheck = true;

View file

@ -14,31 +14,24 @@
buildNpmPackage (finalAttrs: {
pname = "bitwarden-cli";
version = "2026.5.0";
version = "2026.6.0";
src = fetchFromGitHub {
owner = "bitwarden";
repo = "clients";
tag = "cli-v${finalAttrs.version}";
hash = "sha256-R00wt5W4kKmFIODEaGoUqDwfGyHH/2PpiRaC8Gq3d88=";
hash = "sha256-JIIis3wW0cU33ovRQfJi3HlB2YdLZ5IPvueq1dGFbas=";
};
postPatch = ''
# remove code under unfree license
rm -r bitwarden_license
# Upstream cli-v2026.4.1 bumps @napi-rs/cli to 3.5.1 in the desktop workspace,
# but the root lockfile still points that entry at 3.2.0.
substituteInPlace package-lock.json \
--replace-fail \
$' "apps/desktop/node_modules/@napi-rs/cli": {\n "version": "3.2.0",\n "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-3.2.0.tgz",\n "integrity": "sha512-heyXt/9OBPv/WrTFW2+PxIMzH6MCeqP9ZsvOg0LN6pLngBnszcxFsdhCAh5I6sddzQsvru53zj59GUzvmpWk8Q==",' \
$' "apps/desktop/node_modules/@napi-rs/cli": {\n "version": "3.5.1",\n "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-3.5.1.tgz",\n "integrity": "sha512-XBfLQRDcB3qhu6bazdMJsecWW55kR85l5/k0af9BIBELXQSsCFU0fzug7PX8eQp6vVdm7W/U3z6uP5WmITB2Gw==",'
'';
nodejs = nodejs_22;
npmDepsFetcherVersion = 2;
npmDepsHash = "sha256-SU4HjfNshjRwa8mXPnmG2xVIwYkbQ7g8j3NZ43Ap76k=";
npmDepsHash = "sha256-sXFSjQw9iM5Ye03BX+ZzpDfeAyLTJoG/k46NiI3O8+A=";
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
perl

View file

@ -7,13 +7,13 @@
buildGoModule (finalAttrs: {
pname = "buildkit";
version = "0.31.0";
version = "0.31.1";
src = fetchFromGitHub {
owner = "moby";
repo = "buildkit";
rev = "v${finalAttrs.version}";
hash = "sha256-mTYNyz2H980l7/Vcyf9wnEgmi2j6S63C9ZcwOaK/+YY=";
hash = "sha256-lpcbCPsnvwMULeZgo1eQ0AqlfsyOMO/7b3ZOCoVTDKk=";
};
vendorHash = null;

View file

@ -47,7 +47,7 @@ python3.pkgs.buildPythonApplication (finalAttrs: {
propagatedBuildInputs = with python3.pkgs; [
anytree
fuzzyfinder
gpgme
gpg
pygobject3
];

View file

@ -30,6 +30,7 @@ buildGoModule (finalAttrs: {
meta = {
description = "Skip YouTube sponsorships (and sometimes ads) on all local Google Cast devices";
homepage = "https://github.com/gabe565/CastSponsorSkip";
mainProgram = "castsponsorskip";
changelog = "https://github.com/gabe565/CastSponsorSkip/releases";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [

View file

@ -1,22 +1,22 @@
{
"version": "3.7.42",
"version": "3.9.8",
"vscodeVersion": "1.105.1",
"sources": {
"x86_64-linux": {
"url": "https://downloads.cursor.com/production/5702c9cfca656d8710fad58402fe37f14345e3ac/linux/x64/Cursor-3.7.42-x86_64.AppImage",
"hash": "sha256-o7c220esGj2qrLDt88zQ+XpAMbhJGoky5iNFB/qhvtU="
"url": "https://downloads.cursor.com/production/4aa8ff1b7877ed7bd01bcba308698f71a6735380/linux/x64/Cursor-3.9.8-x86_64.AppImage",
"hash": "sha256-xcyFowrW5yzIDCwbFGmpDRSNa3OUXsHwpLkbyNcSzqM="
},
"aarch64-linux": {
"url": "https://downloads.cursor.com/production/5702c9cfca656d8710fad58402fe37f14345e3ac/linux/arm64/Cursor-3.7.42-aarch64.AppImage",
"hash": "sha256-PjVgVemRY66zY/gXcgYCVzSwkC5aCJeMsNreceQzWI4="
"url": "https://downloads.cursor.com/production/4aa8ff1b7877ed7bd01bcba308698f71a6735380/linux/arm64/Cursor-3.9.8-aarch64.AppImage",
"hash": "sha256-ZhRMvfJkt8NZT45tYxfO2gBFaVw6hR2nVeRzmrxQfeE="
},
"x86_64-darwin": {
"url": "https://downloads.cursor.com/production/5702c9cfca656d8710fad58402fe37f14345e3ac/darwin/x64/Cursor-darwin-x64.dmg",
"hash": "sha256-AiS0Iswdp8DAZV6cFA7uIYSE24ystuqJRz0YGJkkmDE="
"url": "https://downloads.cursor.com/production/4aa8ff1b7877ed7bd01bcba308698f71a6735380/darwin/x64/Cursor-darwin-x64.dmg",
"hash": "sha256-IOQsZQAncDgZGEnCZWg/LQqD/PquFifBmuk2hnJ1L/s="
},
"aarch64-darwin": {
"url": "https://downloads.cursor.com/production/5702c9cfca656d8710fad58402fe37f14345e3ac/darwin/arm64/Cursor-darwin-arm64.dmg",
"hash": "sha256-e6VrLs/tj+FkEbUJN4RpQKNAbWCS/mEo1drVQFErXU0="
"url": "https://downloads.cursor.com/production/4aa8ff1b7877ed7bd01bcba308698f71a6735380/darwin/arm64/Cursor-darwin-arm64.dmg",
"hash": "sha256-GxpBKyx0Yo3e8AUS9Oxei/hHm1m3JdxMKjX7qAxUGm4="
}
}
}

View file

@ -7,13 +7,13 @@
buildGoModule (finalAttrs: {
pname = "cruise";
version = "1.1.0";
version = "2.2.2";
src = fetchFromGitHub {
owner = "NucleoFusion";
repo = "cruise";
tag = "v${finalAttrs.version}";
hash = "sha256-0xIugbLlKlMODbMvsFzQXjKNNGY61tF4P/0loPlfs6o=";
hash = "sha256-AhLSzynNvtHK3URTd1034/2ToGcJUDp7rGMtr3kyees=";
};
vendorHash = "sha256-Zx1rZl5ljlsBNV1eQKPtQ+SgJV9l5rS8hwBe8nX9dYQ=";
@ -23,7 +23,7 @@ buildGoModule (finalAttrs: {
meta = {
description = "TUI for managing Docker containers, images, volumes, networks, and more";
homepage = "https://github.com/NucleoFusion/cruise";
license = lib.licenses.mit;
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ greatnatedev ];
mainProgram = "cruise";
platforms = lib.platforms.linux;

View file

@ -27,15 +27,15 @@ assert lib.assertMsg (lib.elem true [
rustPlatform.buildRustPackage rec {
pname = "diesel-cli";
version = "2.3.9";
version = "2.3.10";
src = fetchCrate {
inherit version;
crateName = "diesel_cli";
hash = "sha256-aFve5n38EO7cqfYcb0AIEbOfY+Xs3oXlUIkNJdBxXr4=";
hash = "sha256-ePoFjIzLUQ4GpPIObhIsg0NvvM1VcVf++IDdTI3XjXw=";
};
cargoHash = "sha256-TAkZLwVaMvopkbh9kPvIhEHckQom+k8rkVNut7a31do=";
cargoHash = "sha256-lGVUxYrZ81YvJncGGw7VQ8bl74aYOyHsEKDIMCwc7lw=";
nativeBuildInputs = [
installShellFiles

View file

@ -7,7 +7,7 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "dix";
version = "2.0.1";
version = "2.1.0";
__structuredAttrs = true;
@ -15,10 +15,10 @@ rustPlatform.buildRustPackage (finalAttrs: {
owner = "manic-systems";
repo = "dix";
tag = "v${finalAttrs.version}";
hash = "sha256-KTlFgBEVKJIXymfN2UU8hvGM71PYRcNgJ1XWUmG2AI4=";
hash = "sha256-+9I6WuPOc8Lj7NAxe19phlFiDypGQywopZ3dZK9d6F4=";
};
cargoHash = "sha256-pNkSdsxOpv0E/xXs7tMg2vtP0PBU7p8fh3H4IX/u5k4=";
cargoHash = "sha256-k/of0KX2wBWh/etybbKn81O5UgJF0ylc2fl+HK8uIRQ=";
nativeInstallCheckInputs = [ versionCheckHook ];
doInstallCheck = true;

View file

@ -0,0 +1,108 @@
{
lib,
fetchFromGitea,
rustPlatform,
pkg-config,
systemd,
hidapi,
openssl,
libxkbcommon,
alsa-lib,
vulkan-loader,
wayland,
libx11,
libxcursor,
libxi,
copyDesktopItems,
makeDesktopItem,
autoPatchelfHook,
udevCheckHook,
writeText,
nix-update-script,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "ds4u";
version = "0.1.1";
__structuredAttrs = true;
src = fetchFromGitea {
domain = "git.yokai.digital";
owner = "deadYokai";
repo = "ds4u";
tag = "v${finalAttrs.version}";
hash = "sha256-q8NbpFbrYMtE56CnnjScbMewHCTxaxMih8/I9dspb+o=";
};
cargoHash = "sha256-KjNHX3S+XFUsngX8Od3HtI0IvpAyMp5TB6TVkCkl8Gc=";
nativeBuildInputs = [
pkg-config
copyDesktopItems
autoPatchelfHook
];
buildInputs = [
alsa-lib
libxkbcommon
vulkan-loader
wayland
libx11
libxcursor
libxi
openssl
systemd
hidapi
];
# autoPatchelfHook doesnt find these automatically using dlopen
appendRunpaths = [ (lib.makeLibraryPath finalAttrs.buildInputs) ];
udevRules = writeText "ds4u.rules" ''
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0664", GROUP="input", TAG+="uaccess"
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0df2", MODE="0664", GROUP="input", TAG+="uaccess"
'';
preInstall = ''
# desktop icon install
install -Dm644 $src/assets/icon.svg $out/share/icons/hicolor/scalable/apps/ds4u.svg
# udev rules
install -Dm644 ${finalAttrs.udevRules} -D $out/lib/udev/rules.d/70-ds4u.rules
'';
nativeInstallCheckInputs = [ udevCheckHook ];
doInstallCheck = true;
desktopItems = [
(makeDesktopItem {
name = "ds4u";
desktopName = "DS4U";
comment = finalAttrs.meta.description;
exec = "ds4u";
icon = "ds4u";
terminal = false;
type = "Application";
categories = [
"Utility"
"Settings"
"Game"
];
keywords = [
"controller"
"dualsense"
"ps5"
"gamepad"
];
})
];
passthru.updateScript = nix-update-script { };
meta = {
description = "DualSense controller manager for Linux";
homepage = "https://git.yokai.digital/deadYokai/ds4u";
license = lib.licenses.mit;
mainProgram = "ds4u";
maintainers = with lib.maintainers; [ cakeforcat ];
platforms = lib.platforms.linux;
};
})

View file

@ -3,99 +3,99 @@
"alpha": {
"experimental": {
"candidateHashFilenames": [
"factorio_linux_2.0.76.tar.xz"
"factorio_linux_2.1.8.tar.xz"
],
"name": "factorio_alpha_x64-2.0.76.tar.xz",
"name": "factorio_alpha_x64-2.1.8.tar.xz",
"needsAuth": true,
"sha256": "b1e50891bdc69cce3fdaee4f840cbe4658e18d465309ac87915b6fc41900754c",
"sha256": "307016173b824ddfa1a1be4067526273f3aafe6dc8a9c49aff7b2250c466b0b0",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.76/alpha/linux64",
"version": "2.0.76"
"url": "https://factorio.com/get-download/2.1.8/alpha/linux64",
"version": "2.1.8"
},
"stable": {
"candidateHashFilenames": [
"factorio_linux_2.0.76.tar.xz"
"factorio_linux_2.0.77.tar.xz"
],
"name": "factorio_alpha_x64-2.0.76.tar.xz",
"name": "factorio_alpha_x64-2.0.77.tar.xz",
"needsAuth": true,
"sha256": "b1e50891bdc69cce3fdaee4f840cbe4658e18d465309ac87915b6fc41900754c",
"sha256": "2e7c26d999c140335abb82c5e642cdd4c98db559633562d7ad9844aff4f273ff",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.76/alpha/linux64",
"version": "2.0.76"
"url": "https://factorio.com/get-download/2.0.77/alpha/linux64",
"version": "2.0.77"
}
},
"demo": {
"experimental": {
"candidateHashFilenames": [
"factorio-demo_linux_2.0.76.tar.xz"
"factorio-demo_linux_2.0.77.tar.xz"
],
"name": "factorio_demo_x64-2.0.76.tar.xz",
"name": "factorio_demo_x64-2.0.77.tar.xz",
"needsAuth": false,
"sha256": "d5caee49636290b678d35adc59d2fc80ecbdbad8bf420731f1317971c89f941b",
"sha256": "f2fc889de1924b551cf52ca2ce2c73251f9c20ee2ae38cc8e973415baffef2a1",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.76/demo/linux64",
"version": "2.0.76"
"url": "https://factorio.com/get-download/2.0.77/demo/linux64",
"version": "2.0.77"
},
"stable": {
"candidateHashFilenames": [
"factorio-demo_linux_2.0.76.tar.xz"
"factorio-demo_linux_2.0.77.tar.xz"
],
"name": "factorio_demo_x64-2.0.76.tar.xz",
"name": "factorio_demo_x64-2.0.77.tar.xz",
"needsAuth": false,
"sha256": "d5caee49636290b678d35adc59d2fc80ecbdbad8bf420731f1317971c89f941b",
"sha256": "f2fc889de1924b551cf52ca2ce2c73251f9c20ee2ae38cc8e973415baffef2a1",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.76/demo/linux64",
"version": "2.0.76"
"url": "https://factorio.com/get-download/2.0.77/demo/linux64",
"version": "2.0.77"
}
},
"expansion": {
"experimental": {
"candidateHashFilenames": [
"factorio-space-age_linux_2.0.76.tar.xz"
"factorio-space-age_linux_2.1.8.tar.xz"
],
"name": "factorio_expansion_x64-2.0.76.tar.xz",
"name": "factorio_expansion_x64-2.1.8.tar.xz",
"needsAuth": true,
"sha256": "dc24bbbc1b6a619e4425d9a720bcfafce3463d908ab369a6cd1bee1a99332b4f",
"sha256": "92ec753d96eab63fc60f45ac45259a9427268f74bab0c15b63263f10aae0e786",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.76/expansion/linux64",
"version": "2.0.76"
"url": "https://factorio.com/get-download/2.1.8/expansion/linux64",
"version": "2.1.8"
},
"stable": {
"candidateHashFilenames": [
"factorio-space-age_linux_2.0.76.tar.xz"
"factorio-space-age_linux_2.0.77.tar.xz"
],
"name": "factorio_expansion_x64-2.0.76.tar.xz",
"name": "factorio_expansion_x64-2.0.77.tar.xz",
"needsAuth": true,
"sha256": "dc24bbbc1b6a619e4425d9a720bcfafce3463d908ab369a6cd1bee1a99332b4f",
"sha256": "068cd4778459569cb46e8a8acde1c404969ad533d7e479789af9fce0d29f10a4",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.76/expansion/linux64",
"version": "2.0.76"
"url": "https://factorio.com/get-download/2.0.77/expansion/linux64",
"version": "2.0.77"
}
},
"headless": {
"experimental": {
"candidateHashFilenames": [
"factorio-headless_linux_2.0.76.tar.xz",
"factorio_headless_x64_2.0.76.tar.xz"
"factorio-headless_linux_2.1.8.tar.xz",
"factorio_headless_x64_2.1.8.tar.xz"
],
"name": "factorio_headless_x64-2.0.76.tar.xz",
"name": "factorio_headless_x64-2.1.8.tar.xz",
"needsAuth": false,
"sha256": "ef3663f66146d76342f7c09a3f743792636f8cd95c39ea26cfca5bd2e0e92430",
"sha256": "16b122cd5f48118cd44bcaf1d27fd933aea60b9902bbd426fd26359440759f12",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.76/headless/linux64",
"version": "2.0.76"
"url": "https://factorio.com/get-download/2.1.8/headless/linux64",
"version": "2.1.8"
},
"stable": {
"candidateHashFilenames": [
"factorio-headless_linux_2.0.76.tar.xz",
"factorio_headless_x64_2.0.76.tar.xz"
"factorio-headless_linux_2.0.77.tar.xz",
"factorio_headless_x64_2.0.77.tar.xz"
],
"name": "factorio_headless_x64-2.0.76.tar.xz",
"name": "factorio_headless_x64-2.0.77.tar.xz",
"needsAuth": false,
"sha256": "ef3663f66146d76342f7c09a3f743792636f8cd95c39ea26cfca5bd2e0e92430",
"sha256": "c4efc11529f74d37c96933e291e0db73fd9f5aa4738913d9301b24680b3e947f",
"tarDirectory": "x64",
"url": "https://factorio.com/get-download/2.0.76/headless/linux64",
"version": "2.0.76"
"url": "https://factorio.com/get-download/2.0.77/headless/linux64",
"version": "2.0.77"
}
}
}

View file

@ -0,0 +1,30 @@
From 1c749a3610fb423e50260a2c807b44a94ef4c69d Mon Sep 17 00:00:00 2001
From: Nina Fromm <git@e1mo.de>
Date: Thu, 25 Jun 2026 16:23:00 +0200
Subject: [PATCH] settings: catch unwritable .env
---
app/Misc/Helper.php | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/app/Misc/Helper.php b/app/Misc/Helper.php
index 2d647b89..3fc2ef84 100644
--- a/app/Misc/Helper.php
+++ b/app/Misc/Helper.php
@@ -1172,7 +1172,12 @@ class Helper
$contents = $contents."\n{$key}={$value}\n";
}
}
- \File::put($env_path, $contents);
+ try {
+ \File::put($env_path, $contents);
+ } catch (\Exception $e) {
+ \Helper::logException($e, 'Error updating ' . $key .' in .env file: ');
+ \Session::flash('flash_error_unescaped', "Unable to write settings to <code>$env_path</code>: " . $e->getMessage());
+ }
}
/**
--
2.53.0

View file

@ -0,0 +1,65 @@
{
lib,
stdenv,
fetchFromGitHub,
nixosTests,
}:
stdenv.mkDerivation (finalAttrs: {
preferLocalBuild = true;
pname = "freescout";
version = "1.8.225";
src = fetchFromGitHub {
owner = "freescout-help-desk";
repo = "freescout";
tag = finalAttrs.version;
hash = "sha256-kXZ6bjF36YO1p6q+KTugnBO+KxqQZci5O0RNM7lqecQ=";
};
patches = [
./0001-settings-catch-unwritable-.env.patch
];
prePatch = ''
rm -rf storage
rm bootstrap/cache/.gitignore
rm public/{css,js}/builds/.htaccess
rm {Modules,public/modules}/.gitkeep
rmdir Modules public/modules bootstrap/cache public/{css,js}/builds
ln -rs data/.env .env
ln -rs data/storage storage
ln -rs data/bootstrap/cache bootstrap/cache
ln -rs data/storage/app/public public/storage
ln -rs data/public/css/builds public/css/builds
ln -rs data/public/js/builds public/js/builds
ln -rs data/Modules Modules
ln -rs data/public/modules public/modules
'';
installPhase = ''
runHook preInstall
mkdir -p $out/share/freescout
cp -ar . $out/share/freescout
chmod +x $out/share/freescout/artisan
runHook postInstall
'';
passthru.tests = {
inherit (nixosTests) freescout;
};
# Because freescout is searching for some folders only relative to it's own source location, we need to have the symlinks to the actual locations in here
dontCheckForBrokenSymlinks = true;
strictDeps = true;
__structuredAttrs = true;
meta = with lib; {
description = "Free self-hosted help desk & shared mailbox";
license = licenses.agpl3Only;
homepage = "https://freescout.net/";
platforms = platforms.all;
maintainers = with maintainers; [ e1mo ];
};
})

View file

@ -5,49 +5,34 @@
python3,
}:
let
py = python3.override {
packageOverrides = self: super: {
# Doesn't support latest marshmallow
marshmallow = super.marshmallow.overridePythonAttrs (oldAttrs: rec {
version = "3.26.2";
src = fetchFromGitHub {
owner = "marshmallow-code";
repo = "marshmallow";
tag = version;
hash = "sha256-ioe+aZHOW8r3wF3UknbTjAP0dEggd/NL9PTkPVQ46zM=";
};
});
};
};
in
py.pkgs.buildPythonApplication (finalAttrs: {
python3.pkgs.buildPythonApplication (finalAttrs: {
pname = "ggshield";
version = "1.50.4";
version = "1.52.2";
pyproject = true;
src = fetchFromGitHub {
owner = "GitGuardian";
repo = "ggshield";
tag = "v${finalAttrs.version}";
hash = "sha256-wwGj7i1GoxNzdfUhcL7mulgQAPtz5WhbT67hgbcMxpo=";
hash = "sha256-bz3R1ylmkaYF3Wt/ylzeE2IsWKvZ8bmoF39Xu4tVzFU=";
};
pythonRelaxDeps = true;
build-system = with py.pkgs; [ hatchling ];
build-system = with python3.pkgs; [ hatchling ];
dependencies = with py.pkgs; [
dependencies = with python3.pkgs; [
charset-normalizer
click
configupdater
cryptography
filelock
keyring
marshmallow
marshmallow-dataclass
notify-py
oauthlib
packaging
platformdirs
pygitguardian
pyjwt
@ -56,6 +41,7 @@ py.pkgs.buildPythonApplication (finalAttrs: {
requests
rich
sigstore
tomli
truststore
typing-extensions
urllib3
@ -64,7 +50,7 @@ py.pkgs.buildPythonApplication (finalAttrs: {
nativeCheckInputs = [
git
]
++ (with py.pkgs; [
++ (with python3.pkgs; [
jsonschema
pyfakefs
pytest-factoryboy
@ -100,6 +86,8 @@ py.pkgs.buildPythonApplication (finalAttrs: {
"test_generate_files_from_paths"
# Nixpkgs issue
"test_get_file_sha_in_ref"
# Generated hooks config references pytest binary, instead of ggshield CLI. Odd!
"test_install_cursor_local_fresh"
];
meta = {

View file

@ -22,7 +22,7 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "gitte";
version = "0.8.0";
version = "0.8.1";
__structuredAttrs = true;
@ -30,12 +30,12 @@ stdenv.mkDerivation (finalAttrs: {
owner = "ckruse";
repo = "Gitte";
tag = finalAttrs.version;
hash = "sha256-niVICk2RtDFA0/NK4cP+CU4uII/LcYjB+ZV60IHmr40=";
hash = "sha256-c7GhPn7/0PzRTYQbhfvlSUMJqHs4dRqeWRMBJG2eqdc=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (finalAttrs) pname version src;
hash = "sha256-hJlO4GXPg6LWBCSKTQAwAawgWwN+OckvV2t9svTsaj4=";
hash = "sha256-yR4MYQJQMjqEs++8RhQwDV+h/blSVgFqrGYUfrPUGOg=";
};
strictDeps = true;

View file

@ -52,7 +52,7 @@ python3.pkgs.buildPythonApplication (finalAttrs: {
propagatedBuildInputs = with python3.pkgs; [
dbus-python
gpgme
gpg
magic-wormhole
pygobject3
pybluez

View file

@ -7,16 +7,16 @@
buildGoModule (finalAttrs: {
pname = "gollama";
version = "2.0.4";
version = "2.0.5";
src = fetchFromGitHub {
owner = "sammcj";
repo = "gollama";
tag = "v${finalAttrs.version}";
hash = "sha256-unvnFKkEWJnyzuNz8zekB8ZSXP/dUqv24qgyhkP3kkY=";
hash = "sha256-LjgQSV7Z2apcdIaxk9NU7AdlPJPlt7CQ/q9nID9Px5w=";
};
vendorHash = "sha256-t7Kl6WnS8vvLyvKzkDswv0yOaeTE3IgZCNAC3dD8euU=";
vendorHash = "sha256-xpAAtJIJtETbDYwieLBI7L79SedeAOmYnHL9zq6l7Rs=";
doCheck = false;

View file

@ -8,13 +8,13 @@
buildGoLatestModule (finalAttrs: {
pname = "govulncheck";
version = "1.4.0";
version = "1.5.0";
src = fetchFromGitHub {
owner = "golang";
repo = "vuln";
tag = "v${finalAttrs.version}";
hash = "sha256-XiwWe/BDM9aVf5A5iZFrY57bZ8N+6iCrLL170U9ipVM=";
hash = "sha256-Bd1YLR0grKXrvvWxDzDG2ZZ1moqY1EA9NyOtp0eBegk=";
};
patches = [
@ -24,7 +24,7 @@ buildGoLatestModule (finalAttrs: {
})
];
vendorHash = "sha256-ajTRmrzFf+P2aXN9oVN0oXfxocS22LDPxl2mxY9wGcs=";
vendorHash = "sha256-9daNbbrw0ZVw2aWPkMEGgIA6rhiEkL3OlhYGWUSplQw=";
subPackages = [
"cmd/govulncheck"

View file

@ -6,13 +6,13 @@
}:
buildGoModule (finalAttrs: {
pname = "infrastructure-agent";
version = "1.76.2";
version = "1.77.0";
src = fetchFromGitHub {
owner = "newrelic";
repo = "infrastructure-agent";
rev = finalAttrs.version;
hash = "sha256-r42ochCVPAreDW+ZVeb/zrh8QwDmQL2xXytsZb6PcuU=";
hash = "sha256-QgyQ5fP8yIgmqHqLRn927pRmngOeKcdSaxXLDkcIwqI=";
};
vendorHash = "sha256-+ajMZ+kZ+m1vxyAfM+zvzTfcwkN63agdGoXPTNPC2i0=";

View file

@ -38,7 +38,10 @@ in
changelog = "https://github.com/jellyfin/jellyfin-ffmpeg/releases/tag/v${version}";
description = "${old.meta.description} (Jellyfin fork)";
homepage = "https://github.com/jellyfin/jellyfin-ffmpeg";
maintainers = with lib.maintainers; [ justinas ];
maintainers = with lib.maintainers; [
dotlambda
justinas
];
pkgConfigModules = [ "libavutil" ];
};
})

View file

@ -3,23 +3,23 @@
{
"kicad" = {
kicadVersion = {
version = "10.0.3";
version = "10.0.4";
src = {
rev = "1d69e55fc60915f8f1569c9f6522d9b0fb5a0ba8";
sha256 = "0ldaj072x16452xw2wszbk20g932rz36zappjrxc4m6ygx298aa3";
rev = "314f59e84469aa2db16a36740c891781c8a09fd8";
sha256 = "1dp2rcblpz1i5hzrv5kb7cq91agha5msm2slhny3gf8x0gbzmawq";
};
};
libVersion = {
version = "10.0.3";
version = "10.0.4";
libSources = {
symbols.rev = "299c330ab364cfc3989d1ab6e82f1eabb9ddd915";
symbols.sha256 = "05h8dbygch2kp4s5ikspxngwv999j7jwsiwm4pzwwcrir7dqzdfl";
templates.rev = "a7e1a3ae6255d8d9aaff13e58adf3a0d78cb90c9";
symbols.rev = "5a6700bbb3f2a3b05d123a1a1af770cfbb5bc7d3";
symbols.sha256 = "1ns0lg360h3h55w2xv5lyj0qzy6nc1cr02vll95c0vma34rc1qwa";
templates.rev = "32bcda122df6ae76b221155c641de3656904e786";
templates.sha256 = "0zs29zn8qjgxv0w1vyr8yxmj02m8752zagn4vcraqgik46dwg2id";
footprints.rev = "fe0ca39d34a10036f2b6ccb9749a39bc3fa7af95";
footprints.sha256 = "0wdzsn7z11wc5yskk576a4a6qfagsvw0y6r034inxrnfc32aiah9";
packages3d.rev = "c955b94c7bdeffd94b06bac86d94588a9be03afe";
packages3d.sha256 = "01nbjcs3890hyfmafc623ldmfi9n8sjr5m0wripz5fq5fjdnzqxl";
footprints.rev = "12095f926a3c5c37d9573ebab0c67c9eed71812f";
footprints.sha256 = "15cz4lh6dzqdl2cc9nqnpa8bd73h5p33vnvmc4l68js5wqlsyba1";
packages3d.rev = "9484cb1a4e193898c3f86e0cf69146bcc6e8053d";
packages3d.sha256 = "0mkc9km540n6ri5is4fjw5abv8afidwj9q7fmbs66l6kx1z3lxky";
};
};
};

View file

@ -1,4 +1,5 @@
{
cctools,
cmake,
fetchFromGitHub,
git,
@ -46,6 +47,9 @@ stdenv.mkDerivation (finalAttrs: {
git
pkg-config
python3
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
cctools.libtool
];
buildInputs = [

View file

@ -16,13 +16,13 @@
buildDotnetModule rec {
pname = "libation";
version = "13.4.5";
version = "13.5.0";
src = fetchFromGitHub {
owner = "rmcrackan";
repo = "Libation";
tag = "v${version}";
hash = "sha256-t4Fz7aqQg1WPqSKvvVbSx45M6+UNGXacFHXGjzNW67A=";
hash = "sha256-KF7iFvVRmsWFMkFiVE4QosQmpqYeFx7yqIw7u0Cf80o=";
};
sourceRoot = "${src.name}/Source";

View file

@ -9,13 +9,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "luau";
version = "0.725";
version = "0.726";
src = fetchFromGitHub {
owner = "luau-lang";
repo = "luau";
tag = finalAttrs.version;
hash = "sha256-zRoB1psMrZRt8mLoaReyc0hvhRBPAotC1LmDNTYGLjA=";
hash = "sha256-DAKyA8/ERX2AJ/XQDABOoI+cQCSW3PKnBpJkwS8IBdI=";
};
nativeBuildInputs = [ cmake ];

View file

@ -13,11 +13,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "matio";
version = "1.5.29";
version = "1.5.30";
src = fetchurl {
url = "mirror://sourceforge/matio/matio-${finalAttrs.version}.tar.gz";
hash = "sha256-2eX3ovLFlO/xX1UONHKbAZkc3VoCilWL6M5ZWzIjOvs=";
hash = "sha256-i9O5R3BC7MAN1xwEdi+lhGjhTMzDL9jGgmwtoei8MQc=";
};
configureFlags = [ "ac_cv_va_copy=1" ];

View file

@ -13,7 +13,7 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "mousam";
version = "1.4.2";
version = "2.0.2";
# built with meson, not a python format
pyproject = false;
@ -21,7 +21,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
owner = "amit9838";
repo = "mousam";
tag = "v${finalAttrs.version}";
hash = "sha256-V2R5XfkuaJ4fjgOhoTNZVk4FqKlCJqum7A2NsPISgM8=";
hash = "sha256-3x4bi3P8zw+A+MUaBd4ByESrzCEP21Qa9CLaUYGARew=";
};
nativeBuildInputs = [

View file

@ -8,18 +8,18 @@
buildGoModule (finalAttrs: {
pname = "opkssh";
version = "0.14.0";
version = "0.15.0";
src = fetchFromGitHub {
owner = "openpubkey";
repo = "opkssh";
tag = "v${finalAttrs.version}";
hash = "sha256-XvA5J4v3+QESJZIaZUdvPmCD/q92ifHlzI3Ejmt1pls=";
hash = "sha256-COACiBNXHEpzZyGGYmz0uj0ubzYJFRabAEku2qOjLcg=";
};
ldflags = [ "-X main.Version=${finalAttrs.version}" ];
vendorHash = "sha256-ASa4jXhLdCs+YTP65nkMsQErg22sbl8g0RgzfSFr67A=";
vendorHash = "sha256-aRWu4yB83hBKtW78MVMg7l8iSzHdLgnYgskgt32tiLw=";
nativeInstallCheckInputs = [
versionCheckHook

View file

@ -2,20 +2,29 @@
lib,
buildGoModule,
fetchFromGitHub,
nix-update-script,
}:
buildGoModule (finalAttrs: {
pname = "oui";
version = "0.1.8";
version = "2.0.6";
src = fetchFromGitHub {
owner = "thatmattlove";
repo = "oui";
rev = "v${finalAttrs.version}";
hash = "sha256-RLm8V2fLFvOwjnnq16ZmhwVdtgXPaehan7JTX3Xz30w=";
hash = "sha256-fNG20pryfs6bDjeexpf8UlevHatY6zdvGCHSFrfz8io=";
};
vendorHash = "sha256-TLVw4tnfvgK2h/Xj5LNNjDG4WQ83Bw8yBhZc16Tjmws=";
vendorHash = "sha256-EOu9imj0YwYhHX7ZzE9BzhkoDitC5AHjlwoWmQs0Rj4=";
checkFlags = [
# These tests require live IEEE network access, a local PostgreSQL server,
# and a writable home directory.
"-skip=^Test_(CollectAll|New)$"
];
passthru.updateScript = nix-update-script { };
meta = {
description = "MAC Address CLI Toolkit";

View file

@ -27,6 +27,7 @@
symlinkJoin,
udev,
vulkan-loader,
wayland,
wrapGAppsHook3,
xrandr,
@ -103,6 +104,7 @@ symlinkJoin {
libxext
libxrandr
libxxf86vm
wayland
udev # oshi

View file

@ -6,16 +6,16 @@
buildGoModule rec {
pname = "pgbouncer-exporter";
version = "0.12.0";
version = "0.12.1";
src = fetchFromGitHub {
owner = "prometheus-community";
repo = "pgbouncer_exporter";
rev = "v${version}";
hash = "sha256-Kt3eM8CxDOTWgMppAs+ajt4RL6Q/7jMcKYQIFzlRW8g=";
hash = "sha256-P82ek6+OcvRd1dIuqkfqU4DEmOtHVkSfN5atLansCK4=";
};
vendorHash = "sha256-h9IJAjTCSKrREolo4DVOzULguz4gj6UbkFSR9yuivQY=";
vendorHash = "sha256-wKb5/phioGYLthgFVlh0OkVzJyPynAl2G9v89550k6M=";
meta = {
description = "Prometheus exporter for PgBouncer";

View file

@ -7,7 +7,7 @@
buildGoModule rec {
pname = "smokeping_prober";
version = "0.11.0";
version = "0.12.0";
ldflags =
let
@ -31,9 +31,9 @@ buildGoModule rec {
owner = "SuperQ";
repo = "smokeping_prober";
rev = "v${version}";
sha256 = "sha256-h0HpxfYYfDY+dkKOBTBs3fFGY7td1YsL8b/NY6aJY/w=";
sha256 = "sha256-bFKJkqeuVS4z4jylJ67UgL6OPyi/JbowMKn5/Feu6lM=";
};
vendorHash = "sha256-On5Xpn9V1XeyyGfy7xA1MwV4gO6GMcdine1f4tDZPJ4=";
vendorHash = "sha256-rNk9mCVpc2N+lLAarDenmOLy00swS1rkTNxMy62wR+k=";
doCheck = true;

View file

@ -9,11 +9,11 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "proton-ge-bin";
version = "GE-Proton10-34";
version = "GE-Proton11-1";
src = fetchzip {
url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/${finalAttrs.version}/${finalAttrs.version}.tar.gz";
hash = "sha256-lzPsYYcrp5NoT3B0WFj3o10Z7tXx7xva1wEP3edeuqM=";
hash = "sha256-I7SSvzQQ/NqdvwjpJ9IFFtAaTS+rgHUyXx0us1vIOnw=";
};
dontUnpack = true;

View file

@ -10,16 +10,16 @@
buildGoModule (finalAttrs: {
pname = "qovery-cli";
version = "1.165.0";
version = "1.166.0";
src = fetchFromGitHub {
owner = "Qovery";
repo = "qovery-cli";
tag = "v${finalAttrs.version}";
hash = "sha256-QaJ0AP1LD1Z+cjzcFjphmZ/EbAOyzTEt7OJWGbIfc9c=";
hash = "sha256-orNVII6Y82YVtgEKpQnEpNXVWsg6P3sHluW1FGU20DA=";
};
vendorHash = "sha256-nvJd4e71zP6cxkojHhfNGxUQgC0qIMYF6aCmZycnap0=";
vendorHash = "sha256-fZqzHJa5VFC1z5ZaHCXNyIKbwLjb3pSEb9FHs4YhWZg=";
env.CGO_ENABLED = 0;

View file

@ -2,7 +2,7 @@ source 'https://rubygems.org'
ruby '>= 3.2.0', '< 3.5.0'
gem 'rails', '7.2.3'
gem 'rails', '7.2.3.1'
gem 'rouge', '~> 4.5'
gem 'mini_mime', '~> 1.1.0'
gem "actionpack-xml_parser"

View file

@ -1,29 +1,29 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (7.2.3)
actionpack (= 7.2.3)
activesupport (= 7.2.3)
actioncable (7.2.3.1)
actionpack (= 7.2.3.1)
activesupport (= 7.2.3.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (7.2.3)
actionpack (= 7.2.3)
activejob (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
actionmailbox (7.2.3.1)
actionpack (= 7.2.3.1)
activejob (= 7.2.3.1)
activerecord (= 7.2.3.1)
activestorage (= 7.2.3.1)
activesupport (= 7.2.3.1)
mail (>= 2.8.0)
actionmailer (7.2.3)
actionpack (= 7.2.3)
actionview (= 7.2.3)
activejob (= 7.2.3)
activesupport (= 7.2.3)
actionmailer (7.2.3.1)
actionpack (= 7.2.3.1)
actionview (= 7.2.3.1)
activejob (= 7.2.3.1)
activesupport (= 7.2.3.1)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
actionpack (7.2.3)
actionview (= 7.2.3)
activesupport (= 7.2.3)
actionpack (7.2.3.1)
actionview (= 7.2.3.1)
activesupport (= 7.2.3.1)
cgi
nokogiri (>= 1.8.5)
racc
@ -36,36 +36,36 @@ GEM
actionpack-xml_parser (2.0.1)
actionpack (>= 5.0)
railties (>= 5.0)
actiontext (7.2.3)
actionpack (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
actiontext (7.2.3.1)
actionpack (= 7.2.3.1)
activerecord (= 7.2.3.1)
activestorage (= 7.2.3.1)
activesupport (= 7.2.3.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.2.3)
activesupport (= 7.2.3)
actionview (7.2.3.1)
activesupport (= 7.2.3.1)
builder (~> 3.1)
cgi
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
activejob (7.2.3)
activesupport (= 7.2.3)
activejob (7.2.3.1)
activesupport (= 7.2.3.1)
globalid (>= 0.3.6)
activemodel (7.2.3)
activesupport (= 7.2.3)
activerecord (7.2.3)
activemodel (= 7.2.3)
activesupport (= 7.2.3)
activemodel (7.2.3.1)
activesupport (= 7.2.3.1)
activerecord (7.2.3.1)
activemodel (= 7.2.3.1)
activesupport (= 7.2.3.1)
timeout (>= 0.4.0)
activestorage (7.2.3)
actionpack (= 7.2.3)
activejob (= 7.2.3)
activerecord (= 7.2.3)
activesupport (= 7.2.3)
activestorage (7.2.3.1)
actionpack (= 7.2.3.1)
activejob (= 7.2.3.1)
activerecord (= 7.2.3.1)
activesupport (= 7.2.3.1)
marcel (~> 1.0)
activesupport (7.2.3)
activesupport (7.2.3.1)
base64
benchmark (>= 0.3)
bigdecimal
@ -74,18 +74,20 @@ GEM
drb
i18n (>= 1.6, < 2)
logger (>= 1.4.2)
minitest (>= 5.1)
minitest (>= 5.1, < 6)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
addressable (2.8.9)
addressable (2.9.0)
public_suffix (>= 2.0.2, < 8.0)
ast (2.4.3)
auth-sanitizer (0.2.1)
version_gem (~> 1.1, >= 1.1.10)
base64 (0.3.0)
bcrypt (3.1.21)
bcrypt (3.1.22)
benchmark (0.5.0)
bigdecimal (4.0.1)
bigdecimal (4.1.2)
builder (3.3.0)
bullet (8.1.0)
bullet (8.1.3)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
bundle-audit (0.2.0)
@ -106,10 +108,10 @@ GEM
chunky_png (1.4.0)
commonmarker (2.3.2)
rb_sys (~> 0.9)
concurrent-ruby (1.3.6)
concurrent-ruby (1.3.7)
connection_pool (3.0.2)
crass (1.0.6)
css_parser (1.21.1)
css_parser (2.2.0)
addressable
csv (3.3.5)
date (3.5.1)
@ -120,18 +122,18 @@ GEM
domain_name (0.6.20240107)
doorkeeper (5.8.2)
railties (>= 5)
doorkeeper-i18n (5.2.8)
doorkeeper-i18n (5.2.9)
doorkeeper (>= 5.2)
drb (2.2.3)
erb (6.0.2)
erb (6.0.4)
erubi (1.13.1)
faraday (2.14.1)
faraday (2.14.3)
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-net_http (3.4.2)
faraday-net_http (3.4.4)
net-http (~> 0.5)
ffi (1.17.3)
ffi (1.17.4)
globalid (1.3.0)
activesupport (>= 6.1)
hashie (5.1.0)
@ -141,7 +143,7 @@ GEM
nokogiri (>= 1.4)
htmlentities (4.4.2)
http-accept (1.7.0)
http-cookie (1.1.0)
http-cookie (1.1.6)
domain_name (~> 0.5)
i18n (1.14.8)
concurrent-ruby (~> 1.0)
@ -150,13 +152,13 @@ GEM
activesupport (>= 6.0.0)
railties (>= 6.0.0)
io-console (0.8.2)
irb (1.17.0)
irb (1.18.0)
pp (>= 0.6.0)
prism (>= 1.3.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
json (2.19.1)
jwt (3.1.2)
json (2.19.9)
jwt (3.2.0)
base64
language_server-protocol (3.17.0.5)
lint_roller (1.1.0)
@ -165,7 +167,7 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
loofah (2.25.0)
loofah (2.25.1)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.8.1)
@ -173,12 +175,12 @@ GEM
net-imap
net-pop
net-smtp
marcel (1.1.0)
marcel (1.2.1)
matrix (0.4.3)
mime-types (3.7.0)
logger
mime-types-data (~> 3.2025, >= 3.2025.0507)
mime-types-data (3.2026.0303)
mime-types-data (3.2026.0414)
mini_magick (5.2.0)
benchmark
logger
@ -187,13 +189,13 @@ GEM
minitest (5.27.0)
mocha (3.1.0)
ruby2_keywords (>= 0.0.5)
multi_xml (0.8.1)
multi_xml (0.9.1)
bigdecimal (>= 3.1, < 5)
mysql2 (0.5.7)
bigdecimal
net-http (0.9.1)
uri (>= 0.11.1)
net-imap (0.5.13)
net-imap (0.5.15)
date
net-protocol
net-ldap (0.17.1)
@ -205,19 +207,20 @@ GEM
net-protocol
netrc (0.11.0)
nio4r (2.7.5)
nokogiri (1.19.1)
nokogiri (1.19.3)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oauth2 (2.0.18)
oauth2 (2.0.23)
auth-sanitizer (~> 0.2, >= 0.2.1)
faraday (>= 0.17.3, < 4.0)
jwt (>= 1.0, < 4.0)
logger (~> 1.2)
multi_xml (~> 0.5)
rack (>= 1.2, < 4)
snaky_hash (~> 2.0, >= 2.0.3)
version_gem (~> 1.1, >= 1.1.9)
parallel (1.27.0)
parser (3.3.10.2)
snaky_hash (~> 2.0, >= 2.0.6)
version_gem (~> 1.1, >= 1.1.11)
parallel (1.28.0)
parser (3.3.11.1)
ast (~> 2.4.1)
racc
pg (1.5.9)
@ -230,35 +233,35 @@ GEM
activesupport (>= 7.0.0)
rack
railties (>= 7.0.0)
psych (5.3.1)
psych (5.4.0)
date
stringio
public_suffix (7.0.5)
puma (7.2.0)
puma (8.0.2)
nio4r (~> 2.0)
racc (1.8.1)
rack (3.2.5)
rack-session (2.1.1)
rack (3.2.6)
rack-session (2.1.2)
base64 (>= 0.1.0)
rack (>= 3.0.0)
rack-test (2.2.0)
rack (>= 1.3)
rackup (2.3.1)
rack (>= 3)
rails (7.2.3)
actioncable (= 7.2.3)
actionmailbox (= 7.2.3)
actionmailer (= 7.2.3)
actionpack (= 7.2.3)
actiontext (= 7.2.3)
actionview (= 7.2.3)
activejob (= 7.2.3)
activemodel (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
rails (7.2.3.1)
actioncable (= 7.2.3.1)
actionmailbox (= 7.2.3.1)
actionmailer (= 7.2.3.1)
actionpack (= 7.2.3.1)
actiontext (= 7.2.3.1)
actionview (= 7.2.3.1)
activejob (= 7.2.3.1)
activemodel (= 7.2.3.1)
activerecord (= 7.2.3.1)
activestorage (= 7.2.3.1)
activesupport (= 7.2.3.1)
bundler (>= 1.15.0)
railties (= 7.2.3)
railties (= 7.2.3.1)
rails-dom-testing (2.3.0)
activesupport (>= 5.0.0)
minitest
@ -266,9 +269,9 @@ GEM
rails-html-sanitizer (1.7.0)
loofah (~> 2.25)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
railties (7.2.3)
actionpack (= 7.2.3)
activesupport (= 7.2.3)
railties (7.2.3.1)
actionpack (= 7.2.3.1)
activesupport (= 7.2.3.1)
cgi
irb (~> 1.13)
rackup (>= 1.0.0)
@ -277,13 +280,13 @@ GEM
tsort (>= 0.2)
zeitwerk (~> 2.6)
rainbow (3.1.1)
rake (13.3.1)
rake-compiler-dock (1.11.0)
rake (13.4.2)
rake-compiler-dock (1.12.0)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rb_sys (0.9.124)
rake-compiler-dock (= 1.11.0)
rb_sys (0.9.128)
rake-compiler-dock (= 1.12.0)
rbpdf (1.21.4)
htmlentities
rbpdf-font (~> 1.19.0)
@ -292,7 +295,7 @@ GEM
erb
psych (>= 4.0.0)
tsort
regexp_parser (2.11.3)
regexp_parser (2.12.0)
reline (0.6.3)
io-console (~> 0.5)
requestjs-rails (0.0.14)
@ -303,8 +306,8 @@ GEM
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
rexml (3.4.4)
roadie (5.2.1)
css_parser (~> 1.4)
roadie (5.3.0)
css_parser (>= 1.4, < 3.0)
nokogiri (~> 1.15)
roadie-rails (3.3.0)
railties (>= 5.1, < 8.1)
@ -346,7 +349,7 @@ GEM
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
securerandom (0.4.1)
selenium-webdriver (4.41.0)
selenium-webdriver (4.45.0)
base64 (~> 0.2)
logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
@ -358,7 +361,7 @@ GEM
simplecov_json_formatter (~> 0.1)
simplecov-html (0.13.2)
simplecov_json_formatter (0.1.4)
snaky_hash (2.0.3)
snaky_hash (2.0.6)
hashie (>= 0.1.0, < 6)
version_gem (>= 1.1.8, < 3)
sqlite3 (2.5.0)
@ -384,10 +387,10 @@ GEM
uniform_notifier (1.18.0)
uri (1.1.1)
useragent (0.16.11)
version_gem (1.1.9)
version_gem (1.1.12)
webrick (1.9.2)
websocket (1.2.11)
websocket-driver (0.8.0)
websocket-driver (0.8.1)
base64
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
@ -396,8 +399,8 @@ GEM
zeitwerk (>= 2.7)
xpath (3.2.0)
nokogiri (~> 1.8)
yard (0.9.38)
zeitwerk (2.7.5)
yard (0.9.44)
zeitwerk (2.8.2)
PLATFORMS
ruby
@ -436,7 +439,7 @@ DEPENDENCIES
propshaft (~> 1.1.0)
puma
rack (>= 3.1.3)
rails (= 7.2.3)
rails (= 7.2.3.1)
rails-dom-testing (>= 2.3.0)
rbpdf (~> 1.21.4)
requestjs-rails (~> 0.0.13)
@ -462,7 +465,7 @@ DEPENDENCIES
yard
RUBY VERSION
ruby 3.3.10p183
ruby 3.4.9p82
BUNDLED WITH
2.7.2

View file

@ -11,10 +11,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1yfl7blz9zlww0al921kmyqsmsx8gdphqjnszp5fgpzi8nr1fpg1";
sha256 = "0g5kbrqvhwlliyrzd2bhc3kdiqm58df0x3w716bs0ygwyjil1gyk";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
actionmailbox = {
dependencies = [
@ -29,10 +29,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0pjdrdlv14mzq24qx95hpxhfza0k72qc3qymaa6x1wihqfkz1fqn";
sha256 = "0hf59r6sk0qb5va0ga549rbadcb5n1a2ry8nlkszzcksr6039rx4";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
actionmailer = {
dependencies = [
@ -47,10 +47,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1f4axhrdhk9z3hjv6xzxqyj7c3y17mn7kz1li1fv5lm6aaw4dmk8";
sha256 = "0rq4aan18y6gwziabnj1q1486349k1v1i5m7ysv206pqqpavcy7m";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
actionpack = {
dependencies = [
@ -70,10 +70,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1kq7fbgb5yfsjd1na2ghc7assk18ca24kbvsx90p0xwm8v3f851a";
sha256 = "1jp4w493wvfh9246wxk7g00m1a3vmzkvs0rznq62fwvjjdzzwsmn";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
actionpack-xml_parser = {
dependencies = [
@ -102,10 +102,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0ds0m7qp55qkprhdkzpxrvbfiam95s58xj7555hf5d5pnzpxkzx6";
sha256 = "1qs350j3zm7sd6xxn61d93mv3lx1ravbjqja12c7nd7a0zs1h52v";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
actionview = {
dependencies = [
@ -120,10 +120,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1cpc91crvavdgvc3jqj1nqr9q6s581bm64894pbh8f5l85x7shhz";
sha256 = "0z7zy6ibfpsdj9jbdm54bx3ws4dszcq7qa564jn645rr8dlbh6fy";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
activejob = {
dependencies = [
@ -134,10 +134,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1c7zwmhkg9fpkl2isiggs9b2xbf8jf0hhbvmjfgbcrz25m3n8jg4";
sha256 = "1n3fiwm1x3dxwj36n9pspd2bgffyw28ys9yd36hjvf3iwdy25i0b";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
activemodel = {
dependencies = [ "activesupport" ];
@ -145,10 +145,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1nrr8w3hxkssgx13bcph8lb876hg57w01fbapy7fj4ijp6p6dbxv";
sha256 = "1l60a6mqx1wgp15ki1cp68djci0czgrikpydii5bd877hndqdq9r";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
activerecord = {
dependencies = [
@ -160,10 +160,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1mx087zngip62400z44p969l6fja1fjxliq6kym6npzbii3vgb3g";
sha256 = "0pd0f1hy6rvyanmrklqir33xq0jb2my4jajz7hc38nysfpi175dq";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
activestorage = {
dependencies = [
@ -177,10 +177,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0bya6k7i8s6538fa4j2c0a0xrf6kggg8mhrwnkkqj356zaxj452c";
sha256 = "1azzbpfp726yigwzmj8g2jji149wisnwrgb86zix6mk25sj4w8hb";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
activesupport = {
dependencies = [
@ -204,10 +204,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "043vbilaw855c91n5l7g0k0wxj63kngj911685qy74xc1mvwjxan";
sha256 = "0d6bhg9cim83g8cypjd7cms45ng4p9ga69v26i3vp823d98yvsqi";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
addressable = {
dependencies = [ "public_suffix" ];
@ -218,10 +218,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "11ali533wx91fh93xlk88gjqq8w0p7kxw09nlh41hwc9wv5ly5fc";
sha256 = "1by7h2lwziiblizpd5yx87jsq8ppdhzvwf08ga34wzqgcv1nmpvz";
type = "gem";
};
version = "2.8.9";
version = "2.9.0";
};
ast = {
groups = [
@ -236,6 +236,20 @@
};
version = "2.4.3";
};
auth-sanitizer = {
dependencies = [ "version_gem" ];
groups = [
"default"
"test"
];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0xy5gjb12kv6zjn4zyd16yfv4bygd02ykbr6cz10d6sqyw0wyzci";
type = "gem";
};
version = "0.2.1";
};
base64 = {
groups = [
"default"
@ -255,10 +269,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1krd99p9828n07rcjjms56jaqv7v6s9pn7y6bppcfhhaflyn2r2r";
sha256 = "0clhya4p8lhjj7hp31inp321wgzb0b5wbwppmya5sw1dikl7400z";
type = "gem";
};
version = "3.1.21";
version = "3.1.22";
};
benchmark = {
groups = [
@ -284,10 +298,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "19y406nx17arzsbc515mjmr6k5p59afprspa1k423yd9cp8d61wb";
sha256 = "1g9zi8c4i7g8zz0c3hxrw6mblrjvgn7akys60clb9si7c1k1gljk";
type = "gem";
};
version = "4.0.1";
version = "4.1.2";
};
builder = {
groups = [ "default" ];
@ -308,10 +322,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1zwq7g98c1mdigahb50c980a0fcc4ib1m9ivmgf3f8gc6qk7wjv0";
sha256 = "1jy7yfn94acbcn23g9zh48b8j9jphwcqgr2vfy013zi4fd93q5n8";
type = "gem";
};
version = "8.1.0";
version = "8.1.3";
};
bundle-audit = {
dependencies = [ "bundler-audit" ];
@ -398,10 +412,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1aymcakhzl83k77g2f2krz07bg1cbafbcd2ghvwr4lky3rz86mkb";
sha256 = "1c2i64xsd35vijnb50rxb70g508s0x674xi0qpyyb8jy7bncl4j4";
type = "gem";
};
version = "1.3.6";
version = "1.3.7";
};
connection_pool = {
groups = [
@ -433,10 +447,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1izp5vna86s7xivqzml4nviy01bv76arrd5is8wkncwp1by3zzbc";
sha256 = "09b3zwmx95jhdp3da6qx9w0d6s2yfpxjjip55wpwny5wsx3v5l93";
type = "gem";
};
version = "1.21.1";
version = "2.2.0";
};
csv = {
groups = [ "default" ];
@ -522,10 +536,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0lpmvaglypxlmaiqv4sjrf1b1sc8f589cv7xq3rr4j26vw0lf1g4";
sha256 = "195l8nfay1yb4igg348mjffikvh1m16b4899gyzz7ysgwkx3m9yy";
type = "gem";
};
version = "5.2.8";
version = "5.2.9";
};
drb = {
groups = [
@ -550,10 +564,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0ar4nmvk1sk7drjigqyh9nnps3mxg625b8chfk42557p8i6jdrlz";
sha256 = "1ncmbdjf2bwmk0jf5cxywns9zbxyfiy4h4p3pzi7yddyjhv81qrq";
type = "gem";
};
version = "6.0.2";
version = "6.0.4";
};
erubi = {
groups = [ "default" ];
@ -578,10 +592,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "077n5ss3z3ds4vj54w201kd12smai853dp9c9n7ii7g3q7nwwg54";
sha256 = "0y7j6yzv07zggic6g0p2v1ivnvkzsbqjnfdl4215qqb6cxz290hq";
type = "gem";
};
version = "2.14.1";
version = "2.14.3";
};
faraday-net_http = {
dependencies = [ "net-http" ];
@ -592,10 +606,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0v4hfmc7d4lrqqj2wl366rm9551gd08zkv2ppwwnjlnkc217aizi";
sha256 = "125m3qri52vwh5v9dhq0dkqxf8629cxrf99yyc01pva72wasyy0f";
type = "gem";
};
version = "3.4.2";
version = "3.4.4";
};
ffi = {
groups = [
@ -622,10 +636,10 @@
];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0k1xaqw2jk13q3ss7cnyvkp8fzp75dk4kazysrxgfd1rpgvkk7qf";
sha256 = "1kqasqvy8d7r09ri4n6bkdwbk63j7afd9ilsw34nzlgh0qp69ldw";
type = "gem";
};
version = "1.17.3";
version = "1.17.4";
};
globalid = {
dependencies = [ "activesupport" ];
@ -698,10 +712,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "06dvmngd4hwrr6k774i1h6c50h2l8nww9f1id0wvrvi72l6yd99q";
sha256 = "1aga7z4p0dka4zcqw9i05wa4ab1q7h7cgnj328ldqqfycjz84jxs";
type = "gem";
};
version = "1.1.0";
version = "1.1.6";
};
i18n = {
dependencies = [ "concurrent-ruby" ];
@ -762,10 +776,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1bishrxfn2anwlagw8rzly7i2yicjnr947f48nh638yqjgdlv30n";
sha256 = "1qs8a9vprg7s8krgq4s0pygr91hclqqyz98ik15p0m1sf2h5956y";
type = "gem";
};
version = "1.17.0";
version = "1.18.0";
};
json = {
groups = [
@ -775,10 +789,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0b888h9v2y4aasi9aapxqimiaj1i1csk56l22dczigs8kv2zv56x";
sha256 = "16mp8vzgxa8nsa81np042za453j8b0ihpjkf666s7byxrnvjb44v";
type = "gem";
};
version = "2.19.1";
version = "2.19.9";
};
jwt = {
dependencies = [ "base64" ];
@ -789,10 +803,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0dfm4bhl4fzn076igh0bmh2v1vphcrxdv6ldc46hdd3bkbqr2sdg";
sha256 = "1mqps8z4ly74hpksfajcfamqk1wb79biy187pn10knmi6zzb26al";
type = "gem";
};
version = "3.1.2";
version = "3.2.0";
};
language_server-protocol = {
groups = [
@ -859,10 +873,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1rk0n13c9nmk8di2x5gqk5r04vf8bkp7ff6z0b44wsmc7fndfpnz";
sha256 = "011fdngxzr1p9dq2hxqz7qq1glj2g44xnhaadjqlf48cplywfdnl";
type = "gem";
};
version = "2.25.0";
version = "2.25.1";
};
mail = {
dependencies = [
@ -885,10 +899,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1vhb1sbzlq42k2pzd9v0w5ws4kjx184y8h4d63296bn57jiwzkzx";
sha256 = "17w53z6vka8ddmxvi936biqv443d5yg0503wj7xfmy9j1qvfjy0n";
type = "gem";
};
version = "1.1.0";
version = "1.2.1";
};
matrix = {
groups = [
@ -928,10 +942,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "09627cnx432528j7j73711fbd0r30ri0lfsh9dfiki94b3gg2jhn";
sha256 = "1k28j6ww8rf43r5i8278jvm2cq3pnzsvqm7yqpb4p93kadjlq726";
type = "gem";
};
version = "3.2026.0303";
version = "3.2026.0414";
};
mini_magick = {
dependencies = [
@ -1008,10 +1022,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0nnzdswa9l6w8k5ndgbv5al9f0jkg14dqwzyic4fjd5c1cls1nxd";
sha256 = "0msflv26i6i3jr9w761k4qdl7cp9zbhymjkn57b1w90pkjsndrvw";
type = "gem";
};
version = "0.8.1";
version = "0.9.1";
};
mysql2 = {
dependencies = [ "bigdecimal" ];
@ -1047,10 +1061,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1c9p0r2z6j14g0vi323r6x4cs6w87xjvphlkxf7x63h2wsscgc7d";
sha256 = "0506bhwr62szwcagcvxayhwz0d20k5ax1sh742va3mjnnkqcfkgn";
type = "gem";
};
version = "0.5.13";
version = "0.5.15";
};
net-ldap = {
groups = [ "ldap" ];
@ -1134,13 +1148,14 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1lss1nh526n3h1qsig2kjchi8vlsjwc8pdjpplm1f2yz6rzk52sr";
sha256 = "1s30b7h7qpyim30m8060xs415mbr3ci7i5hdg09chh1aqfx2qcbq";
type = "gem";
};
version = "1.19.1";
version = "1.19.3";
};
oauth2 = {
dependencies = [
"auth-sanitizer"
"faraday"
"jwt"
"logger"
@ -1153,10 +1168,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "11rj80dgjz05x5xx93y4bfk9rcn7fl56srj8fgqn7ffzf3j13kxs";
sha256 = "0k428i1mlk6g7c054iks86g2h4h2p1y0mg2l3g6w84gd9l8604g6";
type = "gem";
};
version = "2.0.18";
version = "2.0.23";
};
parallel = {
groups = [
@ -1166,10 +1181,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0c719bfgcszqvk9z47w2p8j2wkz5y35k48ywwas5yxbbh3hm3haa";
sha256 = "0w697335hi5dk5ay9kyn53399sy87y8v0y6ij93m5wmshhadxrik";
type = "gem";
};
version = "1.27.0";
version = "1.28.0";
};
parser = {
dependencies = [
@ -1183,10 +1198,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0mwk9syajzdradzqzp3agf03d0cazqwbfd1439nxpkmxli5chq3g";
sha256 = "0m2xqvn1la62hji1mn04y59giikww95p2hs0r4y2rrz3mdxcwyni";
type = "gem";
};
version = "3.3.10.2";
version = "3.3.11.1";
};
pg = {
groups = [ "default" ];
@ -1270,10 +1285,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0x0r3gc66abv8i4dw0x0370b5hrshjfp6kpp7wbp178cy775fypb";
sha256 = "1dx5bc3s1mb1i53np4cdkypg7ccygnvagr3hglyndbqilrljvxql";
type = "gem";
};
version = "5.3.1";
version = "5.4.0";
};
public_suffix = {
groups = [
@ -1294,10 +1309,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1a3jd9qakasizrf7dkq5mqv51fjf02r2chybai2nskjaa6mz93mz";
sha256 = "1yw6nvkvddriacmva8hm0za0961d6j96dm7zm6748rmyzcfqgvf8";
type = "gem";
};
version = "7.2.0";
version = "8.0.2";
};
racc = {
groups = [
@ -1321,10 +1336,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1lyn3rh71rlf50p44xmsbha0pip4c95004j8kc9pm7xpq1s0kgac";
sha256 = "1hhjy9gcp52dzij05gmidqac8g28ski5xm67prwmdqmjfcgqxmsy";
type = "gem";
};
version = "3.2.5";
version = "3.2.6";
};
rack-session = {
dependencies = [
@ -1335,10 +1350,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1sg4laz2qmllxh1c5sqlj9n1r7scdn08p3m4b0zmhjvyx9yw0v8b";
sha256 = "1s7zcxlmg88a6dam4aqbgk9xkpy6dkdfqmmcszkkliy3q3w38m2r";
type = "gem";
};
version = "2.1.1";
version = "2.1.2";
};
rack-test = {
dependencies = [ "rack" ];
@ -1384,10 +1399,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1zwvc2fa0hm27ygfz1yc2bs52h4wzj1nhpv6cip6g28i2gmi564s";
sha256 = "155skqkjrckvzj1qy37lrnafrillc47qhf3l80g3zvw100ba1h4n";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
rails-dom-testing = {
dependencies = [
@ -1434,10 +1449,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "08h44mkf91861agp7xw778gqpf5mppydsfgphgkj7wp6pyk11c3f";
sha256 = "0np1m8xqb4wbzwpg66yjnqjban0di92lbjzcrgnwwhq2w4z3k8xf";
type = "gem";
};
version = "7.2.3";
version = "7.2.3.1";
};
rainbow = {
groups = [
@ -1457,20 +1472,20 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "175iisqb211n0qbfyqd8jz2g01q6xj038zjf4q0nm8k6kz88k7lc";
sha256 = "009p524zl0p0kfa65nii8wdmaigkmawv9pbvlcffky7islmmp0nb";
type = "gem";
};
version = "13.3.1";
version = "13.4.2";
};
rake-compiler-dock = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1hpq52ab86s70yv5hk56f0z14izhh59af95nlv73bsrksln1zdga";
sha256 = "08w033c3p25wr0zwbgx0b4mb4ha5kqd4j0ydmx9j0gcgfg10acpi";
type = "gem";
};
version = "1.11.0";
version = "1.12.0";
};
rb-fsevent = {
groups = [
@ -1505,10 +1520,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1rvshyirm32lzf2sggcrhvz5hi828s3rznmkchvzgshjgdapcd2i";
sha256 = "1z9q0l9l5r210jsmcmq3lxd4fr0j5lv348kn33g9a62fdm6izf4s";
type = "gem";
};
version = "0.9.124";
version = "0.9.128";
};
rbpdf = {
dependencies = [
@ -1561,10 +1576,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "192mzi0wgwl024pwpbfa6c2a2xlvbh3mjd75a0sakdvkl60z64ya";
sha256 = "1fwfw26a32rps78920nn29shqg2zmqv72i89j1fap41isshida9m";
type = "gem";
};
version = "2.11.3";
version = "2.12.0";
};
reline = {
dependencies = [ "io-console" ];
@ -1630,10 +1645,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1mh1a0m0i0xrm20nry4d3gf0q5kbmm5lp15n52r93gcjwwfgd974";
sha256 = "1jlzxlq52qbsacxkz4gny988j2pcip73ydp1fg9s1q98ra4h6554";
type = "gem";
};
version = "5.2.1";
version = "5.3.0";
};
roadie-rails = {
dependencies = [
@ -1843,10 +1858,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "08nxpr0lxn95ml19n0vy6dnw1gnhq9n1b0za5h18dwawsly1ghfd";
sha256 = "1lg22fmcalwnzgnanswn5g7vc24wmancnvbyf1ynzb46vyj6bb7c";
type = "gem";
};
version = "4.41.0";
version = "4.45.0";
};
simplecov = {
dependencies = [
@ -1901,10 +1916,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0mnllrwhs7psw6xxs8x5yx85k12qjfdgs8zs0bxm70bfascx58r5";
sha256 = "0jk50mjq69065ygdhkhbmxp9k2c7knizhp022ysq5xfyikjclqrn";
type = "gem";
};
version = "2.0.3";
version = "2.0.6";
};
sqlite3 = {
dependencies = [ "mini_portile2" ];
@ -2105,10 +2120,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "195r5qylwxwqbllnpli9c2pzin0lky6h3fw912h88g2lmri0j6hc";
sha256 = "0gfv1qxfn202xffasw2mrrrf2jkdp6hsps0177k9fyc0fwb6k3xp";
type = "gem";
};
version = "1.1.9";
version = "1.1.12";
};
webrick = {
groups = [ "default" ];
@ -2142,10 +2157,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0qj9dmkmgahmadgh88kydb7cv15w13l1fj3kk9zz28iwji5vl3gd";
sha256 = "15idgibqpdaj97f734drx8a7k1jcc8wvxlk2nbafac72ihikicjs";
type = "gem";
};
version = "0.8.0";
version = "0.8.1";
};
websocket-extensions = {
groups = [ "default" ];
@ -2190,19 +2205,19 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "03q1hf12csqy5q2inafzi44179zaq9n5yrb0k2j2llqhzcmbh7vj";
sha256 = "0a3zi3v7qjm7lm4yp9z2sm959533k543sc4z0ixqik8wcfdpw27b";
type = "gem";
};
version = "0.9.38";
version = "0.9.44";
};
zeitwerk = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1pbkiwwla5gldgb3saamn91058nl1sq1344l5k36xsh9ih995nnq";
sha256 = "04hx33lsnp4q0qf8982mz0acs1dap5s2bsmihi0n0g08249sc4kj";
type = "gem";
};
version = "2.7.5";
version = "2.8.2";
};
}

View file

@ -15,7 +15,7 @@
}:
let
version = "6.1.2";
version = "6.1.3";
rubyEnv = bundlerEnv {
name = "redmine-env-${version}";
@ -69,7 +69,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
src = fetchurl {
url = "https://www.redmine.org/releases/redmine-${finalAttrs.version}.tar.gz";
hash = "sha256-k46XXoCMz7Sw3LrYtC8Cqs8Mqe8VSRw4xa9HVnQMzwg=";
hash = "sha256-YdswCMf9GKOvxVntZW/Tj9+N+CIKxpWYsxkJUYMZC3o=";
};
nativeBuildInputs = [ makeWrapper ];

View file

@ -11,16 +11,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "rescrobbled";
version = "0.9.1";
version = "0.10.0";
src = fetchFromGitHub {
owner = "InputUsername";
repo = "rescrobbled";
rev = "v${finalAttrs.version}";
hash = "sha256-pk8eWq3GOF0f6Xvt4VJezxW+vWnfk7W0sKn+Yvd7PHs=";
hash = "sha256-q8zxv4fSk+rUG4zQkZFNgkqSU3+FqgTzJzzjeSHy3Io=";
};
cargoHash = "sha256-EpQoi/pPIJN5sOZic/J8A3Co4o27Gi2SW/OaZHBFU2Y=";
cargoHash = "sha256-pWdA48WqcNd9/daZE7gyoGTkH01i3MBv1SMGdfE2ZS0=";
nativeBuildInputs = [ pkg-config ];

View file

@ -7,15 +7,15 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "reticulated";
version = "1.0.2";
version = "1.0.3";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "RFnexus";
repo = "reticulated";
tag = finalAttrs.version;
hash = "sha256-55eK9AObUw8JLn4sNC5O8dNrfscwTwQpkVQAR+O9Lcw=";
tag = "v${finalAttrs.version}";
hash = "sha256-02vdSKAEb59VucoDe5M+uSiNdyMybfQnhCr+LzGyNT0=";
};
postPatch = ''

View file

@ -3,7 +3,7 @@
stdenv,
lib,
nodejs_24,
pnpm_10_29_2,
pnpm_10,
node-gyp,
fetchPnpmDeps,
pnpmConfigHook,
@ -32,7 +32,7 @@ assert lib.warnIf (commandLineArgs != "")
true;
let
nodejs = nodejs_24;
pnpm = pnpm_10_29_2;
pnpm = pnpm_10;
electron = electron_42;
libsignal-node = callPackage ./libsignal-node.nix { inherit nodejs; };

View file

@ -8,13 +8,13 @@
buildGoModule (finalAttrs: {
pname = "skeema";
version = "1.13.2";
version = "1.14.0";
src = fetchFromGitHub {
owner = "skeema";
repo = "skeema";
tag = "v${finalAttrs.version}";
hash = "sha256-Gy+AYjUEi3wvXX9j5jCOs7/Qk0bgIt20cjY+SSP+uQI=";
hash = "sha256-xcGHzsVV3rn8l7oYu+RD4njyI1KW/fU9iGdwZW7W5PA=";
};
vendorHash = null;

View file

@ -9,16 +9,16 @@
buildGoModule (finalAttrs: {
pname = "spacectl";
version = "1.22.0";
version = "1.23.0";
src = fetchFromGitHub {
owner = "spacelift-io";
repo = "spacectl";
rev = "v${finalAttrs.version}";
hash = "sha256-2wy5I3wmBtp239gdcL8s+SuXWajx9EB+s3xBYxy55ok=";
hash = "sha256-9YhA1clYaPbrY/kAS51Qo20EDPSPOKwN5iLUUJ4sE60=";
};
vendorHash = "sha256-+ahiiboLKu/LazJzsxoE39hbF73TSuguPkKCSS7m2BA=";
vendorHash = "sha256-1ue5NHt/+QCtmzwQder6H7WqRBJ42on53ixuD+wiZpg=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -8,16 +8,16 @@
buildGoModule (finalAttrs: {
pname = "spicedb";
version = "1.53.0";
version = "1.54.0";
src = fetchFromGitHub {
owner = "authzed";
repo = "spicedb";
tag = "v${finalAttrs.version}";
hash = "sha256-kmhLvHPqHqSFkfUx9pr52Vvz+YgCPwknHqSY4zpVPtI=";
hash = "sha256-A07AHCfXZtd5Z71jRxIx6oIipCFskPzYtgSHv21zKpE=";
};
vendorHash = "sha256-G3isae85B6Js6H7XFAJ+v00caBV4+PO9IPCpHXzkBOs=";
vendorHash = "sha256-VZYkS1UQ7w/BUYFF8FrjgsnYn7sNexNVczmrMvYERGY=";
ldflags = [
"-X 'github.com/jzelinskie/cobrautil/v2.Version=${finalAttrs.src.tag}'"

View file

@ -64,7 +64,10 @@ rustPlatform.buildRustPackage (finalAttrs: {
cargoHash = "sha256-HVS89Wtjb2nIdyygP8bPRbVhyMRnJlZDfoCQqiMdVe0=";
env = {
# https://docs.rs/openssl/latest/openssl/#manual
OPENSSL_NO_VENDOR = true;
OPENSSL_DIR = lib.getDev openssl;
OPENSSL_LIB_DIR = "${lib.getLib openssl}/lib";
ZSTD_SYS_USE_PKG_CONFIG = true;
ROCKSDB_INCLUDE_DIR = "${rocksdb}/include";
ROCKSDB_LIB_DIR = "${rocksdb}/lib";

View file

@ -189,7 +189,7 @@ stdenv.mkDerivation (
find "$out"/libexec/t3code -xtype l -delete
makeWrapper ${lib.getExe nodejs} "$out"/bin/t3code \
makeWrapper ${lib.getExe nodejs} "$out"/bin/t3 \
--add-flags "$out"/libexec/t3code/apps/server/dist/bin.mjs ${runtimePathWrapperArgs}
makeWrapper ${lib.getExe electron} "$out"/bin/t3code-desktop \
@ -220,7 +220,7 @@ stdenv.mkDerivation (
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
for shell in bash fish zsh; do
installShellCompletion --cmd t3code --"$shell" <("$out/bin/t3code" --completions "$shell")
installShellCompletion --cmd t3 --"$shell" <("$out/bin/t3" --completions "$shell")
done
'';

View file

@ -7,16 +7,16 @@
buildGoModule (finalAttrs: {
pname = "tanka";
version = "0.37.3";
version = "0.37.4";
src = fetchFromGitHub {
owner = "grafana";
repo = "tanka";
rev = "v${finalAttrs.version}";
sha256 = "sha256-C1Tg3ruitMa3t7FA74m73oL+kd7AvPGvnA66/x9VOpw=";
sha256 = "sha256-quj1fZ5FeiH9KBO+rmHUYaXVkASWFBbj6Q6C9+vZsOk=";
};
vendorHash = "sha256-nEiHJgEnq3KrPO0geNAz7NIp7tvCvtAUF8eNeP7NjPM=";
vendorHash = "sha256-p9MGbZudHBiOfHc6qxBVVl/IGlCjwUbSDLW0lktKCGM=";
doCheck = false;
# Required for versions >= 0.28 as they introduce a gowork.sum file. This is only used for tests so we can safely disable GOWORK

View file

@ -1,31 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 063fd793..99998a6b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -377,3 +377,13 @@ install(
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
+
+# -----------------------------------------------------------------------------
+# pkg-config
+# -----------------------------------------------------------------------------
+
+configure_file(taskflow.pc.in taskflow.pc @ONLY)
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/taskflow.pc
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
+)
diff --git a/taskflow.pc.in b/taskflow.pc.in
new file mode 100644
index 00000000..fc649288
--- /dev/null
+++ b/taskflow.pc.in
@@ -0,0 +1,7 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
+
+Name: Taskflow
+Description: A General-purpose Task-parallel Programming System
+Version: @PROJECT_VERSION@
+Cflags: -I${includedir}

View file

@ -10,32 +10,19 @@
stdenv.mkDerivation (finalAttrs: {
pname = "taskflow";
version = "4.0.0";
version = "4.1.0";
src = fetchFromGitHub {
owner = "taskflow";
repo = "taskflow";
tag = "v${finalAttrs.version}";
hash = "sha256-cWnKA6tCsKRfkleBJ38NRP2ciJu4sHtyTS8y5bBTfcA=";
hash = "sha256-IxorLV5qQ8veFiwRka8k5oMR51KTUn10MbCIYNVToLk=";
};
patches = [
(replaceVars ./unvendor-doctest.patch {
inherit doctest;
})
# https://github.com/taskflow/taskflow/pull/785
# TODO: remove when updating to the next release
(fetchpatch {
name = "fix-brace-init-with-explicit-constructor-for-GCC-15";
url = "https://github.com/taskflow/taskflow/commit/de7dfe30594cd1f98398095b970a8320734a2382.patch";
hash = "sha256-Ecl7dFvf2HDslv/5IHR5J2PYcRCN3EA4GahxOzcUS4g=";
})
# Vendored from #786 as it does not apply cleanly on top of v0.4.0
# https://github.com/taskflow/taskflow/pull/786
# TODO: remove when updating to the next release
./add-pkg-config-support.patch
];
postPatch = ''

View file

@ -7,11 +7,11 @@
}:
buildTeleport {
version = "17.7.24";
hash = "sha256-45vaxznxRfa4X/V7hZsQKVIWvbVG8F2cEQN19xp4WQg=";
version = "17.7.25";
hash = "sha256-IrelrkTvOBcTkO7cHf572MU5KkOQq3we53dgFsDCSRo=";
vendorHash = "sha256-ERwCdWdp230wkqsRUCnd1hbO4PqXo+gDPsoGbxQqt04=";
cargoHash = "sha256-cDcDfptq8z0pwjImuAovv/5XwoaPb/ostyxkyNEbkRM=";
pnpmHash = "sha256-hk9DI3GSBm2XttCYCi5kjhEhUMm5ToRQcbT+RYI+S2Q=";
cargoHash = "sha256-BE/TBZoOaB3Th14E+t3qJ+0Uww56TtRA1sRQ+usFo+Y=";
pnpmHash = "sha256-TARwHswSWbKk2eoyynuaOm7pvt2CwbjtklqnM+9/YXM=";
wasm-bindgen-cli = wasm-bindgen-cli_0_2_95;
inherit buildGoModule withRdpClient extPatches;

View file

@ -7,11 +7,11 @@
}:
buildTeleport {
version = "18.8.3";
hash = "sha256-DHPOWIvzBCOT3GU0YHBtG46ctB0Nh8XwSmpl9vgCET8=";
vendorHash = "sha256-0+fIoprAQyoom9xBpXGiEgmE4dWktcqlZQOzkRXYlKo=";
pnpmHash = "sha256-8FlC9Sm12A5kfS9X0qYDNJOePZjeJU7LDTRlWUIEneA=";
cargoHash = "sha256-IX0HCeCosXCe/oTYa8PImemf9op2AeagSnl44uBnSbM=";
version = "18.9.1";
hash = "sha256-FIPExc8tMoPXfWc7pQjwQRkxmiQEOxdkYgWS0GejQuk=";
vendorHash = "sha256-BlQhypAoK85ID0pgmXbUboks88qjSg3p5E8qxyTIc9M=";
pnpmHash = "sha256-ZGbuBMPwC3u/2qDTVLH2InOGVc94Vq0i3AKHMsOwq3k=";
cargoHash = "sha256-KbmacTEOElmboHMK6YxWGC0brlDsX7kcvpaOOZmuops=";
wasm-bindgen-cli = wasm-bindgen-cli_0_2_99;
buildGoModule = buildGo125Module;

View file

@ -11,16 +11,16 @@
buildGoModule (finalAttrs: {
pname = "temporal-cli";
version = "1.7.1";
version = "1.7.2";
src = fetchFromGitHub {
owner = "temporalio";
repo = "cli";
tag = "v${finalAttrs.version}";
hash = "sha256-8e6sBlUC+N4P7FO4EOtc7sDzSAZwDovN+cGpV+rWObs=";
hash = "sha256-HlG/zBfyd120ENERqdpfPuHPwu84bWijzoE4tEOsOeE=";
};
vendorHash = "sha256-N9K05Kcb0YaQO7M9gR22QzAOzbmgEhIqADcAESqYtQ8=";
vendorHash = "sha256-GI+rLSCwBRcZytbJsxqCL1+3p5/UbCvTxUHn2ele3+c=";
__structuredAttrs = true;

View file

@ -109,6 +109,18 @@ This includes build-related flags and metadata.
}
```
## Building WebAssembly Parsers
`buildGrammar` builds a native `$out/parser`.
To build grammars as WebAssembly instead, use the `wasi32` cross package set, which installs `$out/parser.wasm`:
```nix
pkgsCross.wasi32.tree-sitter.builtGrammars.tree-sitter-nix
```
The Wasm build compiles `parser.c` and a C `scanner.c`.
Grammars with C++ external scanners are rejected; use the native `buildGrammar` for those.
## Updating
All grammar sources have a default update script defined.

View file

@ -16,6 +16,11 @@
...
}@args:
let
isWasi = stdenv.hostPlatform.isWasi;
parserOutput = if isWasi then "parser.wasm" else "parser";
exportSymbol = "tree_sitter_${lib.replaceStrings [ "-" ] [ "_" ] language}";
in
stdenv.mkDerivation (
{
pname = "tree-sitter-${language}";
@ -32,11 +37,18 @@ stdenv.mkDerivation (
CFLAGS = [
"-Isrc"
"-O2"
# Match upstream `tree-sitter build --wasm`
(if isWasi then "-Os" else "-O2")
]
++ lib.optionals isWasi [
"-fvisibility=hidden"
];
CXXFLAGS = [
"-Isrc"
"-O2"
(if isWasi then "-Os" else "-O2")
]
++ lib.optionals isWasi [
"-fvisibility=hidden"
];
stripDebugList = [ "parser" ];
@ -90,25 +102,44 @@ stdenv.mkDerivation (
tree-sitter generate
'';
# When both scanner.{c,cc} exist, we should not link both since they may be the same but in
# different languages. Just randomly prefer C++ if that happens.
buildPhase = ''
runHook preBuild
if [[ -e src/scanner.cc ]]; then
$CXX -fPIC -c src/scanner.cc -o scanner.o $CXXFLAGS
elif [[ -e src/scanner.c ]]; then
$CC -fPIC -c src/scanner.c -o scanner.o $CFLAGS
fi
$CC -fPIC -c src/parser.c -o parser.o $CFLAGS
rm -rf parser
$CXX -shared -o parser *.o
runHook postBuild
'';
buildPhase =
if isWasi then
''
runHook preBuild
if [[ -e src/scanner.cc || -e src/scanner.cpp ]]; then
nixErrorLog "tree-sitter wasm grammars only support C external scanners"
exit 1
fi
if [[ -e src/scanner.c ]]; then
$CC -fPIC -c src/scanner.c -o scanner.o $CFLAGS
fi
$CC -fPIC -c src/parser.c -o parser.o $CFLAGS
rm -rf parser.wasm
$CC -shared -o parser.wasm *.o \
-Wl,--export=${exportSymbol} \
-Wl,--allow-undefined \
-Wl,--no-entry \
-nostdlib
runHook postBuild
''
else
''
runHook preBuild
if [[ -e src/scanner.cc ]]; then
$CXX -fPIC -c src/scanner.cc -o scanner.o $CXXFLAGS
elif [[ -e src/scanner.c ]]; then
$CC -fPIC -c src/scanner.c -o scanner.o $CFLAGS
fi
$CC -fPIC -c src/parser.c -o parser.o $CFLAGS
rm -rf parser
$CXX -shared -o parser *.o
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir $out
mv parser $out/
mv ${parserOutput} $out/
if [[ -f tree-sitter.json ]]; then
cp tree-sitter.json $out/
fi

View file

@ -6,13 +6,14 @@
fetchpatch,
fetchFromCodeberg,
nix-update-script,
stdenv,
}:
let
/**
Set of grammar sources. See ./grammar-sources.nix to define a new grammar.
*/
grammar-sources = import ./grammar-sources.nix { inherit lib fetchpatch; };
grammar-sources = import ./grammar-sources.nix { inherit lib fetchpatch stdenv; };
/**
Parse a flakeref style string to { type, owner, repo, ref }

View file

@ -1,4 +1,8 @@
{ fetchpatch, lib }:
{
fetchpatch,
lib,
stdenv,
}:
{
@ -1757,6 +1761,8 @@
url = "github:nvim-neorg/tree-sitter-norg";
hash = "sha256-z3h5qMuNKnpQgV62xZ02F5vWEq4VEnm5lxwEnIFu+Rw=";
meta = {
# Uses a C++ external scanner, unsupported by the WASM grammar build.
broken = stdenv.hostPlatform.isWasi;
license = lib.licenses.mit;
};
};

View file

@ -10,6 +10,7 @@
nix-update-script,
which,
rustPlatform,
runCommand,
emscripten,
openssl,
pkg-config,
@ -60,6 +61,7 @@ let
fetchFromSourcehut
fetchFromCodeberg
fetchpatch
stdenv
;
};
@ -112,6 +114,8 @@ let
allGrammars = lib.filter (p: !(p.meta.broken or false)) (lib.attrValues builtGrammars);
isWasi = stdenv.hostPlatform.isWasi;
in
rustPlatform.buildRustPackage (finalAttrs: {
pname = "tree-sitter";
@ -246,6 +250,19 @@ rustPlatform.buildRustPackage (finalAttrs: {
tests = {
# make sure all grammars build
builtGrammars = lib.recurseIntoAttrs builtGrammars;
}
// lib.optionalAttrs isWasi {
wasmGrammar =
let
grammar = builtGrammars.tree-sitter-nix;
in
runCommand "tree-sitter-wasm-grammar-test" { } ''
test -f ${grammar}/parser.wasm
# WebAssembly binaries start with "\0asm".
test "$(od -An -tx1 -N4 ${grammar}/parser.wasm | tr -d ' \n')" = "0061736d"
test ! -e ${grammar}/parser
touch $out
'';
};
};

View file

@ -7,16 +7,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "uutils-tar";
version = "0-unstable-2026-06-15";
version = "0-unstable-2026-06-23";
src = fetchFromGitHub {
owner = "uutils";
repo = "tar";
rev = "4c1c362e5766760b7ffc120f0ccf25a5344122c5";
hash = "sha256-oLa9KGqcSay3u6Jt3BMNz/evwS3g7u627qOhlqR+1Eg=";
rev = "ad4e2e31cc9547868dc9137c882db0ea45f89d32";
hash = "sha256-p4dkjLwV8SUDGx/atIajYW19+eDgC0AGlHzFOoVHFlA=";
};
cargoHash = "sha256-xZqRhBq5zhCvJ6/qAXYNsylFpph6EiPobH0SuWHCtes=";
cargoHash = "sha256-aY0dJaYmpQkeFUcYJDnknwEdopa0Sf1hs4Yux+bSBDo=";
cargoBuildFlags = [ "--workspace" ];

View file

@ -22,13 +22,13 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "vencord";
version = "1.14.13";
version = "1.14.15";
src = fetchFromGitHub {
owner = "Vendicated";
repo = "Vencord";
tag = "v${finalAttrs.version}";
hash = "sha256-Xqk/akTa/NcHjSm6h77y6Fkvq7ayBcR0w0HG0Hwfkf8=";
hash = "sha256-jQeLZa1rpKDkzWSpAqOa8snGRKLpv9xf9cwJ6hUwMzA=";
};
patches = [ ./fix-deps.patch ];
@ -46,8 +46,8 @@ stdenv.mkDerivation (finalAttrs: {
postPatch
;
inherit pnpm;
fetcherVersion = 3;
hash = "sha256-hk1rnNog5xvuIVI0M1ZJ5xrEuk0zcBiYsbROUycdi+A=";
fetcherVersion = 4;
hash = "sha256-pm5f6bGm07pzNCqpDHRyKFnuX2ZTE5w9BtJu5xXPHiI=";
};
nativeBuildInputs = [

View file

@ -7,14 +7,14 @@
python3.pkgs.buildPythonApplication (finalAttrs: {
pname = "vunnel";
version = "0.60.0";
version = "0.61.1";
pyproject = true;
src = fetchFromGitHub {
owner = "anchore";
repo = "vunnel";
tag = "v${finalAttrs.version}";
hash = "sha256-CnWD021r5I9xH1YRp5RO520hq8eIHPJcPomq/UiJ9gA=";
hash = "sha256-rxA+BVu+TkegZ6RXirzlxPxpURXdFT6KvSNSPPlef7U=";
leaveDotGit = true;
};

View file

@ -1,43 +1,41 @@
{
lib,
python3,
python3Packages,
fetchFromGitHub,
}:
python3.pkgs.buildPythonApplication (finalAttrs: {
python3Packages.buildPythonApplication (finalAttrs: {
pname = "wayback-machine-archiver";
version = "1.9.1";
version = "3.5.2";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "agude";
repo = "wayback-machine-archiver";
rev = "v${finalAttrs.version}";
sha256 = "0dnnqx507gpj8wsx6f2ivfmha969ydayiqsvxh23p9qcixw9257x";
tag = "v${finalAttrs.version}";
hash = "sha256-LUWPc1wMSpBIdaje/pbmQYHTrYog/9UiphMY1fzxgPc=";
};
build-system = with python3.pkgs; [
setuptools
pypandoc
build-system = with python3Packages; [ setuptools ];
dependencies = with python3Packages; [
requests
python-dotenv
];
dependencies = with python3.pkgs; [ requests ];
nativeCheckInputs = with python3.pkgs; [
nativeCheckInputs = with python3Packages; [
pytestCheckHook
requests-mock
];
postPatch = ''
substituteInPlace setup.py \
--replace-fail \"pytest-runner\", ""
'';
pythonImportsCheck = [ "wayback_machine_archiver" ];
meta = {
description = "Python script to submit web pages to the Wayback Machine for archiving";
homepage = "https://github.com/agude/wayback-machine-archiver";
changelog = "https://github.com/agude/wayback-machine-archiver/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ dandellion ];
mainProgram = "archiver";

View file

@ -10,17 +10,17 @@
}:
buildGoModule (finalAttrs: {
pname = "werf";
version = "2.70.0";
version = "2.72.1";
src = fetchFromGitHub {
owner = "werf";
repo = "werf";
tag = "v${finalAttrs.version}";
hash = "sha256-3Oe/IjmzD7+LE6OVLACDgknrl4cb9yJ/lDvKBjrvFNQ=";
hash = "sha256-6CspoMRKPf20zQrmgD2RO6xMnTuyvM56AElKvMNNUM0=";
};
proxyVendor = true;
vendorHash = "sha256-iMoR38Qb2utzdkhKUrCQ0Ohm8f6jdYTuLkeMhCLqvN4=";
vendorHash = "sha256-Ot2P417uqtdpxBd46NelxThF4Ca7krIInVfJ4OxnTRI=";
nativeBuildInputs = [ installShellFiles ];
buildInputs =

View file

@ -5,11 +5,9 @@
buildGo126Module,
makeWrapper,
nix-update-script,
v2ray-geoip,
v2ray-domain-list-community,
v2ray-rules-dat,
assets ? [
v2ray-geoip
v2ray-domain-list-community
v2ray-rules-dat
],
}:

View file

@ -798,10 +798,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1aymcakhzl83k77g2f2krz07bg1cbafbcd2ghvwr4lky3rz86mkb";
sha256 = "1c2i64xsd35vijnb50rxb70g508s0x674xi0qpyyb8jy7bncl4j4";
type = "gem";
};
version = "1.3.6";
version = "1.3.7";
};
connection_pool = {
groups = [
@ -1355,10 +1355,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1b930ag8nh99v8n9645ac1wcah9fx0mclbp323q4i1ly9acvkk3k";
sha256 = "0y7j6yzv07zggic6g0p2v1ivnvkzsbqjnfdl4215qqb6cxz290hq";
type = "gem";
};
version = "2.14.2";
version = "2.14.3";
};
faraday-follow_redirects = {
dependencies = [ "faraday" ];
@ -1815,10 +1815,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1anz6a6n33x4s3906s0bz6x161kk1ns3h7xxsn3rpxkfsw7k2m33";
sha256 = "16mp8vzgxa8nsa81np042za453j8b0ihpjkf666s7byxrnvjb44v";
type = "gem";
};
version = "2.19.8";
version = "2.19.9";
};
json-jwt = {
dependencies = [
@ -2325,10 +2325,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1s30b7h7qpyim30m8060xs415mbr3ci7i5hdg09chh1aqfx2qcbq";
sha256 = "1d9safb4dly6qmc2g06444l0zifby52yy6j1a5fa1g4j3ihm3jah";
type = "gem";
};
version = "1.19.3";
version = "1.19.4";
};
nori = {
dependencies = [ "bigdecimal" ];

View file

@ -23,7 +23,7 @@
let
pname = "zammad";
version = "7.1.0";
version = "7.1.1";
src = applyPatches {
src = fetchFromGitHub (lib.importJSON ./source.json);

View file

@ -1,8 +1,8 @@
{
"owner": "zammad",
"repo": "zammad",
"rev": "ecbb861ce33908e4b52bb2c78d816a0eef69e6a6",
"hash": "sha256-5mK120Oo8LEIA7yY9erc57WRUeCwzsIamTiAxPgePIQ=",
"rev": "cdd01e9160ec4b90e869ccf4aa3d99eb223032e7",
"hash": "sha256-BCrvhH5pgqG2jM3qE4NmtHXzKuSELHhI0QU3KIXUbMo=",
"fetchSubmodules": true
}

View file

@ -8,7 +8,7 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "zensical";
version = "0.0.45";
version = "0.0.46";
pyproject = true;
# We fetch from PyPi, because GitHub repo does not contain all sources.
@ -16,12 +16,12 @@ python3Packages.buildPythonApplication (finalAttrs: {
# We could combine sources, but then nix-update won't work.
src = fetchPypi {
inherit (finalAttrs) pname version;
hash = "sha256-MVvOSrBHAzjdNYit04+zJfhAhWw3VyLmgCvVigZEYmY=";
hash = "sha256-PsIfT7HnjNfA1rB64zawR3Die6Ag2rxFeyeQ5dNPGXg=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (finalAttrs) pname version src;
hash = "sha256-f2CNYnHLZrffyMw/lZq/cVb5sB1+CfZzlAtQUMvlwqE=";
hash = "sha256-RNd7C6dRfH59ah2rbwYuwJGU+mDZKqXUwFX8+NfLkgY=";
};
nativeBuildInputs = with rustPlatform; [

View file

@ -23,7 +23,7 @@ python3Packages.buildPythonApplication {
--replace-fail 'from configparser import SafeConfigParser' 'from configparser import ConfigParser as SafeConfigParser'
'';
propagatedBuildInputs = [ python3Packages.gpgme ];
propagatedBuildInputs = [ python3Packages.gpg ];
installPhase = ''
runHook preInstall

View file

@ -15,14 +15,14 @@
buildPythonPackage (finalAttrs: {
pname = "aioamazondevices";
version = "14.1.3";
version = "14.1.8";
pyproject = true;
src = fetchFromGitHub {
owner = "chemelli74";
repo = "aioamazondevices";
tag = "v${finalAttrs.version}";
hash = "sha256-MUPj3smDMOCV+g1cC6YKWSGYvB1UD8OKzlil61H4rZg=";
hash = "sha256-54nlWZGLYTHbieVtYqUyP1Y3VZ98NhDEnmSzx+cPfJQ=";
};
build-system = [ poetry-core ];

View file

@ -11,14 +11,14 @@
buildPythonPackage rec {
pname = "aioecowitt";
version = "2025.9.2";
version = "2026.6.0";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "aioecowitt";
tag = version;
hash = "sha256-lQ2t8u3+sk8wnNfCZs2yhe9nsZwiGBHXPDz95egacsI=";
hash = "sha256-xnF2Zn0XfV7elYGPCfY0WKzmDyFKXU3yh6Bab7llbzw=";
};
build-system = [ setuptools ];

View file

@ -7,12 +7,13 @@
buildPythonPackage (finalAttrs: {
pname = "alibabacloud-credentials-api";
version = "1.0.0";
version = "1.0.1";
pyproject = true;
src = fetchPypi {
inherit (finalAttrs) pname version;
hash = "sha256-jDQAONkE8CGNchSo9AiMMZEr/PJ5ryy8fZvkiXqX3S8=";
pname = "alibabacloud_credentials_api";
inherit (finalAttrs) version;
hash = "sha256-jqBmimVY9pVrjSCy5WHRmoDqKcIs9WowBNQ0skqYGzY=";
};
build-system = [ setuptools ];

View file

@ -8,7 +8,7 @@
buildPythonPackage (finalAttrs: {
pname = "alibabacloud-gateway-spi";
version = "0.0.3";
version = "0.0.4";
pyproject = true;
__structuredAttrs = true;
@ -16,7 +16,7 @@ buildPythonPackage (finalAttrs: {
src = fetchPypi {
pname = "alibabacloud_gateway_spi";
inherit (finalAttrs) version;
hash = "sha256-ENHFOj/F+HkV+9a0mFuYM4p3bptEoCY/VmQ8UEgiO4s=";
hash = "sha256-c9biDWW1Tu0m2JwZZA06dXLhjEXsraYn+Ab12+jtITA=";
};
build-system = [ setuptools ];

View file

@ -15,14 +15,14 @@
buildPythonPackage (finalAttrs: {
pname = "badsecrets";
version = "1.2.0";
version = "1.2.1";
pyproject = true;
src = fetchFromGitHub {
owner = "blacklanternsecurity";
repo = "badsecrets";
tag = finalAttrs.version;
hash = "sha256-fhRQvVb+JUP1DyTMAV7leIAKD/L4kRhGFYtD78cYABI=";
hash = "sha256-I0CyY8FVFFPRBK04zZ1v2WSv4ovRATZmAWLGwE0Q4pQ=";
};
pythonRelaxDeps = [

View file

@ -19,14 +19,14 @@
buildPythonPackage (finalAttrs: {
pname = "banks";
version = "2.4.3";
version = "2.4.4";
pyproject = true;
src = fetchFromGitHub {
owner = "masci";
repo = "banks";
tag = "v${finalAttrs.version}";
hash = "sha256-6B/jbvW+nfsruPJMk+z5SP2LS85MYOlmMpBYHypUOHA=";
hash = "sha256-LlUVwGCcY/CA0XTjpppv6QNnyagDZR6+SaRfkyHVBw4=";
};
env.SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";

View file

@ -10,7 +10,7 @@
buildPythonPackage (finalAttrs: {
pname = "cyscale";
version = "0.4.0";
version = "0.5.0";
pyproject = true;
__structuredAttrs = true;
@ -19,7 +19,7 @@ buildPythonPackage (finalAttrs: {
owner = "latent-to";
repo = "cyscale";
tag = "v${finalAttrs.version}";
hash = "sha256-QkIyb00/KIVicdX/k3UhjGSvcwQ+yxcSAkMlC7tVpLM=";
hash = "sha256-/Jhg7n28rjiNyuthX9cCbOtpyfPp0xgBaUpiZ1pBxRA=";
};
build-system = [ setuptools ];

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