Merge staging-next into staging

This commit is contained in:
nixpkgs-ci[bot]
2025-02-28 00:15:21 +00:00
committed by GitHub
173 changed files with 2736 additions and 3418 deletions

View File

@@ -31,7 +31,7 @@ jobs:
token: ${{ steps.app-token.outputs.token }}
- name: Create backport PRs
uses: korthout/backport-action@be567af183754f6a5d831ae90f648954763f17f5 # v3.1.0
uses: korthout/backport-action@436145e922f9561fc5ea157ff406f21af2d6b363 # v3.2.0
with:
# Config README: https://github.com/korthout/backport-action#backport-action
copy_labels_pattern: 'severity:\ssecurity'

View File

@@ -255,6 +255,70 @@ runCommand "example" {
:::
## `testBuildFailure'` {#tester-testBuildFailurePrime}
This tester wraps the functionality provided by [`testers.testBuildFailure`](#tester-testBuildFailure) to make writing checks easier by simplifying checking the exit code of the builder and asserting the existence of entries in the builder's log.
Additionally, users may specify a script containing additional checks, accessing the result of applying `testers.testBuildFailure` through the variable `failed`.
NOTE: This tester will produce an empty output and exit with success if none of the checks fail; there is no need to `touch "$out"` in `script`.
:::{.example #ex-testBuildFailurePrime-doc-example}
# Check that a build fails, and verify the changes made during build
Re-using the example from [`testers.testBuildFailure`](#ex-testBuildFailure-showingenvironmentchanges), we can see how common checks are made easier and remove the need for `runCommand`:
```nix
testers.testBuildFailure' {
drv = runCommand "doc-example" { } ''
echo ok-ish >"$out"
echo failing though
exit 3
'';
expectedBuilderExitCode = 3;
expectedBuilderLogEntries = [ "failing though" ];
script = ''
grep --silent -F 'ok-ish' "$failed/result"
'';
}
```
:::
### Inputs {#tester-testBuildFailurePrime-inputs}
`drv` (derivation)
: The failing derivation to wrap with `testBuildFailure`.
`name` (string, optional)
: The name of the test.
When not provided, this value defaults to `testBuildFailure-${(testers.testBuildFailure drv).name}`.
`expectedBuilderExitCode` (integer, optional)
: The expected exit code of the builder of `drv`.
When not provided, this value defaults to `1`.
`expectedBuilderLogEntries` (array of string-like values, optional)
: A list of string-like values which must be found in the builder's log by exact match.
When not provided, this value defaults to `[ ]`.
NOTE: Patterns and regular expressions are not supported.
`script` (string, optional)
: A string containing additional checks to run.
When not provided, this value defaults to `""`.
The result of `testers.testBuildFailure drv` is available through the variable `failed`.
As an example, the builder's log is at `"$failed/testBuildFailure.log"`.
### Return value {#tester-testBuildFailurePrime-return}
The tester produces an empty output and only succeeds when the checks using `expectedBuilderExitCode`, `expectedBuilderLogEntries`, and `script` succeed.
## `testEqualContents` {#tester-testEqualContents}
Check that two paths have the same contents.

View File

@@ -8,6 +8,9 @@
"ex-build-helpers-extendMkDerivation": [
"index.html#ex-build-helpers-extendMkDerivation"
],
"ex-testBuildFailurePrime-doc-example": [
"index.html#ex-testBuildFailurePrime-doc-example"
],
"neovim": [
"index.html#neovim"
],
@@ -332,6 +335,15 @@
"footnote-stdenv-find-inputs-location.__back.0": [
"index.html#footnote-stdenv-find-inputs-location.__back.0"
],
"tester-testBuildFailurePrime": [
"index.html#tester-testBuildFailurePrime"
],
"tester-testBuildFailurePrime-inputs": [
"index.html#tester-testBuildFailurePrime-inputs"
],
"tester-testBuildFailurePrime-return": [
"index.html#tester-testBuildFailurePrime-return"
],
"variables-specifying-dependencies": [
"index.html#variables-specifying-dependencies"
],

View File

@@ -23443,6 +23443,12 @@
github = "thilobillerbeck";
githubId = 7442383;
};
thiloho = {
name = "Thilo Hohlt";
email = "thilo.hohlt@tutanota.com";
github = "thiloho";
githubId = 123883702;
};
thled = {
name = "Thomas Le Duc";
email = "dev@tleduc.de";

View File

@@ -63,6 +63,8 @@
- [Bonsai](https://git.sr.ht/~stacyharper/bonsai), a general-purpose event mapper/state machine primarily used to create complex key shortcuts, and as part of the [SXMO](https://sxmo.org/) desktop environment. Available as [services.bonsaid](#opt-services.bonsaid.enable).
- [archtika](https://github.com/archtika/archtika), a FLOSS, modern, performant, lightweight and self‑hosted CMS. Available as [services.archtika](#opt-services.archtika.enable).
- [scanservjs](https://github.com/sbs20/scanservjs/), a web UI for SANE scanners. Available at [services.scanservjs](#opt-services.scanservjs.enable).
- [Kimai](https://www.kimai.org/), a web-based multi-user time-tracking application. Available as [services.kimai](options.html#opt-services.kimai).
@@ -223,6 +225,9 @@
- The `services.locate` module does no longer support findutil's `locate` due to its inferior performance compared to `mlocate` and `plocate`. The new default is `plocate`.
As the `service.locate.localuser` option only applied when using findutil's `locate`, it has also been removed.
- `services.paperless` now installs `paperless-manage` as a normal system package instead of creating a symlink in `/var/lib/paperless`.
`paperless-manage` now also changes to the appropriate user when being executed.
- `kmonad` is now hardened by default using common `systemd` settings.
If KMonad is used to execute shell commands, hardening may make some of them fail. In that case, you can disable hardening using {option}`services.kmonad.keyboards.<name>.enableHardening` option.
@@ -470,6 +475,9 @@
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
- `virtualisation.containers` with backend "podman" now supports rootless containers and `sd_notify(3)`-integration
based on container healthchecks.
- Cinnamon has been updated to 6.4, please check the [upstream announcement](https://www.linuxmint.com/rel_xia_whatsnew.php) for more details.
- Following [changes in Mint 22](https://github.com/linuxmint/mintupgrade/commit/f239cde908288b8c250f938e7311c7ffbc16bd59) we are no longer overriding Qt application styles. You can still restore the previous default with `qt.style = "gtk2"` and `qt.platformTheme = "gtk2"`.
- Following [changes in Mint 20](https://github.com/linuxmint/mintupgrade-legacy/commit/ce15d946ed9a8cb8444abd25088edd824bfb18f6) we are replacing xplayer with celluloid since xplayer is no longer maintained.
@@ -549,6 +557,8 @@
- `gerbera` now has wavpack support.
- A toggle has been added under `users.users.<name>.enable` to allow toggling individual users conditionally. If set to false, the user account will not be created.
- `ddclient` was updated from 3.11.2 to 4.0.0 [Release notes](https://github.com/ddclient/ddclient/releases/tag/v4.0.0)
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->

View File

@@ -124,6 +124,16 @@ let
options = {
enable = mkOption {
type = types.bool;
default = true;
example = false;
description = ''
If set to false, the user account will not be created. This is useful for when you wish to conditionally
disable user accounts.
'';
};
name = mkOption {
type = types.passwdEntry types.str;
apply = x: assert (stringLength x < 32 || abort "Username '${x}' is longer than 31 characters which is not allowed!"); x;
@@ -557,7 +567,7 @@ let
autoSubUidGidRange subUidRanges subGidRanges
initialPassword initialHashedPassword expires;
shell = utils.toShellPath u.shell;
}) cfg.users;
}) (filterAttrs (_: u: u.enable) cfg.users);
groups = attrValues cfg.groups;
});

View File

@@ -1459,6 +1459,7 @@
./services/web-apps/agorakit.nix
./services/web-apps/alps.nix
./services/web-apps/anuko-time-tracker.nix
./services/web-apps/archtika.nix
./services/web-apps/artalk.nix
./services/web-apps/audiobookshelf.nix
./services/web-apps/bluemap.nix

View File

@@ -32,11 +32,22 @@ let
else toString s
) cfg.settings);
manage = pkgs.writeShellScript "manage" ''
manage = pkgs.writeShellScriptBin "paperless-manage" ''
set -o allexport # Export the following env vars
${lib.toShellVars env}
${lib.optionalString (cfg.environmentFile != null) "source ${cfg.environmentFile}"}
exec ${cfg.package}/bin/paperless-ngx "$@"
cd '${cfg.dataDir}'
sudo=exec
if [[ "$USER" != ${cfg.user} ]]; then
${
if config.security.sudo.enable then
"sudo='exec ${config.security.wrapperDir}/sudo -u ${cfg.user} -E'"
else
">&2 echo 'Aborting, paperless-manage must be run as user `${cfg.user}`!'; exit 2"
}
fi
$sudo ${lib.getExe cfg.package} "$@"
'';
defaultServiceConfig = {
@@ -94,14 +105,13 @@ in
type = lib.types.bool;
default = false;
description = ''
Enable Paperless.
Whether to enable Paperless-ngx.
When started, the Paperless database is automatically created if it doesn't
exist and updated if the Paperless package has changed.
When started, the Paperless database is automatically created if it doesn't exist
and updated if the Paperless package has changed.
Both tasks are achieved by running a Django migration.
A script to manage the Paperless instance (by wrapping Django's manage.py) is linked to
`''${dataDir}/paperless-manage`.
A script to manage the Paperless-ngx instance (by wrapping Django's manage.py) is available as `paperless-manage`.
'';
};
@@ -139,8 +149,7 @@ in
A file containing the superuser password.
A superuser is required to access the web interface.
If unset, you can create a superuser manually by running
`''${dataDir}/paperless-manage createsuperuser`.
If unset, you can create a superuser manually by running `paperless-manage createsuperuser`.
The default superuser name is `admin`. To change it, set
option {option}`settings.PAPERLESS_ADMIN_USER`.
@@ -288,6 +297,8 @@ in
};
config = lib.mkIf cfg.enable (lib.mkMerge [ {
environment.systemPackages = [ manage ];
services.redis.servers.paperless.enable = lib.mkIf enableRedis true;
services.postgresql = lib.mkIf cfg.database.createLocally {
@@ -336,7 +347,9 @@ in
environment = env;
preStart = ''
ln -sf ${manage} ${cfg.dataDir}/paperless-manage
# remove old papaerless-manage symlink
# TODO: drop with NixOS 25.11
[[ -L '${cfg.dataDir}/paperless-manage' ]] && rm '${cfg.dataDir}/paperless-manage'
# Auto-migrate on first run or if the package has changed
versionFile="${cfg.dataDir}/src-version"
@@ -504,10 +517,10 @@ in
OnSuccess = services;
};
enableStrictShellChecks = true;
path = [ manage ];
script = ''
./paperless-manage document_exporter ${cfg.exporter.directory} ${lib.cli.toGNUCommandLineShell {} cfg.exporter.settings}
paperless-manage document_exporter ${cfg.exporter.directory} ${lib.cli.toGNUCommandLineShell {} cfg.exporter.settings}
'';
};
})
]);
})]);
}

View File

@@ -18,6 +18,7 @@ in
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
systemd.services.netclient = {
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
description = "Netclient Daemon";

View File

@@ -27,7 +27,7 @@ let
'';
sojuctl = pkgs.writeShellScriptBin "sojuctl" ''
exec ${cfg.package}/bin/sojuctl --config ${configFile} "$@"
exec ${lib.getExe' cfg.package "sojuctl"} --config ${cfg.configFile} "$@"
'';
in
{
@@ -107,7 +107,18 @@ in
extraConfig = mkOption {
type = types.lines;
default = "";
description = "Lines added verbatim to the configuration file.";
description = "Lines added verbatim to the generated configuration file.";
};
configFile = mkOption {
type = types.path;
default = configFile;
defaultText = "Config file generated from other options.";
description = ''
Path to config file. If this option is set, it will override any
configuration done using other options, including {option}`extraConfig`.
'';
example = literalExpression "./soju.conf";
};
};
@@ -134,7 +145,7 @@ in
serviceConfig = {
DynamicUser = true;
Restart = "always";
ExecStart = "${cfg.package}/bin/soju -config ${configFile}";
ExecStart = "${lib.getExe' cfg.package "soju"} -config ${cfg.configFile}";
StateDirectory = "soju";
RuntimeDirectory = "soju";
};

View File

@@ -31,7 +31,7 @@ let
;
isNormal = opts.isNormalUser;
shell = utils.toShellPath opts.shell;
}) config.users.users;
}) (lib.filterAttrs (_: u: u.enable) config.users.users);
};
userbornConfigJson = pkgs.writeText "userborn.json" (builtins.toJSON userbornConfig);
@@ -95,16 +95,23 @@ in
# Create home directories, do not create /var/empty even if that's a user's
# home.
tmpfiles.settings.home-directories = lib.mapAttrs' (
username: opts:
lib.nameValuePair (toString opts.home) {
d = {
mode = opts.homeMode;
user = opts.name;
inherit (opts) group;
};
}
) (lib.filterAttrs (_username: opts: opts.createHome && opts.home != "/var/empty") userCfg.users);
tmpfiles.settings.home-directories =
lib.mapAttrs'
(
username: opts:
lib.nameValuePair (toString opts.home) {
d = {
mode = opts.homeMode;
user = opts.name;
inherit (opts) group;
};
}
)
(
lib.filterAttrs (
_username: opts: opts.enable && opts.createHome && opts.home != "/var/empty"
) userCfg.users
);
services.userborn = {
wantedBy = [ "sysinit.target" ];

View File

@@ -0,0 +1,307 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib)
mkEnableOption
mkOption
mkIf
mkPackageOption
types
;
cfg = config.services.archtika;
in
{
options.services.archtika = {
enable = mkEnableOption "Whether to enable the archtika service";
package = mkPackageOption pkgs "archtika" { };
user = mkOption {
type = types.str;
default = "archtika";
description = "User account under which archtika runs.";
};
group = mkOption {
type = types.str;
default = "archtika";
description = "Group under which archtika runs.";
};
databaseName = mkOption {
type = types.str;
default = "archtika";
description = "Name of the PostgreSQL database for archtika.";
};
apiPort = mkOption {
type = types.port;
default = 5000;
description = "Port on which the API runs.";
};
apiAdminPort = mkOption {
type = types.port;
default = 7500;
description = "Port on which the API admin server runs.";
};
webAppPort = mkOption {
type = types.port;
default = 10000;
description = "Port on which the web application runs.";
};
domain = mkOption {
type = types.str;
description = "Domain to use for the application.";
};
settings = mkOption {
description = "Settings for the running archtika application.";
type = types.submodule {
options = {
disableRegistration = mkOption {
type = types.bool;
default = false;
description = "By default any user can create an account. That behavior can be disabled with this option.";
};
maxUserWebsites = mkOption {
type = types.ints.positive;
default = 2;
description = "Maximum number of websites allowed per user by default.";
};
maxWebsiteStorageSize = mkOption {
type = types.ints.positive;
default = 50;
description = "Maximum amount of disk space in MB allowed per user website by default.";
};
};
};
};
};
config = mkIf cfg.enable (
let
baseHardenedSystemdOptions = {
CapabilityBoundingSet = "";
LockPersonality = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectSystem = "strict";
RemoveIPC = true;
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged"
"~@resources"
];
ReadWritePaths = [ "/var/www/archtika-websites" ];
};
in
{
users.users.${cfg.user} = {
isSystemUser = true;
group = cfg.group;
};
users.groups.${cfg.group} = {
members = [
"nginx"
"postgres"
];
};
systemd.tmpfiles.settings."10-archtika" = {
"/var/www" = {
d = {
mode = "0755";
user = "root";
group = "root";
};
};
"/var/www/archtika-websites" = {
d = {
mode = "0770";
user = cfg.user;
group = cfg.group;
};
};
};
systemd.services.archtika-api = {
description = "archtika API service";
wantedBy = [ "multi-user.target" ];
after = [
"network.target"
"postgresql.service"
];
path = [ config.services.postgresql.package ];
serviceConfig = baseHardenedSystemdOptions // {
User = cfg.user;
Group = cfg.group;
Restart = "always";
WorkingDirectory = "${cfg.package}/rest-api";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_UNIX"
];
};
script =
let
dbUrl = user: "postgres://${user}@/${cfg.databaseName}?host=/var/run/postgresql";
in
''
JWT_SECRET=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c64)
psql ${dbUrl "postgres"} \
-c "ALTER DATABASE ${cfg.databaseName} SET \"app.jwt_secret\" TO '$JWT_SECRET'" \
-c "ALTER DATABASE ${cfg.databaseName} SET \"app.website_max_storage_size\" TO ${toString cfg.settings.maxWebsiteStorageSize}" \
-c "ALTER DATABASE ${cfg.databaseName} SET \"app.website_max_number_user\" TO ${toString cfg.settings.maxUserWebsites}"
${lib.getExe pkgs.dbmate} --url "${dbUrl "postgres"}&sslmode=disable" --migrations-dir ${cfg.package}/rest-api/db/migrations up
PGRST_SERVER_CORS_ALLOWED_ORIGINS="https://${cfg.domain}" \
PGRST_ADMIN_SERVER_PORT=${toString cfg.apiAdminPort} \
PGRST_SERVER_PORT=${toString cfg.apiPort} \
PGRST_DB_SCHEMAS="api" \
PGRST_DB_ANON_ROLE="anon" \
PGRST_OPENAPI_MODE="ignore-privileges" \
PGRST_DB_URI=${dbUrl "authenticator"} \
PGRST_JWT_SECRET="$JWT_SECRET" \
${lib.getExe pkgs.postgrest}
'';
};
systemd.services.archtika-web = {
description = "archtika Web App service";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = baseHardenedSystemdOptions // {
User = cfg.user;
Group = cfg.group;
Restart = "always";
WorkingDirectory = "${cfg.package}/web-app";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
};
environment = {
REGISTRATION_IS_DISABLED = toString cfg.settings.disableRegistration;
BODY_SIZE_LIMIT = "10M";
ORIGIN = "https://${cfg.domain}";
PORT = toString cfg.webAppPort;
};
script = "${lib.getExe pkgs.nodejs} ${cfg.package}/web-app";
};
services.postgresql = {
enable = true;
ensureDatabases = [ cfg.databaseName ];
extensions = ps: with ps; [ pgjwt ];
authentication = lib.mkOverride 11 ''
local postgres postgres trust
local ${cfg.databaseName} all trust
'';
};
systemd.services.postgresql = {
path = with pkgs; [
gnutar
gzip
];
serviceConfig = {
ReadWritePaths = [ "/var/www/archtika-websites" ];
SystemCallFilter = [ "@system-service" ];
};
};
services.nginx = {
enable = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
recommendedZstdSettings = true;
recommendedOptimisation = true;
appendHttpConfig = ''
map $http_cookie $archtika_auth_header {
default "";
"~*session_token=([^;]+)" "Bearer $1";
}
'';
virtualHosts = {
"${cfg.domain}" = {
useACMEHost = cfg.domain;
forceSSL = true;
locations = {
"/" = {
proxyPass = "http://127.0.0.1:${toString cfg.webAppPort}";
};
"/previews/" = {
alias = "/var/www/archtika-websites/previews/";
index = "index.html";
tryFiles = "$uri $uri/ $uri.html =404";
};
"/api/rpc/export_articles_zip" = {
proxyPass = "http://127.0.0.1:${toString cfg.apiPort}/rpc/export_articles_zip";
extraConfig = ''
default_type application/json;
proxy_set_header Authorization $archtika_auth_header;
'';
};
"/api/" = {
proxyPass = "http://127.0.0.1:${toString cfg.apiPort}/";
extraConfig = ''
default_type application/json;
'';
};
"/api/rpc/register" = mkIf cfg.settings.disableRegistration {
extraConfig = ''
deny all;
'';
};
};
};
"~^(?<subdomain>.+)\\.${cfg.domain}$" = {
useACMEHost = cfg.domain;
forceSSL = true;
locations = {
"/" = {
root = "/var/www/archtika-websites/$subdomain";
index = "index.html";
tryFiles = "$uri $uri/ $uri.html =404";
};
};
};
};
};
}
);
meta.maintainers = [ lib.maintainers.thiloho ];
}

