Merge master into haskell-updates

main
github-actions[bot] 2 years ago committed by GitHub
commit 2ec636df25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      .github/workflows/update-terraform-providers.yml
  2. 35
      maintainers/maintainer-list.nix
  3. 2
      nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
  4. 2
      nixos/doc/manual/release-notes/rl-2205.section.md
  5. 34
      nixos/lib/systemd-types.nix
  6. 2
      nixos/lib/utils.nix
  7. 5
      nixos/modules/hardware/all-firmware.nix
  8. 15
      nixos/modules/hardware/video/webcam/facetimehd.nix
  9. 1
      nixos/modules/module-list.nix
  10. 6
      nixos/modules/services/databases/couchdb.nix
  11. 63
      nixos/modules/services/monitoring/mimir.nix
  12. 32
      nixos/modules/system/boot/systemd/initrd.nix
  13. 36
      nixos/modules/system/boot/systemd/shutdown.nix
  14. 5
      nixos/modules/tasks/filesystems/zfs.nix
  15. 194
      nixos/tests/custom-ca.nix
  16. 11
      nixos/tests/systemd-shutdown.nix
  17. 53
      pkgs/applications/audio/LibreArp/default.nix
  18. 53
      pkgs/applications/audio/LibreArp/lv2.nix
  19. 4
      pkgs/applications/audio/carla/default.nix
  20. 6
      pkgs/applications/audio/cider/default.nix
  21. 4
      pkgs/applications/audio/denemo/default.nix
  22. 4
      pkgs/applications/editors/cudatext/default.nix
  23. 4
      pkgs/applications/editors/cudatext/deps.json
  24. 4
      pkgs/applications/editors/texmaker/default.nix
  25. 4
      pkgs/applications/editors/texstudio/default.nix
  26. 50
      pkgs/applications/emulators/ripes/default.nix
  27. 46
      pkgs/applications/gis/grass/default.nix
  28. 2
      pkgs/applications/graphics/cloudcompare/default.nix
  29. 4
      pkgs/applications/graphics/ovito/default.nix
  30. 14
      pkgs/applications/misc/gnome-secrets/default.nix
  31. 35
      pkgs/applications/misc/lighthouse/default.nix
  32. 252
      pkgs/applications/misc/octoprint/default.nix
  33. 27
      pkgs/applications/misc/osmscout-server/default.nix
  34. 24
      pkgs/applications/networking/browsers/chromium/upstream-info.json
  35. 9
      pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix
  36. 4
      pkgs/applications/networking/cluster/flink/default.nix
  37. 9
      pkgs/applications/networking/cluster/terraform-providers/providers.json
  38. 4
      pkgs/applications/networking/instant-messengers/zoom-us/default.nix
  39. 15
      pkgs/applications/networking/ipfs-cluster/default.nix
  40. 7
      pkgs/applications/networking/nextcloud-client/default.nix
  41. 6
      pkgs/applications/networking/sync/rclone/default.nix
  42. 67
      pkgs/applications/office/beamerpresenter/default.nix
  43. 4
      pkgs/applications/office/zotero/default.nix
  44. 2
      pkgs/applications/radio/uhd/default.nix
  45. 4
      pkgs/applications/science/biology/blast/default.nix
  46. 4
      pkgs/applications/science/computer-architecture/qtrvsim/default.nix
  47. 23
      pkgs/applications/science/math/adolc/default.nix
  48. 16
      pkgs/applications/version-management/git-and-tools/git-interactive-rebase-tool/default.nix
  49. 5
      pkgs/applications/version-management/subversion/default.nix
  50. 50
      pkgs/applications/video/hyperion-ng/default.nix
  51. 8
      pkgs/applications/video/lightworks/default.nix
  52. 4
      pkgs/data/fonts/amiri/default.nix
  53. 29
      pkgs/data/fonts/annapurna-sil/default.nix
  54. 26
      pkgs/data/fonts/ezra-sil/default.nix
  55. 29
      pkgs/data/fonts/galatia-sil/default.nix
  56. 2
      pkgs/data/fonts/iosevka/bin.nix
  57. 184
      pkgs/data/fonts/iosevka/variants.nix
  58. 30
      pkgs/data/icons/comixcursors/default.nix
  59. 6
      pkgs/desktops/gnome/apps/gnome-todo/default.nix
  60. 6
      pkgs/development/compilers/open-watcom/v2.nix
  61. 8
      pkgs/development/coq-modules/parsec/default.nix
  62. 13
      pkgs/development/coq-modules/simple-io/default.nix
  63. 2
      pkgs/development/gnuradio-modules/osmosdr/default.nix
  64. 27
      pkgs/development/java-modules/liquibase_redshift_extension/default.nix
  65. 28
      pkgs/development/java-modules/redshift_jdbc/default.nix
  66. 1
      pkgs/development/libraries/gdal/2.4.nix
  67. 4
      pkgs/development/libraries/gtk/4.x.nix
  68. 4
      pkgs/development/libraries/gusb/default.nix
  69. 7
      pkgs/development/libraries/libjcat/default.nix
  70. 17
      pkgs/development/libraries/libosmscout/default.nix
  71. 16
      pkgs/development/libraries/libxmlb/default.nix
  72. 6
      pkgs/development/libraries/nghttp3/default.nix
  73. 6
      pkgs/development/libraries/ngtcp2/default.nix
  74. 4
      pkgs/development/libraries/opendht/default.nix
  75. 23
      pkgs/development/libraries/proj/default.nix
  76. 2
      pkgs/development/libraries/qwt/default.nix
  77. 4
      pkgs/development/libraries/science/astronomy/indilib/default.nix
  78. 7
      pkgs/development/libraries/waylandpp/default.nix
  79. 4
      pkgs/development/libraries/webkitgtk/default.nix
  80. 1
      pkgs/development/lisp-modules-new/.gitattributes
  81. 3
      pkgs/development/lisp-modules-new/.gitignore
  82. 197
      pkgs/development/lisp-modules-new/doc/api.md
  83. 98
      pkgs/development/lisp-modules-new/doc/nix-cl.md
  84. 54
      pkgs/development/lisp-modules-new/doc/quicklisp.md
  85. 5
      pkgs/development/lisp-modules-new/doc/quirks.md
  86. 24
      pkgs/development/lisp-modules-new/examples/abcl-package-set.nix
  87. 23
      pkgs/development/lisp-modules-new/examples/abcl-with-packages.nix
  88. 43
      pkgs/development/lisp-modules-new/examples/bordeaux-threads.nix
  89. 31
      pkgs/development/lisp-modules-new/examples/sbcl-with-bt.nix
  90. 18
      pkgs/development/lisp-modules-new/import/api.lisp
  91. 134
      pkgs/development/lisp-modules-new/import/database/sqlite.lisp
  92. 41
      pkgs/development/lisp-modules-new/import/init.sql
  93. 40
      pkgs/development/lisp-modules-new/import/main.lisp
  94. 81
      pkgs/development/lisp-modules-new/import/nix.lisp
  95. 24
      pkgs/development/lisp-modules-new/import/org.lispbuilds.nix.asd
  96. 199
      pkgs/development/lisp-modules-new/import/repository/quicklisp.lisp
  97. 16
      pkgs/development/lisp-modules-new/import/util.lisp
  98. 65675
      pkgs/development/lisp-modules-new/imported.nix
  99. 432
      pkgs/development/lisp-modules-new/lisp-packages.nix
  100. 155
      pkgs/development/lisp-modules-new/old-make-wrapper.sh
  101. Some files were not shown because too many files have changed in this diff Show More

