Merge master into staging-next

This commit is contained in:
nixpkgs-ci[bot] 2026-01-20 00:18:19 +00:00 committed by GitHub
commit c95fc42eb1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
224 changed files with 13412 additions and 1026 deletions

View file

@ -168,6 +168,7 @@ jobs:
needs: [eval]
if: ${{ !cancelled() && !failure() }}
permissions:
pull-requests: write
statuses: write
timeout-minutes: 5
steps:
@ -254,6 +255,17 @@ jobs:
description,
target_url
})
- name: Request changes if PR is against an inappropriate branch
if: ${{ github.event_name == 'pull_request_target' }}
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: |
require('./nixpkgs/trusted/ci/github-script/check-target-branch.js')({
github,
context,
core,
dry: context.eventName == 'pull_request',
})
# Creates a matrix of Eval performance for various versions and systems.
report:

View file

@ -84,6 +84,7 @@ jobs:
# even though they are unused when working with the merge queue.
permissions:
# compare
pull-requests: write
statuses: write
secrets:
CACHIX_AUTH_TOKEN_GHA: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}

View file

@ -81,6 +81,7 @@ jobs:
uses: ./.github/workflows/eval.yml
permissions:
# compare
pull-requests: write
statuses: write
with:
artifact-prefix: ${{ inputs.artifact-prefix }}

View file

@ -0,0 +1,135 @@
/// @ts-check
// TODO: should this be combined with the branch checks in prepare.js?
// They do seem quite similar, but this needs to run after eval,
// and prepare.js obviously doesn't.
const { classify, split } = require('../supportedBranches.js')
const { readFile } = require('node:fs/promises')
const { postReview } = require('./reviews.js')
/**
* @param {{
* github: InstanceType<import('@actions/github/lib/utils').GitHub>,
* context: import('@actions/github/lib/context').Context
* core: import('@actions/core')
* dry: boolean
* }} CheckTargetBranchProps
*/
async function checkTargetBranch({ github, context, core, dry }) {
const changed = JSON.parse(
await readFile('comparison/changed-paths.json', 'utf-8'),
)
const pull_number = context.payload.pull_request?.number
if (!pull_number) {
core.warning(
'Skipping checkTargetBranch: no pull_request number (is this being run as part of a merge group?)',
)
return
}
const prInfo = (
await github.rest.pulls.get({
...context.repo,
pull_number,
})
).data
const base = prInfo.base.ref
const head = prInfo.head.ref
const baseClassification = classify(base)
const headClassification = classify(head)
// Don't run on, e.g., staging-nixos to master merges.
if (headClassification.type.includes('development')) {
core.info(
`Skipping checkTargetBranch: PR is from a development branch (${head})`,
)
return
}
// Don't run on PRs against staging branches, wip branches, haskell-updates, etc.
if (!baseClassification.type.includes('primary')) {
core.info(
`Skipping checkTargetBranch: PR is against a non-primary base branch (${base})`,
)
return
}
const maxRebuildCount = Math.max(
...Object.values(changed.rebuildCountByKernel),
)
const rebuildsAllTests =
changed.attrdiff.changed.includes('nixosTests.simple') ?? false
core.info(
`checkTargetBranch: PR causes ${maxRebuildCount} rebuilds and ${rebuildsAllTests ? 'does' : 'does not'} rebuild all NixOS tests.`,
)
if (maxRebuildCount >= 1000) {
const desiredBranch =
base === 'master' ? 'staging' : `staging-${split(base).version}`
const body = [
`The PR's base branch is set to \`${base}\`, but this PR causes ${maxRebuildCount} rebuilds.`,
'It is therefore considered a mass rebuild.',
`Please [change the base branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-base-branch-of-a-pull-request) to [the right base branch for your changes](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#branch-conventions) (probably \`${desiredBranch}\`).`,
].join('\n')
await postReview({
github,
context,
core,
dry,
body,
event: 'REQUEST_CHANGES',
})
throw new Error('This PR is against the wrong branch.')
} else if (rebuildsAllTests) {
let branchText
if (base === 'master' && maxRebuildCount >= 500) {
branchText = '(probably either `staging-nixos` or `staging`)'
} else if (base === 'master') {
branchText = '(probably `staging-nixos`)'
} else {
branchText = `(probably \`staging-${split(base).version}\`)`
}
const body = [
`The PR's base branch is set to \`${base}\`, but this PR rebuilds all NixOS tests.`,
base === 'master' && maxRebuildCount >= 500
? `Since this PR also causes ${maxRebuildCount} rebuilds, it may also be considered a mass rebuild.`
: '',
`Please [change the base branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-base-branch-of-a-pull-request) to [the right base branch for your changes](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#branch-conventions) ${branchText}.`,
].join('\n')
await postReview({
github,
context,
core,
dry,
body,
event: 'REQUEST_CHANGES',
})
throw new Error('This PR is against the wrong branch.')
} else if (maxRebuildCount >= 500) {
const stagingBranch =
base === 'master' ? 'staging' : `staging-${split(base).version}`
const body = [
`The PR's base branch is set to \`${base}\`, and this PR causes ${maxRebuildCount} rebuilds.`,
`Please consider whether this PR causes a mass rebuild according to [our conventions](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#branch-conventions).`,
`If it does cause a mass rebuild, please [change the base branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-base-branch-of-a-pull-request) to [the right base branch for your changes](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#branch-conventions) (probably \`${stagingBranch}\`).`,
`If it does not cause a mass rebuild, this message can be ignored.`,
].join('\n')
await postReview({
github,
context,
core,
dry,
body,
event: 'COMMENT',
})
} else {
// Any existing reviews were dismissed by commits.js
core.info('checkTargetBranch: this PR is against an appropriate branch.')
}
}
module.exports = checkTargetBranch

View file