View File

@@ -220,7 +220,8 @@ in
'';
locations = {
"/".proxyPass = "http://127.0.0.1:${toString cfg.paste.port}";
"/mgoblin_static/".alias = "${finalPackage}/${finalPackage.python.sitePackages}/mediagoblin/static/";
"/mgoblin_static/".alias =
"${finalPackage}/${finalPackage.python.sitePackages}/mediagoblin/static/";
"/mgoblin_media/".alias = "/var/lib/mediagoblin/user_dev/media/public/";
"/theme_static/".alias = "/var/lib/mediagoblin/user_dev/theme_static/";
"/plugin_static/".alias = "/var/lib/mediagoblin/user_dev/plugin_static/";
@@ -252,7 +253,7 @@ in
++ lib.optionals (cfg.settings.mediagoblin.plugins ? "mediagoblin.media_types.pdf") (
with pkgs;
[
poppler_utils
poppler-utils
unoconv
]
);

View File

@@ -57,7 +57,7 @@ in
libreoffice
qpdf
ocrmypdf
poppler_utils
poppler-utils
unoconv
pngquant
tesseract

View File

@@ -17,6 +17,10 @@ let
{ name, ... }:
{
config = {
podman = mkIf (cfg.backend == "podman") { };
};
options = {
image = mkOption {
@@ -287,6 +291,43 @@ let
'';
};
podman = mkOption {
type = types.nullOr (
types.submodule {
options = {
sdnotify = mkOption {
default = "conmon";
type = types.enum [
"conmon"
"healthy"
"container"
];
description = ''
Determines how `podman` should notify systemd that the unit is ready. There are
[three options](https://docs.podman.io/en/latest/markdown/podman-run.1.html#sdnotify-container-conmon-healthy-ignore):
* `conmon`: marks the unit as ready when the container has started.
* `healthy`: marks the unit as ready when the [container's healthcheck](https://docs.podman.io/en/stable/markdown/podman-healthcheck-run.1.html) passes.
* `container`: `NOTIFY_SOCKET` is passed into the container and the process inside the container needs to indicate on its own that it's ready.
'';
};
user = mkOption {
default = "root";
type = types.str;
description = ''
The user under which the container should run.
'';
};
};
}
);
default = null;
description = ''
Podman-specific settings in OCI containers. These must be null when using
the `docker` backend.
'';
};
pull = mkOption {
type =
with types;
@@ -379,16 +420,20 @@ let
${container.imageStream} | ${cfg.backend} load
''}
${optionalString (cfg.backend == "podman") ''
rm -f /run/podman-${escapedName}.ctr-id
rm -f /run/${escapedName}/ctr-id
''}
'';
};
effectiveUser = container.podman.user or "root";
dependOnLingerService =
cfg.backend == "podman" && effectiveUser != "root" && config.users.users.${effectiveUser}.linger;
in
{
wantedBy = [ ] ++ optional (container.autoStart) "multi-user.target";
wants = lib.optional (
container.imageFile == null && container.imageStream == null
) "network-online.target";
wants =
lib.optional (container.imageFile == null && container.imageStream == null) "network-online.target"
++ lib.optional dependOnLingerService "linger-users.service";
after =
lib.optionals (cfg.backend == "docker") [
"docker.service"
@@ -398,9 +443,15 @@ let
++ lib.optionals (container.imageFile == null && container.imageStream == null) [
"network-online.target"
]
++ dependsOn;
++ dependsOn
++ lib.optional dependOnLingerService "linger-users.service";
requires = dependsOn;
environment = proxy_env;
environment = lib.mkMerge [
proxy_env
(mkIf (cfg.backend == "podman" && container.podman.user != "root") {
HOME = config.users.users.${container.podman.user}.home;
})
];
path =
if cfg.backend == "docker" then
@@ -424,9 +475,9 @@ let
++ optional (container.entrypoint != null) "--entrypoint=${escapeShellArg container.entrypoint}"
++ optional (container.hostname != null) "--hostname=${escapeShellArg container.hostname}"
++ lib.optionals (cfg.backend == "podman") [
"--cidfile=/run/podman-${escapedName}.ctr-id"
"--cgroups=no-conmon"
"--sdnotify=conmon"
"--cidfile=/run/${escapedName}/ctr-id"
"--cgroups=enabled"
"--sdnotify=${container.podman.sdnotify}"
"-d"
"--replace"
]
@@ -454,13 +505,13 @@ let
preStop =
if cfg.backend == "podman" then
"podman stop --ignore --cidfile=/run/podman-${escapedName}.ctr-id"
"podman stop --ignore --cidfile=/run/${escapedName}/ctr-id"
else
"${cfg.backend} stop ${name} || true";
postStop =
if cfg.backend == "podman" then
"podman rm -f --ignore --cidfile=/run/podman-${escapedName}.ctr-id"
"podman rm -f --ignore --cidfile=/run/${escapedName}/ctr-id"
else
"${cfg.backend} rm -f ${name} || true";
@@ -490,6 +541,9 @@ let
Environment = "PODMAN_SYSTEMD_UNIT=podman-${name}.service";
Type = "notify";
NotifyAccess = "all";
Delegate = mkIf (container.podman.sdnotify == "healthy") true;
User = effectiveUser;
RuntimeDirectory = escapedName;
};
};
@@ -536,17 +590,46 @@ in
assertions =
let
toAssertion =
_:
{ imageFile, imageStream, ... }:
toAssertions =
name:
{
assertion = imageFile == null || imageStream == null;
message = "You can only define one of imageFile and imageStream";
};
imageFile,
imageStream,
podman,
...
}:
[
{
assertion = imageFile == null || imageStream == null;
message = "virtualisation.oci-containers.containers.${name}: You can only define one of imageFile and imageStream";
}
{
assertion = cfg.backend == "docker" -> podman == null;
message = "virtualisation.oci-containers.containers.${name}: Cannot set `podman` option if backend is `docker`.";
}
];
in
lib.mapAttrsToList toAssertion cfg.containers;
concatMap (name: toAssertions name cfg.containers.${name}) (lib.attrNames cfg.containers);
warnings = mkIf (cfg.backend == "podman") (
lib.foldlAttrs (
warnings: name:
{ podman, ... }:
let
inherit (config.users.users.${podman.user}) linger;
in
warnings
++ lib.optional (podman.user != "root" && linger && podman.sdnotify == "conmon") ''
Podman container ${name} is configured as rootless (user ${podman.user})
with `--sdnotify=conmon`, but lingering for this user is turned on.
''
++ lib.optional (podman.user != "root" && !linger && podman.sdnotify == "healthy") ''
Podman container ${name} is configured as rootless (user ${podman.user})
with `--sdnotify=healthy`, but lingering for this user is turned off.
''
) [ ] cfg.containers
);
}
(lib.mkIf (cfg.backend == "podman") {
virtualisation.podman.enable = true;
@@ -556,5 +639,4 @@ in
})
]
);
}

View File

