forked from mirrors/nixpkgs
Merge master into haskell-updates
This commit is contained in:
commit
2ec636df25
|
@ -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 = {
|
||||
|
|
63
nixos/modules/services/monitoring/mimir.nix
Normal file
63
nixos/modules/services/monitoring/mimir.nix
Normal file
|
@ -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}")
|
||||
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 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
|
||||
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)
|
||||
with machine.nested("Waiting for a window to appear"):
|
||||
retry(window_is_visible)
|
||||
|
||||
|
||||
machine.start()
|
||||
machine.start()
|
||||
machine.wait_for_x()
|
||||
|
||||
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")
|
||||
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 curl"):
|
||||
machine.fail("curl -fv https://bad.example.com")
|
||||
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}")
|
||||
'';
|
||||
};
|
||||
|
||||
browsers = {
|
||||
"firefox": "Security Risk",
|
||||
"chromium": "not private",
|
||||
"qutebrowser -T": "Certificate error",
|
||||
"midori": "Security"
|
||||
}
|
||||
in
|
||||
|
||||
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)
|
||||
'';
|
||||
})
|
||||
{
|
||||
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
|
||||
'';
|
||||
|
|
53
pkgs/applications/audio/LibreArp/default.nix
Normal file
53
pkgs/applications/audio/LibreArp/default.nix
Normal file
|
@ -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 ];
|
||||
};
|
||||
}
|
53
pkgs/applications/audio/LibreArp/lv2.nix
Normal file
53
pkgs/applications/audio/LibreArp/lv2.nix
Normal file
|
@ -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 ];
|
||||
|
|
50
pkgs/applications/emulators/ripes/default.nix
Normal file
50
pkgs/applications/emulators/ripes/default.nix
Normal file
|
@ -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,22 +19,9 @@
|
|||
}
|
||||
},
|
||||
"beta": {
|
||||
"version": "101.0.4951.41",
|
||||
"sha256": "0dzsbr309n70jg7fpq2qfnrgcm4553akvdmnzhss1fc85s467609",
|
||||
"sha256bin64": "1jbj5cykxamf32c1s4gsid1wxcsdf4hng2d19q9h7b2ashkvvrbi",
|
||||
"deps": {
|
||||
"gn": {
|
||||
"version": "2022-03-14",
|
||||
"url": "https://gn.googlesource.com/gn",
|
||||
"rev": "bd99dbf98cbdefe18a4128189665c5761263bcfb",
|
||||
"sha256": "0nql15ckjqkm001xajq3qyn4h4q80i7x6dm9zinxxr1a8q5lppx3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dev": {
|
||||
"version": "102.0.5005.22",
|
||||
"sha256": "12s4w8qs71a7r13mm28w6kld2q21srwalsy2yfcys4kjmfp4gqfa",
|
||||
"sha256bin64": "07jj7nvgalzvxacx6srccc82ggckzj4x10w1k2zskcyxpblnd7fc",
|
||||
"version": "102.0.5005.27",
|
||||
"sha256": "0fznry72w50dpijg55yxkaz1hv1zkvvxini3yxadwpfa5y0mpn3m",
|
||||
"sha256bin64": "0k543zz3njsn5kh1wf90hqywll9s6g4xrnh2zqph066l91gj17rx",
|
||||
"deps": {
|
||||
"gn": {
|
||||
"version": "2022-04-14",
|
||||
|
@ -44,6 +31,19 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"dev": {
|
||||
"version": "103.0.5028.0",
|
||||
"sha256": "06i6kgsdril5gfbjl1sh0z5hqvq64bchhb2z8w0h8cw9977bvqk6",
|
||||
"sha256bin64": "09hxvcv5n1kd4qnwh6pxzmrlnc8xijm7rwb1c8c57v0jjb32x9ry",
|
||||
"deps": {
|
||||
"gn": {
|
||||
"version": "2022-04-26",
|
||||
"url": "https://gn.googlesource.com/gn",
|
||||
"rev": "ced9fbfe6943854e65ada4ac1849d1fa4cb19348",
|
||||
"sha256": "14fgjsfqihmma1cr8n30n37vxkf20paa6swq2yxn1agjvfr9cdvl"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ungoogled-chromium": {
|
||||
"version": "101.0.4951.41",
|
||||
"sha256": "0dzsbr309n70jg7fpq2qfnrgcm4553akvdmnzhss1fc85s467609",
|
||||
|
|
|
@ -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;
|
||||
nativeBuildInputs = [ pkg-config installShellFiles wrapQtAppsHook ];
|
||||
buildInputs = [ gcc cmake coreutils gnumake bash zlib qtbase qtmultimedia qttools ] ++ renderers.${renderer}.buildInputs;
|
||||
|
||||
qmakeFlags = [ "RENDERER=${renderer}" ];
|
||||
|
||||
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 ];
|
||||
|
|
23
pkgs/applications/science/math/adolc/default.nix
Normal file
23
pkgs/applications/science/math/adolc/default.nix
Normal file
|
@ -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=";
|
||||
|
|
50
pkgs/applications/video/hyperion-ng/default.nix
Normal file
50
pkgs/applications/video/hyperion-ng/default.nix
Normal file
|
@ -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
|
||||
|
|
29
pkgs/data/fonts/annapurna-sil/default.nix
Normal file
29
pkgs/data/fonts/annapurna-sil/default.nix
Normal file
|
@ -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 ];
|
||||
};
|
||||
}
|
26
pkgs/data/fonts/ezra-sil/default.nix
Normal file
26
pkgs/data/fonts/ezra-sil/default.nix
Normal file
|
@ -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 ];
|
||||
};
|
||||
}
|
29
pkgs/data/fonts/galatia-sil/default.nix
Normal file
29
pkgs/data/fonts/galatia-sil/default.nix
Normal file
|
@ -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 ];
|
||||
};
|
||||
}
|
28
pkgs/development/java-modules/redshift_jdbc/default.nix
Normal file
28
pkgs/development/java-modules/redshift_jdbc/default.nix
Normal file
|
@ -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 [
|
||||
|
|
1
pkgs/development/lisp-modules-new/.gitattributes
vendored
Normal file
1
pkgs/development/lisp-modules-new/.gitattributes
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
imported.nix linguist-vendored
|
3
pkgs/development/lisp-modules-new/.gitignore
vendored
Normal file
3
pkgs/development/lisp-modules-new/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
result
|
||||
*.sqlite
|
||||
*.fasl
|
197
pkgs/development/lisp-modules-new/doc/api.md
Normal file
197
pkgs/development/lisp-modules-new/doc/api.md
Normal file
|
@ -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 ])'
|
||||
```
|
98
pkgs/development/lisp-modules-new/doc/nix-cl.md
Normal file
98
pkgs/development/lisp-modules-new/doc/nix-cl.md
Normal file
|
@ -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.
|
54
pkgs/development/lisp-modules-new/doc/quicklisp.md
Normal file
54
pkgs/development/lisp-modules-new/doc/quicklisp.md
Normal file
|
@ -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.
|
5
pkgs/development/lisp-modules-new/doc/quirks.md
Normal file
5
pkgs/development/lisp-modules-new/doc/quirks.md
Normal file
|
@ -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
|
31
pkgs/development/lisp-modules-new/examples/sbcl-with-bt.nix
Normal file
31
pkgs/development/lisp-modules-new/examples/sbcl-with-bt.nix
Normal file
|
@ -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
|
18
pkgs/development/lisp-modules-new/import/api.lisp
Normal file
18
pkgs/development/lisp-modules-new/import/api.lisp
Normal file
|
@ -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."))
|
134
pkgs/development/lisp-modules-new/import/database/sqlite.lisp
Normal file
134
pkgs/development/lisp-modules-new/import/database/sqlite.lisp
Normal file
|
@ -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 "~%}~%"))))
|
41
pkgs/development/lisp-modules-new/import/init.sql
Normal file
41
pkgs/development/lisp-modules-new/import/init.sql
Normal file
|
@ -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;
|
40
pkgs/development/lisp-modules-new/import/main.lisp
Normal file
40
pkgs/development/lisp-modules-new/import/main.lisp
Normal file
|
@ -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))
|
81
pkgs/development/lisp-modules-new/import/nix.lisp
Normal file
81
pkgs/development/lisp-modules-new/import/nix.lisp
Normal 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)))
|
16
pkgs/development/lisp-modules-new/import/util.lisp
Normal file
16
pkgs/development/lisp-modules-new/import/util.lisp
Normal file
|
@ -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)))))
|
65675
pkgs/development/lisp-modules-new/imported.nix
vendored
Normal file
65675
pkgs/development/lisp-modules-new/imported.nix
vendored
Normal file
File diff suppressed because it is too large
Load diff
432
pkgs/development/lisp-modules-new/lisp-packages.nix
Normal file
432
pkgs/development/lisp-modules-new/lisp-packages.nix
Normal file
|
@ -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
|
155
pkgs/development/lisp-modules-new/old-make-wrapper.sh
Normal file
155
pkgs/development/lisp-modules-new/old-make-wrapper.sh
Normal file
|
@ -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…
Reference in a new issue