@ -1,3 +1,16 @@
const eventToState = {
COMMENT: 'COMMENTED',
REQUEST_CHANGES: 'CHANGES_REQUESTED',
}
/**
* @param {{
* github: InstanceType<import('@actions/github/lib/utils').GitHub>,
* context: import('@actions/github/lib/context').Context
* core: import('@actions/core')
* dry: boolean
* }} CheckTargetBranchProps
*/
async function dismissReviews({ github, context, dry }) {
const pull_number = context.payload.pull_request.number
@ -19,13 +32,13 @@ async function dismissReviews({ github, context, dry }) {
...context.repo,
pull_number,
review_id: review.id,
message: 'All good now, thank you!',
message: 'Review dismissed automatically',
})
}
await github.graphql(
`mutation($node_id:ID!) {
minimizeComment(input: {
classifier: RESOLVED,
classifier: OUTDATED,
subjectId: $node_id
})
{ clientMutationId }
@ -36,7 +49,14 @@ async function dismissReviews({ github, context, dry }) {
)
}
async function postReview({ github, context, core, dry, body }) {
async function postReview({
github,
context,
core,
dry,
body,
event = 'REQUEST_CHANGES',
}) {
const pull_number = context.payload.pull_request.number
const pendingReview = (
@ -49,10 +69,7 @@ async function postReview({ github, context, core, dry, body }) {
review.user?.login === 'github-actions[bot]' &&
// If a review is still pending, we can just update this instead
// of posting a new one.
(review.state === 'CHANGES_REQUESTED' ||
// No need to post a new review, if an older one with the exact
// same content had already been dismissed.
review.body === body),
review.state === eventToState[event],
)
if (dry) {
@ -72,7 +89,7 @@ async function postReview({ github, context, core, dry, body }) {
await github.rest.pulls.createReview({
...context.repo,
pull_number,
event: 'REQUEST_CHANGES',
event,
body,
})
}

View file

@ -105,4 +105,15 @@ program
await run(checkCommitMessages, owner, repo, pr, options)
})
program
.command('check-target-branch')
.description('Check that the PR is made against the correct branch')
.argument('<owner>', 'Owner of the GitHub repository to run on (Example: NixOS)')
.argument('<repo>', 'Name of the GitHub repository to run on (Example: nixpkgs)')
.argument('<pr>', 'Number of the Pull Request to run on')
.action(async (owner, repo, pr, options) => {
const checkCommitMessages = (await import('./check-target-branch.js')).default
await run(checkCommitMessages, owner, repo, pr, options)
})
await program.parse()

View file

@ -44,7 +44,7 @@ function classify(branch) {
}
}
module.exports = { classify }
module.exports = { classify, split }
// If called directly via CLI, runs the following tests:
if (!module.parent) {

View file

@ -672,11 +672,30 @@ rec {
is necessary for complex values, e.g. functions, or values that depend on
other values or packages.
# Examples
:::{.example}
## `literalExpression` usage example
```nix
llvmPackages = mkOption {
type = types.str;
description = ''
Version of llvm packages to use for
this module
'';
example = literalExpression ''
llvmPackages = pkgs.llvmPackages_20;
'';
};
```
:::
# Inputs
`text`
: 1\. Function argument
: The text to render as a Nix expression
*/
literalExpression =
text:
@ -688,6 +707,49 @@ rec {
inherit text;
};
/**
For use in the `defaultText` and `example` option attributes. Causes the
given string to be rendered verbatim in the documentation as a code
block with the language bassed on the provided input tag.
If you wish to render Nix code, please see `literalExpression`.
# Examples
:::{.example}
## `literalCode` usage example
```nix
myPythonScript = mkOption {
type = types.str;
description = ''
Example python script used by a module
'';
example = literalCode "python" ''
print("Hello world!")
'';
};
```
:::
# Inputs
`languageTag`
: The language tag to use when producing the code block (i.e. `js`, `rs`, etc).
`text`
: The text to render as a Nix expression
*/
literalCode =
languageTag: text:
lib.literalMD ''
```${languageTag}
${text}
```
'';
/**
For use in the `defaultText` and `example` option attributes. Causes the
given MD text to be inserted verbatim in the documentation, for when

View file

@ -422,10 +422,10 @@
"maintainers": {
"Mic92": 96200,
"kalbasit": 87115,
"katexochen": 49727155,
"zowoq": 59103226
},
"members": {
"katexochen": 49727155,
"mfrw": 4929861,
"qbit": 68368
},
@ -730,7 +730,9 @@
"philiptaron": 43863,
"zowoq": 59103226
},
"members": {},
"members": {
"mdaniels5757": 8762511
},
"name": "Nixpkgs CI"
},
"nixpkgs-core": {

View file

@ -34,6 +34,8 @@
- [Ente Auth](https://ente.io/auth/), an open source 2FA authenticator, with end-to-end encrypted backups. Available as [programs.ente-auth](#opt-programs.ente-auth.enable).
- [Dawarich](https://dawarich.app/), a self-hostable location history tracker. Available as [services.dawarich](#opt-services.dawarich.enable).
- [udp-over-tcp](https://github.com/mullvad/udp-over-tcp), a tunnel for proxying UDP traffic over a TCP stream. Available as `services.udp-over-tcp`.
- [Komodo Periphery](https://github.com/moghtech/komodo), a multi-server Docker and Git deployment agent by Komodo. Available as [services.komodo-periphery](#opt-services.komodo-periphery.enable).

View file

@ -1597,6 +1597,7 @@
./services/web-apps/cryptpad.nix
./services/web-apps/dashy.nix
./services/web-apps/davis.nix
./services/web-apps/dawarich.nix
./services/web-apps/dependency-track.nix
./services/web-apps/dex.nix
./services/web-apps/discourse.nix

View file

@ -0,0 +1,706 @@
{
lib,
pkgs,
config,
options,
...
}:
let
cfg = config.services.dawarich;
opt = options.services.dawarich;
dataDir = "/var/lib/dawarich";
isRedisUnixSocket = lib.hasPrefix "/" cfg.redis.host;
redisEnv =
if isRedisUnixSocket then
{
REDIS_URL = "unix://${config.services.redis.servers.dawarich.unixSocket}";
}
else
{
# Does not support passwords, but upstream does not provide an adequate env variable
# Perhaps patch or make a PR upstream in the future
REDIS_URL = "redis://${cfg.redis.host}:${toString cfg.redis.port}";
};
env = {
RAILS_ENV = "production";
NODE_ENV = "production";
BUNDLE_USER_HOME = "/tmp/bundle"; # will use private tmp inside systemd unit
SELF_HOSTED = "true";
STORE_GEODATA = "true";
APPLICATION_PROTOCOL = "http";
TIME_ZONE = config.time.timeZone; # otherwise upstream forces it to Europe/London
DOMAIN = cfg.localDomain;
APPLICATION_HOSTS = "127.0.0.1,::1,${cfg.localDomain}";
BOOTSNAP_CACHE_DIR = "/var/cache/dawarich/precompile";
LD_PRELOAD = "${lib.getLib pkgs.jemalloc}/lib/libjemalloc.so";
DATABASE_USER = cfg.database.user;
DATABASE_HOST = cfg.database.host;
DATABASE_NAME = cfg.database.name;
DATABASE_PORT = toString cfg.database.port;
SMTP_SERVER = cfg.smtp.host;
SMTP_PORT = toString cfg.smtp.port;
SMTP_FROM = cfg.smtp.fromAddress;
SMTP_USERNAME = cfg.smtp.user;
PORT = toString cfg.webPort;
}
// redisEnv
// cfg.environment;
systemCallFilter =
let
allowedSystemCalls = [
"@cpu-emulation"
"@debug"
"@keyring"
"@ipc"
"@mount"
"@obsolete"
"@privileged"
"@setuid"
];
in
[
("~" + lib.concatStringsSep " " allowedSystemCalls)
"@chown"
"pipe"
"pipe2"
];
cfgService = {
User = cfg.user;
Group = cfg.group;
WorkingDirectory = cfg.package;
CacheDirectory = "dawarich";
CacheDirectoryMode = "0750";
StateDirectory = "dawarich";
StateDirectoryMode = "0750";
LogsDirectory = "dawarich";
LogsDirectoryMode = "0750";
ProcSubset = "pid";
ProtectProc = "invisible";
UMask = "0027";
CapabilityBoundingSet = "";
NoNewPrivileges = true;
ProtectSystem = "strict";
ProtectHome = true;
PrivateTmp = true;
PrivateDevices = true;
PrivateUsers = true;
ProtectClock = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectControlGroups = true;
RestrictAddressFamilies = [
"AF_UNIX"
"AF_INET"
"AF_INET6"
"AF_NETLINK"
];
RestrictNamespaces = true;
LockPersonality = true;
MemoryDenyWriteExecute = false;
RestrictRealtime = true;
RestrictSUIDSGID = true;
RemoveIPC = true;
PrivateMounts = true;
SystemCallArchitectures = "native";
SystemCallFilter = systemCallFilter;
# ensure permissions to connect to the redis socket
SupplementaryGroups = lib.mkIf (cfg.redis.createLocally && isRedisUnixSocket) [
config.services.redis.servers.dawarich.group
];
};
# Units that all Dawarich units After= and Requires= on
commonUnits =
lib.optional cfg.redis.createLocally "redis-dawarich.service"
++ lib.optional cfg.database.createLocally "postgresql.target"
++ lib.optional cfg.automaticMigrations "dawarich-init-db.service";
defaultSecretKeyBaseFile = "${dataDir}/secrets/secret-key-base";
needsGenCredentialsUnit = cfg.secretKeyBaseFile == null;
credentials = {
SECRET_KEY_BASE = lib.defaultTo defaultSecretKeyBaseFile cfg.secretKeyBaseFile;
}
// lib.optionalAttrs (cfg.database.passwordFile != null) {
DATABASE_PASSWORD = cfg.database.passwordFile;
}
// lib.optionalAttrs (cfg.smtp.passwordFile != null) {
SMTP_PASSWORD = cfg.smtp.passwordFile;
};
loadCredentialsIntoEnv = lib.concatMapAttrsStringSep "\n" (
name: _: ''export ${name}="$(systemd-creds cat ${name})"''
) credentials;
loadCredentials = lib.mapAttrsToList (name: path: "${name}:${path}") credentials;
dawarichRails = pkgs.writeShellApplication {
name = "dawarich-rails";
text =
let
sourceExtraEnv = lib.concatMapStrings (p: "source ${p}\n") cfg.extraEnvFiles;
command = pkgs.writeShellScript "dawarich-rails-unwrapped" ''
${sourceExtraEnv}
${loadCredentialsIntoEnv}
export RAILS_ROOT="${cfg.package}"
exec ${lib.getExe' cfg.package "rails"} "$@"
'';
env' = lib.filterAttrs (_: value: value != null) env;
supplementaryGroups = lib.optionalString (cfg.redis.createLocally && isRedisUnixSocket) (
lib.escapeShellArg "--property=SupplementaryGroups=${config.services.redis.servers.dawarich.group}"
);
in
''
exec ${lib.getExe' config.systemd.package "systemd-run"} \
${
lib.escapeShellArgs (map (credential: "--property=LoadCredential=${credential}") loadCredentials)
} \
${
lib.escapeShellArgs (lib.mapAttrsToList (name: value: "--setenv=${name}=${toString value}") env')
} \
--uid=${lib.escapeShellArg cfg.user} \
--gid=${lib.escapeShellArg cfg.group} \
${supplementaryGroups} \
--working-directory=${lib.escapeShellArg cfg.package} \
--property=PrivateTmp=yes \
--pty \
--wait \
--collect \
--service-type=exec \
--quiet \
-- \
${command} "$@"
'';
};
dawarichConsole = pkgs.writeShellScriptBin "dawarich-console" ''
exec ${lib.getExe dawarichRails} console "$@"
'';
sidekiqUnits = lib.attrsets.mapAttrs' (
name: processCfg:
lib.nameValuePair "dawarich-sidekiq-${name}" (
let
jobClassArgs = lib.concatMapStringsSep " " (c: "-q ${c}") processCfg.jobClasses;
jobClassLabel = lib.optionalString (
processCfg.jobClasses != [ ]
) " (${lib.concatStringsSep ", " processCfg.jobClasses})";
threads = toString (if processCfg.threads == null then cfg.sidekiqThreads else processCfg.threads);
in
{
after = [
"network.target"
]
++ lib.optional needsGenCredentialsUnit "dawarich-init-credentials.service"
++ commonUnits;
requires = lib.optional needsGenCredentialsUnit "dawarich-init-credentials.service" ++ commonUnits;
description = "Dawarich sidekiq${jobClassLabel}";
wantedBy = [ "dawarich.target" ];
environment = env // {
RAILS_MAX_THREADS = threads;
};
script = ''
${loadCredentialsIntoEnv}
${lib.getExe' cfg.package "sidekiq"} ${jobClassArgs} -c ${threads} -r ${cfg.package}
'';
serviceConfig = {
Restart = "always";
RestartSec = 20;
LoadCredential = loadCredentials;
EnvironmentFile = cfg.extraEnvFiles;
LimitNOFILE = "1024000";
}
// cfgService;
}
)
) cfg.sidekiqProcesses;
in
{
options = {
services.dawarich = {
enable = lib.mkEnableOption "Dawarich, a self-hostable alternative to Google Location History";
configureNginx = lib.mkOption {
description = ''
Configure nginx as a reverse proxy for dawarich.
Alternatively you can configure a reverse-proxy of your choice to serve these paths:
`/ -> ''${pkgs.dawarich}/public`
`/ -> 127.0.0.1:{{ webPort }} `(If there was no file in the directory above.)
Make sure that websockets are forwarded properly. You might want to set up caching
of some requests. Take a look at dawarich's provided reverse proxy configurations at
`https://dawarich.app/docs/tutorials/reverse-proxy`.
'';
type = lib.types.bool;
default = true;
};
user = lib.mkOption {
description = ''
User under which dawarich runs. If it is set to "dawarich",
that user will be created, otherwise it should be set to the
name of a user created elsewhere.
'';
type = lib.types.str;
default = "dawarich";
};
group = lib.mkOption {
description = ''
Group under which dawarich runs.
'';
type = lib.types.str;
default = "dawarich";
};
webPort = lib.mkOption {
description = "TCP port used by the dawarich web service.";
type = lib.types.port;
default = 3000;
};
sidekiqThreads = lib.mkOption {
description = ''
Worker threads used by the dawarich-sidekiq-all service.
If `sidekiqProcesses` is configured and any processes specify null `threads`, this value is used.
'';
type = lib.types.int;
default = 5;
};
sidekiqProcesses = lib.mkOption {
description = ''
How many Sidekiq processes should be used to handle background jobs, and which job classes they handle.
Can be used to [speed up](https://dawarich.app/docs/FAQ/#how-to-speed-up-the-import-process) the import process.
'';
type =
with lib.types;
attrsOf (submodule {
options = {
jobClasses = lib.mkOption {
# https://github.com/Freika/dawarich/blob/0.37.2/config/sidekiq.yml
type = listOf (enum [
"app_version_checking"
"archival"
"cache"
"data_migrations"
"default"
"digests"
"exports"
"families"
"imports"
"mailers"
"places"
"points"
"reverse_geocoding"
"stats"
"tracks"
"trips"
"visit_suggesting"
]);
description = ''
If not empty, which job classes should be executed by this process.
*If left empty, all job classes will be executed by this process.*
'';
};
threads = lib.mkOption {
type = nullOr int;
description = ''
Number of threads this process should use for executing jobs.
If null, the configured `sidekiqThreads` are used.
'';
};
};
});
default = {
all = {
jobClasses = [ ];
threads = null;
};
};
example = {
all = {
jobClasses = [ ];
threads = null;
};
geocoding = {
jobClasses = [ "reverse_geocoding" ];
threads = 10;
};
};
};
localDomain = lib.mkOption {
description = "The domain serving your Dawarich instance.";
example = "dawarich.example.org";
type = lib.types.str;
};
secretKeyBaseFile = lib.mkOption {
description = ''
Path to file containing the secret key base.
A new secret key base can be generated by running:
`nix build -f '<nixpkgs>' dawarich; cd result; bin/bundle exec rails secret`
This file is loaded using systemd credentials, and therefore does not need to be
owned by the dawarich user.
If this option is null, it will be created at ${defaultSecretKeyBaseFile}
with a new secret key base.
'';
default = null;
type = lib.types.nullOr lib.types.str;
};
redis = {
createLocally = lib.mkOption {
description = ''
Whether to configure a local Redis server for Dawarich.
The connection is performed via Unix sockets by default,
but that can be changed by configuring {option}`${opt.redis.host}` and {option}`${opt.redis.port}`.
'';
type = lib.types.bool;
default = true;
};
host = lib.mkOption {
description = "The redis host Dawarich will connect to.";
type = lib.types.str;
default = config.services.redis.servers.dawarich.unixSocket;
defaultText = lib.literalExpression "config.services.redis.servers.dawarich.unixSocket";
};
port = lib.mkOption {
description = "The port of the redis server Dawarich will connect to. Set to zero to disable TCP and use Unix sockets instead.";
type = lib.types.port;
default = 0;
};
};
database = {
createLocally = lib.mkOption {
description = ''
Whether to configure a local PostgreSQL server and database for Dawarich.
The connection is performed via Unix sockets.
'';
type = lib.types.bool;
default = true;
};
host = lib.mkOption {
type = lib.types.str;
default = "/run/postgresql";
example = "127.0.0.1";
description = "Hostname or address of the postgresql server. If an absolute path is given here, it will be interpreted as a unix socket path.";
};
port = lib.mkOption {
type = lib.types.nullOr lib.types.port;
default = 5432;
description = "Port of the postgresql server.";
};
name = lib.mkOption {
type = lib.types.str;
default = "dawarich";
description = "The name of the dawarich database.";
};
user = lib.mkOption {
type = lib.types.str;
default = "dawarich";
description = "The database user for dawarich.";
};
passwordFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
example = "/run/keys/dawarich-db-password";
description = ''
A file containing the password corresponding to {option}`${opt.database.user}`.
'';
};
};
smtp = {
host = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "SMTP host used when sending emails to users.";
};
port = lib.mkOption {
type = lib.types.port;
default = 25;
description = "SMTP port used when sending emails to users.";
};
fromAddress = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
example = "dawarich@example.com";
description = ''"From" address used when sending emails to users.'';
};
user = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
example = "dawarich@example.com";
description = "SMTP login name.";
};
passwordFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
example = "/run/keys/dawarich-smtp-password";
description = ''
Path to file containing the SMTP password.
'';
};
};
package = lib.mkPackageOption pkgs "dawarich" { };
environment = lib.mkOption {
type =
with lib.types;
attrsOf (
nullOr (oneOf [
str
path
package
])
);
default = { };
description = ''
Extra environment variables to pass to all dawarich services.
'';
};
extraEnvFiles = lib.mkOption {
type = with lib.types; listOf path;
default = [ ];
description = ''
Extra environment files to pass to all Dawarich services. Useful for passing down environment secrets.
'';
example = [ "/etc/dawarich/secret.env" ];
};
automaticMigrations = lib.mkOption {
description = "Whether to perform database migrations automatically";
type = lib.types.bool;
default = true;
};
};
};
config = lib.mkIf cfg.enable (
lib.mkMerge [
{
assertions = [
{
assertion = !isRedisUnixSocket -> cfg.redis.port != 0;
message = ''
`services.dawarich.redis.port` needs to be configured if `services.dawarich.redis.host` is not a unix socket.
'';
}
];
environment.systemPackages = [
dawarichConsole
dawarichRails
];
systemd.targets.dawarich = {
description = "Target for all Dawarich services";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
};
systemd.services.dawarich-init-credentials = lib.mkIf needsGenCredentialsUnit {
script = ''
umask 077
''
+ lib.optionalString (cfg.secretKeyBaseFile == null) ''
if ! test -f ${defaultSecretKeyBaseFile}; then
mkdir -p $(dirname ${defaultSecretKeyBaseFile})
bin/bundle exec rails secret > ${defaultSecretKeyBaseFile}
fi
'';
environment = env;
serviceConfig = {
Type = "oneshot";
SyslogIdentifier = "dawarich-init-dirs";
# System Call Filtering
SystemCallFilter = [ "~@resources" ] ++ systemCallFilter;
}
// cfgService;
after = [ "network.target" ];
};
systemd.services.dawarich-init-db = lib.mkIf cfg.automaticMigrations {
script = ''
${loadCredentialsIntoEnv}
# Run primary database migrations first (needed before other migrations)
echo "Running primary database migrations..."
rails db:migrate
# Run data migrations
echo "Running DATA migrations..."
rake data:migrate
echo "Running seeds..."
rails db:seed
'';
path = [ cfg.package ];
environment = env;
serviceConfig = {
Type = "oneshot";
LoadCredential = loadCredentials;
EnvironmentFile = cfg.extraEnvFiles;
WorkingDirectory = cfg.package;
# System Call Filtering
SystemCallFilter = [ "~@resources" ] ++ systemCallFilter;
}
// cfgService;
# both postgres and redis are needed for the migrations to work
after = [
"network.target"
]
++ lib.optional needsGenCredentialsUnit "dawarich-init-credentials.service"
++ lib.optional cfg.database.createLocally "postgresql.target"
++ lib.optional cfg.redis.createLocally "redis-dawarich.service";
requires =
lib.optional needsGenCredentialsUnit "dawarich-init-credentials.service"
++ lib.optional cfg.database.createLocally "postgresql.target"
++ lib.optional cfg.redis.createLocally "redis-dawarich.service";
};
systemd.services.dawarich-web = {
after = [
"network.target"
]
++ lib.optional needsGenCredentialsUnit "dawarich-init-credentials.service"
++ commonUnits;
requires = lib.optional needsGenCredentialsUnit "dawarich-init-credentials.service" ++ commonUnits;
wantedBy = [ "dawarich.target" ];
description = "Dawarich web";
environment = env;
script = ''
${loadCredentialsIntoEnv}
${lib.getExe' cfg.package "rails"} server
'';
serviceConfig = {
Restart = "always";
RestartSec = 20;
LoadCredential = loadCredentials;
EnvironmentFile = cfg.extraEnvFiles;
WorkingDirectory = cfg.package;
# Runtime directory and mode
RuntimeDirectory = "dawarich-web";
RuntimeDirectoryMode = "0750";
}
// cfgService;
};
systemd.tmpfiles.settings."dawarich"."${dataDir}/imports/watched".d = {
group = "dawarich";
mode = "700";
user = "dawarich";
};
services.nginx = lib.mkIf cfg.configureNginx {
enable = true;
virtualHosts."${cfg.localDomain}" = {
root = "${cfg.package}/public/";
locations."/" = {
tryFiles = "$uri @proxy";
};
locations."@proxy" = {
proxyPass = "http://127.0.0.1:${toString cfg.webPort}";
recommendedProxySettings = true;
proxyWebsockets = true;
};
};
};
services.redis.servers = lib.mkIf cfg.redis.createLocally {
dawarich = {
enable = true;
port = cfg.redis.port;
bind = lib.mkIf (!isRedisUnixSocket) cfg.redis.host;
};
};
services.postgresql = lib.mkIf cfg.database.createLocally {
enable = true;
extensions = ps: with ps; [ postgis ];
ensureUsers = [
{
inherit (cfg.database) name;
ensureDBOwnership = true;
}
];
ensureDatabases = [ cfg.database.name ];
};
systemd.services.postgresql-setup.serviceConfig.ExecStartPost =
let
# https://github.com/Freika/dawarich/blob/0.30.6/db/schema.rb#L15-L16
# https://postgis.net/documentation/getting_started/
sqlFile = pkgs.writeText "dawarich-postgres-setup.sql" ''
CREATE EXTENSION IF NOT EXISTS postgis;
SELECT postgis_extensions_upgrade();
'';
in
lib.mkIf cfg.database.createLocally [
''
${lib.getExe' config.services.postgresql.package "psql"} -d "${cfg.database.name}" -f "${sqlFile}"
''
];
users.users = lib.mkIf (cfg.user == "dawarich") {
dawarich = {
isSystemUser = true;
home = cfg.package;
inherit (cfg) group;
};
};
users.groups = lib.mkIf (cfg.group == "dawarich") { ${cfg.group} = { }; };
}
{
systemd.services = lib.mkMerge [
sidekiqUnits
];
}
]
);
meta.maintainers = with lib.maintainers; [
diogotcorreia
];
}

View file

@ -855,6 +855,7 @@ in
"resilver_finish-start-scrub.sh"
"scrub_finish-notify.sh"
"statechange-notify.sh"
"zed-functions.sh"
]
++ lib.optionals (lib.versionOlder cfgZfs.package.version "2.4") [
"deadman-slot_off.sh"

View file

@ -446,6 +446,7 @@ in
darling-dmg = runTest ./darling-dmg.nix;
dashy = runTest ./web-apps/dashy.nix;
davis = runTest ./davis.nix;
dawarich = runTest ./web-apps/dawarich.nix;
db-rest = runTest ./db-rest.nix;
dconf = runTest ./dconf.nix;
ddns-updater = runTest ./ddns-updater.nix;

View file

@ -91,7 +91,7 @@
machine.sleep(10)
machine.send_key("alt-f10")
machine.sleep(2)
machine.wait_for_text(r"(Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonntag)")
machine.wait_for_text(r"(Termine|Tag|Woche|Monat|Jahr|Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonntag)")
machine.screenshot("lomiri-calendar_localised")
'';
}