@@ -1201,6 +1201,7 @@ in {
userborn-mutable-etc = runTest ./userborn-mutable-etc.nix;
userborn-immutable-etc = runTest ./userborn-immutable-etc.nix;
user-activation-scripts = handleTest ./user-activation-scripts.nix {};
user-enable-option = runTest ./user-enable-option.nix;
user-expiry = runTest ./user-expiry.nix;
user-home-mode = handleTest ./user-home-mode.nix {};
ustreamer = handleTest ./ustreamer.nix {};

View File

@@ -7,7 +7,7 @@ import ./make-test-python.nix (
{ pkgs, ... }:
{
imports = [ ./common/user-account.nix ];
environment.systemPackages = [ pkgs.poppler_utils ];
environment.systemPackages = [ pkgs.poppler-utils ];
fonts.packages = [ pkgs.dejavu_fonts ]; # yields more OCR-able pdf
services.printing.cups-pdf.enable = true;
services.printing.cups-pdf.instances = {

View File

@@ -4,7 +4,7 @@ import ./make-test-python.nix (
# build a getent that itself doesn't see anything in /etc/hosts and
# /etc/nsswitch.conf, by using libredirect to steer its own requests to
# /dev/null.
# This means is /has/ to go via nscd to actuallly resolve any of the
# This means is /has/ to go via nscd to actually resolve any of the
# additionally configured hosts.
getent' = pkgs.writeScript "getent-without-etc-hosts" ''
export NIX_REDIRECTS=/etc/hosts=/dev/null:/etc/nsswitch.conf=/dev/null

View File

@@ -63,8 +63,65 @@ let
'';
};
podmanRootlessTests = lib.genAttrs [ "conmon" "healthy" ] (
type:
makeTest {
name = "oci-containers-podman-rootless-${type}";
meta.maintainers = lib.teams.flyingcircus.members;
nodes = {
podman =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.redis ];
users.groups.redis = { };
users.users.redis = {
isSystemUser = true;
group = "redis";
home = "/var/lib/redis";
linger = type == "healthy";
createHome = true;
subUidRanges = [
{
count = 65536;
startUid = 2147483646;
}
];
subGidRanges = [
{
count = 65536;
startGid = 2147483647;
}
];
};
virtualisation.oci-containers = {
backend = "podman";
containers.redis = {
image = "redis:latest";
imageFile = pkgs.dockerTools.examples.redis;
ports = [ "6379:6379" ];
podman = {
user = "redis";
sdnotify = type;
};
};
};
};
};
testScript = ''
start_all()
podman.wait_for_unit("podman-redis.service")
${lib.optionalString (type != "healthy") ''
podman.wait_for_open_port(6379)
''}
podman.wait_until_succeeds("set -eo pipefail; echo 'keys *' | redis-cli")
'';
}
);
in
lib.foldl' (attrs: backend: attrs // { ${backend} = mkOCITest backend; }) { } [
"docker"
"podman"
]
{
docker = mkOCITest "docker";
podman = mkOCITest "podman";
podman-rootless-conmon = podmanRootlessTests.conmon;
podman-rootless-healthy = podmanRootlessTests.healthy;
}

View File

@@ -99,7 +99,7 @@ import ./make-test-python.nix ({ lib, ... }: {
# Double check that our attrset option override works as expected
cmdline = node.succeed("grep 'paperless-manage' $(systemctl cat paperless-exporter | grep ExecStart | cut -f 2 -d=)")
print(f"Exporter command line {cmdline!r}")
assert cmdline.strip() == "./paperless-manage document_exporter /var/lib/paperless/export --compare-checksums --delete --no-progress-bar --no-thumbnail", "Unexpected exporter command line"
assert cmdline.strip() == "paperless-manage document_exporter /var/lib/paperless/export --compare-checksums --delete --no-progress-bar --no-thumbnail", "Unexpected exporter command line"
test_paperless(simple)
simple.send_monitor_command("quit")

View File

@@ -0,0 +1,82 @@
let
normal-enabled = "username-normal-enabled";
normal-disabled = "username-normal-disabled";
system-enabled = "username-system-enabled";
system-disabled = "username-system-disabled";
passwd = "enableOptionPasswd";
in
{
name = "user-enable-option";
nodes.machine = {
users = {
groups.test-group = { };
users = {
# User is enabled (default behaviour).
${normal-enabled} = {
enable = true;
isNormalUser = true;
initialPassword = passwd;
};
# User is disabled.
${normal-disabled} = {
enable = false;
isNormalUser = true;
initialPassword = passwd;
};
# User is a system user, and is enabled.
${system-enabled} = {
enable = true;
isSystemUser = true;
initialPassword = passwd;
group = "test-group";
};
# User is a system user, and is disabled.
${system-disabled} = {
enable = false;
isSystemUser = true;
initialPassword = passwd;
group = "test-group";
};
};
};
};
testScript = ''
def switch_to_tty(tty_number):
machine.fail(f"pgrep -f 'agetty.*tty{tty_number}'")
machine.send_key(f"alt-f{tty_number}")
machine.wait_until_succeeds(f"[ $(fgconsole) = {tty_number} ]")
machine.wait_for_unit(f"getty@tty{tty_number}.service")
machine.wait_until_succeeds(f"pgrep -f 'agetty.*tty{tty_number}'")
machine.wait_for_unit("multi-user.target")
machine.wait_for_unit("getty@tty1.service")
with subtest("${normal-enabled} exists"):
check_fn = f"id ${normal-enabled}"
machine.succeed(check_fn)
machine.wait_until_tty_matches("1", "login: ")
machine.send_chars("${normal-enabled}\n")
machine.wait_until_tty_matches("1", "Password: ")
machine.send_chars("${passwd}\n")
with subtest("${normal-disabled} does not exist"):
switch_to_tty(2)
check_fn = f"id ${normal-disabled}"
machine.fail(check_fn)
with subtest("${system-enabled} exists"):
switch_to_tty(3)
check_fn = f"id ${system-enabled}"
machine.succeed(check_fn)
with subtest("${system-disabled} does not exist"):
switch_to_tty(4)
check_fn = f"id ${system-disabled}"
machine.fail(check_fn)
'';
}

View File

@@ -66,6 +66,10 @@ in
isNormalUser = true;
hashedPassword = newNormaloHashedPassword;
};
normalo-disabled = {
enable = false;
isNormalUser = true;
};
};
groups = {
new-group = { };
@@ -96,6 +100,11 @@ in
assert 1000 > int(machine.succeed("id --user sysuser")), "sysuser user doesn't have a system UID"
assert "${sysuserInitialHashedPassword}" in machine.succeed("getent shadow sysuser"), "system user password is not correct"
with subtest("normalo-disabled is NOT created"):
machine.fail("id normalo-disabled")
# Check if user's home has been created
machine.fail("[ -d '/home/normalo-disabled' ]")
with subtest("sysusers group is created"):
print(machine.succeed("getent group sysusers"))

View File

@@ -26,7 +26,7 @@ To test the build process of every IDE (as well as the process for adding plugin
- Run these commands respectively:
- `nix build .#jetbrains.idea-community-src.src.src && ./source/build_maven.py source/idea_maven_artefacts.json result/` for IDEA
- `nix build .#jetbrains.pycharm-community-src.src.src && ./source/build_maven.py source/pycharm_maven_artefacts.json result/` for PyCharm
- Update `source/brokenPlugins.json` (from https://plugins.jetbrains.com/files/brokenPlugins.json)
- Update `brokenPlugins` timestamp and hash (from https://web.archive.org/web/*/https://plugins.jetbrains.com/files/brokenPlugins.json)
- Do a test build
- If it succeeds, make a commit
- Run ./plugins/update_plugins.py, this will update plugins and automatically commit them

File diff suppressed because one or more lines are too long

View File

@@ -219,6 +219,11 @@ let
stripRoot = false;
};
brokenPlugins = fetchurl {
url = "https://web.archive.org/web/20250224030717if_/https://downloads.marketplace.jetbrains.com/files/brokenPlugins.json";
hash = "sha256-l3qy9ixYsHqZZ9kk1r2fA4GomaJsLaM/T48VaL5ZJr8=";
};
in
stdenvNoCC.mkDerivation rec {
pname = "${buildType}-community";
@@ -248,7 +253,7 @@ stdenvNoCC.mkDerivation rec {
--replace-fail 'JDK_PATH_HERE' '${jbr}/lib/openjdk'
substituteInPlace \
platform/build-scripts/src/org/jetbrains/intellij/build/impl/brokenPlugins.kt \
--replace-fail 'BROKEN_PLUGINS_HERE' '${./brokenPlugins.json}'
--replace-fail 'BROKEN_PLUGINS_HERE' '${brokenPlugins}'
substituteInPlace \
platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt \
--replace-fail 'XPLAT_LAUNCHER_PREBUILT_PATH_HERE' '${xplat-launcher}'

View File

@@ -1,6 +1,7 @@
{
lib,
stdenv,
runCommand,
fetchzip,
fetchFromGitHub,
replaceVars,
@@ -9,7 +10,7 @@
zlib,
openssl,
R,
libsForQt5,
fontconfig,
quarto,
libuuid,
hunspellDicts,
@@ -21,16 +22,34 @@
yaml-cpp,
soci,
sqlite,
apple-sdk_11,
xcbuild,
nodejs,
npmHooks,
fetchNpmDeps,
yarn,
yarnConfigHook,
fetchYarnDeps,
zip,
git,
makeWrapper,
electron_33,
server ? false, # build server version
pam,
nixosTests,
}:
let
# Note: we shouldn't use the latest electron here, since the node-abi dependency might
# need to be updated every time the latest electron gets a new abi version number
electron = electron_33;
# unpack tarball containing electron's headers
electron-headers = runCommand "electron-headers" { } ''
mkdir -p $out
tar -C $out --strip-components=1 -xvf ${electron.headers}
'';
mathJaxSrc = fetchzip {
url = "https://s3.amazonaws.com/rstudio-buildtools/mathjax-27.zip";
hash = "sha256-J7SZK/9q3HcXTD7WFHxvh++ttuCd89Vc4SEBrUEU0AI=";
@@ -53,6 +72,14 @@ let
d: !(lib.hasAttr "dictFileName" d && lib.elem d.dictFileName (map (d: d.dictFileName) largeDicts))
) hunspellDictionaries;
dictionaries = largeDicts ++ otherDicts;
# rstudio assumes quarto bundles pandoc into bin/tools/
quartoWrapper = runCommand "quarto-wrapper" { } ''
mkdir -p $out/bin/tools
ln -s ${lib.getExe pandoc} $out/bin/tools/pandoc
ln -s ${lib.getExe quarto} $out/bin/quarto
ln -s ${quarto}/share $out/share
'';
in
stdenv.mkDerivation rec {
pname = "RStudio";
@@ -66,7 +93,7 @@ stdenv.mkDerivation rec {
src = fetchFromGitHub {
owner = "rstudio";
repo = "rstudio";
rev = "refs/tags/v${version}";
tag = "v${version}";
hash = "sha256-j258eW1MYQrB6kkpjyolXdNuwQ3zSWv9so4q0QLsZuw=";
};
@@ -78,9 +105,14 @@ stdenv.mkDerivation rec {
nodejs
yarn
yarnConfigHook
zip
git
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ]
++ lib.optionals (!server) [
libsForQt5.wrapQtAppsHook
(nodejs.python.withPackages (ps: [ ps.setuptools ]))
npmHooks.npmConfigHook
makeWrapper
];
buildInputs =
@@ -94,30 +126,30 @@ stdenv.mkDerivation rec {
soci
sqlite.dev
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ apple-sdk_11 ]
++ lib.optionals server [ pam ]
++ lib.optionals (!server) [
libsForQt5.qtbase
libsForQt5.qtxmlpatterns
libsForQt5.qtsensors
libsForQt5.qtwebengine
libsForQt5.qtwebchannel
];
++ lib.optionals (!server) [ fontconfig ];
cmakeFlags =
[
(lib.cmakeFeature "RSTUDIO_TARGET" (if server then "Server" else "Desktop"))
(lib.cmakeFeature "RSTUDIO_TARGET" (if server then "Server" else "Electron"))
(lib.cmakeBool "RSTUDIO_USE_SYSTEM_SOCI" true)
(lib.cmakeBool "RSTUDIO_USE_SYSTEM_BOOST" true)
(lib.cmakeBool "RSTUDIO_USE_SYSTEM_YAML_CPP" true)
(lib.cmakeBool "RSTUDIO_DISABLE_CHECK_FOR_UPDATES" true)
(lib.cmakeBool "QUARTO_ENABLED" true)
(lib.cmakeFeature "CMAKE_INSTALL_PREFIX" "${placeholder "out"}/lib/rstudio")
(lib.cmakeBool "RSTUDIO_CRASHPAD_ENABLED" false) # This is a NOOP except on x86_64-darwin
(lib.cmakeFeature "CMAKE_INSTALL_PREFIX" (
(placeholder "out") + (if stdenv.isDarwin then "/Applications" else "/lib/rstudio")
))
]
++ lib.optionals (!server) [
(lib.cmakeFeature "QT_QMAKE_EXECUTABLE" "${libsForQt5.qmake}/bin/qmake")
(lib.cmakeBool "RSTUDIO_INSTALL_FREEDESKTOP" true)
(lib.cmakeBool "RSTUDIO_INSTALL_FREEDESKTOP" stdenv.hostPlatform.isLinux)
];
# on Darwin, cmake uses find_library to locate R instead of using the PATH
env.NIX_LDFLAGS = "-L${R}/lib/R/lib";
patches = [
# Hack RStudio to only use the input R and provided libclang.
(replaceVars ./r-location.patch {
@@ -130,8 +162,10 @@ stdenv.mkDerivation rec {
./fix-resources-path.patch
./ignore-etc-os-release.patch
./dont-yarn-install.patch
./dont-assume-pandoc-in-quarto.patch
./boost-1.86.patch
./fix-darwin.patch
# needed for rebuilding for later electron versions
./update-nan-and-node-abi.patch
];
postPatch = ''
@@ -151,6 +185,21 @@ stdenv.mkDerivation rec {
dontYarnInstallDeps = true; # will call manually in preConfigure
npmRoot = "src/node/desktop";
# don't build native modules with node headers
npmFlags = [ "--ignore-scripts" ];
npmDeps = fetchNpmDeps {
name = "rstudio-${version}-npm-deps";
inherit src;
patches = [ ./update-nan-and-node-abi.patch ];
postPatch = "cd ${npmRoot}";
hash = "sha256-CtHCN4sWeHNDd59TV/TgTC4d6h7X1Cl4E/aJkAfRk7g=";
};
env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
preConfigure = ''
# set up node_modules directory inside quarto so that panmirror can be built
mkdir src/gwt/lib/quarto
@@ -170,36 +219,90 @@ stdenv.mkDerivation rec {
done
done
ln -s ${quarto} dependencies/quarto
ln -s ${quartoWrapper} dependencies/quarto
# version in dependencies/common/install-mathjax
ln -s ${mathJaxSrc} dependencies/mathjax-27
# version in CMakeGlobals.txt (PANDOC_VERSION)
mkdir -p dependencies/pandoc/2.18
ln -s ${lib.getBin pandoc}/bin/* dependencies/pandoc/2.18
# version in CMakeGlobals.txt (RSTUDIO_INSTALLED_NODE_VERSION)
mkdir -p dependencies/common/node
# node used by cmake
# version in CMakeGlobals.txt (RSTUDIO_NODE_VERSION)
ln -s ${nodejs} dependencies/common/node/18.18.2
# node used at runtime
# version in CMakeGlobals.txt (RSTUDIO_INSTALLED_NODE_VERSION)
ln -s ${nodejs} dependencies/common/node/18.20.3
${lib.optionalString (!server) ''
pushd $npmRoot
substituteInPlace package.json \
--replace-fail "npm ci && " ""
# use electron's headers to make node-gyp compile against the electron ABI
export npm_config_nodedir="${electron-headers}"
### override the detected electron version
substituteInPlace node_modules/@electron-forge/core-utils/dist/electron-version.js \
--replace-fail "return version" "return '${electron.version}'"
### create the electron archive to be used by electron-packager
cp -r ${electron.dist} electron-dist
chmod -R u+w electron-dist
pushd electron-dist
zip -0Xqr ../electron.zip .
popd
rm -r electron-dist
# force @electron/packager to use our electron instead of downloading it
substituteInPlace node_modules/@electron/packager/src/index.js \
--replace-fail "await this.getElectronZipPath(downloadOpts)" "'$(pwd)/electron.zip'"
# Work around known nan issue for electron_33 and above
# https://github.com/nodejs/nan/issues/978
substituteInPlace node_modules/nan/nan.h \
--replace-fail '#include "nan_scriptorigin.h"' ""
# now that we patched everything, we still have to run the scripts we ignored with --ignore-scripts
npm rebuild
popd
''}
'';
postInstall = ''
mkdir -p $out/bin
${lib.optionalString server ''
${lib.optionalString (server && stdenv.hostPlatform.isLinux) ''
ln -s $out/lib/rstudio/bin/{crash-handler-proxy,postback,r-ldpath,rpostback,rserver,rserver-pam,rsession,rstudio-server} $out/bin
''}
${lib.optionalString (!server) ''
ln -s $out/lib/rstudio/bin/{diagnostics,rpostback,rstudio} $out/bin
${lib.optionalString (!server && stdenv.hostPlatform.isLinux) ''
# remove unneeded electron files, since we'll wrap the app with our own electron
shopt -s extglob
rm -r $out/lib/rstudio/!(locales|resources|resources.pak)
makeWrapper ${lib.getExe electron} "$out/bin/rstudio" \
--add-flags "$out/lib/rstudio/resources/app/" \
--set-default ELECTRON_FORCE_IS_PACKAGED 1 \
--suffix PATH : ${lib.makeBinPath [ gnumake ]}
ln -s $out/lib/rstudio/resources/app/bin/{diagnostics,rpostback} $out/bin
''}
${lib.optionalString (server && stdenv.hostPlatform.isDarwin) ''
ln -s $out/Applications/RStudio.app/Contents/MacOS/{crash-handler-proxy,postback,r-ldpath,rpostback,rserver,rserver-pam,rsession,rstudio-server} $out/bin
''}
${lib.optionalString (!server && stdenv.hostPlatform.isDarwin) ''
# electron can't find its files if we use a symlink here
makeWrapper $out/Applications/RStudio.app/Contents/MacOS/RStudio $out/bin/rstudio
ln -s $out/Applications/RStudio.app/Contents/Resources/app/bin/{diagnostics,rpostback} $out/bin
''}
'';
qtWrapperArgs = lib.optionals (!server) [
"--suffix PATH : ${lib.makeBinPath [ gnumake ]}"
];
passthru = {
inherit server;
tests = {
@@ -208,15 +311,15 @@ stdenv.mkDerivation rec {
};
meta = {
broken = (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64);
description = "Set of integrated tools for the R language";
homepage = "https://www.rstudio.com/";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [
ciil
cfhammill
tomasajt
];
mainProgram = "rstudio" + lib.optionalString server "-server";
platforms = lib.platforms.linux;
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
}

View File

@@ -1,48 +0,0 @@
diff --git a/src/cpp/session/CMakeLists.txt b/src/cpp/session/CMakeLists.txt
index 0202e84..596b9f8 100644
--- a/src/cpp/session/CMakeLists.txt
+++ b/src/cpp/session/CMakeLists.txt
@@ -59,11 +59,7 @@ endif()
# install pandoc
-# - by default, we use quarto + quarto's bundled pandoc
-# - if quarto is not enabled, use pandoc fallback
-if(QUARTO_ENABLED)
- set(RSTUDIO_DEPENDENCIES_PANDOC_DIR "${RSTUDIO_DEPENDENCIES_QUARTO_DIR}/bin/tools")
-elseif(EXISTS "${RSTUDIO_TOOLS_ROOT}/pandoc/${PANDOC_VERSION}")
+if(EXISTS "${RSTUDIO_TOOLS_ROOT}/pandoc/${PANDOC_VERSION}")
set(RSTUDIO_DEPENDENCIES_PANDOC_DIR "${RSTUDIO_TOOLS_ROOT}/pandoc/${PANDOC_VERSION}")
else()
set(RSTUDIO_DEPENDENCIES_PANDOC_DIR "${RSTUDIO_DEPENDENCIES_DIR}/pandoc/${PANDOC_VERSION}")
@@ -733,11 +729,10 @@ if(NOT RSTUDIO_SESSION_WIN32 AND NOT RSESSION_ALTERNATE_BUILD)
PATTERN ".gitignore"
EXCLUDE)
endif()
- else()
- install(DIRECTORY "${RSTUDIO_DEPENDENCIES_PANDOC_DIR}/"
- DESTINATION "${RSTUDIO_INSTALL_BIN}/pandoc"
- USE_SOURCE_PERMISSIONS)
endif()
+ install(DIRECTORY "${RSTUDIO_DEPENDENCIES_PANDOC_DIR}/"
+ DESTINATION "${RSTUDIO_INSTALL_BIN}/pandoc"
+ USE_SOURCE_PERMISSIONS)
# install embedded packages
foreach(PKG ${RSTUDIO_EMBEDDED_PACKAGES})
diff --git a/src/cpp/session/include/session/SessionConstants.hpp b/src/cpp/session/include/session/SessionConstants.hpp
index e6aef22..57491ec 100644
--- a/src/cpp/session/include/session/SessionConstants.hpp
+++ b/src/cpp/session/include/session/SessionConstants.hpp
@@ -147,11 +147,7 @@
#define kSessionTmpDirEnvVar "RS_SESSION_TMP_DIR"
#define kSessionTmpDir "rstudio-rsession"
-#ifdef QUARTO_ENABLED
-# define kDefaultPandocPath "bin/quarto/bin/tools"
-#else
# define kDefaultPandocPath "bin/pandoc"
-#endif
#define kDefaultNodePath "bin/node"
#define kDefaultQuartoPath "bin/quarto"

View File

@@ -0,0 +1,169 @@
diff --git a/CMakeGlobals.txt b/CMakeGlobals.txt
index 8868c44..19b2fa0 100644
--- a/CMakeGlobals.txt
+++ b/CMakeGlobals.txt
@@ -345,6 +345,7 @@ if (APPLE)
set(RSTUDIO_INSTALL_SUPPORTING RStudio.app/Contents/Resources/app)
# handles Quarto share when not stored alongside bin
set(RSTUDIO_INSTALL_RESOURCES RStudio.app/Contents/Resources)
+ set(RSTUDIO_INSTALL_ELECTRON .)
else()
set(RSTUDIO_INSTALL_BIN RStudio.app/Contents/MacOS)
set(RSTUDIO_INSTALL_SUPPORTING RStudio.app/Contents/Resources)
diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt
index b47f04f..928165d 100644
--- a/src/cpp/CMakeLists.txt
+++ b/src/cpp/CMakeLists.txt
@@ -240,7 +240,7 @@ endif()
# determine whether we should statically link boost. we always do this
# unless we are building a non-packaged build on linux (in which case
# boost dynamic libraries are presumed to be installed on the system ldpath)
-if(APPLE OR WIN32 OR RSTUDIO_PACKAGE_BUILD)
+if(WIN32 OR RSTUDIO_PACKAGE_BUILD)
set(Boost_USE_STATIC_LIBS ON)
endif()
@@ -475,7 +475,7 @@ endif()
# find SOCI libraries
if(UNIX)
- if(NOT APPLE AND RSTUDIO_USE_SYSTEM_SOCI)
+ if(RSTUDIO_USE_SYSTEM_SOCI)
find_library(SOCI_CORE_LIB NAMES "libsoci_core.a" "soci_core" REQUIRED)
find_library(SOCI_SQLITE_LIB NAMES "libsoci_sqlite3.a" "soci_sqlite3" REQUIRED)
if(RSTUDIO_PRO_BUILD)
diff --git a/src/node/CMakeNodeTools.txt b/src/node/CMakeNodeTools.txt
index 43f7f63..8a35a16 100644
--- a/src/node/CMakeNodeTools.txt
+++ b/src/node/CMakeNodeTools.txt
@@ -27,17 +27,7 @@ endif()
# set cmake env vars for node (NODEJS) and node tools, like YARN, and NPM
-if(APPLE AND UNAME_M STREQUAL arm64)
-
- # make sure we're using arm64 binaries of node / npm for arm64 builds
- set(NODEJS
- "${CMAKE_CURRENT_LIST_DIR}/../../dependencies/common/node/${RSTUDIO_NODE_VERSION}-arm64/bin/node")
- set(NPM
- "${CMAKE_CURRENT_LIST_DIR}/../../dependencies/common/node/${RSTUDIO_NODE_VERSION}-arm64/bin/npm")
- set(NPX
- "${CMAKE_CURRENT_LIST_DIR}/../../dependencies/common/node/${RSTUDIO_NODE_VERSION}-arm64/bin/npx")
-
-else()
+if(true)
# Detect node.js, npm, and npx; use versions supplied by the dependency scripts
find_program(NODEJS
diff --git a/src/node/desktop/CMakeLists.txt b/src/node/desktop/CMakeLists.txt
index 2f4d929..9769143 100644
--- a/src/node/desktop/CMakeLists.txt
+++ b/src/node/desktop/CMakeLists.txt
@@ -119,22 +119,9 @@ if (APPLE)
# configure Info.plist
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in
${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
+endif()
- # copy sources to build directory. note that the build directory cannot
- # be the "true" CMake directory as some files are resolved relative to
- # the desktop project's relative path in the application structure
- set(ELECTRON_BUILD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../desktop-build-${UNAME_M}" CACHE INTERNAL "")
- file(REMOVE_RECURSE "${ELECTRON_BUILD_DIR}")
- file(MAKE_DIRECTORY "${ELECTRON_BUILD_DIR}")
- file(
- COPY "${CMAKE_CURRENT_SOURCE_DIR}/"
- DESTINATION "${ELECTRON_BUILD_DIR}/"
- REGEX "/.webpack$" EXCLUDE
- REGEX "/build$" EXCLUDE
- REGEX "/bin$" EXCLUDE
- REGEX "/out$" EXCLUDE
- REGEX "/node_modules$" EXCLUDE)
-else()
+if(true)
set(ELECTRON_BUILD_DIR "${ELECTRON_SOURCE_DIR}" CACHE INTERNAL "")
endif()
@@ -230,16 +217,21 @@ if(WIN32)
PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
DESTINATION "${RSTUDIO_INSTALL_BIN}")
-elseif(LINUX)
+elseif(LINUX OR APPLE)
- if(UNAME_M STREQUAL aarch64)
+ if(UNAME_M STREQUAL aarch64 OR UNAME_M STREQUAL arm64)
set(ELECTRON_ARCH arm64)
else()
set(ELECTRON_ARCH x64)
endif()
+ if(APPLE)
+ set(ELECTRON_PLATFORM darwin)
+ else()
+ set(ELECTRON_PLATFORM linux)
+ endif()
install(
- DIRECTORY "${ELECTRON_BUILD_DIR}/out/RStudio-linux-${ELECTRON_ARCH}/"
+ DIRECTORY "${ELECTRON_BUILD_DIR}/out/RStudio-${ELECTRON_PLATFORM}-${ELECTRON_ARCH}/"
DIRECTORY_PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
diff --git a/src/node/desktop/src/main/session-launcher.ts b/src/node/desktop/src/main/session-launcher.ts
index 615ca1e..a9c1624 100644
--- a/src/node/desktop/src/main/session-launcher.ts
+++ b/src/node/desktop/src/main/session-launcher.ts
@@ -89,27 +89,9 @@ function launchProcess(absPath: FilePath, argList: string[]): ChildProcess {
// DYLD_INSERT_LIBRARIES to inject the library we wish to use
const rHome = new FilePath(getenv('R_HOME'));
const rLib = rHome.completePath('lib/libR.dylib');
- const dyldArgs = [
- '-e', `DYLD_INSERT_LIBRARIES=${rLib.getAbsolutePath()}`,
- '-e', `DYLD_FALLBACK_LIBRARY_PATH=${dyldFallbackLibraryPath}`
- ];
-
- // launch via /usr/bin/arch, so we can control whether the OS requests
- // x86 or arm64 versions of the libraries in the launched rsession
- const path = absPath.getAbsolutePath();
- if (process.arch === 'arm64') {
- const fileInfo = execSync(`/usr/bin/file "${rLib}"`, { encoding: 'utf-8' });
- if (fileInfo.indexOf('arm64') === -1 && fileInfo.indexOf('x86_64') !== -1) {
- argList = ['-x86_64', ...dyldArgs, path, ...argList];
- absPath = new FilePath('/usr/bin/arch');
- } else {
- argList = ['-arm64', ...dyldArgs, path, ...argList];
- absPath = new FilePath('/usr/bin/arch');
- }
- } else {
- argList = ['-x86_64', ...dyldArgs, path, ...argList];
- absPath = new FilePath('/usr/bin/arch');
- }
+
+ env['DYLD_INSERT_LIBRARIES'] = rLib.getAbsolutePath();
+ env['DYLD_FALLBACK_LIBRARY_PATH'] = dyldFallbackLibraryPath;
}
const rsessionOptions = new LogOptions('rsession');
@@ -542,22 +524,6 @@ export class SessionLauncher {
}
}
- // on macOS, we need to look at R and figure out if we should be trying to run
- // with the arm64 session binary (rsession-arm64) or with the x64 session binary (rsession)
- if (app.isPackaged && process.platform === 'darwin' && process.arch === 'arm64') {
- const rHome = getenv('R_HOME');
- const rLibPath = `${rHome}/lib/libR.dylib`;
- logger().logDebug(`$ /usr/bin/file "${rLibPath}"`);
- const fileInfo = execSync(`/usr/bin/file "${rLibPath}"`, { encoding: 'utf-8' });
- logger().logDebug(fileInfo);
- if (fileInfo.indexOf('arm64') !== -1) {
- this.sessionPath = this.sessionPath.getParent().completeChildPath('rsession-arm64');
- logger().logDebug(`R is arm64; using ${this.sessionPath}`);
- } else {
- logger().logDebug(`R is x86_64; using ${this.sessionPath}`);
- }
- }
-
const sessionProc = launchProcess(this.sessionPath, argList);
sessionProc.on('error', (err) => {
// Unable to start rsession (at all)

View File

@@ -1,23 +1,23 @@
diff --git a/src/cpp/core/r_util/REnvironmentPosix.cpp b/src/cpp/core/r_util/REnvironmentPosix.cpp
index dbc9a9a1..9a526a86 100644
index a4e964d49d..512707801b 100644
--- a/src/cpp/core/r_util/REnvironmentPosix.cpp
+++ b/src/cpp/core/r_util/REnvironmentPosix.cpp
@@ -107,12 +107,9 @@ FilePath systemDefaultRScript(std::string* pErrMsg)
@@ -108,13 +108,7 @@ FilePath systemDefaultRScript(std::string* pErrMsg)
{
// check fallback paths
std::vector<std::string> rScriptPaths = {
- "/usr/bin/R",
- "/usr/local/bin/R",
- "/opt/local/bin/R",
+ "@R@/bin/R"
#ifdef __APPLE__
- #ifdef __APPLE__
- "/opt/homebrew/bin/R",
- "/Library/Frameworks/R.framework/Resources/bin/R",
+ "@R@/bin/R",
#endif
- #endif
+ "@R@/bin/R"
};
@@ -225,8 +222,7 @@ FilePath systemDefaultRScript(std::string* pErrMsg)
return scanForRScript(rScriptPaths, pErrMsg);
@@ -226,8 +220,7 @@ FilePath systemDefaultRScript(std::string* pErrMsg)
// scan in standard locations as a fallback
std::string scanErrMsg;
std::vector<std::string> rScriptPaths;
@@ -27,4 +27,15 @@ index dbc9a9a1..9a526a86 100644
FilePath scriptPath = scanForRScript(rScriptPaths, &scanErrMsg);
if (scriptPath.isEmpty())
{
diff --git a/src/node/desktop/src/main/detect-r.ts b/src/node/desktop/src/main/detect-r.ts
index 5b768b7cbf..c0efeac0fe 100644
--- a/src/node/desktop/src/main/detect-r.ts
+++ b/src/node/desktop/src/main/detect-r.ts
@@ -305,6 +305,7 @@ writeLines(sep = "\x1F", c(
}
export function scanForR(): Expected<string> {
+ return ok('@R@/bin/R');
// if the RSTUDIO_WHICH_R environment variable is set, use that
// note that this does not pick up variables set in a user's bash profile, for example
const rstudioWhichR = getenv('RSTUDIO_WHICH_R');

View File

@@ -0,0 +1,72 @@
diff --git a/src/node/desktop/package-lock.json b/src/node/desktop/package-lock.json
index 01c11edaf4..5e356470be 100644
--- a/src/node/desktop/package-lock.json
+++ b/src/node/desktop/package-lock.json
@@ -19,7 +19,7 @@
"line-reader": "0.4.0",
"lodash.debounce": "4.0.8",
"net-ipc": "2.1.0",
- "node-abi": "3.52.0",
+ "node-abi": "^3.71.0",
"node-addon-api": "7.0.0",
"node-system-fonts": "1.0.1",
"properties-reader": "2.3.0",
@@ -63,7 +63,7 @@
"json-schema-to-typescript": "13.1.1",
"lint-staged": "15.2.0",
"mocha": "10.2.0",
- "nan": "2.18.0",
+ "nan": "^2.22.0",
"node-loader": "2.0.0",
"nyc": "15.1.0",
"prettier": "3.1.1",
@@ -9768,9 +9768,10 @@
}
},
"node_modules/nan": {
- "version": "2.18.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
- "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w=="
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz",
+ "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==",
+ "license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.3",
@@ -9863,9 +9864,10 @@
}
},
"node_modules/node-abi": {
- "version": "3.52.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.52.0.tgz",
- "integrity": "sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ==",
+ "version": "3.71.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz",
+ "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==",
+ "license": "MIT",
"dependencies": {
"semver": "^7.3.5"
},
diff --git a/src/node/desktop/package.json b/src/node/desktop/package.json
index 059c39f9d7..ca9066077d 100644
--- a/src/node/desktop/package.json
+++ b/src/node/desktop/package.json
@@ -59,7 +59,7 @@
"json-schema-to-typescript": "13.1.1",
"lint-staged": "15.2.0",
"mocha": "10.2.0",
- "nan": "2.18.0",
+ "nan": "^2.22.0",
"node-loader": "2.0.0",
"nyc": "15.1.0",
"process": "0.11.10",
@@ -83,7 +83,7 @@
"line-reader": "0.4.0",
"lodash.debounce": "4.0.8",
"net-ipc": "2.1.0",
- "node-abi": "3.52.0",
+ "node-abi": "^3.71.0",
"node-addon-api": "7.0.0",
"node-system-fonts": "1.0.1",
"properties-reader": "2.3.0",

View File

@@ -5,7 +5,7 @@
wrapQtAppsHook,
fetchFromGitHub,
addDriverRunpath,
poppler_utils,
poppler-utils,
qtxmlpatterns,
qtsvg,
libgbm,
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
git
qtPython
qtbase
poppler_utils
poppler-utils
qtxmlpatterns
qtsvg
libgbm
@@ -64,9 +64,9 @@ stdenv.mkDerivation rec {
substituteInPlace src/app/translations.pri \
--replace '$$[QT_INSTALL_BINS]/$$LRELEASE' '${lib.getDev qttools}/bin/lrelease'
substituteInPlace src/app/seamly2d/mainwindowsnogui.cpp \
--replace 'define PDFTOPS "pdftops"' 'define PDFTOPS "${lib.getBin poppler_utils}/bin/pdftops"'
--replace 'define PDFTOPS "pdftops"' 'define PDFTOPS "${lib.getBin poppler-utils}/bin/pdftops"'
substituteInPlace src/libs/vwidgets/export_format_combobox.cpp \
--replace 'define PDFTOPS "pdftops"' 'define PDFTOPS "${lib.getBin poppler_utils}/bin/pdftops"'
--replace 'define PDFTOPS "pdftops"' 'define PDFTOPS "${lib.getBin poppler-utils}/bin/pdftops"'
substituteInPlace src/app/seamlyme/mapplication.cpp \
--replace 'diagrams.rcc' '../share/diagrams.rcc'
'';

View File

@@ -36,13 +36,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "vengi-tools";
version = "0.0.34";
version = "0.0.35";
src = fetchFromGitHub {
owner = "vengi-voxel";
repo = "vengi";
rev = "v${finalAttrs.version}";
hash = "sha256-a78Oiwln3vyzCyjNewbK1/05bnGcSixxzKIgz4oiDmA=";
hash = "sha256-8rGnW+VtqNJYqUqQDp0yOVIQd7w+cq7PIpqqIQPhkbE=";
};
nativeBuildInputs = [

View File

@@ -28,15 +28,15 @@ let
rev = "30ecb0b3fe694a582edfacc2a7425b6f01f9fec6";
hash = "sha256-1FF658OhKg8a5kKX/7TVmsxZ9amimn4lB6bX9i7pnI4=";
};
in stdenv.mkDerivation rec {
in stdenv.mkDerivation (finalAttrs: {
pname = "organicmaps";
version = "2025.01.26-9";
version = "2025.02.17-3";
src = fetchFromGitHub {
owner = "organicmaps";
repo = "organicmaps";
rev = "${version}-android";
hash = "sha256-pzZmaOBo4aYywprxrJa3Rk9Uu3w+Q6XdVdcPmV0cSUs=";
tag = "${finalAttrs.version}-android";
hash = "sha256-9IDj+vkwSHsqX6Fe7siZV/RAxC242+4hDhXLjwc0tpg=";
fetchSubmodules = true;
};
@@ -45,7 +45,7 @@ in stdenv.mkDerivation rec {
echo "exit 0" > tools/unix/check_cert.sh
# crude fix for https://github.com/organicmaps/organicmaps/issues/1862
echo "echo ${lib.replaceStrings ["." "-"] ["" ""] version}" > tools/unix/version.sh
echo "echo ${lib.replaceStrings ["." "-"] ["" ""] finalAttrs.version}" > tools/unix/version.sh
# TODO use system boost instead, see https://github.com/organicmaps/organicmaps/issues/5345
patchShebangs 3party/boost/tools/build/src/engine/build.sh
@@ -99,4 +99,4 @@ in stdenv.mkDerivation rec {
platforms = platforms.all;
mainProgram = "OMaps";
};
}
})

View File

@@ -791,7 +791,7 @@
}
},
"ungoogled-chromium": {
"version": "133.0.6943.126",
"version": "133.0.6943.141",
"deps": {
"depot_tools": {
"rev": "423f1e1914ab4aa7b2bdf804e216d4c097853ba2",
@@ -802,16 +802,16 @@
"hash": "sha256-T2dcISln9WCODoI/LsE2ldkRfFdMwVOmqqjQinAmZss="
},
"ungoogled-patches": {
"rev": "133.0.6943.126-1",
"hash": "sha256-bOtkMuGYu/iovgj0ZOecxQBmBvUhbF0px/M3Zp7ixKI="
"rev": "133.0.6943.141-1",
"hash": "sha256-FqpRx73axclW8bXmsRO845c3NB3ZBxE4fL4n7gU1P5A="
},
"npmHash": "sha256-oVoTruhxTymYiGkELd2Oa1wOfjGLtChQZozP4GzOO1A="
},
"DEPS": {
"src": {
"url": "https://chromium.googlesource.com/chromium/src.git",
"rev": "cffa127ce7b6be72885391527c15b452056a2e81",
"hash": "sha256-WOd3FsqaZlKEroWg763LQhQS5S1964vAoZWxstxGS3U=",
"rev": "2a5d6da0d6165d7b107502095a937fe7704fcef6",
"hash": "sha256-MJlCEe1WBh+7Pl3H4jnkMuSykTBSgh5x/ZPnNwYM4DE=",
"recompress": true
},
"src/third_party/clang-format/script": {
@@ -1576,8 +1576,8 @@
},
"src/v8": {
"url": "https://chromium.googlesource.com/v8/v8.git",
"rev": "4e04a09a1a0ef90841656e210e976bfc2a81ed57",
"hash": "sha256-XbeU9L2IRHMP5pTzM3MPW1L2PMHViNRP/6u/HcBq96M="
"rev": "93c6f1082c25ef7fdf60ee2e4a029d65808d9343",
"hash": "sha256-OV1WncJaYvx1bB5najkKDNC2iMTU+m2vDAi9S/AjCyw="
}
}
}

View File

@@ -184,9 +184,9 @@ rec {
mkTerraform = attrs: pluggable (generic attrs);
terraform_1 = mkTerraform {
version = "1.10.5";
hash = "sha256-6Y9r3VxL3DRvUaU6hLE+SdqjfIF+PAlXEYBPBc571QE=";
vendorHash = "sha256-xyFguSjqUweZyoO97nkjLfJWS+eifNV7hpJUjh/6Z54=";
version = "1.11.0";
hash = "sha256-CPt1SxZZEvK2MXk45vvtKb2/NR/4yNWXBEUm6dvBXkU=";
vendorHash = "sha256-xF9m67GE3MgeKqy7DGAf8RO1/MCZ5Uis1XNrajogQcI=";
patches = [ ./provider-path-0_15.patch ];
passthru = {
inherit plugins;

View File

@@ -1,16 +1,18 @@
{
mkDerivation,
stdenv,
lib,
fetchFromGitLab,
cmake,
extra-cmake-modules,
pkg-config,
qtquickcontrols2,
wrapQtAppsHook,
qtbase,
qttools,
qtmultimedia,
qtlocation,
qqc2-desktop-style,
kirigami-addons,
kirigami2,
kirigami,
kio,
knotifications,
kquickimageedit,
@@ -18,33 +20,36 @@
qxmpp,
sonnet,
gst_all_1,
prison,
}:
mkDerivation rec {
stdenv.mkDerivation rec {
pname = "kaidan";
version = "0.10.1";
version = "0.11.0";
src = fetchFromGitLab {
domain = "invent.kde.org";
owner = "network";
repo = pname;
rev = "v${version}";
hash = "sha256-u+8uNBDfszH5YJokie4A2QhW04ANq/JTwkMeu5gY0to=";
hash = "sha256-8pC4vINeKSYY+LlVgCXUtBq9UjraPdTikBOwLBLeQ3Y=";
};
nativeBuildInputs = [
cmake
extra-cmake-modules
pkg-config
wrapQtAppsHook
];
buildInputs = with gst_all_1; [
qtquickcontrols2
qtbase
qttools
qtmultimedia
qtlocation
qqc2-desktop-style
kirigami-addons
kirigami2
kirigami
kio
knotifications
kquickimageedit
@@ -54,7 +59,8 @@ mkDerivation rec {
gstreamer
gst-plugins-bad
gst-plugins-base
gst-plugins-good
(gst-plugins-good.override { qt6Support = true; })
prison
];
postInstall = ''
qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")

View File

@@ -13,7 +13,7 @@ buildGoModule {
modRoot = "wireguard-go-rs/libwg";
proxyVendor = true;
vendorHash = "sha256-j1lopBV/b1qSZPtEUVFyW0auLtaWSE5ss1a0pprcqOk=";
vendorHash = "sha256-uzPtA9RBP5m8+18YBq+SEsgytDOWFCGPzucCzISSiLQ=";
# XXX: hack to make the ar archive go to the correct place
# This is necessary because passing `-o ...` to `ldflags` does not work

View File

@@ -29,18 +29,18 @@ let
in
rustPlatform.buildRustPackage rec {
pname = "mullvad";
version = "2025.2";
version = "2025.3";
src = fetchFromGitHub {
owner = "mullvad";
repo = "mullvadvpn-app";
tag = version;
fetchSubmodules = true;
hash = "sha256-5GcYiyvulsOFepguBcBec98juw22YTbT7yvZJUOJUwc=";
hash = "sha256-IpGTqi0gSE2yXXou5fp+CryHfIKx0n3y/V4K2+ZO3k8=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-3xleQgDp33Ctce7jB9XRRwxmRHkzLJcg9mPLU4PExAM=";
cargoHash = "sha256-EJ8yk11H1QB+7CGjJYY5BjBAFTDK4d02/DJOQTVGFho=";
checkFlags = [
"--skip=version_check"

View File

@@ -8,13 +8,13 @@
let
pname = "mendeley";
version = "2.130.0";
version = "2.130.2";
executableName = "${pname}-reference-manager";
src = fetchurl {
url = "https://static.mendeley.com/bin/desktop/mendeley-reference-manager-${version}-x86_64.AppImage";
hash = "sha256-ldlMWitLe3pcA1ip+/NZuswKvPdpn9l8tVSCOOr4pbc=";
hash = "sha256-HLUUoW+j0W9iEGu0Irbd/y7Vgj2rCGT7tDGMzmMh3qI=";
};
appimageContents = appimageTools.extractType2 {

View File

@@ -25,6 +25,7 @@
, libsecret
, libgcrypt
, libgpg-error
, ninja
, util-linux
, libselinux
@@ -45,6 +46,8 @@
, opencascade-occt_7_6
, libngspice
, valgrind
, protobuf
, nng
, stable
, testing
@@ -92,13 +95,17 @@ stdenv.mkDerivation rec {
--replace "0000000000000000000000000000000000000000" "${src.rev}"
'';
makeFlags = optionals (debug) [ "CFLAGS+=-Og" "CFLAGS+=-ggdb" ];
preConfigure = optional (debug) ''
export CFLAGS="''${CFLAGS:-} -Og -ggdb"
export CXXFLAGS="''${CXXFLAGS:-} -Og -ggdb"
'';
cmakeFlags = [
"-DKICAD_USE_EGL=ON"
"-DOCC_INCLUDE_DIR=${opencascade-occt}/include/opencascade"
# https://gitlab.com/kicad/code/kicad/-/issues/17133
"-DCMAKE_CTEST_ARGUMENTS='--exclude-regex;qa_spice'"
"-DKICAD_USE_CMAKE_FINDPROTOBUF=OFF"
]
++ optional (stdenv.hostPlatform.system == "aarch64-linux")
"-DCMAKE_CTEST_ARGUMENTS=--exclude-regex;'qa_spice|qa_cli'"
@@ -127,6 +134,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [
cmake
ninja
doxygen
graphviz
pkg-config
@@ -173,6 +181,10 @@ stdenv.mkDerivation rec {
unixODBC
libdeflate
opencascade-occt
protobuf
# This would otherwise cause a linking requirement for mbedtls.
(nng.override { mbedtlsSupport = false; })
]
++ optional (withScripting) wxPython
++ optional (withNgspice) libngspice

View File

@@ -229,9 +229,9 @@ stdenv.mkDerivation rec {
"--prefix GIO_EXTRA_MODULES : ${dconf}/lib/gio/modules"
# required to open a bug report link in firefox-wayland
"--set-default MOZ_DBUS_REMOTE 1"
"--set-default KICAD8_FOOTPRINT_DIR ${footprints}/share/kicad/footprints"
"--set-default KICAD8_SYMBOL_DIR ${symbols}/share/kicad/symbols"
"--set-default KICAD8_TEMPLATE_DIR ${template_dir}"
"--set-default KICAD9_FOOTPRINT_DIR ${footprints}/share/kicad/footprints"
"--set-default KICAD9_SYMBOL_DIR ${symbols}/share/kicad/symbols"
"--set-default KICAD9_TEMPLATE_DIR ${template_dir}"
]
++ optionals (addons != [ ]) (
let
@@ -243,10 +243,10 @@ stdenv.mkDerivation rec {
];
};
in
[ "--set-default NIX_KICAD8_STOCK_DATA_PATH ${stockDataPath}" ]
[ "--set-default NIX_KICAD9_STOCK_DATA_PATH ${stockDataPath}" ]
)
++ optionals (with3d) [
"--set-default KICAD8_3DMODEL_DIR ${packages3d}/share/kicad/3dmodels"
"--set-default KICAD9_3DMODEL_DIR ${packages3d}/share/kicad/3dmodels"
]
++ optionals (withNgspice) [ "--prefix LD_LIBRARY_PATH : ${libngspice}/lib" ]

View File

@@ -6,7 +6,7 @@ index a74cdd9..790cc58 100644
{
wxString path;
+ if( wxGetEnv( wxT( "NIX_KICAD8_STOCK_DATA_PATH" ), &path ) ) {
+ if( wxGetEnv( wxT( "NIX_KICAD9_STOCK_DATA_PATH" ), &path ) ) {
+ return path;
+ }
+

View File

@@ -3,67 +3,67 @@
{
"kicad" = {
kicadVersion = {
version = "8.0.8";
version = "9.0.0";
src = {
rev = "069af84a1114b28d967dbdb15ac21ef39fc5273f";
sha256 = "1672aii6902m1njgrh9hsfywcz0m7ryjsc2mkngr3frg6pg4yqp2";
rev = "ccafeabf1503a778a283eabe40fa0760aa5bc83c";
sha256 = "0rr4k5hx4kjbfi4q3jdhamv1gjb0b1nwmmrrdg7ig18335bpw14s";
};
};
libVersion = {
version = "8.0.8";
version = "9.0.0";
libSources = {
symbols.rev = "b408fec68c5bee64b76d4e28829870f5932f7748";
symbols.sha256 = "090pvx28sk0nkqzdm8xxlshqgfrmp7y7r1bblv4sz0k1iab4wd9l";
templates.rev = "4a7825ea3365318e9d943e855b45d0da0708b287";
templates.sha256 = "1vpfh7ihi00c2cjla24a2dm4cwlrklivbig5zihrylj3185p01cr";
footprints.rev = "3cb185423ec819cc0808cef440c1567fe45bb3f5";
footprints.sha256 = "1z5bnvavjaxy52ydlp6dbqbr7dxiddhnmn56g0l58iva1xsr9gvj";
packages3d.rev = "f0a2e3b29f57d39f4c8a5e4d622e2eda90719385";
packages3d.sha256 = "1cqj6lnqj0qa4j203wrny8bsxp2zsfgpf96xy7nq4i968la6b88z";
symbols.rev = "e1c3371228f97b36c6fd61b66d056184930f078e";
symbols.sha256 = "0l8da2ix917jlsj6v5zclc1cb5pvjaxwmys0gjdv55ic31hhfyyw";
templates.rev = "3ed4538b0f965d821df63a5fffc4441e723cfe7f";
templates.sha256 = "0zs29zn8qjgxv0w1vyr8yxmj02m8752zagn4vcraqgik46dwg2id";
footprints.rev = "ef91963f57028aa095f2d0c4239ba994ea822f73";
footprints.sha256 = "16zslgvjg4swgkkvnd9fmiks3wzg63364d03hixiyzcpjlgk2bbk";
packages3d.rev = "b40831fd7ea2ca8f9c7282143dbb7d2f5015cd69";
packages3d.sha256 = "0bg54lg1iw01gw06ajg34y7x4y36wm6ls3jnpjy13i18d4ik77g4";
};
};
};
"kicad-testing" = {
kicadVersion = {
version = "8.0-2024-02-23";
version = "9.0-2025-02-21";
src = {
rev = "14d71c8ca6b48d2eb956bb069acf05a37b1b2652";
sha256 = "0xqd0xbpnvsvba75526nwgzr8l2cfxy99sjmg13sjxfx7rq16kqi";
rev = "c4c32aa7bbadd3862fb720457b71e7a19420604c";
sha256 = "01zbvg6n8kajilj3q1sp0zpaqz94bq28wrxjax1968wvwv05g0dp";
};
};
libVersion = {
version = "8.0-2024-02-23";
version = "9.0-2025-02-21";
libSources = {
symbols.rev = "e228d4e8b295364e90e36c57f4023d8285ba88cd";
symbols.sha256 = "049h2a7yn6ks8sybppixa872dbvyd0rwf9r6nixvdg6d13fl6rwf";
templates.rev = "2e00c233b67e35323f90d04c190bf70237a252f2";
templates.sha256 = "0m9bggz3cm27kqpjjwxy19mqzk0c69bywcjkqcni7kafr21c6k4z";
footprints.rev = "6e5329a6d4aaa81290e23af3eba88f505c2f61b0";
footprints.sha256 = "0ypjlbmzmcl3pha3q2361va70c988b1drxy8320gm66jkzfc21a1";
packages3d.rev = "d1e521228d9f5888836b1a6a35fb05fb925456fa";
packages3d.sha256 = "0lcy1av7ixg1f7arflk50jllpc1749sfvf3h62hkxsz97wkr97xj";
symbols.rev = "e1c3371228f97b36c6fd61b66d056184930f078e";
symbols.sha256 = "0l8da2ix917jlsj6v5zclc1cb5pvjaxwmys0gjdv55ic31hhfyyw";
templates.rev = "3ed4538b0f965d821df63a5fffc4441e723cfe7f";
templates.sha256 = "0zs29zn8qjgxv0w1vyr8yxmj02m8752zagn4vcraqgik46dwg2id";
footprints.rev = "ef91963f57028aa095f2d0c4239ba994ea822f73";
footprints.sha256 = "16zslgvjg4swgkkvnd9fmiks3wzg63364d03hixiyzcpjlgk2bbk";
packages3d.rev = "b40831fd7ea2ca8f9c7282143dbb7d2f5015cd69";
packages3d.sha256 = "0bg54lg1iw01gw06ajg34y7x4y36wm6ls3jnpjy13i18d4ik77g4";
};
};
};
"kicad-unstable" = {
kicadVersion = {
version = "2024-02-23";
version = "2025-02-21";
src = {
rev = "b7b64d959f37f00bb0d14b007c3b3908196e1024";
sha256 = "1gl7mjqpmqq4m55z6crwb77983g00gi2161ichsc7hsfhs4c8grh";
rev = "878cf768d6552131494aa792dc20e6ccf67baf75";
sha256 = "0ky0a7y6gf409y8bwpngiirqin4ivbcjnk8gjdj1a6w79x559sr8";
};
};
libVersion = {
version = "2024-02-23";
version = "2025-02-21";
libSources = {
symbols.rev = "8b0c343d8694fe0a968e5c4af69fd161bacf7da1";
symbols.sha256 = "049h2a7yn6ks8sybppixa872dbvyd0rwf9r6nixvdg6d13fl6rwf";
templates.rev = "0a6c4f798a68a5c639d54b4d3093460ab9267816";
templates.sha256 = "0m9bggz3cm27kqpjjwxy19mqzk0c69bywcjkqcni7kafr21c6k4z";
footprints.rev = "ded6b053460faae5783c538a38e91e2b4bddcf2e";
footprints.sha256 = "035bf37n4vrihaj4zfdncisdx9fly1vya7lhkxhlsbv5blpi4a5y";
packages3d.rev = "984667325076d4e50dab14e755aeacf97f42194c";
packages3d.sha256 = "0lkaxv02h4sxrnm8zr17wl9d07mazlisad78r35gry741i362cdg";
symbols.rev = "da86acd48809fd61876223c8bf0e4e7793c52e9a";
symbols.sha256 = "1sdpg58wbyyrghjd0jqw5iw2094mjy2v9jmwn5zrj4jm6f51g1kd";
templates.rev = "3ed4538b0f965d821df63a5fffc4441e723cfe7f";
templates.sha256 = "0zs29zn8qjgxv0w1vyr8yxmj02m8752zagn4vcraqgik46dwg2id";
footprints.rev = "e515f1c3213317d436e492c8c06620ef4caca84e";
footprints.sha256 = "16zslgvjg4swgkkvnd9fmiks3wzg63364d03hixiyzcpjlgk2bbk";
packages3d.rev = "d5db5cea003fe2b4b1c9b145f5fcbd5fdb48f8ca";
packages3d.sha256 = "0bg54lg1iw01gw06ajg34y7x4y36wm6ls3jnpjy13i18d4ik77g4";
};
};
};

View File

@@ -28,7 +28,7 @@
perl,
perlPackages,
pkg-config,
poppler_utils,
poppler-utils,
python3Packages,
qtbase,
qttools,
@@ -57,7 +57,7 @@ let
groff = groff;
gunzip = gzip;
iconv = libiconv;
pdftotext = poppler_utils;
pdftotext = poppler-utils;
ps2ascii = ghostscript;
sed = gnused;
tar = gnutar;

View File

@@ -15,13 +15,13 @@
buildGoModule rec {
pname = "go2tv" + lib.optionalString (!withGui) "-lite";
version = "1.18.0";
version = "1.18.1";
src = fetchFromGitHub {
owner = "alexballas";
repo = "go2tv";
tag = "v${version}";
hash = "sha256-WAJGnHKfNOqignMQ7v8H+g3x+dRrM3Jzfq32ClB1raY=";
hash = "sha256-Ic4Kcc5Vx1QXFt28o5ItGwcvsKCB2HdZvILPRoEKbgI=";
};
vendorHash = "sha256-xp/zdkNV4z3rQMV0b/7TD+ApiaDWxR/aqOKvakGKAcI=";

View File

@@ -7,14 +7,14 @@
}:
buildLua (finalAttrs: {
pname = "modernz";
version = "0.2.5";
version = "0.2.6";
scriptPath = "modernz.lua";
src = fetchFromGitHub {
owner = "Samillion";
repo = "ModernZ";
rev = "v${finalAttrs.version}";
hash = "sha256-7qzN9GiZbqzQMY2a0+CgXWirv7FUwIQbmH7ZzknlHlU=";
hash = "sha256-Ni3Rd7omNv7GGS/fF9JBERpwi1CwlFg/ju3OIQmZNmQ=";
};
postInstall = ''

View File

@@ -110,6 +110,16 @@ rec {
runAsRoot = ''
mkdir -p /data
cat >/bin/healthcheck <<-'EOF'
set -x
probe="$(/bin/redis-cli ping)"
echo "$probe"
if [ "$probe" = 'PONG' ]; then
exit 0
fi
exit 1
EOF
chmod +x /bin/healthcheck
'';
config = {
@@ -118,6 +128,15 @@ rec {
Volumes = {
"/data" = { };
};
Healthcheck = {
Test = [
"CMD-SHELL"
"/bin/healthcheck"
];
Interval = 30000000000;
Timeout = 10000000000;
Retries = 3;
};
};
};

View File

@@ -34,6 +34,10 @@
] ++ orig.args or ["-e" ../../stdenv/generic/source-stdenv.sh (orig.builder or ../../stdenv/generic/default-builder.sh)];
});
# See https://nixos.org/manual/nixpkgs/unstable/#tester-testBuildFailurePrime
# or doc/build-helpers/testers.chapter.md
testBuildFailure' = callPackage ./testBuildFailurePrime { };
# See https://nixos.org/manual/nixpkgs/unstable/#tester-testEqualDerivation
# or doc/build-helpers/testers.chapter.md
testEqualDerivation = callPackage ./test-equal-derivation.nix { };

View File

@@ -220,6 +220,10 @@ lib.recurseIntoAttrs {
sideEffectStructuredAttrs = overrideStructuredAttrs true sideEffects;
};
testBuildFailure' = lib.recurseIntoAttrs (
pkgs.callPackages ../testBuildFailurePrime/tests.nix { inherit overrideStructuredAttrs; }
);
testEqualContents = lib.recurseIntoAttrs {
equalDir = testers.testEqualContents {
assertion = "The same directory contents at different paths are recognized as equal";

View File

@@ -0,0 +1,47 @@
# shellcheck shell=bash
set -eu
declare -ag preScriptHooks=(testBuilderExitCode)
# shellcheck disable=SC2154
((${#expectedBuilderLogEntries[@]})) && preScriptHooks+=(testBuilderLogEntries)
testBuilderExitCode() {
nixLog "checking original builder exit code"
local -ir builderExitCode=$(<"${failed:?}/testBuildFailure.exit")
# shellcheck disable=SC2154
if ((expectedBuilderExitCode == builderExitCode)); then
nixLog "original builder exit code matches expected value of $expectedBuilderExitCode"
return 0
else
nixErrorLog "original builder produced exit code $builderExitCode but was expected to produce $expectedBuilderExitCode"
return 1
fi
}
testBuilderLogEntries() {
nixLog "checking original builder log"
local -r builderLogEntries="$(<"${failed:?}/testBuildFailure.log")"
local -i shouldExit=0
local expectedBuilderLogEntry
for expectedBuilderLogEntry in "${expectedBuilderLogEntries[@]}"; do
if [[ ${builderLogEntries} == *"$expectedBuilderLogEntry"* ]]; then
nixLog "original builder log contains ${expectedBuilderLogEntry@Q}"
else
nixErrorLog "original builder log does not contain ${expectedBuilderLogEntry@Q}"
shouldExit=1
fi
done
return $shouldExit
}
scriptPhase() {
runHook preScript
runHook script
runHook postScript
}
runHook scriptPhase
touch "${out:?}"

View File

@@ -0,0 +1,37 @@
{
lib,
stdenvNoCC,
testers,
}:
# See https://nixos.org/manual/nixpkgs/unstable/#tester-testBuildFailurePrime
# or doc/build-helpers/testers.chapter.md
lib.makeOverridable (
{
drv,
name ? "testBuildFailure-${drv.name}",
expectedBuilderExitCode ? 1,
expectedBuilderLogEntries ? [ ],
script ? "",
}:
stdenvNoCC.mkDerivation (finalAttrs: {
__structuredAttrs = true;
strictDeps = true;
inherit name;
nativeBuildInputs = [ finalAttrs.failed ];
failed = testers.testBuildFailure drv;
inherit expectedBuilderExitCode expectedBuilderLogEntries;
inherit script;
buildCommandPath = ./build-command.sh;
meta = {
description = "A wrapper around testers.testBuildFailure to simplify common use cases";
maintainers = [ lib.maintainers.connorbaker ];
};
})
)

View File

@@ -0,0 +1,149 @@
{
emptyDirectory,
hello,
lib,
overrideStructuredAttrs,
runCommand,
stdenvNoCC,
testers,
}:
let
inherit (lib.attrsets) recurseIntoAttrs;
final = {
# NOTE: This example is used in the docs.
# See https://nixos.org/manual/nixpkgs/unstable/#tester-testBuildFailurePrime
# or doc/build-helpers/testers.chapter.md
doc-example = testers.testBuildFailure' {
drv = runCommand "doc-example" { } ''
echo ok-ish >"$out"
echo failing though
exit 3
'';
expectedBuilderExitCode = 3;
expectedBuilderLogEntries = [ "failing though" ];
script = ''
grep --silent -F 'ok-ish' "$failed/result"
'';
};
happy = testers.testBuildFailure' {
drv = runCommand "happy" { } ''
echo ok-ish >$out
echo failing though
echo also stderr 1>&2
echo 'line\nwith-\bbackslashes'
printf "incomplete line - no newline"
exit 3
'';
expectedBuilderExitCode = 3;
expectedBuilderLogEntries = [
"failing though"
"also stderr"
''line\nwith-\bbackslashes''
"incomplete line - no newline"
];
script = ''
grep --silent -F 'ok-ish' "$failed/result"
'';
};
happyStructuredAttrs = overrideStructuredAttrs true final.happy;
helloDoesNotFail = testers.testBuildFailure' {
drv = testers.testBuildFailure hello;
expectedBuilderLogEntries = [
"testBuildFailure: The builder did not fail, but a failure was expected"
];
};
multiOutput = testers.testBuildFailure' {
drv =
runCommand "multiOutput"
{
# dev will be the default output
outputs = [
"dev"
"doc"
"out"
];
}
''
echo i am failing
exit 1
'';
expectedBuilderLogEntries = [
"i am failing"
];
script = ''
# Checking our note that dev is the default output
echo $failed/_ | grep -- '-dev/_' >/dev/null
echo 'All good.'
'';
};
multiOutputStructuredAttrs = overrideStructuredAttrs true final.multiOutput;
sideEffects = testers.testBuildFailure' {
drv = stdenvNoCC.mkDerivation {
name = "fail-with-side-effects";
src = emptyDirectory;
postHook = ''
echo touching side-effect...
# Assert that the side-effect doesn't exist yet...
# We're checking that this hook isn't run by expect-failure.sh
if [[ -e side-effect ]]; then
echo "side-effect already exists"
exit 1
fi
touch side-effect
'';
buildPhase = ''
echo i am failing
exit 1
'';
};
expectedBuilderLogEntries = [
"touching side-effect..."
"i am failing"
];
script = ''
[[ ! -e side-effect ]]
'';
};
sideEffectsStructuredAttrs = overrideStructuredAttrs true final.sideEffects;
exitCodeNegativeTest = testers.testBuildFailure' {
drv = testers.testBuildFailure' {
drv = runCommand "exit-code" { } "exit 3";
# Default expected exit code is 1
};
expectedBuilderLogEntries = [
"ERROR: testBuilderExitCode: original builder produced exit code 3 but was expected to produce 1"
];
};
exitCodeNegativeTestStructuredAttrs = overrideStructuredAttrs true final.exitCodeNegativeTest;
logNegativeTest = testers.testBuildFailure' {
drv = testers.testBuildFailure' {
drv = runCommand "exit-code" { } ''
nixLog "apples"
exit 3
'';
expectedBuilderExitCode = 3;
expectedBuilderLogEntries = [ "bees" ];
};
expectedBuilderLogEntries = [
"ERROR: testBuilderLogEntries: original builder log does not contain 'bees'"
];
};
logNegativeTestStructuredAttrs = overrideStructuredAttrs true final.logNegativeTest;
};
in
recurseIntoAttrs final

View File

@@ -0,0 +1,84 @@
diff --git a/Cargo.lock b/Cargo.lock
index df5a6e9..0cf72e2 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -382,7 +382,7 @@ dependencies = [
"anyhow",
"biome_rowan",
"rustc-hash",
- "tower-lsp 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tower-lsp",
]
[[package]]
@@ -1369,7 +1369,7 @@ dependencies = [
"time",
"tokio",
"tokio-util",
- "tower-lsp 0.20.0 (git+https://github.com/lionel-/tower-lsp?branch=bugfix%2Fpatches)",
+ "tower-lsp",
"tracing",
"tracing-subscriber",
"tree-sitter",
@@ -1406,7 +1406,7 @@ dependencies = [
"serde_json",
"tokio",
"tokio-util",
- "tower-lsp 0.20.0 (git+https://github.com/lionel-/tower-lsp?branch=bugfix%2Fpatches)",
+ "tower-lsp",
"tracing",
"url",
]
@@ -2311,29 +2311,6 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
-[[package]]
-name = "tower-lsp"
-version = "0.20.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4ba052b54a6627628d9b3c34c176e7eda8359b7da9acd497b9f20998d118508"
-dependencies = [
- "async-trait",
- "auto_impl",
- "bytes",
- "dashmap 5.5.3",
- "futures",
- "httparse",
- "lsp-types",
- "memchr",
- "serde",
- "serde_json",
- "tokio",
- "tokio-util",
- "tower",
- "tower-lsp-macros 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tracing",
-]
-
[[package]]
name = "tower-lsp"
version = "0.20.0"
@@ -2352,21 +2329,10 @@ dependencies = [
"tokio",
"tokio-util",
"tower",
- "tower-lsp-macros 0.9.0 (git+https://github.com/lionel-/tower-lsp?branch=bugfix%2Fpatches)",
+ "tower-lsp-macros",
"tracing",
]
-[[package]]
-name = "tower-lsp-macros"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.90",
-]
-
[[package]]
name = "tower-lsp-macros"
version = "0.9.0"

View File

@@ -0,0 +1,33 @@
{
lib,
rustPlatform,
fetchFromGitHub,
}:
rustPlatform.buildRustPackage (attrs: {
pname = "air-formatter";
version = "0.4.0";
src = fetchFromGitHub {
owner = "posit-dev";
repo = "air";
rev = attrs.version;
hash = "sha256-BUbOG4D5UD+Z8Cpr4qodUrM3FFcMwjBd4M/YdPZPtpM=";
};
# Remove duplicate entries from cargo lock
cargoPatches = [ ./cargo-lock.patch ];
useFetchCargoVendor = true;
cargoHash = "sha256-EnvhqAZK76O6g99OgLruQDBUe9m9bn5ier3bgHI/f+A=";
useNextest = true;
meta = {
description = "An extremely fast R code formatter";
homepage = "https://posit-dev.github.io/air";
changelog = "https://github.com/posit-dev/air/blob/" + attrs.version + "/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.kupac ];
mainProgram = "air";
};
})

View File

@@ -3,20 +3,19 @@
python3,
fetchFromGitHub,
testers,
deltachat-cursed,
arcanechat-tui,
}:
python3.pkgs.buildPythonApplication rec {
pname = "deltachat-cursed";
version = "0.10.0";
pname = "arcanechat-tui";
version = "0.11.1";
pyproject = true;
src = fetchFromGitHub {
owner = "adbenitez";
repo = "deltachat-cursed";
rev = "v${version}";
hash = "sha256-KCPIZf/8Acp9syFN1IHbf8hQrjk0yzniff+dVSSM/Ro=";
owner = "ArcaneChat";
repo = "arcanechat-tui";
tag = "v${version}";
hash = "sha256-ARk0WkpJ2VhIdOHQzYmmsuherABNgqwjwnPWk92y9yA=";
};
build-system = with python3.pythonOnBuildForHost.pkgs; [
@@ -35,18 +34,18 @@ python3.pkgs.buildPythonApplication rec {
passthru.tests = {
version = testers.testVersion rec {
package = deltachat-cursed;
package = arcanechat-tui;
command = ''
HOME="$TEMP" ${lib.getExe package} --version
'';
};
};
meta = with lib; {
meta = {
description = "Lightweight Delta Chat client";
homepage = "https://github.com/adbenitez/deltachat-cursed";
license = licenses.gpl3Plus;
mainProgram = "curseddelta";
maintainers = with maintainers; [ dotlambda ];
homepage = "https://github.com/ArcaneChat/arcanechat-tui";
license = lib.licenses.gpl3Plus;
mainProgram = "arcanechat-tui";
maintainers = with lib.maintainers; [ dotlambda ];
};
}

View File

@@ -0,0 +1,62 @@
{
lib,
stdenv,
buildNpmPackage,
importNpmLock,
symlinkJoin,
fetchFromGitHub,
nix-update-script,
}:
let
version = "1.2.0";
src = fetchFromGitHub {
owner = "archtika";
repo = "archtika";
tag = "v${version}";
hash = "sha256-ba9da7LqCE/e2lhRVHD7GOhwOj1fNTBbN/pARPMzIg4=";
};
web = buildNpmPackage {
name = "web-app";
src = "${src}/web-app";
npmDepsHash = "sha256-RTyo7K/Hr1hBGtcBKynrziUInl91JqZl84NkJg16ufA=";
npmFlags = [ "--legacy-peer-deps" ];
installPhase = ''
mkdir -p $out/web-app
cp package.json $out/web-app
cp -r node_modules $out/web-app
cp -r build/* $out/web-app
cp -r template-styles $out/web-app
'';
};
api = stdenv.mkDerivation {
name = "api";
src = "${src}/rest-api";
installPhase = ''
mkdir -p $out/rest-api/db/migrations
cp -r db/migrations/* $out/rest-api/db/migrations
'';
};
in
symlinkJoin {
pname = "archtika";
inherit version;
paths = [
web
api
];
passthru.updateScript = nix-update-script { };
meta = {
description = "Modern, performant and lightweight CMS";
homepage = "https://archtika.com";
license = lib.licenses.gpl3;
maintainers = [ lib.maintainers.thiloho ];
platforms = lib.platforms.unix;
};
}

View File

@@ -18,7 +18,7 @@
pantheon,
pkg-config,
poppler,
poppler_utils,
poppler-utils,
python3,
sqlite,
unar,
@@ -75,7 +75,7 @@ stdenv.mkDerivation rec {
lib.makeBinPath [
unzip
unar
poppler_utils
poppler-utils
html2text
coreutils
curl

View File

@@ -21,7 +21,7 @@
piper-tts,
pkg-config,
podofo,
poppler_utils,
poppler-utils,
python3Packages,
qt6,
speechd-minimal,
@@ -90,7 +90,7 @@ stdenv.mkDerivation (finalAttrs: {
libusb1
piper-tts
podofo
poppler_utils
poppler-utils
qt6.qtbase
qt6.qtwayland
sqlite
@@ -149,8 +149,8 @@ stdenv.mkDerivation (finalAttrs: {
runHook preInstall
export HOME=$TMPDIR/fakehome
export POPPLER_INC_DIR=${poppler_utils.dev}/include/poppler
export POPPLER_LIB_DIR=${poppler_utils.out}/lib
export POPPLER_INC_DIR=${poppler-utils.dev}/include/poppler
export POPPLER_LIB_DIR=${poppler-utils.out}/lib
export MAGICK_INC=${imagemagick.dev}/include/ImageMagick
export MAGICK_LIB=${imagemagick.out}/lib
export FC_INC_DIR=${fontconfig.dev}/include/fontconfig
@@ -187,7 +187,7 @@ stdenv.mkDerivation (finalAttrs: {
preFixup =
let
popplerArgs = "--prefix PATH : ${poppler_utils.out}/bin";
popplerArgs = "--prefix PATH : ${poppler-utils.out}/bin";
in
''
for program in $out/bin/*; do

View File

@@ -1,6 +1,8 @@
{
lib,
stdenv,
writeTextFile,
writeScript,
fetchurl,
unzip,
autoconf,
@@ -61,6 +63,43 @@ let
cairo
atk
];
convertSpec = writeTextFile {
name = "convert-spec.awk";
checkPhase = "awk -f $target < /dev/null";
text = ''
$1 == "%" phase { inPhase = 1; next }
inPhase && /^%/ { exit }
inPhase {
gsub("[$]{RPM_BUILD_DIR}", "$sourceRoot");
gsub("[$]{RPM_BUILD_ROOT}", "");
gsub("%{nobuild}", "0");
gsub("%{_builddir}", "$sourceRoot");
gsub("%{_prefix}", "$out");
gsub("%{_libsarch}", "libs64/${system}");
gsub("%{_libdir}", "$out/lib");
gsub("%{locallibs}", "$out/lib");
gsub("%{_bindir}", "$out/bin");
gsub("%{_includedir}", "$out/include");
gsub("%{_cflags}", "");
gsub("%{_machine_type}", "MACHINETYPE=${stdenv.hostPlatform.parsed.cpu.name}");
gsub("%{common_dir}", "cnrdrvcups-common-${version}");
gsub("%{driver_dir}", "cnrdrvcups-lb-${version}");
gsub("%{utility_dir}", "cnrdrvcups-utility-${version}");
gsub("%{b_lib_dir}", "$sourceRoot/lib");
gsub("%{b_include_dir}", "$sourceRoot/include");
gsub("-m 4755", "-m 755"); # no setuid
if (/%/) {
print "error: variable not replaced:", $0 > "/dev/stderr"
print "exit 1"
exit 1
}
print
}
'';
};
in
stdenv.mkDerivation rec {
pname = "canon-cups-ufr2";
@@ -71,28 +110,32 @@ stdenv.mkDerivation rec {
dontPatchELF = true;
postUnpack = ''
export sourceRoot=$PWD/$sourceRoot
(
cd $sourceRoot
tar -xf Sources/cnrdrvcups-lb-${version}-1.${suffix2}.tar.xz
sed -i -e "s@_prefix=/usr@_prefix=$out@" cnrdrvcups-common-${version}/allgen.sh
sed -i -e "s@_libdir=/usr/lib@_libdir=$out/lib@" cnrdrvcups-common-${version}/allgen.sh
sed -i -e "s@_bindir=/usr/bin@_bindir=$out/bin@" cnrdrvcups-common-${version}/allgen.sh
sed -i -e "s@/usr@$out@" cnrdrvcups-common-${version}/{{backend,rasterfilter}/Makefile.am,rasterfilter/cnrasterproc.h}
sed -i -e "s@etc/cngplp@$out/etc/cngplp@" cnrdrvcups-common-${version}/cngplp/Makefile.am
sed -i -e "s@usr/share/cngplp@$out/usr/share/cngplp@" cnrdrvcups-common-${version}/cngplp/src/Makefile.am
patchShebangs cnrdrvcups-common-${version}
sed -i -e "s@_prefix=/usr@_prefix=$out@" cnrdrvcups-lb-${version}/allgen.sh
sed -i -e "s@_libdir=/usr/lib@_libdir=$out/lib@" cnrdrvcups-lb-${version}/allgen.sh
sed -i -e "s@_bindir=/usr/bin@_bindir=$out/bin@" cnrdrvcups-lb-${version}/allgen.sh
sed -i -e '/^cd \.\.\/cngplp/,/^cd files/{/^cd files/!{d}}' cnrdrvcups-lb-${version}/allgen.sh
sed -i -e "s@cd \.\./pdftocpca@cd pdftocpca@" cnrdrvcups-lb-${version}/allgen.sh
sed -i -e "s@/usr@$out@" cnrdrvcups-lb-${version}/pdftocpca/Makefile.am
sed -i "/CNGPLPDIR/d" cnrdrvcups-lb-${version}/Makefile
patchShebangs cnrdrvcups-lb-${version}
)
'';
patches = [
./replace_incorrect_int_with_char.patch
];
postPatch = ''
substituteInPlace $(find cnrdrvcups-lb-${version}/cngplp -name Makefile.am) \
--replace-quiet /usr/include/libxml2/ ${libxml2.dev}/include/libxml2/
substituteInPlace \
cnrdrvcups-common-${version}/{{backend,cngplp/src,rasterfilter}/Makefile.am,rasterfilter/cnrasterproc.h} \
cnrdrvcups-lb-${version}/{cngplp/files,pdftocpca}/Makefile.am \
--replace-fail /usr "$out"
substituteInPlace cnrdrvcups-common-${version}/cngplp/Makefile.am \
--replace-fail etc/cngplp "$out/etc/cngplp"
patchShebangs cnrdrvcups-common-${version} cnrdrvcups-lb-${version}
'';
nativeBuildInputs = [
makeWrapper
unzip
@@ -104,78 +147,39 @@ stdenv.mkDerivation rec {
inherit buildInputs;
configureScript = writeScript "canon-cups-ufr2-configure" ''
set -eu
# Update old automake files
for dir in \
cnrdrvcups-common-${version}/{backend,buftool,cngplp,cnjbig,rasterfilter} \
cnrdrvcups-lb-${version}/{cngplp/files,cngplp,cpca,pdftocpca}
do
echo autoreconf $dir
pushd "$dir"
# For some reason, autoreconf fails to create ltmain.sh on first run.
autoreconf --force --install --warnings=none || autoreconf --force --install --warnings=none
popd
done
awk -f ${convertSpec} -v phase=setup cnrdrvcups-lb.spec | bash -eux
'';
buildPhase = ''
runHook preBuild
awk -f ${convertSpec} -v phase=build cnrdrvcups-lb.spec | bash -eux
runHook postBuild
'';
installPhase = ''
runHook preInstall
(
cd cnrdrvcups-common-${version}
./allgen.sh
make install
)
(
cd cnrdrvcups-common-${version}/Rule
mkdir -p $out/share/cups/usb
install -m 644 *.usb-quirks $out/share/cups/usb
)
(
cd cnrdrvcups-lb-${version}
./allgen.sh
make install
mkdir -p $out/share/cups/model
install -m 644 ppd/*.ppd $out/share/cups/model/
)
(
cd lib
mkdir -p $out/lib
install -m 755 libs64/${system}/libColorGearCufr2.so.2.0.0 $out/lib
install -m 755 libs64/${system}/libcaepcmufr2.so.1.0 $out/lib
install -m 755 libs64/${system}/libcaiocnpkbidir.so.1.0.0 $out/lib
install -m 755 libs64/${system}/libcaiousb.so.1.0.0 $out/lib
install -m 755 libs64/${system}/libcaiowrapufr2.so.1.0.0 $out/lib
install -m 755 libs64/${system}/libcanon_slimufr2.so.1.0.0 $out/lib
install -m 755 libs64/${system}/libcanonufr2r.so.1.0.0 $out/lib
install -m 755 libs64/${system}/libcnaccm.so.1.0 $out/lib
install -m 755 libs64/${system}/libcnlbcmr.so.1.0 $out/lib
install -m 755 libs64/${system}/libcnncapcmr.so.1.0 $out/lib
install -m 755 libs64/${system}/libufr2filterr.so.1.0.0 $out/lib
install -m 755 libs64/${system}/cnpdfdrv $out/bin
install -m 755 libs64/${system}/cnpkbidir $out/bin
install -m 755 libs64/${system}/cnpkmoduleufr2r $out/bin
install -m 755 libs64/${system}/cnrsdrvufr2 $out/bin
install -m 755 libs64/${system}/cnsetuputil2 $out/bin/cnsetuputil2
mkdir -p $out/share/cnpkbidir
install -m 644 libs64/${system}/cnpkbidir_info* $out/share/cnpkbidir
mkdir -p $out/share/ufr2filter
install -m 644 libs64/${system}/ThLB* $out/share/ufr2filter
)
awk -f ${convertSpec} -v phase=install cnrdrvcups-lb.spec | bash -eux
(
cd $out/lib
ln -sf libColorGearCufr2.so.2.0.0 libColorGearCufr2.so
ln -sf libColorGearCufr2.so.2.0.0 libColorGearCufr2.so.2
ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so
ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so.1
ln -sf libcaiocnpkbidir.so.1.0.0 libcaiocnpkbidir.so
ln -sf libcaiocnpkbidir.so.1.0.0 libcaiocnpkbidir.so.1
ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so
ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so.1
ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so
ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so.1
ln -sf libcanonufr2r.so.1.0.0 libcanonufr2r.so
ln -sf libcanonufr2r.so.1.0.0 libcanonufr2r.so.1
ln -sf libcnlbcmr.so.1.0 libcnlbcmr.so
ln -sf libcnlbcmr.so.1.0 libcnlbcmr.so.1
ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so
ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so.1
ln -sf libuictlufr2r.so.1.0.0 libuictlufr2r.so
ln -sf libuictlufr2r.so.1.0.0 libuictlufr2r.so.1
patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${lib.getLib stdenv.cc.cc}/lib64:${stdenv.cc.libc}/lib64:$out/lib" libcanonufr2r.so.1.0.0
patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${lib.getLib stdenv.cc.cc}/lib64:${stdenv.cc.libc}/lib64" libcaepcmufr2.so.1.0
patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${lib.getLib stdenv.cc.cc}/lib64:${stdenv.cc.libc}/lib64" libColorGearCufr2.so.2.0.0
@@ -196,21 +200,6 @@ stdenv.mkDerivation rec {
--set NIX_REDIRECTS /usr/share/cnsetuputil2=$out/usr/share/cnsetuputil2
)
(
cd lib/data/ufr2
mkdir -p $out/share/caepcm
install -m 644 *.ICC $out/share/caepcm
install -m 644 *.icc $out/share/caepcm
install -m 644 *.PRF $out/share/caepcm
install -m 644 CnLB* $out/share/caepcm
)
(
cd cnrdrvcups-utility-${version}/data
mkdir -p $out/usr/share/cnsetuputil2
install -m 644 cnsetuputil* $out/usr/share/cnsetuputil2
)
makeWrapper "${ghostscript}/bin/gs" "$out/bin/gs" \
--prefix LD_LIBRARY_PATH ":" "$out/lib" \
--prefix PATH ":" "$out/bin"

View File

@@ -0,0 +1,11 @@
--- ./cnrdrvcups-lb-6.00/cngplp/cngplpmod/execjob.c 2024-01-08 04:18:42.000000000 +0100
+++ ./cnrdrvcups-lb-6.00/cngplp/cngplpmod/execjob.c 2024-08-06 17:13:52.234522912 +0200
@@ -1161,7 +1161,7 @@
ptr_param += num;
list_num += num;
if (strlen(ppd_opt->job_result_notice_address) > 0){
- num = add_param_int(ptr_param, kPPD_Items_CNJobResultNoticeAddress, ppd_opt->job_result_notice_address);
+ num = add_param_char(ptr_param, kPPD_Items_CNJobResultNoticeAddress, ppd_opt->job_result_notice_address);
ptr_param += num;
list_num += num;
}

View File

@@ -39,7 +39,7 @@ let
};
variantName = { palette, color }: palette + color;
variants = lib.mapCartesianProduct variantName dimensions;
version = "1.0.2";
version = "2.0.0";
in
stdenvNoCC.mkDerivation {
pname = "catppuccin-cursors";
@@ -49,7 +49,7 @@ stdenvNoCC.mkDerivation {
owner = "catppuccin";
repo = "cursors";
rev = "v${version}";
hash = "sha256-Mm0fRh/Shem65E/Cl0yyw+efEHOEt/OJ+MzL+3Mcbwc=";
hash = "sha256-qis6p+/m7+DdRDYzLq9yB2eZGpfZe5z5xRsa/1HoIG4=";
};
nativeBuildInputs = [

View File

@@ -6,13 +6,13 @@
buildGoModule rec {
pname = "cdncheck";
version = "1.1.6";
version = "1.1.7";
src = fetchFromGitHub {
owner = "projectdiscovery";
repo = "cdncheck";
tag = "v${version}";
hash = "sha256-4dW0HcJuEJt9Yf3SccCJbPGYQMRo+eGAxhUhfbdcYD8=";
hash = "sha256-VoDp+lHqVEI7xtSt4oLNDmbX0iwarQ+pZ2U6HRtNr/I=";
};
vendorHash = "sha256-/1REkZ5+sz/H4T4lXhloz7fu5cLv1GoaD3dlttN+Qd4=";

View File

@@ -7,13 +7,13 @@
stdenv.mkDerivation rec {
pname = "cglm";
version = "0.9.5";
version = "0.9.6";
src = fetchFromGitHub {
owner = "recp";
repo = "cglm";
rev = "v${version}";
sha256 = "sha256-yc8UFKl0q+QZ9helTzrxfZdk7yeRSb3bUVyIL+uRWdQ=";
sha256 = "sha256-caDw9Sqf4hS2JNbNxG/xaFIvO6oIlvT+hZQhdX37BKw=";
};
nativeBuildInputs = [ cmake ];

View File

@@ -25,14 +25,14 @@ with py.pkgs;
python3.pkgs.buildPythonApplication rec {
pname = "checkov";
version = "3.2.373";
version = "3.2.377";
pyproject = true;
src = fetchFromGitHub {
owner = "bridgecrewio";
repo = "checkov";
tag = version;
hash = "sha256-5WSrmqKH4EtuXRG9tjC3K0tHhm+BNSm4Kbsg1oiBs9k=";
hash = "sha256-lZJ4BKssV1stsclXwc3ymiQjA4XyGIWS+zw/gtOCd4Y=";
};
pythonRelaxDeps = [

View File

@@ -5,17 +5,15 @@
"packages": {
"": {
"dependencies": {
"@anthropic-ai/claude-code": "^0.2.14"
"@anthropic-ai/claude-code": "^0.2.19"
}
},
"node_modules/@anthropic-ai/claude-code": {
"version": "0.2.14",
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-0.2.14.tgz",
"integrity": "sha512-p729wIUq9/K/TecpE64nzWKEZJ1qddn20eQg1nUoMdEQtwWjwWYiecwJ6lDxCmNRWr0ukC7ovu0Kgtmh+uOPYg==",
"version": "0.2.19",
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-0.2.19.tgz",
"integrity": "sha512-3A9K8438+eYysRjdq2NLGkyETwKOR5CIKh/I03kMahRFnB3h/YwL/b9M1JX38qR1Chna1hNgZRurFOK9Z+pofg==",
"hasInstallScript": true,
"license": "SEE LICENSE IN README.md",
"os": [
"!win32"
],
"bin": {
"claude": "cli.mjs"
},

View File

@@ -6,14 +6,14 @@
buildNpmPackage rec {
pname = "claude-code";
version = "0.2.14";
version = "0.2.19";
src = fetchzip {
url = "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-${version}.tgz";
hash = "sha256-Q/+Wa3RhY2XZc/0afAvCczLtnSVjoAWvhf2VEDHk+D8=";
hash = "sha256-6uCywxu8ji7+Hx/qqxf5IgvifFKwkBn1O/JtFk8wUQE=";
};
npmDepsHash = "sha256-61JgKMXN03LIWcCi9CrSGhtOUJmRurnSSdt2iYHYkEs=";
npmDepsHash = "sha256-SjQ0fNAqqESQjXImIrY2hq065MXofJP6n9MyjQnMXeI=";
postPatch = ''
cp ${./package-lock.json} package-lock.json

View File

@@ -1,22 +1,18 @@
{
lib,
stdenv,
fetchFromGitHub,
rustPlatform,
libcosmicAppHook,
just,
pkg-config,
alsa-lib,
ffmpeg,
glib,
gst_all_1,
just,
pkg-config,
libxkbcommon,
stdenv,
cosmic-icons,
libglvnd,
libgbm,
wayland,
xorg,
vulkan-loader,
makeBinaryWrapper,
nix-update-script,
}:
rustPlatform.buildRustPackage rec {
@@ -25,8 +21,8 @@ rustPlatform.buildRustPackage rec {
src = fetchFromGitHub {
owner = "pop-os";
repo = pname;
rev = "epoch-${version}";
repo = "cosmic-player";
tag = "epoch-${version}";
hash = "sha256-Ebjj+C+yLCRomZy2W8mYDig1pv7aQcD3A9V2M53RM5U=";
};
@@ -40,7 +36,8 @@ rustPlatform.buildRustPackage rec {
nativeBuildInputs = [
just
pkg-config
makeBinaryWrapper
libcosmicAppHook
rustPlatform.bindgenHook
];
# Largely based on lilyinstarlight's work linked below
@@ -54,15 +51,12 @@ rustPlatform.buildRustPackage rec {
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
libxkbcommon
libgbm
wayland
vulkan-loader
xorg.libX11
libglvnd
];
dontUseJustBuild = true;
dontUseJustCheck = true;
justFlags = [
"--set"
@@ -73,37 +67,27 @@ rustPlatform.buildRustPackage rec {
"target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/cosmic-player"
];
# Force linking to libEGL, which is always dlopen()ed, and to
# libwayland-client, which is always dlopen()ed except by the
# obscure winit backend.
RUSTFLAGS = map (a: "-C link-arg=${a}") [
"-Wl,--push-state,--no-as-needed"
"-lEGL"
"-lwayland-client"
"-Wl,--pop-state"
];
# LD_LIBRARY_PATH can be removed once tiny-xlib is bumped above 0.2.2
postInstall = ''
wrapProgram "$out/bin/cosmic-player" \
--suffix XDG_DATA_DIRS : "${cosmic-icons}/share" \
--prefix LD_LIBRARY_PATH : ${
lib.makeLibraryPath [
xorg.libX11
xorg.libXcursor
xorg.libXi
vulkan-loader
libxkbcommon
wayland
]
}
libcosmicAppWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
'';
passthru.updateScript = nix-update-script {
extraArgs = [
"--version"
"unstable"
"--version-regex"
"epoch-(.*)"
];
};
meta = {
homepage = "https://github.com/pop-os/cosmic-player";
description = "Media player for the COSMIC Desktop Environment";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ ahoneybun ];
maintainers = with lib.maintainers; [
ahoneybun
HeitorAugustoLN
];
platforms = lib.platforms.linux;
mainProgram = "cosmic-player";
};

View File

@@ -2,25 +2,14 @@
lib,
stdenv,
fetchFromGitHub,
nix-update-script,
rustPlatform,
appstream,
makeBinaryWrapper,
cosmic-icons,
glib,
just,
libcosmicAppHook,
pkg-config,
libglvnd,
libxkbcommon,
libinput,
fontconfig,
just,
glib,
flatpak,
freetype,
openssl,
wayland,
xorg,
vulkan-loader,
vulkan-validation-layers,
nix-update-script,
}:
rustPlatform.buildRustPackage rec {
@@ -32,38 +21,25 @@ rustPlatform.buildRustPackage rec {
repo = "cosmic-store";
tag = "epoch-${version}";
hash = "sha256-ce7PaHBhRFUoujAS6j10XWbD2PxzK6XXIk/ENclT1iY=";
fetchSubmodules = true;
};
useFetchCargoVendor = true;
cargoHash = "sha256-kPCE6F8/UsTJOmIjwxBLISk/Jhfljwa666WhXuKkkDE=";
postPatch = ''
substituteInPlace justfile --replace '#!/usr/bin/env' "#!$(command -v env)"
'';
nativeBuildInputs = [
just
pkg-config
makeBinaryWrapper
libcosmicAppHook
];
buildInputs = [
appstream
glib
libxkbcommon
libinput
libglvnd
fontconfig
flatpak
freetype
openssl
xorg.libX11
wayland
vulkan-loader
vulkan-validation-layers
];
dontUseJustBuild = true;
dontUseJustCheck = true;
justFlags = [
"--set"
@@ -74,47 +50,26 @@ rustPlatform.buildRustPackage rec {
"target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/cosmic-store"
];
# Force linking to libEGL, which is always dlopen()ed, and to
# libwayland-client, which is always dlopen()ed except by the
# obscure winit backend.
RUSTFLAGS = map (a: "-C link-arg=${a}") [
"-Wl,--push-state,--no-as-needed"
"-lEGL"
"-lwayland-client"
"-Wl,--pop-state"
];
# LD_LIBRARY_PATH can be removed once tiny-xlib is bumped above 0.2.2
postInstall = ''
wrapProgram "$out/bin/cosmic-store" \
--suffix XDG_DATA_DIRS : "${cosmic-icons}/share" \
--prefix LD_LIBRARY_PATH : ${
lib.makeLibraryPath [
xorg.libX11
xorg.libXcursor
xorg.libXi
xorg.libXrandr
libxkbcommon
vulkan-loader
]
}
'';
env.VERGEN_GIT_COMMIT_DATE = "2025-02-21";
env.VERGEN_GIT_SHA = src.rev;
passthru = {
updateScript = nix-update-script { };
updateScript = nix-update-script {
extraArgs = [
"--version"
"unstable"
"--version-regex"
"epoch-(.*)"
];
};
};
meta = with lib; {
meta = {
homepage = "https://github.com/pop-os/cosmic-store";
description = "App Store for the COSMIC Desktop Environment";
license = licenses.gpl3Only;
maintainers = with maintainers; [
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [
ahoneybun
nyabinary
HeitorAugustoLN
];
platforms = platforms.linux;
platforms = lib.platforms.linux;
};
}

View File

@@ -7,13 +7,13 @@
stdenv.mkDerivation rec {
pname = "cpustat";
version = "0.02.21";
version = "0.03.00";
src = fetchFromGitHub {
owner = "ColinIanKing";
repo = "cpustat";
tag = "V${version}";
hash = "sha256-Rxoj2pnQ/tEUzcsFT1F+rU960b4Th3hqZU2YR6YGwZQ=";
hash = "sha256-wvCaMmWKEzanwgDBL2+8qAIIIKfGNi0O2J+SUXOx508=";
};
buildInputs = [

View File

@@ -8,7 +8,7 @@
dune_3,
makeWrapper,
pandoc,
poppler_utils,
poppler-utils,
testers,
docfd,
}:
@@ -61,7 +61,7 @@ buildDunePackage' rec {
wrapProgram $out/bin/docfd --prefix PATH : "${
lib.makeBinPath [
pandoc
poppler_utils
poppler-utils
]
}"
'';

View File

@@ -10,13 +10,13 @@
}:
buildNpmPackage rec {
pname = "factoriolab";
version = "3.11.4";
version = "3.12.0";
src = fetchFromGitHub {
owner = "factoriolab";
repo = "factoriolab";
tag = "v${version}";
hash = "sha256-fn9qvUC14a37vQJJiu5jf+wOpeMFsUeR47TDmemNdEc=";
hash = "sha256-4J7WDYvKAAb6If/dRDED1BOiqpBEugIrNRPLwuWjh8Q=";
};
buildInputs = [ vips ];
nativeBuildInputs = [

View File

@@ -28,10 +28,10 @@ stdenv.mkDerivation rec {
cmake
extra-cmake-modules
gettext
gtest
];
buildInputs = [
extra-cmake-modules
fcitx5
fmt
gtest
@@ -39,6 +39,8 @@ stdenv.mkDerivation rec {
json_c
];
strictDeps = true;
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
];

View File

@@ -7,7 +7,7 @@
enablePython ? true,
addBinToPathHook,
python3Packages,
testers,
versionCheckHook,
}:
stdenv.mkDerivation (finalAttrs: {
@@ -54,14 +54,19 @@ stdenv.mkDerivation (finalAttrs: {
]
++ [
addBinToPathHook
versionCheckHook
];
versionCheckProgramArg = [ "--version" ];
disabledTests = lib.optionals (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64) [
# Numerical precision error
# self.assertTrue(numpy.allclose(data_f, abs(asu_val), atol=5e-5, rtol=0))
# AssertionError: False is not true
"test_reading"
];
pytestFlagsArray = [ "../tests" ];
passthru.tests = {
version = testers.testVersion { package = finalAttrs.finalPackage; };
};
meta = {
description = "Macromolecular crystallography library and utilities";
homepage = "https://github.com/project-gemmi/gemmi";

View File

@@ -8,16 +8,16 @@
buildGoModule rec {
pname = "glow";
version = "2.0.0";
version = "2.1.0";
src = fetchFromGitHub {
owner = "charmbracelet";
repo = "glow";
rev = "v${version}";
hash = "sha256-gPy3MnQHmBJl06oVOpwQB4qIpJ10kUNMNMPkpsIujeI=";
hash = "sha256-pYXzm6HEqxJRPDdiUb+yij3iA2FhFYZOdRvQ69grcuU=";
};
vendorHash = "sha256-vxw8yqY6MxIIWeSX1D+unb0VbBmIpz1431N7UNORJP0=";
vendorHash = "sha256-lnD3SdPqZO+xfsR5YhvIAr9Gy1sA1LXi4SP/d/Rv/6g=";
nativeBuildInputs = [ installShellFiles ];

View File

@@ -11,7 +11,7 @@
imagemagick,
libtiff,
djvulibre,
poppler_utils,
poppler-utils,
ghostscript,
unpaper,
pdftk,
@@ -98,7 +98,7 @@ perlPackages.buildPerlPackage rec {
--prefix PATH : "${imagemagick}/bin" \
--prefix PATH : "${libtiff}/bin" \
--prefix PATH : "${djvulibre}/bin" \
--prefix PATH : "${poppler_utils}/bin" \
--prefix PATH : "${poppler-utils}/bin" \
--prefix PATH : "${ghostscript}/bin" \
--prefix PATH : "${unpaper}/bin" \
--prefix PATH : "${pdftk}/bin"
@@ -118,7 +118,7 @@ perlPackages.buildPerlPackage rec {
imagemagick
libtiff
djvulibre
poppler_utils
poppler-utils
ghostscript
unpaper
pdftk

View File

@@ -0,0 +1,39 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
nix-update-script,
versionCheckHook,
}:
buildNpmPackage rec {
pname = "har-to-k6";
version = "0.14.10";
src = fetchFromGitHub {
owner = "grafana";
repo = "har-to-k6";
tag = "v${version}";
hash = "sha256-eBy5rBZt9v8XFOSGQPhJWAGy2XuhyuG013A6ex2AxE4=";
};
dontNpmBuild = true;
npmDepsHash = "sha256-RuK3CzcMkPt5MFEZpYBDtMMShHTT/115pRk1CmRkiek=";
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = "--version";
doInstallCheck = true;
passthru.updateScript = nix-update-script { };
meta = {
description = "Converts LI-HAR and HAR to K6 script";
homepage = "https://github.com/grafana/har-to-k6";
changelog = "https://github.com/grafana/har-to-k6/releases/tag/v${version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ cterence ];
mainProgram = "har-to-k6";
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
}

View File

@@ -84,12 +84,12 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "hey-mail";
version = "1.2.16";
rev = "27";
version = "1.2.17";
rev = "28";
src = fetchurl {
url = "https://api.snapcraft.io/api/v1/snaps/download/lfWUNpR7PrPGsDfuxIhVxbj0wZHoH7bK_${finalAttrs.rev}.snap";
hash = "sha512-kq/AkJMzhd4B82TZ9r1JYOd+QJLDtdp3IEvkiACNVgVVOMSbfKHd93a38X9SGxntmnuwoFGZVYh18KjAkOU6XA==";
hash = "sha512-X4iJ8r0VFHD+dtFkyABUEFeoI3CSpmT70JjgJGsW7nqzCLriF4eekdHKJgySusnLW250RlEVtEO5wKMW+2bqCQ==";
};
nativeBuildInputs = [

View File

@@ -6,16 +6,16 @@
buildGoModule rec {
pname = "interactsh";
version = "1.2.3";
version = "1.2.4";
src = fetchFromGitHub {
owner = "projectdiscovery";
repo = pname;
tag = "v${version}";
hash = "sha256-ugrcGOlVRPTWhIX6Bpzl9iVydiVY5BWN3yNK/CaZS6A=";
hash = "sha256-28d+ghJ/A/dg6aeypqPF4EAhDp8k3yXLYylxnQR/J+M=";
};
vendorHash = "sha256-HgYaSjg4oFNOTOiUd2YXpdUWdpKqJFF5KDejxp0J4cU=";
vendorHash = "sha256-1ZTvIGgFEXxW//d3bD4kYRYj5+n/NzJW2oSnbjyXLGA=";
modRoot = ".";
subPackages = [

View File

@@ -4,7 +4,7 @@
fetchpatch,
ghostscript,
imagemagick,
poppler_utils,
poppler-utils,
python3,
tesseract5,
}:
@@ -50,7 +50,7 @@ python3.pkgs.buildPythonApplication rec {
ghostscript
imagemagick
tesseract5
poppler_utils
poppler-utils
])
];

View File

@@ -5,7 +5,7 @@
...
}:
let
version = "0.1.0";
version = "0.1.2";
in
buildGoModule {
pname = "izrss";
@@ -15,7 +15,7 @@ buildGoModule {
owner = "isabelroses";
repo = "izrss";
tag = "v${version}";
hash = "sha256-Op9aiCQrBH8TuhMTt+3Wthd8UY3lU2g9yJ110v7TtXA=";
hash = "sha256-t/YvSl6JoYLHsCPkRlbaM8OlAMQc83cb4sOKF7S/CFw=";
};
ldflags = [
@@ -24,7 +24,7 @@ buildGoModule {
"-X main.version=${version}"
];
vendorHash = "sha256-/TRCD6akZV2qDqJz62p7UzFIGuTAKLnUtYqqvdw3rCI=";
vendorHash = "sha256-bB6oxIbFqY0rPoGetIGfKEdfPsX9cqeb9WcjtgjAAJA=";
meta = {
description = "RSS feed reader for the terminal written in Go";

View File

@@ -13,11 +13,11 @@
}:
let
pname = "jetbrains-toolbox";
version = "2.5.3.37797";
version = "2.5.4.38621";
src = fetchzip {
url = "https://download.jetbrains.com/toolbox/jetbrains-toolbox-${version}.tar.gz";
hash = "sha256-BMSVigKiR7HgBqaebKvBk0OnyqiYQk562IIzN/6xu2I=";
hash = "sha256-FQTw6LPLJV+lV546rFOi/503PuErJs4T5q9MNWwGYEs=";
stripRoot = false;
};

View File

@@ -9,16 +9,16 @@
buildGoModule rec {
pname = "k0sctl";
version = "0.22.0";
version = "0.23.0";
src = fetchFromGitHub {
owner = "k0sproject";
repo = "k0sctl";
tag = "v${version}";
hash = "sha256-/PwJg+bwgoKXxpn/afbk+eATtvqVANh+bfBER1gW0Fo=";
hash = "sha256-KhbS7nO/NW7tX6G/MfM92krOHq8cj08515E9h78MJrI=";
};
vendorHash = "sha256-0KaLwu91U5LcvJIoC7FDvhfRlfNIjOp1LokykclOgBY=";
vendorHash = "sha256-ehTwgvnnL0Hl/xu/o2rwILKDzD0i3rZ73ogjpLcyJ0I=";
ldflags = [
"-s"

View File

@@ -1,32 +1,32 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchzip
, fetchurl
, cacert
, unicode-emoji
, unicode-character-database
, cmake
, ninja
, pkg-config
, curl
, libavif
, libGL
, libjxl
, libpulseaudio
, libwebp
, libxcrypt
, openssl
, python3
, qt6Packages
, woff2
, ffmpeg
, fontconfig
, simdutf
, skia
, nixosTests
, unstableGitUpdater
, apple-sdk_14
{
lib,
stdenv,
fetchFromGitHub,
fetchurl,
cacert,
unicode-emoji,
unicode-character-database,
cmake,
ninja,
pkg-config,
curl,
libavif,
libGL,
libjxl,
libpulseaudio,
libwebp,
libxcrypt,
openssl,
python3,
qt6Packages,
woff2,
ffmpeg,
fontconfig,
simdutf,
skia,
nixosTests,
unstableGitUpdater,
apple-sdk_14,
}:
let
@@ -96,50 +96,55 @@ stdenv.mkDerivation (finalAttrs: {
chmod +w build/Caches/AdobeICCProfiles
'';
nativeBuildInputs = with qt6Packages; [
nativeBuildInputs = [
cmake
ninja
pkg-config
python3
wrapQtAppsHook
qt6Packages.wrapQtAppsHook
];
buildInputs = with qt6Packages; [
curl
ffmpeg
fontconfig
libavif
libGL
libjxl
libwebp
libxcrypt
openssl
qtbase
qtmultimedia
simdutf
(skia.overrideAttrs (prev: {
gnFlags = prev.gnFlags ++ [
# https://github.com/LadybirdBrowser/ladybird/commit/af3d46dc06829dad65309306be5ea6fbc6a587ec
# https://github.com/LadybirdBrowser/ladybird/commit/4d7b7178f9d50fff97101ea18277ebc9b60e2c7c
# Remove when/if this gets upstreamed in skia.
"extra_cflags+=[\"-DSKCMS_API=__attribute__((visibility(\\\"default\\\")))\"]"
];
}))
woff2
] ++ lib.optional stdenv.hostPlatform.isLinux [
libpulseaudio.dev
qtwayland
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
apple-sdk_14
];
buildInputs =
[
curl
ffmpeg
fontconfig
libavif
libGL
libjxl
libwebp
libxcrypt
openssl
qt6Packages.qtbase
qt6Packages.qtmultimedia
simdutf
(skia.overrideAttrs (prev: {
gnFlags = prev.gnFlags ++ [
# https://github.com/LadybirdBrowser/ladybird/commit/af3d46dc06829dad65309306be5ea6fbc6a587ec
# https://github.com/LadybirdBrowser/ladybird/commit/4d7b7178f9d50fff97101ea18277ebc9b60e2c7c
# Remove when/if this gets upstreamed in skia.
"extra_cflags+=[\"-DSKCMS_API=__attribute__((visibility(\\\"default\\\")))\"]"
];
}))
woff2
]
++ lib.optional stdenv.hostPlatform.isLinux [
libpulseaudio.dev
qt6Packages.qtwayland
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
apple-sdk_14
];
cmakeFlags = [
# Disable network operations
"-DSERENITY_CACHE_DIR=Caches"
"-DENABLE_NETWORK_DOWNLOADS=OFF"
] ++ lib.optionals stdenv.hostPlatform.isLinux [
"-DCMAKE_INSTALL_LIBEXECDIR=libexec"
];
cmakeFlags =
[
# Disable network operations
"-DSERENITY_CACHE_DIR=Caches"
"-DENABLE_NETWORK_DOWNLOADS=OFF"
]
++ lib.optionals stdenv.hostPlatform.isLinux [
"-DCMAKE_INSTALL_LIBEXECDIR=libexec"
];
# FIXME: Add an option to -DENABLE_QT=ON on macOS to use Qt rather than Cocoa for the GUI
@@ -168,7 +173,12 @@ stdenv.mkDerivation (finalAttrs: {
homepage = "https://ladybird.org";
license = licenses.bsd2;
maintainers = with maintainers; [ fgaz ];
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
platforms = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
mainProgram = "Ladybird";
};
})

View File

@@ -38,7 +38,7 @@ python3.pkgs.buildPythonApplication rec {
homepage = "https://lava.gitlab.io/lavacli/";
changelog = "https://gitlab.com/lava/lavacli/-/commits/v${version}?ref_type=tags";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [ snu ];
maintainers = lib.teams.cyberus.members;
mainProgram = "lavacli";
};
}

View File

@@ -1,20 +1,22 @@
{ lib, stdenv
, fetchurl
, python3
, pkg-config
, readline
, tdb
, talloc
, tevent
, popt
, libxslt
, docbook-xsl-nons
, docbook_xml_dtd_42
, cmocka
, wafHook
, buildPackages
, libxcrypt
, testers
{
lib,
stdenv,
fetchurl,
python3,
pkg-config,
readline,
tdb,
talloc,
tevent,
popt,
libxslt,
docbook-xsl-nons,
docbook_xml_dtd_42,
cmocka,
wafHook,
buildPackages,
libxcrypt,
testers,
}:
stdenv.mkDerivation (finalAttrs: {
@@ -26,7 +28,10 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-0VWIQALHnbscPYZC+LEBPy5SCzru/W6WQSrexbjWy8A=";
};
outputs = [ "out" "dev" ];
outputs = [
"out"
"dev"
];
nativeBuildInputs = [
pkg-config
@@ -59,21 +64,32 @@ stdenv.mkDerivation (finalAttrs: {
wafPath = "buildtools/bin/waf";
wafConfigureFlags = [
"--bundled-libraries=NONE"
"--builtin-libraries=replace"
"--without-ldb-lmdb"
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"--cross-compile"
"--cross-execute=${stdenv.hostPlatform.emulator buildPackages}"
];
wafConfigureFlags =
[
"--bundled-libraries=NONE"
"--builtin-libraries=replace"
"--without-ldb-lmdb"
]
++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"--cross-compile"
"--cross-execute=${stdenv.hostPlatform.emulator buildPackages}"
];
# python-config from build Python gives incorrect values when cross-compiling.
# If python-config is not found, the build falls back to using the sysconfig
# module, which works correctly in all cases.
PYTHON_CONFIG = "/invalid";
stripDebugList = [ "bin" "lib" "modules" ];
# https://reviews.llvm.org/D135402
NIX_LDFLAGS = lib.optional (
stdenv.cc.bintools.isLLVM && lib.versionAtLeast stdenv.cc.bintools.version "17"
) "--undefined-version";
stripDebugList = [
"bin"
"lib"
"modules"
];
passthru.tests.pkg-config = testers.hasPkgConfigModules {
package = finalAttrs.finalPackage;

View File

@@ -15,7 +15,7 @@
mupdf,
pkg-config,
poppler,
poppler_utils,
poppler-utils,
qpdf,
stdenv,
}:
@@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
libtiff
mupdf
poppler
poppler_utils
poppler-utils
qpdf
];
configureFlags = [

View File

@@ -4,9 +4,25 @@
libguestfs-appliance,
}:
let
appliance = libguestfs-appliance;
# check explicit forward compatibility declaration:
# then do not warn if older appliance if known to work fine with newer libguestfs
libguestfsCompatible =
if lib.hasAttr "libguestfsCompatible" appliance then
appliance.libguestfsCompatible libguestfs
else
false;
in
# https://github.com/NixOS/nixpkgs/issues/280881
lib.warnIf (builtins.compareVersions libguestfs.version libguestfs-appliance.version > 0)
"libguestfs has a higher version than libguestfs-appliance (${libguestfs.version} > ${libguestfs-appliance.version}), runtime errors may occur!"
lib.warnIf
(
builtins.compareVersions (lib.versions.majorMinor libguestfs.version) (
lib.versions.majorMinor appliance.version
) > 0
&& !libguestfsCompatible
)
"libguestfs has a different version than ${appliance.pname} (${libguestfs.version} > ${appliance.version}), runtime errors may occur!"
libguestfs.override
{ appliance = libguestfs-appliance; }
{ inherit appliance; }

View File

@@ -47,12 +47,11 @@ assert appliance == null || lib.isDerivation appliance;
stdenv.mkDerivation (finalAttrs: {
pname = "libguestfs";
version = "1.54.0";
version = "1.54.1";
src = fetchurl {
url = "https://libguestfs.org/download/${lib.versions.majorMinor finalAttrs.version}-stable/${finalAttrs.pname}-${finalAttrs.version}.tar.gz";
sha256 = "sha256-tK+g+P1YAgXqVUjUaLxuQ8O+y5leL2DmMmVSemMFQkY=";
url = "https://libguestfs.org/download/${lib.versions.majorMinor finalAttrs.version}-stable/libguestfs-${finalAttrs.version}.tar.gz";
sha256 = "sha256-bj/GrBkmdfe8KEClYbs2o209Wo36f4jqL1P4z2AqF34=";
};
strictDeps = true;

View File

@@ -7,7 +7,7 @@
libz,
mupdf,
pkg-config,
poppler_utils,
poppler-utils,
stdenv,
}:
@@ -37,9 +37,9 @@ stdenv.mkDerivation rec {
configureFlags = [
"--with-mutool-path=${mupdf}/bin/mutool"
"--with-pdftops=pdftops"
"--with-pdftops-path=${poppler_utils}/bin/pdftops"
"--with-pdftops-path=${poppler-utils}/bin/pdftops"
"--with-gs-path=${ghostscript}/bin/gs"
"--with-pdftocairo-path=${poppler_utils}/bin/pdftocairo"
"--with-pdftocairo-path=${poppler-utils}/bin/pdftocairo"
];
makeFlags = [
"CUPS_SERVERBIN=$(out)/lib/cups"

View File

@@ -95,7 +95,7 @@ else
''
+ lib.optionalString (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) ''
# dylib will be rejected unless dylib rpath gets explictly set
# dylib will be rejected unless dylib rpath gets explicitly set
install_name_tool \
-change $libName $out/lib/$libName \
$out/lib/$libName

View File

@@ -7,13 +7,13 @@
stdenv.mkDerivation rec {
pname = "libx86emu";
version = "3.5";
version = "3.7";
src = fetchFromGitHub {
owner = "wfeldt";
repo = "libx86emu";
rev = version;
sha256 = "sha256-dKT/Ey+vardXu/+coaC69TTUXjJLsLBKgCx9VY8f0oY=";
sha256 = "sha256-ilAmGlkMeuG0FlygMdE3NreFPJJF6g/26C8C5grvjrk=";
};
nativeBuildInputs = [ perl ];

View File

@@ -6,17 +6,17 @@
rustPlatform.buildRustPackage rec {
pname = "lintspec";
version = "0.2.0";
version = "0.3.0";
src = fetchFromGitHub {
owner = "beeb";
repo = "lintspec";
tag = "v${version}";
hash = "sha256-qxr3gRJx7n11KJ09lMDUhvgMXh79DNeG7NYNFe1qYRY=";
hash = "sha256-88NPB9aikjHFCqmZpwvPtYECeWv/TYAY9S+YqP5xzNA=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-qn7Z99wEGiR79vDj6Zpr+TLw6FTgL/ka9YIei66cOds=";
cargoHash = "sha256-2G/ycPcyJX1uImqvI+Us5i5GmemuSNW3pQ+dVNk11lg=";
meta = {
description = "Blazingly fast linter for NatSpec comments in Solidity code";

View File

@@ -11,13 +11,13 @@ telegram-desktop.override {
unwrapped = telegram-desktop.unwrapped.overrideAttrs (
finalAttrs: previousAttrs: {
pname = "materialgram-unwrapped";
version = "5.10.3.1";
version = "5.11.1.1";
src = fetchFromGitHub {
owner = "kukuruzka165";
repo = "materialgram";
rev = "refs/tags/v${finalAttrs.version}";
hash = "sha256-vnsQHvBQLc5ZCeGDW3msAPNHgWB7llgEIraNpdb/Fks=";
hash = "sha256-vloirkfA+BXTOSMgg7epcn5CM798HI3ATQHCf/i99TE=";
fetchSubmodules = true;
};

View File

@@ -9,7 +9,7 @@
rustPlatform,
rustc,
nixosTests,
callPackage,
nix-update-script,
}:
let
@@ -17,20 +17,20 @@ let
in
python3.pkgs.buildPythonApplication rec {
pname = "matrix-synapse";
version = "1.124.0";
version = "1.125.0";
format = "pyproject";
src = fetchFromGitHub {
owner = "element-hq";
repo = "synapse";
rev = "v${version}";
hash = "sha256-hL1MdngaAVqgdN8GS9m3jn4twsbX0GPFa5cq+SCJ1oI=";
hash = "sha256-eo4JxNhVdAUeUmh0yUDE7+6csNbgdrYvf7UU/AMce7U=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit src;
name = "${pname}-${version}";
hash = "sha256-OIrjBhjSavJubpcMtHLrfuK7uhfNd+AHKUmHno32yo4=";
hash = "sha256-eAlybi5yDlnhdvVet5Xab4s1emyJrlQuEf3YzusU2M4=";
};
postPatch = ''
@@ -178,6 +178,7 @@ python3.pkgs.buildPythonApplication rec {
tests = { inherit (nixosTests) matrix-synapse matrix-synapse-workers; };
inherit plugins;
python = python3;
updateScript = nix-update-script { };
};
meta = with lib; {

View File

@@ -44,7 +44,7 @@ stdenv.mkDerivation {
unwrapped = matrix-synapse-unwrapped;
# for backward compatibility
inherit (matrix-synapse-unwrapped) plugins tests tools;
inherit (matrix-synapse-unwrapped) plugins tests;
};
# Carry the maintainer, licenses, and various useful information.

View File

@@ -4,7 +4,7 @@
fetchFromSourcehut,
gobject-introspection,
gst_all_1,
poppler_utils,
poppler-utils,
python3,
xorg,
}:
@@ -137,7 +137,7 @@ python.pkgs.buildPythonApplication rec {
pytestCheckHook
webtest
poppler_utils
poppler-utils
]
++ lib.flatten (lib.attrValues optional-dependencies);

View File

@@ -67,7 +67,7 @@ let
systemd
];
version = "2025.2";
version = "2025.3";
selectSystem =
attrs:
@@ -79,8 +79,8 @@ let
};
hash = selectSystem {
x86_64-linux = "sha256-jOE6Nsna1R6kNp/wXaY60rNmgy4y2UViHiK+KphSNFo=";
aarch64-linux = "sha256-yemy1Eajq7uHfGGEf3bgnp2Uz+NcI0cSp65ZvKUQAEg=";
x86_64-linux = "sha256-yELDdBoa8/Z4ttE/zR6246RBlNzq4YPWo3jcYWsF6M4=";
aarch64-linux = "sha256-0KmJGfee+YwiWU3r1G3f6u1bNLyup2Qt97ra4ChRSAs=";
};
in

View File

@@ -3,9 +3,8 @@
stdenv,
fetchFromGitHub,
cmake,
installShellFiles,
pkg-config,
sphinx,
python3Packages,
glib,
pcre,
pcre2,
@@ -25,13 +24,13 @@
stdenv.mkDerivation rec {
pname = "mydumper";
version = "0.17.1-1";
version = "0.18.1-1";
src = fetchFromGitHub {
owner = pname;
repo = pname;
tag = "v${version}";
hash = "sha256-PidivIe9zzLeRpn9ECfF6qVmkP/Xd+6kIYQXo64V9fM=";
hash = "sha256-7CnNcaZ2jLlLx211DA5Zk3uf724yCMpt/0zgjvZl3fM=";
# as of mydumper v0.16.5-1, mydumper extracted its docs into a submodule
fetchSubmodules = true;
};
@@ -45,11 +44,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [
cmake
pkg-config
# for docs
sphinx
python3Packages.furo
python3Packages.sphinx-copybutton
python3Packages.sphinx-inline-tabs
installShellFiles
];
nativeInstallCheckInputs = [ versionCheckHook ];
@@ -73,7 +68,6 @@ stdenv.mkDerivation rec {
];
cmakeFlags = [
"-DBUILD_DOCS=ON"
"-DCMAKE_SKIP_BUILD_RPATH=ON"
"-DMYSQL_INCLUDE_DIR=${lib.getDev libmysqlclient}/include/mysql"
];
@@ -92,14 +86,13 @@ stdenv.mkDerivation rec {
# as of mydumper v0.14.5-1, mydumper tries to install its config to /etc
substituteInPlace CMakeLists.txt\
--replace-fail "/etc" "$out/etc"
# as of mydumper v0.16.5-1, mydumper disables building docs by default
substituteInPlace CMakeLists.txt\
--replace-fail "# add_subdirectory(docs)" "add_subdirectory(docs)"
'';
preBuild = ''
cp -r $src/docs/images ./docs
# copy man files & docs over
postInstall = ''
installManPage $src/docs/man/*
mkdir -p $doc/share/doc/mydumper
cp -r $src/docs/html/* $doc/share/doc/mydumper
'';
passthru.updateScript = nix-update-script {

View File

@@ -7,16 +7,16 @@
buildGoModule rec {
pname = "nix-search-tv";
version = "2.0.0";
version = "2.1.0";
src = fetchFromGitHub {
owner = "3timeslazy";
repo = "nix-search-tv";
tag = "v${version}";
hash = "sha256-C8RTUwTkMgROipLgoDrm3L5aTBwOJ+cVr38xx1+sJCQ=";
hash = "sha256-bQrn7tX1Pe1glH84OSO96Ud0bG/aq+HxdzQwyNFB3R4=";
};
vendorHash = "sha256-0spLr6Qn2eQZC5Wwe6d+0o6B3r9CIgJt2X5/E/UMvg8=";
vendorHash = "sha256-hgZWppiy+P3BfoKOMClzCot1shKcGTZnsMCJ/ItxckE=";
subPackages = [ "cmd/nix-search-tv" ];

View File

@@ -7,19 +7,19 @@
}:
let
pname = "open-webui";
version = "0.5.16";
version = "0.5.18";
src = fetchFromGitHub {
owner = "open-webui";
repo = "open-webui";
tag = "v${version}";
hash = "sha256-ki8Ac/xMs+wD5GWEgPTe+uIXrYnWtaOwLIxmxscz5sw=";
hash = "sha256-SFw5bCzMSBuzIzZmhA+ylXXkouZ+OSsMBfc7QG7OSLU=";
};
frontend = buildNpmPackage {
inherit pname version src;
npmDepsHash = "sha256-e6pVy06h3QjFTSV62ZsaBrZO+atZbKGsBcCY/gQ2mQo=";
npmDepsHash = "sha256-rEV68SizR7NyYsRzlndg/ulvr8BeiDq3MpiBmaCUn2M=";
# Disabling `pyodide:fetch` as it downloads packages during `buildPhase`
# Until this is solved, running python packages from the browser will not work.
@@ -74,8 +74,10 @@ python312.pkgs.buildPythonApplication rec {
anthropic
apscheduler
argon2-cffi
asgiref
async-timeout
authlib
azure-ai-documentintelligence
azure-identity
azure-storage-blob
bcrypt
@@ -107,6 +109,7 @@ python312.pkgs.buildPythonApplication rec {
langdetect
langfuse
ldap3
loguru
markdown
moto
nltk

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