Merge master into staging-nixos
This commit is contained in:
@@ -2136,7 +2136,7 @@ The following rules are desired to be respected:
|
||||
* `pythonImportsCheck` is set. This is still a good smoke test even if `pytestCheckHook` is set.
|
||||
* `meta.platforms` takes the default value in many cases.
|
||||
It does not need to be set explicitly unless the package requires a specific platform.
|
||||
* The file is formatted with `nixfmt-rfc-style`.
|
||||
* The file is formatted correctly (e.g., `nix-shell --run treefmt`).
|
||||
* Commit names of Python libraries must reflect that they are Python
|
||||
libraries (e.g. `python3Packages.numpy: 1.11 -> 1.12` rather than `numpy: 1.11 -> 1.12`).
|
||||
See also [`pkgs/README.md`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#commit-conventions).
|
||||
|
||||
@@ -162,6 +162,8 @@
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- `balatro` now supports the Google Play and Xbox PC versions of the game. Pass the `apk` or `Assets.zip` as `balatro.override { src = "…" }`.
|
||||
|
||||
- `uptime-kuma` has been updated to v2, which requires an automated migration that can take a few hours. **A backup is highly recommended.**
|
||||
If your SQLite database is corrupted, the migration might fail and require [manual intervention](https://github.com/louislam/uptime-kuma/issues/5281).
|
||||
See the [migration guide](https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-To-v2) for more information.
|
||||
|
||||
@@ -99,7 +99,7 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
|
||||
- [input-remapper](https://github.com/sezanzeb/input-remapper), an easy to use tool to change the mapping of your input device buttons. Available at [services.input-remapper](#opt-services.input-remapper.enable).
|
||||
|
||||
- [InvoicePlane](https://invoiceplane.com), web application for managing and creating invoices. Available at `services.invoiceplane`.
|
||||
- [InvoicePlane](https://invoiceplane.com), web application for managing and creating invoices. Available at [services.invoiceplane](#opt-services.invoiceplane.sites._name_.enable).
|
||||
|
||||
- [k3b](https://userbase.kde.org/K3b), the KDE disk burning application. Available as [programs.k3b](#opt-programs.k3b.enable).
|
||||
|
||||
|
||||
@@ -1658,6 +1658,7 @@
|
||||
./services/web-apps/immich.nix
|
||||
./services/web-apps/immichframe.nix
|
||||
./services/web-apps/invidious.nix
|
||||
./services/web-apps/invoiceplane.nix
|
||||
./services/web-apps/isso.nix
|
||||
./services/web-apps/jirafeau.nix
|
||||
./services/web-apps/jitsi-meet.nix
|
||||
|
||||
@@ -47,10 +47,7 @@ let
|
||||
);
|
||||
|
||||
driverPaths = [
|
||||
# opengl:
|
||||
# NOTE: Since driverLink is just a symlink, we need to include its target as well.
|
||||
pkgs.addDriverRunpath.driverLink
|
||||
config.systemd.tmpfiles.settings.graphics-driver."/run/opengl-driver"."L+".argument
|
||||
|
||||
# mesa:
|
||||
config.hardware.graphics.package
|
||||
@@ -62,7 +59,9 @@ let
|
||||
defaults = {
|
||||
nvidia-gpu.onFeatures = package.allowedPatterns.nvidia-gpu.onFeatures;
|
||||
nvidia-gpu.paths = package.allowedPatterns.nvidia-gpu.paths ++ driverPaths;
|
||||
nvidia-gpu.unsafeFollowSymlinks = false;
|
||||
# TODO: Refactor `hardware.graphics` to ease referencing the closure
|
||||
# NOTE: A naive implementation may e.g. introduce a conditional infinite recursion (https://github.com/NixOS/nixpkgs/pull/488199)
|
||||
nvidia-gpu.unsafeFollowSymlinks = true;
|
||||
};
|
||||
in
|
||||
{
|
||||
@@ -112,6 +111,7 @@ in
|
||||
lib.mkMerge [
|
||||
{ nix.settings.pre-build-hook = lib.getExe cfg.package; }
|
||||
(lib.mkIf cfg.presets.nvidia-gpu.enable {
|
||||
hardware.graphics.enable = lib.mkDefault true;
|
||||
nix.settings.system-features = cfg.allowedPatterns.nvidia-gpu.onFeatures;
|
||||
programs.nix-required-mounts.allowedPatterns = {
|
||||
inherit (defaults) nvidia-gpu;
|
||||
|
||||
@@ -442,10 +442,6 @@ in
|
||||
Consider migrating or switching to Incus, or remove from your configuration.
|
||||
https://linuxcontainers.org/incus/docs/main/howto/server_migrate_lxd/
|
||||
'')
|
||||
(mkRemovedOptionModule [ "services" "invoiceplane" ] ''
|
||||
services.invoiceplane has been removed since the service only supported PHP 8.1 which is EOL
|
||||
and removed from nixpkgs.
|
||||
'')
|
||||
(mkRemovedOptionModule [ "services" "filesender" ] ''
|
||||
services.filesender has been removed since it depends on simplesamlphp which was severely unmaintained.
|
||||
'')
|
||||
|
||||
@@ -144,7 +144,7 @@ in
|
||||
|
||||
Enabling system-wide PipeWire is however not recommended and disabled
|
||||
by default according to
|
||||
https://github.com/PipeWire/pipewire/blob/master/NEWS
|
||||
https://github.com/PipeWire/pipewire/blob/0.3.11/NEWS#L14-L16
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -937,6 +937,7 @@ in
|
||||
StateDirectory = "kanidm";
|
||||
StateDirectoryMode = "0700";
|
||||
RuntimeDirectory = "kanidmd";
|
||||
ExecStartPre = "${cfg.package}/bin/kanidmd domain rename -c ${serverConfigFile}";
|
||||
ExecStart = "${cfg.package}/bin/kanidmd server -c ${serverConfigFile}";
|
||||
ExecStartPost = mkIf cfg.provision.enable postStartScript;
|
||||
User = "kanidm";
|
||||
|
||||
@@ -0,0 +1,491 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.invoiceplane;
|
||||
eachSite = cfg.sites;
|
||||
user = "invoiceplane";
|
||||
webserver = config.services.${cfg.webserver};
|
||||
|
||||
invoiceplane-config =
|
||||
hostName: cfg:
|
||||
pkgs.writeText "ipconfig.php" ''
|
||||
# <?php exit('No direct script access allowed'); ?>
|
||||
|
||||
IP_URL=http://${hostName}
|
||||
ENABLE_DEBUG=false
|
||||
DISABLE_SETUP=false
|
||||
REMOVE_INDEXPHP=false
|
||||
DB_HOSTNAME=${cfg.database.host}
|
||||
DB_USERNAME=${cfg.database.user}
|
||||
# NOTE: file_get_contents adds newline at the end of returned string
|
||||
DB_PASSWORD=${
|
||||
optionalString (
|
||||
cfg.database.passwordFile != null
|
||||
) "trim(file_get_contents('${cfg.database.passwordFile}'), \"\\r\\n\")"
|
||||
}
|
||||
DB_DATABASE=${cfg.database.name}
|
||||
DB_PORT=${toString cfg.database.port}
|
||||
SESS_EXPIRATION=864000
|
||||
ENABLE_INVOICE_DELETION=false
|
||||
DISABLE_READ_ONLY=false
|
||||
ENCRYPTION_KEY=
|
||||
ENCRYPTION_CIPHER=AES-256
|
||||
SETUP_COMPLETED=false
|
||||
REMOVE_INDEXPHP=true
|
||||
'';
|
||||
|
||||
mkPhpValue =
|
||||
v:
|
||||
if isString v then
|
||||
escapeShellArg v
|
||||
# NOTE: If any value contains a , (comma) this will not get escaped
|
||||
else if isList v && strings.isConvertibleWithToString v then
|
||||
escapeShellArg (concatMapStringsSep "," toString v)
|
||||
else if isInt v then
|
||||
toString v
|
||||
else if isBool v then
|
||||
boolToString v
|
||||
else
|
||||
abort "The Invoiceplane config value ${lib.generators.toPretty { } v} can not be encoded.";
|
||||
|
||||
extraConfig =
|
||||
hostName: cfg:
|
||||
let
|
||||
settings = mapAttrsToList (k: v: "${k}=${mkPhpValue v}") cfg.settings;
|
||||
in
|
||||
pkgs.writeText "extraConfig.php" (concatStringsSep "\n" settings);
|
||||
|
||||
pkg =
|
||||
hostName: cfg:
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
pname = "invoiceplane-${hostName}";
|
||||
version = src.version;
|
||||
src = pkgs.invoiceplane;
|
||||
|
||||
postPatch = ''
|
||||
# Patch index.php file to load additional config file
|
||||
substituteInPlace index.php \
|
||||
--replace-fail "require __DIR__ . '/vendor/autoload.php';" "require('vendor/autoload.php'); \$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, 'extraConfig.php'); \$dotenv->load();";
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -r * $out/
|
||||
|
||||
# symlink uploads and log directories
|
||||
rm -r $out/uploads $out/application/logs $out/vendor/mpdf/mpdf/tmp
|
||||
ln -sf ${cfg.stateDir}/uploads $out/
|
||||
ln -sf ${cfg.stateDir}/logs $out/application/
|
||||
ln -sf ${cfg.stateDir}/tmp $out/vendor/mpdf/mpdf/
|
||||
|
||||
# symlink the InvoicePlane config
|
||||
ln -s ${cfg.stateDir}/ipconfig.php $out/ipconfig.php
|
||||
|
||||
# symlink the extraConfig file
|
||||
ln -s ${extraConfig hostName cfg} $out/extraConfig.php
|
||||
|
||||
# symlink additional templates
|
||||
${concatMapStringsSep "\n" (
|
||||
template: "cp -r ${template}/. $out/application/views/invoice_templates/pdf/"
|
||||
) cfg.invoiceTemplates}
|
||||
${concatMapStringsSep "\n" (
|
||||
template: "cp -r ${template}/. $out/application/views/quote_templates/pdf/"
|
||||
) cfg.quoteTemplates}
|
||||
'';
|
||||
};
|
||||
|
||||
siteOpts =
|
||||
{ lib, name, ... }:
|
||||
{
|
||||
options = {
|
||||
|
||||
enable = mkEnableOption "InvoicePlane web application";
|
||||
|
||||
stateDir = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/invoiceplane/${name}";
|
||||
description = ''
|
||||
This directory is used for uploads of attachments and cache.
|
||||
The directory passed here is automatically created and permissions
|
||||
adjusted as required.
|
||||
'';
|
||||
};
|
||||
|
||||
database = {
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
default = "localhost";
|
||||
description = "Database host address.";
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 3306;
|
||||
description = "Database host port.";
|
||||
};
|
||||
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
default = "invoiceplane";
|
||||
description = "Database name.";
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "invoiceplane";
|
||||
description = "Database user.";
|
||||
};
|
||||
|
||||
passwordFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
example = "/run/keys/invoiceplane-dbpassword";
|
||||
description = ''
|
||||
A file containing the password corresponding to
|
||||
{option}`database.user`.
|
||||
'';
|
||||
};
|
||||
|
||||
createLocally = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Create the database and database user locally.";
|
||||
};
|
||||
};
|
||||
|
||||
invoiceTemplates = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [ ];
|
||||
description = ''
|
||||
List of path(s) to respective template(s) which are copied from the 'invoice_templates/pdf' directory.
|
||||
|
||||
::: {.note}
|
||||
These templates need to be packaged before use, see example.
|
||||
:::
|
||||
'';
|
||||
example = literalExpression ''
|
||||
let
|
||||
# Let's package an example template
|
||||
template-vtdirektmarketing = pkgs.stdenv.mkDerivation {
|
||||
name = "vtdirektmarketing";
|
||||
# Download the template from a public repository
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://git.project-insanity.org/onny/invoiceplane-vtdirektmarketing.git";
|
||||
sha256 = "1hh0q7wzsh8v8x03i82p6qrgbxr4v5fb05xylyrpp975l8axyg2z";
|
||||
};
|
||||
sourceRoot = ".";
|
||||
# Installing simply means copying template php file to the output directory
|
||||
installPhase = ""
|
||||
mkdir -p $out
|
||||
cp invoiceplane-vtdirektmarketing/vtdirektmarketing.php $out/
|
||||
"";
|
||||
};
|
||||
# And then pass this package to the template list like this:
|
||||
in [ template-vtdirektmarketing ]
|
||||
'';
|
||||
};
|
||||
|
||||
quoteTemplates = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [ ];
|
||||
description = ''
|
||||
List of path(s) to respective template(s) which are copied from the 'quote_templates/pdf' directory.
|
||||
|
||||
::: {.note}
|
||||
These templates need to be packaged before use, see example.
|
||||
:::
|
||||
'';
|
||||
example = literalExpression ''
|
||||
let
|
||||
# Let's package an example template
|
||||
template-vtdirektmarketing = pkgs.stdenv.mkDerivation {
|
||||
name = "vtdirektmarketing";
|
||||
# Download the template from a public repository
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://git.project-insanity.org/onny/invoiceplane-vtdirektmarketing.git";
|
||||
sha256 = "1hh0q7wzsh8v8x03i82p6qrgbxr4v5fb05xylyrpp975l8axyg2z";
|
||||
};
|
||||
sourceRoot = ".";
|
||||
# Installing simply means copying template php file to the output directory
|
||||
installPhase = ""
|
||||
mkdir -p $out
|
||||
cp invoiceplane-vtdirektmarketing/vtdirektmarketing.php $out/
|
||||
"";
|
||||
};
|
||||
# And then pass this package to the template list like this:
|
||||
in [ template-vtdirektmarketing ]
|
||||
'';
|
||||
};
|
||||
|
||||
poolConfig = mkOption {
|
||||
type =
|
||||
with types;
|
||||
attrsOf (oneOf [
|
||||
str
|
||||
int
|
||||
bool
|
||||
]);
|
||||
default = {
|
||||
"pm" = "dynamic";
|
||||
"pm.max_children" = 32;
|
||||
"pm.start_servers" = 2;
|
||||
"pm.min_spare_servers" = 2;
|
||||
"pm.max_spare_servers" = 4;
|
||||
"pm.max_requests" = 500;
|
||||
};
|
||||
description = ''
|
||||
Options for the InvoicePlane PHP pool. See the documentation on `php-fpm.conf`
|
||||
for details on configuration directives.
|
||||
'';
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
type = types.attrsOf types.anything;
|
||||
default = { };
|
||||
description = ''
|
||||
Structural InvoicePlane configuration. Refer to
|
||||
<https://github.com/InvoicePlane/InvoicePlane/blob/master/ipconfig.php.example>
|
||||
for details and supported values.
|
||||
'';
|
||||
example = literalExpression ''
|
||||
{
|
||||
SETUP_COMPLETED = true;
|
||||
DISABLE_SETUP = true;
|
||||
IP_URL = "https://invoice.example.com";
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
cron = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable cron service which periodically runs Invoiceplane tasks.
|
||||
Requires key taken from the administration page. Refer to
|
||||
<https://wiki.invoiceplane.com/en/1.0/modules/recurring-invoices>
|
||||
on how to configure it.
|
||||
'';
|
||||
};
|
||||
key = mkOption {
|
||||
type = types.str;
|
||||
description = "Cron key taken from the administration page.";
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
in
|
||||
{
|
||||
# interface
|
||||
options = {
|
||||
services.invoiceplane = mkOption {
|
||||
type = types.submodule {
|
||||
|
||||
options.sites = mkOption {
|
||||
type = types.attrsOf (types.submodule siteOpts);
|
||||
default = { };
|
||||
description = "Specification of one or more InvoicePlane sites to serve";
|
||||
};
|
||||
|
||||
options.webserver = mkOption {
|
||||
type = types.enum [
|
||||
"caddy"
|
||||
"nginx"
|
||||
];
|
||||
default = "caddy";
|
||||
example = "nginx";
|
||||
description = ''
|
||||
Which webserver to use for virtual host management.
|
||||
'';
|
||||
};
|
||||
};
|
||||
default = { };
|
||||
description = "InvoicePlane configuration.";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
# implementation
|
||||
config = mkIf (eachSite != { }) (mkMerge [
|
||||
{
|
||||
|
||||
assertions = flatten (
|
||||
mapAttrsToList (hostName: cfg: [
|
||||
{
|
||||
assertion = cfg.database.createLocally -> cfg.database.user == user;
|
||||
message = ''services.invoiceplane.sites."${hostName}".database.user must be ${user} if the database is to be automatically provisioned'';
|
||||
}
|
||||
{
|
||||
assertion = cfg.database.createLocally -> cfg.database.passwordFile == null;
|
||||
message = ''services.invoiceplane.sites."${hostName}".database.passwordFile cannot be specified if services.invoiceplane.sites."${hostName}".database.createLocally is set to true.'';
|
||||
}
|
||||
{
|
||||
assertion = cfg.cron.enable -> cfg.cron.key != null;
|
||||
message = ''services.invoiceplane.sites."${hostName}".cron.key must be set in order to use cron service.'';
|
||||
}
|
||||
]) eachSite
|
||||
);
|
||||
|
||||
services.mysql = mkIf (any (v: v.database.createLocally) (attrValues eachSite)) {
|
||||
enable = true;
|
||||
package = mkDefault pkgs.mariadb;
|
||||
ensureDatabases = mapAttrsToList (hostName: cfg: cfg.database.name) eachSite;
|
||||
ensureUsers = mapAttrsToList (hostName: cfg: {
|
||||
name = cfg.database.user;
|
||||
ensurePermissions = {
|
||||
"${cfg.database.name}.*" = "ALL PRIVILEGES";
|
||||
};
|
||||
}) eachSite;
|
||||
};
|
||||
|
||||
services.phpfpm = {
|
||||
pools = mapAttrs' (
|
||||
hostName: cfg:
|
||||
(nameValuePair "invoiceplane-${hostName}" {
|
||||
inherit user;
|
||||
group = webserver.group;
|
||||
settings = {
|
||||
"listen.owner" = webserver.user;
|
||||
"listen.group" = webserver.group;
|
||||
}
|
||||
// cfg.poolConfig;
|
||||
})
|
||||
) eachSite;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
systemd.tmpfiles.rules = flatten (
|
||||
mapAttrsToList (hostName: cfg: [
|
||||
"d ${cfg.stateDir} 0750 ${user} ${webserver.group} - -"
|
||||
"f ${cfg.stateDir}/ipconfig.php 0750 ${user} ${webserver.group} - -"
|
||||
"d ${cfg.stateDir}/logs 0750 ${user} ${webserver.group} - -"
|
||||
"d ${cfg.stateDir}/uploads 0750 ${user} ${webserver.group} - -"
|
||||
"d ${cfg.stateDir}/uploads/archive 0750 ${user} ${webserver.group} - -"
|
||||
"d ${cfg.stateDir}/uploads/customer_files 0750 ${user} ${webserver.group} - -"
|
||||
"d ${cfg.stateDir}/uploads/temp 0750 ${user} ${webserver.group} - -"
|
||||
"d ${cfg.stateDir}/uploads/temp/mpdf 0750 ${user} ${webserver.group} - -"
|
||||
"d ${cfg.stateDir}/tmp 0750 ${user} ${webserver.group} - -"
|
||||
]) eachSite
|
||||
);
|
||||
|
||||
systemd.services.invoiceplane-config = {
|
||||
serviceConfig.Type = "oneshot";
|
||||
script = concatStrings (
|
||||
mapAttrsToList (hostName: cfg: ''
|
||||
mkdir -p ${cfg.stateDir}/logs \
|
||||
${cfg.stateDir}/uploads
|
||||
if ! grep -q IP_URL "${cfg.stateDir}/ipconfig.php"; then
|
||||
cp "${invoiceplane-config hostName cfg}" "${cfg.stateDir}/ipconfig.php"
|
||||
fi
|
||||
if ! grep -q 'php exit' "${cfg.stateDir}/ipconfig.php"; then
|
||||
sed -i "1i # <?php exit('No direct script access allowed'); ?>" "${cfg.stateDir}/ipconfig.php"
|
||||
fi
|
||||
'') eachSite
|
||||
);
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
|
||||
users.users.${user} = {
|
||||
group = webserver.group;
|
||||
isSystemUser = true;
|
||||
};
|
||||
|
||||
}
|
||||
{
|
||||
|
||||
# Cron service implementation
|
||||
|
||||
systemd.timers = mapAttrs' (
|
||||
hostName: cfg:
|
||||
(nameValuePair "invoiceplane-cron-${hostName}" (
|
||||
mkIf cfg.cron.enable {
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig = {
|
||||
OnBootSec = "5m";
|
||||
OnUnitActiveSec = "5m";
|
||||
Unit = "invoiceplane-cron-${hostName}.service";
|
||||
};
|
||||
}
|
||||
))
|
||||
) eachSite;
|
||||
|
||||
systemd.services = mapAttrs' (
|
||||
hostName: cfg:
|
||||
(nameValuePair "invoiceplane-cron-${hostName}" (
|
||||
mkIf cfg.cron.enable {
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = user;
|
||||
ExecStart = "${pkgs.curl}/bin/curl --header 'Host: ${hostName}' http://localhost/invoices/cron/recur/${cfg.cron.key}";
|
||||
};
|
||||
}
|
||||
))
|
||||
) eachSite;
|
||||
|
||||
}
|
||||
|
||||
(mkIf (cfg.webserver == "caddy") {
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
virtualHosts = mapAttrs' (
|
||||
hostName: cfg:
|
||||
(nameValuePair "http://${hostName}" {
|
||||
extraConfig = ''
|
||||
root * ${pkg hostName cfg}
|
||||
file_server
|
||||
php_fastcgi unix/${config.services.phpfpm.pools."invoiceplane-${hostName}".socket}
|
||||
'';
|
||||
})
|
||||
) eachSite;
|
||||
};
|
||||
})
|
||||
|
||||
(mkIf (cfg.webserver == "nginx") {
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
virtualHosts = mapAttrs' (
|
||||
hostName: cfg:
|
||||
(nameValuePair hostName {
|
||||
root = pkg hostName cfg;
|
||||
extraConfig = ''
|
||||
index index.php index.html index.htm;
|
||||
|
||||
if (!-e $request_filename){
|
||||
rewrite ^(.*)$ /index.php break;
|
||||
}
|
||||
'';
|
||||
|
||||
locations = {
|
||||
"/setup".extraConfig = ''
|
||||
rewrite ^(.*)$ http://${hostName}/ redirect;
|
||||
'';
|
||||
|
||||
"~ .php$" = {
|
||||
extraConfig = ''
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_pass unix:${config.services.phpfpm.pools."invoiceplane-${hostName}".socket};
|
||||
include ${config.services.nginx.package}/conf/fastcgi_params;
|
||||
include ${config.services.nginx.package}/conf/fastcgi.conf;
|
||||
'';
|
||||
};
|
||||
};
|
||||
})
|
||||
) eachSite;
|
||||
};
|
||||
})
|
||||
|
||||
]);
|
||||
}
|
||||
@@ -788,6 +788,7 @@ in
|
||||
installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix { };
|
||||
intune = runTest ./intune.nix;
|
||||
invidious = runTest ./invidious.nix;
|
||||
invoiceplane = runTest ./invoiceplane.nix;
|
||||
iodine = runTest ./iodine.nix;
|
||||
iosched = runTest ./iosched.nix;
|
||||
ipget = runTest ./ipget.nix;
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
name = "invoiceplane";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
onny
|
||||
];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
invoiceplane_caddy =
|
||||
{ ... }:
|
||||
{
|
||||
services.invoiceplane.webserver = "caddy";
|
||||
services.invoiceplane.sites = {
|
||||
"site1.local" = {
|
||||
database.name = "invoiceplane1";
|
||||
database.createLocally = true;
|
||||
enable = true;
|
||||
};
|
||||
"site2.local" = {
|
||||
database.name = "invoiceplane2";
|
||||
database.createLocally = true;
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
networking.hosts."127.0.0.1" = [
|
||||
"site1.local"
|
||||
"site2.local"
|
||||
];
|
||||
};
|
||||
|
||||
invoiceplane_nginx =
|
||||
{ ... }:
|
||||
{
|
||||
services.invoiceplane.webserver = "nginx";
|
||||
services.invoiceplane.sites = {
|
||||
"site1.local" = {
|
||||
database.name = "invoiceplane1";
|
||||
database.createLocally = true;
|
||||
enable = true;
|
||||
};
|
||||
"site2.local" = {
|
||||
database.name = "invoiceplane2";
|
||||
database.createLocally = true;
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
networking.hosts."127.0.0.1" = [
|
||||
"site1.local"
|
||||
"site2.local"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
invoiceplane_caddy.wait_for_unit("caddy")
|
||||
invoiceplane_nginx.wait_for_unit("nginx")
|
||||
|
||||
site_names = ["site1.local", "site2.local"]
|
||||
|
||||
machines = [invoiceplane_caddy, invoiceplane_nginx]
|
||||
|
||||
for machine in machines:
|
||||
machine.wait_for_open_port(80)
|
||||
machine.wait_for_open_port(3306)
|
||||
|
||||
for site_name in site_names:
|
||||
machine.wait_for_unit(f"phpfpm-invoiceplane-{site_name}")
|
||||
|
||||
with subtest("Website returns welcome screen"):
|
||||
assert "Please install InvoicePlane" in machine.succeed(f"curl -L {site_name}")
|
||||
|
||||
with subtest("Finish InvoicePlane setup"):
|
||||
machine.succeed(
|
||||
f"curl -sSfL --cookie-jar cjar {site_name}/setup/language"
|
||||
)
|
||||
csrf_token = machine.succeed(
|
||||
"grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
|
||||
)
|
||||
machine.succeed(
|
||||
f"curl -sSfL --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&ip_lang=english&btn_continue=Continue' {site_name}/setup/language"
|
||||
)
|
||||
csrf_token = machine.succeed(
|
||||
"grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
|
||||
)
|
||||
machine.succeed(
|
||||
f"curl -sSfL --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&btn_continue=Continue' {site_name}/setup/prerequisites"
|
||||
)
|
||||
csrf_token = machine.succeed(
|
||||
"grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
|
||||
)
|
||||
machine.succeed(
|
||||
f"curl -sSfL --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&btn_continue=Continue' {site_name}/setup/configure_database"
|
||||
)
|
||||
csrf_token = machine.succeed(
|
||||
"grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
|
||||
)
|
||||
machine.succeed(
|
||||
f"curl -sSfl --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&btn_continue=Continue' {site_name}/setup/install_tables"
|
||||
)
|
||||
csrf_token = machine.succeed(
|
||||
"grep ip_csrf_cookie cjar | cut -f 7 | tr -d '\n'"
|
||||
)
|
||||
machine.succeed(
|
||||
f"curl -sSfl --cookie cjar --cookie-jar cjar -d '_ip_csrf={csrf_token}&btn_continue=Continue' {site_name}/setup/upgrade_tables"
|
||||
)
|
||||
'';
|
||||
}
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
* When adding a new extension, place its definition in a `default.nix` file in a directory with the extension's ID (e.g. `publisher.extension-name/default.nix`) and refer to it in `./default.nix`, e.g. `publisher.extension-name = callPackage ./publisher.extension-name { };`.
|
||||
|
||||
* Currently `nixfmt-rfc-style` formatter is being used to format the VSCode extensions.
|
||||
* Use `nix-shell --run treefmt` to format the VSCode extensions.
|
||||
|
||||
* Respect `alphabetical order` whenever adding extensions. If out of order, please kindly open a PR re-establishing the order.
|
||||
|
||||
|
||||
@@ -36,20 +36,20 @@ let
|
||||
|
||||
hash =
|
||||
{
|
||||
x86_64-linux = "sha256-N8dBXYpBbaymuGWFb8+77/4yJ6Meo5eqoYpnlsjGlN8=";
|
||||
x86_64-darwin = "sha256-li+29ukZXvwBihnHti+AntMNwhr3g1tOOdmalZchL40=";
|
||||
aarch64-linux = "sha256-ASzpE721RBAiVFxnGCRMCWj/RFa+TpxA4gaZJFxk7I0=";
|
||||
aarch64-darwin = "sha256-afaADPPWJlW3HdWGAMDuibGhBtR7toEm2T58jR/nsic=";
|
||||
armv7l-linux = "sha256-BgG1RglSISrKm+KRq7AXhp7EUOssts2LSLCVqSD7E/Q=";
|
||||
x86_64-linux = "sha256-ST5i8gvNtAaBbmcpcg9GJipr8e5d0A0qbdG1P9QViek=";
|
||||
x86_64-darwin = "sha256-BRGXLasiHZSKsijq02bCa2RbaBc7iC1ZtLe29u4KTH0=";
|
||||
aarch64-linux = "sha256-7plpHWoi8eYDKQZVV3OCXZJUk8j173M1xpRgTOTsPZ0=";
|
||||
aarch64-darwin = "sha256-RgfhGjVFmaIAAotTYNPUDrJZ8qj8e4yR9bVfal/Hl6o=";
|
||||
armv7l-linux = "sha256-Zzz4HsmiWcKiBRE19pGll8BRQy26wbmpuYSi89PDoBo=";
|
||||
}
|
||||
.${system} or throwSystem;
|
||||
|
||||
# Please backport all compatible updates to the stable release.
|
||||
# This is important for the extension ecosystem.
|
||||
version = "1.109.0";
|
||||
version = "1.109.2";
|
||||
|
||||
# This is used for VS Code - Remote SSH test
|
||||
rev = "bdd88df003631aaa0bcbe057cb0a940b80a476fa";
|
||||
rev = "591199df409fbf59b4b52d5ad4ee0470152a9b31";
|
||||
in
|
||||
buildVscode {
|
||||
pname = "vscode" + lib.optionalString isInsiders "-insiders";
|
||||
@@ -82,7 +82,7 @@ buildVscode {
|
||||
src = fetchurl {
|
||||
name = "vscode-server-${rev}.tar.gz";
|
||||
url = "https://update.code.visualstudio.com/commit:${rev}/server-linux-x64/stable";
|
||||
hash = "sha256-qdXYNkc7u1s/HexmK3Dwc4H/nsfoyhL0/c8TgK94JwU=";
|
||||
hash = "sha256-CbU8VdJETTzpwCpzVgavoeSQMdz3RdwDYJ7wUqs8LJ8=";
|
||||
};
|
||||
stdenv = stdenvNoCC;
|
||||
};
|
||||
|
||||
@@ -111,7 +111,7 @@ rec {
|
||||
allowSubstitutes ? false,
|
||||
preferLocalBuild ? true,
|
||||
derivationArgs ? { },
|
||||
}:
|
||||
}@args:
|
||||
assert lib.assertMsg (destination != "" -> (lib.hasPrefix "/" destination && destination != "/")) ''
|
||||
destination must be an absolute path, relative to the derivation's out path,
|
||||
got '${destination}' instead.
|
||||
@@ -125,6 +125,7 @@ rec {
|
||||
runCommand name
|
||||
(
|
||||
{
|
||||
pos = builtins.unsafeGetAttrPos "name" args;
|
||||
inherit
|
||||
text
|
||||
executable
|
||||
@@ -333,7 +334,7 @@ rec {
|
||||
Type: Bool
|
||||
*/
|
||||
inheritPath ? true,
|
||||
}:
|
||||
}@args:
|
||||
writeTextFile {
|
||||
inherit
|
||||
name
|
||||
@@ -613,6 +614,13 @@ rec {
|
||||
"failOnMissing"
|
||||
]
|
||||
// {
|
||||
# Allow getting the proper position of the output derivation.
|
||||
# Since one of these are required, it should be fairly accurate.
|
||||
pos =
|
||||
if args_ ? pname then
|
||||
builtins.unsafeGetAttrPos "pname" args_
|
||||
else
|
||||
builtins.unsafeGetAttrPos "name" args_;
|
||||
inherit preferLocalBuild allowSubstitutes;
|
||||
paths = mapPaths (path: "${path}${stripPrefix}") paths;
|
||||
passAsFile = [ "paths" ];
|
||||
@@ -675,6 +683,14 @@ rec {
|
||||
in
|
||||
runCommand name
|
||||
{
|
||||
# Get the position from the `entries` attrset if it exists.
|
||||
# This is the best we can do since the other attrs are either defined here, or curried values that
|
||||
# we cannot extract a position from
|
||||
pos =
|
||||
if lib.isAttrs entries then
|
||||
builtins.unsafeGetAttrPos (builtins.head (builtins.attrNames entries)) entries
|
||||
else
|
||||
null;
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
passthru.entries = entries';
|
||||
@@ -744,12 +760,15 @@ rec {
|
||||
meta ? { },
|
||||
passthru ? { },
|
||||
substitutions ? { },
|
||||
}:
|
||||
}@args:
|
||||
script:
|
||||
runCommand name
|
||||
(
|
||||
substitutions
|
||||
// {
|
||||
# Make the position of the derivation accurate.
|
||||
# Since not having `name` is deprecated, this should be fairly accurate.
|
||||
pos = lib.unsafeGetAttrPos "name" args;
|
||||
# TODO(@Artturin:) substitutions should be inside the env attrset
|
||||
# but users are likely passing non-substitution arguments through substitutions
|
||||
# turn off __structuredAttrs to unbreak substituteAll
|
||||
@@ -1000,76 +1019,70 @@ rec {
|
||||
];
|
||||
}
|
||||
*/
|
||||
applyPatches =
|
||||
{
|
||||
src,
|
||||
name ?
|
||||
(
|
||||
if builtins.typeOf src == "path" then
|
||||
baseNameOf src
|
||||
else if builtins.isAttrs src && builtins.hasAttr "name" src then
|
||||
src.name
|
||||
else
|
||||
throw "applyPatches: please supply a `name` argument because a default name can only be computed when the `src` is a path or is an attribute set with a `name` attribute."
|
||||
)
|
||||
+ "-patched",
|
||||
patches ? [ ],
|
||||
prePatch ? "",
|
||||
postPatch ? "",
|
||||
...
|
||||
}@args:
|
||||
assert lib.assertMsg (
|
||||
!args ? meta
|
||||
) "applyPatches will not merge 'meta', change it in 'src' instead";
|
||||
assert lib.assertMsg (
|
||||
!args ? passthru
|
||||
) "applyPatches will not merge 'passthru', change it in 'src' instead";
|
||||
if patches == [ ] && prePatch == "" && postPatch == "" then
|
||||
src # nothing to do, so use original src to avoid additional drv
|
||||
else
|
||||
applyPatches = lib.extendMkDerivation {
|
||||
constructDrv = stdenvNoCC.mkDerivation;
|
||||
|
||||
extendDrvArgs =
|
||||
finalAttrs:
|
||||
{
|
||||
src,
|
||||
...
|
||||
}@args:
|
||||
assert lib.assertMsg (
|
||||
!args ? meta
|
||||
) "applyPatches will not merge 'meta', change it in 'src' instead";
|
||||
assert lib.assertMsg (
|
||||
!args ? passthru
|
||||
) "applyPatches will not merge 'passthru', change it in 'src' instead";
|
||||
let
|
||||
keepAttrs = names: lib.filterAttrs (name: val: lib.elem name names);
|
||||
# enables tools like nix-update to determine what src attributes to replace
|
||||
extraPassthru = lib.optionalAttrs (lib.isAttrs src) (
|
||||
extraPassthru = lib.optionalAttrs (lib.isAttrs finalAttrs.src) (
|
||||
keepAttrs [
|
||||
"rev"
|
||||
"tag"
|
||||
"url"
|
||||
"outputHash"
|
||||
"outputHashAlgo"
|
||||
] src
|
||||
] finalAttrs.src
|
||||
);
|
||||
in
|
||||
stdenvNoCC.mkDerivation (
|
||||
{
|
||||
inherit
|
||||
name
|
||||
src
|
||||
patches
|
||||
prePatch
|
||||
postPatch
|
||||
;
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
phases = "unpackPhase patchPhase installPhase";
|
||||
installPhase = "cp -R ./ $out";
|
||||
}
|
||||
{
|
||||
name =
|
||||
args.name or (
|
||||
if builtins.isPath finalAttrs.src then
|
||||
baseNameOf finalAttrs.src + "-patched"
|
||||
else if builtins.isAttrs finalAttrs.src && (finalAttrs.src ? name) then
|
||||
let
|
||||
srcName = builtins.parseDrvName finalAttrs.src.name;
|
||||
in
|
||||
"${srcName.name}-patched${lib.optionalString (srcName.version != "") "-${srcName.version}"}"
|
||||
else
|
||||
throw "applyPatches: please supply a `name` argument because a default name can only be computed when the `src` is a path or is an attribute set with a `name` attribute."
|
||||
);
|
||||
|
||||
# Manually setting `name` can mess up positioning.
|
||||
# This should fix it.
|
||||
pos = builtins.unsafeGetAttrPos "src" args;
|
||||
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
doCheck = false;
|
||||
|
||||
installPhase = "cp -R ./ $out";
|
||||
|
||||
# passthru the git and hash info for nix-update, as well
|
||||
# as all the src's passthru attrs.
|
||||
passthru = extraPassthru // finalAttrs.src.passthru or { };
|
||||
|
||||
# Carry (and merge) information from the underlying `src` if present.
|
||||
// (optionalAttrs (src ? meta) {
|
||||
inherit (src) meta;
|
||||
})
|
||||
// (optionalAttrs (extraPassthru != { } || src ? passthru) {
|
||||
passthru = extraPassthru // src.passthru or { };
|
||||
})
|
||||
# Forward any additional arguments to the derivation
|
||||
// (removeAttrs args [
|
||||
"src"
|
||||
"name"
|
||||
"patches"
|
||||
"prePatch"
|
||||
"postPatch"
|
||||
])
|
||||
);
|
||||
# If there is not src.meta, this meta block will be blank regardless.
|
||||
meta = lib.optionalAttrs (finalAttrs.src ? meta) removeAttrs finalAttrs.src.meta [ "position" ];
|
||||
};
|
||||
};
|
||||
|
||||
# TODO: move docs to Nixpkgs manual
|
||||
# An immutable file in the store with a length of 0 bytes.
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
}:
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "app2unit";
|
||||
version = "1.2.1";
|
||||
version = "1.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Vladimir-csp";
|
||||
repo = "app2unit";
|
||||
tag = "v${finalAttrs.version}";
|
||||
sha256 = "sha256-DZ0W7SygOUmjIO0+K8hS9K1U+gSp1gA6Q15eXr6rOmo=";
|
||||
sha256 = "sha256-HkwcYYGNReDtPxZumnz3ZDb1sr1JcngAOqs/inO/350=";
|
||||
};
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
libusb1,
|
||||
libuv,
|
||||
libwebsockets,
|
||||
libxi,
|
||||
libxml2,
|
||||
libxslt,
|
||||
lilv,
|
||||
@@ -71,14 +72,14 @@ stdenv.mkDerivation (
|
||||
in
|
||||
{
|
||||
pname = "ardour";
|
||||
version = "8.12";
|
||||
version = "9.0";
|
||||
|
||||
# We can't use `fetchFromGitea` here, as attempting to fetch release archives from git.ardour.org
|
||||
# result in an empty archive. See https://tracker.ardour.org/view.php?id=7328 for more info.
|
||||
src = fetchgit {
|
||||
url = "git://git.ardour.org/ardour/ardour.git";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-4IgBQ53cwPA35YwNQyo+qBqsMGv+TLn6w1zaDX97erE=";
|
||||
hash = "sha256-zgWNKYN45qa2xLWnL3W/UWfRVBJN3+hya9dpIZLLJvo=";
|
||||
};
|
||||
|
||||
bundledContent = fetchzip {
|
||||
@@ -146,6 +147,7 @@ stdenv.mkDerivation (
|
||||
libusb1
|
||||
libuv
|
||||
libwebsockets
|
||||
libxi
|
||||
libxml2
|
||||
libxslt
|
||||
lilv
|
||||
@@ -190,6 +192,15 @@ stdenv.mkDerivation (
|
||||
]
|
||||
++ lib.optional optimize "--optimize";
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = toString [
|
||||
# 'ioprio_set' syscall support:
|
||||
"-D_GNU_SOURCE"
|
||||
# compiler doesn't find headers without these:
|
||||
"-I${lib.getDev serd}/include/serd-0"
|
||||
"-I${lib.getDev sratom}/include/sratom-0"
|
||||
"-I${lib.getDev sord}/include/sord-0"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
# wscript does not install these for some reason
|
||||
install -vDm 644 "build/gtk2_ardour/ardour.xml" \
|
||||
@@ -231,7 +242,7 @@ stdenv.mkDerivation (
|
||||
'';
|
||||
homepage = "https://ardour.org/";
|
||||
license = lib.licenses.gpl2Plus;
|
||||
mainProgram = "ardour8";
|
||||
mainProgram = "ardour9";
|
||||
platforms = lib.platforms.linux;
|
||||
maintainers = with lib.maintainers; [
|
||||
magnetophon
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
--- a/libs/ardour/wscript
|
||||
+++ b/libs/ardour/wscript
|
||||
@@ -379,8 +379,7 @@ def build(bld):
|
||||
|
||||
# remove '${DEFINES_ST:DEFINES}' from run_str.
|
||||
# x86_64-w64-mingw32-as (mingw) -D flag is for debug messages
|
||||
- if bld.env['build_target'] == 'mingw':
|
||||
- class asm(Task.classes['asm']): run_str = '${AS} ${ASFLAGS} ${ASMPATH_ST:INCPATHS} ${AS_SRC_F}${SRC} ${AS_TGT_F}${TGT}'
|
||||
+ class asm(Task.classes['asm']): run_str = '${AS} ${ASFLAGS} ${ASMPATH_ST:INCPATHS} ${AS_SRC_F}${SRC} ${AS_TGT_F}${TGT}'
|
||||
|
||||
# operate on copy to avoid adding sources twice
|
||||
sources = list(libardour_sources)
|
||||
@@ -0,0 +1,55 @@
|
||||
From 1217722e4bf6c65b5c24da17a7de4bf712ca6775 Mon Sep 17 00:00:00 2001
|
||||
From: Tamara Schmitz <tamara.zoe.schmitz@posteo.de>
|
||||
Date: Sat, 17 Jun 2023 14:05:53 +0200
|
||||
Subject: [PATCH] add NixOS plugin paths as default search paths
|
||||
|
||||
Since NixOS uses unusual paths, we should tell Ardour about this. During
|
||||
first launch, Ardour does indeed check for environmentals but not when
|
||||
you press the "Reset to Defaults" button in the Settings menu. This
|
||||
path fixes this by including NixOS paths in the defaults.
|
||||
---
|
||||
libs/ardour/plugin_manager.cc | 5 +++--
|
||||
libs/ardour/search_paths.cc | 4 ++++
|
||||
2 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
|
||||
index a572ed55dd..3dd6c2fda6 100644
|
||||
--- a/libs/ardour/plugin_manager.cc
|
||||
+++ b/libs/ardour/plugin_manager.cc
|
||||
@@ -305,7 +305,8 @@ PluginManager::PluginManager ()
|
||||
if (lxvst_path.length() == 0) {
|
||||
lxvst_path = "/usr/local/lib64/lxvst:/usr/local/lib/lxvst:/usr/lib64/lxvst:/usr/lib/lxvst:"
|
||||
"/usr/local/lib64/linux_vst:/usr/local/lib/linux_vst:/usr/lib64/linux_vst:/usr/lib/linux_vst:"
|
||||
- "/usr/lib/vst:/usr/local/lib/vst";
|
||||
+ "/usr/lib/vst:/usr/local/lib/vst:$HOME/.nix-profile/lib/vst:"
|
||||
+ "$HOME/.lxvst:$HOME/.nix-profile/lib/lxvst:/run/current-system/sw/lib/lxvst:/etc/profiles/per-user/$USER/lib/lxvst";
|
||||
}
|
||||
|
||||
/* first time setup, use 'default' path */
|
||||
@@ -2040,7 +2041,7 @@ PluginManager::vst3_refresh (bool cache_only)
|
||||
std::string prog = PBD::get_win_special_folder_path (CSIDL_PROGRAM_FILES);
|
||||
vst3_discover_from_path (Glib::build_filename (prog, "Common Files", "VST3"), cache_only);
|
||||
#else
|
||||
- vst3_discover_from_path ("~/.vst3:/usr/local/lib/vst3:/usr/lib/vst3", cache_only);
|
||||
+ vst3_discover_from_path ("~/.vst3:/usr/local/lib/vst3:/usr/lib/vst3:~/.nix-profile/lib/vst3:/run/current-system/sw/lib/vst3:/etc/profiles/per-user/$USER/lib/vst3", cache_only);
|
||||
#endif
|
||||
}
|
||||
|
||||
diff --git a/libs/ardour/search_paths.cc b/libs/ardour/search_paths.cc
|
||||
index e6d8744369..b9774cb006 100644
|
||||
--- a/libs/ardour/search_paths.cc
|
||||
+++ b/libs/ardour/search_paths.cc
|
||||
@@ -112,6 +112,10 @@ ladspa_search_path ()
|
||||
spath.push_back ("/usr/local/lib/ladspa");
|
||||
spath.push_back ("/usr/lib64/ladspa");
|
||||
spath.push_back ("/usr/lib/ladspa");
|
||||
+ spath.push_back ("/run/current-system/sw/lib/ladspa");
|
||||
+ spath.push_back (path_expand ("$HOME/.ladspa"));
|
||||
+ spath.push_back (path_expand ("$HOME/.nix-profile/lib/ladspa"));
|
||||
+ spath.push_back (path_expand ("/etc/profiles/per-user/$USER/lib/ladspa"));
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
--
|
||||
2.40.1
|
||||
|
||||
@@ -0,0 +1,243 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchgit,
|
||||
fetchzip,
|
||||
alsa-lib,
|
||||
aubio,
|
||||
boost,
|
||||
cairomm,
|
||||
cppunit,
|
||||
curl,
|
||||
dbus,
|
||||
doxygen,
|
||||
ffmpeg,
|
||||
fftw,
|
||||
fftwSinglePrec,
|
||||
flac,
|
||||
fluidsynth,
|
||||
glibc,
|
||||
glibmm,
|
||||
graphviz,
|
||||
harvid,
|
||||
hidapi,
|
||||
itstool,
|
||||
kissfft,
|
||||
libarchive,
|
||||
libjack2,
|
||||
liblo,
|
||||
libltc,
|
||||
libogg,
|
||||
libpulseaudio,
|
||||
librdf_rasqal,
|
||||
libsamplerate,
|
||||
libsigcxx,
|
||||
libsndfile,
|
||||
libusb1,
|
||||
libuv,
|
||||
libwebsockets,
|
||||
libxml2,
|
||||
libxslt,
|
||||
lilv,
|
||||
lrdf,
|
||||
lv2,
|
||||
makeWrapper,
|
||||
pango,
|
||||
pangomm,
|
||||
perl,
|
||||
pkg-config,
|
||||
python3,
|
||||
qm-dsp,
|
||||
readline,
|
||||
rubberband,
|
||||
serd,
|
||||
sord,
|
||||
soundtouch,
|
||||
sratom,
|
||||
suil,
|
||||
taglib,
|
||||
vamp-plugin-sdk,
|
||||
wafHook,
|
||||
xjadeo,
|
||||
libxrandr,
|
||||
libxinerama,
|
||||
optimize ? true, # disable to print Lua DSP script output to stdout
|
||||
videoSupport ? true,
|
||||
}:
|
||||
stdenv.mkDerivation (
|
||||
finalAttrs:
|
||||
let
|
||||
majorVersion = lib.versions.major finalAttrs.version;
|
||||
in
|
||||
{
|
||||
pname = "ardour";
|
||||
version = "8.12";
|
||||
|
||||
# We can't use `fetchFromGitea` here, as attempting to fetch release archives from git.ardour.org
|
||||
# result in an empty archive. See https://tracker.ardour.org/view.php?id=7328 for more info.
|
||||
src = fetchgit {
|
||||
url = "git://git.ardour.org/ardour/ardour.git";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-4IgBQ53cwPA35YwNQyo+qBqsMGv+TLn6w1zaDX97erE=";
|
||||
};
|
||||
|
||||
bundledContent = fetchzip {
|
||||
url = "https://web.archive.org/web/20221026200824/http://stuff.ardour.org/loops/ArdourBundledMedia.zip";
|
||||
hash = "sha256-IbPQWFeyMuvCoghFl1ZwZNNcSvLNsH84rGArXnw+t7A=";
|
||||
# archive does not contain a single folder at the root
|
||||
stripRoot = false;
|
||||
};
|
||||
|
||||
patches = [
|
||||
# AS=as in the environment causes build failure https://tracker.ardour.org/view.php?id=8096
|
||||
./as-flags.patch
|
||||
./default-plugin-search-paths.patch
|
||||
];
|
||||
|
||||
# Ardour's wscript requires git revision and date to be available.
|
||||
# Since they are not, let's generate the file manually.
|
||||
postPatch = ''
|
||||
printf '#include "libs/ardour/ardour/revision.h"\nnamespace ARDOUR { const char* revision = "${finalAttrs.version}"; const char* date = ""; }\n' > libs/ardour/revision.cc
|
||||
sed 's|/usr/include/libintl.h|${glibc.dev}/include/libintl.h|' -i wscript
|
||||
patchShebangs ./tools/
|
||||
substituteInPlace libs/ardour/video_tools_paths.cc \
|
||||
--replace-fail 'ffmpeg_exe = X_("");' 'ffmpeg_exe = X_("${ffmpeg}/bin/ffmpeg");' \
|
||||
--replace-fail 'ffprobe_exe = X_("");' 'ffprobe_exe = X_("${ffmpeg}/bin/ffprobe");'
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
doxygen
|
||||
graphviz # for dot
|
||||
itstool
|
||||
makeWrapper
|
||||
perl
|
||||
pkg-config
|
||||
python3
|
||||
wafHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
alsa-lib
|
||||
aubio
|
||||
boost
|
||||
cairomm
|
||||
cppunit
|
||||
curl
|
||||
dbus
|
||||
ffmpeg
|
||||
fftw
|
||||
fftwSinglePrec
|
||||
flac
|
||||
fluidsynth
|
||||
glibmm
|
||||
hidapi
|
||||
itstool
|
||||
kissfft
|
||||
libarchive
|
||||
libjack2
|
||||
liblo
|
||||
libltc
|
||||
libogg
|
||||
libpulseaudio
|
||||
librdf_rasqal
|
||||
libsamplerate
|
||||
libsigcxx
|
||||
libsndfile
|
||||
libusb1
|
||||
libuv
|
||||
libwebsockets
|
||||
libxml2
|
||||
libxslt
|
||||
lilv
|
||||
lrdf
|
||||
lv2
|
||||
pango
|
||||
pangomm
|
||||
perl
|
||||
python3
|
||||
qm-dsp
|
||||
readline
|
||||
rubberband
|
||||
serd
|
||||
sord
|
||||
soundtouch
|
||||
sratom
|
||||
suil
|
||||
taglib
|
||||
vamp-plugin-sdk
|
||||
libxinerama
|
||||
libxrandr
|
||||
]
|
||||
++ lib.optionals videoSupport [
|
||||
harvid
|
||||
xjadeo
|
||||
];
|
||||
|
||||
wafConfigureFlags = [
|
||||
"--cxx17"
|
||||
"--docs"
|
||||
"--freedesktop"
|
||||
"--no-phone-home"
|
||||
"--ptformat"
|
||||
"--run-tests"
|
||||
"--test"
|
||||
# since we don't have https://github.com/agfline/LibAAF yet,
|
||||
# we need to use some of ardours internal libs, see:
|
||||
# https://discourse.ardour.org/t/ardour-8-2-released/109615/6
|
||||
# and
|
||||
# https://discourse.ardour.org/t/ardour-8-2-released/109615/8
|
||||
# "--use-external-libs"
|
||||
]
|
||||
++ lib.optional optimize "--optimize";
|
||||
|
||||
postInstall = ''
|
||||
# wscript does not install these for some reason
|
||||
install -vDm 644 "build/gtk2_ardour/ardour.xml" \
|
||||
-t "$out/share/mime/packages"
|
||||
install -vDm 644 "build/gtk2_ardour/ardour${majorVersion}.desktop" \
|
||||
-t "$out/share/applications"
|
||||
for size in 16 22 32 48 256 512; do
|
||||
install -vDm 644 "gtk2_ardour/resources/Ardour-icon_''${size}px.png" \
|
||||
"$out/share/icons/hicolor/''${size}x''${size}/apps/ardour${majorVersion}.png"
|
||||
done
|
||||
install -vDm 644 "ardour.1"* -t "$out/share/man/man1"
|
||||
|
||||
# install additional bundled beats, chords and progressions
|
||||
cp -rp "${finalAttrs.bundledContent}"/* "$out/share/ardour${majorVersion}/media"
|
||||
''
|
||||
+ lib.optionalString videoSupport ''
|
||||
# `harvid` and `xjadeo` must be accessible in `PATH` for video to work.
|
||||
wrapProgram "$out/bin/ardour${majorVersion}" \
|
||||
--prefix PATH : "${
|
||||
lib.makeBinPath [
|
||||
harvid
|
||||
xjadeo
|
||||
]
|
||||
}"
|
||||
'';
|
||||
|
||||
LINKFLAGS = "-lpthread";
|
||||
|
||||
meta = {
|
||||
description = "Multi-track hard disk recording software";
|
||||
longDescription = ''
|
||||
Ardour is a digital audio workstation (DAW), You can use it to
|
||||
record, edit and mix multi-track audio and midi. Produce your
|
||||
own CDs. Mix video soundtracks. Experiment with new ideas about
|
||||
music and sound.
|
||||
|
||||
Please consider supporting the ardour project financially:
|
||||
https://community.ardour.org/donate
|
||||
'';
|
||||
homepage = "https://ardour.org/";
|
||||
license = lib.licenses.gpl2Plus;
|
||||
mainProgram = "ardour8";
|
||||
platforms = lib.platforms.linux;
|
||||
maintainers = with lib.maintainers; [
|
||||
magnetophon
|
||||
mitchmindtree
|
||||
ryand56
|
||||
];
|
||||
};
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,229 @@
|
||||
--[[
|
||||
The game Balatro is implemented in Lua, with the standard LÖVE SDK. However,
|
||||
each store that it's sold on (Steam, Google Play, Xbox PC, etc.) has its own SDK
|
||||
to provide features like cloud saving and achievement unlocking.
|
||||
|
||||
To allow the same platform-agnostic Lua codebase to be deployed in all these
|
||||
contexts, each one has a custom bridge - `love.platform`. This allows the game
|
||||
to call `writeSaveFile` and trust that it will be handled appropriately for
|
||||
whatever platform the player has available. Unfortunately, that bridge is not
|
||||
supplied by LÖVE, and is therefore missing from Nix's `pkgs.love`.
|
||||
|
||||
This file implements the functions that would otherwise utilize that missing
|
||||
bridge. It was created by finding all of the `love.platform` callsites in the
|
||||
Balatro codebase, putting them in this file, and asking Gemini to implement a
|
||||
Linux version.
|
||||
]]
|
||||
|
||||
love.platform = love.platform or {}
|
||||
package.loaded["love.platform"] = love.platform
|
||||
|
||||
local FileOperationStatus = {
|
||||
SUCCESS = 0,
|
||||
FETCH_ERROR = 1,
|
||||
CLOUD_SAVE_ERROR = 2,
|
||||
CONFLICT = 3,
|
||||
OFFLINE = 4,
|
||||
LOAD_ERROR = 5,
|
||||
NOT_FOUND = 6
|
||||
}
|
||||
|
||||
function love.platform.init(onInitSuccess, onInitFailure)
|
||||
love.filesystem.setIdentity("balatro")
|
||||
|
||||
if onInitSuccess then
|
||||
onInitSuccess(love.system.getOS(), love.platform.getLocalPlayerName())
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function love.platform.setOnPlatformStatusChangedCallback(callback)
|
||||
if callback then
|
||||
callback(false, "Cloud unavailable.")
|
||||
end
|
||||
end
|
||||
|
||||
function love.platform.earlyInit() end
|
||||
function love.platform.update(dt) end
|
||||
function love.platform.shutdown() end
|
||||
|
||||
|
||||
function love.platform.getPlatformId()
|
||||
return love.system.getOS()
|
||||
end
|
||||
|
||||
function love.platform.getLocalPlayerName()
|
||||
return os.getenv("USER") or os.getenv("LOGNAME") or "Player"
|
||||
end
|
||||
|
||||
function love.platform.getLocalPlayerAvatar()
|
||||
return nil
|
||||
end
|
||||
|
||||
function love.platform.isPremium()
|
||||
return true
|
||||
end
|
||||
|
||||
function love.platform.isArcade()
|
||||
return false
|
||||
end
|
||||
|
||||
function love.platform.isFirstTimePlaying()
|
||||
return not love.platform.saveGameExists("1", "profile.jkr")
|
||||
end
|
||||
|
||||
function love.platform.isOffline()
|
||||
-- If the game ever uses this for more than showing the offline warning, we
|
||||
-- should set this back to true
|
||||
return false
|
||||
end
|
||||
|
||||
function love.platform.getNotchPosition()
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
-- Different builds use different file APIs; therefore, we implement both the
|
||||
-- thin wrapper around the framework's filesystem module and the more complex
|
||||
-- signatures with individual save slots.
|
||||
love.platform.localGetInfo = love.filesystem.getInfo
|
||||
love.platform.localRead = love.filesystem.read
|
||||
love.platform.localWrite = love.filesystem.write
|
||||
love.platform.localRemove = love.filesystem.remove
|
||||
love.platform.localCreateDirectory = love.filesystem.createDirectory
|
||||
|
||||
|
||||
-- some versions store their settings files in `common/`
|
||||
function love.filesystem.getInfo(filename, ...)
|
||||
local info = love.platform.localGetInfo(filename, ...)
|
||||
|
||||
if not info then
|
||||
info = love.platform.localGetInfo("common/" .. filename, ...)
|
||||
end
|
||||
|
||||
return info
|
||||
end
|
||||
|
||||
function love.filesystem.read(filename, ...)
|
||||
local content, size = love.platform.localRead(filename, ...)
|
||||
|
||||
if not content then
|
||||
content, size = love.platform.localRead("common/" .. filename, ...)
|
||||
end
|
||||
|
||||
return content, size
|
||||
end
|
||||
|
||||
|
||||
function love.platform.writeSaveGame(profile, filename, data)
|
||||
local parent = tostring(profile)
|
||||
|
||||
if not love.platform.localGetInfo(parent) then
|
||||
love.platform.localCreateDirectory(parent)
|
||||
end
|
||||
|
||||
return love.platform.localWrite(parent .. "/" .. filename, data)
|
||||
end
|
||||
|
||||
function love.platform.loadSaveGame(profile, filename)
|
||||
local parent = tostring(profile)
|
||||
return love.platform.localRead(parent .. "/" .. filename)
|
||||
end
|
||||
|
||||
function love.platform.saveGameExists(profile, filename)
|
||||
local parent = tostring(profile)
|
||||
return love.platform.localGetInfo(parent .. "/" .. filename) ~= nil
|
||||
end
|
||||
|
||||
function love.platform.deleteSaveGameFile(profile, filename)
|
||||
local parent = tostring(profile)
|
||||
return love.platform.localRemove(parent .. "/" .. filename)
|
||||
end
|
||||
|
||||
function love.platform.deleteSaveGame(profile)
|
||||
local parent = tostring(profile)
|
||||
return love.platform.localRemove(parent)
|
||||
end
|
||||
|
||||
local load_game_callback
|
||||
local save_game_callback
|
||||
|
||||
function love.platform.setLoadGameCallback(callback)
|
||||
load_game_callback = callback
|
||||
end
|
||||
|
||||
function love.platform.loadGameFile(filename)
|
||||
local content, size = love.filesystem.read(filename)
|
||||
|
||||
if load_game_callback then
|
||||
if content then
|
||||
load_game_callback(filename, FileOperationStatus.SUCCESS, "", content, nil, nil)
|
||||
else
|
||||
load_game_callback(filename, FileOperationStatus.NOT_FOUND, "File not found", nil, nil, nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function love.platform.setOnSaveInitializedCallback(callback)
|
||||
if callback then
|
||||
callback()
|
||||
end
|
||||
end
|
||||
|
||||
function love.platform.setSaveGameCallback(callback)
|
||||
save_game_callback = callback
|
||||
end
|
||||
|
||||
function love.platform.saveGameFile(filename, data)
|
||||
local success, msg = love.filesystem.write(filename, data)
|
||||
if save_game_callback then
|
||||
if success then
|
||||
save_game_callback(filename, FileOperationStatus.SUCCESS, "", data, nil, nil)
|
||||
else
|
||||
save_game_callback(filename, FileOperationStatus.CLOUD_SAVE_ERROR, msg, nil, nil, nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- no-ops when there's no cloud saving
|
||||
function love.platform.runLoadGameCallbacks() end
|
||||
function love.platform.runSaveGameCallbacks() end
|
||||
function love.platform.resolveConflict(file, content, conflictId) end
|
||||
|
||||
|
||||
function love.platform.unlockAchievement(achievementId)
|
||||
love.filesystem.append(
|
||||
"unlock_awards.lua",
|
||||
string.format("love.platform.unlockAchievement(%q)\n", achievementId)
|
||||
)
|
||||
end
|
||||
|
||||
function love.platform.unlockAward(awardName)
|
||||
love.filesystem.append(
|
||||
"unlock_awards.lua",
|
||||
string.format("love.platform.unlockAward(%q)\n", awardName)
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
function love.platform.event(name, ...) end
|
||||
function love.platform.hideSplashScreen() end
|
||||
function love.platform.anyButtonPressed() return false end
|
||||
|
||||
--[[ these are checked before they're used by the game, so we don't have to
|
||||
-- support them
|
||||
function love.platform.requestReview() end
|
||||
function love.platform.requestTrackingPermission() end
|
||||
function love.platform.setProfileButtonActive(active) end
|
||||
function love.platform.authenticateLocalPlayer() end
|
||||
]]
|
||||
|
||||
if love.graphics then
|
||||
if love.graphics.isActive and not love.graphics.checkActive then
|
||||
love.graphics.checkActive = love.graphics.isActive
|
||||
end
|
||||
|
||||
love.graphics.beginFrame = love.graphics.beginFrame or function() end
|
||||
end
|
||||
@@ -1,15 +0,0 @@
|
||||
--- result/share/balatro/globals.lua 1970-01-01 01:00:01.000000000 +0100
|
||||
+++ result/share/balatro/globals.lua 1970-01-01 01:00:01.000000000 +0100
|
||||
@@ -56,6 +56,12 @@ function Game:set_globals()
|
||||
self.F_CRASH_REPORTS = false
|
||||
end
|
||||
|
||||
+ if love.system.getOS() == 'Linux' then
|
||||
+ self.F_SAVE_TIMER = 5
|
||||
+ self.F_DISCORD = true
|
||||
+ self.F_ENGLISH_ONLY = false
|
||||
+ end
|
||||
+
|
||||
if love.system.getOS() == 'Nintendo Switch' then
|
||||
self.F_HIDE_BETA_LANGS = true
|
||||
self.F_BASIC_CREDITS = true
|
||||
@@ -4,24 +4,62 @@
|
||||
lib,
|
||||
love,
|
||||
lovely-injector,
|
||||
curl,
|
||||
p7zip,
|
||||
copyDesktopItems,
|
||||
makeWrapper,
|
||||
makeDesktopItem,
|
||||
requireFile,
|
||||
src ? null,
|
||||
withMods ? true,
|
||||
withBridgePatch ? true,
|
||||
withLinuxPatch ? true,
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "balatro";
|
||||
version = "1.0.1o";
|
||||
|
||||
src = requireFile {
|
||||
name = "Balatro-${finalAttrs.version}.exe";
|
||||
url = "https://store.steampowered.com/app/2379780/Balatro/";
|
||||
# Use `nix --extra-experimental-features nix-command hash file --sri --type sha256` to get the correct hash
|
||||
hash = "sha256-DXX+FkrM8zEnNNSzesmHiN0V8Ljk+buLf5DE5Z3pP0c=";
|
||||
};
|
||||
src =
|
||||
if src != null then
|
||||
src
|
||||
else
|
||||
requireFile {
|
||||
name = "Balatro-${finalAttrs.version}.exe";
|
||||
url = "https://store.steampowered.com/app/2379780/Balatro/";
|
||||
message = ''
|
||||
You must own Balatro in order to install it with Nix. The Steam,
|
||||
Google Play, and Xbox PC versions are supported.
|
||||
|
||||
- If you have the Steam version, you can use Balatro.exe. Find it in
|
||||
|
||||
~/.local/share/Steam/steamapps/common/Balatro/
|
||||
|
||||
and run
|
||||
|
||||
nix-store --add-fixed sha256 Balatro.exe
|
||||
|
||||
- If you have the Google Play version, you'll need to pull base.apk from
|
||||
your device:
|
||||
|
||||
adb shell pm path com.playstack.balatro.android
|
||||
adb pull ( path from above )/base.apk ~/Downloads/com.playstack.balatro.android.apk
|
||||
|
||||
and add it to /nix/store:
|
||||
|
||||
nix-prefetch-url file:///home/deck/Downloads/com.playstack.balatro.android.apk
|
||||
|
||||
- If you have the Xbox PC version, you can do the same with Assets.zip.
|
||||
|
||||
If you've used nix-prefetch-url to add it to your store, you'll need to
|
||||
pass the resulting path to override:
|
||||
|
||||
balatro.override {
|
||||
src = /nix/store/g44bp7ymc7qlkfv5f03b55cgs1wdmkzl-com.playstack.balatro.android.apk;
|
||||
}
|
||||
'';
|
||||
# Use `nix --extra-experimental-features nix-command hash file --sri --type sha256` to get the correct hash
|
||||
hash = "sha256-DXX+FkrM8zEnNNSzesmHiN0V8Ljk+buLf5DE5Z3pP0c=";
|
||||
};
|
||||
|
||||
srcIcon = fetchurl {
|
||||
name = "balatro.png";
|
||||
@@ -34,8 +72,17 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
copyDesktopItems
|
||||
makeWrapper
|
||||
];
|
||||
buildInputs = [ love ] ++ lib.optional withMods lovely-injector;
|
||||
|
||||
buildInputs = [
|
||||
love
|
||||
]
|
||||
++ lib.optionals withMods [
|
||||
lovely-injector
|
||||
curl
|
||||
];
|
||||
|
||||
dontUnpack = true;
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = "balatro";
|
||||
@@ -46,27 +93,60 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
icon = "balatro";
|
||||
})
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
tmpdir=$(mktemp -d)
|
||||
7z x ${finalAttrs.src} -o$tmpdir -y
|
||||
${if withLinuxPatch then "patch $tmpdir/globals.lua -i ${./globals.patch}" else ""}
|
||||
patchedExe=$(mktemp -u).zip
|
||||
7z a $patchedExe $tmpdir/*
|
||||
|
||||
${lib.optionalString withBridgePatch ''
|
||||
cp ${./bridge_detour.lua} $tmpdir/bridge_detour.lua
|
||||
|
||||
for file in main.lua engine/load_manager.lua engine/save_manager.lua; do
|
||||
if [ -f "$tmpdir/$file" ]; then
|
||||
sed -i '1i require("bridge_detour")' "$tmpdir/$file"
|
||||
fi
|
||||
done
|
||||
''}
|
||||
|
||||
${
|
||||
let
|
||||
patchMarker = "if love.system.getOS() == 'Nintendo Switch' then";
|
||||
in
|
||||
lib.optionalString withLinuxPatch ''
|
||||
substituteInPlace "$tmpdir/globals.lua" --replace-fail \
|
||||
"${patchMarker}" \
|
||||
"if love.system.getOS() == 'Linux' then
|
||||
self.F_SAVE_TIMER = 5
|
||||
self.F_DISCORD = true
|
||||
self.F_ENGLISH_ONLY = false
|
||||
end
|
||||
|
||||
${patchMarker}"
|
||||
''
|
||||
}
|
||||
|
||||
loveFile=game.love
|
||||
7z a -tzip $loveFile $tmpdir/*
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
# The `cat` bit is a hack suggested by whitelje (https://github.com/ethangreen-dev/lovely-injector/pull/66#issuecomment-2319615509)
|
||||
# to make it so that lovely will pick up Balatro as the game name. The `LD_PRELOAD` bit is used to load lovely and it is the
|
||||
# 'official' way of doing it.
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 $srcIcon $out/share/icons/hicolor/scalable/apps/balatro.png
|
||||
|
||||
cat ${lib.getExe love} $patchedExe > $out/share/Balatro
|
||||
# Packaging the love file into the executable ensures lovely finds the game's name
|
||||
# https://github.com/ethangreen-dev/lovely-injector/pull/66#issuecomment-2319615509
|
||||
cat ${lib.getExe love} $loveFile > $out/share/Balatro
|
||||
chmod +x $out/share/Balatro
|
||||
|
||||
makeWrapper $out/share/Balatro $out/bin/balatro ${lib.optionalString withMods "--prefix LD_PRELOAD : '${lovely-injector}/lib/liblovely.so'"}
|
||||
makeWrapper $out/share/Balatro $out/bin/balatro ${lib.optionalString withMods ''
|
||||
--prefix LD_PRELOAD : '${lovely-injector}/lib/liblovely.so' \
|
||||
--prefix LD_LIBRARY_PATH : '${lib.makeLibraryPath [ curl ]}''}
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "cargo-expand";
|
||||
version = "1.0.119";
|
||||
version = "1.0.120";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "dtolnay";
|
||||
repo = "cargo-expand";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-N48BUPnVnMJSiM3EzpSiDNLGZNWFW05toHRhokNO5gI=";
|
||||
hash = "sha256-KXnAKv8202Trkkr9D9HRmxTOZ67M2Jt4dhZ9o7D86uI=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-a8swmPQ+JuE/tqRYbV+kekZV8TloxszYq9k8VOGRBrM=";
|
||||
cargoHash = "sha256-eCDjGKLPy98SuknzzIE2GZEsxFjNZKuV30Y5nBQao3s=";
|
||||
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
doInstallCheck = true;
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
bundlerEnv {
|
||||
pname = "cfn-nag";
|
||||
version = "0.8.10";
|
||||
|
||||
inherit ruby;
|
||||
gemdir = ./.;
|
||||
|
||||
@@ -36,7 +36,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
./dont-clone-git-repo.patch
|
||||
];
|
||||
|
||||
sourceRoot = finalAttrs.src.name;
|
||||
sourceRoot = "source";
|
||||
|
||||
buildFlags = [ "install-git" ];
|
||||
GIT_REPO_PATH = finalAttrs.src;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
}:
|
||||
|
||||
let
|
||||
version = "18.8.3";
|
||||
version = "18.8.4";
|
||||
package_version = "v${lib.versions.major version}";
|
||||
gitaly_package = "gitlab.com/gitlab-org/gitaly/${package_version}";
|
||||
|
||||
@@ -21,7 +21,7 @@ let
|
||||
owner = "gitlab-org";
|
||||
repo = "gitaly";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-ALUOgSPl+tNh/hmnYq2Mfw7R0ECQ/ohUZZNnBeItQds=";
|
||||
hash = "sha256-/zl25h2kYP4nUOJoNkOs3Tp1QsY5YcOutykchPEVa1I=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-CSjsxwumKUbp/tSewE8iAp4c3DH6V6fNY4OCgzjvHP0=";
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "gitlab-pages";
|
||||
version = "18.8.3";
|
||||
version = "18.8.4";
|
||||
|
||||
# nixpkgs-update: no auto update
|
||||
src = fetchFromGitLab {
|
||||
owner = "gitlab-org";
|
||||
repo = "gitlab-pages";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-OmIhZwNmuOGYpBe32EYXVw4nX7XArkxdj3uoP9qurN4=";
|
||||
hash = "sha256-cGl/Huhy9RJxP786MVlzbMNjgBfEQzZTdHt+KRElXoA=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-AZIv/CU01OAbn5faE4EkSuDCakYzDjRprB5ox5tIlck=";
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
{
|
||||
"version": "18.8.3",
|
||||
"repo_hash": "sha256-c9e6HhJ1ERXSMHYW+MHTVzxpqtUIfVHrlIUlCJ+zX0A=",
|
||||
"version": "18.8.4",
|
||||
"repo_hash": "sha256-gX5Cy3CxNqLj4HFgqGmFKLrvAhdcgag+XcQMEB9UNZ4=",
|
||||
"yarn_hash": "sha256-s4+NpzynaR5ab1DlXRMmtOeFZCwpexMoWjwX00hnx5o=",
|
||||
"frontend_islands_yarn_hash": "sha256-DiGj3eJMLnlWBTePwGmEvmY9d1Li3p/Y6h3GtZnsvhg=",
|
||||
"owner": "gitlab-org",
|
||||
"repo": "gitlab",
|
||||
"rev": "v18.8.3-ee",
|
||||
"rev": "v18.8.4-ee",
|
||||
"passthru": {
|
||||
"GITALY_SERVER_VERSION": "18.8.3",
|
||||
"GITLAB_KAS_VERSION": "18.8.3",
|
||||
"GITLAB_PAGES_VERSION": "18.8.3",
|
||||
"GITALY_SERVER_VERSION": "18.8.4",
|
||||
"GITLAB_KAS_VERSION": "18.8.4",
|
||||
"GITLAB_PAGES_VERSION": "18.8.4",
|
||||
"GITLAB_SHELL_VERSION": "14.45.5",
|
||||
"GITLAB_ELASTICSEARCH_INDEXER_VERSION": "5.12.2",
|
||||
"GITLAB_WORKHORSE_VERSION": "18.8.3"
|
||||
"GITLAB_WORKHORSE_VERSION": "18.8.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ in
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "gitlab-workhorse";
|
||||
|
||||
version = "18.8.3";
|
||||
version = "18.8.4";
|
||||
|
||||
# nixpkgs-update: no auto update
|
||||
src = fetchFromGitLab {
|
||||
|
||||
@@ -747,7 +747,7 @@ gem 'paper_trail', '~> 16.0', feature_category: :workspaces
|
||||
|
||||
gem "i18n_data", "~> 0.13.1", feature_category: :system_access
|
||||
|
||||
gem "gitlab-cloud-connector", "~> 1.40", require: 'gitlab/cloud_connector', feature_category: :plan_provisioning
|
||||
gem "gitlab-cloud-connector", "~> 1.43", require: 'gitlab/cloud_connector', feature_category: :plan_provisioning
|
||||
|
||||
gem "gvltools", "~> 0.4.0", feature_category: :shared # rubocop:todo Gemfile/MissingFeatureCategory -- https://gitlab.com/gitlab-org/gitlab/-/issues/581839
|
||||
|
||||
|
||||
@@ -743,7 +743,7 @@ GEM
|
||||
terminal-table (>= 1.5.1)
|
||||
gitlab-chronic (0.10.6)
|
||||
numerizer (~> 0.2)
|
||||
gitlab-cloud-connector (1.40.0)
|
||||
gitlab-cloud-connector (1.43.0)
|
||||
activesupport (>= 7.0)
|
||||
jwt (~> 2.9)
|
||||
gitlab-crystalball (1.1.1)
|
||||
@@ -2191,7 +2191,7 @@ DEPENDENCIES
|
||||
gitlab-active-context!
|
||||
gitlab-backup-cli!
|
||||
gitlab-chronic (~> 0.10.5)
|
||||
gitlab-cloud-connector (~> 1.40)
|
||||
gitlab-cloud-connector (~> 1.43)
|
||||
gitlab-crystalball (~> 1.1.0)
|
||||
gitlab-dangerfiles (~> 4.10.0)
|
||||
gitlab-duo-workflow-service-client (~> 0.6)!
|
||||
|
||||
@@ -2886,10 +2886,10 @@ src: {
|
||||
platforms = [ ];
|
||||
source = {
|
||||
remotes = [ "https://rubygems.org" ];
|
||||
sha256 = "0wkffbl793jvkjw3qdfqfb1j4adsvyakdv7sc0g3cdp2q6lrrmah";
|
||||
sha256 = "1cjn1vqnvr3lhbdqfpy88aq7qmvd1j7i08gd8cly91914cd22pi9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.40.0";
|
||||
version = "1.43.0";
|
||||
};
|
||||
gitlab-crystalball = {
|
||||
dependencies = [
|
||||
|
||||
@@ -5,22 +5,30 @@
|
||||
makeWrapper,
|
||||
ffmpeg,
|
||||
vlc,
|
||||
vlc' ? vlc.overrideAttrs (old: {
|
||||
buildInputs = old.buildInputs ++ [ x264 ];
|
||||
}),
|
||||
jq,
|
||||
x264,
|
||||
nixosTests,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "gopro-tool";
|
||||
version = "0-unstable-2024-04-18";
|
||||
version = "1.18";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "juchem";
|
||||
repo = "gopro-tool";
|
||||
rev = "a678f0ea65e24dca9b8d848b245bd2d487d3c8ca";
|
||||
sha256 = "0sh3s38m17pci24x4kdlmlhn0gwgm28aaa6p7qs16wysk0q0h6wz";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-nxsIMJjacxM0PtcopZCojz9gIa20TdKJiOyeUNHQA2o=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
strictDeps = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp $src/gopro-tool $out/bin/gopro-tool
|
||||
@@ -30,16 +38,20 @@ stdenv.mkDerivation {
|
||||
--prefix PATH : ${
|
||||
lib.makeBinPath [
|
||||
ffmpeg
|
||||
vlc
|
||||
vlc'
|
||||
jq
|
||||
]
|
||||
}
|
||||
'';
|
||||
|
||||
passthru.tests = {
|
||||
inherit (nixosTests) gopro-tool;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Tool to control GoPro webcam mode in Linux (requires v4l2loopback kernel module and a firewall rule)";
|
||||
license = lib.licenses.bsd3;
|
||||
maintainers = with lib.maintainers; [ ZMon3y ];
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
diff --git a/yarn.lock b/yarn.lock
|
||||
index 227d51e2..11c80f04 100644
|
||||
--- a/yarn.lock
|
||||
+++ b/yarn.lock
|
||||
@@ -1397,10 +1397,10 @@ safe-json-parse@~1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
||||
-sass@^1.89.2:
|
||||
- version "1.97.2"
|
||||
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.2.tgz#e515a319092fd2c3b015228e3094b40198bff0da"
|
||||
- integrity sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==
|
||||
+sass@^1.97:
|
||||
+ version "1.97.3"
|
||||
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.3.tgz#9cb59339514fa7e2aec592b9700953ac6e331ab2"
|
||||
+ integrity sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==
|
||||
dependencies:
|
||||
chokidar "^4.0.0"
|
||||
immutable "^5.0.2"
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
nixosTests,
|
||||
fetchYarnDeps,
|
||||
applyPatches,
|
||||
php,
|
||||
yarnConfigHook,
|
||||
yarnBuildHook,
|
||||
yarnInstallHook,
|
||||
grunt-cli,
|
||||
fetchzip,
|
||||
}:
|
||||
let
|
||||
version = "1.7.0";
|
||||
# Fetch release tarball which contains language files
|
||||
# https://github.com/InvoicePlane/InvoicePlane/issues/1170
|
||||
languages = fetchzip {
|
||||
#url = "https://github.com/InvoicePlane/InvoicePlane/releases/download/v${version}/v${version}.zip";
|
||||
url = "https://github.com/InvoicePlane/InvoicePlane/releases/download/v1.7.0/v1.7.0.zip";
|
||||
hash = "sha256-D5wZg745xjbBsEPUbvle8ynErFB4xn9zdxOGh0xKCCU=";
|
||||
};
|
||||
in
|
||||
php.buildComposerProject2 (finalAttrs: {
|
||||
pname = "invoiceplane";
|
||||
inherit version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "InvoicePlane";
|
||||
repo = "InvoicePlane";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-6fuUmXe8mFSnLYwQCwBzxmSQxM06rQXe00IKUZvWnpM=";
|
||||
};
|
||||
|
||||
# Fixes error: Couldn't find any versions for "sass" that matches "^1.97" in our cache
|
||||
patches = [ ./fix-yarn-lockfile.patch ];
|
||||
|
||||
# Composer.lock validation currently fails for unknown reason
|
||||
composerStrictValidation = false;
|
||||
|
||||
vendorHash = "sha256-/fNVq3WJCr9f/NE0s1x8N48W3ZMRUxdh1Qf3pLl0Lpg=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
yarnConfigHook
|
||||
yarnBuildHook
|
||||
yarnInstallHook
|
||||
# Needed for executing package.json scripts
|
||||
grunt-cli
|
||||
];
|
||||
|
||||
offlineCache = fetchYarnDeps {
|
||||
inherit (finalAttrs) src patches;
|
||||
hash = "sha256-YDknkQzdRKRRMXS6/cPRSrfhhIyTIDRnFPNGQueu74A=";
|
||||
};
|
||||
|
||||
postBuild = ''
|
||||
grunt build
|
||||
'';
|
||||
|
||||
# Cleanup and language files
|
||||
postInstall = ''
|
||||
chmod -R u+w $out/share
|
||||
mv $out/share/php/invoiceplane/* $out/
|
||||
cp -r ${languages}/application/language $out/application/
|
||||
rm -r $out/{composer.json,composer.lock,CONTRIBUTING.md,docker-compose.yml,Gruntfile.js,package.json,node_modules,yarn.lock,share}
|
||||
'';
|
||||
|
||||
passthru.tests = {
|
||||
inherit (nixosTests) invoiceplane;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Self-hosted open source application for managing your invoices, clients and payments";
|
||||
changelog = "https://github.com/InvoicePlane/InvoicePlane/releases/tag/v${version}";
|
||||
homepage = "https://www.invoiceplane.com";
|
||||
license = lib.licenses.mit;
|
||||
platforms = lib.platforms.all;
|
||||
maintainers = with lib.maintainers; [ onny ];
|
||||
};
|
||||
})
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "kanboard";
|
||||
version = "1.2.49";
|
||||
version = "1.2.50";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kanboard";
|
||||
repo = "kanboard";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-d74XjURu7vJwn+6p/br76jp4zJiYhYJLSjvxLamt48Q=";
|
||||
hash = "sha256-/nC+V8KfVdEFEBozFFsyinUfXzZbu7h8/ROpjJoDchI=";
|
||||
};
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
@@ -47,14 +47,14 @@ in
|
||||
# as bootloader for various platforms and corresponding binary and helper files.
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "limine";
|
||||
version = "10.6.6";
|
||||
version = "10.7.0";
|
||||
|
||||
# We don't use the Git source but the release tarball, as the source has a
|
||||
# `./bootstrap` script performing network access to download resources.
|
||||
# Packaging that in Nix is very cumbersome.
|
||||
src = fetchurl {
|
||||
url = "https://codeberg.org/Limine/Limine/releases/download/v${finalAttrs.version}/limine-${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-xU0uygvqeWfsy5FsYQQAEwc0H15j8amW0097Fojw1DM=";
|
||||
hash = "sha256-1gwgzyISeOj4QE8hZ/KDCVW8qCQYvpQE6lf/N1jt0J4=";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "mediainfo";
|
||||
version = "25.10";
|
||||
version = "26.01";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://mediaarea.net/download/source/mediainfo/${finalAttrs.version}/mediainfo_${finalAttrs.version}.tar.xz";
|
||||
hash = "sha256-NmsyUQGrGppO55+9uOPdnni8wKIcD5sZZjE6rtPTNQI=";
|
||||
hash = "sha256-FQZWytiO9O+k6Cmc/CTZt6cjVFdqaTSZIFiKzuLMPHY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
let
|
||||
soext = stdenv.hostPlatform.extensions.sharedLibrary;
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "mimalloc";
|
||||
version = "3.1.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "microsoft";
|
||||
repo = "mimalloc";
|
||||
rev = "v${version}";
|
||||
tag = "v${finalAttrs.version}";
|
||||
sha256 = "sha256-fk6nfyBFS1G0sJwUJVgTC1+aKd0We/JjsIYTO+IOfyg=";
|
||||
};
|
||||
|
||||
@@ -34,16 +34,29 @@ stdenv.mkDerivation rec {
|
||||
cmake
|
||||
ninja
|
||||
];
|
||||
cmakeFlags = [
|
||||
"-DMI_INSTALL_TOPLEVEL=ON"
|
||||
]
|
||||
++ lib.optionals secureBuild [ "-DMI_SECURE=ON" ]
|
||||
++ lib.optionals stdenv.hostPlatform.isStatic [ "-DMI_BUILD_SHARED=OFF" ]
|
||||
++ lib.optionals (!doCheck) [ "-DMI_BUILD_TESTS=OFF" ];
|
||||
cmakeFlags = lib.mapAttrsToList lib.cmakeBool {
|
||||
MI_INSTALL_TOPLEVEL = true;
|
||||
MI_SECURE = secureBuild;
|
||||
MI_BUILD_SHARED = stdenv.hostPlatform.hasSharedLibraries;
|
||||
MI_LIBC_MUSL = stdenv.hostPlatform.libc == "musl";
|
||||
MI_BUILD_TESTS = finalAttrs.doCheck;
|
||||
|
||||
# MI_OPT_ARCH is inaccurate (e.g. it assumes aarch64 == armv8.1-a).
|
||||
# Nixpkgs's native platform configuration does a better job.
|
||||
MI_NO_OPT_ARCH = true;
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace cmake/mimalloc-config.cmake \
|
||||
--replace-fail 'string(REPLACE "/lib/cmake" "/lib" MIMALLOC_LIBRARY_DIR "''${MIMALLOC_CMAKE_DIR}")' \
|
||||
"set(MIMALLOC_LIBRARY_DIR \"$out/lib\")" \
|
||||
--replace-fail 'string(REPLACE "/lib/cmake/" "/lib/" MIMALLOC_OBJECT_DIR "''${CMAKE_CURRENT_LIST_DIR}")' \
|
||||
"set(MIMALLOC_OBJECT_DIR \"$out/lib\")"
|
||||
'';
|
||||
|
||||
postInstall =
|
||||
let
|
||||
rel = lib.versions.majorMinor version;
|
||||
rel = lib.versions.majorMinor finalAttrs.version;
|
||||
suffix = if stdenv.hostPlatform.isLinux then "${soext}.${rel}" else ".${rel}${soext}";
|
||||
in
|
||||
''
|
||||
@@ -76,4 +89,4 @@ stdenv.mkDerivation rec {
|
||||
thoughtpolice
|
||||
];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "moonlight";
|
||||
version = "1.3.39";
|
||||
version = "2026.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "moonlight-mod";
|
||||
repo = "moonlight";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-85W5OrP9Ju4ZJRUEZLpBreKxgUrHgxxZEv7KzcpqNDo=";
|
||||
hash = "sha256-BpTN9AdQEDD2XnEUsUxgkoq+EPGhtnYgJhLKF4GVZoc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -32,7 +32,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
pnpmDeps = fetchPnpmDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
fetcherVersion = 3;
|
||||
hash = "sha256-+wGup5wJIqTzkr4mTo/CxofffQmUz3JD2s/s/oY0viM=";
|
||||
hash = "sha256-b3d8VcfQjCkcJThebXJ2yvKZfU8u4QnpZgNyqP6XIu0=";
|
||||
};
|
||||
|
||||
env = {
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "ndcurves";
|
||||
version = "2.1.0";
|
||||
version = "2.1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "loco-3d";
|
||||
repo = "ndcurves";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-VHxGm6fzoS51PtTj/qeZumz58ZHtxy28ihbzbnoHvHg=";
|
||||
hash = "sha256-YnpC2yYEe9VNcHHDyv+glLrue/J/HXbK/VP7DTAE/q0=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
nixos,
|
||||
lib,
|
||||
runCommand,
|
||||
}:
|
||||
let
|
||||
base = nixos {
|
||||
services.userborn.enable = true;
|
||||
programs.nix-required-mounts = {
|
||||
enable = true;
|
||||
presets.nvidia-gpu.enable = true;
|
||||
};
|
||||
fileSystems."/".device = "/dev/null";
|
||||
boot.loader.grub.enable = false;
|
||||
system.stateVersion = lib.trivial.release;
|
||||
};
|
||||
machine = base.extendModules {
|
||||
modules = [ { hardware.graphics.enable = true; } ];
|
||||
};
|
||||
in
|
||||
runCommand "nix-required-mounts-eval-nvidia-gpu-preset" { } ''
|
||||
echo "Successfully evaluated ${base.config.system.build.toplevel}"
|
||||
echo "Successfully evaluated ${machine.config.system.build.toplevel}"
|
||||
echo "This means that combining nix-required-mounts with userborn no longer causes infinite recursion (#488199)"
|
||||
touch $out
|
||||
''
|
||||
@@ -55,6 +55,7 @@ python3Packages.buildPythonApplication {
|
||||
inherit allowedPatterns;
|
||||
tests = {
|
||||
inherit (nixosTests) nix-required-mounts;
|
||||
eval-nvidia-gpu-preset = callPackage ./eval-test.nix { };
|
||||
};
|
||||
};
|
||||
meta = {
|
||||
|
||||
@@ -95,7 +95,7 @@ treefmtWithConfig.overrideAttrs {
|
||||
You can achieve similar results by manually configuring `treefmt`:
|
||||
```nix
|
||||
pkgs.treefmt.withConfig {
|
||||
runtimeInputs = [ pkgs.nixfmt-rfc-style ];
|
||||
runtimeInputs = [ pkgs.nixfmt ];
|
||||
|
||||
settings = {
|
||||
# Log level for files treefmt won't format
|
||||
|
||||
@@ -176,18 +176,19 @@ buildGoModule (finalAttrs: {
|
||||
name = "podman-helper-binary-wrapper";
|
||||
|
||||
# this only works for some binaries, others may need to be added to `binPath` or in the modules
|
||||
paths = [
|
||||
gvproxy
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isLinux [
|
||||
aardvark-dns
|
||||
catatonit # added here for the pause image and also set in `containersConf` for `init_path`
|
||||
netavark
|
||||
passt
|
||||
conmon
|
||||
crun
|
||||
]
|
||||
++ extraRuntimes;
|
||||
paths =
|
||||
lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
gvproxy
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isLinux [
|
||||
aardvark-dns
|
||||
catatonit # added here for the pause image and also set in `containersConf` for `init_path`
|
||||
netavark
|
||||
passt
|
||||
conmon
|
||||
crun
|
||||
]
|
||||
++ extraRuntimes;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "secretspec";
|
||||
version = "0.6.2";
|
||||
version = "0.7.0";
|
||||
|
||||
src = fetchCrate {
|
||||
inherit (finalAttrs) pname version;
|
||||
hash = "sha256-ZbyeYol8TaQz4ljTHTIHIlQwxmi/fr/ReILIOtilfEY=";
|
||||
hash = "sha256-ik4ieQifB5MFvyr6cmcwvcyr3HyUB5aHpVIhnpVB1i8=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-UcSHFf9afU+2gl6K7XkYNEkJvslTkEO9u7qkNOKSNxg=";
|
||||
cargoHash = "sha256-3xaJySTsGPjU8sDL7j0biEdpcrNuOspdf41iHH6BE4o=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ dbus ];
|
||||
|
||||
@@ -11,19 +11,19 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "vue-language-server";
|
||||
version = "3.2.2";
|
||||
version = "3.2.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "vuejs";
|
||||
repo = "language-tools";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-oVIWRCnJkJK1CsgNp7l95uuILeXv2XuwwfGElGnOEyU=";
|
||||
hash = "sha256-GxIIqRK8wBVlo8jvCox6Fdp705EMg1YoHB46bvs5kkE=";
|
||||
};
|
||||
|
||||
pnpmDeps = fetchPnpmDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
fetcherVersion = 1;
|
||||
hash = "sha256-lxRify3uJnqYH6btmXU9yaO8LJDGBZcyONLUHv2rLqg=";
|
||||
hash = "sha256-QLey523pqhjOBn4xhN9mZTKRAC96imVka+li7C4BXQY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "wit-bindgen";
|
||||
version = "0.52.0";
|
||||
version = "0.53.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bytecodealliance";
|
||||
repo = "wit-bindgen";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-S3iOmkAg1H6sEcXhC/7cQcrwH5OwR5ZROn0iPkUrwEY=";
|
||||
hash = "sha256-TTSc4T8QR7cmAPAFzoV/9oBfKrUzVs20qMP3rwjELr4=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-RqDlBpwCxwwoG+u7zUz8j4t5JXonTe7mvAk8PxU7Gdc=";
|
||||
cargoHash = "sha256-SybsgrOlxh27CQ73IXVYlTROTRR0MU3O7Sieh5pYeHw=";
|
||||
|
||||
# Some tests fail because they need network access to install the `wasm32-unknown-unknown` target.
|
||||
# However, GitHub Actions ensures a proper build.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
python3Packages.buildPythonApplication (finalAttrs: {
|
||||
pname = "zensical";
|
||||
version = "0.0.21";
|
||||
version = "0.0.23";
|
||||
pyproject = true;
|
||||
|
||||
# We fetch from PyPi, because GitHub repo does not contain all sources.
|
||||
@@ -16,12 +16,12 @@ python3Packages.buildPythonApplication (finalAttrs: {
|
||||
# We could combine sources, but then nix-update won't work.
|
||||
src = fetchPypi {
|
||||
inherit (finalAttrs) pname version;
|
||||
hash = "sha256-wTVjg2+mOjyr7/2D/jp3DKdAz6Wue4XfhdiYN+MbO0o=";
|
||||
hash = "sha256-XE/DqvB135nYz0G58lZuTViBgNmolJMBTTYH3+UKxLw=";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||
inherit (finalAttrs) pname version src;
|
||||
hash = "sha256-zkF0Yf7EPFHmkWy3FEhTKYFlWW4pLFG1OZPi1z7vZXU=";
|
||||
hash = "sha256-cS8gxMPRpMMHwrjqXjyxBl4dbwll01Y+G4eOBZ3/vdM=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = with rustPlatform; [
|
||||
|
||||
@@ -50,19 +50,32 @@ let
|
||||
;
|
||||
|
||||
dart =
|
||||
(dart.overrideAttrs (_: {
|
||||
# This overrideAttrs is used to replace the version in src.url
|
||||
version = dartVersion;
|
||||
__intentionallyOverridingVersion = true;
|
||||
})).overrideAttrs
|
||||
(oldAttrs: {
|
||||
src = fetchzip {
|
||||
inherit (oldAttrs.src) url;
|
||||
hash =
|
||||
dartHash.${stdenv.hostPlatform.system}
|
||||
or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
||||
};
|
||||
});
|
||||
let
|
||||
hash =
|
||||
dartHash.${stdenv.hostPlatform.system}
|
||||
or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
||||
in
|
||||
(
|
||||
if lib.versionAtLeast version "3.41" then
|
||||
(dart.overrideAttrs (oldAttrs: {
|
||||
version = dartVersion;
|
||||
src = oldAttrs.src.overrideAttrs (_: {
|
||||
inherit hash;
|
||||
});
|
||||
}))
|
||||
else
|
||||
(dart.overrideAttrs (_: {
|
||||
# This overrideAttrs is used to replace the version in src.url
|
||||
version = dartVersion;
|
||||
__intentionallyOverridingVersion = true;
|
||||
})).overrideAttrs
|
||||
(oldAttrs: {
|
||||
src = fetchzip {
|
||||
inherit (oldAttrs.src) url;
|
||||
inherit hash;
|
||||
};
|
||||
})
|
||||
);
|
||||
src =
|
||||
let
|
||||
source = fetchFromGitHub {
|
||||
|
||||
@@ -1,29 +1,22 @@
|
||||
{
|
||||
lib,
|
||||
fetchzip,
|
||||
fetchurl,
|
||||
}:
|
||||
|
||||
let
|
||||
dartVersion = "@dart_version@";
|
||||
platform = "@platform@";
|
||||
channel = if lib.strings.hasSuffix ".beta" dartVersion then "beta" else "stable";
|
||||
system =
|
||||
{
|
||||
x86_64-linux = "linux-x64";
|
||||
aarch64-linux = "linux-arm64";
|
||||
x86_64-darwin = "macos-x64";
|
||||
aarch64-darwin = "macos-arm64";
|
||||
}
|
||||
."@platform@";
|
||||
in
|
||||
{
|
||||
x86_64-linux = fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip";
|
||||
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
|
||||
};
|
||||
aarch64-linux = fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip";
|
||||
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
|
||||
};
|
||||
x86_64-darwin = fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-macos-x64-release.zip";
|
||||
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
|
||||
};
|
||||
aarch64-darwin = fetchzip {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-macos-arm64-release.zip";
|
||||
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
|
||||
};
|
||||
fetchurl {
|
||||
url = "https://storage.googleapis.com/dart-archive/channels/${
|
||||
if lib.strings.hasSuffix ".beta" dartVersion then "beta" else "stable"
|
||||
}/release/${dartVersion}/sdk/dartsdk-${system}-release.zip";
|
||||
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
|
||||
}
|
||||
.${platform}
|
||||
|
||||
@@ -1,73 +1,73 @@
|
||||
{
|
||||
"version": "3.41.0-0.3.pre",
|
||||
"engineVersion": "492bf6df86d056e47d05a3d5404f3d78939b3dae",
|
||||
"version": "3.41.0",
|
||||
"engineVersion": "3452d735bd38224ef2db85ca763d862d6326b17f",
|
||||
"engineSwiftShaderHash": "sha256-qbtCl2nTpmtp9dnaoXc7rF3RqLnAZEmzw1BzPoCRWrc=",
|
||||
"engineSwiftShaderRev": "794b0cfce1d828d187637e6d932bae484fbe0976",
|
||||
"channel": "beta",
|
||||
"channel": "stable",
|
||||
"engineHashes": {
|
||||
"aarch64-linux": {
|
||||
"aarch64-linux": "sha256-sL+RfXTdy5qAzgbSdfxeZHDcHSBzBLsbJ0Q8qLC9KMU=",
|
||||
"x86_64-linux": "sha256-sL+RfXTdy5qAzgbSdfxeZHDcHSBzBLsbJ0Q8qLC9KMU="
|
||||
"aarch64-linux": "sha256-XZvyhT3X4MBehSxWdceVFCNH9teXuGYjTaquuoiVp0w=",
|
||||
"x86_64-linux": "sha256-XZvyhT3X4MBehSxWdceVFCNH9teXuGYjTaquuoiVp0w="
|
||||
},
|
||||
"x86_64-linux": {
|
||||
"aarch64-linux": "sha256-82KrH53pKiLCwdwzxlFRCD/IKe0RcP8NEnjItA2whdA=",
|
||||
"x86_64-linux": "sha256-82KrH53pKiLCwdwzxlFRCD/IKe0RcP8NEnjItA2whdA="
|
||||
"aarch64-linux": "sha256-u2JDoBxDdOIj7no+9Ym+JLwAQZxTKXmOjrRtaDlktuc=",
|
||||
"x86_64-linux": "sha256-u2JDoBxDdOIj7no+9Ym+JLwAQZxTKXmOjrRtaDlktuc="
|
||||
}
|
||||
},
|
||||
"dartVersion": "3.11.0-296.5.beta",
|
||||
"dartVersion": "3.11.0",
|
||||
"dartHash": {
|
||||
"x86_64-linux": "sha256-7EJPXQQrViX66lnpdqapSuTYrcT2uNwpqZClpjvNzRY=",
|
||||
"aarch64-linux": "sha256-2xgSEH9HQj8oJNH8eNs0NYxK3UGGaVBWnyuDbdam7XQ=",
|
||||
"x86_64-darwin": "sha256-cz7VM3lBWxnpFNaOI3ERZXVOgtEPVa6LVpvnvqFcw2M=",
|
||||
"aarch64-darwin": "sha256-eSTSzsjaIQUoTHqdwc3ZVkSKcXeiz+MIc0fh2XW935Q="
|
||||
"x86_64-linux": "sha256-8xcptWe+MYx8wjva/muamX+n3b+CnfUBbwZiJ7aqDJk=",
|
||||
"aarch64-linux": "sha256-dr/vXICcCCF332xRu/SADY1NdV8ulvt1Fiv40rAy74M=",
|
||||
"x86_64-darwin": "sha256-Wlwpx6g4EmkzKAEyaxHMrc8M/nMB7QGj8G6BdmvLjXQ=",
|
||||
"aarch64-darwin": "sha256-IjJFpC6rG4EeUC4VYluGcHX/4BLenrU3Skzd4u4IdTQ="
|
||||
},
|
||||
"flutterHash": "sha256-dCfrPq1oJOmDb3bP24D2rmDQzoB8uI3qJF2hqWmXywI=",
|
||||
"flutterHash": "sha256-/rgmV0BMOF3Mlw/9DVEQkptDUXzJCNEYmQX+BIXlyxY=",
|
||||
"artifactHashes": {
|
||||
"android": {
|
||||
"aarch64-darwin": "sha256-+HRucNf5J3fb1uVcYEte5zw4LcnfbmBL0kmeSQBHBlw=",
|
||||
"aarch64-linux": "sha256-7t3r/mq8KnWEbY2CVCv7l2HAV2dncrJj18vb2QxTh+8=",
|
||||
"x86_64-darwin": "sha256-+HRucNf5J3fb1uVcYEte5zw4LcnfbmBL0kmeSQBHBlw=",
|
||||
"x86_64-linux": "sha256-7t3r/mq8KnWEbY2CVCv7l2HAV2dncrJj18vb2QxTh+8="
|
||||
"aarch64-darwin": "sha256-9bjCiMYvcwMMWU8lJdJB+f2P0WxZzzjfs/pUD4qr74g=",
|
||||
"aarch64-linux": "sha256-u8O8uDaGrmAPexC+TIq0/dlnt3+B5+RQNiyk2GnVWLM=",
|
||||
"x86_64-darwin": "sha256-9bjCiMYvcwMMWU8lJdJB+f2P0WxZzzjfs/pUD4qr74g=",
|
||||
"x86_64-linux": "sha256-u8O8uDaGrmAPexC+TIq0/dlnt3+B5+RQNiyk2GnVWLM="
|
||||
},
|
||||
"fuchsia": {
|
||||
"aarch64-darwin": "sha256-8MjxukMuB31krOuTaQdFw3uy57bNg053xFgwVZUr9qg=",
|
||||
"aarch64-linux": "sha256-8MjxukMuB31krOuTaQdFw3uy57bNg053xFgwVZUr9qg=",
|
||||
"x86_64-darwin": "sha256-8MjxukMuB31krOuTaQdFw3uy57bNg053xFgwVZUr9qg=",
|
||||
"x86_64-linux": "sha256-8MjxukMuB31krOuTaQdFw3uy57bNg053xFgwVZUr9qg="
|
||||
"aarch64-darwin": "sha256-hFiXjW34BhtPsw5jC22SqDsfMQzuZVidci6a6b63L4o=",
|
||||
"aarch64-linux": "sha256-hFiXjW34BhtPsw5jC22SqDsfMQzuZVidci6a6b63L4o=",
|
||||
"x86_64-darwin": "sha256-hFiXjW34BhtPsw5jC22SqDsfMQzuZVidci6a6b63L4o=",
|
||||
"x86_64-linux": "sha256-hFiXjW34BhtPsw5jC22SqDsfMQzuZVidci6a6b63L4o="
|
||||
},
|
||||
"ios": {
|
||||
"aarch64-darwin": "sha256-2gOpJcPdzSY1q1SAs8oUJHkKTVQluFSrS3M4U3Mh9/o=",
|
||||
"aarch64-linux": "sha256-2gOpJcPdzSY1q1SAs8oUJHkKTVQluFSrS3M4U3Mh9/o=",
|
||||
"x86_64-darwin": "sha256-2gOpJcPdzSY1q1SAs8oUJHkKTVQluFSrS3M4U3Mh9/o=",
|
||||
"x86_64-linux": "sha256-2gOpJcPdzSY1q1SAs8oUJHkKTVQluFSrS3M4U3Mh9/o="
|
||||
"aarch64-darwin": "sha256-lPCidjKmqgotphFvjWUL2t3o6NBIFos1lfh958pCATQ=",
|
||||
"aarch64-linux": "sha256-lPCidjKmqgotphFvjWUL2t3o6NBIFos1lfh958pCATQ=",
|
||||
"x86_64-darwin": "sha256-lPCidjKmqgotphFvjWUL2t3o6NBIFos1lfh958pCATQ=",
|
||||
"x86_64-linux": "sha256-lPCidjKmqgotphFvjWUL2t3o6NBIFos1lfh958pCATQ="
|
||||
},
|
||||
"linux": {
|
||||
"aarch64-darwin": "sha256-NouPte/10GE7QctNlMpDXP/Yl3dDEjC52cf3Zd8Si40=",
|
||||
"aarch64-linux": "sha256-NouPte/10GE7QctNlMpDXP/Yl3dDEjC52cf3Zd8Si40=",
|
||||
"x86_64-darwin": "sha256-ELqekEn0ofBiDMh+cUXYhYTweu81k7Qc2f3WlO0fZzE=",
|
||||
"x86_64-linux": "sha256-ELqekEn0ofBiDMh+cUXYhYTweu81k7Qc2f3WlO0fZzE="
|
||||
"aarch64-darwin": "sha256-RwXbextfT+342Zg19z0k1EykHo6flPYPHuHE5czDs+4=",
|
||||
"aarch64-linux": "sha256-RwXbextfT+342Zg19z0k1EykHo6flPYPHuHE5czDs+4=",
|
||||
"x86_64-darwin": "sha256-J9cGfpF5LIjY17lVJlmlcyucLCpT49jt5P8jAWyeoiU=",
|
||||
"x86_64-linux": "sha256-J9cGfpF5LIjY17lVJlmlcyucLCpT49jt5P8jAWyeoiU="
|
||||
},
|
||||
"macos": {
|
||||
"aarch64-darwin": "sha256-Aj3FdXENj5fWleC/QaWQ5qWn+RNdFzq+lQoy3UgMF84=",
|
||||
"aarch64-linux": "sha256-Aj3FdXENj5fWleC/QaWQ5qWn+RNdFzq+lQoy3UgMF84=",
|
||||
"x86_64-darwin": "sha256-Aj3FdXENj5fWleC/QaWQ5qWn+RNdFzq+lQoy3UgMF84=",
|
||||
"x86_64-linux": "sha256-Aj3FdXENj5fWleC/QaWQ5qWn+RNdFzq+lQoy3UgMF84="
|
||||
"aarch64-darwin": "sha256-xHoNZrOn5yu734jDEE0RN+cNO/DCuiNqwlEG1br82fY=",
|
||||
"aarch64-linux": "sha256-xHoNZrOn5yu734jDEE0RN+cNO/DCuiNqwlEG1br82fY=",
|
||||
"x86_64-darwin": "sha256-xHoNZrOn5yu734jDEE0RN+cNO/DCuiNqwlEG1br82fY=",
|
||||
"x86_64-linux": "sha256-xHoNZrOn5yu734jDEE0RN+cNO/DCuiNqwlEG1br82fY="
|
||||
},
|
||||
"universal": {
|
||||
"aarch64-darwin": "sha256-ymXBamYKnmhcTwgc2rX/RgFdQml7obiYOpBh5ghKhlU=",
|
||||
"aarch64-linux": "sha256-bULGcWqxjolrksGQYFXEx6zmlcDSD6ngw0L9kDoIVvY=",
|
||||
"x86_64-darwin": "sha256-+erTasrFkQTXPQtuu8YzvfFspEVb0wIVX5jKPp9RXBE=",
|
||||
"x86_64-linux": "sha256-8foy5AZZwTBPn2WrUiG8qgc+H/0bajCgSApJ/vIlVIw="
|
||||
"aarch64-darwin": "sha256-OKUry7x+5lrGzElLnmltaIaLyq5tHtNR40z33FgL+Z0=",
|
||||
"aarch64-linux": "sha256-ZqmkJ5KGnKU4FGAOBGTF7vU7XZ7UmgCML0Pdg0bXNn4=",
|
||||
"x86_64-darwin": "sha256-orb4XUtX9Uq3Uq1xwoZAzrd+GgkOKGiOek3NEEDVQR4=",
|
||||
"x86_64-linux": "sha256-uN/wDyFnMLxqEfFR2PWesRGnigbsnqzs+mPDxEMZ+1g="
|
||||
},
|
||||
"web": {
|
||||
"aarch64-darwin": "sha256-jFESLAj61eOQJh++mycJWjO6pPe9Icjhpr8c9qiVmv0=",
|
||||
"aarch64-linux": "sha256-jFESLAj61eOQJh++mycJWjO6pPe9Icjhpr8c9qiVmv0=",
|
||||
"x86_64-darwin": "sha256-jFESLAj61eOQJh++mycJWjO6pPe9Icjhpr8c9qiVmv0=",
|
||||
"x86_64-linux": "sha256-jFESLAj61eOQJh++mycJWjO6pPe9Icjhpr8c9qiVmv0="
|
||||
"aarch64-darwin": "sha256-sQNM2Hx+NEMKtbCv2tX9kh45TB/NH9yaRm4eZqDfJQE=",
|
||||
"aarch64-linux": "sha256-sQNM2Hx+NEMKtbCv2tX9kh45TB/NH9yaRm4eZqDfJQE=",
|
||||
"x86_64-darwin": "sha256-sQNM2Hx+NEMKtbCv2tX9kh45TB/NH9yaRm4eZqDfJQE=",
|
||||
"x86_64-linux": "sha256-sQNM2Hx+NEMKtbCv2tX9kh45TB/NH9yaRm4eZqDfJQE="
|
||||
},
|
||||
"windows": {
|
||||
"x86_64-darwin": "sha256-J+N6ADOB3SF298uxN0hPydslw3k+5+nwHln2NwTQTgc=",
|
||||
"x86_64-linux": "sha256-J+N6ADOB3SF298uxN0hPydslw3k+5+nwHln2NwTQTgc="
|
||||
"x86_64-darwin": "sha256-YZ7HehFv90UHmv0hfcyv0YsQxsNRRzOitPdf5BqaJJM=",
|
||||
"x86_64-linux": "sha256-YZ7HehFv90UHmv0hfcyv0YsQxsNRRzOitPdf5BqaJJM="
|
||||
}
|
||||
},
|
||||
"pubspecLock": {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
stdenv,
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
fetchurl,
|
||||
gfortran,
|
||||
@@ -207,6 +208,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
octavePackages = import ../../../top-level/octave-packages.nix {
|
||||
pkgs = allPkgs;
|
||||
inherit
|
||||
config
|
||||
lib
|
||||
stdenv
|
||||
fetchurl
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
(truename "imported.nix")))
|
||||
|
||||
(defun run-nix-formatter ()
|
||||
(uiop:run-program '("nixfmt" "imported.nix")))
|
||||
(uiop:run-program '("treefmt" "imported.nix")))
|
||||
|
||||
(defun main ()
|
||||
(format t "~%")
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
let
|
||||
pkgs = import ../../../. { };
|
||||
inherit (pkgs) mkShellNoCC sbcl nixfmt-rfc-style;
|
||||
# Use CI-pinned (Hydra-cached) packages and formatter,
|
||||
# rather than the local nixpkgs checkout.
|
||||
inherit (import ../../../ci { }) pkgs fmt;
|
||||
inherit (pkgs) mkShellNoCC sbcl;
|
||||
in
|
||||
mkShellNoCC {
|
||||
packages = [
|
||||
nixfmt-rfc-style
|
||||
fmt.pkg
|
||||
(sbcl.withPackages (
|
||||
ps:
|
||||
builtins.attrValues {
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
ounit2,
|
||||
dune-configurator,
|
||||
eqaf,
|
||||
withFreestanding ? false,
|
||||
ocaml-freestanding,
|
||||
}:
|
||||
|
||||
buildDunePackage (finalAttrs: {
|
||||
@@ -30,9 +28,6 @@ buildDunePackage (finalAttrs: {
|
||||
buildInputs = [ dune-configurator ];
|
||||
propagatedBuildInputs = [
|
||||
eqaf
|
||||
]
|
||||
++ lib.optionals withFreestanding [
|
||||
ocaml-freestanding
|
||||
];
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{
|
||||
lib,
|
||||
buildDunePackage,
|
||||
mirage-crypto,
|
||||
dune-configurator,
|
||||
@@ -12,8 +11,6 @@
|
||||
ppx_deriving_yojson,
|
||||
ppx_deriving,
|
||||
yojson,
|
||||
withFreestanding ? false,
|
||||
ocaml-freestanding,
|
||||
}:
|
||||
|
||||
buildDunePackage {
|
||||
@@ -31,9 +28,6 @@ buildDunePackage {
|
||||
propagatedBuildInputs = [
|
||||
mirage-crypto
|
||||
mirage-crypto-rng
|
||||
]
|
||||
++ lib.optionals withFreestanding [
|
||||
ocaml-freestanding
|
||||
];
|
||||
|
||||
doCheck = true;
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
commit b273c9f7ab10475787db4d6e09bd4b71b374d0ec
|
||||
Author: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>
|
||||
Date: Thu Mar 18 01:28:46 2021 +0100
|
||||
|
||||
Let user specify solo5-binding to use
|
||||
|
||||
This is a little feature for the configure script I wanted to have for
|
||||
the NixOS package: It allows the user to set PKG_CONFIG_DEPS before
|
||||
running configure.sh to disable the autodetection mechanism. This is
|
||||
useful for NixOS as we have all bindings bundled in the solo5 package,
|
||||
so the result would also be solo5-bindings-xen. Additionally, it allows
|
||||
us to do the binding selection declaratively and minimize the risk of
|
||||
accidentally switching backend.
|
||||
|
||||
PKG_CONFIG_DEPS seems like a bit of an unappropriate variable name for a
|
||||
user “interface”, let me know if you want a dedicated environment
|
||||
variable for this in case there will be more PKG_CONFIG_DEPS.
|
||||
|
||||
diff --git a/configure.sh b/configure.sh
|
||||
index c254f7b..c675a02 100755
|
||||
--- a/configure.sh
|
||||
+++ b/configure.sh
|
||||
@@ -11,13 +11,19 @@ if pkg_exists solo5-bindings-hvt solo5-bindings-spt solo5-bindings-virtio solo5-
|
||||
echo "ERROR: Only one of solo5-bindings-hvt, solo5-bindings-spt, solo5-bindings-virtio, solo5-bindings-muen, solo5-bindings-genode, solo5-bindings-xen can be installed." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
-PKG_CONFIG_DEPS=
|
||||
-pkg_exists solo5-bindings-hvt && PKG_CONFIG_DEPS=solo5-bindings-hvt
|
||||
-pkg_exists solo5-bindings-spt && PKG_CONFIG_DEPS=solo5-bindings-spt
|
||||
-pkg_exists solo5-bindings-muen && PKG_CONFIG_DEPS=solo5-bindings-muen
|
||||
-pkg_exists solo5-bindings-virtio && PKG_CONFIG_DEPS=solo5-bindings-virtio
|
||||
-pkg_exists solo5-bindings-genode && PKG_CONFIG_DEPS=solo5-bindings-genode
|
||||
-pkg_exists solo5-bindings-xen && PKG_CONFIG_DEPS=solo5-bindings-xen
|
||||
+if [ -z "${PKG_CONFIG_DEPS}" ]; then
|
||||
+ PKG_CONFIG_DEPS=
|
||||
+ pkg_exists solo5-bindings-hvt && PKG_CONFIG_DEPS=solo5-bindings-hvt
|
||||
+ pkg_exists solo5-bindings-spt && PKG_CONFIG_DEPS=solo5-bindings-spt
|
||||
+ pkg_exists solo5-bindings-muen && PKG_CONFIG_DEPS=solo5-bindings-muen
|
||||
+ pkg_exists solo5-bindings-virtio && PKG_CONFIG_DEPS=solo5-bindings-virtio
|
||||
+ pkg_exists solo5-bindings-genode && PKG_CONFIG_DEPS=solo5-bindings-genode
|
||||
+ pkg_exists solo5-bindings-xen && PKG_CONFIG_DEPS=solo5-bindings-xen
|
||||
+else
|
||||
+ pkg_exists "${PKG_CONFIG_DEPS}" \
|
||||
+ || (echo "ERROR: ${PKG_CONFIG_DEPS} is not installed" 1>&2; exit 1) \
|
||||
+ || exit 1
|
||||
+fi
|
||||
if [ -z "${PKG_CONFIG_DEPS}" ]; then
|
||||
echo "ERROR: No supported Solo5 bindings package found." 1>&2
|
||||
echo "ERROR: solo5-bindings-hvt, solo5-bindings-spt, solo5-bindings-virtio, solo5-bindings-muen, solo5-bindings-genode or solo5-bindings-xen must be installed." 1>&2
|
||||
@@ -1,93 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
ocaml,
|
||||
pkg-config,
|
||||
solo5,
|
||||
target ? "xen",
|
||||
}:
|
||||
|
||||
# note: this is not technically an ocaml-module,
|
||||
# but can be built with different compilers, so
|
||||
# the ocamlPackages set is very useful.
|
||||
|
||||
let
|
||||
pname = "ocaml-freestanding";
|
||||
in
|
||||
|
||||
if lib.versionOlder ocaml.version "4.08" then
|
||||
throw "${pname} is not available for OCaml ${ocaml.version}"
|
||||
else
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "ocaml${ocaml.version}-${pname}-${version}";
|
||||
inherit pname;
|
||||
version = "0.6.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mirage";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256:1mbyjzwcs64n7i3xkkyaxgl3r46drbl0gkqf3fqgm2kh3q03638l";
|
||||
};
|
||||
|
||||
postUnpack = ''
|
||||
# get ocaml-src from the ocaml drv instead of via ocamlfind
|
||||
mkdir -p "${src.name}/ocaml"
|
||||
tar --strip-components=1 -xf ${ocaml.src} -C "${src.name}/ocaml"
|
||||
'';
|
||||
|
||||
patches = [
|
||||
./no-opam.patch
|
||||
./configurable-binding.patch
|
||||
];
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
nativeBuildInputs = [
|
||||
ocaml
|
||||
pkg-config
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [ solo5 ];
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
env PKG_CONFIG_DEPS=solo5-bindings-${target} sh configure.sh
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
./install.sh "$out"
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
broken = true; # Not compatible with solo5 ≥ 0.7
|
||||
description = "Freestanding OCaml runtime";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.sternenseemann ];
|
||||
homepage = "https://github.com/mirage/ocaml-freestanding";
|
||||
platforms = map ({ arch, os }: "${arch}-${os}") (
|
||||
lib.cartesianProduct {
|
||||
arch = [
|
||||
"aarch64"
|
||||
"x86_64"
|
||||
];
|
||||
os = [ "linux" ];
|
||||
}
|
||||
++ [
|
||||
{
|
||||
arch = "x86_64";
|
||||
os = "freebsd";
|
||||
}
|
||||
{
|
||||
arch = "x86_64";
|
||||
os = "openbsd";
|
||||
}
|
||||
]
|
||||
);
|
||||
};
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
commit 637b7ce639d54e617170433aa9596176b167d085
|
||||
Author: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>
|
||||
Date: Thu Mar 18 01:07:49 2021 +0100
|
||||
|
||||
Allow building without ocamlfind and opam
|
||||
|
||||
This change is the result of my first go at packaging ocaml-freestanding
|
||||
for NixOS. Our build infrastructure for ocaml there is completely
|
||||
independent of opam at the moment, so depending on opam for the build
|
||||
time is not an option, especially in this case where the information it
|
||||
would give us would be garbage.
|
||||
|
||||
Fortunately the build environment plays nicely with pkg-config which is
|
||||
already heavily used by ocaml-freestanding. This patch leaves pkg-config
|
||||
to its own devices if opam is not present (it can be assisted by a
|
||||
manually set PKG_CONFIG_PATH environment variable).
|
||||
|
||||
Additionally, in configure.sh we check if the target ocaml source
|
||||
directory already exists. This allows for building ocaml-freestanding
|
||||
without the ocaml-src package (which would be unnecessarily cumbersome
|
||||
to package for NixOS) and ocamlfind (one less dependency is always a
|
||||
nice bonus). The Makefile needs no fix since the target ocaml/Makefile
|
||||
won't be built if it's already present.
|
||||
|
||||
diff --git a/configure.sh b/configure.sh
|
||||
index 4d154ed..c254f7b 100755
|
||||
--- a/configure.sh
|
||||
+++ b/configure.sh
|
||||
@@ -1,6 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
-export PKG_CONFIG_PATH=$(opam config var prefix)/lib/pkgconfig
|
||||
+if command -v opam &> /dev/null; then
|
||||
+ export PKG_CONFIG_PATH=$(opam config var prefix)/lib/pkgconfig
|
||||
+fi
|
||||
pkg_exists() {
|
||||
pkg-config --exists "$@"
|
||||
}
|
||||
@@ -21,7 +23,7 @@ if [ -z "${PKG_CONFIG_DEPS}" ]; then
|
||||
echo "ERROR: solo5-bindings-hvt, solo5-bindings-spt, solo5-bindings-virtio, solo5-bindings-muen, solo5-bindings-genode or solo5-bindings-xen must be installed." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
-ocamlfind query ocaml-src >/dev/null || exit 1
|
||||
+[ -e "$(dirname "$0")/ocaml" ] || ocamlfind query ocaml-src >/dev/null || exit 1
|
||||
|
||||
FREESTANDING_CFLAGS="$(pkg-config --cflags ${PKG_CONFIG_DEPS})"
|
||||
BUILD_ARCH="$(uname -m)"
|
||||
@@ -26,8 +26,6 @@
|
||||
ipaddr-cstruct,
|
||||
lru,
|
||||
metrics,
|
||||
withFreestanding ? false,
|
||||
ocaml-freestanding,
|
||||
}:
|
||||
|
||||
buildDunePackage rec {
|
||||
@@ -64,9 +62,6 @@ buildDunePackage rec {
|
||||
metrics
|
||||
arp
|
||||
mirage-flow
|
||||
]
|
||||
++ lib.optionals withFreestanding [
|
||||
ocaml-freestanding
|
||||
];
|
||||
|
||||
doCheck = true;
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
buildDunePackage,
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
cmdliner,
|
||||
ctypes,
|
||||
ctypes-foreign,
|
||||
dune-configurator,
|
||||
npy,
|
||||
ocaml-compiler-libs,
|
||||
ppx_custom_printf,
|
||||
ppx_expect,
|
||||
ppx_sexp_conv,
|
||||
sexplib,
|
||||
stdio,
|
||||
torch,
|
||||
}:
|
||||
|
||||
buildDunePackage rec {
|
||||
pname = "torch";
|
||||
version = "0.17";
|
||||
|
||||
minimalOCamlVersion = "4.08";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "LaurentMazare";
|
||||
repo = "ocaml-${pname}";
|
||||
rev = version;
|
||||
hash = "sha256-z/9NUBjeFWE63Z/e8OyzDiy8hrn6qzjaiBH8G9MPeos=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Pytorch 2.0 support. Drop when it reaches a release
|
||||
(fetchpatch {
|
||||
url = "https://github.com/LaurentMazare/ocaml-torch/commit/ef7ef30cafecb09e45ec1ed8ce4bedae5947cfa5.patch";
|
||||
hash = "sha256-smdwKy40iIISp/25L2J4az6KmqFS1soeChBElUyhl5A=";
|
||||
})
|
||||
];
|
||||
|
||||
buildInputs = [ dune-configurator ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
cmdliner
|
||||
ctypes
|
||||
ctypes-foreign
|
||||
npy
|
||||
ocaml-compiler-libs
|
||||
ppx_custom_printf
|
||||
ppx_expect
|
||||
ppx_sexp_conv
|
||||
sexplib
|
||||
stdio
|
||||
torch
|
||||
torch.dev
|
||||
];
|
||||
|
||||
preBuild = "export LIBTORCH=${torch.dev}/";
|
||||
|
||||
doCheck = !stdenv.hostPlatform.isAarch64;
|
||||
|
||||
meta = {
|
||||
inherit (src.meta) homepage;
|
||||
description = "Ocaml bindings to Pytorch";
|
||||
maintainers = [ lib.maintainers.bcdarwin ];
|
||||
license = lib.licenses.asl20;
|
||||
broken = true; # Not compatible with libtorch ≥ 2.3.0
|
||||
};
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
buildOctavePackage,
|
||||
lib,
|
||||
fetchurl,
|
||||
dolfin,
|
||||
ffc,
|
||||
pkg-config,
|
||||
}:
|
||||
|
||||
buildOctavePackage rec {
|
||||
pname = "fem-fenics";
|
||||
version = "0.0.5";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/octave/${pname}-${version}.tar.gz";
|
||||
sha256 = "1xd80nnkschldvrqx0wvrg3fzbf8sck8bvq24phr5x49xs7b8x78";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
dolfin
|
||||
ffc
|
||||
];
|
||||
|
||||
meta = {
|
||||
homepage = "https://gnu-octave.github.io/packages/fem-fenics/";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ KarlJoad ];
|
||||
description = "Package for the resolution of partial differential equations based on fenics";
|
||||
# Lots of compilation errors for newer octave versions and syntax errors
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
{
|
||||
buildOctavePackage,
|
||||
lib,
|
||||
fetchgit,
|
||||
automake,
|
||||
autoconf,
|
||||
autoconf-archive,
|
||||
parallel,
|
||||
}:
|
||||
|
||||
buildOctavePackage rec {
|
||||
pname = "level-set";
|
||||
version = "2019-04-13";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.code.sf.net/p/octave/${pname}";
|
||||
rev = "dbf46228a7582eef4fe5470fd00bc5b421dd33a5";
|
||||
sha256 = "14qwa4j24m2j7njw8gbagkgmp040h6k0h7kyrrzgb9y0jm087qkl";
|
||||
fetchSubmodules = false;
|
||||
};
|
||||
|
||||
# The monstrosity of a regex below is to ensure that only error() calls are
|
||||
# corrected to have a %s format specifier. However, logic_error() also
|
||||
# exists, (a simple regex also matches that), but logic_error() doesn't
|
||||
# require a format specifier. So, this regex was born to handle that...
|
||||
postPatch = ''
|
||||
substituteInPlace build.sh --replace "level-set-0.3.1" "${pname}-${version}" \
|
||||
--replace "\`pwd\`" '/build'
|
||||
sed -i -E 's#[^[:graph:]]error \(# error \(\"%s\", #g' src/*.cpp
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
automake
|
||||
autoconf
|
||||
autoconf-archive
|
||||
];
|
||||
|
||||
requiredOctavePackages = [
|
||||
parallel
|
||||
];
|
||||
|
||||
preBuild = ''
|
||||
mkdir -p $out
|
||||
source ./build.sh
|
||||
cd -
|
||||
'';
|
||||
|
||||
meta = {
|
||||
name = "Level Set";
|
||||
homepage = "https://gnu-octave.github.io/packages/level-set/";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ KarlJoad ];
|
||||
description = "Routines for calculating the time-evolution of the level-set equation and extracting geometric information from the level-set function";
|
||||
# Got broke with octave 8.x update, and wasn't updated since 2019
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
buildOctavePackage,
|
||||
lib,
|
||||
fetchurl,
|
||||
struct,
|
||||
gnutls,
|
||||
pkg-config,
|
||||
}:
|
||||
|
||||
buildOctavePackage rec {
|
||||
pname = "parallel";
|
||||
version = "4.0.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/octave/${pname}-${version}.tar.gz";
|
||||
sha256 = "1h8vw2r42393px6dk10y3lhpxl168r9d197f9whz6lbk2rg571pa";
|
||||
};
|
||||
patches = [
|
||||
../database/c_verror.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gnutls
|
||||
];
|
||||
|
||||
requiredOctavePackages = [
|
||||
struct
|
||||
];
|
||||
|
||||
meta = {
|
||||
homepage = "https://gnu-octave.github.io/packages/parallel/";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ KarlJoad ];
|
||||
description = "Parallel execution package";
|
||||
# Although upstream has added an identical patch to that of ../database, it
|
||||
# still won't build with octave>8.1
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
buildOctavePackage,
|
||||
lib,
|
||||
fetchurl,
|
||||
librsb,
|
||||
}:
|
||||
|
||||
buildOctavePackage rec {
|
||||
pname = "sparsersb";
|
||||
version = "1.0.9";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/octave/${pname}-${version}.tar.gz";
|
||||
sha256 = "0jyy2m7wylzyjqj9n6mjizhj0ccq8xnxm2g6pdlrmncxq1401khd";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
librsb
|
||||
];
|
||||
|
||||
meta = {
|
||||
homepage = "https://gnu-octave.github.io/packages/sparsersb/";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ KarlJoad ];
|
||||
description = "Interface to the librsb package implementing the RSB sparse matrix format for fast shared-memory sparse matrix computations";
|
||||
# Broken since octave>8.x
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
buildOctavePackage,
|
||||
lib,
|
||||
fetchurl,
|
||||
# Octave dependencies
|
||||
signal, # >= 1.3.0
|
||||
# Build dependencies
|
||||
gfortran,
|
||||
}:
|
||||
|
||||
buildOctavePackage rec {
|
||||
pname = "tisean";
|
||||
version = "0.2.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/octave/${pname}-${version}.tar.gz";
|
||||
sha256 = "0nc2d9h91glxzmpizxdrc2dablw4bqhqhzs37a394c36myk4xjdv";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
gfortran
|
||||
];
|
||||
|
||||
requiredOctavePackages = [
|
||||
signal
|
||||
];
|
||||
|
||||
meta = {
|
||||
homepage = "https://gnu-octave.github.io/packages/tisean/";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ KarlJoad ];
|
||||
description = "Port of TISEAN 3.0.1";
|
||||
# Broken since octave 8.x update, and wasn't updated since 2021
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
buildOctavePackage,
|
||||
lib,
|
||||
fetchurl,
|
||||
vibes,
|
||||
}:
|
||||
|
||||
buildOctavePackage rec {
|
||||
pname = "vibes";
|
||||
version = "0.2.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/octave/${pname}-${version}.tar.gz";
|
||||
sha256 = "1zn86rcsjkqg67hphz5inxc5xkgr18sby8za68zhppc2z7pd91ng";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
vibes
|
||||
];
|
||||
|
||||
meta = {
|
||||
homepage = "https://gnu-octave.github.io/packages/vibes/";
|
||||
license = with lib.licenses; [
|
||||
gpl3Plus
|
||||
mit
|
||||
];
|
||||
maintainers = with lib.maintainers; [ KarlJoad ];
|
||||
description = "Easily display results (boxes, pavings) from interval methods";
|
||||
longDescription = ''
|
||||
The VIBes API allows one to easily display results (boxes, pavings) from
|
||||
interval methods. VIBes consists in two parts: (1) the VIBes application
|
||||
that features viewing, annotating and exporting figures, and (2) the
|
||||
VIBes API that enables your program to communicate with the viewer in order
|
||||
to draw figures. This package integrates the VIBes API into Octave. The
|
||||
VIBes application is required for operation and must be installed
|
||||
separately. Data types from third-party interval arithmetic libraries for
|
||||
Octave are also supported.
|
||||
'';
|
||||
# Marked this way until KarlJoad gets around to packaging the vibes program.
|
||||
# https://github.com/ENSTABretagneRobotics/VIBES
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
{
|
||||
buildOctavePackage,
|
||||
lib,
|
||||
fetchurl,
|
||||
# Octave dependencies
|
||||
linear-algebra,
|
||||
miscellaneous,
|
||||
struct,
|
||||
statistics,
|
||||
# Runtime dependencies
|
||||
freewrl,
|
||||
}:
|
||||
|
||||
buildOctavePackage rec {
|
||||
pname = "vrml";
|
||||
version = "1.0.14";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/octave/${pname}-${version}.tar.gz";
|
||||
sha256 = "sha256-Vfj0Q2CyOi7CrphZSl10Xv7QxTSvWdGk0Ya+SiewqV4=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
freewrl
|
||||
];
|
||||
|
||||
requiredOctavePackages = [
|
||||
linear-algebra
|
||||
miscellaneous
|
||||
struct
|
||||
statistics
|
||||
];
|
||||
|
||||
meta = {
|
||||
homepage = "https://gnu-octave.github.io/packages/vrml/";
|
||||
license = with lib.licenses; [
|
||||
gpl3Plus
|
||||
fdl12Plus
|
||||
];
|
||||
maintainers = with lib.maintainers; [ KarlJoad ];
|
||||
description = "3D graphics using VRML";
|
||||
# Marked this way until KarlJoad gets freewrl as a runtime dependency.
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "homematicip";
|
||||
version = "2.5.0";
|
||||
version = "2.6.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.12";
|
||||
@@ -25,7 +25,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "hahn-th";
|
||||
repo = "homematicip-rest-api";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-UdVOYJyWLtqJaZgiRa3M9JL+gPzZeecZwElBXqrAdFM=";
|
||||
hash = "sha256-0i3sXtwEBd9rXOEcoL7E3pCwviCcMcIQcTFFLSV3s+0=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -7,15 +7,15 @@
|
||||
jupyter-collaboration,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "jupyter-docprovider";
|
||||
version = "2.2.0";
|
||||
version = "2.2.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
pname = "jupyter_docprovider";
|
||||
inherit version;
|
||||
hash = "sha256-UZwPhBJsb7qWIOUYm+9t8GfX14nRJt69czAapLiN/Qw=";
|
||||
inherit (finalAttrs) version;
|
||||
hash = "sha256-2Ko7XbO5tAHeBRWd+No24th0hebc31l6IOWMkh9wXdo=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -41,4 +41,4 @@ buildPythonPackage rec {
|
||||
license = lib.licenses.bsd3;
|
||||
teams = [ lib.teams.jupyter ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -28,14 +28,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "sagemaker-core";
|
||||
version = "1.0.75";
|
||||
version = "1.0.76";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "aws";
|
||||
repo = "sagemaker-core";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-yRXnXGH4BoURohty/daPYd6FDGsAk9a1AiXtyCkKxug=";
|
||||
hash = "sha256-IAgHAmmN00nyE1rcPV09DMb/LFCZnwrD0OhXTeNuTik=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
bundlerEnv {
|
||||
pname = "compass";
|
||||
version = "1.0.3";
|
||||
|
||||
inherit ruby;
|
||||
gemdir = ./.;
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
bundlerEnv {
|
||||
pname = "license_finder";
|
||||
version = "7.0.1";
|
||||
|
||||
inherit ruby;
|
||||
gemdir = ./.;
|
||||
|
||||
@@ -23,9 +23,9 @@ let
|
||||
};
|
||||
# ./update-zen.py lqx
|
||||
lqx = {
|
||||
version = "6.18.8"; # lqx
|
||||
version = "6.18.9"; # lqx
|
||||
suffix = "lqx1"; # lqx
|
||||
sha256 = "1fdrsq4rbr4l90qzj0qdh55n9y8859v6ixdp9bdms123l8f4iqr3"; # lqx
|
||||
sha256 = "014kixm8p8xfpwsf6bk21dypknv29h5qac79n306z56mg3q79qhd"; # lqx
|
||||
isLqx = true;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -886,6 +886,7 @@ mapAliases {
|
||||
hspellDicts = throw "'hspellDicts' has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
http-prompt = throw "'http-prompt' has been removed as it was broken and unmaintained upstream"; # Added 2025-11-26
|
||||
hydra_unstable = throw "'hydra_unstable' has been renamed to/replaced by 'hydra'"; # Converted to throw 2025-10-27
|
||||
hydraAntLogger = warnAlias "'hydraAntLogger' has been renamed to 'hydra-ant-logger'" hydra-ant-logger; # Added 2026-02-08
|
||||
i3-gaps = throw "'i3-gaps' has been renamed to/replaced by 'i3'"; # Converted to throw 2025-10-27
|
||||
i3lock-pixeled = throw "'i3lock-pixeled' has been unmaintained for several years now."; # Converted to throw 2026-01-24
|
||||
ibm-sw-tpm2 = throw "ibm-sw-tpm2 has been removed, as it was broken"; # Added 2025-08-25
|
||||
@@ -900,7 +901,6 @@ mapAliases {
|
||||
inotifyTools = throw "'inotifyTools' has been renamed to/replaced by 'inotify-tools'"; # Converted to throw 2025-10-27
|
||||
insync-emblem-icons = throw "'insync-emblem-icons' has been removed, use 'insync-nautilus' instead"; # Added 2025-05-14
|
||||
invalidateFetcherByDrvHash = throw "'invalidateFetcherByDrvHash' has been renamed to/replaced by 'testers.invalidateFetcherByDrvHash'"; # Converted to throw 2025-10-27
|
||||
invoiceplane = throw "'invoiceplane' doesn't support non-EOL PHP versions"; # Added 2025-10-03
|
||||
ioccheck = throw "ioccheck was dropped since it was unmaintained."; # Added 2025-07-06
|
||||
ipfs = throw "'ipfs' has been renamed to/replaced by 'kubo'"; # Converted to throw 2025-10-27
|
||||
ipfs-migrator = throw "'ipfs-migrator' has been renamed to/replaced by 'kubo-migrator'"; # Converted to throw 2025-10-27
|
||||
|
||||
@@ -4371,12 +4371,6 @@ with pkgs;
|
||||
|
||||
dotnetPackages = recurseIntoAttrs (callPackage ./dotnet-packages.nix { });
|
||||
|
||||
gopro-tool = callPackage ../by-name/go/gopro-tool/package.nix {
|
||||
vlc = vlc.overrideAttrs (old: {
|
||||
buildInputs = old.buildInputs ++ [ x264 ];
|
||||
});
|
||||
};
|
||||
|
||||
gwe = callPackage ../tools/misc/gwe {
|
||||
nvidia_x11 = linuxPackages.nvidia_x11;
|
||||
};
|
||||
|
||||
@@ -1439,8 +1439,6 @@ let
|
||||
|
||||
ocaml_expat = callPackage ../development/ocaml-modules/expat { };
|
||||
|
||||
ocaml-freestanding = callPackage ../development/ocaml-modules/ocaml-freestanding { };
|
||||
|
||||
ocaml_gettext = callPackage ../development/ocaml-modules/ocaml-gettext { };
|
||||
|
||||
ocaml_libvirt = callPackage ../development/ocaml-modules/ocaml-libvirt { };
|
||||
@@ -2117,10 +2115,6 @@ let
|
||||
|
||||
topkg = callPackage ../development/ocaml-modules/topkg { };
|
||||
|
||||
torch = callPackage ../development/ocaml-modules/torch {
|
||||
torch = pkgs.libtorch-bin;
|
||||
};
|
||||
|
||||
trace = callPackage ../development/ocaml-modules/trace { };
|
||||
|
||||
trace-tef = callPackage ../development/ocaml-modules/trace/tef.nix { };
|
||||
@@ -2324,8 +2318,10 @@ let
|
||||
dune_2 = pkgs.dune_2; # Added 2025-12-08
|
||||
dune_3 = pkgs.dune_3; # Added 2025-12-08
|
||||
gd4o = throw "ocamlPackages.gd4o is not maintained, use ocamlPackages.gd instead";
|
||||
ocaml-freestanding = throw "ocamlPackages.ocaml-freestanding has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
ocaml-vdom = throw "2023-10-09: ocamlPackages.ocaml-vdom was renamed to ocamlPackages.vdom";
|
||||
ocaml_lwt = throw "ocamlPackages.ocaml_lwt has been renamed to ocamlPackages.lwt"; # Added 2025-12-05
|
||||
torch = throw "ocamlPackages.torch has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
}
|
||||
)).overrideScope
|
||||
liftJaneStreet;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# from outside, we can `inherit` them from `pkgs`.
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
@@ -91,12 +92,6 @@ makeScope newScope (
|
||||
|
||||
econometrics = callPackage ../development/octave-modules/econometrics { };
|
||||
|
||||
fem-fenics = callPackage ../development/octave-modules/fem-fenics {
|
||||
# PLACEHOLDER until KarlJoad gets dolfin packaged.
|
||||
dolfin = null;
|
||||
ffc = null;
|
||||
};
|
||||
|
||||
fits = callPackage ../development/octave-modules/fits { };
|
||||
|
||||
financial = callPackage ../development/octave-modules/financial { };
|
||||
@@ -131,8 +126,6 @@ makeScope newScope (
|
||||
|
||||
interval = callPackage ../development/octave-modules/interval { };
|
||||
|
||||
level-set = callPackage ../development/octave-modules/level-set { };
|
||||
|
||||
linear-algebra = callPackage ../development/octave-modules/linear-algebra { };
|
||||
|
||||
lssa = callPackage ../development/octave-modules/lssa { };
|
||||
@@ -182,8 +175,6 @@ makeScope newScope (
|
||||
|
||||
optiminterp = callPackage ../development/octave-modules/optiminterp { };
|
||||
|
||||
parallel = callPackage ../development/octave-modules/parallel { };
|
||||
|
||||
quaternion = callPackage ../development/octave-modules/quaternion { };
|
||||
|
||||
queueing = callPackage ../development/octave-modules/queueing { };
|
||||
@@ -192,8 +183,6 @@ makeScope newScope (
|
||||
|
||||
sockets = callPackage ../development/octave-modules/sockets { };
|
||||
|
||||
sparsersb = callPackage ../development/octave-modules/sparsersb { };
|
||||
|
||||
stk = callPackage ../development/octave-modules/stk { };
|
||||
|
||||
splines = callPackage ../development/octave-modules/splines { };
|
||||
@@ -208,22 +197,10 @@ makeScope newScope (
|
||||
inherit (octave) python;
|
||||
};
|
||||
|
||||
tisean = callPackage ../development/octave-modules/tisean { };
|
||||
|
||||
tsa = callPackage ../development/octave-modules/tsa { };
|
||||
|
||||
vibes = callPackage ../development/octave-modules/vibes {
|
||||
vibes = null;
|
||||
# TODO: Need to package vibes:
|
||||
# https://github.com/ENSTABretagneRobotics/VIBES
|
||||
};
|
||||
|
||||
video = callPackage ../development/octave-modules/video { };
|
||||
|
||||
vrml = callPackage ../development/octave-modules/vrml {
|
||||
freewrl = null;
|
||||
};
|
||||
|
||||
windows = callPackage ../development/octave-modules/windows { };
|
||||
|
||||
zeromq = callPackage ../development/octave-modules/zeromq {
|
||||
@@ -231,4 +208,13 @@ makeScope newScope (
|
||||
};
|
||||
|
||||
}
|
||||
// lib.optionalAttrs config.allowAliases {
|
||||
fem-fenics = throw "octavePackages.fem-fenics has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
level-set = throw "octavePackages.level-set has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
parallel = throw "octavePackages.parallel has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
sparsersb = throw "octavePackages.sparsersb has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
tisean = throw "octavePackages.tisean has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
vibes = throw "octavePackages.vibes has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
vrml = throw "octavePackages.vrml has been removed due to being broken for more than a year; see RFC 180"; # Added 2026-02-05
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user