View file

@ -0,0 +1,77 @@
{ ... }:
{
name = "dawarich-nixos";
nodes.machine =
{ pkgs, ... }:
{
services.dawarich = {
enable = true;
localDomain = "localhost";
};
environment.etc.geojson.source = pkgs.fetchurl {
url = "https://github.com/Freika/dawarich/raw/8c24764aa56a084e980e21bc2ffd13a72fd611db/spec/fixtures/files/geojson/export.json";
hash = "sha256-qI00E5ixKTRJduAD+qB3JzvrpoJmC55llNtSiPVyxz4=";
};
};
testScript = ''
import json
machine.wait_for_unit("dawarich.target")
machine.wait_for_open_port(3000) # Web
machine.succeed("curl --fail http://localhost/")
# Get API key via ruby console
api_key = machine.succeed("dawarich-rails runner \"puts User.find_by(email: 'demo@dawarich.app').api_key\"").strip().split("\n")[-1]
res = machine.succeed(f"curl -f -H 'Authorization: Bearer {api_key}' http://localhost/api/v1/users/me")
user_data = json.loads(res)
assert user_data['user']['email'] == 'demo@dawarich.app'
example_point = {
"locations": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-122.40530871,
37.74430413
]
},
"properties": {
"battery_state": "full",
"battery_level": 0.7,
"wifi": "dawarich_home",
"timestamp": "2025-01-17T21:03:01Z",
"horizontal_accuracy": 5,
"vertical_accuracy": -1,
"altitude": 0,
"speed": 92.088,
"speed_accuracy": 0,
"course": 27.07,
"course_accuracy": 0,
"track_id": "799F32F5-89BB-45FB-A639-098B1B95B09F",
"device_id": "8D5D4197-245B-4619-A88B-2049100ADE46"
}
}
]
}
machine.succeed(f"curl -f -H 'Authorization: Bearer {api_key}' --json '{json.dumps(example_point)}' http://localhost/api/v1/points")
res = machine.succeed(f"curl -f -H 'Authorization: Bearer {api_key}' http://localhost/api/v1/points")
assert len(json.loads(res)) == 1
# Test watcher job import
import_dir = "/var/lib/dawarich/imports/watched/demo@dawarich.app"
machine.succeed(f"mkdir -p {import_dir} && cp /etc/geojson {import_dir}/example.json")
machine.succeed('dawarich-rails runner "Import::WatcherJob.perform_now"')
# job runs in the background so doesn't update immediately
res = machine.wait_until_succeeds(f"curl -f -H 'Authorization: Bearer {api_key}' http://localhost/api/v1/points | grep '\"id\":2'")
assert len(json.loads(res)) == 11
'';
}

View file