@ -25,7 +25,7 @@ jobs:
git commit -m "${{ steps.setup.outputs.title }}" providers.json
popd
- name: create PR
uses: peter-evans/create-pull-request@v3
uses: peter-evans/create-pull-request@v4
with:
body: |
Automatic update by [update-terraform-providers](https://github.com/NixOS/nixpkgs/blob/master/.github/workflows/update-terraform-providers.yml) action.

@ -525,6 +525,12 @@
githubId = 38869148;
name = "Alex Eyre";
};
algram = {
email = "aliasgram@gmail.com";
github = "Algram";
githubId = 5053729;
name = "Alias Gram";
};
alibabzo = {
email = "alistair.bill@gmail.com";
github = "alibabzo";
@ -2061,6 +2067,12 @@
githubId = 8228888;
name = "Charlie Hanley";
};
charlesbaynham = {
email = "charlesbaynham@gmail.com";
github = "charlesbaynham";
githubId = 4397637;
name = "Charles Baynham";
};
CharlesHD = {
email = "charleshdespointes@gmail.com";
github = "CharlesHD";
@ -4093,11 +4105,18 @@
matrix = "@felschr:matrix.org";
github = "felschr";
githubId = 3314323;
name = "Felix Tenley";
keys = [{
longkeyid = "ed25519/0x910ACB9F6BD26F58";
fingerprint = "6AB3 7A28 5420 9A41 82D9 0068 910A CB9F 6BD2 6F58";
}];
name = "Felix Schröter";
keys = [
{
# historical
longkeyid = "ed25519/0x910ACB9F6BD26F58";
fingerprint = "6AB3 7A28 5420 9A41 82D9 0068 910A CB9F 6BD2 6F58";
}
{
longkeyid = "ed25519/0x671E39E6744C807D";
fingerprint = "7E08 6842 0934 AA1D 6821 1F2A 671E 39E6 744C 807D";
}
];
};
ffinkdevs = {
email = "fink@h0st.space";
@ -12025,6 +12044,12 @@
githubId = 1694705;
name = "Sam Stites";
};
strager = {
email = "strager.nds@gmail.com";
github = "strager";
githubId = 48666;
name = "Matthew \"strager\" Glazar";
};
stumoss = {
email = "samoss@gmail.com";
github = "stumoss";

@ -1288,7 +1288,7 @@
<literal>systemd-shutdown</literal> is now properly linked on
shutdown to unmount all filesystems and device mapper devices
cleanly. This can be disabled using
<literal>boot.systemd.shutdown.enable</literal>.
<literal>systemd.shutdownRamfs.enable</literal>.
</para>
</listitem>
<listitem>

@ -510,7 +510,7 @@ In addition to numerous new and upgraded packages, this release has the followin
- `systemd-nspawn@.service` settings have been reverted to the default systemd behaviour. User namespaces are now activated by default. If you want to keep running nspawn containers without user namespaces you need to set `systemd.nspawn.<name>.execConfig.PrivateUsers = false`
- `systemd-shutdown` is now properly linked on shutdown to unmount all filesystems and device mapper devices cleanly. This can be disabled using `boot.systemd.shutdown.enable`.
- `systemd-shutdown` is now properly linked on shutdown to unmount all filesystems and device mapper devices cleanly. This can be disabled using `systemd.shutdownRamfs.enable`.
- The Tor SOCKS proxy is now actually disabled if `services.tor.client.enable` is set to `false` (the default). If you are using this functionality but didn't change the setting or set it to `false`, you now need to set it to `true`.

@ -1,4 +1,4 @@
{ lib, systemdUtils }:
{ lib, systemdUtils, pkgs }:
with systemdUtils.lib;
with systemdUtils.unitOptions;
@ -34,4 +34,36 @@ rec {
automounts = with types; listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
initrdAutomounts = with types; attrsOf (submodule [ stage1AutomountOptions unitConfig automountConfig ]);
initrdContents = types.attrsOf (types.submodule ({ config, options, name, ... }: {
options = {
enable = mkEnableOption "copying of this file and symlinking it" // { default = true; };
target = mkOption {
type = types.path;
description = ''
Path of the symlink.
'';
default = name;
};
text = mkOption {
default = null;
type = types.nullOr types.lines;
description = "Text of the file.";
};
source = mkOption {
type = types.path;
description = "Path of the source file.";
};
};
config = {
source = mkIf (config.text != null) (
let name' = "initrd-" + baseNameOf name;
in mkDerivedConfig options.text (pkgs.writeText name')
);
};
}));
}

@ -213,6 +213,6 @@ rec {
systemdUtils = {
lib = import ./systemd-lib.nix { inherit lib config pkgs; };
unitOptions = import ./systemd-unit-options.nix { inherit lib systemdUtils; };
types = import ./systemd-types.nix { inherit lib systemdUtils; };
types = import ./systemd-types.nix { inherit lib systemdUtils pkgs; };
};
}

@ -85,7 +85,10 @@ in {
b43Firmware_6_30_163_46
b43FirmwareCutter
xow_dongle-firmware
] ++ optional pkgs.stdenv.hostPlatform.isx86 facetimehd-firmware;
] ++ optionals pkgs.stdenv.hostPlatform.isx86 [
facetimehd-calibration
facetimehd-firmware
];
})
(mkIf cfg.wirelessRegulatoryDatabase {
hardware.firmware = [ pkgs.wireless-regdb ];

@ -14,6 +14,18 @@ in
options.hardware.facetimehd.enable = mkEnableOption "facetimehd kernel module";
options.hardware.facetimehd.withCalibration = mkOption {
default = false;
example = true;
type = types.bool;
description = ''
Whether to include sensor calibration files for facetimehd.
This makes colors look much better but is experimental, see
<link xlink:href="https://github.com/patjak/facetimehd/wiki/Extracting-the-sensor-calibration-files"/>
for details.
'';
};
config = mkIf cfg.enable {
boot.kernelModules = [ "facetimehd" ];
@ -22,7 +34,8 @@ in
boot.extraModulePackages = [ kernelPackages.facetimehd ];
hardware.firmware = [ pkgs.facetimehd-firmware ];
hardware.firmware = [ pkgs.facetimehd-firmware ]
++ optional cfg.withCalibration pkgs.facetimehd-calibration;
# unload module during suspend/hibernate as it crashes the whole system
powerManagement.powerDownCommands = ''

@ -662,6 +662,7 @@
./services/monitoring/longview.nix
./services/monitoring/mackerel-agent.nix
./services/monitoring/metricbeat.nix
./services/monitoring/mimir.nix
./services/monitoring/monit.nix
./services/monitoring/munin.nix
./services/monitoring/nagios.nix

@ -193,6 +193,11 @@ in {
preStart = ''
touch ${cfg.configFile}
if ! test -e ${cfg.databaseDir}/.erlang.cookie; then
touch ${cfg.databaseDir}/.erlang.cookie
chmod 600 ${cfg.databaseDir}/.erlang.cookie
dd if=/dev/random bs=16 count=1 | base64 > ${cfg.databaseDir}/.erlang.cookie
fi
'';
environment = {
@ -204,6 +209,7 @@ in {
ERL_FLAGS= ''-couch_ini ${cfg.package}/etc/default.ini ${configFile} ${pkgs.writeText "couchdb-extra.ini" cfg.extraConfig} ${cfg.configFile}'';
# 5. the vm.args file
COUCHDB_ARGS_FILE=''${cfg.argsFile}'';
HOME =''${cfg.databaseDir}'';
};
serviceConfig = {

@ -0,0 +1,63 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) escapeShellArgs mkEnableOption mkIf mkOption types;
cfg = config.services.mimir;
settingsFormat = pkgs.formats.yaml {};
in {
options.services.mimir = {
enable = mkEnableOption "mimir";
configuration = mkOption {
type = (pkgs.formats.json {}).type;
default = {};
description = ''
Specify the configuration for Mimir in Nix.
'';
};
configFile = mkOption {
type = types.nullOr types.path;
default = null;
description = ''
Specify a configuration file that Mimir should use.
'';
};
};
config = mkIf cfg.enable {
assertions = [{
assertion = (
(cfg.configuration == {} -> cfg.configFile != null) &&
(cfg.configFile != null -> cfg.configuration == {})
);
message = ''
Please specify either
'services.mimir.configuration' or
'services.mimir.configFile'.
'';
}];
systemd.services.mimir = {
description = "mimir Service Daemon";
wantedBy = [ "multi-user.target" ];
serviceConfig = let
conf = if cfg.configFile == null
then settingsFormat.generate "config.yaml" cfg.configuration
else cfg.configFile;
in
{
ExecStart = "${pkgs.grafana-mimir}/bin/mimir --config.file=${conf}";
DynamicUser = true;
Restart = "always";
ProtectSystem = "full";
DevicePolicy = "closed";
NoNewPrivileges = true;
StateDirectory = "mimir";
};
};
};
}

@ -155,37 +155,7 @@ in {
'';
visible = false;
default = {};
type = types.attrsOf (types.submodule ({ config, options, name, ... }: {
options = {
enable = mkEnableOption "copying of this file to initrd and symlinking it" // { default = true; };
target = mkOption {
type = types.path;
description = ''
Path of the symlink.
'';
default = name;
};
text = mkOption {
default = null;
type = types.nullOr types.lines;
description = "Text of the file.";
};
source = mkOption {
type = types.path;
description = "Path of the source file.";
};
};
config = {
source = mkIf (config.text != null) (
let name' = "initrd-" + baseNameOf name;
in mkDerivedConfig options.text (pkgs.writeText name')
);
};
}));
type = utils.systemdUtils.types.initrdContents;
};
storePaths = mkOption {

@ -1,31 +1,57 @@
{ config, lib, ... }: let
{ config, lib, utils, pkgs, ... }: let
cfg = config.boot.systemd.shutdown;
cfg = config.systemd.shutdownRamfs;
ramfsContents = let
storePaths = map (p: "${p}\n") cfg.storePaths;
contents = lib.mapAttrsToList (_: v: "${v.source}\n${v.target}") (lib.filterAttrs (_: v: v.enable) cfg.contents);
in pkgs.writeText "shutdown-ramfs-contents" (lib.concatStringsSep "\n" (storePaths ++ contents));
in {
options.boot.systemd.shutdown = {
options.systemd.shutdownRamfs = {
enable = lib.mkEnableOption "pivoting back to an initramfs for shutdown" // { default = true; };
contents = lib.mkOption {
description = "Set of files that have to be linked into the shutdown ramfs";
example = lib.literalExpression ''
{
"/lib/systemd/system-shutdown/zpool-sync-shutdown".source = writeShellScript "zpool" "exec ''${zfs}/bin/zpool sync"
}
'';
type = utils.systemdUtils.types.initrdContents;
};
storePaths = lib.mkOption {
description = ''
Store paths to copy into the shutdown ramfs as well.
'';
type = lib.types.listOf lib.types.singleLineStr;
default = [];
};
};
config = lib.mkIf cfg.enable {
systemd.shutdownRamfs.contents."/shutdown".source = "${config.systemd.package}/lib/systemd/systemd-shutdown";
systemd.shutdownRamfs.storePaths = [pkgs.runtimeShell "${pkgs.coreutils}/bin"];
systemd.services.generate-shutdown-ramfs = {
description = "Generate shutdown ramfs";
wantedBy = [ "shutdown.target" ];
before = [ "shutdown.target" ];
unitConfig = {
DefaultDependencies = false;
ConditionFileIsExecutable = [
"!/run/initramfs/shutdown"
"/run/current-system/systemd/lib/systemd/systemd-shutdown"
];
};
path = [pkgs.util-linux pkgs.makeInitrdNGTool pkgs.glibc pkgs.patchelf];
serviceConfig.Type = "oneshot";
script = ''
mkdir -p /run/initramfs
if ! mountpoint -q /run/initramfs; then
mount -t tmpfs tmpfs /run/initramfs
fi
cp /run/current-system/systemd/lib/systemd/systemd-shutdown /run/initramfs/shutdown
make-initrd-ng ${ramfsContents} /run/initramfs
'';
};
};

@ -466,6 +466,11 @@ in
'') rootPools));
};
systemd.shutdownRamfs.contents."/etc/systemd/system-shutdown/zpool".source = pkgs.writeShellScript "zpool-sync-shutdown" ''
exec ${cfgZfs.package}/bin/zpool sync
'';
systemd.shutdownRamfs.storePaths = ["${cfgZfs.package}/bin/zpool"];
# TODO FIXME See https://github.com/NixOS/nixpkgs/pull/99386#issuecomment-798813567. To not break people's bootloader and as probably not everybody would read release notes that thoroughly add inSystem.
boot.loader.grub = mkIf (inInitrd || inSystem) {
zfsSupport = true;

@ -1,9 +1,14 @@
# Checks that `security.pki` options are working in curl and the main browser
# engines: Gecko (via Firefox), Chromium, QtWebEngine (Falkon) and WebKitGTK
# (via Midori). The test checks that certificates issued by a custom trusted
# CA are accepted but those from an unknown CA are rejected.
# engines: Gecko (via Firefox), Chromium, QtWebEngine (via qutebrowser) and
# WebKitGTK (via Midori). The test checks that certificates issued by a custom
# trusted CA are accepted but those from an unknown CA are rejected.
import ./make-test-python.nix ({ pkgs, lib, ... }:
{ system ? builtins.currentSystem,
config ? {},
pkgs ? import ../.. { inherit system config; }
}:
with import ../lib/testing-python.nix { inherit system pkgs; };
let
makeCert = { caName, domain }: pkgs.runCommand "example-cert"
@ -68,24 +73,8 @@ let
domain = "bad.example.com";
};
in
{
name = "custom-ca";
meta.maintainers = with lib.maintainers; [ rnhmjoj ];
enableOCR = true;
nodes.machine = { pkgs, ... }:
{ imports = [ ./common/user-account.nix ./common/x11.nix ];
# chromium-based browsers refuse to run as root
test-support.displayManager.auto.user = "alice";
# browsers may hang with the default memory
virtualisation.memorySize = 600;
networking.hosts."127.0.0.1" = [ "good.example.com" "bad.example.com" ];
webserverConfig =
{ networking.hosts."127.0.0.1" = [ "good.example.com" "bad.example.com" ];
security.pki.certificateFiles = [ "${example-good-cert}/ca.crt" ];
services.nginx.enable = true;
@ -107,73 +96,98 @@ in
return 200 'It does not work!';
'';
};
environment.systemPackages = with pkgs; [
xdotool
firefox
chromium
qutebrowser
midori
];
};
testScript = ''
from typing import Tuple
def execute_as(user: str, cmd: str) -> Tuple[int, str]:
"""
Run a shell command as a specific user.
"""
return machine.execute(f"sudo -u {user} {cmd}")
def wait_for_window_as(user: str, cls: str) -> None:
"""
Wait until a X11 window of a given user appears.
"""
def window_is_visible(last_try: bool) -> bool:
ret, stdout = execute_as(user, f"xdotool search --onlyvisible --class {cls}")
if last_try:
machine.log(f"Last chance to match {cls} on the window list")
return ret == 0
with machine.nested("Waiting for a window to appear"):
retry(window_is_visible)
machine.start()
with subtest("Good certificate is trusted in curl"):
machine.wait_for_unit("nginx")
machine.wait_for_open_port(443)
machine.succeed("curl -fv https://good.example.com")
with subtest("Unknown CA is untrusted in curl"):
machine.fail("curl -fv https://bad.example.com")
browsers = {
"firefox": "Security Risk",
"chromium": "not private",
"qutebrowser -T": "Certificate error",
"midori": "Security"
}
machine.wait_for_x()
for command, error in browsers.items():
browser = command.split()[0]
with subtest("Good certificate is trusted in " + browser):
execute_as(
"alice", f"{command} https://good.example.com >&2 &"
)
wait_for_window_as("alice", browser)
machine.wait_for_text("It works!")
machine.screenshot("good" + browser)
execute_as("alice", "xdotool key ctrl+w") # close tab
with subtest("Unknown CA is untrusted in " + browser):
execute_as("alice", f"{command} https://bad.example.com >&2 &")
machine.wait_for_text(error)
machine.screenshot("bad" + browser)
machine.succeed("pkill -f " + browser)
'';
})
curlTest = makeTest {
name = "custom-ca-curl";
meta.maintainers = with lib.maintainers; [ rnhmjoj ];
nodes.machine = { ... }: webserverConfig;
testScript = ''
with subtest("Good certificate is trusted in curl"):
machine.wait_for_unit("nginx")
machine.wait_for_open_port(443)
machine.succeed("curl -fv https://good.example.com")
with subtest("Unknown CA is untrusted in curl"):
machine.fail("curl -fv https://bad.example.com")
'';
};
mkBrowserTest = browser: testParams: makeTest {
name = "custom-ca-${browser}";
meta.maintainers = with lib.maintainers; [ rnhmjoj ];
enableOCR = true;
nodes.machine = { pkgs, ... }:
{ imports =
[ ./common/user-account.nix
./common/x11.nix
webserverConfig
];
# chromium-based browsers refuse to run as root
test-support.displayManager.auto.user = "alice";
# browsers may hang with the default memory
virtualisation.memorySize = 600;
environment.systemPackages = [ pkgs.xdotool pkgs.${browser} ];
};
testScript = ''
from typing import Tuple
def execute_as(user: str, cmd: str) -> Tuple[int, str]:
"""
Run a shell command as a specific user.
"""
return machine.execute(f"sudo -u {user} {cmd}")
def wait_for_window_as(user: str, cls: str) -> None:
"""
Wait until a X11 window of a given user appears.
"""
def window_is_visible(last_try: bool) -> bool:
ret, stdout = execute_as(user, f"xdotool search --onlyvisible --class {cls}")
if last_try:
machine.log(f"Last chance to match {cls} on the window list")
return ret == 0
with machine.nested("Waiting for a window to appear"):
retry(window_is_visible)
machine.start()
machine.wait_for_x()
command = "${browser} ${testParams.args or ""}"
with subtest("Good certificate is trusted in ${browser}"):
execute_as(
"alice", f"{command} https://good.example.com >&2 &"
)
wait_for_window_as("alice", "${browser}")
machine.sleep(4)
execute_as("alice", "xdotool key ctrl+r") # reload to be safe
machine.wait_for_text("It works!")
machine.screenshot("good${browser}")
execute_as("alice", "xdotool key ctrl+w") # close tab
with subtest("Unknown CA is untrusted in ${browser}"):
execute_as("alice", f"{command} https://bad.example.com >&2 &")
machine.wait_for_text("${testParams.error}")
machine.screenshot("bad${browser}")
'';
};
in
{
curl = curlTest;
} // pkgs.lib.mapAttrs mkBrowserTest {
firefox = { error = "Security Risk"; };
chromium = { error = "not private"; };
qutebrowser = { args = "-T"; error = "Certificate error"; };
midori = { error = "Security"; };
}

@ -1,4 +1,6 @@
import ./make-test-python.nix ({ pkgs, systemdStage1 ? false, ...} : {
import ./make-test-python.nix ({ pkgs, systemdStage1 ? false, ...} : let
msg = "Shutting down NixOS";
in {
name = "systemd-shutdown";
meta = with pkgs.lib.maintainers; {
maintainers = [ das_j ];
@ -6,7 +8,9 @@ import ./make-test-python.nix ({ pkgs, systemdStage1 ? false, ...} : {
nodes.machine = {
imports = [ ../modules/profiles/minimal.nix ];
boot.initrd.systemd.enable = systemdStage1;
systemd.shutdownRamfs.contents."/etc/systemd/system-shutdown/shutdown-message".source = pkgs.writeShellScript "shutdown-message" ''
echo "${msg}"
'';
};
testScript = ''
@ -14,7 +18,8 @@ import ./make-test-python.nix ({ pkgs, systemdStage1 ? false, ...} : {
# .shutdown() would wait for the machine to power off
machine.succeed("systemctl poweroff")
# Message printed by systemd-shutdown
machine.wait_for_console_text("All filesystems, swaps, loop devices, MD devices and DM devices detached.")
machine.wait_for_console_text("Unmounting '/oldroot'")
machine.wait_for_console_text("${msg}")
# Don't try to sync filesystems
machine.booted = False
'';

@ -0,0 +1,53 @@
{ stdenv, lib, fetchFromGitLab, cmake, pkg-config, cairo, libxkbcommon
, xcbutilcursor, xcbutilkeysyms, xcbutil, libXrandr, libXinerama, libXcursor
, alsa-lib, libjack2, lv2, gcc-unwrapped, curl}:
stdenv.mkDerivation rec {
pname = "LibreArp";
version = "2.2";
src = fetchFromGitLab {
owner = "LibreArp";
repo = "LibreArp";
rev = version;
hash = "sha256-jCUT/sflO9L57xRTqNR90RbwJ0uZ+xJVXnB3n+FhWBo=";
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [
cairo
libxkbcommon
xcbutilcursor
xcbutilkeysyms
xcbutil
libXrandr
libXinerama
libXcursor
alsa-lib
libjack2
lv2
curl
];
cmakeFlags = [
"-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
"-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
"-DCMAKE_NM=${gcc-unwrapped}/bin/gcc-nm"
];
installPhase = ''
mkdir -p $out/lib/vst3
cd LibreArp_artefacts/Release
cp -r VST3/LibreArp.vst3 $out/lib/vst3
'';
meta = with lib; {
description =
"A pattern-based arpeggio generator plugin.";
homepage = "https://librearp.gitlab.io/";
license = licenses.gpl3Plus;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ magnetophon ];
};
}

@ -0,0 +1,53 @@
{ stdenv, lib, fetchFromGitLab, cmake, pkg-config, cairo, libxkbcommon
, xcbutilcursor, xcbutilkeysyms, xcbutil, libXrandr, libXinerama, libXcursor
, alsa-lib, libjack2, lv2, gcc-unwrapped, curl}:
stdenv.mkDerivation rec {
pname = "LibreArp-lv2";
version = "2.2";
src = fetchFromGitLab {
owner = "LibreArp";
repo = "LibreArp";
rev = "${version}-lv2";
hash = "sha256-j5SksuhC4ZXXILfOpwXNqIu5fO07a/6tiZ5qUo+p0Ug=";
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [
cairo
libxkbcommon
xcbutilcursor
xcbutilkeysyms
xcbutil
libXrandr
libXinerama
libXcursor
alsa-lib
libjack2
lv2
curl
];
cmakeFlags = [
"-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
"-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
"-DCMAKE_NM=${gcc-unwrapped}/bin/gcc-nm"
];
installPhase = ''
mkdir -p $out/lib/lv2
cd LibreArp_artefacts/Release
cp -r LV2/LibreArp.lv2 $out/lib/lv2
'';
meta = with lib; {
description =
"A pattern-based arpeggio generator plugin.";
homepage = "https://librearp.gitlab.io/";
license = licenses.gpl3Plus;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ magnetophon ];
};
}

@ -15,13 +15,13 @@ assert withGtk3 -> gtk3 != null;
stdenv.mkDerivation rec {
pname = "carla";
version = "2.4.2";
version = "2.4.3";
src = fetchFromGitHub {
owner = "falkTX";
repo = pname;
rev = "v${version}";
sha256 = "sha256-A0QmyphjsNU06kh2f9rXrR+GkDEI5HqXRA9J82E6qJU=";
sha256 = "sha256-FAQTIM5NpcOhLNMf62qiKaxg6QtK5uIJF/XT6KJVnUc=";
};
nativeBuildInputs = [

@ -2,11 +2,11 @@
appimageTools.wrapType2 rec {
pname = "cider";
version = "1.3.1308";
version = "1.4.1.1680";
src = fetchurl {
url = "https://1308-429851205-gh.circle-artifacts.com/0/%7E/Cider/dist/artifacts/Cider-${version}.AppImage";
sha256 = "1lbyvn1c8155p039qfzx7jwad7km073phkmrzjm0w3ahdpwz3wgi";
url = "https://github.com/ciderapp/cider-releases/releases/download/v${version}/Cider-${builtins.concatStringsSep "." (lib.take 3 (lib.splitVersion version))}-alpha.${builtins.elemAt (lib.splitVersion version) 3}.AppImage";
sha256 = "sha256-hEv+vfMMH+Trwa1UF5R8EtyYeyiRVLP0BrXOK2+1q8M=";
};
extraInstallCommands =

@ -6,11 +6,11 @@
stdenv.mkDerivation rec {
pname = "denemo";
version = "2.5.0";
version = "2.6.0";
src = fetchurl {
url = "https://ftp.gnu.org/gnu/denemo/denemo-${version}.tar.gz";
sha256 = "sha256-B6GbBL/o/z0emT+Iw6XvWmAsJCmIwSGCyV1DkhDyfBY=";
sha256 = "sha256-S+WXDGmEf5fx+HYnXJdE5QNOfJg7EqEEX7IMI2SUtV0=";
};
buildInputs = [

@ -38,13 +38,13 @@ let
in
stdenv.mkDerivation rec {
pname = "cudatext";
version = "1.162.5";
version = "1.163.0";
src = fetchFromGitHub {
owner = "Alexey-T";
repo = "CudaText";
rev = version;
sha256 = "sha256-CQ0TPZH9A37WK+gm7jgCxL5eF+1SxHlsJTTzMVRkHIs=";
sha256 = "sha256-4jGLyAE202GAjaypubKGW1edyKqOti/yTwstC/R94iE=";
};
postPatch = ''

@ -16,8 +16,8 @@
},
"ATSynEdit": {
"owner": "Alexey-T",
"rev": "2022.04.21",
"sha256": "sha256-rPbQ3LNBXNHi9dgQKSaaCsuAY/VIzgq9tqlRXRl2IqU="
"rev": "2022.04.26",
"sha256": "sha256-aItWkjnFqxeyEywELEBkuvMH1zfI4jJFL10CexSktxU="
},
"ATSynEdit_Cmp": {
"owner": "Alexey-T",

@ -2,11 +2,11 @@
mkDerivation rec {
pname = "texmaker";
version = "5.1.2";
version = "5.1.3";
src = fetchurl {
url = "http://www.xm1math.net/texmaker/${pname}-${version}.tar.bz2";
sha256 = "sha256-UmiW8sGuVhEw7seq6BW53Nqejut3K2VB0NyUzpGnEEQ=";
sha256 = "0qczc2r01vhap11xmqizwbq21ggn4yjrxim8iqjxaq9w1rg2x9dz";
};
buildInputs = [ qtbase qtscript poppler zlib qtwebengine ];

@ -3,13 +3,13 @@
mkDerivation rec {
pname = "texstudio";
version = "4.2.2";
version = "4.2.3";
src = fetchFromGitHub {
owner = "${pname}-org";
repo = pname;
rev = version;
sha256 = "sha256-MZz8DQT1f6RU+euEED1bbg2MsaqC6+W3RoMk2qfIjr4=";
sha256 = "19z9dx8258qbjyzgskkg0xdn88mvx191y1sz4nk15yxsdyf2z3p8";
};
nativeBuildInputs = [ qmake wrapQtAppsHook pkg-config ];

@ -0,0 +1,50 @@
{ lib
, mkDerivation
, fetchFromGitHub
, pkg-config
, qtbase
, qtsvg
, qtcharts
, wrapQtAppsHook
, cmake
, python3
}:
mkDerivation rec {
pname = "ripes";
version = "2.2.4";
src = fetchFromGitHub {
owner = "mortbopet";
repo = "Ripes";
rev = "v${version}";
fetchSubmodules = true;
sha256 = "sha256-Aal2A4xypzaY7Oa+boIrXk7ITNKnh5OZIP7DkJjcGu4=";
};
nativeBuildInputs = [
cmake
pkg-config
python3
wrapQtAppsHook
];
buildInputs = [
qtbase
qtsvg
qtcharts
];
installPhase = ''
install -D Ripes $out/bin/Ripes
cp -r ${src}/appdir/usr/share $out/share
'';
meta = with lib; {
description = "A graphical processor simulator and assembly editor for the RISC-V ISA";
homepage = "https://github.com/mortbopet/Ripes";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ rewine ];
};
}

@ -1,25 +1,25 @@
{ lib, stdenv, fetchFromGitHub, flex, bison, pkg-config, zlib, libtiff, libpng, fftw
, cairo, readline, ffmpeg, makeWrapper, wxGTK30, wxmac, netcdf, blas
, cairo, readline, ffmpeg, makeWrapper, wxGTK31, wxmac, netcdf, blas
, proj, gdal, geos, sqlite, postgresql, libmysqlclient, python3Packages, libLAS, proj-datumgrid
, zstd, pdal, wrapGAppsHook
}:
stdenv.mkDerivation rec {
pname = "grass";
version = "7.8.6";
version = "8.0.1";
src = with lib; fetchFromGitHub {
owner = "OSGeo";
repo = "grass";
rev = version;
sha256 = "sha256-zvZqFWuxNyA+hu+NMiRbQVdzzrQPsZrdGdfVB17+SbM=";
sha256 = "sha256-rcOT21HRJDR+DEYsZn6BjOOhy28DWapz9PN7cRAdWGc=";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ flex bison zlib proj gdal libtiff libpng fftw sqlite
readline ffmpeg makeWrapper netcdf geos postgresql libmysqlclient blas
libLAS proj-datumgrid zstd wrapGAppsHook ]
++ lib.optionals stdenv.isLinux [ cairo pdal wxGTK30 ]
++ lib.optionals stdenv.isLinux [ cairo pdal wxGTK31 ]
++ lib.optional stdenv.isDarwin wxmac
++ (with python3Packages; [ python python-dateutil numpy ]
++ lib.optional stdenv.isDarwin wxPython_4_0
@ -68,41 +68,15 @@ stdenv.mkDerivation rec {
/* Ensures that the python script run at build time are actually executable;
* otherwise, patchShebangs ignores them. */
postConfigure = ''
chmod +x scripts/d.out.file/d.out.file.py \
scripts/d.to.rast/d.to.rast.py \
scripts/d.what.rast/d.what.rast.py \
scripts/d.what.vect/d.what.vect.py \
scripts/g.extension/g.extension.py \
scripts/g.extension.all/g.extension.all.py \
scripts/r.drain/r.drain.py \
scripts/r.pack/r.pack.py \
scripts/r.import/r.import.py \
scripts/r.tileset/r.tileset.py \
scripts/r.unpack/r.unpack.py \
scripts/v.clip/v.clip.py \
scripts/v.rast.stats/v.rast.stats.py \
scripts/v.to.lines/v.to.lines.py \
scripts/v.what.strds/v.what.strds.py \
scripts/v.unpack/v.unpack.py \
scripts/wxpyimgview/*.py \
gui/wxpython/animation/g.gui.animation.py \
gui/wxpython/datacatalog/g.gui.datacatalog.py \
gui/wxpython/rlisetup/g.gui.rlisetup.py \
gui/wxpython/vdigit/g.gui.vdigit.py \
temporal/t.rast.accumulate/t.rast.accumulate.py \
temporal/t.rast.accdetect/t.rast.accdetect.py \
temporal/t.rast.algebra/t.rast.algebra.py \
temporal/t.rast3d.algebra/t.rast3d.algebra.py \
temporal/t.vect.algebra/t.vect.algebra.py \
temporal/t.downgrade/t.downgrade.py \
temporal/t.select/t.select.py
for d in gui lib scripts temporal tools; do
patchShebangs $d
for f in $(find . -name '*.py'); do
chmod +x $f
done
patchShebangs */
'';
postInstall = ''
wrapProgram $out/bin/grass78 \
wrapProgram $out/bin/grass \
--set PYTHONPATH $PYTHONPATH \
--set GRASS_PYTHON ${python3Packages.python.interpreter} \
--suffix LD_LIBRARY_PATH ':' '${gdal}/lib'
@ -117,6 +91,6 @@ stdenv.mkDerivation rec {
description = "GIS software suite used for geospatial data management and analysis, image processing, graphics and maps production, spatial modeling, and visualization";
license = lib.licenses.gpl2Plus;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [mpickering];
maintainers = with lib.maintainers; [ mpickering willcohen ];
};
}

@ -1,4 +1,5 @@
{ lib
, stdenv
, mkDerivation
, fetchFromGitHub
, fetchpatch
@ -114,5 +115,6 @@ mkDerivation rec {
license = licenses.gpl2Plus;
maintainers = with maintainers; [ nh2 ];
platforms = with platforms; linux; # only tested here; might work on others
broken = stdenv.isLinux; # plugins/core/IO/qPDALIO/CMakeFiles/QPDAL_IO_PLUGIN.dir/src/LASFilter.cpp.o] Error 1
};
}

@ -21,13 +21,13 @@
mkDerivation rec {
pname = "ovito";
version = "3.6.0";
version = "3.7.1";
src = fetchFromGitLab {
owner = "stuko";
repo = "ovito";
rev = "v${version}";
sha256 = "sha256-yQ8gSe/QM1RRNxk4bDJ+K5QX0eYjZ+iG3QOHj01tJhY=";
sha256 = "sha256-6b/yqfrpeZ6i6DoPe3lcftvuzwvK7rfZhgyHc9GtyBs=";
};
nativeBuildInputs = [

@ -5,7 +5,6 @@
, gettext
, fetchFromGitLab
, python3Packages
, libpwquality
, wrapGAppsHook4
, gtk4
, glib
@ -17,7 +16,7 @@
python3Packages.buildPythonApplication rec {
pname = "gnome-secrets";
version = "6.1";
version = "6.4";
format = "other";
strictDeps = false; # https://github.com/NixOS/nixpkgs/issues/56943
@ -26,7 +25,7 @@ python3Packages.buildPythonApplication rec {
owner = "World";
repo = "secrets";
rev = version;
sha256 = "sha256-TBGNiiR0GW8s/Efi4/Qqvwd87Ir0gCLGPfBmmqqSwQ8=";
sha256 = "sha256-qO2DJ/Eb9+G1R3un2+n9Tf6oxpGrEuH3SBrajQ9tCPU=";
};
nativeBuildInputs = [
@ -45,6 +44,7 @@ python3Packages.buildPythonApplication rec {
glib
gdk-pixbuf
libadwaita
python3Packages.libpwquality.dev # Use python-enabled libpwquality
];
propagatedBuildInputs = with python3Packages; [
@ -52,14 +52,9 @@ python3Packages.buildPythonApplication rec {
construct
pykeepass
pyotp
] ++ [
libpwquality # using the python bindings
libpwquality
];
postPatch = ''
substituteInPlace meson_post_install.py --replace "gtk-update-icon-cache" "gtk4-update-icon-cache";
'';
# Prevent double wrapping, let the Python wrapper use the args in preFixup.
dontWrapGApps = true;
@ -76,4 +71,3 @@ python3Packages.buildPythonApplication rec {
maintainers = with maintainers; [ mvnetbiz ];
};
}

@ -1,35 +0,0 @@
{ lib, stdenv, fetchFromGitHub, pkg-config
, libX11, libxcb, cairo, gtk2, pango, python27, python3
}:
stdenv.mkDerivation rec {
pname = "lighthouse";
version = "unstable-2016-07-20";
src = fetchFromGitHub {
owner = "emgram769";
repo = "lighthouse";
rev = "d1813ef8e2aca9f6b3609b1e0c6d1d5ee683281a";
sha256 = "0v6ylm49f1b44zwq1y1gqxp2csyqblplr24ajllc2q3r0sc9m1ys";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [
libX11 libxcb cairo gtk2 pango python27 python3
];
makeFlags = [ "PREFIX=\${out}" ];
preFixup = "chmod +x $out/share/lighthouse/.config/lighthouse/google.py";
postFixup = "chmod -x $out/share/lighthouse/.config/lighthouse/google.py";
meta = with lib; {
description = "A simple flexible popup dialog to run on X";
homepage = "https://github.com/emgram769/lighthouse";
license = licenses.mit;
maintainers = with maintainers; [ ramkromberg ];
platforms = platforms.linux;
};
}

@ -9,251 +9,11 @@
, packageOverrides ? self: super: { }
}:
let
mkOverride = attrname: version: sha256:
self: super: {
${attrname} = super.${attrname}.overridePythonAttrs (
oldAttrs: {
inherit version;
src = oldAttrs.src.override {
inherit version sha256;
};
}
);
};
py = python3.override {
self = py;
packageOverrides = lib.foldr lib.composeExtensions (self: super: { }) (
[
# the following dependencies are non trivial to update since later versions introduce backwards incompatible
# changes that might affect plugins, or due to other observed problems
(mkOverride "click" "7.1.2" "d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a")
(mkOverride "flask-babel" "1.0.0" "0gmb165vkwv5v7dxsxa2i3zhafns0fh938m2zdcrv4d8z5l099yn")
(mkOverride "itsdangerous" "1.1.0" "321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19")
(mkOverride "jinja2" "2.11.3" "a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6")
(mkOverride "markdown" "3.1.1" "2e50876bcdd74517e7b71f3e7a76102050edec255b3983403f1a63e7c8a41e7a")
(mkOverride "markupsafe" "1.1.1" "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b")
# black uses hash, not sha256 identifier. Newer black version requires newer click version
(
self: super: {
black = super.black.overridePythonAttrs (oldAttrs: rec {
version = "21.12b0";
src = oldAttrs.src.override {
inherit version;
hash = "sha256-d7gPaTpWni5SeVhFljTxjfmwuiYluk4MLV2lvkLm8rM=";
};
doCheck = false;
});
}
)
# tests need network
(
self: super: {
curio = super.curio.overridePythonAttrs (oldAttrs: rec {
disabledTests = [
"test_timeout"
"test_ssl_outgoing"
];
});
}
)
# tests need network
(
self: super: {
trio = super.trio.overridePythonAttrs (oldAttrs: rec {
disabledTests = [
"test_local_address_real"
];
disabledTestPaths = [
"trio/tests/test_exports.py"
"trio/tests/test_socket.py"
];
});
}
)
# Requires flask<2, cannot mkOverride because tests need to be disabled
(
self: super: {
flask = super.flask.overridePythonAttrs (oldAttrs: rec {
version = "1.1.4";
src = oldAttrs.src.override {
inherit version;
sha256 = "15ni4xlm57a15f5hipp8w0c9zba20179bvfns2392fiq1lcbdghg";
};
doCheck = false;
});
}
)
# Requires werkezug<2, cannot mkOverride because tests need to be disabled
(
self: super: {
werkzeug = super.werkzeug.overridePythonAttrs (oldAttrs: rec {
version = "1.0.1";
src = oldAttrs.src.override {
inherit version;
sha256 = "6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c";
};
doCheck = false;
});
}
)
# Requires unidecode>=0.04.14,<0.05. Upstream changed the source naming between releases
(
self: super: {
unidecode = super.unidecode.overridePythonAttrs (oldAttrs: rec {
version = "0.04.21";
src = fetchFromGitHub {
owner = "avian2";
repo = "unidecode";
rev = "release-${version}";
sha256 = "0p5bkibv0xm1265dlfrz3zq3k9bbx07gl8zyq8mvvb8hi7p5lifg";
};
});
}
)
# Requires websocket-client <1.0, >=0.57. Cannot do mkOverride b/c differing underscore/hyphen in pypi source name
(
self: super: {
websocket-client = super.websocket-client.overridePythonAttrs (
oldAttrs: rec {
version = "0.59.0";
src = oldAttrs.src.override {
inherit version;
sha256 = "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk";
};
propagatedBuildInputs = with self; [
six
pysocks
];
disabledTests = [
"testConnect" # requires network access
];
}
);
}
)
# Octoprint needs zeroconf >=0.24 <0.25. This can't be done via mkOverride, because in zeroconf 0.32
# the super package was migrated to fetchFromGitHub.
(
self: super: {
zeroconf = super.zeroconf.overrideAttrs (oldAttrs: rec {
version = "0.24.5";
src = super.fetchPypi {
inherit (oldAttrs) pname;
inherit version;
sha256 = "0jpgd0rk91si93857mjrizan5gc42kj1q4fi4160qgk68la88fl9";
};
pythonImportsCheck = [
"zeroconf"
];
buildInputs = with self; [
pytestCheckHook
nose
];
pytestFlagsArray = [ "zeroconf/test.py" ];
});
}
)
# Octoprint pulls in celery indirectly but has no support for the up-to-date releases
(
self: super: {
celery = super.celery.overrideAttrs (oldAttrs: rec {
version = "5.0.0";
src = oldAttrs.src.override {
inherit version;
hash = "sha256-MTkw/d3nA9jjcCmjBL+RQpzRGu72PFfebayp2Vjh8lU=";
};
disabledTestPaths = [
"t/unit/backends/test_mongodb.py"
];
});
}
)
# Octoprint would allow later sentry-sdk releases but not later click releases
(
self: super: {
sentry-sdk = super.sentry-sdk.overrideAttrs (oldAttrs: rec {
pname = "sentry-sdk";
version = "1.4.3";
src = fetchFromGitHub {
owner = "getsentry";
repo = "sentry-python";
rev = version;
sha256 = "sha256-vdE6eqELMM69CWHaNYhF0HMCTV3tQsJlMHAA96oCy8c=";
};
disabledTests = [
"test_apply_simulates_delivery_info"
"test_auto_enabling_integrations_catches_import_error"
"test_leaks"
];
disabledTestPaths = [
# Don't test integrations
"tests/integrations"
# test crashes on aarch64
"tests/test_transport.py"
];
});
}
)
# Octoprint fails due to a newly added test in pytest-httpbin
# see https://github.com/NixOS/nixpkgs/issues/159864
(
self: super: {
pytest-httpbin = super.pytest-httpbin.overridePythonAttrs (oldAttrs: rec {
disabledTests = [
"test_redirect_location_is_https_for_secure_server"
];
});
}
)
# All test fail on aarch64
(
self: super: {
azure-core = super.azure-core.overridePythonAttrs (oldAttrs: rec {
doCheck = stdenv.buildPlatform == "x86_64-linux";
});
}
)
# needs network
(
self: super: {
falcon = super.falcon.overridePythonAttrs (oldAttrs: rec {
#pytestFlagsArray = [ "-W ignore::DeprecationWarning" ];
disabledTestPaths = oldAttrs.disabledTestPaths or [] ++ [
"tests/asgi/test_asgi_servers.py"
];
});
}
)
# update broke some tests
(
self: super: {
sanic = super.sanic.overridePythonAttrs (oldAttrs: rec {
disabledTestPaths = oldAttrs.disabledTestPaths or [] ++ [
"test_cli.py"
"test_cookies.py"
# requires network
"test_worker.py"
];
});
}
)
# Built-in dependency
(
self: super: {
@ -294,14 +54,14 @@ let
self: super: {
octoprint-pisupport = self.buildPythonPackage rec {
pname = "OctoPrint-PiSupport";
version = "2021.10.28";
version = "2022.3.28";
format = "setuptools";
src = fetchFromGitHub {
owner = "OctoPrint";
repo = "OctoPrint-PiSupport";
rev = version;
sha256 = "01bpvv1sn3113fdpw6b90c2rj8lqay118x609yy64z9ccm93khl9";
sha256 = "yzE/jz604nX/CHcW3aa7goH1ey8qZ7rLw31SMfNKJZM=";
};
# requires octoprint itself during tests
@ -314,13 +74,13 @@ let
self: super: {
octoprint = self.buildPythonPackage rec {
pname = "OctoPrint";
version = "1.7.3";
version = "1.8.0rc5";
src = fetchFromGitHub {
owner = "OctoPrint";
repo = "OctoPrint";
rev = version;
sha256 = "sha256-U6g7WysHHOlZ4p5BM4tw3GGAxQmxv6ltYgAp1rO/eCg=";
sha256 = "sha256-FeT45w6VXaFV4BsuOMk58nxxiu9jhCNnA2F7Uh/3sB0=";
};
propagatedBuildInputs = with super; [
@ -368,7 +128,7 @@ let
werkzeug
wrapt
zeroconf
zipstream-new
zipstream-ng
] ++ lib.optionals stdenv.isDarwin [
py.pkgs.appdirs
];
@ -406,6 +166,8 @@ let
"watchdog"
"wrapt"
"zeroconf"
"Flask-Login"
"werkzeug"
];
in
''

@ -1,4 +1,4 @@
{ lib, mkDerivation, fetchFromGitHub, fetchpatch, pkg-config
{ lib, mkDerivation, fetchFromGitHub, pkg-config
, qmake, qttools, kirigami2, qtquickcontrols2, qtlocation
, libosmscout, valhalla, libpostal, osrm-backend, protobuf
, libmicrohttpd_0_9_70, sqlite, marisa, kyotocabinet, boost
@ -14,30 +14,16 @@ let
in
mkDerivation rec {
pname = "osmscout-server";
version = "1.17.1";
version = "2.1.2";
src = fetchFromGitHub {
owner = "rinigus";
repo = "osmscout-server";
rev = version;
sha256 = "0rpsi6nyhcz6bv0jab4vixkxhjmn84xi0q2xz15a097hn46cklx9";
sha256 = "sha256-I14nQL0H2rMga+RDdAjykqmf7QIZveA6oGWu5PfZ89s=";
fetchSubmodules = true;
};
# Two patches required to work with valhalla 3.1
patches = [
# require C++14 to match latest Valhalla
(fetchpatch {
url = "https://github.com/rinigus/osmscout-server/commit/78b41b9b4c607fe9bfd6fbd61ae31cb7c8a725cd.patch";
sha256 = "0gk9mdwa75awl0bj30gm8waj454d8k2yixxwh05m0p550cbv3lg0";
})
# add Valhalla 3.1 config
(fetchpatch {
url = "https://github.com/rinigus/osmscout-server/commit/584de8bd47700053960fa139a2d7f8d3d184c876.patch";
sha256 = "0liz72n83q93bzzyyiqjkxa6hp9zjx7v9rgsmpwf88gc4caqm2dz";
})
];
nativeBuildInputs = [ qmake pkg-config qttools ];
buildInputs = [
kirigami2 qtquickcontrols2 qtlocation
@ -45,13 +31,6 @@ mkDerivation rec {
libpostal sqlite marisa kyotocabinet boost protobuf date
];
# OSMScout server currently defaults to an earlier version of valhalla,
# but valhalla 3.1 support has been added. (See patches above)
# Replace the default valhalla.json with the valhalla 3.1 version
postPatch = ''
mv data/valhalla.json-3.1 data/valhalla.json
'';
qmakeFlags = [
"SCOUT_FLAVOR=kirigami" # Choose to build the kirigami UI variant
"CONFIG+=disable_mapnik" # Disable the optional mapnik backend

@ -19,28 +19,28 @@
}
},
"beta": {
"version": "101.0.4951.41",
"sha256": "0dzsbr309n70jg7fpq2qfnrgcm4553akvdmnzhss1fc85s467609",
"sha256bin64": "1jbj5cykxamf32c1s4gsid1wxcsdf4hng2d19q9h7b2ashkvvrbi",
"version": "102.0.5005.27",
"sha256": "0fznry72w50dpijg55yxkaz1hv1zkvvxini3yxadwpfa5y0mpn3m",
"sha256bin64": "0k543zz3njsn5kh1wf90hqywll9s6g4xrnh2zqph066l91gj17rx",
"deps": {
"gn": {
"version": "2022-03-14",
"version": "2022-04-14",
"url": "https://gn.googlesource.com/gn",
"rev": "bd99dbf98cbdefe18a4128189665c5761263bcfb",
"sha256": "0nql15ckjqkm001xajq3qyn4h4q80i7x6dm9zinxxr1a8q5lppx3"
"rev": "fd9f2036f26d83f9fcfe93042fb952e5a7fe2167",
"sha256": "0b5xs0chcv3hfhy71rycsmgxnqbm375a333hwav8929k9cbi5p9h"
}
}
},
"dev": {
"version": "102.0.5005.22",
"sha256": "12s4w8qs71a7r13mm28w6kld2q21srwalsy2yfcys4kjmfp4gqfa",
"sha256bin64": "07jj7nvgalzvxacx6srccc82ggckzj4x10w1k2zskcyxpblnd7fc",
"version": "103.0.5028.0",
"sha256": "06i6kgsdril5gfbjl1sh0z5hqvq64bchhb2z8w0h8cw9977bvqk6",
"sha256bin64": "09hxvcv5n1kd4qnwh6pxzmrlnc8xijm7rwb1c8c57v0jjb32x9ry",
"deps": {
"gn": {
"version": "2022-04-14",
"version": "2022-04-26",
"url": "https://gn.googlesource.com/gn",
"rev": "fd9f2036f26d83f9fcfe93042fb952e5a7fe2167",
"sha256": "0b5xs0chcv3hfhy71rycsmgxnqbm375a333hwav8929k9cbi5p9h"
"rev": "ced9fbfe6943854e65ada4ac1849d1fa4cb19348",
"sha256": "14fgjsfqihmma1cr8n30n37vxkf20paa6swq2yxn1agjvfr9cdvl"
}
}
},

@ -366,6 +366,11 @@ stdenv.mkDerivation rec {
PULSE_SERVER="\''${PULSE_SERVER:-}" \
PULSE_COOKIE="\''${PULSE_COOKIE:-}" \
\
MOZ_ENABLE_WAYLAND=\$MOZ_ENABLE_WAYLAND \
WAYLAND_DISPLAY="\$WAYLAND_DISPLAY" \
XDG_RUNTIME_DIR="\$XDG_RUNTIME_DIR" \
XCURSOR_PATH="\$XCURSOR_PATH" \
\
APULSE_PLAYBACK_DEVICE="\''${APULSE_PLAYBACK_DEVICE:-plug:dmix}" \
\
TOR_SKIP_LAUNCH="\''${TOR_SKIP_LAUNCH:-}" \
@ -404,7 +409,9 @@ stdenv.mkDerivation rec {
LD_LIBRARY_PATH=$libPath $TBB_IN_STORE/TorBrowser/Tor/tor --version >/dev/null
echo "Checking tor-browser wrapper ..."
DISPLAY="" XAUTHORITY="" DBUS_SESSION_BUS_ADDRESS="" TBB_HOME=$(mktemp -d) \
DISPLAY="" MOZ_ENABLE_WAYLAND="" WAYLAND_DISPLAY="" XAUTHORITY="" \
XCURSOR_PATH="" XDG_RUNTIME_DIR="" XDG_SESSION_TYPE="" \
DBUS_SESSION_BUS_ADDRESS="" TBB_HOME=$(mktemp -d) \
$out/bin/tor-browser --version >/dev/null
'';

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
pname = "flink";
version = "1.14.3";
version = "1.14.4";
src = fetchurl {
url = "mirror://apache/flink/${pname}-${version}/${pname}-${version}-bin-scala_2.11.tgz";
sha256 = "sha256-dst0Q1AlDdggtOwYROoV6QcBLRNfmGTo7DL2BV/5PB4=";
sha256 = "sha256-qvWUh+EQT/MljN5LCX2JLMEapIEGAbAljrCMTYsFqtw=";
};
nativeBuildInputs = [ makeWrapper ];

@ -17,6 +17,15 @@
"vendorSha256": "1gpbc72q7mjyjxk75dyfi3j2fk6glgz0a15m2pq7clyc35kapnkc",
"version": "2.8.0"
},
"age": {
"owner": "clementblaise",
"provider-source-address": "registry.terraform.io/clementblaise/age",
"repo": "terraform-provider-age",
"rev": "v0.1.1",
"sha256": "sha256-bJrzjvkrCX93bNqCA+FdRibHnAw6cb61StqtwUY5ok4=",
"vendorSha256": "sha256-jK7JuARpoxq7hvq5+vTtUwcYot0YqlOZdtDwq4IqKvk=",
"version": "0.1.1"
},
"aiven": {
"owner": "aiven",
"provider-source-address": "registry.terraform.io/aiven/aiven",

@ -110,8 +110,8 @@ stdenv.mkDerivation rec {
runHook preInstall
${rec {
aarch64-darwin = ''
mkdir -p $out/Applications/zoom.us.app
cp -R . $out/Applications/zoom.us.app
mkdir -p $out/Applications
cp -R zoom.us.app $out/Applications/
'';
# darwin steps same on both architectures
x86_64-darwin = aarch64-darwin;

@ -2,26 +2,17 @@
buildGoModule rec {
pname = "ipfs-cluster";
version = "0.14.5";
version = "1.0.0";
vendorSha256 = "sha256-ykUjq7Svp3+kUNnFkwsBlC+C4nws6Yvu3bk2Wb4c8vY=";
vendorSha256 = "sha256-b0k1V1+JikGemSQjyiKcH7cgyDEt0Nn5aVUf6nnE+/0=";
src = fetchFromGitHub {
owner = "ipfs";
repo = "ipfs-cluster";
rev = "v${version}";
sha256 = "sha256-Xb7QbBmCJKgokxvdbtWxtnNIS/iUsYFLlRzgfoABAq8=";
sha256 = "sha256-vwu+Fj7PegbK9pmnsNuEl/AQz2gejRiFAAAov5+VNMQ=";
};
# Remove patch when updating to >0.14.5
patches = [
(fetchpatch {
name = "remove-distribution-test.patch";
url = "https://github.com/ipfs/ipfs-cluster/pull/1589/commits/49825d1df76f848806f1d76abce5e279221cc8c5.patch";
sha256 = "sha256-mM2rc4ai/qhbvxnoRw5jO7BTRlD2/Tp037EuqqS49DE=";
})
];
meta = with lib; {
description = "Allocate, replicate, and track Pins across a cluster of IPFS daemons";
homepage = "https://cluster.ipfs.io/";

@ -50,15 +50,18 @@ mkDerivation rec {
done
'';
# required to not include inkscape in the wrapper
strictDeps = true;
nativeBuildInputs = [
pkg-config
cmake
extra-cmake-modules
inkscape
sphinx
];
buildInputs = [
extra-cmake-modules
inotify-tools
libcloudproviders
libsecret
@ -95,7 +98,7 @@ mkDerivation rec {
description = "Nextcloud themed desktop client";
homepage = "https://nextcloud.com";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ kranzes ];
maintainers = with maintainers; [ kranzes SuperSandro2000 ];
platforms = platforms.linux;
};
}

@ -5,16 +5,16 @@
buildGoModule rec {
pname = "rclone";
version = "1.58.0";
version = "1.58.1";
src = fetchFromGitHub {
owner = pname;
repo = pname;
rev = "v${version}";
sha256 = "sha256-zCKXi3qeiq2AGT7UioVfCbB4bc5F2tXJ507zPa+O0pc=";
sha256 = "sha256-Hh0IVNaLAUOmdYJ6cbYFyDCLwL+0HyZdRzKnXAT0CB8=";
};
vendorSha256 = "sha256-mgupx5SNQ3wUkQCeTVnw3wwdSCrTcwLYxcX6tlqXTyQ=";
vendorSha256 = "sha256-MPo1t1gzlrzAzbTOv/dSs2BH8NwlXmf6vo1DOFP2TrM=";
subPackages = [ "." ];

@ -1,46 +1,69 @@
{ lib, stdenv, fetchFromGitHub, installShellFiles,
qmake, qtbase, qtmultimedia, wrapQtAppsHook,
poppler, mupdf, freetype, jbig2dec, openjpeg, gumbo,
renderer ? "mupdf" }:
{ lib,
stdenv,
fetchFromGitHub,
installShellFiles,
pkg-config,
cmake,
qtbase,
qtmultimedia,
qttools,
wrapQtAppsHook,
bash,
zlib,
gcc,
gnumake,
coreutils,
# only required when using poppler
poppler,
# only required when using mupdf
mupdf,
freetype,
jbig2dec,
openjpeg,
gumbo,
# choose renderer: mupdf or poppler or both (not recommended)
renderer ? "mupdf",
# choose major Qt version: "5" or "6" (only 5 is tested)
qt_version ? "5"}:
let
renderers = {
mupdf.buildInputs = [ mupdf freetype jbig2dec openjpeg gumbo ];
poppler.buildInputs = [ poppler ];
};
use_poppler = if "${renderer}" == "poppler" || "${renderer}" == "both" then "ON" else "OFF";
use_mupdf = if "${renderer}" == "mupdf" || "${renderer}" == "both" then "ON" else "OFF";
in
stdenv.mkDerivation rec {
pname = "beamerpresenter";
version = "0.2.1";
version = "0.2.2";
src = fetchFromGitHub {
owner = "stiglers-eponym";
repo = "BeamerPresenter";
rev = "v${version}";
sha256 = "sha256-+ZxllYL2wco4bG2pqInIbL9qfOoqoUJJUReqDyEBRcI=";
sha256 = "16v263nnnipih3lxg95rmwz0ihnvpl4n1wlj9r6zavnspzlp9dvb";
};
nativeBuildInputs = [ qmake installShellFiles wrapQtAppsHook ];
buildInputs = [ qtbase qtmultimedia ] ++ renderers.${renderer}.buildInputs;
qmakeFlags = [ "RENDERER=${renderer}" ];
nativeBuildInputs = [ pkg-config installShellFiles wrapQtAppsHook ];
buildInputs = [ gcc cmake coreutils gnumake bash zlib qtbase qtmultimedia qttools ] ++ renderers.${renderer}.buildInputs;
postPatch = ''
shopt -s globstar
for f in **/*.{pro,conf,h,cpp}; do
substituteInPlace "$f" \
--replace "/usr/" "$out/" \
--replace "/etc/" "$out/etc/" \
--replace '$${GUI_CONFIG_PATH}' "$out/etc/xdg/beamerpresenter/gui.json"
done
'';
cmakeFlags = [
"-DCMAKE_BUILD_TYPE='Release'"
"-DGIT_VERSION=OFF"
"-DUSE_POPPLER=${use_poppler}"
"-DUSE_MUPDF=${use_mupdf}"
"-DUSE_MUJS=OFF"
"-DUSE_GUMBO=ON"
"-DUSE_TRANSLATIONS=ON"
"-DQT_VERSION_MAJOR=${qt_version}"
];
meta = with lib; {
description = "Modular multi screen pdf presentation software respecting your window manager";
description = "Modular multi screen pdf presentation viewer";
homepage = "https://github.com/stiglers-eponym/BeamerPresenter";
license = licenses.agpl3Plus;
license = with licenses; [ agpl3 gpl3Plus ];
platforms = platforms.all;
maintainers = with maintainers; [ pacien ];
};

@ -41,12 +41,12 @@
stdenv.mkDerivation rec {
pname = "zotero";
version = "6.0";
version = "6.0.4";
src = fetchurl {
url =
"https://download.zotero.org/client/release/${version}/Zotero-${version}_linux-x86_64.tar.bz2";
sha256 = "0zkgmmflcj6vbyv8rs51jf3vx1zq8pl7b5d5asgayhrdlwi0qgff";
sha256 = "sha256-KPvsyN3qpnG8/qRwTlWe2mZWnI9OfxlHu6OUubItJZc=";
};
nativeBuildInputs = [ wrapGAppsHook ];

@ -41,6 +41,8 @@ stdenv.mkDerivation rec {
# and xxx.yyy.zzz. Hrmpf... style keeps changing
version = "4.1.0.5";
outputs = [ "out" "dev" ];
src = fetchFromGitHub {
owner = "EttusResearch";
repo = "uhd";

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
pname = "blast";
version = "2.12.0";
version = "2.13.0";
src = fetchurl {
url = "https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/${version}/ncbi-blast-${version}+-src.tar.gz";
sha256 = "122bf45cyj3s3zv2lw1y1rhz7g22v0va560ai30xdjl8sk4wk8zx";
sha256 = "sha256-iVU3FNEz2vKMR3+D0zN5Szxi5BSECMByobRiDl7E/rI=";
};
sourceRoot = "ncbi-blast-${version}+-src/c++";

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "QtRVSim";
version = "0.9.2";
version = "0.9.3";
src = fetchFromGitHub {
owner = "cvut";
repo = "qtrvsim";
rev = "refs/tags/v${version}";
sha256 = "B1l+ysrodeDbxYfdLLMF8yk4/uPXTcDrTaMtYm89HuU=";
sha256 = "BV/nHRvimPaBtY1nfK1PZ2yJ9xWZpNlwiTRfI/9KQec=";
};
nativeBuildInputs = [ cmake wrapQtAppsHook ];

@ -0,0 +1,23 @@
{ lib, stdenv, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "adolc";
version = "2.7.2";
src = fetchFromGitHub {
owner = "coin-or";
repo = "ADOL-C";
sha256 = "1w0x0p32r1amfmh2lyx33j4cb5bpkwjr5z0ll43zi5wf5gsvckd1";
rev = "releases/${version}";
};
configureFlags = [ "--with-openmp-flag=-fopenmp" ];
meta = with lib; {
description = "Automatic Differentiation of C/C++";
homepage = "https://github.com/coin-or/ADOL-C";
maintainers = [ maintainers.bzizou ];
license = licenses.gpl2Plus;
};
}

@ -1,25 +1,17 @@
{ lib, stdenv, fetchFromGitHub, fetchpatch, rustPlatform, libiconv, Security }:
{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv, Security }:
rustPlatform.buildRustPackage rec {
pname = "git-interactive-rebase-tool";
version = "2.1.0";
version = "2.2.0";
src = fetchFromGitHub {
owner = "MitMaro";
repo = pname;
rev = version;
sha256 = "sha256-DYl/GUbeNtKmXoR3gq8mK8EfsZNVNlrdngAwfzG+epw=";
sha256 = "sha256-++KTMzTt84dowoZP+Bc9E/jUS21YN5ybKrlpQUKCir0=";
};
cargoPatches = [
# update git2 crate to fix a compile error
(fetchpatch {
url = "https://github.com/MitMaro/git-interactive-rebase-tool/commit/f4d3026f23118d29a263bbca6c83f963e76c34c4.patch";
sha256 = "sha256-6ErPRcPbPRXbEslNiNInbbUhbOWb9ZRll7ZDRgTpWS4=";
})
];
cargoSha256 = "sha256-2aHW9JIiqkO0X0B0D44tSZ8QkmKH/QZoYvKNEQWldo4=";
cargoSha256 = "sha256-OUaP/nDs589FYaGYcleRMTQNu3/q/2wBjHSv2q8OyjA=";
buildInputs = lib.optionals stdenv.isDarwin [ libiconv Security ];

@ -119,11 +119,6 @@ let
});
in {
subversion_1_10 = common {
version = "1.10.8";
sha256 = "sha256-CnO6MSe1ov/7j+4rcCmE8qgI3nEKjbKLfdQBDYvlDlo=";
};
subversion = common {
version = "1.14.2";
sha256 = "sha256-yRMOjQt1copm8OcDj8dwUuZxgw14W1YWqtU7SBDTzCg=";

@ -0,0 +1,50 @@
{ avahi-compat, cmake, fetchFromGitHub, flatbuffers, hidapi, lib, libcec
, libusb1, libX11, libxcb, libXrandr, mbedtls, mkDerivation, protobuf, python3
, qtbase, qtserialport, qtsvg, qtx11extras, wrapQtAppsHook }:
mkDerivation rec {
pname = "hyperion.ng";
version = "2.0.12";
src = fetchFromGitHub {
owner = "hyperion-project";
repo = pname;
rev = version;
sha256 = "sha256-J31QaWwGNhIpnZmWN9lZEI6fC0VheY5X8fGchQqtAlQ=";
};
buildInputs = [
avahi-compat
flatbuffers
hidapi
libcec
libusb1
libX11
libxcb
libXrandr
mbedtls
protobuf
python3
qtbase
qtserialport
qtsvg
qtx11extras
];
nativeBuildInputs = [ cmake wrapQtAppsHook ];
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DUSE_SYSTEM_MBEDTLS_LIBS=ON"
"-DUSE_SYSTEM_FLATBUFFERS_LIBS=ON"
"-DUSE_SYSTEM_PROTO_LIBS=ON"
];
meta = with lib; {
description = "Open Source Ambilight solution";
homepage = "https://github.com/hyperion-project/hyperion.ng";
license = licenses.mit;
maintainers = with maintainers; [ algram ];
platforms = platforms.unix;
};
}

@ -23,15 +23,15 @@ let
];
lightworks = stdenv.mkDerivation rec {
version = "2021.2.1";
rev = "128456";
version = "2022.1.1";
rev = "132926";
pname = "lightworks";
src =
if stdenv.hostPlatform.system == "x86_64-linux" then
fetchurl {
url = "https://cdn.lwks.com/releases/${version}/lightworks_${lib.versions.majorMinor version}_r${rev}.deb";
sha256 = "sha256-GkTg43IUF1NgEm/wT9CZw68Dw/R2BYBU/F4bsCxQowQ=";
url = "https://cdn.lwks.com/releases/${version}/lightworks_${version}_r${rev}.deb";
sha256 = "sha256-f2lxfv0sFESpDnINDKlfVcR0pySAueMeOMbkgBWzz7Q=";
}
else throw "${pname}-${version} is not supported on ${stdenv.hostPlatform.system}";

@ -1,14 +1,14 @@
{ lib, fetchzip }:
let
version = "0.113";
version = "0.114";
in fetchzip rec {
name = "Amiri-${version}";
url = "https://github.com/alif-type/amiri/releases/download/${version}/${name}.zip";
sha256 = "0v5xm4spyww8wy6j9kpb01ixrakw7wp6jng4xnh220iy6yqcxm7v";
sha256 = "sha256-6FA46j1shP0R8iEi/Xop2kXS0OKW1jaGUEOthT3Z5b4=";
postFetch = ''
unzip $downloadedFile

@ -0,0 +1,29 @@
{ lib, fetchzip }:
let
version = "1.204";
in
fetchzip rec {
name = "annapurna-sil-${version}";
url = "https://software.sil.org/downloads/r/annapurna/AnnapurnaSIL-${version}.zip";
postFetch = ''
mkdir -p $out/share/{doc,fonts}
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype
unzip -j $downloadedFile \*OFL.txt \*OFL-FAQ.txt \*README.txt \*FONTLOG.txt -d "$out/share/doc/${name}"
'';
sha256 = "sha256-kVeP9ZX8H+Wn6jzmH1UQvUKY6vJjadMTdEusS7LodFM=";
meta = with lib; {
homepage = "https://software.sil.org/annapurna";
description = "Unicode-based font family with broad support for writing systems that use the Devanagari script";
longDescription = ''
Annapurna SIL is a Unicode-based font family with broad support for writing systems that use the Devanagari script. Inspired by traditional calligraphic forms, the design is intended to be highly readable, reasonably compact, and visually attractive.
'';
license = licenses.ofl;
platforms = platforms.all;
maintainers = [ maintainers.kmein ];
};
}

@ -0,0 +1,26 @@
{ lib, fetchzip }:
let
version = "2.51";
in
fetchzip rec {
name = "ezra-sil-${version}";
url = "https://software.sil.org/downloads/r/ezra/EzraSIL-${version}.zip";
postFetch = ''
mkdir -p $out/share/{doc,fonts}
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype
unzip -j $downloadedFile \*OFL-FAQ.txt \*README.txt \*FONTLOG.txt -d "$out/share/doc/${name}"
'';
sha256 = "sha256-1LGw/RPFeNtEvcBWFWZf8+dABvWye2RfZ/jt8rwQewM=";
meta = with lib; {
homepage = "https://software.sil.org/ezra";
description = "Typeface fashioned after the square letter forms of the typography of the Biblia Hebraica Stuttgartensia (BHS)";
license = licenses.ofl;
platforms = platforms.all;
maintainers = [ maintainers.kmein ];
};
}

@ -0,0 +1,29 @@
{ lib, fetchzip }:
let
version = "2.1";
in
fetchzip rec {
name = "galatia-sil-${version}";
url = "https://software.sil.org/downloads/r/galatia/GalatiaSIL-${version}.zip";
postFetch = ''
mkdir -p $out/share/{doc,fonts}
unzip -j $downloadedFile \*.ttf -d $out/share/fonts/truetype
unzip -j $downloadedFile \*OFL.txt \*OFL-FAQ.txt \*FONTLOG.txt -d "$out/share/doc/${name}"
'';
sha256 = "sha256-zLL/7LMcJul2LilhEafpvm+tiYlgv1y1jj85VvG+wiI=";
meta = with lib; {
homepage = "https://software.sil.org/galatia";
description = "Font designed to support Biblical Polytonic Greek";
longDescription = ''
Galatia SIL, designed to support Biblical Polytonic Greek, is a Unicode 3.1 font released under the SIL Open Font License. The font supports precomposed characters rather than decomposed characters. Thus, you must use a keyboard that outputs NFC encoding (precomposed).
'';
license = licenses.ofl;
platforms = platforms.all;
maintainers = [ maintainers.kmein ];
};
}

@ -11,7 +11,7 @@ let
(builtins.attrNames (builtins.removeAttrs variantHashes [ "iosevka" ]));
in stdenv.mkDerivation rec {
pname = "${name}-bin";
version = "15.0.1";
version = "15.1.0";
src = fetchurl {
url = "https://github.com/be5invis/Iosevka/releases/download/v${version}/ttc-${name}-${version}.zip";

@ -1,95 +1,95 @@
# This file was autogenerated. DO NOT EDIT!
{
iosevka = "1g8x2bjhnhiq46mx02rhp0wphi7rj21m1nh2gx6rxly2ybms3pnw";
iosevka-aile = "1hvrzycsilvjl3a90n2sk5sznkjvrn9r6yqaad397rbd309w46ai";
iosevka-curly = "0df15zbjs9xpqm5032vmjmnp4ay545bs4i8xr6rd37slb8a8x2bf";
iosevka-curly-slab = "0n57gz1v12l01khy3y0i0yd4w88jz6izwl4iav4679qjfhhd206c";
iosevka-etoile = "1mq1mqxkj5y3r9xwjy7pbrvnv72zkj2hnh48kac0xr414yrqql3n";
iosevka-slab = "0srnbwxj03is9d8q0y0k55dr35s747p8xbiz7xany5piljl68f42";
iosevka-ss01 = "1rm514g3x510dcpn9hn98kl2pv4h9rxmkgp2wvxxhg3s47x0462n";
iosevka-ss02 = "0p8h1khzxsi4c6wmwri9vvbcv2qy4nksnhmyhksb0b8yw22s9iyk";
iosevka-ss03 = "1rsw5gx5l5mi8ljvgrrir4bnhy8mvx3rkr9d4vba8wzvvqvc74nv";
iosevka-ss04 = "02rcdfrnhqdjlks26968mxsrdyfalk3h985bf9vi03sf9nqmmfpz";
iosevka-ss05 = "1qn323iawpvjqhmx6s7i8irjqkxq9yya5dxp87m452hq9zm2jynq";
iosevka-ss06 = "0zyg2afzmzdm7gd2c9i9vp751xapajabjm85sri3mcyvgkbcxqai";
iosevka-ss07 = "1qfalhxl2vxflwn3f73bdq5q1p8zblmswdfw5mrl3b5nzy8y40nw";
iosevka-ss08 = "0idj19nk7mq6z4yphmxa09c5azgxyi38zlq7y872s0dl9j2qbi5f";
iosevka-ss09 = "1zwwlb9c34q36kflc6r4wygv3rpkd7y6n1xpkql02w6rb1gp7nd9";
iosevka-ss10 = "0j01j7frkv2ldz3hqn65r3b56yn63fchhhkghs95v4cln27qzmxx";
iosevka-ss11 = "0imwzcxh7cqmqcsdlg5nay12jql8dq1hk0h7a0i1igrn3fflga5g";
iosevka-ss12 = "0z5smyxx5szz5ky4lxmscf44a5pzkjm590cihmcnjw3nxiw84bs1";
iosevka-ss13 = "0pyq12n7h1adhs5rbkrx9b64rpwvd9nj8vjmwzf3qmdc39bx6rfv";
iosevka-ss14 = "0v3aipgvw1ygs6v839cw17arm5iag57aqdkr35n0wx3yl5h3v9wg";
iosevka-ss15 = "0vhwi4b2nmshx7lh5d4fr3swfx58sxwn6w38kvp5p27jp68azbbz";
iosevka-ss16 = "1rzrd0swjaacbjpxniglkkwsn4dfhvb8f70g8nigc2mah3md62gp";
iosevka-ss17 = "184acjrqdlw38lzizwxp02lwmc8jznrb55krlvrxkd2lkj4r6gni";
iosevka-ss18 = "0sza6q6yisjsk5gkkj1z7qbrhpvqv18nykgdwqraa3im66bkl1v9";
sgr-iosevka = "1n1i12d9891il20ry3vkv5503d9j541w17imh09dbn5r0lrjr40r";
sgr-iosevka-aile = "0y1nx1xk7fn8dj5jc6zyva593vdxngjc61j717jlqh855fpz5v04";
sgr-iosevka-curly = "03x2w2arkbhnpl3rlsdgpldqnfrd14q55kf5rf5lsrnmdndg706s";
sgr-iosevka-curly-slab = "0vncsw3k56cqzpp5rpllz4azklib0vq7rah0ssz2syh43zffsyw3";
sgr-iosevka-etoile = "0plk2c7ckxm0f7aa9wd1qpi3dfb2gap0222jhx906clx04kb6bp0";
sgr-iosevka-fixed = "147qjfqwdr0l29ljbn0c73m2wg1vm9qdn5fjika8z1wy7mbrmbsl";
sgr-iosevka-fixed-curly = "1222ms9kpgcah531ik7h9qkprpq4dd98p41xrsxad3hvr4aa6x05";
sgr-iosevka-fixed-curly-slab = "1fcg0afhan0ym15c10qikfa4hadgzj0aabymac0qq74l5dn8lmx7";
sgr-iosevka-fixed-slab = "174xgxrwy50gnm53qhr9mf5cwkbwgalw6ypbz6r68fhyk70dbjvx";
sgr-iosevka-fixed-ss01 = "16wpj0yvkavhlvz5xzfa5mr219wlynqlfg1am1y1b9w647ypx6q6";
sgr-iosevka-fixed-ss02 = "1ya9riiiphv6fmirg5r0va06xvcgq8j41vmibqrzld7sjk26yrll";
sgr-iosevka-fixed-ss03 = "1l6dc7sl5a9p076a7jp2lfwrn1xh0rlp8v3d9k5m9gjghr62b288";
sgr-iosevka-fixed-ss04 = "1fmbdjgkvaw30x9wycdfzk9n9c1a2vznx8fnxc3xjps4xw5vd4h3";
sgr-iosevka-fixed-ss05 = "1f66q69wgqxqzkf5r54cjqg66lnfpk7w9lf1hk59v3vmxjxy39xh";
sgr-iosevka-fixed-ss06 = "1lfjnjn3k6wj03gxpvzc73zj98iy0x447pigxln911ai3v2mcmz5";
sgr-iosevka-fixed-ss07 = "0567x6rvikpn2cn9prrym0rlw5swa4rb7wihmhpgal64ygysipq4";
sgr-iosevka-fixed-ss08 = "0b81a3841c2fdfrpsiq8cyly9mzrk0974na53b505wasj5jvikqb";
sgr-iosevka-fixed-ss09 = "1p5w7m5r11m94icyv8fnwzmpnsih9s8p8iq8hg6iasawqzh60ll3";
sgr-iosevka-fixed-ss10 = "0c0dhi2c84km1vhbiifv95x4yf03jz12jax2vvc68hhi3w4gmg68";
sgr-iosevka-fixed-ss11 = "10jp3i36sv4jl2887g1ir1dc2gy1iyhzf2f396jchi5dadzfpgwj";
sgr-iosevka-fixed-ss12 = "14pq3l6241ylpxlx2n483g1ghlhqahk8dla0frvb572k0bvl4vh5";
sgr-iosevka-fixed-ss13 = "0js73rildzz24v4alj2xfl5n5wvmlxk18qzdchzrb78lq6bifvvd";
sgr-iosevka-fixed-ss14 = "0f47d6khi5kr10xlm61pbwr1xk5kqgj82abcaxmvbf5c3jj3v1lr";
sgr-iosevka-fixed-ss15 = "1nkyfmx4ps8mbnz7ap0vzgwgrxm6nbi4fhvalr6w2dk521inyfn7";
sgr-iosevka-fixed-ss16 = "0fykkgksdmni80v3q513xwxnay9l73viwj9qbn4bc58ljzd5hffr";
sgr-iosevka-fixed-ss17 = "09n1vl8m2drg5zs05hvdp7yy47a9s927a8ndxqsa34klanz7c04j";
sgr-iosevka-fixed-ss18 = "1rmfnnsi9c6alifhnfa4yc9gfgk687zxhrsyrjizwg9r19b2k34m";
sgr-iosevka-slab = "1nffh7iy3gn5v2yqilq57x6nvk25jh9jmbdmdfyra19nwfn601ja";
sgr-iosevka-ss01 = "1nwl7psz11jnyldry3wa3wfki28wghqq8f7vz8gmmcvv98caga80";
sgr-iosevka-ss02 = "1clk233v4ycfqmbv7whmbvm2l1qr1kf75kdca1r4c5y4wjmsh1ap";
sgr-iosevka-ss03 = "1lxn8hgz0qxs39d1jvr855h8zi3dv1k56v99q0ivrnp5y7aclia5";
sgr-iosevka-ss04 = "03nz6864i5s6gpjy7jjj52062ivd57wh90j6p8x4lj72479fwfsy";
sgr-iosevka-ss05 = "1bfgdnc44vmj3hxifz0kb5bfbv3bj9dglp4l7p781chi0m9yrmm8";
sgr-iosevka-ss06 = "1zcqq2kv080xsfll6zap3hm2l0kx6sr378iq7qrfpavmfifc3rk8";
sgr-iosevka-ss07 = "1phy7gdx5j5rww54mmzvi5f401lxqxxrwmh0hrhl0bvsxybhdcgm";
sgr-iosevka-ss08 = "1wyznlzpbv8vb1sny4f1v8x4azfbcp2ajml4aram9k9cx3zkvd8s";
sgr-iosevka-ss09 = "0q4sla496pdhfv4v15y5ax0h4pr4n47bfrvs27lq26x4p1fhgwdg";
sgr-iosevka-ss10 = "1iyr4vfs2dp26vi26libv5k18mvdnfzmwmvzdczkh8cyc9hwp36d";
sgr-iosevka-ss11 = "083pfql4nlq2847csqskb2qxrsnlvfwz198ybnfd97lxa1zczj6k";
sgr-iosevka-ss12 = "08isy55m7dqpyhbzf5jkamnr8c135850dwpqp380g991h5sp3vnm";
sgr-iosevka-ss13 = "1vjv198pkvnnxxcbyc5fy54ld4phf52nhybqc9hyf8d7806wrvyn";
sgr-iosevka-ss14 = "1y4iclzcfb2q0172xag3zqabw03q89jqb7asi0x9zkrhcd1i512y";
sgr-iosevka-ss15 = "1zxxn6s418gpx2ndknqdwp132p0sr3smsqhavpl5kw5cxrgxa9q6";
sgr-iosevka-ss16 = "132xmf4rlsa3d0j2s9hmfih6s32wm1na0hs72h7padnh6c7di3rl";
sgr-iosevka-ss17 = "1bb94ladk0qvzmvb2gc1561xfy7ddgqkqgcgigkkhdab7cfw0cxq";
sgr-iosevka-ss18 = "15rrngd4qnzqk06whczsmfdf5c1k3nm4m8ga691i1rjxwc5dwycc";
sgr-iosevka-term = "09m74mqczkm0pirahlisdw2mafyzq7wpzplyqg51221x2m01px7z";
sgr-iosevka-term-curly = "19ralig26akrabclnniwvimqkcrd0agcwyxakinb7qcbm8p4x30x";
sgr-iosevka-term-curly-slab = "01zwrlkrp840ah5fclxxl17vckcx4wnv3vwlz6nch2igy965k6qs";
sgr-iosevka-term-slab = "0520d21x04fvc2b3aa6kzdhwvf24s8yd8vkbl400i0x78gyrlnzv";
sgr-iosevka-term-ss01 = "0q64vcp4djk0mdfc05a9bz0nqc2a7dr0gdvj2d2kfpbqsg4i32qq";
sgr-iosevka-term-ss02 = "0h8a4wc5ck1p7gaf1r08h4irj10kqbpm2jkb2p63gybi9gp6ivwg";
sgr-iosevka-term-ss03 = "0608yhvkbv1hkdj7c347r9q7wbm9bvy6lnhhs6gb0ndkx596pnzm";
sgr-iosevka-term-ss04 = "1yfpkczgfjfr52ilinzi2dfyw11mmsilxjpl9r9yh0fxmr48c976";
sgr-iosevka-term-ss05 = "1brrfhkj7wlyhfdfhafkqw8kgsfy7fsi7567ayxii5b05wn9g6mr";
sgr-iosevka-term-ss06 = "0vksv1k9wvyfiifxnajvmi8b5mx8w72d80y3r9ic7rz36l0rbl3x";
sgr-iosevka-term-ss07 = "0n5hz3zdp7flbr2xh4yddwkxvpcd0v55m274w15s9q6wln0knwhy";
sgr-iosevka-term-ss08 = "1qknqr11imcrr0iqpa9qpf70m7505wl81k48igdyqgmimgksrlji";
sgr-iosevka-term-ss09 = "1j53n5fv2y97bj7n4kx8h8v5isflbmgdqh0hz58ilp06v6rd6j5i";
sgr-iosevka-term-ss10 = "1bzi39n4x4qa7vyhv5yh875n8gbyjkiaqfhj2xh8pj88b8064cw0";
sgr-iosevka-term-ss11 = "0xxyh1zxy1jdy0b110f7rallhf0vicsw0snyh3bf3v0mnkimk0y4";
sgr-iosevka-term-ss12 = "1hpbpqnkd4jzcqkg424y3d6i6nn5gyqlpqsfxrvfvx4igmm75vs5";
sgr-iosevka-term-ss13 = "12fg2j5xw6vcpczc5kgq6q29cq579l1wyv5ag9r4kxqg541s3frl";
sgr-iosevka-term-ss14 = "02qkmzr5kn5p69nqk59j6431313apy861yphbzpy56k4g80j0gy4";
sgr-iosevka-term-ss15 = "0pcb91b8iic6blsgz0sw5hv2d9add355dizpvhc6m8rmp6l5pnqq";
sgr-iosevka-term-ss16 = "081g07cav6k36k78bmdrx0z9jj2xzx3p1midzsxgsqp3ns2qxk7s";
sgr-iosevka-term-ss17 = "1bx7mx75344i4807aq1xk0rw03hnv24wn3kj247hv3b1lxx14285";
sgr-iosevka-term-ss18 = "068vy78d710aszk5s9kwf56rxg17qm8pphd329cmwknxsyan139g";
iosevka = "0654wkgdr5gy0s9gr4llyqkvngxrqfn6hfvm5akz0zwq3xwfjc0p";
iosevka-aile = "0hkgb7p22ayzsjw7idzl47djcpglsjzyi8rkz39vb9w4w3dvxbn5";
iosevka-curly = "04kkvbl0jz3ykdc30wvagh7f49nqxr6vz0wjcq93ajdc2pm4i5k4";
iosevka-curly-slab = "189w0xszks8msg7wis0gck3r2cp1rdimkii44dlj8l4p4qjxg8va";
iosevka-etoile = "1i8p8knl3hr8gj7nhbd93jh31rbj11pvjwhvjxy1djgipmdn3257";
iosevka-slab = "049j6p5v4f50yvmw8ab01pzcf18i326741rsg0kgsxw36yidmd1d";
iosevka-ss01 = "1h5s0nlgl5g0w08ii77jg671nwrmpan22ddgxaq941lznhmkv27k";
iosevka-ss02 = "03ps2a2z2x1d42mqnal1dr32949ra04hd8igwl93lflijlbww1xh";
iosevka-ss03 = "134kzw6ys3rnfw8wv7gfbvjx5im21647n1gvj68bayry41y3xisp";
iosevka-ss04 = "03kqg6n4p5m27szkjpfpyr4jgyigvj40rm1nmvv4dfd3cs9rg326";
iosevka-ss05 = "1xzvim04d2z152ml9av2zsgyla1n7wa0rja4j9bvi22rh1qb8kwv";
iosevka-ss06 = "1r8bj27rfsz732gw6qwqj6hx4babpm5cqm4i7f37spkw1dmvcrkx";
iosevka-ss07 = "16ndzr6abacy8m3bf4smfy9yw8w2i51pkv3d7klfflz9jimx540y";
iosevka-ss08 = "0kn4q2n1nyn3ds2gajc42b2mi8n67mlgz4rhbbn01nd8miz6lasw";
iosevka-ss09 = "1wajl1cng698dk0w81j2n54gcb7lygfj645s3gf2k4ywsmfd17rr";
iosevka-ss10 = "1cx44l69z8y2b0dcxw43msppgl030cvihf40asfsj036zab36n71";
iosevka-ss11 = "0jk3777bx4ibr7na9qraqhaldbaini9qyjw4lpqnszqxryx5p9ms";
iosevka-ss12 = "19w5wmq5q1rwn0yw9q74kfkbqaxbbv1ak7ikdi95qa06c1sz4z73";
iosevka-ss13 = "0llhdh641l8hqrpzs663ry3mr1fxh42g7vv1dknyh7lp32qdrh8h";
iosevka-ss14 = "1rfi157f3fln2ww3q945ych34lc9fxjx2spv6zrjg6j6k841ld76";
iosevka-ss15 = "12qpgbg4d2h8kqlc3xhpg1j3ic6wnffn4af1kr05kdln6av9sfjn";
iosevka-ss16 = "1ry923xky52fylhnya3yay3wh0cxwwqy64vq74a8wls1vnfpq7md";
iosevka-ss17 = "0d152px48gh8axqaw8myy81h9mff5vkikdqqv1mqcqy5yb50g550";
iosevka-ss18 = "1q9j0rp8a29yazgp9a3jgp54xjih0ffqfm5ii85sl0dxrval5vkq";
sgr-iosevka = "1khq3vqma1zc588x2rcnqv6lc2ajxkvs711w8zrjb7x9aaysly66";
sgr-iosevka-aile = "0cryvq204hadx28raldjp901zvvv7iywah8pcn09qwrhpkbk1r92";
sgr-iosevka-curly = "1mqybxgc9pdn5ww5zy9ki6apiv0vbdmspz2glmcrz4vfxylbydqb";
sgr-iosevka-curly-slab = "0v7y5ld3ccyb4y7nz391pxljcmxczll319lj6znxj9p9pgykw6gy";
sgr-iosevka-etoile = "03vcxnkb766l8i0r9rpd08ylazhxhv2avb3mszpirgs7ax979jqm";
sgr-iosevka-fixed = "12b2n3yjz3r67p757dmrdzayjidrlmb16mjlzdc2rrnijd41qyn7";
sgr-iosevka-fixed-curly = "12l7d0472m524jx52libsxc5ffjsnki3ah07vfg6lj7w8lam1vq1";
sgr-iosevka-fixed-curly-slab = "1lyvjvl5gsx16vfy6s0qgvkw50xvariqp6xvfzz68sg7hm1s3jqp";
sgr-iosevka-fixed-slab = "1080269ykl7xpjkp120rm46j3yhj3sd3rpygf79ny2svq0jn99y2";
sgr-iosevka-fixed-ss01 = "0g04xlr1jarnmj427gdvskgy7hmbxi5hs2ppjfj71qv75kyvlvyk";
sgr-iosevka-fixed-ss02 = "1gh3grq87ibibryl6h0z3z4r55k0wv7w4mvg63jfrbvdc7z2rkhz";
sgr-iosevka-fixed-ss03 = "1aa8nyaccx1ryfrdmwjdrfcwcr7vh3f28ygh3m1cmakmji6gr63z";
sgr-iosevka-fixed-ss04 = "0qv3pk1pwiciqw15lanljk2j8g667rn6514b16xf9lmmmpczlz2m";
sgr-iosevka-fixed-ss05 = "0pjmzrq836xw0nxr1j6hgphwya20k00v29mpbrxrmcg5ii4ph82h";
sgr-iosevka-fixed-ss06 = "0wxis8mg9jm38caf2rjsfyc1g83r7yayp415cwzl1pm6sdkxar9g";
sgr-iosevka-fixed-ss07 = "0r4rvlk67p8s02i54lpgarw75lhfr2w4an8z34n7689arl2a03bv";
sgr-iosevka-fixed-ss08 = "0rd1dglhqzbaib104hh7i89m4br8kg2shd0221kvshkjwbpbpr1r";
sgr-iosevka-fixed-ss09 = "02jaykc43c35i0n34gi3ds66gglcdycq9nalidqcldbxcpgciiiz";
sgr-iosevka-fixed-ss10 = "046s8iv5yv9vbaf9nv1kr0lpvxa0yb125hjzw3sm8fvihpwks0m7";
sgr-iosevka-fixed-ss11 = "19rq860q79cl5b6p7q5phsnb89xxsv4h5dqyn1qkc7axwvx9yj9v";
sgr-iosevka-fixed-ss12 = "1gscgqrc9b8liwr00c2h5zbi3xq2nkfwfbfv6adv8wjprfw2ri3d";
sgr-iosevka-fixed-ss13 = "0px3zvxbis70b24xzgnrs3rh2pacdqlkdkwb5gwngans2alnq5bw";
sgr-iosevka-fixed-ss14 = "1n6pn1jv0diikbhp9kngxnakjkhjc414qzccfrinml6fg7cr8kz8";
sgr-iosevka-fixed-ss15 = "00w67v49iqxcrqrqv7fcncdly6cswlzp4x8650hq48dxmc279wmj";
sgr-iosevka-fixed-ss16 = "1dxfn2lzgdcdzq5p35q0cafyrq15zmfn5gf8iw4g9xjl4hyyzi29";
sgr-iosevka-fixed-ss17 = "0zaxqaxng61gwr2zywq7b4m0aaiqwkb3khpadzcnvd1i4ggx9n7l";
sgr-iosevka-fixed-ss18 = "150ialpsvkmnhisv73x9w5dlmvh2a3496zrpyk03xqz9vzxmxw84";
sgr-iosevka-slab = "12i3fgr0pj0mp9mcwfd221f6lj6fbf4cj77wq173hzjkjn8l7gbj";
sgr-iosevka-ss01 = "1bdba7693iszm1y2zs0c3rsz8wwsgvf9zj9l93fjgnhmxfigkwlx";
sgr-iosevka-ss02 = "13pdpg1rhvv86y2wplswri95dpfsly4x37bpflyd1n60rzcgp4d1";
sgr-iosevka-ss03 = "199nvbfvwfbn7qfdxzibb38avbwx6476c3iwd93q21d49zk4xfrk";
sgr-iosevka-ss04 = "17kv8039g5xdwqmg8ywjnfk95742izrdj5dxkzwq2s3kpqz4yikz";
sgr-iosevka-ss05 = "1xg4ds6gfa5h90lggs8sbx2icz7rklq4rgzbrk9x1z3mnmmprm3r";
sgr-iosevka-ss06 = "00mrcklg9ijyqhsq848xlqi1s66alkcv7h73qnqjqvsd4a0q6lww";
sgr-iosevka-ss07 = "0p0x3974kwlw5m3wn0ngk5ik7apd94hyp2a9b1rw6ndv864h0j5y";
sgr-iosevka-ss08 = "12fywxdmsaqbq8xaxgbigjj89g2c0y2brps31mkdz0l1ba329192";
sgr-iosevka-ss09 = "0pjl8h2bf6v0llqjs52k9gq3mm31jl80phzcqsz5vx17p5gn7wnn";
sgr-iosevka-ss10 = "1cww7ing7is6r6naj3nwaq24v3gqsk0pj9d8r167a5mr8zhx7pqb";
sgr-iosevka-ss11 = "1rl13qmxqc8ajshc9ylbb29w8kx5ad5bz71xjw7j646k30hsl8fc";
sgr-iosevka-ss12 = "1zyhz1k1a534hq04prw9f8rjm4yrxmc30c65jpx1d94ckzbzj1qm";
sgr-iosevka-ss13 = "0rh9w9jdbhi56dcwf51api3v8gqfpzjz91ccnikikrg413b3r2qs";
sgr-iosevka-ss14 = "0s2sqdmfnlqzz07spvkhyxg5fj4r4bx2ik2mglqzbawc0fmp6ajn";
sgr-iosevka-ss15 = "1kya4lyvcph6d80zbgr1b3189yqa4cngx5bzgp09437pb84k7lv3";
sgr-iosevka-ss16 = "1d453qf4arvzxyivj789y9dd87sqg392fl1xshwh56h7rx4qbv4q";
sgr-iosevka-ss17 = "1qbvr1307gkqyxgx2sqvc6jvv4x0pibcsxbmp7ih96pk9sryfw06";
sgr-iosevka-ss18 = "0lqcjymaxxh2p3irqmyfsq15339amwdnyizi71lh0p16sypcc14f";
sgr-iosevka-term = "04fwjyc44kmwaaqm4f47az24vrl502hi8mqjhm3mjhpm7a7ysywx";
sgr-iosevka-term-curly = "1h0g2jhv2qirlrqjs7w72db00xvm99agwddb9mngmsg5m97dywmm";
sgr-iosevka-term-curly-slab = "0m641zbd4232vpnc92phvsxvzpl33xvrkrm22hxysmwwm6b4sb68";
sgr-iosevka-term-slab = "0k8pijigr6i0y2d91c9irkm4xcw8pqwqyv1dpn2y4q6nbrm1jvcs";
sgr-iosevka-term-ss01 = "1vv1japj1dxp36smvs4lb9hqlcrkvxandrknjswd343acwf9pr6y";
sgr-iosevka-term-ss02 = "11s5zidgx2rdvpix32h9j1d1in35s7acwwfxzf78ba3zlsmkslis";
sgr-iosevka-term-ss03 = "179wrslzrji05d2pgcjrspgqmmym6r9ihcjqq8fci7y0nwn2pbzm";
sgr-iosevka-term-ss04 = "1g64fviviykl8mwdsd4cjwjcsfjnskjmcxm8kfq22xlh0s9h6p1k";
sgr-iosevka-term-ss05 = "15s3q5yv5qv5h6lrw9mjw97csaiql1lqsf8sb0v7is0qk28qld78";
sgr-iosevka-term-ss06 = "1i8jb8is2xmdz2m1wh51708861rfvkia28qic9c30xq50a49n4ls";
sgr-iosevka-term-ss07 = "15mbhilmv72f824sqks4vkqkh46zs5z46sbibw7vfgz6b5wyknl0";
sgr-iosevka-term-ss08 = "02a9ws0fnzrdc4p54sb5x85z46i2071lq24i4676l8q42szf0xal";
sgr-iosevka-term-ss09 = "0kakm3fszw6gxr2294fi8pm52drjdihb0sg2ickq5jf22pbknswy";
sgr-iosevka-term-ss10 = "1c8jahi1ilny09gm5lvjm1fgqvcfjb9g9hn9f2q7b3cb5m1p3iya";
sgr-iosevka-term-ss11 = "1y67g39x2lyw0j7xx3ga4sncrh7q6fciyl26ql2c9jvm9fs6yywh";
sgr-iosevka-term-ss12 = "1zg4459v8m21dip5lbfxvp57x64h3js7lzb675m5nhqgyw01phxf";
sgr-iosevka-term-ss13 = "0fqc1gpxw8bd0023vvp7js9q1wxinz7j3n6q9c0amq8niw7572d5";
sgr-iosevka-term-ss14 = "04q6kq0d0bzarxa976gnq4xvk28r0q2s9wji5av6nivj7df85zl0";
sgr-iosevka-term-ss15 = "1ccvb520vfmhsgp9ra1yysc5c93a2d3nasb45f9ppsqbjf3slrz0";
sgr-iosevka-term-ss16 = "1spdadjssjnxp63wp04vncnfpyrkjlfkxrsyf8wbarg81c8zz1b3";
sgr-iosevka-term-ss17 = "1vm1nkk3arpyk92x4pjccs1d2b5zqqa1pzv0vavnchhri8q6csrd";
sgr-iosevka-term-ss18 = "0rpc7hcyc0dv174zk9crdz152bd342d1zinc1xsdm10qnf72ssbr";
}

@ -90,31 +90,11 @@ stdenv.mkDerivation rec {
opacity, edge thickness, and right- or left-handedness, for this cursor
theme. This package's derivation has an output for each of these
variants, named following the upstream convention, and the attribute for
an output must be used to install a variant. E.g.:
<programlisting language="nix">
environment.systemPackages = [
comixcursors.Blue
comixcursors.Opaque_Orange
comixcursors.Slim_Red
comixcursors.Opaque_Slim_White
comixcursors.LH_Green
comixcursors.LH_Opaque_Black
comixcursors.LH_Slim_Orange
comixcursors.LH_Opaque_Slim_Blue
];
</programlisting>
Attempting to use just <literal>comixcursors</literal>, i.e. without an
output attribute, will not install any variants. To install all the
variants, use <literal>comixcursors.all</literal> (which is a list), e.g.:
<programlisting language="nix">
environment.systemPackages = comixcursors.all ++ [...];
</programlisting>
The complete list of output attributes is:
<programlisting>
${concatStringsSep "\n" variants}
</programlisting>
an output must be used to install a variant,
e.g. `comixcursors.LH_Opaque_Slim_Blue`. Attempting to use only
`comixcursors`, i.e. without an output attribute, will not install any
variants. To install all the variants, use `comixcursors.all` (which is a
list).
'';
homepage = "https://gitlab.com/limitland/comixcursors";
changelog = "https://gitlab.com/limitland/comixcursors/-/blob/HEAD/NEWS";

@ -27,14 +27,14 @@
stdenv.mkDerivation rec {
pname = "gnome-todo";
version = "unstable-2022-03-11";
version = "unstable-2022-03-13";
src = fetchFromGitLab {
domain = "gitlab.gnome.org";
owner = "GNOME";
repo = "gnome-todo";
rev = "07791399742366b4e3a6897430054d91df4594b4";
sha256 = "821KgxkkW4T6bdGuttAz9ao/WStM1QEfn4hY/b0d0jI=";
rev = "68787718eabf164f9087367113689996cd06fefd";
sha256 = "srfu22s8nVVJYw8c97T1ubT6nQqbA1Sav5Ckemdcn30=";
};
patches = [

@ -12,14 +12,14 @@
stdenv.mkDerivation rec {
pname = "open-watcom-v2";
version = "unstable-2022-04-23";
version = "unstable-2022-04-24";
name = "${pname}-unwrapped-${version}";
src = fetchFromGitHub {
owner = "open-watcom";
repo = "open-watcom-v2";
rev = "3351d37f44eef84fcd428b8b5537cb29a7db22a8";
sha256 = "mSF9xFKJ5AQ+Ds84qMD8xJJ7B9AMujgksxMNzSDzLA4=";
rev = "13fcf849005f8e2f1c072ad727721eeb52d17b39";
sha256 = "Wz9Lbwz00xwes4yiko4RA95QdKOkRHUitAFsCNWhfkw=";
};
postPatch = ''

@ -11,12 +11,16 @@ mkCoqDerivation {
releaseRev = (v: "v${v}");
inherit version;
defaultVersion = if versions.range "8.12" "8.13" coq.version then "0.1.0" else null;
defaultVersion = with versions; switch coq.version [
{ case = range "8.12" "8.15"; out = "0.1.1"; }
{ case = range "8.12" "8.13"; out = "0.1.0"; }
] null;
release."0.1.1".sha256 = "sha256:1c0l18s68pzd4c8i3jimh2yz0pqm4g38pca4bm7fr18r8xmqf189";
release."0.1.0".sha256 = "sha256:01avfcqirz2b9wjzi9iywbhz9szybpnnj3672dgkfsimyg9jgnsr";
meta = {
description = "Library for serialization to S-expressions";
license = licenses.mit;
license = licenses.bsd3;
maintainers = with maintainers; [ Zimmi48 ];
};
}

@ -5,10 +5,17 @@ with lib; mkCoqDerivation {
owner = "Lysxia";
repo = "coq-simple-io";
inherit version;
defaultVersion = if versions.range "8.7" "8.13" coq.coq-version then "1.3.0" else null;
defaultVersion = with versions; switch coq.coq-version [
{ case = range "8.11" "8.15"; out = "1.7.0"; }
{ case = range "8.7" "8.13"; out = "1.3.0"; }
] null;
release."1.7.0".sha256 = "sha256:1a1q9x2abx71hqvjdai3n12jxzd49mhf3nqqh3ya2ssl2lj609ci";
release."1.3.0".sha256 = "1yp7ca36jyl9kz35ghxig45x6cd0bny2bpmy058359p94wc617ax";
extraNativeBuildInputs = (with coq.ocamlPackages; [ ocaml ocamlbuild ]);
propagatedBuildInputs = [ coq-ext-lib ];
extraNativeBuildInputs = (with coq.ocamlPackages; [ cppo zarith ]);
propagatedBuildInputs = [ coq-ext-lib ]
++ (with coq.ocamlPackages; [ ocaml ocamlbuild ]);
mlPlugin = true;
doCheck = true;
checkTarget = "test";

@ -39,6 +39,8 @@ in mkDerivation {
inherit version src;
disabledForGRafter = "3.9";
outputs = [ "out" "dev" ];
buildInputs = [
log4cpp
mpir

@ -0,0 +1,27 @@
{ lib, stdenv, fetchMavenArtifact }:
stdenv.mkDerivation rec {
pname = "liquibase-redshift-extension";
version = "4.8.0";
src = fetchMavenArtifact {
artifactId = "liquibase-redshift";
groupId = "org.liquibase.ext";
sha256 = "sha256-jZdDKAC4Cvmkih8VH84Z3Q8BzsqGO55Uefr8vOlbDAk=";
inherit version;
};
installPhase = ''
runHook preInstall
install -m444 -D $src/share/java/liquibase-redshift-${version}.jar $out/share/java/liquibase-redshift.jar
runHook postInstall
'';
meta = with lib; {
homepage = "https://github.com/liquibase/liquibase-redshift/";
description = "Amazon Redshift extension for Liquibase";
license = licenses.asl20;
platforms = platforms.unix;
maintainers = with maintainers; [ sir4ur0n ];
};
}

@ -0,0 +1,28 @@
{ lib, stdenv, fetchMavenArtifact }:
stdenv.mkDerivation rec {
pname = "redshift-jdbc";
version = "2.1.0.3";
src = fetchMavenArtifact {
artifactId = "redshift-jdbc42";
groupId = "com.amazon.redshift";
sha256 = "sha256-TO/JXh/pZ7tUZGfHqkzgZx18gLnISvnPVyGavzFv6vo=";
inherit version;
};
installPhase = ''
runHook preInstall
install -m444 -D $src/share/java/redshift-jdbc42-${version}.jar $out/share/java/redshift-jdbc42.jar
runHook postInstall
'';
meta = with lib; {
homepage = "https://github.com/aws/amazon-redshift-jdbc-driver/";
description =
"JDBC 4.2 driver for Amazon Redshift allowing Java programs to connect to a Redshift database";
license = licenses.asl20;
platforms = platforms.unix;
maintainers = with maintainers; [ sir4ur0n ];
};
}

@ -78,5 +78,6 @@ stdenv.mkDerivation rec {
license = lib.licenses.mit;
maintainers = [ lib.maintainers.marcweber ];
platforms = with lib.platforms; linux ++ darwin;
broken = stdenv.isLinux; #r2000.cpp:824:13: error: expected primary-expression before '}' token
};
}

@ -62,7 +62,7 @@ in
stdenv.mkDerivation rec {
pname = "gtk4";
version = "4.6.2";
version = "4.6.3";
outputs = [ "out" "dev" ] ++ lib.optionals x11Support [ "devdoc" ];
outputBin = "dev";
@ -74,7 +74,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "mirror://gnome/sources/gtk/${lib.versions.majorMinor version}/gtk-${version}.tar.xz";
sha256 = "/yY69gmlDrdgVmU1ktkpRZrvSBmkRMQ29tUsb2PB+uw=";
sha256 = "pXrNDkSCmBcA/fhllsdBPLYe9H915HR/2oCegjG42Ww=";
};
nativeBuildInputs = [

@ -10,13 +10,13 @@ let
in
stdenv.mkDerivation rec {
pname = "gusb";
version = "0.3.7";
version = "0.3.10";
outputs = [ "bin" "out" "dev" "devdoc" ];
src = fetchurl {
url = "https://people.freedesktop.org/~hughsient/releases/libgusb-${version}.tar.xz";
sha256 = "sha256-2l8l1oc2ImibM1FIbL4CjvwlRAP2Rt2BIl3+hULYxn0=";
sha256 = "sha256-DrC5qw+LugxZYxyAnDe2Fu806zyOAAsLm3HPEeSTG9w=";
};
patches = [

@ -1,4 +1,5 @@
{ lib, stdenv
{ stdenv
, lib
, fetchFromGitHub
, docbook_xml_dtd_43
, docbook-xsl-nons
@ -18,7 +19,7 @@
stdenv.mkDerivation rec {
pname = "libjcat";
version = "0.1.10";
version = "0.1.11";
outputs = [ "bin" "out" "dev" "devdoc" "man" "installedTests" ];
@ -26,7 +27,7 @@ stdenv.mkDerivation rec {
owner = "hughsie";
repo = "libjcat";
rev = version;
sha256 = "sha256-6fqcP8LWvRoDf5gJz+kW0w5+3PP/luuoPMak1QLKzzM=";
sha256 = "2kdoOwgaLpo/Cp3wkCMgdyQ++BC3Cn7CRhXhVCHn/iM=";
};
patches = [

@ -1,20 +1,21 @@
{ lib, mkDerivation, fetchgit, cmake, pkg-config
, marisa, qtlocation }:
{ lib, mkDerivation, fetchFromGitHub, cmake, pkg-config
, marisa, qttools, qtlocation }:
mkDerivation rec {
pname = "libosmscout";
version = "2017.06.30";
version = "2022.04.25";
src = fetchgit {
url = "git://git.code.sf.net/p/libosmscout/code";
rev = "0c0fde4d9803539c99911389bc918377a93f350c";
sha256 = "1pa459h52kw88mvsdvkz83f4p35vvgsfy2qfjwcj61gj4y9d2rq4";
src = fetchFromGitHub {
owner = "Framstag";
repo = "libosmscout";
rev = "4c3b28472864b8e9cdda80a05ec73ef22cb39323";
sha256 = "sha256-Qe5TkF4BwlsEI7emC0gdc7SmS4QrSGLiO0QdjuJA09g=";
};
cmakeFlags = [ "-DOSMSCOUT_BUILD_TESTS=OFF" ];
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ marisa qtlocation ];
buildInputs = [ marisa qttools qtlocation ];
meta = with lib; {
description = "Simple, high-level interfaces for offline location and POI lokup, rendering and routing functionalities based on OpenStreetMap (OSM) data";

@ -1,9 +1,8 @@
{ stdenv
, lib
, fetchFromGitHub
, fetchpatch
, docbook_xml_dtd_43
, docbook_xsl
, docbook-xsl-nons
, glib
, gobject-introspection
, gtk-doc
@ -18,7 +17,7 @@
stdenv.mkDerivation rec {
pname = "libxmlb";
version = "0.3.7";
version = "0.3.8";
outputs = [ "out" "lib" "dev" "devdoc" "installedTests" ];
@ -26,23 +25,16 @@ stdenv.mkDerivation rec {
owner = "hughsie";
repo = "libxmlb";
rev = version;
sha256 = "sha256-ZzA1YJYxTR91X79NU9dWd11Ze+PX2wuZeumuEuNdC48=";
sha256 = "vT/NGFDzP0ut+TKD8pYVQrjTkepzKEJUo3uKF4MX334=";
};
patches = [
./installed-tests-path.patch
# Fix darwin build, can be removed on next release
# `--version-script` isn't supported by the macOS linker
# https://github.com/hughsie/libxmlb/pull/119
(fetchpatch {
url = "https://github.com/hughsie/libxmlb/commit/d83aac5bd78cfbbfa2ecd428ff54b811071dfe4d.patch";
sha256 = "sha256-UNRMbyNzdxfTZ8xV6J8a622hPnr3mowooP1q8Dg19yw=";
})
];
nativeBuildInputs = [
docbook_xml_dtd_43
docbook_xsl
docbook-xsl-nons
gobject-introspection
gtk-doc
meson

@ -5,13 +5,13 @@
stdenv.mkDerivation rec {
pname = "nghttp3";
version = "unstable-2022-04-10";
version = "0.4.0";
src = fetchFromGitHub {
owner = "ngtcp2";
repo = pname;
rev = "1e4bef2cc45b1fd3971ca3606d08a1e1d1567b1a";
sha256 = "sha256-DHNxtu4X0S8l1ADwRJC3yQ+Z1ja3FT0Zb/boRh6PvYw=";
rev = "v${version}";
sha256 = "sha256-toGTkgJLdSLNWCPJFpT63IxF3xANbvtkhJo5NUg/ZBg=";
};
nativeBuildInputs = [ autoreconfHook pkg-config file ];

@ -7,13 +7,13 @@
stdenv.mkDerivation rec {
pname = "ngtcp2";
version = "unstable-2022-04-11";
version = "0.4.0";
src = fetchFromGitHub {
owner = "ngtcp2";
repo = pname;
rev = "825899c051ea2a1f06a0c4617f41782f37009a18";
sha256 = "sha256-VoSy0tyIXWNTmcVdsaiM9ijXLq41AOaPBajvsEIrfjo=";
rev = "v${version}";
sha256 = "sha256-nmVVK2lpz01hgSxPAMmBfF+nNVZu9PWRGzCWh/5yhj8=";
};
nativeBuildInputs = [ autoreconfHook pkg-config file ];

@ -21,13 +21,13 @@
stdenv.mkDerivation rec {
pname = "opendht";
version = "2.3.5";
version = "2.4.0";
src = fetchFromGitHub {
owner = "savoirfairelinux";
repo = "opendht";
rev = version;
sha256 = "sha256-GGaq8ziOCUDMxILq2QYUkSP4usBjbufbHwQF4Pr6hHw=";
sha256 = "sha256-vfMzUzTfz8G+E4W/1pX5v2P0RntgSTR61urmxtsrOWM=";
};
nativeBuildInputs = [

@ -7,36 +7,43 @@
, libtiff
, curl
, gtest
, nlohmann_json
}:
stdenv.mkDerivation rec {
pname = "proj";
version = "8.2.1";
version = "9.0.0";
src = fetchFromGitHub {
owner = "OSGeo";
repo = "PROJ";
rev = version;
hash = "sha256-tnaIqYKgYHY1Tg33jsKYn9QL8YUobgXKbQsodoCXNys=";
sha256 = "sha256-zMP+WzC65BFz8g8mF5t7toqxmxCJePysd6WJuqpe8yg=";
};
outputs = [ "out" "dev"];
outputs = [ "out" "dev" ];
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ sqlite libtiff curl ];
buildInputs = [ sqlite libtiff curl nlohmann_json ];
checkInputs = [ gtest ];
cmakeFlags = [
"-DUSE_EXTERNAL_GTEST=ON"
"-DRUN_NETWORK_DEPENDENT_TESTS=OFF"
"-DNLOHMANN_JSON_ORIGIN=external"
];
preCheck = ''
export HOME=$TMPDIR
export TMP=$TMPDIR
'';
preCheck =
let
libPathEnvVar = if stdenv.isDarwin then "DYLD_LIBRARY_PATH" else "LD_LIBRARY_PATH";
in
''
export HOME=$TMPDIR
export TMP=$TMPDIR
export ${libPathEnvVar}=$PWD/lib
'';
doCheck = true;

@ -4,6 +4,8 @@ stdenv.mkDerivation rec {
pname = "qwt";
version = "6.2.0";
outputs = [ "out" "dev" ];
src = fetchurl {
url = "mirror://sourceforge/qwt/qwt-${version}.tar.bz2";
sha256 = "sha256-kZT2UTlV0P1zAPZxWBdQZEYBl6urGpL6EnpnpLC3FTA=";

@ -15,13 +15,13 @@
stdenv.mkDerivation rec {
pname = "indilib";
version = "1.9.4";
version = "1.9.5";
src = fetchFromGitHub {
owner = "indilib";
repo = "indi";
rev = "v${version}";
sha256 = "sha256-U3Q0WUEDRn0zfBIdHXFp5Zcaf+M6HrSFnpeu5aAkjks=";
sha256 = "sha256-mj9rnPn85Fbc7Y8qRndqPVANzBrk3al+vDJagLTDJ04=";
};
nativeBuildInputs = [

@ -9,6 +9,7 @@
, buildPackages
, docSupport ? true
, doxygen ? null
, graphviz ? null
}:
assert docSupport -> doxygen != null;
@ -16,13 +17,13 @@ assert docSupport -> doxygen != null;
with lib;
stdenv.mkDerivation rec {
pname = "waylandpp";
version = "0.2.9";
version = "0.2.10";
src = fetchFromGitHub {
owner = "NilsBrause";
repo = pname;
rev = version;
sha256 = "sha256-c7sayJjQaqJWso2enESBx6OUW9vxxsfuHFolYDIYlXw=";
sha256 = "sha256-5/u6tp7/E4tjSfX+QJFmcUYdnyOgl9rB79PDE/SJH1o=";
};
cmakeFlags = [
@ -31,7 +32,7 @@ stdenv.mkDerivation rec {
"-DWAYLAND_SCANNERPP=${buildPackages.waylandpp}/bin/wayland-scanner++"
];
nativeBuildInputs = [ cmake pkg-config ] ++ optional docSupport doxygen;
nativeBuildInputs = [ cmake pkg-config ] ++ optionals docSupport [ doxygen graphviz ];
buildInputs = [ pugixml wayland libGL libffi ];
outputs = [ "bin" "dev" "lib" "out" ] ++ optionals docSupport [ "doc" "devman" ];

@ -65,7 +65,7 @@
stdenv.mkDerivation rec {
pname = "webkitgtk";
version = "2.36.0";
version = "2.36.1";
outputs = [ "out" "dev" ];
@ -73,7 +73,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "https://webkitgtk.org/releases/${pname}-${version}.tar.xz";
sha256 = "sha256-uHfMofEFI19d1Xx6wrLCvjxraR/0RPk5JcclTPFWxk0=";
sha256 = "sha256-AUnqX7HSDyqZgWd9RclSoEczAAHqJKjcKQNSOfEsDI8=";
};
patches = lib.optionals stdenv.isLinux [

@ -0,0 +1 @@
imported.nix linguist-vendored

@ -0,0 +1,3 @@
result
*.sqlite
*.fasl

@ -0,0 +1,197 @@
## The API
This page documents the Nix API of nix-cl.
## Overview
The core API functions are `build-asdf-system` and
`lispWithPackagesInternal`.
They are considered more low-level that the rest of the API, which
builds on top of them to provide a more convenient interface with sane
defaults.
The higher-level API provides a lot of pre-configured packages,
including all of Quicklisp, and consists of the functions:
- `lispPackagesFor`
- `lispWithPackages`
Finally, there are functions that provide pre-defined Lisps, for
people who don't need to customize that:
- `abclPackages`, `eclPackages`, `cclPackages`, `claspPackages`, `sbclPackages`
- `abclWithPackages`, `eclWithPackages`, `cclWithPackages`, `claspWithPackages`, `sbclWithPackages`
The following is an attempt to document all of this.
## Packaging systems - `build-asdf-system`
Packages are declared using `build-asdf-system`. This function takes
the following arguments and returns a `derivation`.
#### Required arguments
##### `pname`
Name of the package/library
##### `version`
Version of the package/library
##### `src`
Source of the package/library (`fetchzip`, `fetchgit`, `fetchhg` etc.)
##### `lisp`
This command must load the provided file (`$buildScript`) then exit
immediately. For example, SBCL's --script flag does just that.
#### Optional arguments
##### `patches ? []`
Patches to apply to the source code before compiling it. This is a
list of files.
##### `nativeLibs ? []`
Native libraries, will be appended to the library
path. (`pkgs.openssl` etc.)
##### `javaLibs ? []`
Java libraries for ABCL, will be appended to the class path.
##### `lispLibs ? []`
Lisp dependencies These must themselves be packages built with
`build-asdf-system`
##### `systems ? [ pname ]`
Some libraries have multiple systems under one project, for example,
[cffi] has `cffi-grovel`, `cffi-toolchain` etc. By default, only the
`pname` system is build.
`.asd's` not listed in `systems` are removed before saving the library
to the Nix store. This prevents ASDF from referring to uncompiled
systems on run time.
Also useful when the `pname` is differrent than the system name, such
as when using [reverse domain naming]. (see `jzon` ->
`com.inuoe.jzon`)
[cffi]: https://cffi.common-lisp.dev/
[reverse domain naming]: https://en.wikipedia.org/wiki/Reverse_domain_name_notation
##### `asds ? systems`
The .asd files that this package provides. By default, same as
`systems`.
#### Return value
A `derivation` that, when built, contains the sources and pre-compiled
FASL files (Lisp implementation dependent) alongside any other
artifacts generated during compilation.
#### Example
[bordeaux-threads.nix] contains a simple example of packaging
`alexandria` and `bordeaux-threads`.
[bordeaux-threads.nix]: /examples/bordeaux-threads.nix
## Building a Lisp with packages: `lispWithPackagesInternal`
Generators of Lisps configured to be able to `asdf:load-system`
pre-compiled libraries on run-time are built with
`lispWithPackagesInternal`.
#### Required Arguments
##### `clpkgs`
An attribute set of `derivation`s returned by `build-asdf-system`
#### Return value
`lispWithPackagesInternal` returns a function that takes one argument:
a function `(lambda (clpkgs) packages)`, that, given a set of
packages, returns a list of package `derivation`s to be included in
the closure.
#### Example
The [sbcl-with-bt.nix] example creates a runnable Lisp where the
`bordeaux-threads` defined in the previous section is precompiled and
loadable via `asdf:load-system`:
[sbcl-with-bt.nix]: /examples/sbcl-with-bt.nix
## Reusing pre-packaged Lisp libraries: `lispPackagesFor`
`lispPackagesFor` is a higher level version of
`lispPackagesForInternal`: it only takes one argument - a Lisp command
to use for compiling packages. It then provides a bunch of ready to
use packages.
#### Required Arguments
##### `lisp`
The Lisp command to use in calls to `build-asdf-system` while building
the library-provided Lisp package declarations.
#### Return value
A set of packages built with `build-asdf-system`.
#### Example
The [abcl-package-set.nix] example generates a set of thousands of packages for ABCL.
[abcl-package-set.nix]: /examples/abcl-package-set.nix
## Reusing pre-packaged Lisp libraries, part 2: `lispWithPackages`
This is simply a helper function to avoid having to call
`lispPackagesFor` if all you want is a Lisp-with-packages wrapper.
#### Required Arguments
##### `lisp`
The Lisp command to pass to `lispPackagesFor` in order for it to
generate a package set. That set is then passed to
`lispWithPackagesInternal`.
#### Return value
A Lisp-with-packages function (see sections above).
#### Example
The [abcl-with-packages.nix] example creates an `abclWithPackages` function.
[abcl-with-packages.nix]: /examples/abcl-with-packages.nix
## Using the default Lisp implementations
This is the easiest way to get going with `nix-cl` in general. Choose
the CL implementation of interest and a set of libraries, and get a
lisp-with-packages wrapper with those libraries pre-compiled.
#### `abclPackages`, `eclPackages`, `cclPackages`, `claspPackages`, `sbclPackages`
Ready to use package sets.
#### `abclWithPackages`, `eclWithPackages`, `cclWithPackages`, `claspWithPackages`, `sbclWithPackages`
Ready to use wrapper generators.
#### Example
For example, to open a shell with SBCL + hunchentoot + sqlite in PATH:
```
nix-shell -p 'with import ./. {}; sbclWithPackages (ps: [ ps.hunchentoot ps.sqlite ])'
```

@ -0,0 +1,98 @@
## Use cases
This page lists some possible use cases for nix-cl.
## Pinning down the exact commits of libraries
Sometimes, a bug is fixed upstream but is not yet available in package
repositories such as Quicklisp or Ultralisp. The users have to wait
for the repository maintainer to update it, or download and compile
the patched sources themselves.
This is a manual and hard to reproduce process. By leveraging Nix,
users of `nix-cl` can essentially "run their own package repository",
written as Nix code, with all the benefits of that (shareability,
cacheability, reproducibility, version-controllable etc.)
## Modifying libraries with patches
Other times, a bug in a library is not fixed upstream, but you fixed
it yourself. Or, you would like a change to the internals that the
maintainers don't like.
Sure, you could fork the code or maintain patches manually, but that
becomes hard to manage with a lot of patches. It also doesn't have the
benefits mentioned in the previous section.
`nix-cl` provides a way of applying version-controlled patches to any
package.
## Using libraries not available in repositories
There are useful and working libraries out there, that are nontheless
unavailable to users of package managers such as Quicklisp or
Ultralisp. Two real-world examples are [jzon] and [cl-tar].
`nix-cl` is not tied to any particular package source: instead,
packages are written as a Nix expression, which can be done manually
or generated/imported.
This frees the user to have any package they want, and not be
constrained by a central repository.
## Reproducible environments
The usual way to develop a project involves several steps, such as:
1. Installing a Lisp implementation
2. Installing a package manager
3. Installing the chosen libraries
This is not necessarily reproducible. It's unlikely to come back a
year later and develop the project using the exact same versions of
the dependencies.
Things can break between attempts at different points in time. The
repository could have updated versions in the meantime. The source
tarballs could become unreachable.
With `nix-cl` you can have your own binary cache for Lisp libraries
and not be affected by downtime of other central repositories.
## Testing across CL implementations
One can manually download different Lisp implementations and run tests
of a package. This works well in most cases, but it is limited in how
you can tweak the software. Some practical examples are:
- Statically compiling [zlib] into [SBCL]
- Building SBCL with the `--fancy` flag
- Compiling [ECL] as a static library
These are usually hard to do manually, unless you have the necessary
compilers already configured. These combinations are usually not
available from package managers as well.
With Nix it's easier, because it will set up the build environment
automatically. It could be useful to, for example:
- Test against all possible compiler flag combinations
- Libc versions (ECL)
- JDK versions ([ABCL])
[zlib]: https://zlib.net
[SBCL]: https://sbcl.org
[ECL]: https://ecl.common-lisp.dev/
[Ultralisp]: https://ultralisp.org/
[jzon]: https://github.com/Zulu-Inuoe/jzon
[cl-tar]: https://gitlab.common-lisp.net/cl-tar/cl-tar
[bootstrap tools]: https://github.com/NixOS/nixpkgs/tree/master/pkgs/stdenv/linux/bootstrap-files
[nixpkgs]: https://github.com/NixOS/nixpkgs
## Windows note
Note that all of this still only applies to Unix systems - primarily because Nix doesn't work on Windows.
If you have an idea how to port some of the functionality to Windows, get in touch.

@ -0,0 +1,54 @@
## Importing package definitions from Quicklisp
This page documents how to import packages from Quicklisp.
## Nix dumper
Run:
```
$ nix-shell
$ sbcl --script ql-import.lisp
```
This command runs a program that dumps a `imported.nix` file
containing Nix expressions for all packages in Quicklisp. They will be
automatically picked up by the `lispPackagesFor` and
`lispWithPackages` API functions.
It also creates a 'packages.sqlite' file. It's used during the
generation of the 'imported.nix' file and can be safely removed. It
contains the full information of Quicklisp packages, so you can use it
to query the dependency graphs using SQL, if you're interested.
## Tarball hashes
The Nix dumper program will re-use hashes from "imported.nix" if it
detects that it's being run for the first time. This saves a lot of
bandwidth by not having to download each tarball again.
But when upgrading the Quicklisp release URL, this can take a while
because it needs to fetch the source code of each new system to
compute its SHA256 hash. This is because Quicklisp only provides a
SHA1 , and Nix's `builtins.fetchTarball` requires a SHA256.
Later on, the hashes are cached in `packages.sqlite`, and are reused
in subsequent invocations. Therefore you might want to keep the
'packages.sqlite' file around if you'd like to keep hashes of
historical Quicklisp tarballs, for example for archival purposes.
## Choosing a Quicklisp release
Quicklisp release url's are currently hard-coded and can be changed
directly in the source code. See the `import` directory.
## Native and Java libraries
At the moment, native and Java libraries need to be added manually to
imported systems in `ql.nix` on an as-needed basis.
## Dependencies from packages.nix
Also worth noting is that systems imported from Quicklisp will prefer
packages from `packages.nix` as dependencies, so that custom versions
can be provided or broken versions replaced.

@ -0,0 +1,5 @@
## Quirks
- `+` in names are converted to `_plus{_,}`: `cl+ssl`->`cl_plus_ssl`, `alexandria+`->`alexandria_plus`
- `.` to `_dot_`: `iolib.base`->`iolib_dot_base`
- names starting with a number have a `_` prepended (`3d-vectors`->`_3d-vectors`)

@ -0,0 +1,24 @@
# To run this example from a nix repl, run:
# $ nix repl
# nix-repl> abcl-packages = import ./abcl-package-set.nix
# nix-repl> builtins.attrNames abcl-packages
# nix-repl> builtins.length (builtins.attrNames abcl-packages)
#
# The import returns a package set, which you can use for example to
# discover what packages are available in lispWithPackages:
#
# nix-repl> abcl-packages.cl-op<TAB>
# nix-repl> abcl-packages.cl-opengl
# nix-repl> # cool, we can use cl-opengl
# nix-repl> # some-abcl-with-packages (p: [ p.cl-opengl ])
let
pkgs = import ../../../../default.nix {};
abcl = "${pkgs.abcl}/bin/abcl --batch --load";
abcl-packages = pkgs.lispPackages_new.lispPackagesFor abcl;
in abcl-packages

@ -0,0 +1,23 @@
# To run this example from a nix repl, run:
# $ nix repl
# nix-repl> abcl-with-packages = import ./abcl-with-packages.nix
# nix-repl> :b abcl-with-packages (p: [ p.cffi ])
#
# The import returns a function, which you can call to get access to
# thousands of libraries, like, cffi. This works in ABCL by closing
# over the JNA dependency:
#
# nix-repl> awp = abcl-with-packages (p: [ p.cffi ])
# nix-repl> awp.CLASSPATH
# nix-repl> cffi = builtins.head (awp.lispLibs)
# nix-repl> cffi.javaLibs
let
pkgs = import ../../../../default.nix {};
abcl = "${pkgs.abcl}/bin/abcl --batch --load";
abcl-with-packages = pkgs.lispPackages_new.lispWithPackages abcl;
in abcl-with-packages

@ -0,0 +1,43 @@
# To run this example from the command line, run this command:
#
# $ nix-build ./bordeaux-threads.nix
# $ ls ./result/
#
# To run from a nix repl, run:
# $ nix repl
# nix-repl> bt = import ./bordeaux-threads.nix
# nix-repl> :b bt
#
# In the `result` directory you can find .fasl files of the
# bordeaux-threads library:
#
# $ ls -l ./result/src/
let
pkgs = import ../../../../default.nix {};
sbcl = "${pkgs.sbcl}/bin/sbcl --script";
alexandria = pkgs.lispPackages_new.build-asdf-system {
pname = "alexandria";
version = "v1.4";
src = pkgs.fetchzip {
url = "https://gitlab.common-lisp.net/alexandria/alexandria/-/archive/v1.4/alexandria-v1.4.tar.gz";
sha256 = "0r1adhvf98h0104vq14q7y99h0hsa8wqwqw92h7ghrjxmsvz2z6l";
};
lisp = sbcl;
};
bordeaux-threads = pkgs.lispPackages_new.build-asdf-system {
pname = "bordeaux-threads";
version = "0.8.8";
src = pkgs.fetchzip {
url = "http://github.com/sionescu/bordeaux-threads/archive/v0.8.8.tar.gz";
sha256 = "19i443fz3488v1pbbr9x24y8h8vlyhny9vj6c9jk5prm702awrp6";
};
lisp = sbcl;
lispLibs = [ alexandria ];
};
in bordeaux-threads

@ -0,0 +1,31 @@
# To run this example from the command line, run this command:
# $ nix-build ./sbcl-with-bt.nix
# $ ls ./result/
#
# To run from a nix repl, run:
# $ nix repl
# nix-repl> sbcl-bt = import ./sbcl-with-bt.nix
# nix-repl> :b sbcl-bt
#
# In the `result/bin` directory you can find an `sbcl` executable
# that, when started, is able to load the pre-compiled
# bordeaux-threads from the Nix store:
# $ ./result/bin/sbcl
# * (require :asdf)
# * (asdf:load-system :bordeaux-threads)
let
pkgs = import ../../../../default.nix {};
sbcl = "${pkgs.sbcl}/bin/sbcl --script";
bordeaux-threads = import ./bordeaux-threads.nix;
sbclPackages = { inherit bordeaux-threads; };
sbclWithPackages = pkgs.lispPackages_new.lispWithPackagesInternal sbclPackages;
sbcl-bt = sbclWithPackages (p: [ p.bordeaux-threads ]);
in sbcl-bt

@ -0,0 +1,18 @@
(defpackage org.lispbuilds.nix/api
(:documentation "Public interface of org.lispbuilds.nix")
(:use :cl)
(:export
:import-lisp-packages
:database->nix-expression))
(in-package org.lispbuilds.nix/api)
(defgeneric import-lisp-packages (repository database)
(:documentation
"Import Lisp packages (ASDF systems) from repository (Quicklisp,
Ultralisp etc.) into a package database."))
(defgeneric database->nix-expression (database outfile)
(:documentation
"Generate a nix expression from the package database and write it
into outfile."))

@ -0,0 +1,134 @@
(defpackage org.lispbuilds.nix/database/sqlite
(:use :cl)
(:import-from :str)
(:import-from :sqlite)
(:import-from :alexandria :read-file-into-string)
(:import-from :arrow-macros :->>)
(:import-from
:org.lispbuilds.nix/util
:replace-regexes)
(:import-from
:org.lispbuilds.nix/nix
:nix-eval
:system-master
:nixify-symbol
:make-pname
:*nix-attrs-depth*)
(:import-from
:org.lispbuilds.nix/api
:database->nix-expression)
(:export :sqlite-database :init-db)
(:local-nicknames
(:json :com.inuoe.jzon)))
(in-package org.lispbuilds.nix/database/sqlite)
(defclass sqlite-database ()
((url :initarg :url
:reader database-url
:initform (error "url required"))
(init-file :initarg :init-file
:reader init-file
:initform (error "init file required"))))
(defun init-db (db init-file)
(let ((statements (->> (read-file-into-string init-file)
(replace-regexes '(".*--.*") '(""))
(substitute #\Space #\Newline)
(str:collapse-whitespaces)
(str:split #\;)
(mapcar #'str:trim)
(remove-if #'str:emptyp))))
(sqlite:with-transaction db
(dolist (s statements)
(sqlite:execute-non-query db s)))))
;; Writing Nix
(defparameter prelude "
# This file was auto-generated by nix-quicklisp.lisp
{ runCommand, fetchzip, pkgs, ... }:
# Ensures that every non-slashy `system` exists in a unique .asd file.
# (Think cl-async-base being declared in cl-async.asd upstream)
#
# This is required because we're building and loading a system called
# `system`, not `asd`, so otherwise `system` would not be loadable
# without building and loading `asd` first.
#
let createAsd = { url, sha256, asd, system }:
let
src = fetchzip { inherit url sha256; };
in runCommand \"source\" {} ''
mkdir -pv $out
cp -r ${src}/* $out
find $out -name \"${asd}.asd\" | while read f; do mv -fv $f $(dirname $f)/${system}.asd || true; done
'';
getAttr = builtins.getAttr;
in {")
(defmethod database->nix-expression ((database sqlite-database) outfile)
(sqlite:with-open-database (db (database-url database))
(with-open-file (f outfile
:direction :output
:if-exists :supersede)
;; Fix known problematic packages before dumping the nix file.
(sqlite:execute-non-query db
"create temp table fixed_systems as select * from system_view")
(sqlite:execute-non-query db
"alter table fixed_systems add column systems")
(sqlite:execute-non-query db
"update fixed_systems set systems = json_array(name)")
(sqlite:execute-non-query db
"alter table fixed_systems add column asds")
(sqlite:execute-non-query db
"update fixed_systems set asds = json_array(name)")
(format f prelude)
(dolist (p (sqlite:execute-to-list db "select * from fixed_systems"))
(destructuring-bind (name version asd url sha256 deps systems asds) p
(format f "~% ")
(let ((*nix-attrs-depth* 1))
(format
f
"~a = ~a;"
(nix-eval `(:symbol ,name))
(nix-eval
`(:attrs
("pname" (:string ,(make-pname name)))
("version" (:string ,version))
("asds" (:list
,@(mapcar (lambda (asd)
`(:string ,(system-master asd)))
(coerce (json:parse asds) 'list))))
("src" (:funcall
"createAsd"
(:attrs
("url" (:string ,url))
("sha256" (:string ,sha256))
("system" (:string ,(system-master name)))
("asd" (:string ,asd)))))
("systems" (:list
,@(mapcar (lambda (sys)
`(:string ,sys))
(coerce (json:parse systems) 'list))))
("lispLibs" (:list
,@(mapcar (lambda (dep)
`(:funcall
"getAttr"
(:string ,(nixify-symbol dep))
(:symbol "pkgs")))
(remove "asdf"
(str:split-omit-nulls #\, deps)
:test #'string=))))))))))
(format f "~%}~%"))))

@ -0,0 +1,41 @@
CREATE TABLE IF NOT EXISTS sha256 (
id integer PRIMARY KEY AUTOINCREMENT,
url text UNIQUE,
hash text NOT NULL,
created real DEFAULT (julianday('now'))
);
CREATE TABLE IF NOT EXISTS system (
id integer PRIMARY KEY AUTOINCREMENT,
name text NOT NULL,
version text NOT NULL,
asd text NOT NULL,
created real DEFAULT (julianday('now')),
UNIQUE(name, version)
);
CREATE TABLE IF NOT EXISTS dep (
system_id integer NOT NULL REFERENCES system(id),
dep_id integer NOT NULL REFERENCES system(id),
PRIMARY KEY (system_id, dep_id)
);
CREATE TABLE IF NOT EXISTS src (
sha256_id integer REFERENCES sha256(id),
system_id integer UNIQUE REFERENCES system(id)
);
DROP VIEW IF EXISTS system_view;
CREATE VIEW IF NOT EXISTS system_view AS
SELECT
sys.name,
sys.version,
sys.asd,
sha.url,
sha.hash,
group_concat((SELECT name FROM system WHERE id = dep.dep_id)) as deps
FROM system sys
JOIN src ON src.system_id = sys.id
JOIN sha256 sha ON sha.id = src.sha256_id
LEFT JOIN dep ON dep.system_id = sys.id
GROUP BY sys.name;

@ -0,0 +1,40 @@
(defpackage org.lispbuilds.nix/main
(:use :common-lisp
:org.lispbuilds.nix/database/sqlite
:org.lispbuilds.nix/repository/quicklisp
:org.lispbuilds.nix/api))
(in-package org.lispbuilds.nix/main)
(defun resource (name type)
(make-pathname
:defaults (asdf:system-source-directory :org.lispbuilds.nix)
:name name
:type type))
(defvar *sqlite*
(make-instance
'sqlite-database
:init-file (resource "init" "sql")
:url "packages.sqlite"))
(defvar *quicklisp*
(make-instance
'quicklisp-repository
:dist-url
"https://beta.quicklisp.org/dist/quicklisp/2021-12-30/"))
(defun run-importers ()
(import-lisp-packages *quicklisp* *sqlite*)
(format t "Imported packages from quicklisp to ~A~%"
(truename "packages.sqlite")))
(defun gen-nix-file ()
(database->nix-expression *sqlite* "imported.nix")
(format t "Dumped nix file to ~a~%"
(truename "imported.nix")))
(defun main ()
(format t "~%")
(run-importers)
(gen-nix-file))

@ -0,0 +1,81 @@
(defpackage org.lispbuilds.nix/nix
(:documentation "Utilities for generating Nix code")
(:use :cl)
(:import-from :str)
(:import-from :ppcre)
(:import-from :arrow-macros :->>)
(:import-from :org.lispbuilds.nix/util :replace-regexes)
(:export
:nix-eval
:system-master
:nixify-symbol
:make-pname
:*nix-attrs-depth*))
(in-package org.lispbuilds.nix/nix)
;; Path names are alphanumeric and can include the symbols +-._?= and
;; must not begin with a period.
(defun make-pname (string)
(replace-regexes '("^[.]" "[^a-zA-Z0-9+-._?=]")
'("_" "_")
string))
(defun system-master (system)
(first (str:split "/" system)))
;;;; Nix generation
(defun nix-eval (exp)
(assert (consp exp))
(ecase (car exp)
(:string (nix-string (cadr exp)))
(:list (apply #'nix-list (rest exp)))
(:funcall (apply #'nix-funcall (rest exp)))
(:attrs (nix-attrs (cdr exp)))
(:merge (apply #'nix-merge (cdr exp)))
(:symbol (nix-symbol (cadr exp)))))
(defun nix-string (object)
(format nil "\"~a\"" object))
(defun nixify-symbol (string)
(flet ((fix-special-chars (str)
(replace-regexes '("[+]$" "[+][/]" "[+]" "[.]" "[/]")
'("_plus" "_plus/" "_plus_" "_dot_" "_slash_")
str)))
(if (ppcre:scan "^[0-9]" string)
(str:concat "_" (fix-special-chars string))
(fix-special-chars string))))
(defun nix-symbol (object)
(nixify-symbol (format nil "~a" object)))
(defun nix-list (&rest things)
(format nil "[ ~{~A~^ ~} ]" (mapcar 'nix-eval things)))
(defvar *nix-attrs-depth* 0)
(defun nix-attrs (keyvals)
(let ((*nix-attrs-depth* (1+ *nix-attrs-depth*)))
(format
nil
(->> "{~%*depth*~{~{~A = ~A;~}~^~%*depth*~}~%*depth-1*}"
(str:replace-all "*depth*" (str:repeat *nix-attrs-depth* " "))
(str:replace-all "*depth-1*" (str:repeat (1- *nix-attrs-depth*) " ")))
(mapcar (lambda (keyval)
(let ((key (car keyval))
(val (cadr keyval)))
(list (nix-symbol key)
(nix-eval val))))
keyvals))))
(defun nix-funcall (fun &rest args)
(format nil "(~a ~{~a~^ ~})"
(nixify-symbol fun)
(mapcar 'nix-eval args)))
(defun nix-merge (a b)
(format nil "(~a // ~b)"
(nix-eval a)
(nix-eval b)))

@ -0,0 +1,24 @@
(defsystem org.lispbuilds.nix
:class :package-inferred-system
:description "Utilities for importing ASDF systems into Nix"
:depends-on (
:alexandria
:str
:cl-ppcre
:sqlite
:dexador
:arrow-macros
:com.inuoe.jzon
:org.lispbuilds.nix/api
:org.lispbuilds.nix/repository/quicklisp
:org.lispbuilds.nix/database/sqlite
))
(register-system-packages
"cl-ppcre"
'(:ppcre))
(register-system-packages
"dexador"
'(:dex))

@ -0,0 +1,199 @@
(defpackage org.lispbuilds.nix/repository/quicklisp
(:use :cl)
(:import-from :dex)
(:import-from :alexandria :read-file-into-string :ensure-list)
(:import-from :arrow-macros :->>)
(:import-from :str)
(:import-from
:org.lispbuilds.nix/database/sqlite
:sqlite-database
:init-db
:database-url
:init-file)
(:import-from
:org.lispbuilds.nix/api
:import-lisp-packages)
(:import-from
:org.lispbuilds.nix/util
:replace-regexes)
(:export :quicklisp-repository)
(:local-nicknames
(:json :com.inuoe.jzon)))
(in-package org.lispbuilds.nix/repository/quicklisp)
(defclass quicklisp-repository ()
((dist-url :initarg :dist-url
:reader dist-url
:initform (error "dist url required"))))
(defun clear-line ()
(write-char #\Return *error-output*)
(write-char #\Escape *error-output*)
(write-char #\[ *error-output*)
(write-char #\K *error-output*))
(defun status (&rest format-args)
(clear-line)
(apply #'format (list* *error-output* format-args))
(force-output *error-output*))
;; TODO: This should not know about the imported.nix file.
(defun init-tarball-hashes (database)
(status "no packages.sqlite - will pre-fill tarball hashes from ~A to save time~%"
(truename "imported.nix"))
(let* ((lines (uiop:read-file-lines "imported.nix"))
(lines (remove-if-not
(lambda (line)
(let ((trimmed (str:trim-left line)))
(or (str:starts-with-p "url = " trimmed)
(str:starts-with-p "sha256 = " trimmed))))
lines))
(lines (mapcar
(lambda (line)
(multiple-value-bind (whole groups)
(ppcre:scan-to-strings "\"\(.*\)\"" line)
(declare (ignore whole))
(svref groups 0)))
lines)))
(sqlite:with-open-database (db (database-url database))
(init-db db (init-file database))
(sqlite:with-transaction db
(loop while lines do
(sqlite:execute-non-query db
"insert or ignore into sha256(url,hash) values (?,?)"
(prog1 (first lines) (setf lines (rest lines)))
(prog1 (first lines) (setf lines (rest lines))))))
(status "OK, imported ~A hashes into DB.~%"
(sqlite:execute-single db
"select count(*) from sha256")))))
(defmethod import-lisp-packages ((repository quicklisp-repository)
(database sqlite-database))
;; If packages.sqlite is missing, we should populate the sha256
;; table to speed things up.
(unless (probe-file (database-url database))
(init-tarball-hashes database))
(let* ((db (sqlite:connect (database-url database)))
(systems-url (str:concat (dist-url repository) "systems.txt"))
(releases-url (str:concat (dist-url repository) "releases.txt"))
(systems-lines (rest (butlast (str:split #\Newline (dex:get systems-url)))))
(releases-lines (rest (butlast (str:split #\Newline (dex:get releases-url))))))
(flet ((sql-query (sql &rest params)
(apply #'sqlite:execute-to-list (list* db sql params))))
;; Ensure database schema
(init-db db (init-file database))
;; Prepare temporary tables for efficient access
(sql-query "create temp table if not exists quicklisp_system
(project, asd, name unique, deps)")
(sql-query "create temp table if not exists quicklisp_release
(project unique, url, size, md5, sha1, prefix not null, asds)")
(sqlite:with-transaction db
(dolist (line systems-lines)
(destructuring-bind (project asd name &rest deps)
(str:words line)
(sql-query
"insert or ignore into quicklisp_system values(?,?,?,?)"
project asd name (json:stringify (coerce deps 'vector))))))
(sqlite:with-transaction db
(dolist (line releases-lines)
(destructuring-bind (project url size md5 sha1 prefix &rest asds)
(str:words line)
(sql-query
"insert or ignore into quicklisp_release values(?,?,?,?,?,?,?)"
project url size md5 sha1 prefix (json:stringify (coerce
asds
'vector))))))
(sqlite:with-transaction db
;; Should these be temp tables, that then get queried by
;; system name? This looks like it uses a lot of memory.
(let ((systems
(sql-query
"with pkg as (
select
name, asd, url, deps,
ltrim(replace(prefix, r.project, ''), '-_') as version
from quicklisp_system s, quicklisp_release r
where s.project = r.project
)
select
name, version, asd, url,
(select json_group_array(
json_array(value, (select version from pkg where name=value))
)
from json_each(deps)) as deps
from pkg"
)))
;; First pass: insert system and source tarball informaton.
;; Can't insert dependency information, because this works
;; on system ids in the database and they don't exist
;; yet. Could it be better to just base dependencies on
;; names? But then ACID is lost.
(dolist (system systems)
(destructuring-bind (name version asd url deps) system
(declare (ignore deps))
(status "importing system '~a-~a'" name version)
(let ((hash (nix-prefetch-tarball url db)))
(sql-query
"insert or ignore into system(name,version,asd) values (?,?,?)"
name version asd)
(sql-query
"insert or ignore into sha256(url,hash) values (?,?)"
url hash)
(sql-query
"insert or ignore into src values
((select id from sha256 where url=?),
(select id from system where name=? and version=?))"
url name version))))
;; Second pass: connect the in-database systems with
;; dependency information
(dolist (system systems)
(destructuring-bind (name version asd url deps) system
(declare (ignore asd url))
(dolist (dep (coerce (json:parse deps) 'list))
(destructuring-bind (dep-name dep-version) (coerce dep 'list)
(if (eql dep-version 'NULL)
(warn "Bad data in Quicklisp: ~a has no version" dep-name)
(sql-query
"insert or ignore into dep values
((select id from system where name=? and version=?),
(select id from system where name=? and version=?))"
name version
dep-name dep-version))))))))))
(write-char #\Newline *error-output*))
(defun shell-command-to-string (cmd)
;; Clearing the library path is needed to prevent a bug, where the
;; called subprocess uses a different glibc than the SBCL process
;; is. In that case, the call to execve attempts to load the
;; libraries used by SBCL from LD_LIBRARY_PATH using a different
;; glibc than they expect, which errors out.
(let ((ld-library-path (uiop:getenv "LD_LIBRARY_PATH")))
(setf (uiop:getenv "LD_LIBRARY_PATH") "")
(unwind-protect
(uiop:run-program cmd :output '(:string :stripped t))
(setf (uiop:getenv "LD_LIBRARY_PATH") ld-library-path))))
(defun nix-prefetch-tarball (url db)
(restart-case
(compute-sha256 url db)
(try-again ()
:report "Try downloading again"
(nix-prefetch-tarball url db))))
(defun compute-sha256 (url db)
(or (sqlite:execute-single db "select hash from sha256 where url=?" url)
(let ((sha256 (shell-command-to-string (str:concat "nix-prefetch-url --unpack " url))))
sha256)))

@ -0,0 +1,16 @@
(defpackage org.lispbuilds.nix/util
(:use :cl)
(:import-from :ppcre)
(:export
:replace-regexes))
(in-package org.lispbuilds.nix/util)
(defun replace-regexes (from to str)
(assert (= (length from) (length to)))
(if (null from)
str
(replace-regexes
(rest from)
(rest to)
(ppcre:regex-replace-all (first from) str (first to)))))

File diff suppressed because it is too large Load Diff

@ -0,0 +1,432 @@
# TODO:
# - faster build by using lisp with preloaded asdf?
# - dont include java libs unless abcl?
# - dont use build-asdf-system to build lispWithPackages?
# - make the lisp packages overridable? (e.g. buildInputs glibc->musl)
# - build asdf with nix and use that instead of one shipped with impls
# (e.g. to fix build with clisp - does anyone use clisp?)
# - claspPackages ? (gotta package clasp with nix first)
# - hard one: remove unrelated sources ( of systems not being built)
# - figure out a less awkward way to patch sources
# (have to build from src directly for SLIME to work, so can't just patch sources in place)
{ pkgs, lib, stdenv, ... }:
let
inherit (lib)
length
filter
foldl
unique
id
concat
concatMap
mutuallyExclusive
findFirst
remove
setAttr
getAttr
hasAttr
attrNames
attrValues
filterAttrs
mapAttrs
splitString
concatStringsSep
concatMapStringsSep
replaceStrings
removeSuffix
hasInfix
optionalString
makeLibraryPath
makeSearchPath
;
inherit (builtins)
head
tail
elem
split
storeDir;
# Returns a flattened dependency tree without duplicates
# This is probably causing performance problems...
flattenedDeps = lispLibs:
let
walk = acc: node:
if length node.lispLibs == 0
then acc
else foldl walk (acc ++ node.lispLibs) node.lispLibs;
in unique (walk [] { inherit lispLibs; });
# Stolen from python-packages.nix
# Actually no idea how this works
makeOverridableLispPackage = f: origArgs:
let
ff = f origArgs;
overrideWith = newArgs: origArgs // (if pkgs.lib.isFunction newArgs then newArgs origArgs else newArgs);
in
if builtins.isAttrs ff then (ff // {
overrideLispAttrs = newArgs: makeOverridableLispPackage f (overrideWith newArgs);
})
else if builtins.isFunction ff then {
overrideLispAttrs = newArgs: makeOverridableLispPackage f (overrideWith newArgs);
__functor = self: ff;
}
else ff;
#
# Wrapper around stdenv.mkDerivation for building ASDF systems.
#
build-asdf-system = makeOverridableLispPackage (
{ pname,
version,
src ? null,
patches ? [],
# Native libraries, will be appended to the library path
nativeLibs ? [],
# Java libraries for ABCL, will be appended to the class path
javaLibs ? [],
# Lisp dependencies
# these should be packages built with `build-asdf-system`
lispLibs ? [],
# Lisp command to run buildScript
lisp,
# Some libraries have multiple systems under one project, for
# example, cffi has cffi-grovel, cffi-toolchain etc. By
# default, only the `pname` system is build.
#
# .asd's not listed in `systems` are removed in
# installPhase. This prevents asdf from referring to uncompiled
# systems on run time.
#
# Also useful when the pname is differrent than the system name,
# such as when using reverse domain naming.
systems ? [ pname ],
# The .asd files that this package provides
asds ? systems,
# Other args to mkDerivation
...
} @ args:
let
# A little slow for big dependency graphs.
# How to make it faster?
# Maybe do it in the buildScript in Common Lisp or Bash, instead
# of here with Nix?
libsFlat = flattenedDeps lispLibs;
in stdenv.mkDerivation (rec {
inherit pname version nativeLibs javaLibs lispLibs lisp systems asds;
src = if builtins.length patches > 0
then apply-patches args
else args.src;
# When src is null, we are building a lispWithPackages and only
# want to make use of the dependency environment variables
# generated by build-asdf-system
dontUnpack = src == null;
# TODO: Do the propagation like for lisp, native and java like this:
# https://github.com/teu5us/nix-lisp-overlay/blob/e30dafafa5c1b9a5b0ccc9aaaef9d285d9f0c46b/pkgs/development/lisp-modules/setup-hook.sh
# Then remove the "echo >> nix-drvs" from buildScript
# Tell asdf where to find system definitions of lisp dependencies.
#
# The "//" ending is important as it makes asdf recurse into
# subdirectories when searching for .asd's. This is to support
# projects where .asd's aren't in the root directory.
CL_SOURCE_REGISTRY = makeSearchPath "/" libsFlat;
# Tell lisp where to find native dependencies
#
# Normally generated from lispLibs, but LD_LIBRARY_PATH as a
# derivation attr itself can be used as an extension point when
# the libs are not in a '/lib' subdirectory
LD_LIBRARY_PATH =
let
libs = concatMap (x: x.nativeLibs) libsFlat;
paths = filter (x: x != "") (map (x: x.LD_LIBRARY_PATH) libsFlat);
path =
makeLibraryPath libs
+ optionalString (length paths != 0) ":"
+ concatStringsSep ":" paths;
in concatStringsSep ":" (unique (splitString ":" path));
# Java libraries For ABCL
CLASSPATH = makeSearchPath "share/java/*" (concatMap (x: x.javaLibs) libsFlat);
# Portable script to build the systems.
#
# `lisp` must evaluate this file then exit immediately. For
# example, SBCL's --script flag does just that.
#
# NOTE:
# Every other library worked fine with asdf:compile-system in
# buildScript.
#
# cl-syslog, for some reason, signals that CL-SYSLOG::VALID-SD-ID-P
# is undefined with compile-system, but works perfectly with
# load-system. Strange.
buildScript = pkgs.writeText "build-${pname}.lisp" ''
(require :asdf)
(dolist (s '(${concatStringsSep " " systems}))
(asdf:load-system s))
'';
buildPhase = optionalString (src != null) ''
# In addition to lisp dependencies, make asdf see the .asd's
# of the systems being built
#
# *Append* src since `lispLibs` can provide .asd's that are
# also in `src` but are not in `systems` (that is, the .asd's
# that will be deleted in installPhase). We don't want to
# rebuild them, but to load them from lispLibs.
#
# NOTE: It's important to read files from `src` instead of
# from pwd to get go-to-definition working with SLIME
export CL_SOURCE_REGISTRY=$CL_SOURCE_REGISTRY:${src}//
# Similiarily for native deps
export LD_LIBRARY_PATH=${makeLibraryPath nativeLibs}:$LD_LIBRARY_PATH
export CLASSPATH=${makeSearchPath "share/java/*" javaLibs}:$CLASSPATH
# Make asdf compile from `src` to pwd and load `lispLibs`
# from storeDir. Otherwise it could try to recompile lisp deps.
export ASDF_OUTPUT_TRANSLATIONS="${src}:$(pwd):${storeDir}:${storeDir}"
# Make Nix track the dependencies so that graphs can be generated with
# nix-store -q --graph
echo "$lispLibs" >> nix-drvs
echo "$nativeLibs" >> nix-drvs
echo "$javaLibs" >> nix-drvs
# Finally, compile the systems
${lisp} $buildScript
'';
# Copy compiled files to store
#
# Make sure to include '$' in regex to prevent skipping
# stuff like 'iolib.asdf.asd' for system 'iolib.asd'
#
# Same with '/': `local-time.asd` for system `cl-postgres+local-time.asd`
installPhase =
let
mkSystemsRegex = systems:
concatMapStringsSep "\\|" (replaceStrings ["." "+"] ["[.]" "[+]"]) systems;
in
''
mkdir -pv $out
cp -r * $out
# Remove all .asd files except for those in `systems`.
find $out -name "*.asd" \
| grep -v "/\(${mkSystemsRegex systems}\)\.asd$" \
| xargs rm -fv || true
'';
# Not sure if it's needed, but caused problems with SBCL
# save-lisp-and-die binaries in the past
dontStrip = true;
dontFixup = true;
} // args));
# Need to do that because we always want to compile straight from
# `src` for go-to-definition to work in SLIME.
apply-patches = { patches, src, ... }:
stdenv.mkDerivation {
inherit patches src;
pname = "source";
version = "patched";
dontConfigure = true;
dontBuild = true;
dontStrip = true;
dontFixup = true;
installPhase = ''
mkdir -pv $out
cp -r * $out
'';
};
# Build the set of lisp packages using `lisp`
# These packages are defined manually for one reason or another:
# - The library is not in quicklisp
# - The library that is in quicklisp is broken
# - Special build procedure such as cl-unicode, asdf
#
# These Probably could be done even in ql.nix
# - Want to pin a specific commit
# - Want to apply custom patches
#
# They can use the auto-imported quicklisp packages as dependencies,
# but some of those don't work out of the box.
#
# E.g if a QL package depends on cl-unicode it won't build out of
# the box. The dependency has to be rewritten using the manually
# fixed cl-unicode.
#
# This is done by generating a 'fixed' set of Quicklisp packages by
# calling quicklispPackagesFor with the right `fixup`.
commonLispPackagesFor = lisp:
let
build-asdf-system' = body: build-asdf-system (body // { inherit lisp; });
in import ./packages.nix {
inherit pkgs;
inherit lisp;
inherit quicklispPackagesFor;
inherit fixupFor;
build-asdf-system = build-asdf-system';
};
# Build the set of packages imported from quicklisp using `lisp`
quicklispPackagesFor = { lisp, fixup ? lib.id, build ? build-asdf-system }:
let
build-asdf-system' = body: build (body // {
inherit lisp;
});
in import ./ql.nix {
inherit pkgs;
inherit fixup;
build-asdf-system = build-asdf-system';
};
# Rewrite deps of pkg to use manually defined packages
#
# The purpose of manual packages is to customize one package, but
# then it has to be propagated everywhere for it to make sense and
# have consistency in the package tree.
fixupFor = manualPackages: qlPkg:
assert (lib.isAttrs qlPkg && !lib.isDerivation qlPkg);
let
# Make it possible to reuse generated attrs without recursing into oblivion
packages = (lib.filterAttrs (n: v: n != qlPkg.pname) manualPackages);
substituteLib = pkg:
if lib.hasAttr pkg.pname packages
then packages.${pkg.pname}
else pkg;
pkg = substituteLib qlPkg;
in pkg // { lispLibs = map substituteLib pkg.lispLibs; };
makeAttrName = str:
removeSuffix
"_"
(replaceStrings
["+" "." "/"]
["_plus_" "_dot_" "_slash_"]
str);
oldMakeWrapper = pkgs.runCommand "make-wrapper.sh" {} ''
substitute ${./old-make-wrapper.sh} $out \
--replace @shell@ ${pkgs.bash}/bin/bash
'';
# Creates a lisp wrapper with `packages` installed
#
# `packages` is a function that takes `clpkgs` - a set of lisp
# packages - as argument and returns the list of packages to be
# installed
lispWithPackagesInternal = clpkgs: packages:
# FIXME just use flattenedDeps instead
(build-asdf-system rec {
lisp = (head (lib.attrValues clpkgs)).lisp;
# See dontUnpack in build-asdf-system
src = null;
pname = baseNameOf (head (split " " lisp));
version = "with-packages";
lispLibs = packages clpkgs;
systems = [];
}).overrideAttrs(o: {
installPhase = ''
# The recent version of makeWrapper causes breakage. For more info see
# https://github.com/Uthar/nix-cl/issues/2
source ${oldMakeWrapper}
mkdir -pv $out/bin
makeWrapper \
${head (split " " o.lisp)} \
$out/bin/${baseNameOf (head (split " " o.lisp))} \
--prefix CL_SOURCE_REGISTRY : "${o.CL_SOURCE_REGISTRY}" \
--prefix ASDF_OUTPUT_TRANSLATIONS : ${concatStringsSep "::" (flattenedDeps o.lispLibs)}: \
--prefix LD_LIBRARY_PATH : "${o.LD_LIBRARY_PATH}" \
--prefix LD_LIBRARY_PATH : "${makeLibraryPath o.nativeLibs}" \
--prefix CLASSPATH : "${o.CLASSPATH}" \
--prefix CLASSPATH : "${makeSearchPath "share/java/*" o.javaLibs}"
'';
});
lispWithPackages = lisp:
let
packages = lispPackagesFor lisp;
in lispWithPackagesInternal packages;
lispPackagesFor = lisp:
let
packages = commonLispPackagesFor lisp;
qlPackages = quicklispPackagesFor {
inherit lisp;
fixup = fixupFor packages;
};
in qlPackages // packages;
commonLispPackages = rec {
inherit
build-asdf-system
lispWithPackagesInternal
lispPackagesFor
lispWithPackages;
# Uncomment for debugging/development
# inherit
# flattenedDeps
# concatMap
# attrNames
# getAttr
# filterAttrs
# filter
# elem
# unique
# makeAttrName
# length;
# TODO: uncomment clasp when clasp 1.0.0 is packaged
# There's got to be a better way than this...
# The problem was that with --load everywhere, some
# implementations didn't exit with 0 on compilation failure
# Maybe a handler-case in buildScript?
sbcl = "${pkgs.sbcl}/bin/sbcl --script";
ecl = "${pkgs.ecl}/bin/ecl --shell";
abcl = ''${pkgs.abcl}/bin/abcl --batch --eval "(load \"$buildScript\")"'';
ccl = ''${pkgs.ccl}/bin/ccl --batch --eval "(load \"$buildScript\")" --'';
# clasp = ''${pkgs.clasp}/bin/clasp --non-interactive --quit --load'';
# Manually defined packages shadow the ones imported from quicklisp
sbclPackages = lispPackagesFor sbcl;
eclPackages = lispPackagesFor ecl;
abclPackages = lispPackagesFor abcl;
cclPackages = lispPackagesFor ccl;
# claspPackages = lispPackagesFor clasp;
sbclWithPackages = lispWithPackages sbcl;
eclWithPackages = lispWithPackages ecl;
abclWithPackages = lispWithPackages abcl;
cclWithPackages = lispWithPackages ccl;
# claspWithPackages = lispWithPackages clasp;
};
in commonLispPackages

@ -0,0 +1,155 @@
# Assert that FILE exists and is executable
#
# assertExecutable FILE
assertExecutable() {
local file="$1"
[[ -f "$file" && -x "$file" ]] || \
die "Cannot wrap '$file' because it is not an executable file"
}
# construct an executable file that wraps the actual executable
# makeWrapper EXECUTABLE OUT_PATH ARGS
# ARGS:
# --argv0 NAME : set name of executed process to NAME
# (otherwise it’s called …-wrapped)
# --set VAR VAL : add VAR with value VAL to the executable’s
# environment
# --set-default VAR VAL : like --set, but only adds VAR if not already set in
# the environment
# --unset VAR : remove VAR from the environment
# --run COMMAND : run command before the executable
# --add-flags FLAGS : add FLAGS to invocation of executable
# --prefix ENV SEP VAL : suffix/prefix ENV with VAL, separated by SEP
# --suffix
# --prefix-each ENV SEP VALS : like --prefix, but VALS is a list
# --suffix-each ENV SEP VALS : like --suffix, but VALS is a list
# --prefix-contents ENV SEP FILES : like --suffix-each, but contents of FILES
# are read first and used as VALS
# --suffix-contents
makeWrapper() {
local original="$1"
local wrapper="$2"
local params varName value command separator n fileNames
local argv0 flagsBefore flags
assertExecutable "$original"
mkdir -p "$(dirname "$wrapper")"
echo "#! @shell@ -e" > "$wrapper"
params=("$@")
for ((n = 2; n < ${#params[*]}; n += 1)); do
p="${params[$n]}"
if [[ "$p" == "--set" ]]; then
varName="${params[$((n + 1))]}"
value="${params[$((n + 2))]}"
n=$((n + 2))
echo "export $varName=${value@Q}" >> "$wrapper"
elif [[ "$p" == "--set-default" ]]; then
varName="${params[$((n + 1))]}"
value="${params[$((n + 2))]}"
n=$((n + 2))
echo "export $varName=\${$varName-${value@Q}}" >> "$wrapper"
elif [[ "$p" == "--unset" ]]; then
varName="${params[$((n + 1))]}"
n=$((n + 1))
echo "unset $varName" >> "$wrapper"
elif [[ "$p" == "--run" ]]; then
command="${params[$((n + 1))]}"
n=$((n + 1))
echo "$command" >> "$wrapper"
elif [[ ("$p" == "--suffix") || ("$p" == "--prefix") ]]; then
varName="${params[$((n + 1))]}"
separator="${params[$((n + 2))]}"
value="${params[$((n + 3))]}"
n=$((n + 3))
if test -n "$value"; then
if test "$p" = "--suffix"; then
echo "export $varName=\$$varName\${$varName:+${separator@Q}}${value@Q}" >> "$wrapper"
else
echo "export $varName=${value@Q}\${$varName:+${separator@Q}}\$$varName" >> "$wrapper"
fi
fi
elif [[ "$p" == "--prefix-each" ]]; then
varName="${params[$((n + 1))]}"
separator="${params[$((n + 2))]}"
values="${params[$((n + 3))]}"
n=$((n + 3))
for value in $values; do
echo "export $varName=${value@Q}\${$varName:+${separator@Q}}\$$varName" >> "$wrapper"
done
elif [[ "$p" == "--suffix-each" ]]; then
varName="${params[$((n + 1))]}"
separator="${params[$((n + 2))]}"
values="${params[$((n + 3))]}"
n=$((n + 3))
for value in $values; do
echo "export $varName=\$$varName\${$varName:+$separator}${value@Q}" >> "$wrapper"
done
elif [[ ("$p" == "--suffix-contents") || ("$p" == "--prefix-contents") ]]; then
varName="${params[$((n + 1))]}"
separator="${params[$((n + 2))]}"
fileNames="${params[$((n + 3))]}"
n=$((n + 3))
for fileName in $fileNames; do
contents="$(cat "$fileName")"
if test "$p" = "--suffix-contents"; then
echo "export $varName=\$$varName\${$varName:+$separator}${contents@Q}" >> "$wrapper"
else
echo "export $varName=${contents@Q}\${$varName:+$separator}\$$varName" >> "$wrapper"
fi
done
elif [[ "$p" == "--add-flags" ]]; then
flags="${params[$((n + 1))]}"
n=$((n + 1))
flagsBefore="$flagsBefore $flags"
elif [[ "$p" == "--argv0" ]]; then
argv0="${params[$((n + 1))]}"
n=$((n + 1))
else
die "makeWrapper doesn't understand the arg $p"
fi
done
echo exec ${argv0:+-a \"$argv0\"} \""$original"\" \
"$flagsBefore" '"$@"' >> "$wrapper"
chmod +x "$wrapper"
}
addSuffix() {
suffix="$1"
shift
for name in "$@"; do
echo "$name$suffix"
done
}
filterExisting() {
for fn in "$@"; do
if test -e "$fn"; then
echo "$fn"
fi
done
}
# Syntax: wrapProgram <PROGRAM> <MAKE-WRAPPER FLAGS...>
wrapProgram() {
local prog="$1"
local hidden
assertExecutable "$prog"
hidden="$(dirname "$prog")/.$(basename "$prog")"-wrapped
while [ -e "$hidden" ]; do
hidden="${hidden}_"
done
mv "$prog" "$hidden"
# Silence warning about unexpanded $0:
# shellcheck disable=SC2016
makeWrapper "$hidden" "$prog" --argv0 '$0' "${@:2}"
}

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

Loading…
Cancel
Save