@ -6,63 +6,24 @@
lib,
}:
melpaBuild rec {
melpaBuild {
pname = "elpaca";
version = "0-unstable-2025-11-06";
version = "0-unstable-2025-02-16";
src = fetchFromGitHub {
owner = "progfolio";
repo = "elpaca";
rev = "b5ef5f19ac1224853234c9acdac0ec9ea1c440a1";
hash = "sha256-EZ9emYTweRZzMKxZu9nbAaGgE2tInaL7KCKvJ5TaD0g=";
rev = "07b3a653e2411f4d4b5902af1c9b3f159e07bec5";
hash = "sha256-+YJX2BJxH3D5u7YC/yJskZu0F4Nlat3ZROe+RCZGq9w=";
};
nativeBuildInputs = [ git ];
# Moves extensions into the source root directory to install them.
# Disables warnings related to being used with package.el and not matching the installer
# Points the elpaca-repos-directory to the installed package in the nix store
postPatch =
let
siteVersion = lib.concatStrings (lib.drop 2 (lib.splitVersion version));
in
''
mv extensions/* .
substituteInPlace elpaca.el \
--replace-fail "lwarn '(elpaca installer)" \
"ignore '(elpaca installer)" \
--replace-fail "warn \"Package.el" \
"ignore \"Package.el" \
--replace-fail "(expand-file-name \"elpaca/\" elpaca-repos-directory)" \
"\"${placeholder "out"}/share/emacs/site-lisp/elpa/elpaca-${siteVersion}.0\""
'';
passthru.updateScript = unstableGitUpdater { };
meta = {
description = "Elisp package manager and replacement for package.el";
longDescription = ''
Elpaca is an elisp package manager. It allows users to find,
install, update, and remove third-party packages for Emacs. It
is a replacement for the built-in Emacs package manager,
package.el.
Elpaca:
- Installs packages asynchronously, in parallel for fast, non-blocking installations.
- Includes a flexible UI for finding and operating on packages.
- Downloads packages from their sources for convenient elisp development.
- Supports thousands of elisp packages out of the box (MELPA, NonGNU/GNU ELPA, Org/org-contrib).
- Makes it easy for users to create their own ELPAs.
Elpaca has been adapted for Emacs managed via Nix. To activate
Elpaca, this snippet can be used within your init.el:
```elisp
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca-use-package-mode) ;; Optional, for use-package support
```
'';
homepage = "https://github.com/progfolio/elpaca";
description = "Elisp package manager";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [
abhisheksingh0x558

View file

@ -1,10 +1,9 @@
with import <localpkgs> { };
let
inherit (vimUtils.override { inherit vim; }) buildVimPlugin;
inherit (neovimUtils) buildNeovimPlugin;
generated = callPackage <localpkgs/pkgs/applications/editors/vim/plugins/generated.nix> {
inherit buildNeovimPlugin buildVimPlugin;
inherit buildVimPlugin;
} { } { };
hasChecksum =
@ -15,16 +14,15 @@ let
"outputHash"
] value;
parse = name: value: {
pname = value.pname;
version = value.version;
parse = _name: value: {
inherit (value) pname version;
homePage = value.meta.homepage;
checksum =
if hasChecksum value then
{
submodules = value.src.fetchSubmodules or false;
sha256 = value.src.outputHash;
rev = value.src.rev;
inherit (value.src) rev;
}
else
null;

View file

@ -968,8 +968,8 @@ let
mktplcRef = {
name = "chatgpt-reborn";
publisher = "chris-hayes";
version = "3.27.0";
sha256 = "sha256-52SvGb9TsvDQey5cjw+ZIQBP/1dyWcHKNjqCCCyM6k4=";
version = "3.28.0";
sha256 = "sha256-YOaOBDGoLg/bWB/Yw6CCbJ/J7s6qA8QlbM3wiknCTGQ=";
};
};
@ -1268,8 +1268,8 @@ let
mktplcRef = {
publisher = "denoland";
name = "vscode-deno";
version = "3.47.0";
hash = "sha256-T8RJi2SiFf6rMTpDQx9VuBv0zNwvusZrwybHeFe5/KQ=";
version = "3.48.0";
hash = "sha256-AWnX4toFJnIhflc039fN31lrrTaKKXUSrePanWoZnJI=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/denoland.vscode-deno/changelog";
@ -2611,8 +2611,8 @@ let
mktplcRef = {
name = "language-julia";
publisher = "julialang";
version = "1.171.2";
hash = "sha256-XELIrqcyd6DEpJjbSlE17noiYa8CZvDwnodA1QALewM=";
version = "1.174.2";
hash = "sha256-nlMuWnJOtUlCB9RGWUngB8KgIiNxoQTHkjI6ZtO/Gjs=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/julialang.language-julia/changelog";
@ -4469,8 +4469,8 @@ let
mktplcRef = {
name = "vscode-stylelint";
publisher = "stylelint";
version = "1.6.0";
hash = "sha256-t0zS4+UZePViqkGgVezy/2CyyqilUKb6byTYukbxqr8=";
version = "2.0.1";
hash = "sha256-TYUDm+i7Chuybbx91AUxH/oIyZYWpZ5XnYxjhjXGP88=";
};
meta = {
description = "Official Stylelint extension for Visual Studio Code";

View file

@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "mednafen-psx" + lib.optionalString withHw "-hw";
version = "0-unstable-2026-01-12";
version = "0-unstable-2026-01-16";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-psx-libretro";
rev = "254285de247db71ac25a4392c159dc1114940794";
hash = "sha256-RDUyTGlrouttC9V4irOC8U1zcNsCxnTIdm6wrAECY2E=";
rev = "5965c585abcaf6b5205a1347de82471e22aaabe3";
hash = "sha256-Mks6xJre1gaxBqWfAzVTNp6Ooy5VDc86HAoj3wlHYRw=";
};
extraBuildInputs = lib.optionals withHw [

View file

@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "bsnes";
version = "0-unstable-2025-12-19";
version = "0-unstable-2026-01-16";
src = fetchFromGitHub {
owner = "libretro";
repo = "bsnes-libretro";
rev = "d9b7c292cfb15959c9928e3b76bb1047b8499938";
hash = "sha256-FzYe6p3+knxcoIcQW00p3C3+rMEsAWI+ZFdy5mvDhoY=";
rev = "d0a61b2c679bc73286be5471b222b1f1ebfb67b9";
hash = "sha256-1C+c0cQqFSRDGBhNr4s4xD/THbyDP/iVUJpAmHFQfiE=";
};
makefile = "Makefile";

View file

@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "fbneo";
version = "0-unstable-2026-01-11";
version = "0-unstable-2026-01-18";
src = fetchFromGitHub {
owner = "libretro";
repo = "fbneo";
rev = "aaecfedbb206a79d0e35a0dfe922622b921a66f7";
hash = "sha256-Xn3lxXFf7EEism9CIGYhvP83oCpOTrpgnBAwkkB4TDM=";
rev = "3faea4f9c678bad8063f3a2774b051f42848c856";
hash = "sha256-tH9XMBfg3O2oKIUeKWi2hl4yQuHa9BMgvkWjIxv/KIo=";
};
makefile = "Makefile";

View file

@ -101,11 +101,11 @@
"vendorHash": "sha256-quoFrJbB1vjz+MdV+jnr7FPACHuUe5Gx9POLubD2IaM="
},
"baidubce_baiducloud": {
"hash": "sha256-BNpBNBxRSKgxwvgIY289MLUf0Eui5/ccY97sAouHjbc=",
"hash": "sha256-r5NPRWjjlLD5qrLmVPe3JFrRRp3mV0NJwT3rOo0k8FA=",
"homepage": "https://registry.terraform.io/providers/baidubce/baiducloud",
"owner": "baidubce",
"repo": "terraform-provider-baiducloud",
"rev": "v1.22.16",
"rev": "v1.22.17",
"spdx": "MPL-2.0",
"vendorHash": null
},
@ -1049,11 +1049,11 @@
"vendorHash": null
},
"oracle_oci": {
"hash": "sha256-wHNR0U8z0wY878ww2e+yybYYwUCbiGWSkIcEiubfOp4=",
"hash": "sha256-VGf5sCHMhOFm+w3lz2yhH0lw0MSlQYlYK/+lEuXk4vc=",
"homepage": "https://registry.terraform.io/providers/oracle/oci",
"owner": "oracle",
"repo": "terraform-provider-oci",
"rev": "v7.29.0",
"rev": "v7.30.0",
"spdx": "MPL-2.0",
"vendorHash": null
},

View file

@ -74,6 +74,10 @@ apprun() {
else echo "$(basename "$APPIMAGE")" installed in "$APPDIR"
fi
# Fix potential for the appimages to try to import libraries from QT
# installed on the system, causing a version mismatch
unset QT_PLUGIN_PATH
export PATH="$PATH:$PWD/usr/bin"
}

View file

@ -6,7 +6,7 @@
}:
stdenvNoCC.mkDerivation rec {
pname = "0xproto";
version = "2.501";
version = "2.502";
src =
let
@ -14,7 +14,7 @@ stdenvNoCC.mkDerivation rec {
in
fetchzip {
url = "https://github.com/0xType/0xProto/releases/download/${version}/0xProto_${underscoreVersion}.zip";
hash = "sha256-l1+fRPMo3k9EEGXiMw+8Z78KxjO3AGgvyqSfsN188vQ=";
hash = "sha256-ffYvfEGMoIJKVEcs2XzhDrq++SkTbQOVvb6X9q+uyu8=";
stripRoot = false;
};

View file

@ -14,13 +14,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "astroterm";
version = "1.0.9";
version = "1.0.10";
src = fetchFromGitHub {
owner = "da-luce";
repo = "astroterm";
tag = "v${finalAttrs.version}";
hash = "sha256-3UXFB4NNKn2w1dYlQzhFyxWwa7/1qkCXPNdBqHK+eQ8=";
hash = "sha256-z9KblIAoXk///NnRFHCSAFNDuNiPxDuuiliajcsyJM0=";
};
bsc5File = fetchurl {

View file

@ -7,16 +7,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "automatic-timezoned";
version = "2.0.106";
version = "2.0.108";
src = fetchFromGitHub {
owner = "maxbrunet";
repo = "automatic-timezoned";
rev = "v${finalAttrs.version}";
sha256 = "sha256-djvRfp1LhkHuDmjDuOErzcD9KXH6fiRrUR73ncldzUc=";
sha256 = "sha256-aizxFWQpiwEo197Oydez2nAChQQ32jPqOEW3wNLnb7c=";
};
cargoHash = "sha256-T8PY/mFvcdXPZeQKEUekBan+0qBQnmsZ5O96EYcxkcI=";
cargoHash = "sha256-gT1pHDYwqVeZ0epGX8v3+B4o6y8jO21rUyz1rLD3eCY=";
nativeInstallCheckInputs = [ versionCheckHook ];

View file

@ -18,11 +18,7 @@ let
py = python3 // {
pkgs = python3.pkgs.overrideScope (
final: prev: {
sphinx = prev.sphinx.overridePythonAttrs (prev: {
disabledTests = prev.disabledTests ++ [
"test_check_link_response_only" # fails on hydra https://hydra.nixos.org/build/242624087/nixlog/1
];
});
# https://github.com/NixOS/nixpkgs/issues/449266
prompt-toolkit = prev.prompt-toolkit.overridePythonAttrs (prev: rec {
version = "3.0.51";
src = prev.src.override {
@ -30,6 +26,9 @@ let
hash = "sha256-pNYmjAgnP9nK40VS/qvPR3g+809Yra2ISASWJDdQKrU=";
};
});
# backends/build_system/utils.py cannot parse PEP 440 version
# for python-dateutil 2.9.0.post0 (eg. post0)
python-dateutil = prev.python-dateutil.overridePythonAttrs (prev: rec {
version = "2.8.2";
format = "setuptools";
@ -48,24 +47,6 @@ let
];
postPatch = null;
});
ruamel-yaml = prev.ruamel-yaml.overridePythonAttrs (prev: rec {
version = "0.17.21";
src = prev.src.override {
inherit version;
hash = "sha256-i3zml6LyEnUqNcGsQURx3BbEJMlXO+SSa1b/P10jt68=";
};
});
urllib3 = prev.urllib3.overridePythonAttrs (prev: rec {
version = "1.26.18";
build-system = with final; [
setuptools
];
postPatch = null;
src = prev.src.override {
inherit version;
hash = "sha256-+OzBu6VmdBNFfFKauVW/jGe0XbeZ0VkGYmFxnjKFgKA=";
};
});
}
);
};
@ -73,14 +54,14 @@ let
in
py.pkgs.buildPythonApplication rec {
pname = "awscli2";
version = "2.32.15"; # N.B: if you change this, check if overrides are still up-to-date
version = "2.33.2"; # N.B: if you change this, check if overrides are still up-to-date
pyproject = true;
src = fetchFromGitHub {
owner = "aws";
repo = "aws-cli";
tag = version;
hash = "sha256-TOXoArw33exbMfKBnNSECymYS8hVzPoVOA7PWzbnroc=";
hash = "sha256-dAtcYDdrZASrwBjQfnZ4DUR4F5WhY59/UX92QcILavs=";
};
postPatch = ''
@ -90,7 +71,8 @@ py.pkgs.buildPythonApplication rec {
--replace-fail 'distro>=1.5.0,<1.9.0' 'distro>=1.5.0' \
--replace-fail 'docutils>=0.10,<0.20' 'docutils>=0.10' \
--replace-fail 'prompt-toolkit>=3.0.24,<3.0.52' 'prompt-toolkit>=3.0.24' \
--replace-fail 'ruamel.yaml.clib>=0.2.0,<=0.2.12' 'ruamel.yaml.clib>=0.2.0' \
--replace-fail 'ruamel.yaml>=0.15.0,<=0.17.21' 'ruamel.yaml>=0.15.0' \
--replace-fail 'ruamel.yaml.clib>=0.2.0,<=0.2.12' 'ruamel.yaml.clib>=0.2.0'
substituteInPlace requirements-base.txt \
--replace-fail "wheel==0.43.0" "wheel>=0.43.0"
@ -180,6 +162,9 @@ py.pkgs.buildPythonApplication rec {
# Requires networking (socket binding not possible in sandbox)
"test_is_socket"
"test_is_special_file_warning"
# Disable slow tests
"test_details_disabled_for_choice_wo_details"
];
pythonImportsCheck = [

View file

@ -27,13 +27,13 @@ in
stdenv.mkDerivation (finalAttrs: {
pname = "pds";
version = "0.4.193";
version = "0.4.204";
src = fetchFromGitHub {
owner = "bluesky-social";
repo = "pds";
tag = "v${finalAttrs.version}";
hash = "sha256-OCG1YR56k0syIxRVrwUr0teaBJFQXocq0H6j9JaQkh8=";
hash = "sha256-jYCMwHKKFIsfOgGYiKVrWtIT7atPA8NsetvfjDW05yE=";
};
sourceRoot = "${finalAttrs.src.name}/service";
@ -63,7 +63,7 @@ stdenv.mkDerivation (finalAttrs: {
;
pnpm = pnpm_9;
fetcherVersion = 2;
hash = "sha256-4qKWkINpUHzatiMa7ZNYp1NauU2641W0jHDjmRL9ipI=";
hash = "sha256-G6xZfbfz+jud1N6lxwp5FA5baAkFwmofejsPt/Gaze8=";
};
buildPhase = ''

View file

@ -14,14 +14,14 @@
python3Packages.buildPythonPackage rec {
pname = "boxflat";
version = "1.35.3";
version = "1.35.5";
pyproject = true;
src = fetchFromGitHub {
owner = "Lawstorant";
repo = "boxflat";
tag = "v${version}";
hash = "sha256-ayreXC73OLNpnwNuJe0ImC/ch5W+O0lnkuD31ztTqso=";
hash = "sha256-R03mQIsa6T1ApV8SMWvilBfiCGcAWvyZ5hDDgAuGd6s=";
};
build-system = [ python3Packages.setuptools ];

View file

@ -15,8 +15,6 @@ python.pkgs.buildPythonApplication rec {
version = "0.0.74";
pyproject = true;
disabled = python.pythonOlder "3.10";
src = fetchFromGitLab {
owner = "yaal";
repo = "canaille";

View file

@ -8,13 +8,13 @@
stdenvNoCC.mkDerivation {
pname = "candy-icons";
version = "0-unstable-2025-12-26";
version = "0-unstable-2026-01-13";
src = fetchFromGitHub {
owner = "EliverLara";
repo = "candy-icons";
rev = "1ec7ed314104847d6bffdc89ef67663917a67268";
hash = "sha256-p8WZTNHwYTom0QnWvOU0JLRbEYZlGQq/QPpK3KlwBH8=";
rev = "42f5c4817f47e2ef4b011080ebbb2f50a9a6955b";
hash = "sha256-d7jxoqWPRlNX43CdIEihT6kxvke3k8GG9CJkmlkuRNw=";
};
nativeBuildInputs = [ gtk3 ];

View file

@ -8,13 +8,13 @@
buildGoModule (finalAttrs: {
pname = "carapace-bridge";
version = "1.4.10";
version = "1.4.11";
src = fetchFromGitHub {
owner = "carapace-sh";
repo = "carapace-bridge";
tag = "v${finalAttrs.version}";
hash = "sha256-6CCLSwbAYkMelaM5ac1I1kwOlWKPSOU9M9/2Dybt55I=";
hash = "sha256-npy20q8Fmi4KKN/q41iG6sWmuQVLhiHyUCGVUwS0FsA=";
};
# buildGoModule tries to run `go mod vendor` instead of `go work vendor` on

View file

@ -11,16 +11,16 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-binstall";
version = "1.16.6";
version = "1.16.7";
src = fetchFromGitHub {
owner = "cargo-bins";
repo = "cargo-binstall";
tag = "v${version}";
hash = "sha256-6acLC+ufODhCvHn7g+yzaN+qnTDjUrCBIX8uOj0PPgg=";
hash = "sha256-0r7QEGwuIh2mquKFqcf3VjvilhVz25Xpr2rJPQp504E=";
};
cargoHash = "sha256-IPDhTbYRtL4nBdNgaQfZ2M+RwZYC5eJfs/+VNlOXodo=";
cargoHash = "sha256-ZJCIjQm/vbO1Voji143HXT3BwlXRtFq4rFNRUguwouA=";
nativeBuildInputs = [
pkg-config

View file

@ -6,16 +6,16 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-xwin";
version = "0.20.2";
version = "0.21.2";
src = fetchFromGitHub {
owner = "rust-cross";
repo = "cargo-xwin";
rev = "v${version}";
hash = "sha256-M7OO2yO5BvNTqJLI50g25M5aupdOxmlZ3eealmP51Kc=";
hash = "sha256-GQV8Sy7BCkPGYusojZGQtaazTXONdJIZ4B4toO1Lj/w=";
};
cargoHash = "sha256-DwQGmdSzEjzqfsvqczAMJfi9gJjK2b9FAGmMi7rGKuw=";
cargoHash = "sha256-fVr5W5xpucqUyKpDcubAh6GkB0roJ548EHgaIzqVJl0=";
meta = {
description = "Cross compile Cargo project to Windows MSVC target with ease";

View file

@ -1,22 +1,35 @@
{
lib,
fetchFromGitHub,
fetchpatch,
python3Packages,
withTeXLive ? true,
texliveSmall,
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "cgt-calc";
version = "1.13.0";
version = "1.14.0";
pyproject = true;
src = fetchFromGitHub {
owner = "KapJI";
repo = "capital-gains-calculator";
rev = "v${finalAttrs.version}";
hash = "sha256-y/Y05wG89nccXyxfjqazyPJhd8dOkfwRJre+Rzx97Hw=";
hash = "sha256-6iOlDNlpfCrbRCxEJsRYw6zqOehv/buVN+iU6J6CtIk=";
};
patches = [
# https://github.com/KapJI/capital-gains-calculator/pull/715
(fetchpatch {
url = "https://github.com/KapJI/capital-gains-calculator/commit/ec7155c1256b876d5906a3885656489e9fdd798c.patch";
hash = "sha256-pfGHSKuDRF0T1hP7kpRC285limd1voqLXcXCP7mAD3s=";
})
];
pythonRelaxDeps = [
"defusedxml"
];
build-system = with python3Packages; [
poetry-core
];
@ -26,6 +39,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
jinja2
pandas
requests
pyrate-limiter
types-requests
yfinance
];

View file

@ -6,11 +6,11 @@
}:
let
pname = "chatbox";
version = "1.18.2";
version = "1.18.4";
src = fetchurl {
url = "https://download.chatboxai.app/releases/Chatbox-${version}-x86_64.AppImage";
hash = "sha256-5SDoObRi+Zwq4ZvnPz1dYvjhU5oLHbbAG4X4E8KfFbA=";
hash = "sha256-6BUvwL87ndtI2lFMcNKxpdOpn+EyUhAK9jc+a/zpjpU=";
};
appimageContents = appimageTools.extract { inherit pname version src; };

View file

@ -10,16 +10,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "clash-rs";
version = "0.9.3";
version = "0.9.4";
src = fetchFromGitHub {
owner = "Watfaq";
repo = "clash-rs";
tag = "v${finalAttrs.version}";
hash = "sha256-MVj+GcSt0Q9bWLz7MpCIj9MtnHh/GRB3p+DapMPLxeY=";
hash = "sha256-WtNnBw0/eAz/uO/dlD2yRZHW38CXIT8zhh4lZ3HaIFs=";
};
cargoHash = "sha256-Ikur9G6oSdKbK7gdZozBkplUjPfSjIABTVHjX7UPPvc=";
cargoHash = "sha256-8SLBsYtO6qVihc/C9R3ZptHCKgl2iXiQrOWqgDBXdTc=";
cargoPatches = [ ./Cargo.patch ];

View file

@ -8,16 +8,16 @@
buildGoModule rec {
pname = "ctlptl";
version = "0.8.44";
version = "0.9.0";
src = fetchFromGitHub {
owner = "tilt-dev";
repo = "ctlptl";
rev = "v${version}";
hash = "sha256-DIVKwfTSA03Yyservf3TK7y9RKi2t6pELyC0cpoUH3I=";
hash = "sha256-y957JaHg2SnDC6yvwI/0fBFjbEKOfKFsNqOOrqQe+TU=";
};
vendorHash = "sha256-bZd2DWQ2utKYctx9KzE5BzF5wkj1rGkka6PsYb7G8Oo=";
vendorHash = "sha256-gJiarW1uYr5vl9nt+JN6/yRyYr9J0sfDVZcNLLcwPJY=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -0,0 +1,18 @@
diff --git a/Gemfile.lock b/Gemfile.lock
index d45a7657..d0a7b750 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -172,12 +172,7 @@ GEM
railties (>= 6.1.0)
fakeredis (0.1.4)
ffaker (2.25.0)
- ffi (1.17.2-aarch64-linux-gnu)
- ffi (1.17.2-arm-linux-gnu)
- ffi (1.17.2-arm64-darwin)
- ffi (1.17.2-x86-linux-gnu)
- ffi (1.17.2-x86_64-darwin)
- ffi (1.17.2-x86_64-linux-gnu)
+ ffi (1.17.2)
foreman (0.90.0)
thor (~> 1.4)
fugit (1.11.1)

View file

@ -0,0 +1,32 @@
diff --git a/Gemfile b/Gemfile
index 36cf0d9c..fc914849 100644
--- a/Gemfile
+++ b/Gemfile
@@ -28,6 +28,7 @@ gem 'omniauth-github', '~> 2.0.0'
gem 'omniauth-google-oauth2'
gem 'omniauth_openid_connect'
gem 'omniauth-rails_csrf_protection'
+gem 'openssl'
gem 'parallel'
gem 'pg'
gem 'prometheus_exporter'
diff --git a/Gemfile.lock b/Gemfile.lock
index a32eb801..b2fc45bc 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -348,6 +348,7 @@ GEM
tzinfo
validate_url
webfinger (~> 2.0)
+ openssl (3.3.1)
optimist (3.2.1)
orm_adapter (0.5.0)
ostruct (0.6.1)
@@ -665,6 +666,7 @@ DEPENDENCIES
omniauth-google-oauth2
omniauth-rails_csrf_protection
omniauth_openid_connect
+ openssl
parallel
pg
prometheus_exporter

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,142 @@
{
lib,
applyPatches,
bundlerEnv,
fetchFromGitHub,
fetchNpmDeps,
nixosTests,
nodejs,
npmHooks,
ruby_3_4,
stdenv,
tailwindcss_3,
gemset ? import ./gemset.nix,
sources ? lib.importJSON ./sources.json,
unpatchedSource ? fetchFromGitHub {
owner = "Freika";
repo = "dawarich";
tag = sources.version;
inherit (sources) hash;
},
}:
let
ruby = ruby_3_4;
in
stdenv.mkDerivation (finalAttrs: {
pname = "dawarich";
inherit (sources) version;
# Use `applyPatches` here because bundix in the update script (see ./update.sh)
# needs to run on the already patched Gemfile and Gemfile.lock.
# Only patches changing these two files should be here;
# patches for other parts of the application should go directly into mkDerivation.
src = applyPatches {
src = unpatchedSource;
patches = [
# bundix and bundlerEnv fail with system-specific gems
./0001-build-ffi-gem.diff
# openssl 3.6.0 breaks ruby openssl gem
# See https://github.com/NixOS/nixpkgs/issues/456753
# and https://github.com/ruby/openssl/issues/949#issuecomment-3370358680
./0002-openssl-hotfix.diff
];
postPatch = ''
substituteInPlace ./Gemfile \
--replace-fail "ruby File.read('.ruby-version').strip" "ruby '>= 3.4.0'"
'';
};
postPatch = ''
# move import directory to a more convenient place, otherwise its behind systemd private tmp
substituteInPlace ./app/services/imports/watcher.rb \
--replace-fail 'tmp/imports/watched' 'storage/imports/watched'
'';
dawarichGems = bundlerEnv {
name = "${finalAttrs.pname}-gems-${finalAttrs.version}";
inherit gemset ruby;
inherit (finalAttrs) version;
gemdir = finalAttrs.src;
};
npmDeps = fetchNpmDeps {
inherit (finalAttrs) src;
hash = sources.npmHash;
};
RAILS_ENV = "production";
NODE_ENV = "production";
REDIS_URL = ""; # build error if not defined
TAILWINDCSS_INSTALL_DIR = "${tailwindcss_3}/bin";
nativeBuildInputs = [
nodejs
npmHooks.npmConfigHook
finalAttrs.dawarichGems
finalAttrs.dawarichGems.wrappedRuby
];
propagatedBuildInputs = [
finalAttrs.dawarichGems.wrappedRuby
];
buildInputs = [
finalAttrs.dawarichGems
];
buildPhase = ''
runHook preBuild
patchShebangs bin/
for b in $(ls $dawarichGems/bin/)
do
if [ ! -f bin/$b ]; then
ln -s $dawarichGems/bin/$b bin/$b
fi
done
SECRET_KEY_BASE_DUMMY=1 bundle exec rake assets:precompile
rm -rf node_modules tmp log storage
ln -s /var/log/dawarich log
ln -s /var/lib/dawarich storage
ln -s /tmp tmp
# delete more files unneeded at runtime
rm -rf docker docs screenshots package.json package-lock.json *.md *.example
runHook postBuild
'';
installPhase = ''
runHook preInstall
# tests are not needed at runtime
rm -rf spec e2e
# delete artifacts from patching
rm *.orig
mkdir -p $out
mv .{ruby*,app_version} $out/
mv * $out/
runHook postInstall
'';
passthru = {
tests = {
inherit (nixosTests) dawarich;
};
# run with: nix-shell ./maintainers/scripts/update.nix --argstr package dawarich
updateScript = ./update.sh;
};
meta = {
changelog = "https://github.com/Freika/dawarich/blob/${finalAttrs.version}/CHANGELOG.md";
description = "Self-hostable alternative to Google Location History (Google Maps Timeline)";
homepage = "https://dawarich.app/";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [
diogotcorreia
];
platforms = lib.platforms.linux;
};
})

View file

@ -0,0 +1,5 @@
{
"version": "0.37.3",
"hash": "sha256-cZBT3ek5mzHbPr4aVHU47SNstEuBnpBNaCfaAe/IAEw=",
"npmHash": "sha256-wDe1Zx9HyheS76ltLtDQ+f4M7ohu/pyRuRaGGCnhkQI="
}

View file

@ -0,0 +1,40 @@
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p bundix curl jq nix-update nix-prefetch-github prefetch-npm-deps gnused
set -e
set -o pipefail
OWNER="Freika"
REPO="dawarich"
old_version=$(nix-instantiate --eval -A 'dawarich.version' default.nix | tr -d '"')
version=$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/$OWNER/$REPO/releases/latest" | jq -r ".tag_name")
echo "Updating to $version"
if [[ "$old_version" == "$version" ]]; then
echo "Already up to date!"
exit 0
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
echo "Fetching source code $REVISION"
JSON=$(nix-prefetch-github "$OWNER" "$REPO" --rev "refs/tags/$version" 2>/dev/null)
HASH=$(echo "$JSON" | jq -r .hash)
cat > "$SCRIPT_DIR/sources.json" << EOF
{
"version": "$version",
"hash": "$HASH",
"npmHash": "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
}
EOF
SOURCE_DIR="$(nix-build --no-out-link -A dawarich.src)"
echo "Creating gemset.nix"
bundix --lockfile="$SOURCE_DIR/Gemfile.lock" --gemfile="$SOURCE_DIR/Gemfile" --gemset="$SCRIPT_DIR/gemset.nix"
nixfmt "$SCRIPT_DIR/gemset.nix"
NPM_HASH="$(prefetch-npm-deps "$SOURCE_DIR/package-lock.json" 2>/dev/null)"
sed -i "s;sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=;$NPM_HASH;g" "$SCRIPT_DIR/sources.json"

View file

@ -6,16 +6,16 @@
buildGoModule rec {
pname = "ddns-go";
version = "6.14.1";
version = "6.15.0";
src = fetchFromGitHub {
owner = "jeessy2";
repo = "ddns-go";
rev = "v${version}";
hash = "sha256-c+V+EgJvElL/Ga0z6420E50c59cmjn/IlkfyeATLDFs=";
hash = "sha256-NDIevPRIbRqh97IWk4lCqmjobepVMeG5QFKUJdw9Lyo=";
};
vendorHash = "sha256-vpdT1apjuMvM6MmQfx1XBQtQznK7oxUjIdkgOXjUF6g=";
vendorHash = "sha256-EGhZyoitQ7l0sQZbono2pKhQZJEnGrennMz453Lrbek=";
ldflags = [
"-X main.version=${version}"

View file

@ -22,25 +22,30 @@ let
devenv_nix =
let
components =
(nixVersions.nixComponents_git.override { version = devenvNixVersion; }).overrideSource
(fetchFromGitHub {
owner = "cachix";
repo = "nix";
rev = "devenv-${devenvNixVersion}";
hash = "sha256-3+GHIYGg4U9XKUN4rg473frIVNn8YD06bjwxKS1IPrU=";
});
components = (
nixVersions.nixComponents_git.overrideSource (fetchFromGitHub {
owner = "cachix";
repo = "nix";
rev = "devenv-${devenvNixVersion}";
hash = "sha256-3+GHIYGg4U9XKUN4rg473frIVNn8YD06bjwxKS1IPrU=";
})
);
in
# Support for mdbook >= 0.5, https://github.com/NixOS/nix/issues/14628
(
# Support for mdbook >= 0.5, https://github.com/NixOS/nix/issues/14628
components.appendPatches [
(components.appendPatches [
(fetchpatch2 {
name = "nix-2.30-14695-mdbook-0.5-support.patch";
url = "https://github.com/NixOS/nix/commit/5cbd7856de0a9c13351f98e32a1e26d0854d87fd.patch";
excludes = [ "doc/manual/package.nix" ];
hash = "sha256-GYaTOG9wZT9UI4G6za535PkLyjHKSxwBjJsXbjmI26g=";
})
]
]).overrideScope
(
finalScope: prevScope: {
version = devenvNixVersion;
}
)
).nix-everything.overrideAttrs
(old: {
pname = "devenv-nix";

View file

@ -8,13 +8,13 @@
buildGoModule rec {
pname = "diffnav";
version = "0.5.0";
version = "0.6.0";
src = fetchFromGitHub {
owner = "dlvhdr";
repo = "diffnav";
tag = "v${version}";
hash = "sha256-QDPH7vBoA4YCmC+CLmeBdspwOhFEV3iSiyBYX6lwOLA=";
hash = "sha256-pak1R2BmL3A8YADwFw7QZk7JsGQzBBS/xHzRhYlMKGo=";
};
vendorHash = "sha256-cDA5qstTRApt4DXcakNLR5nsyh9i7z2Qrvp6q/OoYhY=";

View file

@ -14,7 +14,7 @@
let
pname = "dump_syms";
version = "2.3.5";
version = "2.3.6";
in
rustPlatform.buildRustPackage {
inherit pname version;
@ -23,10 +23,10 @@ rustPlatform.buildRustPackage {
owner = "mozilla";
repo = "dump_syms";
rev = "v${version}";
hash = "sha256-zxYGxqnh6urXDC/ZQf3aFzBqOj5QNulyDpTsZ47BDkU=";
hash = "sha256-ABfjLV6WMIiaSiyfR/uxL6+VyO/pO6oZjbJSAxRGXuE=";
};
cargoHash = "sha256-gnXf6APcEJJKpKsqsBPLXlZddEt+6ENyt15iDw8XShc=";
cargoHash = "sha256-t9xK7epfBp1XgewlAuAnInlKQDQ+3gVNmJoLNcey8YU=";
nativeBuildInputs = [
pkg-config

View file

@ -8,16 +8,16 @@
buildGoModule rec {
pname = "ejsonkms";
version = "0.2.9";
version = "0.3.0";
src = fetchFromGitHub {
owner = "envato";
repo = "ejsonkms";
rev = "v${version}";
hash = "sha256-IQZYpxY6t7W9a3PKc9o7+MbOOxsa0Hs1H8HneilrdBs=";
hash = "sha256-BLOlDvheCwlxYaONGh/foqvWs33ZqGA3n7SkM5LfJKY=";
};
vendorHash = "sha256-xOp02g7F1rb3Zq8lbjvDrYrFrcT+msv/KUqQd2qVKdA=";
vendorHash = "sha256-6C/hZwqB6yqFjfDe+KQAY+ja41v/FVaEmPEUXb0FZTA=";
ldflags = [
"-X main.version=v${version}"

View file

@ -1,7 +1,7 @@
{
"version" = "1.12.7";
"version" = "1.12.8";
"hashes" = {
"desktopSrcHash" = "sha256-VnZyNrylYbKhd9YyuoUSJWbTEphOsTivbbYIUeEZv2U=";
"desktopYarnHash" = "sha256-Gnd/ouRI/OxFwsvR5arfi/FcGld3XjtW9tzuwyX8IRg=";
"desktopSrcHash" = "sha256-J+ITqHLxbmhhjFnyfBlHFzxrPeIvsCv+iaxa8DiWorM=";
"desktopYarnHash" = "sha256-coa2AMNGLDtqcrQJDc/DDkcaWBCLa76VTKJLGlr7dpQ=";
};
}

View file

@ -1,8 +1,8 @@
{
"version" = "1.12.7";
"version" = "1.12.8";
"hashes" = {
"webSrcHash" = "sha256-D24x3T1m0qRmlpmkZ7zTAxhtMUddlMaip0JKT8H3Ci0=";
"webYarnHash" = "sha256-72M6XyI9zfxcym7e/CvLmQHe21eyzQXO3YfQipFh06s=";
"webSharedComponentsYarnHash" = "sha256-NrDB0itZ0xSFg4lZhAs6EGFap8GE1CZ1/EFa7fa4P2Q=";
"webSrcHash" = "sha256-c1vrFEe0kEpCXs67oeZPv0xqmL3YaqAvD1nqoTQXlzk=";
"webYarnHash" = "sha256-Vo0SkCUPVQsVCgVILT+uvjbExDpYk4/DRfWdiisbf1o=";
"webSharedComponentsYarnHash" = "sha256-8wvjoanSd5KLDW6MbwY+3Ch9rzWpukeQEvYzMxXsbKA=";
};
}

View file

@ -7,13 +7,13 @@
}:
llvmPackages.stdenv.mkDerivation rec {
pname = "enzyme";
version = "0.0.235";
version = "0.0.238";
src = fetchFromGitHub {
owner = "EnzymeAD";
repo = "Enzyme";
rev = "v${version}";
hash = "sha256-wrz2DyhJAn5T639RdVDjRogPRLriSHiiDn05AgBLYnU=";
hash = "sha256-n++71Ibt4+nnyx56ICovObJx9CH12fxH+WXsAByIyJA=";
};
postPatch = ''

View file

@ -6,13 +6,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "exploitdb";
version = "2025-12-26";
version = "2026-01-18";
src = fetchFromGitLab {
owner = "exploit-database";
repo = "exploitdb";
tag = finalAttrs.version;
hash = "sha256-7it08Z2n1Wl4GaVTLxBIlejwPEsmyv+j142/HAndLO0=";
hash = "sha256-ZV8CcpZzxK1uts8RzUmzp4mKXvS/xv8D02Jsv7DzByQ=";
};
nativeBuildInputs = [ makeWrapper ];

View file

@ -12,16 +12,17 @@
darwin,
copyDesktopItems,
makeDesktopItem,
nix-update-script,
}:
let
pname = "feishin";
version = "1.2.0";
version = "1.3.0";
src = fetchFromGitHub {
owner = "jeffvli";
repo = "feishin";
tag = "v${version}";
hash = "sha256-acNUXvmj964pO8h2fsGfex2BeIshExMWe0w/QmtikkM=";
hash = "sha256-loe2hdn4TGCOLI1OQ19/zXikTKijYWtgSeP1gbwxfO0=";
};
electron = electron_39;
@ -147,6 +148,8 @@ buildNpmPackage {
})
];
passthru.updateScript = nix-update-script { };
meta = {
description = "Full-featured Jellyfin, Navidrome, and OpenSubsonic Compatible Music Player";
homepage = "https://github.com/jeffvli/feishin";

View file

@ -6,7 +6,7 @@
let
pname = "gate";
version = "0.62.2";
version = "0.62.3";
in
buildGoModule {
inherit pname version;
@ -15,10 +15,10 @@ buildGoModule {
owner = "minekube";
repo = "gate";
tag = "v${version}";
hash = "sha256-WxR2VKlvDFOzIiDPuJLoBa5U9afMrYJ9QTDl0yTgSu4=";
hash = "sha256-tOyXVqmexAWpC2s86aUUjmDp6V+qvP3ve8FrqdtexvU=";
};
vendorHash = "sha256-f7SkECS80Lwkd0xSzHq+x05ZBjBYKXsA4rPidyIAYak=";
vendorHash = "sha256-AZa9u1f8MgnqW0QX6X+naRqukGTxI7WMNY4ZgJHoKyw=";
ldflags = [
"-s"

View file

@ -18,7 +18,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
src = fetchurl {
url = "https://github.com/4ian/GDevelop/releases/download/v${version}/GDevelop-5-${version}-universal-mac.zip";
hash = "sha256-U4dRxWZ/0EJWeFhTJkocSFhlks11gSPn3z68k2/1FB0=";
hash = "sha256-zBUWAFsaa+GenaHDRYNlwMs3BmyOIQ3sr/YYCX1ytEE=";
};
sourceRoot = ".";

View file

@ -13,7 +13,7 @@ let
if stdenv.hostPlatform.system == "x86_64-linux" then
fetchurl {
url = "https://github.com/4ian/GDevelop/releases/download/v${version}/GDevelop-5-${version}.AppImage";
hash = "sha256-C3KTa+fs8Mnpz/UELKX+nb6yp6kvdM9+uX5d6Ht2q1w=";
hash = "sha256-1XmKHyUuNcY1efWKLSsEoh+dvSmzUFz3FaoO/iTD7QY=";
}
else
throw "${pname}-${version} is not supported on ${stdenv.hostPlatform.system}";

View file

@ -4,7 +4,7 @@
callPackage,
}:
let
version = "5.6.251";
version = "5.6.252";
pname = "gdevelop";
meta = {
description = "Graphical Game Development Studio";

View file

@ -8,17 +8,17 @@
buildGoModule (finalAttrs: {
pname = "git-pages-cli";
version = "1.5.1";
version = "1.5.2";
src = fetchFromGitea {
domain = "codeberg.org";
owner = "git-pages";
repo = "git-pages-cli";
rev = "v${finalAttrs.version}";
hash = "sha256-T6spNuuG0l1bFv7SnsDTGBtD3Sa+8zKN0/VbsKVkGrM=";
hash = "sha256-58fEurUoRw1hJ2eYHrXrsVDElVVo5BH0bZFw7h1yM0w=";
};
vendorHash = "sha256-5vjUhN3lCr41q91lOD7v0F9c6a8GJj7wBGnnzgFBhJU=";
vendorHash = "sha256-Mico/PFTb8YoRZCP42QETS0DkzMABUGTzBvy692XDJc=";
ldflags = [
"-X"

View file

@ -10,11 +10,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "github-copilot-cli";
version = "0.0.380";
version = "0.0.384";
src = fetchzip {
url = "https://registry.npmjs.org/@github/copilot/-/copilot-${finalAttrs.version}.tgz";
hash = "sha256-QClw+IEz0TBVgaQGhZVwk63Bvjb5btTtBPkHWV7Wxl0=";
hash = "sha256-UI85wx9So28J0QCXP1z2zCXmA54L1dzd0Msr9NLs0CY=";
};
nativeBuildInputs = [ makeBinaryWrapper ];

View file

@ -19,6 +19,11 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-wi1QiqaWRh1DmIhwmu94lL/4uuMv6DnB+whM61Jg1Zs=";
};
# Fix build with GCC 15
postPatch = ''
sed -i "1i #include <cstdint>" externals/glslang/SPIRV/SpvBuilder.h
'';
nativeBuildInputs = [
python3
cmake

View file

@ -7,18 +7,18 @@
buildGoModule rec {
pname = "google-alloydb-auth-proxy";
version = "1.13.9";
version = "1.13.10";
src = fetchFromGitHub {
owner = "GoogleCloudPlatform";
repo = "alloydb-auth-proxy";
tag = "v${version}";
hash = "sha256-VCfK2EcFerIxqaAEY9KnfPLqwOJaz6CVRbTQGzTM6SY=";
hash = "sha256-e+m7vr/N4Ij8X89f12ZjJDh60hOMQXQOBOaVE4TUVaA=";
};
subPackages = [ "." ];
vendorHash = "sha256-sC+bAlzb+Pcj0+NQDaUeyjr6I+fv7cQ3+JHJKKtmiT4=";
vendorHash = "sha256-PKtN0HvIzxr42XpandoHqqK9N0ohq2dXxGbnIlMO8mo=";
checkFlags = [
"-short"

View file

@ -24,13 +24,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "goverlay";
version = "1.7.0";
version = "1.7.1";
src = fetchFromGitHub {
owner = "benjamimgois";
repo = "goverlay";
tag = finalAttrs.version;
hash = "sha256-xfc+ht1piVnjXK+hxHKbhdpp63p/DMLPSzvJq+mYhFs=";
hash = "sha256-zzGxeBnyj04zmPNQ09sYAO17Jaiwx+HA5TyiLo4jFr8=";
};
outputs = [

View file

@ -18,13 +18,13 @@
let
pname = "gui-for-singbox";
version = "1.18.0";
version = "1.19.0";
src = fetchFromGitHub {
owner = "GUI-for-Cores";
repo = "GUI.for.SingBox";
tag = "v${version}";
hash = "sha256-8X+hLtNKE9iFJMvUtY1ZDXwp39b4bKDotiU79jVto4E=";
hash = "sha256-CY5i5+ObqPVCPiqHLttjxhMOi9fiHp5HWX33fq43txw=";
};
metaCommon = {

View file

@ -9,16 +9,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "hl-log-viewer";
version = "0.35.1";
version = "0.35.2";
src = fetchFromGitHub {
owner = "pamburus";
repo = "hl";
tag = "v${finalAttrs.version}";
hash = "sha256-gkUZHepuPOzFi0oWFBzqXPFfWaxlKr5+VCkZwawz+/Q=";
hash = "sha256-jCUr+9FPYnGRbeQkrJjfb9/Cjn3kq40z6cYkU4Gomts=";
};
cargoHash = "sha256-jon7nDdK2bYDIh/zqJV7em87se9XBXV6+c2HlMBzJnA=";
cargoHash = "sha256-+QFNdQv2swIEHivQ5E7ujyYk7xa6gM8A5SwJfnKPScY=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -6,18 +6,18 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "lacy";
version = "0.6.0";
version = "0.6.1";
src = fetchFromGitHub {
owner = "timothebot";
repo = "lacy";
tag = "v${finalAttrs.version}";
hash = "sha256-NjLCN9RDWusfw1BwSzRQLCx4UhHyMpQZ5+igRG1rX9Q=";
hash = "sha256-3LFJpzuL2ULnStFwW165gH/S8Hjh49QE4R6c0NyKRSI=";
};
passthru.updateScript = nix-update-script { };
cargoHash = "sha256-eE/kyb09AwcYTsyXQ9Yn43QF2veCRAgGkNgykJHCsFE=";
cargoHash = "sha256-OJW29CopdO7lbkr0F2KVnfbRGEGIf8J8Vu8YChjeElY=";
meta = {
description = "Fast magical cd alternative for lacy terminal navigators";

View file

@ -8,7 +8,7 @@
let
pname = "lefthook";
version = "2.0.14";
version = "2.0.15";
in
buildGoModule {
inherit pname version;
@ -17,7 +17,7 @@ buildGoModule {
owner = "evilmartians";
repo = "lefthook";
rev = "v${version}";
hash = "sha256-YPDE4KvYW5P93+mb7RWiXBqkGrkzr/fPlVDh1Keizdk=";
hash = "sha256-HBVBH3F6EGLaB2FRgkhdwR9+E9PlthxEs/kckUZJosA=";
};
vendorHash = "sha256-fIPvoR/uRI3q/yOl1qS2pE4JdCPc4RC4DEy8LT7Xrs0=";

View file

@ -8,13 +8,13 @@ let
srcs = {
lemon = fetchurl {
sha256 = "1c5pk2hz7j9hix5mpc38rwnm8dnlr2jqswf4lan6v78ccbyqzkjx";
url = "http://www.sqlite.org/src/raw/tool/lemon.c?name=680980c7935bfa1edec20c804c9e5ba4b1dd96f5";
hash = "sha256-TXVOEtRpOhLCyi4C3RMt0lHmMp/y2K5YdL8ND6WPrOY=";
url = "https://www.sqlite.org/src/raw/3fdc16b23f1ea0c91c049b518fc3f75c71843dbfe2b447fcb3cd92d9e4f219f8?at=lemon.c";
name = "lemon.c";
};
lempar = fetchurl {
sha256 = "1ba13a6yh9j2cs1aw2fh4dxqvgf399gxq1gpp4sh8q0f2w6qiw3i";
url = "http://www.sqlite.org/src/raw/tool/lempar.c?name=01ca97f87610d1dac6d8cd96ab109ab1130e76dc";
hash = "sha256-TYKrUJHtpoljeRWZq4Y1rYLlu7LeM/HuUhe3LJZZkVo=";
url = "https://www.sqlite.org/src/raw/b57e1780bf8098dd4a9a5bba537f994276ea825a420f6165153e5894dc2dfb07?at=lempar.c";
name = "lempar.c";
};
};
@ -22,7 +22,7 @@ let
in
stdenv.mkDerivation {
pname = "lemon";
version = "1.69";
version = "1.0-unstable";
dontUnpack = true;

View file

@ -18,7 +18,7 @@
stdenv.mkDerivation rec {
pname = "libvisio";
version = "0.1.8";
version = "0.1.10";
outputs = [
"out"
@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "https://dev-www.libreoffice.org/src/libvisio/${pname}-${version}.tar.xz";
hash = "sha256-tAmP+/TcuecSE/oKzdvZKPJ77TDbLYAjSBOxXVPQQFs=";
hash = "sha256-np7/dREtTZLZImKtf8JZnCHib4/FulSQDv3IPAUB5HI=";
};
strictDeps = true;

View file

@ -31,7 +31,7 @@
metalSupport ? stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64 && !openclSupport,
vulkanSupport ? false,
rpcSupport ? false,
curl,
openssl,
llama-cpp,
shaderc,
vulkan-headers,
@ -74,13 +74,13 @@ let
in
effectiveStdenv.mkDerivation (finalAttrs: {
pname = "llama-cpp";
version = "7767";
version = "7772";
src = fetchFromGitHub {
owner = "ggml-org";
repo = "llama.cpp";
tag = "b${finalAttrs.version}";
hash = "sha256-k6Q1fUci0SkEB8vH5G3oG/evG7aUYBSqo+iXYG6x/dE=";
hash = "sha256-qARA75QjtqBiRI4Hjr+dHs4Kr+Gk9n1DxRk401y+m68=";
leaveDotGit = true;
postFetch = ''
git -C "$out" rev-parse --short HEAD > $out/COMMIT
@ -105,7 +105,7 @@ effectiveStdenv.mkDerivation (finalAttrs: {
++ optionals rocmSupport rocmBuildInputs
++ optionals blasSupport [ blas ]
++ optionals vulkanSupport vulkanBuildInputs
++ [ curl ];
++ [ openssl ];
preConfigure = ''
prependToVar cmakeFlags "-DLLAMA_BUILD_COMMIT:STRING=$(cat COMMIT)"
@ -117,7 +117,7 @@ effectiveStdenv.mkDerivation (finalAttrs: {
(cmakeBool "LLAMA_BUILD_EXAMPLES" false)
(cmakeBool "LLAMA_BUILD_SERVER" true)
(cmakeBool "LLAMA_BUILD_TESTS" (finalAttrs.finalPackage.doCheck or false))
(cmakeBool "LLAMA_CURL" true)
(cmakeBool "LLAMA_OPENSSL" true)
(cmakeBool "BUILD_SHARED_LIBS" true)
(cmakeBool "GGML_BLAS" blasSupport)
(cmakeBool "GGML_CLBLAST" openclSupport)

View file

@ -6,11 +6,11 @@
stdenvNoCC.mkDerivation rec {
pname = "lxgw-neoxihei";
version = "1.238";
version = "1.239";
src = fetchurl {
url = "https://github.com/lxgw/LxgwNeoXiHei/releases/download/v${version}/LXGWNeoXiHei.ttf";
hash = "sha256-DEH63tH3+edrk/Srh89dqNDgevM8CuccUlBpNnGpXKE=";
hash = "sha256-x8ZhP+umMjSESZjf0R2vIbszcs6IUlEVIZKAQD20DxY=";
};
dontUnpack = true;

View file

@ -1,6 +1,6 @@
{
version = "1.28.2";
hash = "sha256-KqNMykpeNwY86DmpxH0+AGsVsQlICIyU49Y8P1wko+A=";
npmDepsHash = "sha256-17cX1tGjHade5sxNqlZGITBKleZR2IwTujVqecsb9Po=";
vendorHash = "sha256-pzzzji+MflKwFzAMkWQrGt99M9yanVsguHrHKB6VXSc=";
version = "1.28.3";
hash = "sha256-5QfGfEevV/8Epmh7cSHwB11J6wmpXzXHsPCrDms1bAo=";
npmDepsHash = "sha256-zyEk7OcaN8ikJFvSzIIVvTKICi8GtekT4FB2YDHzo3o=";
vendorHash = "sha256-yx7L7evEt0p/U8H+gNGl1sx/JZ5qg+0fInFjZK8xdp4=";
}

View file

@ -8,16 +8,16 @@
# https://github.com/kovetskiy/mark/pull/581#issuecomment-2797872996
buildGoModule rec {
pname = "mark";
version = "15.2.0";
version = "15.3.0";
src = fetchFromGitHub {
owner = "kovetskiy";
repo = "mark";
rev = "v${version}";
sha256 = "sha256-ZvFaSoD9nQtxc5ONWneVgpAfX3f7sS0lBSMXqhABn8o=";
sha256 = "sha256-tQmoTvZO/Las8QDJqcmW7upAciFEQqVFVKEVx6Zg7Mg=";
};
vendorHash = "sha256-3hfeh7PRzsPfQ+aLPV44ExXum6lG6Huvc7itRIn8mNo=";
vendorHash = "sha256-Pk56hx2GRq+4NmCVx0S8Mr2Jgnn44aSRNfhtZIH9Lxk=";
ldflags = [
"-s"

File diff suppressed because it is too large Load diff

View file

@ -1,57 +1,52 @@
{
lib,
stdenvNoCC,
fetchurl,
makeWrapper,
buildNpmPackage,
fetchFromGitHub,
markdownlint-cli2,
nodejs,
nix-update-script,
runCommand,
zstd,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
buildNpmPackage rec {
pname = "markdownlint-cli2";
version = "0.18.1";
version = "0.20.0";
# upstream is not interested in including package-lock.json in the source
# https://github.com/DavidAnson/markdownlint-cli2/issues/198#issuecomment-1690529976
# see also https://github.com/DavidAnson/markdownlint-cli2/issues/186
# so use the tarball from the archlinux mirror
src = fetchurl {
url = "https://us.mirrors.cicku.me/archlinux/extra/os/x86_64/markdownlint-cli2-${finalAttrs.version}-1-any.pkg.tar.zst";
hash = "sha256-M7qmhRDJGm2MhgS2oMfRrkLAst1Ye/rPCwP78UBbyyY=";
src = fetchFromGitHub {
owner = "DavidAnson";
repo = "markdownlint-cli2";
tag = "v${version}";
hash = "sha256-wZfLTk7F9HZaRFvYEo5rT+k/ivNk0fU+p844LMO06ek=";
};
nativeBuildInputs = [
makeWrapper
zstd
];
npmDepsHash = "sha256-tWvweCpzopItgfhpiBHUcpBvrJYCiq588WXzF9hvFfs=";
dontBuild = true;
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp -r lib share $out
makeWrapper "${lib.getExe nodejs}" "$out/bin/markdownlint-cli2" \
--add-flags "$out/lib/node_modules/markdownlint-cli2/markdownlint-cli2-bin.mjs"
runHook postInstall
postPatch = ''
rm -f .npmrc
ln -s ${./package-lock.json} package-lock.json
'';
passthru.tests = {
smoke = runCommand "${finalAttrs.pname}-test" { nativeBuildInputs = [ markdownlint-cli2 ]; } ''
markdownlint-cli2 ${markdownlint-cli2}/share/doc/markdownlint-cli2/README.md > $out
'';
dontNpmBuild = true;
passthru = {
tests = {
smoke = runCommand "${pname}-test" { nativeBuildInputs = [ markdownlint-cli2 ]; } ''
markdownlint-cli2 ${markdownlint-cli2}/lib/node_modules/markdownlint-cli2/CHANGELOG.md > $out
'';
};
updateScript = nix-update-script {
extraArgs = [ "--generate-lockfile" ];
};
};
meta = {
changelog = "https://github.com/DavidAnson/markdownlint-cli2/blob/v${finalAttrs.version}/CHANGELOG.md";
changelog = "https://github.com/DavidAnson/markdownlint-cli2/blob/v${version}/CHANGELOG.md";
description = "Fast, flexible, configuration-based command-line interface for linting Markdown/CommonMark files with the markdownlint library";
homepage = "https://github.com/DavidAnson/markdownlint-cli2";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ natsukium ];
maintainers = with lib.maintainers; [
anthonyroussel
natsukium
];
mainProgram = "markdownlint-cli2";
};
})
}

View file

@ -8,16 +8,16 @@
buildGoModule (finalAttrs: {
pname = "matrix-alertmanager-receiver";
version = "2025.12.24";
version = "2026.1.14";
src = fetchFromGitHub {
owner = "metio";
repo = "matrix-alertmanager-receiver";
tag = finalAttrs.version;
hash = "sha256-RK9Z/QeA0AjOfFROtOYKd3uCPn3NN+eyeuLQVWxlH6U=";
hash = "sha256-JUdnaz790NbiBlUlESIQMR2qehF/8OU0smSrA3+wOSQ=";
};
vendorHash = "sha256-HJEpWf3WeMw9vLj7L6thx1ur5YuC5xjIuMCHaFZ2tS8=";
vendorHash = "sha256-ZZYifNTMCL39ar00duYvvS8B6vJ8QZkMNb8vG6kgYOI=";
env.CGO_ENABLED = "0";

View file

@ -18,21 +18,21 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "matrix-authentication-service";
version = "1.8.0";
version = "1.9.0";
src = fetchFromGitHub {
owner = "element-hq";
repo = "matrix-authentication-service";
tag = "v${finalAttrs.version}";
hash = "sha256-LpjDmSadmga7L93y3UNEnMJQHAeANSbG0qRR7XLprfk=";
hash = "sha256-DfgGh8KAXnGrq2W7V/QWnBF7b3Z26mIWeFQ2tEIPqa4=";
};
cargoHash = "sha256-PsQUA6KgkbKmVwnSUfAMqnULCIMJ4mLjGIGYRlhB4Pk=";
cargoHash = "sha256-r1fG+9mUYKbcAPc7CUUYvFf/Lhjnt6/MDCdCn/uiJU8=";
npmDeps = fetchNpmDeps {
name = "${finalAttrs.pname}-${finalAttrs.version}-npm-deps";
src = "${finalAttrs.src}/${finalAttrs.npmRoot}";
hash = "sha256-3OHKomEml0/g8E3S0fKPcscbv3BoOJ9dQrgLNSLHhvg=";
hash = "sha256-UbaUx2wZi/bUVbdphCTcFBCaFQ8tkuvdYkSduCBRzzU=";
};
npmRoot = "frontend";

View file

@ -33,6 +33,7 @@ python3Packages.buildPythonApplication rec {
with python3Packages;
[
poetry-core
setuptools-rust
]
++ [
rustPlatform.maturinBuildHook
@ -51,7 +52,7 @@ python3Packages.buildPythonApplication rec {
libiconv
];
pythonRemoveDeps = [ "setuptools_rust" ];
pythonRemoveDeps = [ "setuptools-rust" ];
dependencies =
with python3Packages;
@ -82,7 +83,6 @@ python3Packages.buildPythonApplication rec {
pyrsistent
pyyaml
service-identity
setuptools-rust
signedjson
sortedcontainers
treq

View file

@ -9,8 +9,6 @@ python3Packages.buildPythonApplication rec {
version = "0.4.1";
pyproject = true;
disabled = python3Packages.pythonOlder "3.10";
src = fetchFromGitHub {
owner = "GearKite";
repo = "MatrixZulipBridge";

View file

@ -8,18 +8,18 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "meilisearch";
version = "1.32.2";
version = "1.33.0";
src = fetchFromGitHub {
owner = "meilisearch";
repo = "meilisearch";
tag = "v${finalAttrs.version}";
hash = "sha256-72AflpW0z1vpPEYsP07U9NJ84CEPhAbLo+tXxI8Qha4=";
hash = "sha256-OC8JPG/UAgBm+l5bFG4A+4/3cqkUMbeBkqIG+rjiucY=";
};
cargoBuildFlags = [ "--package=meilisearch" ];
cargoHash = "sha256-UCQk76TB7gWFd0077RQ39IXGrGjc6hxhXJW0pBheADU=";
cargoHash = "sha256-MwCbrPnWLipuSaJdtrm595e/geE/pb6Nw1vHL7l/XRU=";
# Default features include mini dashboard which downloads something from the internet.
buildNoDefaultFeatures = true;

View file

@ -7,12 +7,12 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "metee";
version = "6.1.0";
version = "6.2.1";
src = fetchFromGitHub {
owner = "intel";
repo = "metee";
tag = finalAttrs.version;
hash = "sha256-ybTi4pFZAkoO6FAyUOLK+ZbTQb7uwu/sqhYxo06SE9A=";
hash = "sha256-TMHc/0N1DUx+aKOCrfBRoQgKj968FIq+FcusyLG0oPI=";
};
nativeBuildInputs = [ cmake ];

View file

@ -10,16 +10,16 @@
buildGoModule (finalAttrs: {
pname = "moor";
version = "2.10.1";
version = "2.10.2";
src = fetchFromGitHub {
owner = "walles";
repo = "moor";
tag = "v${finalAttrs.version}";
hash = "sha256-xnm1ZKceij5V2AgfB1ZAabDvB+l+Ha6F2WuHAzcA1mo=";
hash = "sha256-DS2cfu/yX+ebCn7V3FQVN8ltCJcEMD+wIjlS+ENHP8w=";
};
vendorHash = "sha256-MQPR4AW+Y+1l7akLxaWI5NAmKmhZdRKTzrueNEqHZoQ=";
vendorHash = "sha256-lz3cq2xL9byhLNbAwEvYOsP9WQsu0hqrWe2EDaLSeOQ=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -49,7 +49,7 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "mumps";
version = "5.8.1";
version = "5.8.2";
# makeFlags contain space and one should use makeFlagsArray+
# Setting this magic var is an optional solution
__structuredAttrs = true;
@ -58,7 +58,7 @@ stdenv.mkDerivation (finalAttrs: {
src = fetchzip {
url = "https://mumps-solver.org/MUMPS_${finalAttrs.version}.tar.gz";
hash = "sha256-60hNYhbHONv9E9VY8G0goE83q7AwJh1u/Z+QRK8anHQ=";
hash = "sha256-AzCzNUd+NFP7Jat4cw1YpA9160cvW1zXLoLxstsbtHA=";
};
postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''

View file

@ -110,6 +110,7 @@ stdenv.mkDerivation (finalAttrs: {
meta = {
description = "Structural Netlist API (and more) for EDA post synthesis flow development";
homepage = "https://github.com/najaeda/naja";
changelog = "https://github.com/najaeda/naja/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.asl20;
teams = [ lib.teams.ngi ];
mainProgram = "naja_edit";

View file

@ -8,16 +8,16 @@
}:
rustPlatform.buildRustPackage rec {
pname = "nix-your-shell";
version = "1.4.6";
version = "1.4.7";
src = fetchFromGitHub {
owner = "MercuryTechnologies";
repo = "nix-your-shell";
tag = "v${version}";
hash = "sha256-FjGjLq/4qeZz9foA7pfz1hiXvsdmbnzB3BpiTESLE1c=";
hash = "sha256-CE1yVD0uT5QnCfuTshAvM4r0BQ6XeaT22PdEhaYJJk8=";
};
cargoHash = "sha256-zQpK13iudyWDZbpAN8zm9kKmz8qy3yt8JxT4lwq4YF0=";
cargoHash = "sha256-BGyO+MK5pRMNFauRvTWxluHoPjqqsIJP1yajWEJnIvI=";
passthru = {
generate-config =

View file

@ -97,7 +97,7 @@ class BaseConverter(Converter[md.TR], Generic[md.TR]):
if lit := option_is(option, key, 'literalMD'):
return [ self._render(f"*{key.capitalize()}:*\n{lit['text']}") ]
elif lit := option_is(option, key, 'literalExpression'):
code = md_make_code(lit['text'])
code = md_make_code(lit['text'], info="nix")
return [ self._render(f"*{key.capitalize()}:*\n{code}") ]
elif key in option:
raise Exception(f"{key} has unrecognized type", option[key])

View file

@ -7,13 +7,13 @@
stdenvNoCC.mkDerivation {
pname = "nu_scripts";
version = "0-unstable-2025-12-28";
version = "0-unstable-2026-01-11";
src = fetchFromGitHub {
owner = "nushell";
repo = "nu_scripts";
rev = "1cb6d6c460949b989b7fb1a6d02456a560521366";
hash = "sha256-Cq814VegRIWRR0UfRz3xV3pHm4C1701I5BoPRsEi+ZQ=";
rev = "c0eef9bb94eaf9d69f1cc27e2e1964fdb66fb24a";
hash = "sha256-KfnxoyLY8F0jx6h/SGQb5hkTBHgaa0fktE1qM4BKTBc=";
};
installPhase = ''

View file

@ -10,13 +10,13 @@
stdenvNoCC.mkDerivation rec {
pname = "numix-icon-theme-circle";
version = "25.12.27";
version = "26.01.11";
src = fetchFromGitHub {
owner = "numixproject";
repo = "numix-icon-theme-circle";
rev = version;
sha256 = "sha256-5/PSZdSLpVlS5+dKjDhN82wuCiQRE/J1OEQSihlB81A=";
sha256 = "sha256-L+GO3TJ7UJYIjpsVtWgFkFd313u+E4I4ResNgQz8T70=";
};
nativeBuildInputs = [ gtk3 ];

View file

@ -35,16 +35,16 @@ let
in
maven.buildMavenPackage rec {
pname = "nzbhydra2";
version = "8.2.2";
version = "8.3.0";
src = fetchFromGitHub {
owner = "theotherp";
repo = pname;
tag = "v${version}";
hash = "sha256-aUaPzfP4PPX08DZxbDhy7U/qH37ddR9jWtt+pt7BqCI=";
hash = "sha256-7CYMh/viZ/9bVZ4gNNZRnKHh4uDH4E5Td2oVC4Rok0M=";
};
mvnHash = "sha256-02Fj7Rv0kGmO7ysHWMjE7qlwFY3G+hQzjXvrvRG/2M8=";
mvnHash = "sha256-dodZT40zNqfaPd8VxfNYY10VrFNlL4xESDdTrgcFaaY=";
mvnFetchExtraArgs.preBuild = ''
mvn -nsu "${timestampParameter}" --projects org.nzbhydra:github-release-plugin "-Dmaven.repo.local=$out/.m2" clean install
@ -90,7 +90,7 @@ maven.buildMavenPackage rec {
meta = {
description = "Usenet meta search";
homepage = "https://github.com/theotherp/nzbhydra2";
license = lib.licenses.asl20;
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [
matteopacini
tmarkus

View file

@ -8,16 +8,16 @@
buildNpmPackage (finalAttrs: {
pname = "particle-cli";
version = "3.44.1";
version = "3.45.0";
src = fetchFromGitHub {
owner = "particle-iot";
repo = "particle-cli";
tag = "v${finalAttrs.version}";
hash = "sha256-l4MzJ57PkNECW2/k7gnVsrHcJtc4vZRsgzUkGz1hQiU=";
hash = "sha256-Hq2flUBStEouVEhYI25fNFK9ohvHfk792vlPa7b3DRA=";
};
npmDepsHash = "sha256-B9r8wvpIPnLupuhycocJCl5EN63xi1KI5fHT5uQZTzY=";
npmDepsHash = "sha256-rHT8ZLBe3uO1NxrbVBdrh0fn9gvBVq4XE8Gfhcshq/E=";
buildInputs = [
udev

View file

@ -6,16 +6,16 @@
buildGoModule rec {
pname = "pgmetrics";
version = "1.18.0";
version = "1.19.0";
src = fetchFromGitHub {
owner = "rapidloop";
repo = "pgmetrics";
rev = "v${version}";
sha256 = "sha256-kaoJZdBzx2DGvoA+aIJnfM2ORTM9xMXHaXEuUD/qqe0=";
sha256 = "sha256-PvixAR6jLhwK4nbGWEAnQkjI+JtSwX2izI7/ksi7qs8=";
};
vendorHash = "sha256-2p8BZw/GB/w99VL5NFIBpmyadNmasqrWVncpBHTyh6Q=";
vendorHash = "sha256-LphlFl56M8G3kncnj66u1CixgBTLvDBtWqXtUjHDY14=";
doCheck = false;

View file

@ -11,13 +11,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "ptcollab";
version = "0.6.4.9";
version = "0.6.4.10";
src = fetchFromGitHub {
owner = "yuxshao";
repo = "ptcollab";
rev = "v${finalAttrs.version}";
hash = "sha256-1fVhimwBAYtC+HnuxA7ywfEnVlqHnlzwfKT9+H/ZG0k=";
hash = "sha256-8CllDcbbVXmDyD5jyKVoNq96wqWtfoPM2CEN13KYptQ=";
};
nativeBuildInputs = [

View file

@ -10,8 +10,6 @@ python3Packages.buildPythonApplication rec {
version = "2.5.1";
pyproject = true;
disabled = python3Packages.pythonOlder "3.10";
src = fetchFromGitHub {
owner = "hyprland-community";
repo = "pyprland";

View file

@ -7,16 +7,16 @@
}:
rustPlatform.buildRustPackage rec {
pname = "railway";
version = "4.23.2";
version = "4.25.3";
src = fetchFromGitHub {
owner = "railwayapp";
repo = "cli";
rev = "v${version}";
hash = "sha256-3Uh8SR4H0mgsamGCLrpgq+ujNtegPQvSVUm7ALfQLh8=";
hash = "sha256-dml5lyZoA4f9W9MdiSRj2P9+mXs9s87w8cS2J0RvC2k=";
};
cargoHash = "sha256-voN3tRl4CetkuQ9RbIQzpIO2gJeBzP9TPmouJyqeYSw=";
cargoHash = "sha256-9zk+SHwZL80fB/HuQbfpYvOTKx3UCNLvvlbnDAB/VYM=";
nativeBuildInputs = [ pkg-config ];

View file

@ -7,13 +7,13 @@
buildGoModule rec {
pname = "routedns";
version = "0.1.128";
version = "0.1.130";
src = fetchFromGitHub {
owner = "folbricht";
repo = "routedns";
rev = "v${version}";
hash = "sha256-jUk0wa+hw0MIXnV1K/n19rGRKKolEf6q+dtKHmnuj3I=";
hash = "sha256-eYtFfRi+w+0xnIZi/OXc+dt/HI/SQxoZphgduK6eETU=";
};
vendorHash = "sha256-woInU618JPwVxGDJDZQ6+j9wY6qNSB5Xu8wXf7s2qvQ=";

View file

@ -6,16 +6,16 @@
buildGoModule (finalAttrs: {
pname = "rqlite";
version = "9.3.14";
version = "9.3.15";
src = fetchFromGitHub {
owner = "rqlite";
repo = "rqlite";
tag = "v${finalAttrs.version}";
hash = "sha256-DZOL2klXdB7fKWnImQeRbeSSeDgluAHAPO7yP8QNak4=";
hash = "sha256-VMVDXpbDN8mZJJycsFK1LOujIXw29584wnDE470C87U=";
};
vendorHash = "sha256-4HHUtmF4Q9QzVCqHYCkIG8lHlQ7soBXsGFuGl4uL8PQ=";
vendorHash = "sha256-O/VaYGjEMTOExdQfaL3XcnPmQxEYXjCMVfI6Vl+roZw=";
subPackages = [
"cmd/rqlite"

View file

@ -2,27 +2,39 @@
lib,
rustPlatform,
fetchCrate,
versionCheckHook,
nix-update-script,
}:
rustPlatform.buildRustPackage rec {
rustPlatform.buildRustPackage (finalAttrs: {
pname = "rune-languageserver";
version = "0.13.4";
version = "0.14.1";
src = fetchCrate {
inherit pname version;
hash = "sha256-Kw6Qh/9eQPMj4V689+7AxuJB+aCciK3FZTfcdhyZXGY=";
inherit (finalAttrs) pname version;
hash = "sha256-0b8XGbMQqMolOdQEMjpwHAVI3A4fXemyCowN39qY16A=";
};
cargoHash = "sha256-YviRACndc4r4ul72ZF3I/R/nEsIoML2Ek2xqUUE3FDQ=";
cargoHash = "sha256-QrzOpfDpG08IUoydvSoh0qxJ0vg86391NnyEyJeZr54=";
env = {
RUNE_VERSION = version;
RUNE_VERSION = finalAttrs.version;
};
nativeInstallCheckInputs = [
versionCheckHook
];
doInstallCheck = true;
passthru = {
updateScript = nix-update-script { };
};
meta = {
description = "Language server for the Rune Language, an embeddable dynamic programming language for Rust";
homepage = "https://crates.io/crates/rune-languageserver";
changelog = "https://github.com/rune-rs/rune/releases/tag/${version}";
downloadPage = "https://github.com/rune-rs/rune";
changelog = "https://github.com/rune-rs/rune/releases/tag/${finalAttrs.version}";
license = with lib.licenses; [
asl20
mit
@ -30,4 +42,4 @@ rustPlatform.buildRustPackage rec {
maintainers = [ ];
mainProgram = "rune-languageserver";
};
}
})

View file

@ -16,13 +16,13 @@
stdenv.mkDerivation rec {
pname = "showmethekey";
version = "1.18.4";
version = "1.19.0";
src = fetchFromGitHub {
owner = "AlynxZhou";
repo = "showmethekey";
tag = "v${version}";
hash = "sha256-Wj7r4rnY8+QGWtk9h88gk3LxkNLIKUA/46lkyPK86h0=";
hash = "sha256-jQRckUqLe9sshi3SJqpFwSsy5H0Gp17kkcCdslwg6cM=";
};
nativeBuildInputs = [

View file

@ -10,16 +10,16 @@
buildGoModule (finalAttrs: {
pname = "sing-box";
version = "1.12.16";
version = "1.12.17";
src = fetchFromGitHub {
owner = "SagerNet";
repo = "sing-box";
tag = "v${finalAttrs.version}";
hash = "sha256-enmT6BnGzEpk9BPB9IZWJctMoe/FiNqYmkiq0d9/m2k=";
hash = "sha256-3dxkoSfXSMID8GVhjyPC2n8UNqOx8IkSkGuFmWZ3TbI=";
};
vendorHash = "sha256-rs5Jxj75qU47zEH0gbYy0/QUSq3sektaITcefg2Qb78=";
vendorHash = "sha256-p5E3tJiqhgTeE35vVt03Yo9oF3DZPO9hXuKKR6r0V+g=";
tags = [
"with_quic"

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