Merge master into haskell-updates
This commit is contained in:
commit
d0e8d8f7cd
|
@ -164,6 +164,26 @@ tests.fetchgit = testers.invalidateFetcherByDrvHash fetchgit {
|
|||
};
|
||||
```
|
||||
|
||||
## `runNixOSTest` {#tester-runNixOSTest}
|
||||
|
||||
A helper function that behaves exactly like the NixOS `runTest`, except it also assigns this Nixpkgs package set as the `pkgs` of the test and makes the `nixpkgs.*` options read-only.
|
||||
|
||||
If your test is part of the Nixpkgs repository, or if you need a more general entrypoint, see ["Calling a test" in the NixOS manual](https://nixos.org/manual/nixos/stable/index.html#sec-calling-nixos-tests).
|
||||
|
||||
Example:
|
||||
|
||||
```nix
|
||||
pkgs.testers.runNixOSTest ({ lib, ... }: {
|
||||
name = "hello";
|
||||
nodes.machine = { pkgs, ... }: {
|
||||
environment.systemPackages = [ pkgs.hello ];
|
||||
};
|
||||
testScript = ''
|
||||
machine.succeed("hello")
|
||||
'';
|
||||
})
|
||||
```
|
||||
|
||||
## `nixosTest` {#tester-nixosTest}
|
||||
|
||||
Run a NixOS VM network test using this evaluation of Nixpkgs.
|
||||
|
|
|
@ -535,7 +535,9 @@ directory of the `tokenizers` project's source archive, we use
|
|||
```nix
|
||||
{ fetchFromGitHub
|
||||
, buildPythonPackage
|
||||
, cargo
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, setuptools-rust
|
||||
}:
|
||||
|
||||
|
@ -558,11 +560,12 @@ buildPythonPackage rec {
|
|||
|
||||
sourceRoot = "source/bindings/python";
|
||||
|
||||
nativeBuildInputs = [ setuptools-rust ] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
nativeBuildInputs = [
|
||||
cargo
|
||||
rustPlatform.cargoSetupHook
|
||||
rustc
|
||||
setuptools-rust
|
||||
];
|
||||
|
||||
# ...
|
||||
}
|
||||
|
|
|
@ -12656,9 +12656,9 @@
|
|||
githubId = 17690377;
|
||||
};
|
||||
ppom = {
|
||||
name = "Paco Pompeani";
|
||||
email = "paco@ecomail.io";
|
||||
github = "aopom";
|
||||
name = "ppom";
|
||||
email = "ppom@ecomail.fr";
|
||||
github = "ppom0";
|
||||
githubId = 38916722;
|
||||
};
|
||||
pradeepchhetri = {
|
||||
|
|
|
@ -4,7 +4,7 @@ This manual describes how to install, use and extend NixOS, a Linux distribution
|
|||
|
||||
Additional information regarding the Nix package manager and the Nixpkgs project can be found in respectively the [Nix manual](https://nixos.org/nix/manual) and the [Nixpkgs manual](https://nixos.org/nixpkgs/manual).
|
||||
|
||||
If you encounter problems, please report them on the [`Discourse`](https://discourse.nixos.org), the [Matrix room](https://matrix.to/#nix:nixos.org), or on the [`#nixos` channel on Libera.Chat](irc://irc.libera.chat/#nixos). Alternatively, consider [contributing to this manual](#chap-contributing). Bugs should be reported in [NixOS’ GitHub issue tracker](https://github.com/NixOS/nixpkgs/issues).
|
||||
If you encounter problems, please report them on the [`Discourse`](https://discourse.nixos.org), the [Matrix room](https://matrix.to/#/%23nix:nixos.org), or on the [`#nixos` channel on Libera.Chat](irc://irc.libera.chat/#nixos). Alternatively, consider [contributing to this manual](#chap-contributing). Bugs should be reported in [NixOS’ GitHub issue tracker](https://github.com/NixOS/nixpkgs/issues).
|
||||
|
||||
::: {.note}
|
||||
Commands prefixed with `#` have to be run as root, either requiring to login as root user or temporarily switching to it using `sudo` for example.
|
||||
|
|
|
@ -56,6 +56,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
|||
|
||||
- [gemstash](https://github.com/rubygems/gemstash), a RubyGems.org cache and private gem server. Available as [services.gemstash](#opt-services.gemstash.enable).
|
||||
|
||||
- [gitea-actions-runner](https://gitea.com/gitea/act_runner), a CI runner for Gitea/Forgejo Actions. Available as [services.gitea-actions-runner](#opt-services.gitea-actions-runner.instances).
|
||||
|
||||
- [gmediarender](https://github.com/hzeller/gmrender-resurrect), a simple, headless UPnP/DLNA renderer. Available as [services.gmediarender](options.html#opt-services.gmediarender.enable).
|
||||
|
||||
- [harmonia](https://github.com/nix-community/harmonia/), Nix binary cache implemented in rust using libnix-store. Available as [services.harmonia](options.html#opt-services.harmonia.enable).
|
||||
|
@ -265,6 +267,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
|||
|
||||
- [services.xserver.videoDrivers](options.html#opt-services.xserver.videoDrivers) now defaults to the `modesetting` driver over device-specific ones. The `radeon`, `amdgpu` and `nouveau` drivers are still available, but effectively unmaintained and not recommended for use.
|
||||
|
||||
- [services.xserver.libinput.enable](options.html#opt-services.xserver.libinput.enable) is now set by default, enabling the more actively maintained and consistently behaved input device driver.
|
||||
|
||||
- To enable the HTTP3 (QUIC) protocol for a nginx virtual host, set the `quic` attribute on it to true, e.g. `services.nginx.virtualHosts.<name>.quic = true;`.
|
||||
|
||||
- In `services.fail2ban`, `bantime-increment.<name>` options now default to `null` (except `bantime-increment.enable`) and are used to set the corresponding option in `jail.local` only if not `null`. Also, enforce that `bantime-increment.formula` and `bantime-increment.multipliers` are not both specified.
|
||||
|
|
|
@ -374,6 +374,7 @@
|
|||
./services/continuous-integration/buildbot/master.nix
|
||||
./services/continuous-integration/buildbot/worker.nix
|
||||
./services/continuous-integration/buildkite-agents.nix
|
||||
./services/continuous-integration/gitea-actions-runner.nix
|
||||
./services/continuous-integration/github-runner.nix
|
||||
./services/continuous-integration/github-runners.nix
|
||||
./services/continuous-integration/gitlab-runner.nix
|
||||
|
|
|
@ -0,0 +1,237 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, utils
|
||||
, ...
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (lib)
|
||||
any
|
||||
attrValues
|
||||
concatStringsSep
|
||||
escapeShellArg
|
||||
hasInfix
|
||||
hasSuffix
|
||||
optionalAttrs
|
||||
optionals
|
||||
literalExpression
|
||||
mapAttrs'
|
||||
mkEnableOption
|
||||
mkOption
|
||||
mkPackageOptionMD
|
||||
mkIf
|
||||
nameValuePair
|
||||
types
|
||||
;
|
||||
|
||||
inherit (utils)
|
||||
escapeSystemdPath
|
||||
;
|
||||
|
||||
cfg = config.services.gitea-actions-runner;
|
||||
|
||||
# Check whether any runner instance label requires a container runtime
|
||||
# Empty label strings result in the upstream defined defaultLabels, which require docker
|
||||
# https://gitea.com/gitea/act_runner/src/tag/v0.1.5/internal/app/cmd/register.go#L93-L98
|
||||
hasDockerScheme = instance:
|
||||
instance.labels == [] || any (label: hasInfix ":docker:" label) instance.labels;
|
||||
wantsContainerRuntime = any hasDockerScheme (attrValues cfg.instances);
|
||||
|
||||
hasHostScheme = instance: any (label: hasSuffix ":host" label) instance.labels;
|
||||
|
||||
# provide shorthands for whether container runtimes are enabled
|
||||
hasDocker = config.virtualisation.docker.enable;
|
||||
hasPodman = config.virtualisation.podman.enable;
|
||||
|
||||
tokenXorTokenFile = instance:
|
||||
(instance.token == null && instance.tokenFile != null) ||
|
||||
(instance.token != null && instance.tokenFile == null);
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
hexa
|
||||
];
|
||||
|
||||
options.services.gitea-actions-runner = with types; {
|
||||
package = mkPackageOptionMD pkgs "gitea-actions-runner" { };
|
||||
|
||||
instances = mkOption {
|
||||
default = {};
|
||||
description = lib.mdDoc ''
|
||||
Gitea Actions Runner instances.
|
||||
'';
|
||||
type = attrsOf (submodule {
|
||||
options = {
|
||||
enable = mkEnableOption (lib.mdDoc "Gitea Actions Runner instance");
|
||||
|
||||
name = mkOption {
|
||||
type = str;
|
||||
example = literalExpression "config.networking.hostName";
|
||||
description = lib.mdDoc ''
|
||||
The name identifying the runner instance towards the Gitea/Forgejo instance.
|
||||
'';
|
||||
};
|
||||
|
||||
url = mkOption {
|
||||
type = str;
|
||||
example = "https://forge.example.com";
|
||||
description = lib.mdDoc ''
|
||||
Base URL of your Gitea/Forgejo instance.
|
||||
'';
|
||||
};
|
||||
|
||||
token = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
description = lib.mdDoc ''
|
||||
Plain token to register at the configured Gitea/Forgejo instance.
|
||||
'';
|
||||
};
|
||||
|
||||
tokenFile = mkOption {
|
||||
type = nullOr (either str path);
|
||||
default = null;
|
||||
description = lib.mdDoc ''
|
||||
Path to an environment file, containing the `TOKEN` environment
|
||||
variable, that holds a token to register at the configured
|
||||
Gitea/Forgejo instance.
|
||||
'';
|
||||
};
|
||||
|
||||
labels = mkOption {
|
||||
type = listOf str;
|
||||
example = literalExpression ''
|
||||
[
|
||||
# provide a debian base with nodejs for actions
|
||||
"debian-latest:docker://node:18-bullseye"
|
||||
# fake the ubuntu name, because node provides no ubuntu builds
|
||||
"ubuntu-latest:docker://node:18-bullseye"
|
||||
# provide native execution on the host
|
||||
#"native:host"
|
||||
]
|
||||
'';
|
||||
description = lib.mdDoc ''
|
||||
Labels used to map jobs to their runtime environment. Changing these
|
||||
labels currently requires a new registration token.
|
||||
|
||||
Many common actions require bash, git and nodejs, as well as a filesystem
|
||||
that follows the filesystem hierarchy standard.
|
||||
'';
|
||||
};
|
||||
|
||||
hostPackages = mkOption {
|
||||
type = listOf package;
|
||||
default = with pkgs; [
|
||||
bash
|
||||
coreutils
|
||||
curl
|
||||
gawk
|
||||
gitMinimal
|
||||
gnused
|
||||
nodejs
|
||||
wget
|
||||
];
|
||||
defaultText = literalExpression ''
|
||||
with pkgs; [
|
||||
bash
|
||||
coreutils
|
||||
curl
|
||||
gawk
|
||||
gitMinimal
|
||||
gnused
|
||||
nodejs
|
||||
wget
|
||||
]
|
||||
'';
|
||||
description = lib.mdDoc ''
|
||||
List of packages, that are available to actions, when the runner is configured
|
||||
with a host execution label.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.instances != {}) {
|
||||
assertions = [ {
|
||||
assertion = any tokenXorTokenFile (attrValues cfg.instances);
|
||||
message = "Instances of gitea-actions-runner can have `token` or `tokenFile`, not both.";
|
||||
} {
|
||||
assertion = wantsContainerRuntime -> hasDocker || hasPodman;
|
||||
message = "Label configuration on gitea-actions-runner instance requires either docker or podman.";
|
||||
} ];
|
||||
|
||||
systemd.services = let
|
||||
mkRunnerService = name: instance: let
|
||||
wantsContainerRuntime = hasDockerScheme instance;
|
||||
wantsHost = hasHostScheme instance;
|
||||
wantsDocker = wantsContainerRuntime && config.virtualisation.docker.enable;
|
||||
wantsPodman = wantsContainerRuntime && config.virtualisation.podman.enable;
|
||||
in
|
||||
nameValuePair "gitea-runner-${escapeSystemdPath name}" {
|
||||
inherit (instance) enable;
|
||||
description = "Gitea Actions Runner";
|
||||
after = [
|
||||
"network-online.target"
|
||||
] ++ optionals (wantsDocker) [
|
||||
"docker.service"
|
||||
] ++ optionals (wantsPodman) [
|
||||
"podman.service"
|
||||
];
|
||||
wantedBy = [
|
||||
"multi-user.target"
|
||||
];
|
||||
environment = optionalAttrs (instance.token != null) {
|
||||
TOKEN = "${instance.token}";
|
||||
} // optionalAttrs (wantsPodman) {
|
||||
DOCKER_HOST = "unix:///run/podman/podman.sock";
|
||||
};
|
||||
path = with pkgs; [
|
||||
coreutils
|
||||
] ++ lib.optionals wantsHost instance.hostPackages;
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
User = "gitea-runner";
|
||||
StateDirectory = "gitea-runner";
|
||||
WorkingDirectory = "-/var/lib/gitea-runner/${name}";
|
||||
ExecStartPre = pkgs.writeShellScript "gitea-register-runner-${name}" ''
|
||||
export INSTANCE_DIR="$STATE_DIRECTORY/${name}"
|
||||
mkdir -vp "$INSTANCE_DIR"
|
||||
cd "$INSTANCE_DIR"
|
||||
|
||||
# force reregistration on changed labels
|
||||
export LABELS_FILE="$INSTANCE_DIR/.labels"
|
||||
export LABELS_WANTED="$(echo ${escapeShellArg (concatStringsSep "\n" instance.labels)} | sort)"
|
||||
export LABELS_CURRENT="$(cat $LABELS_FILE 2>/dev/null || echo 0)"
|
||||
|
||||
if [ ! -e "$INSTANCE_DIR/.runner" ] || [ "$LABELS_WANTED" != "$LABELS_CURRENT" ]; then
|
||||
# remove existing registration file, so that changing the labels forces a re-registation
|
||||
rm -v "$INSTANCE_DIR/.runner" || true
|
||||
|
||||
# perform the registration
|
||||
${cfg.package}/bin/act_runner register --no-interactive \
|
||||
--instance ${escapeShellArg instance.url} \
|
||||
--token "$TOKEN" \
|
||||
--name ${escapeShellArg instance.name} \
|
||||
--labels ${escapeShellArg (concatStringsSep "," instance.labels)}
|
||||
|
||||
# and write back the configured labels
|
||||
echo "$LABELS_WANTED" > "$LABELS_FILE"
|
||||
fi
|
||||
|
||||
'';
|
||||
ExecStart = "${cfg.package}/bin/act_runner daemon";
|
||||
SupplementaryGroups = optionals (wantsDocker) [
|
||||
"docker"
|
||||
] ++ optionals (wantsPodman) [
|
||||
"podman"
|
||||
];
|
||||
} // optionalAttrs (instance.tokenFile != null) {
|
||||
EnvironmentFile = instance.tokenFile;
|
||||
};
|
||||
};
|
||||
in mapAttrs' mkRunnerService cfg.instances;
|
||||
};
|
||||
}
|
|
@ -8,7 +8,8 @@ let
|
|||
cmdArgs =
|
||||
[ "--port" cfg.port ]
|
||||
++ optionals (cfg.salt != null) [ "--salt" cfg.salt ]
|
||||
++ optionals (cfg.certDir != null) [ "--tls" cfg.certDir ];
|
||||
++ optionals (cfg.certDir != null) [ "--tls" cfg.certDir ]
|
||||
++ cfg.extraArgs;
|
||||
|
||||
in
|
||||
{
|
||||
|
@ -33,7 +34,22 @@ in
|
|||
default = null;
|
||||
description = lib.mdDoc ''
|
||||
Salt to allow room operator passwords generated by this server
|
||||
instance to still work when the server is restarted.
|
||||
instance to still work when the server is restarted. The salt will be
|
||||
readable in the nix store and the processlist. If this is not
|
||||
intended use `saltFile` instead. Mutually exclusive with
|
||||
<option>services.syncplay.saltFile</option>.
|
||||
'';
|
||||
};
|
||||
|
||||
saltFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = lib.mdDoc ''
|
||||
Path to the file that contains the server salt. This allows room
|
||||
operator passwords generated by this server instance to still work
|
||||
when the server is restarted. `null`, the server doesn't load the
|
||||
salt from a file. Mutually exclusive with
|
||||
<option>services.syncplay.salt</option>.
|
||||
'';
|
||||
};
|
||||
|
||||
|
@ -46,6 +62,14 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
extraArgs = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
description = lib.mdDoc ''
|
||||
Additional arguments to be passed to the service.
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "nobody";
|
||||
|
@ -74,21 +98,31 @@ in
|
|||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.salt == null || cfg.saltFile == null;
|
||||
message = "services.syncplay.salt and services.syncplay.saltFile are mutually exclusive.";
|
||||
}
|
||||
];
|
||||
systemd.services.syncplay = {
|
||||
description = "Syncplay Service";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
LoadCredential = lib.mkIf (cfg.passwordFile != null) "password:${cfg.passwordFile}";
|
||||
LoadCredential = lib.optional (cfg.passwordFile != null) "password:${cfg.passwordFile}"
|
||||
++ lib.optional (cfg.saltFile != null) "salt:${cfg.saltFile}";
|
||||
};
|
||||
|
||||
script = ''
|
||||
${lib.optionalString (cfg.passwordFile != null) ''
|
||||
export SYNCPLAY_PASSWORD=$(cat "''${CREDENTIALS_DIRECTORY}/password")
|
||||
''}
|
||||
${lib.optionalString (cfg.saltFile != null) ''
|
||||
export SYNCPLAY_SALT=$(cat "''${CREDENTIALS_DIRECTORY}/salt")
|
||||
''}
|
||||
exec ${pkgs.syncplay-nogui}/bin/syncplay-server ${escapeShellArgs cmdArgs}
|
||||
'';
|
||||
};
|
||||
|
|
|
@ -260,7 +260,9 @@ in {
|
|||
options = {
|
||||
|
||||
services.xserver.libinput = {
|
||||
enable = mkEnableOption (lib.mdDoc "libinput");
|
||||
enable = mkEnableOption (lib.mdDoc "libinput") // {
|
||||
default = true;
|
||||
};
|
||||
mouse = mkConfigForDevice "mouse";
|
||||
touchpad = mkConfigForDevice "touchpad";
|
||||
};
|
||||
|
|
|
@ -1,5 +1,26 @@
|
|||
import ./make-test-python.nix ({ pkgs, lib, ... }: let
|
||||
inherit (import ./ssh-keys.nix pkgs) snakeOilPrivateKey snakeOilPublicKey;
|
||||
|
||||
mkNode = vlan: id: {
|
||||
virtualisation.vlans = [ vlan ];
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
useNetworkd = true;
|
||||
};
|
||||
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
|
||||
networks."10-eth${toString vlan}" = {
|
||||
matchConfig.Name = "eth${toString vlan}";
|
||||
linkConfig.RequiredForOnline = "no";
|
||||
networkConfig = {
|
||||
Address = "192.168.${toString vlan}.${toString id}/24";
|
||||
IPForward = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
in {
|
||||
name = "systemd-networkd-vrf";
|
||||
meta.maintainers = with lib.maintainers; [ ma27 ];
|
||||
|
@ -54,7 +75,7 @@ in {
|
|||
linkConfig.RequiredForOnline = "no";
|
||||
networkConfig = {
|
||||
VRF = "vrf1";
|
||||
Address = "192.168.1.1";
|
||||
Address = "192.168.1.1/24";
|
||||
IPForward = "yes";
|
||||
};
|
||||
};
|
||||
|
@ -63,78 +84,23 @@ in {
|
|||
linkConfig.RequiredForOnline = "no";
|
||||
networkConfig = {
|
||||
VRF = "vrf2";
|
||||
Address = "192.168.2.1";
|
||||
Address = "192.168.2.1/24";
|
||||
IPForward = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
node1 = { pkgs, ... }: {
|
||||
virtualisation.vlans = [ 1 ];
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
useNetworkd = true;
|
||||
};
|
||||
node1 = lib.mkMerge [
|
||||
(mkNode 1 2)
|
||||
{
|
||||
services.openssh.enable = true;
|
||||
users.users.root.openssh.authorizedKeys.keys = [ snakeOilPublicKey ];
|
||||
}
|
||||
];
|
||||
|
||||
services.openssh.enable = true;
|
||||
users.users.root.openssh.authorizedKeys.keys = [ snakeOilPublicKey ];
|
||||
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
|
||||
networks."10-eth1" = {
|
||||
matchConfig.Name = "eth1";
|
||||
linkConfig.RequiredForOnline = "no";
|
||||
networkConfig = {
|
||||
Address = "192.168.1.2";
|
||||
IPForward = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
node2 = { pkgs, ... }: {
|
||||
virtualisation.vlans = [ 2 ];
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
useNetworkd = true;
|
||||
};
|
||||
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
|
||||
networks."10-eth2" = {
|
||||
matchConfig.Name = "eth2";
|
||||
linkConfig.RequiredForOnline = "no";
|
||||
networkConfig = {
|
||||
Address = "192.168.2.3";
|
||||
IPForward = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
node3 = { pkgs, ... }: {
|
||||
virtualisation.vlans = [ 2 ];
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
useNetworkd = true;
|
||||
};
|
||||
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
|
||||
networks."10-eth2" = {
|
||||
matchConfig.Name = "eth2";
|
||||
linkConfig.RequiredForOnline = "no";
|
||||
networkConfig = {
|
||||
Address = "192.168.2.4";
|
||||
IPForward = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
node2 = mkNode 2 3;
|
||||
node3 = mkNode 2 4;
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
|
@ -159,22 +125,6 @@ in {
|
|||
node2.wait_for_unit("network.target")
|
||||
node3.wait_for_unit("network.target")
|
||||
|
||||
client_ipv4_table = """
|
||||
192.168.1.2 dev vrf1 proto static metric 100\x20
|
||||
192.168.2.3 dev vrf2 proto static metric 100
|
||||
""".strip()
|
||||
vrf1_table = """
|
||||
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1\x20
|
||||
local 192.168.1.1 dev eth1 proto kernel scope host src 192.168.1.1\x20
|
||||
broadcast 192.168.1.255 dev eth1 proto kernel scope link src 192.168.1.1
|
||||
""".strip()
|
||||
vrf2_table = """
|
||||
192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.1\x20
|
||||
local 192.168.2.1 dev eth2 proto kernel scope host src 192.168.2.1\x20
|
||||
broadcast 192.168.2.255 dev eth2 proto kernel scope link src 192.168.2.1
|
||||
""".strip()
|
||||
# editorconfig-checker-enable
|
||||
|
||||
# Check that networkd properly configures the main routing table
|
||||
# and the routing tables for the VRF.
|
||||
with subtest("check vrf routing tables"):
|
||||
|
|
13
package-lock.patch
Normal file
13
package-lock.patch
Normal file
|
@ -0,0 +1,13 @@
|
|||
diff --git a/package-lock.json b/package-lock.json
|
||||
index 5a84fbe7..562051c7 100644
|
||||
--- a/package-lock.json
|
||||
+++ b/package-lock.json
|
||||
@@ -12425,7 +12425,7 @@
|
||||
"node_modules/pkg-up/node_modules/path-exists": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
|
||||
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
|
||||
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=4"
|
|
@ -2,6 +2,7 @@
|
|||
, lib
|
||||
, fetchFromGitLab
|
||||
, cairo
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, gettext
|
||||
, glib
|
||||
|
@ -12,6 +13,7 @@
|
|||
, pango
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
}:
|
||||
|
||||
|
@ -40,9 +42,9 @@ stdenv.mkDerivation rec {
|
|||
meson
|
||||
ninja
|
||||
pkg-config
|
||||
rustPlatform.rust.cargo
|
||||
cargo
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.rustc
|
||||
rustc
|
||||
wrapGAppsHook4
|
||||
];
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitLab
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
|
@ -14,6 +15,7 @@
|
|||
, libxml2
|
||||
, libxkbcommon
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, feedbackd
|
||||
, wrapGAppsHook
|
||||
, fetchpatch
|
||||
|
@ -54,11 +56,10 @@ stdenv.mkDerivation rec {
|
|||
glib
|
||||
wayland
|
||||
wrapGAppsHook
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gtk3
|
||||
|
|
|
@ -2,12 +2,14 @@
|
|||
, stdenv
|
||||
, fetchFromGitLab
|
||||
, rustPlatform
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, appstream-glib
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
, reuse
|
||||
, rustc
|
||||
, m4
|
||||
, wrapGAppsHook4
|
||||
, glib
|
||||
|
@ -48,11 +50,10 @@ stdenv.mkDerivation rec {
|
|||
reuse
|
||||
m4
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
|
|
|
@ -3,11 +3,13 @@
|
|||
, rustPlatform
|
||||
, fetchFromGitLab
|
||||
, fetchpatch
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, gettext
|
||||
, python3
|
||||
, pkg-config
|
||||
, rustc
|
||||
, glib
|
||||
, libhandy
|
||||
, gtk3
|
||||
|
@ -55,9 +57,9 @@ stdenv.mkDerivation rec {
|
|||
pkg-config
|
||||
gettext
|
||||
python3
|
||||
rustPlatform.rust.cargo
|
||||
cargo
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.rustc
|
||||
rustc
|
||||
wrapGAppsHook
|
||||
glib
|
||||
];
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "helio-workstation";
|
||||
version = "3.10";
|
||||
version = "3.11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "helio-fm";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
fetchSubmodules = true;
|
||||
sha256 = "sha256-TqwebaFZXUto+azVJQlggqAc7WKDxAaXxyXcG8x5S/w=";
|
||||
sha256 = "sha256-ec4ueg6TNo3AaZ81j01OQZzhgOfSzG1/Vd0QhEXOUl0=";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{ lib
|
||||
, cargo
|
||||
, clang
|
||||
, desktop-file-utils
|
||||
, fetchFromGitLab
|
||||
|
@ -11,6 +12,7 @@
|
|||
, pipewire
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, stdenv
|
||||
}:
|
||||
|
||||
|
@ -38,8 +40,8 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
rustPlatform.bindgenHook
|
||||
];
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, appstream-glib
|
||||
, cargo
|
||||
, dbus
|
||||
, desktop-file-utils
|
||||
, glib
|
||||
|
@ -16,6 +17,7 @@
|
|||
, ninja
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
}:
|
||||
|
||||
|
@ -43,11 +45,10 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
dbus
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, rustPlatform
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
|
@ -10,6 +11,7 @@
|
|||
, appstream-glib
|
||||
, desktop-file-utils
|
||||
, libxml2
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, openssl
|
||||
, dbus
|
||||
|
@ -47,11 +49,10 @@ stdenv.mkDerivation rec {
|
|||
desktop-file-utils # update-desktop-database
|
||||
libxml2 # xmllint
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "sfizz";
|
||||
version = "1.2.0";
|
||||
version = "1.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sfztools";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-biHsB49Ym9NU4tMOVnUNuIxPtpcIi6oCAS7JBPhxwec=";
|
||||
sha256 = "sha256-/G9tvJ4AcBSTmo44xDDKf6et1nSn/FV5m27ztDu10kI=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, fetchFromGitLab
|
||||
, cargo
|
||||
, dbus
|
||||
, desktop-file-utils
|
||||
, gdk-pixbuf
|
||||
|
@ -15,6 +16,7 @@
|
|||
, openssl
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, sqlite
|
||||
, wrapGAppsHook4
|
||||
, cmake
|
||||
|
@ -47,9 +49,9 @@ stdenv.mkDerivation rec {
|
|||
meson
|
||||
ninja
|
||||
pkg-config
|
||||
rustPlatform.rust.cargo
|
||||
cargo
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.rustc
|
||||
rustc
|
||||
wrapGAppsHook4
|
||||
cmake
|
||||
];
|
||||
|
|
|
@ -7,7 +7,9 @@
|
|||
, gettext
|
||||
, python3
|
||||
, desktop-file-utils
|
||||
, cargo
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, pkg-config
|
||||
, glib
|
||||
, libadwaita
|
||||
|
@ -45,9 +47,9 @@ stdenv.mkDerivation rec {
|
|||
gtk4 # for gtk-update-icon-cache
|
||||
glib # for glib-compile-schemas
|
||||
desktop-file-utils
|
||||
rustPlatform.rust.cargo
|
||||
cargo
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.rustc
|
||||
rustc
|
||||
wrapGAppsHook4
|
||||
];
|
||||
|
||||
|
|
2704
pkgs/applications/audio/spotify-tui/Cargo.lock
generated
Normal file
2704
pkgs/applications/audio/spotify-tui/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,11 +0,0 @@
|
|||
--- a/Cargo.lock 2022-04-27 17:25:49.017415644 +0300
|
||||
+++ b/Cargo.lock 2022-04-27 17:25:51.307433984 +0300
|
||||
@@ -1722,8 +1722,6 @@
|
||||
[[package]]
|
||||
name = "rspotify"
|
||||
version = "0.10.0"
|
||||
-source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
-checksum = "eefd7bb58b714606b30a490f751d7926942e2874eef5e82934d60d7a4a68dca4"
|
||||
dependencies = [
|
||||
"base64 0.10.1",
|
||||
"chrono",
|
|
@ -1,12 +0,0 @@
|
|||
--- a/Cargo.toml 2022-04-25 18:20:04.329712912 +0200
|
||||
+++ b/Cargo.toml 2022-04-25 18:20:44.296429608 +0200
|
||||
@@ -29,6 +29,9 @@
|
||||
rand = "0.8.3"
|
||||
anyhow = "1.0.43"
|
||||
|
||||
+[patch.crates-io]
|
||||
+rspotify = { path = "./rspotify-0.10.0" }
|
||||
+
|
||||
[[bin]]
|
||||
bench = false
|
||||
path = "src/main.rs"
|
|
@ -1,9 +1,7 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, fetchCrate
|
||||
, fetchpatch
|
||||
, rustPlatform
|
||||
, fetchFromGitHub
|
||||
, stdenv
|
||||
, installShellFiles
|
||||
, pkg-config
|
||||
, openssl
|
||||
|
@ -24,62 +22,25 @@ rustPlatform.buildRustPackage rec {
|
|||
hash = "sha256-L5gg6tjQuYoAC89XfKE38KCFONwSAwfNoFEUPH4jNAI=";
|
||||
};
|
||||
|
||||
cargoPatches = [
|
||||
# Use patched rspotify
|
||||
./Cargo.lock.patch
|
||||
|
||||
# Needed so that the patch below it applies.
|
||||
(fetchpatch {
|
||||
name = "update-dirs.patch";
|
||||
url = "https://github.com/Rigellute/spotify-tui/commit/3881defc1ed0bcf79df1aef4836b857f64be657c.patch";
|
||||
hash = "sha256-OGqiYLFojMwR3RgKbddXxPDiAdzPySnscVVsVmTT7t4=";
|
||||
})
|
||||
|
||||
# https://github.com/Rigellute/spotify-tui/pull/990
|
||||
(fetchpatch {
|
||||
name = "update-socket2-for-rust-1.64.patch";
|
||||
url = "https://github.com/Rigellute/spotify-tui/commit/14df9419cf72da13f3b55654686a95647ea9dfea.patch";
|
||||
hash = "sha256-craY6UwmHDdxih3nZBdPkNJtQ6wvVgf09Ovqdxi0JZo=";
|
||||
})
|
||||
];
|
||||
|
||||
patches = [
|
||||
# Use patched rspotify
|
||||
./Cargo.toml.patch
|
||||
];
|
||||
|
||||
preBuild = let
|
||||
rspotify = stdenv.mkDerivation rec {
|
||||
pname = "rspotify";
|
||||
version = "0.10.0";
|
||||
|
||||
src = fetchCrate {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-KDtqjVQlMHlhL1xXP3W1YG/YuX9pdCjwW/7g18469Ts=";
|
||||
};
|
||||
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -R . $out
|
||||
'';
|
||||
|
||||
patches = [
|
||||
# add `collection` variant
|
||||
./0001-Add-Collection-SearchType.patch
|
||||
];
|
||||
};
|
||||
in ''
|
||||
ln -s ${rspotify} ./rspotify-${rspotify.version}
|
||||
'';
|
||||
|
||||
cargoHash = "sha256-aZJ6Q/rvqrv+wvQw2eKFPnSROhI5vXPvr5pu1hwtZKA=";
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ] ++ lib.optionals stdenv.isLinux [ pkg-config python3 ];
|
||||
buildInputs = [ ]
|
||||
++ lib.optionals stdenv.isLinux [ openssl libxcb ]
|
||||
++ lib.optionals stdenv.isDarwin [ AppKit Security ];
|
||||
|
||||
postPatch = ''
|
||||
# update Cargo.lock to fix build
|
||||
ln -sf ${./Cargo.lock} Cargo.lock
|
||||
|
||||
# Add patch adding the collection variant to rspotify used by spotify-tu
|
||||
# This fixes the issue of getting an error when playing liked songs
|
||||
# see https://github.com/NixOS/nixpkgs/pull/170915
|
||||
patch -p1 -d $cargoDepsCopy/rspotify-0.10.0 < ${./0001-Add-Collection-SearchType.patch}
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
for shell in bash fish zsh; do
|
||||
$out/bin/spt --completions $shell > spt.$shell
|
||||
|
@ -91,7 +52,7 @@ rustPlatform.buildRustPackage rec {
|
|||
description = "Spotify for the terminal written in Rust";
|
||||
homepage = "https://github.com/Rigellute/spotify-tui";
|
||||
changelog = "https://github.com/Rigellute/spotify-tui/blob/v${version}/CHANGELOG.md";
|
||||
license = licenses.mit;
|
||||
license = with licenses; [ mit /* or */ asl20 ];
|
||||
maintainers = with maintainers; [ jwijenbergh ];
|
||||
mainProgram = "spt";
|
||||
};
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
, fetchFromGitLab
|
||||
, rustPlatform
|
||||
, substituteAll
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, git
|
||||
, itstool
|
||||
|
@ -10,6 +11,7 @@
|
|||
, ninja
|
||||
, pkg-config
|
||||
, python3
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, borgbackup
|
||||
, gtk4
|
||||
|
@ -55,11 +57,10 @@ stdenv.mkDerivation rec {
|
|||
pkg-config
|
||||
python3
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gtk4
|
||||
|
|
|
@ -35,8 +35,6 @@ in
|
|||
|
||||
haskell-unicode-input-method = callPackage ./manual-packages/haskell-unicode-input-method { };
|
||||
|
||||
header-file-mode = callPackage ./manual-packages/header-file-mode { };
|
||||
|
||||
helm-words = callPackage ./manual-packages/helm-words { };
|
||||
|
||||
idris2-mode = callPackage ./manual-packages/idris2-mode { };
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
{ trivialBuild
|
||||
, lib
|
||||
, fetchFromGitHub
|
||||
}:
|
||||
|
||||
trivialBuild {
|
||||
pname = "header-file-mode";
|
||||
version = "unstable-2022-05-25";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "aidalgol";
|
||||
repo = "header-file-mode";
|
||||
rev = "cf6ce33b436ae9631aece1cd30a459cb0f89d1cd";
|
||||
sha256 = "sha256-+TDJubmBc0Hl+2ms58rnOf3hTaQE3ayrIpGWl4j39GQ=";
|
||||
};
|
||||
|
||||
postUnpack = ''
|
||||
sourceRoot="$sourceRoot/lisp"
|
||||
'';
|
||||
|
||||
postBuild = ''
|
||||
emacs -L . --batch -l package --eval '(package-generate-autoloads "header-file" ".")'
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = ''
|
||||
A major mode that, when associated with the .h file extension, will put
|
||||
those file into the major mode of their corresponding implementation file.
|
||||
'';
|
||||
license = lib.licenses.gpl3Plus;
|
||||
platforms = lib.platforms.all;
|
||||
maintainers = with lib.maintainers; [ aidalgol ];
|
||||
};
|
||||
}
|
|
@ -645,6 +645,22 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
coder.coder-remote = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "coder-remote";
|
||||
publisher = "coder";
|
||||
version = "0.1.18";
|
||||
sha256 = "soNGZuyvG5+haWRcwYmYB+0OcyDAm4UQ419UnEd8waA=";
|
||||
};
|
||||
meta = {
|
||||
description = "An extension for Visual Studio Code to open any Coder workspace in VS Code with a single click.";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=coder.coder-remote";
|
||||
homepage = "https://github.com/coder/vscode-coder";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.drupol ];
|
||||
};
|
||||
};
|
||||
|
||||
codezombiech.gitignore = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "gitignore";
|
||||
|
@ -1442,11 +1458,31 @@ let
|
|||
mktplcRef = {
|
||||
name = "vscode-graphql";
|
||||
publisher = "GraphQL";
|
||||
version = "0.8.6";
|
||||
sha256 = "sha256-iQWDYdz/TG8pxPEq9RirNtY4kwhpK+gO0It6OTdrM+0=";
|
||||
version = "0.8.7";
|
||||
sha256 = "sha256-u3VcpgLKiEeUr1I6w71wleKyaO6v0gmHiw5Ama6fv88=";
|
||||
};
|
||||
meta = {
|
||||
description = "GraphQL extension for VSCode built with the aim to tightly integrate the GraphQL Ecosystem with VSCode for an awesome developer experience.";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=GraphQL.vscode-graphql";
|
||||
homepage = "https://github.com/graphql/graphiql/tree/main/packages/vscode-graphql";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.Enzime ];
|
||||
};
|
||||
};
|
||||
|
||||
graphql.vscode-graphql-syntax = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-graphql-syntax";
|
||||
publisher = "GraphQL";
|
||||
version = "1.1.0";
|
||||
sha256 = "sha256-qazU0UyZ9de6Huj2AYZqqBo4jVW/ZQmFJhV7XXAblxo=";
|
||||
};
|
||||
meta = {
|
||||
description = "Adds full GraphQL syntax highlighting and language support such as bracket matching.";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=GraphQL.vscode-graphql-syntax";
|
||||
homepage = "https://github.com/graphql/graphiql/tree/main/packages/vscode-graphql-syntax";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.Enzime ];
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -12,13 +12,13 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "zsnes2";
|
||||
version = "2.0.10";
|
||||
version = "2.0.12";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "xyproto";
|
||||
repo = "zsnes";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-QFPl3I2nFWMmgQRGxrlt4Vh5N4SygvBLjeFiQpgRr8o=";
|
||||
hash = "sha256-Xz+9YgMpnHyno7vP67aut4tIyG/gTn7SnU2FO2QMND0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -3,11 +3,13 @@
|
|||
, fetchFromGitLab
|
||||
, rustPlatform
|
||||
, appstream-glib
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, glib
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, gtk4
|
||||
, libadwaita
|
||||
|
@ -43,11 +45,10 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gtk4
|
||||
|
|
|
@ -2,12 +2,14 @@
|
|||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, rustPlatform
|
||||
, cargo
|
||||
, pkg-config
|
||||
, meson
|
||||
, ninja
|
||||
, glib
|
||||
, gtk4
|
||||
, libadwaita
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, appstream-glib
|
||||
, desktop-file-utils
|
||||
|
@ -37,11 +39,10 @@ stdenv.mkDerivation rec {
|
|||
wrapGAppsHook4
|
||||
appstream-glib
|
||||
desktop-file-utils
|
||||
] ++ (with rustPlatform; [
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
cargoSetupHook
|
||||
]);
|
||||
cargo
|
||||
rustc
|
||||
rustPlatform.cargoSetupHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
|
|
|
@ -3,9 +3,11 @@
|
|||
, fetchFromGitLab
|
||||
, libclang
|
||||
, rustPlatform
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
, rustc
|
||||
, glib
|
||||
, gtk4
|
||||
, libadwaita
|
||||
|
@ -46,11 +48,10 @@ clangStdenv.mkDerivation rec {
|
|||
wrapGAppsHook4
|
||||
appstream-glib
|
||||
desktop-file-utils
|
||||
] ++ (with rustPlatform; [
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
cargoSetupHook
|
||||
]);
|
||||
cargo
|
||||
rustc
|
||||
rustPlatform.cargoSetupHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, fetchFromGitLab
|
||||
, cargo
|
||||
, gettext
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, appstream-glib
|
||||
, desktop-file-utils
|
||||
|
@ -40,8 +42,8 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
wrapGAppsHook4
|
||||
appstream-glib
|
||||
desktop-file-utils
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{ stdenv, lib, fetchFromGitHub
|
||||
, imagemagick, pkg-config, wayland, wayland-protocols
|
||||
, imagemagick, pkg-config, wayland-scanner, wayland, wayland-protocols
|
||||
, unstableGitUpdater
|
||||
}:
|
||||
|
||||
|
@ -14,7 +14,8 @@ stdenv.mkDerivation {
|
|||
sha256 = "NMQE2zU858b6OZhdS2oZnGvLK+eb7yU0nFaMAcpNw04=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ imagemagick pkg-config ];
|
||||
depsBuildBuild = [ pkg-config ];
|
||||
nativeBuildInputs = [ imagemagick pkg-config wayland-scanner ];
|
||||
buildInputs = [ wayland wayland-protocols ];
|
||||
|
||||
installPhase = ''
|
||||
|
|
|
@ -6,11 +6,13 @@
|
|||
, gtk4
|
||||
, lib
|
||||
, libadwaita
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, nix-update-script
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, stdenv
|
||||
, wrapGAppsHook4
|
||||
}:
|
||||
|
@ -41,11 +43,10 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gst_all_1.gst-libav
|
||||
|
|
|
@ -2,9 +2,11 @@
|
|||
, stdenv
|
||||
, rustPlatform
|
||||
, fetchFromGitHub
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, appstream-glib
|
||||
, desktop-file-utils
|
||||
|
@ -37,11 +39,10 @@ stdenv.mkDerivation rec {
|
|||
wrapGAppsHook4
|
||||
appstream-glib
|
||||
desktop-file-utils
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
, fetchFromGitHub
|
||||
, alsa-lib
|
||||
, appstream-glib
|
||||
, cargo
|
||||
, cmake
|
||||
, desktop-file-utils
|
||||
, glib
|
||||
|
@ -16,6 +17,7 @@
|
|||
, poppler
|
||||
, python3
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, shared-mime-info
|
||||
, wrapGAppsHook4
|
||||
, AudioUnit
|
||||
|
@ -51,8 +53,8 @@ stdenv.mkDerivation rec {
|
|||
python3 # For the postinstall script
|
||||
rustPlatform.bindgenHook
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
shared-mime-info # For update-mime-database
|
||||
wrapGAppsHook4
|
||||
];
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{ lib
|
||||
, mkDerivation
|
||||
, cargo
|
||||
, cmake
|
||||
, corrosion
|
||||
, extra-cmake-modules
|
||||
|
@ -17,6 +18,7 @@
|
|||
, qqc2-desktop-style
|
||||
, qtwebengine
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, srcs
|
||||
|
||||
# These must be updated in tandem with package updates.
|
||||
|
@ -46,11 +48,10 @@ mkDerivation rec {
|
|||
cmake
|
||||
corrosion
|
||||
extra-cmake-modules
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
kconfig
|
||||
|
|
|
@ -2,11 +2,13 @@
|
|||
, stdenv
|
||||
, fetchFromGitLab
|
||||
, appstream-glib
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, gdk-pixbuf
|
||||
, glib
|
||||
|
@ -45,12 +47,11 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
bindgenHook
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
rustPlatform.bindgenHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gdk-pixbuf
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{ darwin
|
||||
{ cargo
|
||||
, darwin
|
||||
, desktop-file-utils
|
||||
, fetchFromGitLab
|
||||
, gettext
|
||||
|
@ -12,6 +13,7 @@
|
|||
, pkg-config
|
||||
, poppler
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, stdenv
|
||||
, testers
|
||||
, wrapGAppsHook4
|
||||
|
@ -43,8 +45,8 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
ninja
|
||||
pkg-config
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
wrapGAppsHook4
|
||||
];
|
||||
|
||||
|
|
2
pkgs/applications/misc/coltrane/Gemfile
Normal file
2
pkgs/applications/misc/coltrane/Gemfile
Normal file
|
@ -0,0 +1,2 @@
|
|||
source 'https://rubygems.org'
|
||||
gem 'coltrane'
|
45
pkgs/applications/misc/coltrane/Gemfile.lock
Normal file
45
pkgs/applications/misc/coltrane/Gemfile.lock
Normal file
|
@ -0,0 +1,45 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (7.0.4.2)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
cli-ui (1.5.1)
|
||||
color (1.8)
|
||||
coltrane (4.1.1)
|
||||
activesupport (> 5.2)
|
||||
color (~> 1.8)
|
||||
dry-monads (~> 0.4)
|
||||
gambiarra (~> 0)
|
||||
paint (~> 2.0)
|
||||
concurrent-ruby (1.2.2)
|
||||
dry-core (0.9.1)
|
||||
concurrent-ruby (~> 1.0)
|
||||
zeitwerk (~> 2.6)
|
||||
dry-equalizer (0.3.0)
|
||||
dry-monads (0.4.0)
|
||||
dry-core (~> 0.3, >= 0.3.3)
|
||||
dry-equalizer
|
||||
gambiarra (0.0.5)
|
||||
activesupport (> 5.2)
|
||||
cli-ui (~> 1.1)
|
||||
thor (~> 1.1.0)
|
||||
i18n (1.12.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
minitest (5.18.0)
|
||||
paint (2.3.0)
|
||||
thor (1.1.0)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
zeitwerk (2.6.7)
|
||||
|
||||
PLATFORMS
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
coltrane
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.26
|
23
pkgs/applications/misc/coltrane/default.nix
Normal file
23
pkgs/applications/misc/coltrane/default.nix
Normal file
|
@ -0,0 +1,23 @@
|
|||
{ lib
|
||||
, bundlerApp
|
||||
, bundlerUpdateScript
|
||||
}:
|
||||
|
||||
bundlerApp rec {
|
||||
pname = "coltrane";
|
||||
gemdir = ./.;
|
||||
exes = [ "coltrane" ];
|
||||
|
||||
passthru.updateScript = bundlerUpdateScript pname;
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/pedrozath/coltrane";
|
||||
description = "A music calculation library/CLI";
|
||||
longDescription = ''
|
||||
coltrane allows to search for Notes, Chords, Scales for
|
||||
guitar, bass, piano and ukelele
|
||||
'';
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.panaeon ];
|
||||
};
|
||||
}
|
159
pkgs/applications/misc/coltrane/gemset.nix
Normal file
159
pkgs/applications/misc/coltrane/gemset.nix
Normal file
|
@ -0,0 +1,159 @@
|
|||
{
|
||||
activesupport = {
|
||||
dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0dmywys50074vj5rivpx188b00qimlc4jn84xzqlialrgp3ckq5f";
|
||||
type = "gem";
|
||||
};
|
||||
version = "7.0.4.2";
|
||||
};
|
||||
cli-ui = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1aghiy4qrh6y6q421lcpal81c98zypj8jki4wymqnc8vjvqsyiv4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.1";
|
||||
};
|
||||
color = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "10kgsdy86p72q6cf2k92larmbjc0crvd5xq7hy919zm8yvn1518a";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.8";
|
||||
};
|
||||
coltrane = {
|
||||
dependencies = ["activesupport" "color" "dry-monads" "gambiarra" "paint"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0hchdllbbx2n2fl3ydidl17rsl18mb9953c8k1r6rw1ibzw8sm7f";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.1.1";
|
||||
};
|
||||
concurrent-ruby = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.2";
|
||||
};
|
||||
dry-core = {
|
||||
dependencies = ["concurrent-ruby" "zeitwerk"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1dpm9dk11x2zcjsymkl5jcz5nxhffsg7qqy5p6h92cppzbwmm656";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.1";
|
||||
};
|
||||
dry-equalizer = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0rsqpk0gjja6j6pjm0whx2px06cxr3h197vrwxp6k042p52r4v46";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.3.0";
|
||||
};
|
||||
dry-monads = {
|
||||
dependencies = ["dry-core" "dry-equalizer"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1fbji6crgqh88j0p4j1qlfpjnhyf8h1b991dh5wypib0xwzlc5an";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.4.0";
|
||||
};
|
||||
gambiarra = {
|
||||
dependencies = ["activesupport" "cli-ui" "thor"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "19kpbqp27fy6w990ciw3vx0z0bdmrcf14fr6dlfcn3r8xqpq56fr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.0.5";
|
||||
};
|
||||
i18n = {
|
||||
dependencies = ["concurrent-ruby"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.12.0";
|
||||
};
|
||||
minitest = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0ic7i5z88zcaqnpzprf7saimq2f6sad57g5mkkqsrqrcd6h3mx06";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.18.0";
|
||||
};
|
||||
paint = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1r9vx3wcx0x2xqlh6zqc81wcsn9qjw3xprcsv5drsq9q80z64z9j";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.3.0";
|
||||
};
|
||||
thor = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
tzinfo = {
|
||||
dependencies = ["concurrent-ruby"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.6";
|
||||
};
|
||||
zeitwerk = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "028ld9qmgdllxrl7d0qkl65s58wb1n3gv8yjs28g43a8b1hplxk1";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.6.7";
|
||||
};
|
||||
}
|
|
@ -1,5 +1,8 @@
|
|||
{ lib, stdenv, fetchFromGitHub, rustPlatform, appstream-glib, desktop-file-utils
|
||||
, glib, libadwaita, meson, ninja, pkg-config, wrapGAppsHook4, dbus , gtk4, sqlite }:
|
||||
{ lib, stdenv, fetchFromGitHub, rustPlatform
|
||||
, appstream-glib, cargo, desktop-file-utils, glib, libadwaita, meson, ninja
|
||||
, pkg-config, rustc, wrapGAppsHook4
|
||||
, dbus, gtk4, sqlite
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "furtherance";
|
||||
|
@ -25,8 +28,8 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
wrapGAppsHook4
|
||||
];
|
||||
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
perlPackages.buildPerlPackage rec {
|
||||
pname = "get_iplayer";
|
||||
version = "3.27";
|
||||
version = "3.31";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "get-iplayer";
|
||||
repo = "get_iplayer";
|
||||
rev = "v${version}";
|
||||
sha256 = "077y31gg020wjpx5pcivqgkqawcjxh5kjnvq97x2gd7i3wwc30qi";
|
||||
sha256 = "+ChCF27nmPKbqaZVxsZ6TlbzSdEz6RfMs87NE8xaSRw=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
buildInputs = [ perl ];
|
||||
propagatedBuildInputs = with perlPackages; [
|
||||
HTMLParser HTTPCookies LWP LWPProtocolHttps XMLLibXML XMLSimple
|
||||
HTMLParser HTTPCookies LWP LWPProtocolHttps XMLLibXML XMLSimple Mojolicious
|
||||
];
|
||||
|
||||
preConfigure = "touch Makefile.PL";
|
||||
|
|
|
@ -3,10 +3,12 @@
|
|||
, fetchFromGitLab
|
||||
, fetchpatch
|
||||
, rustPlatform
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
, rustc
|
||||
, wrapGAppsHook
|
||||
, python3
|
||||
, git
|
||||
|
@ -55,11 +57,10 @@ stdenv.mkDerivation rec {
|
|||
python3
|
||||
git
|
||||
desktop-file-utils
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "itd";
|
||||
version = "1.0.0";
|
||||
version = "1.1.0";
|
||||
|
||||
# https://gitea.arsenm.dev/Arsen6331/itd/tags
|
||||
src = fetchFromGitea {
|
||||
|
@ -14,10 +14,10 @@ buildGoModule rec {
|
|||
owner = "Arsen6331";
|
||||
repo = "itd";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-von/gvKnm69r/Z3Znm9IW97LfRq4v1cpv5z05h0ahek=";
|
||||
hash = "sha256-95/9Qy0HhrX+ORuv6g1T4/Eq1hf539lYG5fTkLeY6B0=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-Sj1ASrb80AgZDfIwmSspArRXSaxP8FlXYi9xyWfCYWk=";
|
||||
vendorHash = "sha256-ZkAxNs4yDUFBhhmIRtzxQlEQtsa/BTuHy0g3taFcrMM=";
|
||||
|
||||
preBuild = ''
|
||||
echo r${version} > version.txt
|
||||
|
|
|
@ -9,13 +9,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "mob";
|
||||
version = "4.4.1";
|
||||
version = "4.4.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "remotemobprogramming";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-Ovp+JsNqFcOMk054khSdvPebFsv/fQD1Ghox8J3YcgA=";
|
||||
sha256 = "sha256-muKlzOrqtegy35QcGJvwYqIJ9XZsaAvyofsrWPqCi7k=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, cargo
|
||||
, cmake
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, wrapQtAppsHook
|
||||
, ibus
|
||||
, qtbase
|
||||
|
@ -25,8 +27,8 @@ stdenv.mkDerivation rec {
|
|||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkg-config
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
rustPlatform.cargoSetupHook
|
||||
wrapQtAppsHook
|
||||
];
|
||||
|
|
|
@ -90,11 +90,11 @@ in
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "brave";
|
||||
version = "1.51.110";
|
||||
version = "1.51.114";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
|
||||
sha256 = "sha256-O0nzJvnZU1xIzEtGdp/syQJqS4xMTrWBcNj01dLKc0U=";
|
||||
sha256 = "sha256-lykwmfGqH5VuWazEQuvTpD4ett4m+LCFmmxzjkULfmk=";
|
||||
};
|
||||
|
||||
dontConfigure = true;
|
||||
|
|
|
@ -27,7 +27,7 @@ in writeScript "update-${pname}" ''
|
|||
HOME=`mktemp -d`
|
||||
export GNUPGHOME=`mktemp -d`
|
||||
|
||||
gpg --receive-keys 14F26682D0916CDD81E37B6D61B7B526D98F0353
|
||||
gpg --receive-keys ADD7079479700DCADFDD5337E36D3B13F3D93274
|
||||
|
||||
tmpfile=`mktemp`
|
||||
url=${baseUrl}
|
||||
|
|
|
@ -22,7 +22,7 @@ writeScript "update-${attrPath}" ''
|
|||
set -eux
|
||||
HOME=`mktemp -d`
|
||||
export GNUPGHOME=`mktemp -d`
|
||||
gpg --receive-keys 14F26682D0916CDD81E37B6D61B7B526D98F0353
|
||||
gpg --receive-keys ADD7079479700DCADFDD5337E36D3B13F3D93274
|
||||
|
||||
url=${baseUrl}
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{ lib, buildGoModule, fetchFromGitHub, fetchzip, installShellFiles, stdenv }:
|
||||
|
||||
let
|
||||
version = "2.0.0-rc.1";
|
||||
sha256 = "0hy8jphb6pd24qifnjgzm2jwz93c5rsk08p8k9kl1fzlz7bivg9g";
|
||||
manifestsSha256 = "0v6skn065hqk0pq5k7c48g68pnpj5har8cfhgbc8xjzg149a22wa";
|
||||
version = "2.0.0-rc.2";
|
||||
sha256 = "0b7ls2amzmfjy6hw6kwcmhjj2wdara4igwk2wby6ah2yj5nipb45";
|
||||
manifestsSha256 = "1xj0g65czl20j8axi6n07sm9ijzmr7vhczfdpx4xqx6m3bl9vqxs";
|
||||
|
||||
manifests = fetchzip {
|
||||
url =
|
||||
|
@ -23,7 +23,7 @@ in buildGoModule rec {
|
|||
inherit sha256;
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-ifzzNEFXq2VzidaxCTdz7VZOCoA0zPcK6uL0CyBNrE4=";
|
||||
vendorSha256 = "sha256-HWKpaMHBX8wvG2aDX/U9lI9KNMcbBNxxG3yigYa+VX8=";
|
||||
|
||||
postUnpack = ''
|
||||
cp -r ${manifests} source/cmd/flux/manifests
|
||||
|
|
5211
pkgs/applications/networking/cluster/habitat/Cargo.lock
generated
5211
pkgs/applications/networking/cluster/habitat/Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -1,45 +1,66 @@
|
|||
{ lib, fetchFromGitHub, rustPlatform, pkg-config
|
||||
, libsodium, libarchive, openssl, zeromq }:
|
||||
{ lib
|
||||
, rustPlatform
|
||||
, fetchFromGitHub
|
||||
, pkg-config
|
||||
, protobuf
|
||||
, libsodium
|
||||
, openssl
|
||||
, xz
|
||||
, zeromq
|
||||
, cacert
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "habitat";
|
||||
# Newer versions required protobuf, which requires some finesse to get to
|
||||
# compile with the vendored protobuf crate.
|
||||
version = "0.90.6";
|
||||
version = "1.6.652";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "habitat-sh";
|
||||
repo = "habitat";
|
||||
rev = version;
|
||||
sha256 = "0rwi0lkmhlq4i8fba3s9nd9ajhz2dqxzkgfp5i8y0rvbfmhmfd6b";
|
||||
hash = "sha256-aWQ4A8NxTOauwad1q58Q4IFDUImX/L/4YTCeVLaq8gw=";
|
||||
};
|
||||
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
outputHashes = {
|
||||
"ipc-channel-0.9.0" = "sha256-ZinW3vTsb6dWDRN1/P4TlOlbjiQSHkE6n6f1yEiKsbA=";
|
||||
"nats-0.3.2" = "sha256-ebZSSczF76FMsYRC9hc4n9yTQVyAD4JgaqpFvGG+01U=";
|
||||
"zmq-0.8.3" = "sha256-ZydP7ThHvLMWc8snm52Wlhji35Gn5Y2TzzN75UH5xLE=";
|
||||
"clap-2.33.1" = "sha256-ixyNr91VNB2ce2cIr0CdPmvKYRlckhKLeaSbqxouIAY=";
|
||||
"configopt-0.1.0" = "sha256-DvpC4WDIzknN5A6+68H7p8bG5lwZ2f+kc9yYhTl16ZM=";
|
||||
"rants-0.6.0" = "sha256-B8uDoiqddCki3j7aC8kilEcmJjvB4ICjZjjTun2UEkY=";
|
||||
"retry-1.0.0" = "sha256-ZaHnzOCelV4V0+MTIbH3DXxdz8QZVgcMq2YeV0S6X6o=";
|
||||
"structopt-0.3.15" = "sha256-0vIX7J7VktKytT3ZnOm45qPRMHDkdJg20eU6pZBIH+Q=";
|
||||
"zmq-0.9.2" = "sha256-bsDCPYLb9hUr6htPQ7rSoasKAqoWBx5FiEY1gOOtdJQ=";
|
||||
};
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ libsodium libarchive openssl zeromq ];
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
protobuf
|
||||
];
|
||||
|
||||
cargoBuildFlags = ["--package hab"];
|
||||
buildInputs = [
|
||||
libsodium
|
||||
openssl
|
||||
xz
|
||||
zeromq
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
echo "Running cargo test"
|
||||
cargo test --package hab
|
||||
runHook postCheck
|
||||
'';
|
||||
cargoBuildFlags = [ "-p" "hab" ];
|
||||
cargoTestFlags = cargoBuildFlags;
|
||||
|
||||
env = {
|
||||
OPENSSL_NO_VENDOR = true;
|
||||
SODIUM_USE_PKG_CONFIG = true;
|
||||
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "An application automation framework";
|
||||
homepage = "https://www.habitat.sh";
|
||||
changelog = "https://github.com/habitat-sh/habitat/blob/${src.rev}/CHANGELOG.md";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ rushmorem ];
|
||||
mainProgram = "hab";
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "kubeshark";
|
||||
version = "40.1";
|
||||
version = "40.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kubeshark";
|
||||
repo = "kubeshark";
|
||||
rev = version;
|
||||
sha256 = "sha256-hRAV8Nnph52Q7fdvW68Ma4DUM0lQdL6e0v1reR/G9Fs=";
|
||||
sha256 = "sha256-E39Hr39fPiRKElploh2EEE35x0vnyAf2eWHr8Ifx0l0=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-ckIjmrXkn1AVBQRwM6+wdRwwYHytxKm3rKEe+csORdU=";
|
||||
|
@ -55,6 +55,6 @@ buildGoModule rec {
|
|||
Think TCPDump and Wireshark re-invented for Kubernetes
|
||||
capturing, dissecting and monitoring all traffic and payloads going in, out and across containers, pods, nodes and clusters.
|
||||
'';
|
||||
maintainers = with maintainers; [ bryanasdev000 ];
|
||||
maintainers = with maintainers; [ bryanasdev000 qjoly ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "rancher";
|
||||
version = "2.6.11";
|
||||
version = "2.7.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rancher";
|
||||
repo = "cli";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-1hIYFQ9Uwrm6chPXka0yK2XoZYHqv5lJoyENZmgMAwc=";
|
||||
sha256 = "sha256-co4LVd5A0bJ4CIuCfv6WyV8XCMbPCFAAcV12WekYrw4=";
|
||||
};
|
||||
|
||||
ldflags = [
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "dnscontrol";
|
||||
version = "3.31.3";
|
||||
version = "3.31.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "StackExchange";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-jGM/Of5/wSMs7cedbGmgJC05gxxHOCAjjEZ2Qmlxgew=";
|
||||
sha256 = "sha256-BHsvw4X8HWxAACq+4/rR/XHjVVt0qmAxYETDyp1Z/cg=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-N7KS48Kr9SipliZ9JhMo2u9pRoE8+pxhC8B/YcZlNyg=";
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cfdyndns";
|
||||
version = "0.0.3";
|
||||
version = "0.0.4";
|
||||
src = fetchFromGitHub {
|
||||
owner = "colemickens";
|
||||
repo = "cfdyndns";
|
||||
rev = "v${version}";
|
||||
sha256 = "1fba0w2979dmc2wyggqx4fj52rrl1s2vpjk6mkj1811a848l1hdi";
|
||||
hash = "sha256-kgpTKhMvxuy+Q9M5U/PKJt7pZ2kSQxkCNjNu8aIyutg=";
|
||||
};
|
||||
|
||||
cargoSha256 = "06qbagq4gvm5vk846lxskli02z9lqxsvis6ndq29bj0b9yyvdkay";
|
||||
cargoHash = "sha256-78TQkRHEbSaCyCM48hH1h8GG0BGJmC2zc7gTZc2t9Nc=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ openssl ];
|
||||
|
|
|
@ -2,9 +2,11 @@
|
|||
, stdenv
|
||||
, rustPlatform
|
||||
, fetchFromGitLab
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, gdk-pixbuf
|
||||
, glib
|
||||
|
@ -65,11 +67,10 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
|
||||
# Provides glib-compile-resources to compile gresources
|
||||
glib
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gtk4
|
||||
|
|
|
@ -7,11 +7,11 @@ let
|
|||
python = python3.override {
|
||||
packageOverrides = self: super: {
|
||||
sqlalchemy = super.sqlalchemy.overridePythonAttrs (old: rec {
|
||||
version = "1.4.47";
|
||||
version = "1.4.48";
|
||||
src = self.fetchPypi {
|
||||
pname = "SQLAlchemy";
|
||||
inherit version;
|
||||
hash = "sha256-lfwC9/wfMZmqpHqKdXQ3E0z2GOnZlMhO/9U/Uww4WG8=";
|
||||
hash = "sha256-tHvChwltmJoIOM6W99jpZpFKJNqHftQadTHUS1XNuN8=";
|
||||
};
|
||||
});
|
||||
};
|
||||
|
@ -19,7 +19,7 @@ let
|
|||
in
|
||||
python.pkgs.buildPythonApplication rec {
|
||||
pname = "flexget";
|
||||
version = "3.6.3";
|
||||
version = "3.7.0";
|
||||
format = "pyproject";
|
||||
|
||||
# Fetch from GitHub in order to use `requirements.in`
|
||||
|
@ -27,7 +27,7 @@ python.pkgs.buildPythonApplication rec {
|
|||
owner = "Flexget";
|
||||
repo = "Flexget";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-Z1tiIs4NHHsWa7agAl1dnwliQbgFEl/SPT6QLQkqTVA=";
|
||||
hash = "sha256-H+R2NPHJbpQToKI1Op+DqPt82+w2xHxHC9NPpiF3aF0=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitLab
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, pkg-config
|
||||
|
@ -8,6 +9,7 @@
|
|||
, libsecret
|
||||
, libadwaita
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, desktop-file-utils
|
||||
, wrapGAppsHook4
|
||||
}:
|
||||
|
@ -40,11 +42,10 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
libadwaita
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, fetchFromGitLab
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, pkg-config
|
||||
, glib
|
||||
, gtk4
|
||||
|
@ -49,8 +51,8 @@ stdenv.mkDerivation rec {
|
|||
pkg-config
|
||||
rustPlatform.bindgenHook
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
desktop-file-utils
|
||||
appstream-glib
|
||||
wrapGAppsHook4
|
||||
|
|
|
@ -2,11 +2,13 @@
|
|||
, lib
|
||||
, fetchFromGitLab
|
||||
, nix-update-script
|
||||
, cargo
|
||||
, meson
|
||||
, ninja
|
||||
, gettext
|
||||
, python3
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, pkg-config
|
||||
, gtksourceview4
|
||||
, glib
|
||||
|
@ -49,9 +51,9 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
python3
|
||||
rustPlatform.rust.cargo
|
||||
cargo
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.rustc
|
||||
rustc
|
||||
wrapGAppsHook
|
||||
glib
|
||||
];
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
, fetchgit
|
||||
, rustPlatform
|
||||
, pkg-config
|
||||
, openssl
|
||||
, dbus
|
||||
, sqlite
|
||||
, file
|
||||
, makeWrapper
|
||||
, notmuch
|
||||
# Build with support for notmuch backend
|
||||
, withNotmuch ? true
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "meli";
|
||||
version = "alpha-0.7.2";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.meli.delivery/meli/meli.git";
|
||||
rev = version;
|
||||
sha256 = "sha256-cbigEJhX6vL+gHa40cxplmPsDhsqujkzQxe0Dr6+SK0=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-ZE653OtXyZ9454bKPApmuL2kVko/hGBWEAya1L1KIoc=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config makeWrapper ];
|
||||
|
||||
buildInputs = [ openssl dbus sqlite ] ++ lib.optional withNotmuch notmuch;
|
||||
|
||||
nativeCheckInputs = [ file ];
|
||||
|
||||
buildFeatures = lib.optionals withNotmuch [ "notmuch" ];
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/share/man/man1
|
||||
gzip < docs/meli.1 > $out/share/man/man1/meli.1.gz
|
||||
mkdir -p $out/share/man/man5
|
||||
gzip < docs/meli.conf.5 > $out/share/man/man5/meli.conf.5.gz
|
||||
gzip < docs/meli-themes.5 > $out/share/man/man5/meli-themes.5.gz
|
||||
'' + lib.optionalString withNotmuch ''
|
||||
# Fixes this runtime error when meli is started with notmuch configured:
|
||||
# $ meli
|
||||
# libnotmuch5 was not found in your system. Make sure it is installed and
|
||||
# in the library paths.
|
||||
# notmuch is not a valid mail backend
|
||||
wrapProgram $out/bin/meli --set LD_LIBRARY_PATH ${notmuch}/lib
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
broken = (stdenv.isLinux && stdenv.isAarch64);
|
||||
description = "Experimental terminal mail client aiming for configurability and extensibility with sane defaults";
|
||||
homepage = "https://meli.delivery";
|
||||
license = licenses.gpl3;
|
||||
maintainers = with maintainers; [ _0x4A6F matthiasbeyer ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,553 @@
|
|||
From f4cea62ed95e4967d8591f25e903f5e8fc2e2a30 Mon Sep 17 00:00:00 2001
|
||||
From: Terry Geng <terry@terriex.com>
|
||||
Date: Mon, 6 Dec 2021 10:45:11 -0500
|
||||
Subject: [PATCH] BUILD(crypto): Migrate to OpenSSL 3.0-compatible API
|
||||
|
||||
OpenSSL 3.0 deprecated several low-level APIs and the usage of them
|
||||
caused errors/warnings that prevent the binary from being built against
|
||||
OpenSSL 3.0.
|
||||
Some primitive efforts have been made in #5317 but were incomplete.
|
||||
This commit follows https://www.openssl.org/docs/man3.0/man7/migration_guide.html,
|
||||
https://code.woboq.org/qt6/qtopcua/src/opcua/x509/qopcuakeypair_openssl.cpp.html,
|
||||
and clears all errors/warnings related to the usage of deprecated APIs.
|
||||
|
||||
Fixes #5277
|
||||
Fixes #4266
|
||||
---
|
||||
src/SelfSignedCertificate.cpp | 235 +++++++++++-----------------------
|
||||
src/SelfSignedCertificate.h | 5 +
|
||||
src/crypto/CryptStateOCB2.cpp | 53 +++++---
|
||||
src/crypto/CryptStateOCB2.h | 9 +-
|
||||
4 files changed, 121 insertions(+), 181 deletions(-)
|
||||
|
||||
diff --git a/src/SelfSignedCertificate.cpp b/src/SelfSignedCertificate.cpp
|
||||
index a77e5fad9..ea0dec4cc 100644
|
||||
--- a/src/SelfSignedCertificate.cpp
|
||||
+++ b/src/SelfSignedCertificate.cpp
|
||||
@@ -5,8 +5,6 @@
|
||||
|
||||
#include "SelfSignedCertificate.h"
|
||||
|
||||
-#include <openssl/x509v3.h>
|
||||
-
|
||||
#define SSL_STRING(x) QString::fromLatin1(x).toUtf8().data()
|
||||
|
||||
static int add_ext(X509 *crt, int nid, char *value) {
|
||||
@@ -28,108 +26,86 @@ static int add_ext(X509 *crt, int nid, char *value) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
-bool SelfSignedCertificate::generate(CertificateType certificateType, QString clientCertName, QString clientCertEmail,
|
||||
- QSslCertificate &qscCert, QSslKey &qskKey) {
|
||||
- bool ok = true;
|
||||
- X509 *x509 = nullptr;
|
||||
- EVP_PKEY *pkey = nullptr;
|
||||
- RSA *rsa = nullptr;
|
||||
- BIGNUM *e = nullptr;
|
||||
- X509_NAME *name = nullptr;
|
||||
- ASN1_INTEGER *serialNumber = nullptr;
|
||||
- ASN1_TIME *notBefore = nullptr;
|
||||
- ASN1_TIME *notAfter = nullptr;
|
||||
- QString commonName;
|
||||
- bool isServerCert = certificateType == CertificateTypeServerCertificate;
|
||||
-
|
||||
- if (CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) == -1) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+EVP_PKEY *SelfSignedCertificate::generate_rsa_keypair() {
|
||||
+ EVP_PKEY *pkey = EVP_PKEY_new();
|
||||
+ if (!pkey) {
|
||||
+ return nullptr;
|
||||
}
|
||||
|
||||
- x509 = X509_new();
|
||||
- if (!x509) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||
+ EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, nullptr);
|
||||
+ if (!ctx) {
|
||||
+ return nullptr;
|
||||
}
|
||||
-
|
||||
- pkey = EVP_PKEY_new();
|
||||
- if (!pkey) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+ if (EVP_PKEY_keygen_init(ctx) <= 0) {
|
||||
+ return nullptr;
|
||||
}
|
||||
-
|
||||
- rsa = RSA_new();
|
||||
+ if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0) {
|
||||
+ return nullptr;
|
||||
+ }
|
||||
+ if (EVP_PKEY_keygen(ctx, &pkey) <= 0) {
|
||||
+ return nullptr;
|
||||
+ }
|
||||
+ EVP_PKEY_CTX_free(ctx);
|
||||
+#else
|
||||
+ RSA *rsa = RSA_new();
|
||||
+ BIGNUM *e = BN_new();
|
||||
if (!rsa) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+ return nullptr;
|
||||
}
|
||||
-
|
||||
- e = BN_new();
|
||||
if (!e) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+ return nullptr;
|
||||
}
|
||||
if (BN_set_word(e, 65537) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+ return nullptr;
|
||||
}
|
||||
-
|
||||
if (RSA_generate_key_ex(rsa, 2048, e, nullptr) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+ return nullptr;
|
||||
}
|
||||
-
|
||||
if (EVP_PKEY_assign_RSA(pkey, rsa) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+ return nullptr;
|
||||
}
|
||||
+ BN_free(e);
|
||||
+ RSA_free(rsa);
|
||||
+#endif
|
||||
+ return pkey;
|
||||
+}
|
||||
|
||||
- if (X509_set_version(x509, 2) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
+#define CHECK(statement) \
|
||||
+ if (!(statement)) { \
|
||||
+ ok = false; \
|
||||
+ goto out; \
|
||||
}
|
||||
|
||||
- serialNumber = X509_get_serialNumber(x509);
|
||||
- if (!serialNumber) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
- if (ASN1_INTEGER_set(serialNumber, 1) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
|
||||
- notBefore = X509_get_notBefore(x509);
|
||||
- if (!notBefore) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
- if (!X509_gmtime_adj(notBefore, 0)) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+bool SelfSignedCertificate::generate(CertificateType certificateType, QString clientCertName, QString clientCertEmail,
|
||||
+ QSslCertificate &qscCert, QSslKey &qskKey) {
|
||||
+ bool ok = true;
|
||||
+ EVP_PKEY *pkey = nullptr;
|
||||
+ X509 *x509 = nullptr;
|
||||
+ X509_NAME *name = nullptr;
|
||||
+ ASN1_INTEGER *serialNumber = nullptr;
|
||||
+ ASN1_TIME *notBefore = nullptr;
|
||||
+ ASN1_TIME *notAfter = nullptr;
|
||||
+ QString commonName;
|
||||
+ bool isServerCert = certificateType == CertificateTypeServerCertificate;
|
||||
|
||||
- notAfter = X509_get_notAfter(x509);
|
||||
- if (!notAfter) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
- if (!X509_gmtime_adj(notAfter, 60 * 60 * 24 * 365 * 20)) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ // In Qt 5.15, a class was added to wrap up the procedures of generating a self-signed certificate.
|
||||
+ // See https://doc.qt.io/qt-5/qopcuax509certificatesigningrequest.html.
|
||||
+ // We should consider migrating to this class after switching to Qt 5.15.
|
||||
|
||||
- if (X509_set_pubkey(x509, pkey) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(pkey = generate_rsa_keypair());
|
||||
|
||||
- name = X509_get_subject_name(x509);
|
||||
- if (!name) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(x509 = X509_new());
|
||||
+ CHECK(X509_set_version(x509, 2));
|
||||
+ CHECK(serialNumber = X509_get_serialNumber(x509));
|
||||
+ CHECK(ASN1_INTEGER_set(serialNumber, 1));
|
||||
+ CHECK(notBefore = X509_get_notBefore(x509));
|
||||
+ CHECK(X509_gmtime_adj(notBefore, 0));
|
||||
+ CHECK(notAfter = X509_get_notAfter(x509));
|
||||
+ CHECK(X509_gmtime_adj(notAfter, 60 * 60 * 24 * 365 * 20))
|
||||
+ CHECK(X509_set_pubkey(x509, pkey));
|
||||
+ CHECK(name = X509_get_subject_name(x509));
|
||||
|
||||
if (isServerCert) {
|
||||
commonName = QLatin1String("Murmur Autogenerated Certificate v2");
|
||||
@@ -141,120 +117,63 @@ bool SelfSignedCertificate::generate(CertificateType certificateType, QString cl
|
||||
}
|
||||
}
|
||||
|
||||
- if (X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_UTF8,
|
||||
- reinterpret_cast< unsigned char * >(commonName.toUtf8().data()), -1, -1, 0)
|
||||
- == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_UTF8,
|
||||
+ reinterpret_cast< unsigned char * >(commonName.toUtf8().data()), -1, -1, 0));
|
||||
|
||||
- if (X509_set_issuer_name(x509, name) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(X509_set_issuer_name(x509, name));
|
||||
|
||||
- if (add_ext(x509, NID_basic_constraints, SSL_STRING("critical,CA:FALSE")) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(add_ext(x509, NID_basic_constraints, SSL_STRING("critical,CA:FALSE")));
|
||||
|
||||
if (isServerCert) {
|
||||
- if (add_ext(x509, NID_ext_key_usage, SSL_STRING("serverAuth,clientAuth")) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(add_ext(x509, NID_ext_key_usage, SSL_STRING("serverAuth,clientAuth")))
|
||||
} else {
|
||||
- if (add_ext(x509, NID_ext_key_usage, SSL_STRING("clientAuth")) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(add_ext(x509, NID_ext_key_usage, SSL_STRING("clientAuth")));
|
||||
}
|
||||
|
||||
- if (add_ext(x509, NID_subject_key_identifier, SSL_STRING("hash")) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(add_ext(x509, NID_subject_key_identifier, SSL_STRING("hash")));
|
||||
|
||||
if (isServerCert) {
|
||||
- if (add_ext(x509, NID_netscape_comment, SSL_STRING("Generated from murmur")) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(add_ext(x509, NID_netscape_comment, SSL_STRING("Generated from murmur")));
|
||||
} else {
|
||||
- if (add_ext(x509, NID_netscape_comment, SSL_STRING("Generated by Mumble")) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(add_ext(x509, NID_netscape_comment, SSL_STRING("Generated by Mumble")));
|
||||
}
|
||||
|
||||
if (!isServerCert) {
|
||||
if (!clientCertEmail.trimmed().isEmpty()) {
|
||||
- if (add_ext(x509, NID_subject_alt_name,
|
||||
- QString::fromLatin1("email:%1").arg(clientCertEmail).toUtf8().data())
|
||||
- == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(add_ext(x509, NID_subject_alt_name,
|
||||
+ QString::fromLatin1("email:%1").arg(clientCertEmail).toUtf8().data()));
|
||||
}
|
||||
}
|
||||
|
||||
- if (X509_sign(x509, pkey, EVP_sha1()) == 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(X509_sign(x509, pkey, EVP_sha1()));
|
||||
|
||||
{
|
||||
QByteArray crt;
|
||||
int len = i2d_X509(x509, nullptr);
|
||||
- if (len <= 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(len > 0);
|
||||
crt.resize(len);
|
||||
|
||||
unsigned char *dptr = reinterpret_cast< unsigned char * >(crt.data());
|
||||
- if (i2d_X509(x509, &dptr) != len) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(i2d_X509(x509, &dptr) == len);
|
||||
|
||||
qscCert = QSslCertificate(crt, QSsl::Der);
|
||||
- if (qscCert.isNull()) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(!qscCert.isNull());
|
||||
}
|
||||
|
||||
{
|
||||
QByteArray key;
|
||||
int len = i2d_PrivateKey(pkey, nullptr);
|
||||
- if (len <= 0) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(len > 0);
|
||||
key.resize(len);
|
||||
|
||||
unsigned char *dptr = reinterpret_cast< unsigned char * >(key.data());
|
||||
- if (i2d_PrivateKey(pkey, &dptr) != len) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(i2d_PrivateKey(pkey, &dptr) == len);
|
||||
|
||||
qskKey = QSslKey(key, QSsl::Rsa, QSsl::Der);
|
||||
- if (qskKey.isNull()) {
|
||||
- ok = false;
|
||||
- goto out;
|
||||
- }
|
||||
+ CHECK(!qskKey.isNull());
|
||||
}
|
||||
|
||||
out:
|
||||
- if (e) {
|
||||
- BN_free(e);
|
||||
- }
|
||||
- // We only need to free the pkey pointer,
|
||||
- // not the RSA pointer. We have assigned
|
||||
- // our RSA key to pkey, and it will be freed
|
||||
- // once we free pkey.
|
||||
if (pkey) {
|
||||
EVP_PKEY_free(pkey);
|
||||
}
|
||||
diff --git a/src/SelfSignedCertificate.h b/src/SelfSignedCertificate.h
|
||||
index b85a8752b..7c5f59e9c 100644
|
||||
--- a/src/SelfSignedCertificate.h
|
||||
+++ b/src/SelfSignedCertificate.h
|
||||
@@ -6,6 +6,10 @@
|
||||
#ifndef MUMBLE_SELFSIGNEDCERTIFICATE_H_
|
||||
#define MUMBLE_SELFSIGNEDCERTIFICATE_H_
|
||||
|
||||
+#include <openssl/evp.h>
|
||||
+#include <openssl/rsa.h>
|
||||
+#include <openssl/x509v3.h>
|
||||
+
|
||||
#include <QtCore/QString>
|
||||
#include <QtNetwork/QSslCertificate>
|
||||
#include <QtNetwork/QSslKey>
|
||||
@@ -16,6 +20,7 @@ class SelfSignedCertificate {
|
||||
private:
|
||||
static bool generate(CertificateType certificateType, QString clientCertName, QString clientCertEmail,
|
||||
QSslCertificate &qscCert, QSslKey &qskKey);
|
||||
+ static EVP_PKEY *generate_rsa_keypair();
|
||||
|
||||
public:
|
||||
static bool generateMumbleCertificate(QString name, QString email, QSslCertificate &qscCert, QSslKey &qskKey);
|
||||
diff --git a/src/crypto/CryptStateOCB2.cpp b/src/crypto/CryptStateOCB2.cpp
|
||||
index 2176d6488..640fdedac 100644
|
||||
--- a/src/crypto/CryptStateOCB2.cpp
|
||||
+++ b/src/crypto/CryptStateOCB2.cpp
|
||||
@@ -30,7 +30,7 @@
|
||||
#include <cstring>
|
||||
#include <openssl/rand.h>
|
||||
|
||||
-CryptStateOCB2::CryptStateOCB2() : CryptState() {
|
||||
+CryptStateOCB2::CryptStateOCB2() : CryptState(), enc_ctx(EVP_CIPHER_CTX_new()), dec_ctx(EVP_CIPHER_CTX_new()) {
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
decrypt_history[i] = 0;
|
||||
memset(raw_key, 0, AES_KEY_SIZE_BYTES);
|
||||
@@ -38,6 +38,11 @@ CryptStateOCB2::CryptStateOCB2() : CryptState() {
|
||||
memset(decrypt_iv, 0, AES_BLOCK_SIZE);
|
||||
}
|
||||
|
||||
+CryptStateOCB2::~CryptStateOCB2() noexcept {
|
||||
+ EVP_CIPHER_CTX_free(enc_ctx);
|
||||
+ EVP_CIPHER_CTX_free(dec_ctx);
|
||||
+}
|
||||
+
|
||||
bool CryptStateOCB2::isValid() const {
|
||||
return bInit;
|
||||
}
|
||||
@@ -46,8 +51,6 @@ void CryptStateOCB2::genKey() {
|
||||
CryptographicRandom::fillBuffer(raw_key, AES_KEY_SIZE_BYTES);
|
||||
CryptographicRandom::fillBuffer(encrypt_iv, AES_BLOCK_SIZE);
|
||||
CryptographicRandom::fillBuffer(decrypt_iv, AES_BLOCK_SIZE);
|
||||
- AES_set_encrypt_key(raw_key, AES_KEY_SIZE_BITS, &encrypt_key);
|
||||
- AES_set_decrypt_key(raw_key, AES_KEY_SIZE_BITS, &decrypt_key);
|
||||
bInit = true;
|
||||
}
|
||||
|
||||
@@ -56,8 +59,6 @@ bool CryptStateOCB2::setKey(const std::string &rkey, const std::string &eiv, con
|
||||
memcpy(raw_key, rkey.data(), AES_KEY_SIZE_BYTES);
|
||||
memcpy(encrypt_iv, eiv.data(), AES_BLOCK_SIZE);
|
||||
memcpy(decrypt_iv, div.data(), AES_BLOCK_SIZE);
|
||||
- AES_set_encrypt_key(raw_key, AES_KEY_SIZE_BITS, &encrypt_key);
|
||||
- AES_set_decrypt_key(raw_key, AES_KEY_SIZE_BITS, &decrypt_key);
|
||||
bInit = true;
|
||||
return true;
|
||||
}
|
||||
@@ -256,10 +257,24 @@ static void inline ZERO(keyblock &block) {
|
||||
block[i] = 0;
|
||||
}
|
||||
|
||||
-#define AESencrypt(src, dst, key) \
|
||||
- AES_encrypt(reinterpret_cast< const unsigned char * >(src), reinterpret_cast< unsigned char * >(dst), key);
|
||||
-#define AESdecrypt(src, dst, key) \
|
||||
- AES_decrypt(reinterpret_cast< const unsigned char * >(src), reinterpret_cast< unsigned char * >(dst), key);
|
||||
+#define AESencrypt(src, dst, key) \
|
||||
+ { \
|
||||
+ int outlen = 0; \
|
||||
+ EVP_EncryptInit_ex(enc_ctx, EVP_aes_128_ecb(), NULL, key, NULL); \
|
||||
+ EVP_CIPHER_CTX_set_padding(enc_ctx, 0); \
|
||||
+ EVP_EncryptUpdate(enc_ctx, reinterpret_cast< unsigned char * >(dst), &outlen, \
|
||||
+ reinterpret_cast< const unsigned char * >(src), AES_BLOCK_SIZE); \
|
||||
+ EVP_EncryptFinal_ex(enc_ctx, reinterpret_cast< unsigned char * >(dst + outlen), &outlen); \
|
||||
+ }
|
||||
+#define AESdecrypt(src, dst, key) \
|
||||
+ { \
|
||||
+ int outlen = 0; \
|
||||
+ EVP_DecryptInit_ex(dec_ctx, EVP_aes_128_ecb(), NULL, key, NULL); \
|
||||
+ EVP_CIPHER_CTX_set_padding(dec_ctx, 0); \
|
||||
+ EVP_DecryptUpdate(dec_ctx, reinterpret_cast< unsigned char * >(dst), &outlen, \
|
||||
+ reinterpret_cast< const unsigned char * >(src), AES_BLOCK_SIZE); \
|
||||
+ EVP_DecryptFinal_ex(dec_ctx, reinterpret_cast< unsigned char * >(dst + outlen), &outlen); \
|
||||
+ }
|
||||
|
||||
bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encrypted, unsigned int len,
|
||||
const unsigned char *nonce, unsigned char *tag, bool modifyPlainOnXEXStarAttack) {
|
||||
@@ -267,7 +282,7 @@ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encr
|
||||
bool success = true;
|
||||
|
||||
// Initialize
|
||||
- AESencrypt(nonce, delta, &encrypt_key);
|
||||
+ AESencrypt(nonce, delta, raw_key);
|
||||
ZERO(checksum);
|
||||
|
||||
while (len > AES_BLOCK_SIZE) {
|
||||
@@ -299,7 +314,7 @@ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encr
|
||||
if (flipABit) {
|
||||
*reinterpret_cast< unsigned char * >(tmp) ^= 1;
|
||||
}
|
||||
- AESencrypt(tmp, tmp, &encrypt_key);
|
||||
+ AESencrypt(tmp, tmp, raw_key);
|
||||
XOR(reinterpret_cast< subblock * >(encrypted), delta, tmp);
|
||||
XOR(checksum, checksum, reinterpret_cast< const subblock * >(plain));
|
||||
if (flipABit) {
|
||||
@@ -315,7 +330,7 @@ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encr
|
||||
ZERO(tmp);
|
||||
tmp[BLOCKSIZE - 1] = SWAPPED(len * 8);
|
||||
XOR(tmp, tmp, delta);
|
||||
- AESencrypt(tmp, pad, &encrypt_key);
|
||||
+ AESencrypt(tmp, pad, raw_key);
|
||||
memcpy(tmp, plain, len);
|
||||
memcpy(reinterpret_cast< unsigned char * >(tmp) + len, reinterpret_cast< const unsigned char * >(pad) + len,
|
||||
AES_BLOCK_SIZE - len);
|
||||
@@ -325,7 +340,7 @@ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encr
|
||||
|
||||
S3(delta);
|
||||
XOR(tmp, delta, checksum);
|
||||
- AESencrypt(tmp, tag, &encrypt_key);
|
||||
+ AESencrypt(tmp, tag, raw_key);
|
||||
|
||||
return success;
|
||||
}
|
||||
@@ -336,13 +351,13 @@ bool CryptStateOCB2::ocb_decrypt(const unsigned char *encrypted, unsigned char *
|
||||
bool success = true;
|
||||
|
||||
// Initialize
|
||||
- AESencrypt(nonce, delta, &encrypt_key);
|
||||
+ AESencrypt(nonce, delta, raw_key);
|
||||
ZERO(checksum);
|
||||
|
||||
while (len > AES_BLOCK_SIZE) {
|
||||
S2(delta);
|
||||
XOR(tmp, delta, reinterpret_cast< const subblock * >(encrypted));
|
||||
- AESdecrypt(tmp, tmp, &decrypt_key);
|
||||
+ AESdecrypt(tmp, tmp, raw_key);
|
||||
XOR(reinterpret_cast< subblock * >(plain), delta, tmp);
|
||||
XOR(checksum, checksum, reinterpret_cast< const subblock * >(plain));
|
||||
len -= AES_BLOCK_SIZE;
|
||||
@@ -354,7 +369,7 @@ bool CryptStateOCB2::ocb_decrypt(const unsigned char *encrypted, unsigned char *
|
||||
ZERO(tmp);
|
||||
tmp[BLOCKSIZE - 1] = SWAPPED(len * 8);
|
||||
XOR(tmp, tmp, delta);
|
||||
- AESencrypt(tmp, pad, &encrypt_key);
|
||||
+ AESencrypt(tmp, pad, raw_key);
|
||||
memset(tmp, 0, AES_BLOCK_SIZE);
|
||||
memcpy(tmp, encrypted, len);
|
||||
XOR(tmp, tmp, pad);
|
||||
@@ -372,7 +387,7 @@ bool CryptStateOCB2::ocb_decrypt(const unsigned char *encrypted, unsigned char *
|
||||
|
||||
S3(delta);
|
||||
XOR(tmp, delta, checksum);
|
||||
- AESencrypt(tmp, tag, &encrypt_key);
|
||||
+ AESencrypt(tmp, tag, raw_key);
|
||||
|
||||
return success;
|
||||
}
|
||||
@@ -381,5 +396,5 @@ bool CryptStateOCB2::ocb_decrypt(const unsigned char *encrypted, unsigned char *
|
||||
#undef SHIFTBITS
|
||||
#undef SWAPPED
|
||||
#undef HIGHBIT
|
||||
-#undef AES_encrypt
|
||||
-#undef AES_decrypt
|
||||
+#undef AESencrypt
|
||||
+#undef AESdecrypt
|
||||
diff --git a/src/crypto/CryptStateOCB2.h b/src/crypto/CryptStateOCB2.h
|
||||
index 53d4b4b6a..cc3f1c0bc 100644
|
||||
--- a/src/crypto/CryptStateOCB2.h
|
||||
+++ b/src/crypto/CryptStateOCB2.h
|
||||
@@ -8,8 +8,9 @@
|
||||
|
||||
#include "CryptState.h"
|
||||
|
||||
-#include <openssl/aes.h>
|
||||
+#include <openssl/evp.h>
|
||||
|
||||
+#define AES_BLOCK_SIZE 16
|
||||
#define AES_KEY_SIZE_BITS 128
|
||||
#define AES_KEY_SIZE_BYTES (AES_KEY_SIZE_BITS / 8)
|
||||
|
||||
@@ -17,7 +18,7 @@
|
||||
class CryptStateOCB2 : public CryptState {
|
||||
public:
|
||||
CryptStateOCB2();
|
||||
- ~CryptStateOCB2(){};
|
||||
+ ~CryptStateOCB2() noexcept override;
|
||||
|
||||
virtual bool isValid() const Q_DECL_OVERRIDE;
|
||||
virtual void genKey() Q_DECL_OVERRIDE;
|
||||
@@ -43,8 +44,8 @@ private:
|
||||
unsigned char decrypt_iv[AES_BLOCK_SIZE];
|
||||
unsigned char decrypt_history[0x100];
|
||||
|
||||
- AES_KEY encrypt_key;
|
||||
- AES_KEY decrypt_key;
|
||||
+ EVP_CIPHER_CTX *enc_ctx;
|
||||
+ EVP_CIPHER_CTX *dec_ctx;
|
||||
};
|
||||
|
||||
|
||||
--
|
||||
2.38.4
|
||||
|
|
@ -20,6 +20,10 @@ let
|
|||
pname = overrides.type;
|
||||
version = source.version;
|
||||
|
||||
patches = [
|
||||
./0001-BUILD-crypto-Migrate-to-OpenSSL-3.0-compatible-API.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config python3 qt5.wrapQtAppsHook qt5.qttools ]
|
||||
++ (overrides.nativeBuildInputs or [ ]);
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
, fetchFromGitLab
|
||||
, fetchpatch
|
||||
, appstream-glib
|
||||
, cargo
|
||||
, dbus
|
||||
, desktop-file-utils
|
||||
, git
|
||||
|
@ -14,6 +15,7 @@
|
|||
, openssl
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, sqlite
|
||||
, transmission
|
||||
, wrapGAppsHook4
|
||||
|
@ -56,11 +58,10 @@ in stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
dbus
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "synapse-bt";
|
||||
version = "1.0";
|
||||
version = "unstable-2023-02-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Luminarys";
|
||||
repo = "synapse";
|
||||
rev = version;
|
||||
sha256 = "01npv3zwia5d534zdwisd9xfng507adv4qkljf8z0zm0khqqn71a";
|
||||
rev = "2165fe22589d7255e497d196c1d42b4c2ace1408";
|
||||
hash = "sha256-2irXNgEK9BjRuNu3DUMElmf2vIpGzwoFneAEe97GRh4=";
|
||||
};
|
||||
|
||||
cargoSha256 = "0sy0vlpkj967g9lyyh7ska8cpw5xh0g04kj071a32idrqc3dcjb1";
|
||||
cargoHash = "sha256-TwXouPYM7Hg1HEr2KnEPScYFkC52PcQ5kb5aGP1gj9U=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ openssl ]
|
||||
|
|
|
@ -1,8 +1,18 @@
|
|||
{ lib, fetchFromGitHub, buildPythonApplication, pyside2, twisted, certifi, qt5, enableGUI ? true }:
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, buildPythonApplication
|
||||
, pyside6
|
||||
, twisted
|
||||
, certifi
|
||||
, qt6
|
||||
, appnope
|
||||
, enableGUI ? true
|
||||
}:
|
||||
|
||||
buildPythonApplication rec {
|
||||
pname = "syncplay";
|
||||
version = "1.6.9";
|
||||
version = "1.7.0";
|
||||
|
||||
format = "other";
|
||||
|
||||
|
@ -10,14 +20,15 @@ buildPythonApplication rec {
|
|||
owner = "Syncplay";
|
||||
repo = "syncplay";
|
||||
rev = "v${version}";
|
||||
sha256 = "0qm3qn4a1nahhs7q81liz514n9blsi107g9s9xfw2i8pzi7v9v0v";
|
||||
sha256 = "sha256-Te81yOv3D6M6aMfC5XrM6/I6BlMdlY1yRk1RRJa9Mxg=";
|
||||
};
|
||||
|
||||
buildInputs = lib.optionals enableGUI [ qt5.qtwayland ];
|
||||
buildInputs = lib.optionals enableGUI [ (if stdenv.isLinux then qt6.qtwayland else qt6.qtbase) ];
|
||||
propagatedBuildInputs = [ twisted certifi ]
|
||||
++ twisted.optional-dependencies.tls
|
||||
++ lib.optional enableGUI pyside2;
|
||||
nativeBuildInputs = lib.optionals enableGUI [ qt5.wrapQtAppsHook ];
|
||||
++ lib.optional enableGUI pyside6
|
||||
++ lib.optional (stdenv.isDarwin && enableGUI) appnope;
|
||||
nativeBuildInputs = lib.optionals enableGUI [ qt6.wrapQtAppsHook ];
|
||||
|
||||
makeFlags = [ "DESTDIR=" "PREFIX=$(out)" ];
|
||||
|
||||
|
@ -29,7 +40,7 @@ buildPythonApplication rec {
|
|||
homepage = "https://syncplay.pl/";
|
||||
description = "Free software that synchronises media players";
|
||||
license = licenses.asl20;
|
||||
platforms = platforms.linux;
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
maintainers = with maintainers; [ Enzime ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, stdenv
|
||||
, fetchFromGitLab
|
||||
, appstream-glib
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, itstool
|
||||
, meson
|
||||
|
@ -9,6 +10,7 @@
|
|||
, pkg-config
|
||||
, python3
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, glib
|
||||
, gtk4
|
||||
|
@ -46,11 +48,10 @@ stdenv.mkDerivation rec {
|
|||
pkg-config
|
||||
python3
|
||||
wrapGAppsHook4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "appflowy";
|
||||
version = "0.1.4";
|
||||
version = "0.1.5";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/AppFlowy-IO/appflowy/releases/download/${version}/AppFlowy_x86_64-unknown-linux-gnu_ubuntu-20.04.tar.gz";
|
||||
sha256 = "sha256-hNk1sypMZYZA1s3rQyaOY5J829PWo2b9Q/VCDcfRKPM=";
|
||||
sha256 = "sha256-fuA3/suJ9F3mHtNAxlefFGLX0+PHgFZpQycPpxztsPI=";
|
||||
stripRoot = false;
|
||||
};
|
||||
|
||||
|
@ -39,7 +39,7 @@ stdenv.mkDerivation rec {
|
|||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
cd AppFlowy_x86_64-unknown-linux-gnu_ubuntu-20.04/AppFlowy/
|
||||
cd AppFlowy/
|
||||
|
||||
mkdir -p $out/opt/
|
||||
mkdir -p $out/bin/
|
||||
|
|
|
@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
|
|||
enableParallelBuilding = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Graphical user inteface for GAMESS-US";
|
||||
description = "Graphical user interface for GAMESS-US";
|
||||
homepage = "https://brettbode.github.io/wxmacmolplt/";
|
||||
license = licenses.gpl2Plus;
|
||||
platforms = platforms.linux;
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
, libunwind
|
||||
, appstream
|
||||
, nixosTests
|
||||
, fetchpatch
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
|
@ -55,6 +56,15 @@ stdenv.mkDerivation rec {
|
|||
libunwind
|
||||
];
|
||||
|
||||
patches = [
|
||||
# https://github.com/gnunn1/tilix/issues/2151
|
||||
(fetchpatch {
|
||||
name = "tilix-replace-std-xml-with-gmarkup.patch";
|
||||
url = "https://github.com/gnunn1/tilix/commit/b02779737997a02b98b690e6f8478d28d5e931a5.patch";
|
||||
hash = "sha256-6p+DomJEZ/hCW8RTjttKsTDsgHZ6eFKj/71TU5O/Ysg=";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
chmod +x meson_post_install.py
|
||||
patchShebangs meson_post_install.py
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, lib, fetchFromGitHub, pkg-config, rustPlatform
|
||||
{ stdenv, lib, fetchFromGitHub, cargo, pkg-config, rustPlatform
|
||||
, bzip2, curl, zlib, zstd, libiconv, CoreServices
|
||||
}:
|
||||
|
||||
|
@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
|
|||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config rustPlatform.cargoSetupHook rustPlatform.rust.cargo
|
||||
pkg-config rustPlatform.cargoSetupHook cargo
|
||||
];
|
||||
|
||||
buildInputs = [ bzip2 curl zlib zstd ]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ lib, stdenv, fetchurl, fetchpatch, python3Packages, makeWrapper, gettext, installShellFiles
|
||||
, re2Support ? true
|
||||
, rustSupport ? stdenv.hostPlatform.isLinux, rustPlatform
|
||||
, rustSupport ? stdenv.hostPlatform.isLinux, cargo, rustPlatform, rustc
|
||||
, fullBuild ? false
|
||||
, gitSupport ? fullBuild
|
||||
, guiSupport ? fullBuild, tk
|
||||
|
@ -44,11 +44,11 @@ let
|
|||
++ lib.optional gitSupport pygit2
|
||||
++ lib.optional highlightSupport pygments;
|
||||
nativeBuildInputs = [ makeWrapper gettext installShellFiles ]
|
||||
++ lib.optionals rustSupport (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
++ lib.optionals rustSupport [
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
buildInputs = [ docutils ]
|
||||
++ lib.optionals stdenv.isDarwin [ ApplicationServices ];
|
||||
|
||||
|
|
|
@ -40,12 +40,12 @@ let
|
|||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "p4";
|
||||
version = "2022.1.2305383";
|
||||
version = "2022.2.2407422";
|
||||
|
||||
src = fetchurl {
|
||||
# Upstream replaces minor versions, so use archived URL.
|
||||
url = "https://web.archive.org/web/20220901184735id_/https://ftp.perforce.com/perforce/r22.1/bin.tools/p4source.tgz";
|
||||
sha256 = "27ab3ddd7b178b05cf0b710e941650dac0688d294110ebafda9027732c0944c6";
|
||||
url = "https://web.archive.org/web/20230512173806id_/https://ftp.perforce.com/perforce/r22.2/bin.tools/p4source.tgz";
|
||||
sha256 = "4355375def3f3d2256d4a92ac1b9960173e7aa97404346c0c74caf23a0905e1b";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ jam ];
|
||||
|
|
|
@ -4,10 +4,12 @@
|
|||
, fetchFromGitHub
|
||||
, fetchurl
|
||||
, sd
|
||||
, cargo
|
||||
, curl
|
||||
, pkg-config
|
||||
, openssl
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, fetchYarnDeps
|
||||
, yarn
|
||||
, nodejs
|
||||
|
@ -147,11 +149,10 @@ python3Packages.buildPythonApplication {
|
|||
nativeBuildInputs = [
|
||||
curl
|
||||
pkg-config
|
||||
] ++ (with rustPlatform; [
|
||||
myCargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, appstream-glib
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, glib
|
||||
, gst_all_1
|
||||
|
@ -14,6 +15,7 @@
|
|||
, ninja
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, wayland
|
||||
, wrapGAppsHook4
|
||||
}:
|
||||
|
@ -42,8 +44,8 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
wrapGAppsHook4
|
||||
];
|
||||
|
||||
|
|
|
@ -1,25 +1,77 @@
|
|||
{ stdenv, lib, buildPythonApplication, fetchFromGitHub, pycurl, python-dateutil, configobj, sqlalchemy, sdnotify, flask }:
|
||||
{ stdenv, lib, python3, fetchFromGitHub, buildNpmPackage, jq }:
|
||||
|
||||
buildPythonApplication rec {
|
||||
let
|
||||
python = python3.override {
|
||||
packageOverrides = self: super: {
|
||||
# pyCA is incompatible with SQLAlchemy 2.0
|
||||
sqlalchemy = super.sqlalchemy.overridePythonAttrs (old: rec {
|
||||
version = "1.4.46";
|
||||
src = self.fetchPypi {
|
||||
pname = "SQLAlchemy";
|
||||
inherit version;
|
||||
hash = "sha256-aRO4JH2KKS74MVFipRkx4rQM6RaB8bbxj2lwRSAMSjA=";
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
frontend = buildNpmPackage rec {
|
||||
pname = "pyca";
|
||||
version = "4.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "opencast";
|
||||
repo = "pyCA";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-cTkWkOmgxJZlddqaSYKva2wih4Mvsdrd7LD4NggxKQk=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-0U+semrNWTkNu3uQQkiJKZT1hB0/IfkL84G7/oP8XYY=";
|
||||
|
||||
nativeBuildInputs = [ jq python ];
|
||||
|
||||
postPatch = ''
|
||||
${jq}/bin/jq '. += {"version": "${version}"}' < package.json > package.json.tmp
|
||||
mv package.json.tmp package.json
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/static
|
||||
cp -R pyca/ui/static/* $out/static/
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "pyca";
|
||||
version = "2.1";
|
||||
version = "4.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "opencast";
|
||||
repo = "pyCA";
|
||||
rev = "v${version}";
|
||||
sha256 = "0cvkmdlcax9da9iw4ls73vw0pxvm8wvchab5gwdy9w9ibqdpcmwh";
|
||||
sha256 = "sha256-cTkWkOmgxJZlddqaSYKva2wih4Mvsdrd7LD4NggxKQk=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
propagatedBuildInputs = with python.pkgs; [
|
||||
pycurl
|
||||
python-dateutil
|
||||
configobj
|
||||
sqlalchemy
|
||||
sdnotify
|
||||
psutil
|
||||
flask
|
||||
prometheus-client
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
sed -i -e 's#static_folder=.*#static_folder="${frontend}/static")#' pyca/ui/__init__.py
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit frontend;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
broken = stdenv.isDarwin;
|
||||
description = "A fully functional Opencast capture agent written in Python";
|
||||
|
|
|
@ -2,8 +2,10 @@
|
|||
, lib
|
||||
, fetchFromGitLab
|
||||
, rustPlatform
|
||||
, cargo
|
||||
, pkg-config
|
||||
, meson
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, desktop-file-utils
|
||||
, blueprint-compiler
|
||||
|
@ -43,11 +45,10 @@ stdenv.mkDerivation rec {
|
|||
# `gtk4-update-icon-cache` during installPhase, thanks to:
|
||||
# https://gitlab.gnome.org/YaLTeR/video-trimmer/-/merge_requests/12
|
||||
gtk4
|
||||
] ++ (with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
]);
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gtk4
|
||||
|
|
|
@ -5,9 +5,11 @@
|
|||
, asciidoctor
|
||||
, buildah
|
||||
, buildah-unwrapped
|
||||
, cargo
|
||||
, libiconv
|
||||
, libkrun
|
||||
, makeWrapper
|
||||
, rustc
|
||||
, sigtool
|
||||
}:
|
||||
|
||||
|
@ -27,10 +29,10 @@ stdenv.mkDerivation rec {
|
|||
hash = "sha256-Y0FNi/+HuN5SqexHTKjcW6lEaeis7xZDYc2/FOAANIA=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = with rustPlatform; [
|
||||
cargoSetupHook
|
||||
rust.cargo
|
||||
rust.rustc
|
||||
nativeBuildInputs = [
|
||||
rustPlatform.cargoSetupHook
|
||||
cargo
|
||||
rustc
|
||||
asciidoctor
|
||||
makeWrapper
|
||||
] ++ lib.optionals stdenv.isDarwin [ sigtool ];
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, cargo
|
||||
, desktop-file-utils
|
||||
, glib
|
||||
, gtk4
|
||||
|
@ -8,6 +9,7 @@
|
|||
, ninja
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, rustc
|
||||
, wrapGAppsHook4
|
||||
, gtksourceview5
|
||||
, libadwaita
|
||||
|
@ -38,8 +40,8 @@ stdenv.mkDerivation rec {
|
|||
ninja
|
||||
pkg-config
|
||||
rustPlatform.cargoSetupHook
|
||||
rustPlatform.rust.cargo
|
||||
rustPlatform.rust.rustc
|
||||
cargo
|
||||
rustc
|
||||
wrapGAppsHook4
|
||||
];
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ dotnetPackages, lib, xml2, stdenvNoCC }:
|
||||
{ lib, python3, stdenvNoCC }:
|
||||
|
||||
{ name
|
||||
, description ? ""
|
||||
|
@ -10,21 +10,21 @@ let
|
|||
inherit name;
|
||||
|
||||
meta.description = description;
|
||||
nativeBuildInputs = [ dotnetPackages.Nuget xml2 ];
|
||||
nativeBuildInputs = [ python3 ];
|
||||
|
||||
buildCommand = ''
|
||||
export HOME=$(mktemp -d)
|
||||
mkdir -p $out/{lib,share}
|
||||
|
||||
${lib.concatMapStringsSep "\n" (dep: ''
|
||||
nuget init "${dep}" "$out/lib"
|
||||
'') deps}
|
||||
(
|
||||
shopt -s nullglob
|
||||
for nupkg in ${lib.concatMapStringsSep " " (dep: "\"${dep}\"/*.nupkg") deps}; do
|
||||
cp --no-clobber "$nupkg" $out/lib
|
||||
done
|
||||
)
|
||||
|
||||
# Generates a list of all licenses' spdx ids, if available.
|
||||
# Note that this currently ignores any license provided in plain text (e.g. "LICENSE.txt")
|
||||
find "$out/lib" -name "*.nuspec" -exec sh -c \
|
||||
"NUSPEC=\$(xml2 < {}) && echo "\$NUSPEC" | grep license/@type=expression | tr -s \ '\n' | grep "license=" | cut -d'=' -f2" \
|
||||
\; | sort -u > $out/share/licenses
|
||||
python ${./extract-licenses-from-nupkgs.py} $out/lib > $out/share/licenses
|
||||
'';
|
||||
} // { # We need data from `$out` for `meta`, so we have to use overrides as to not hit infinite recursion.
|
||||
meta.licence = let
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Opens each .nupkg file in a directory, and extracts the SPDX license identifiers
|
||||
from them if they exist. The SPDX license identifier is stored in the
|
||||
'<license type="expression">...</license>' tag in the .nuspec file.
|
||||
All found license identifiers will be printed to stdout.
|
||||
"""
|
||||
|
||||
from glob import glob
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import xml.etree.ElementTree as ET
|
||||
import zipfile
|
||||
|
||||
all_licenses = set()
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print(f"Usage: {sys.argv[0]} DIRECTORY")
|
||||
sys.exit(1)
|
||||
|
||||
nupkg_dir = Path(sys.argv[1])
|
||||
for nupkg_name in glob("*.nupkg", root_dir=nupkg_dir):
|
||||
with zipfile.ZipFile(nupkg_dir / nupkg_name) as nupkg:
|
||||
for nuspec_name in [name for name in nupkg.namelist() if name.endswith(".nuspec")]:
|
||||
with nupkg.open(nuspec_name) as nuspec_stream:
|
||||
nuspec = ET.parse(nuspec_stream)
|
||||
licenses = nuspec.findall(".//{*}license[@type='expression']")
|
||||
all_licenses.update([license.text for license in licenses])
|
||||
|
||||
print("\n".join(sorted(all_licenses)))
|
|
@ -21,6 +21,7 @@ callPackage ./generic.nix envargs ({
|
|||
LISPDIR=$out/share/emacs/site-lisp
|
||||
install -d $LISPDIR
|
||||
install *.el *.elc $LISPDIR
|
||||
emacs --batch -l package --eval "(package-generate-autoloads \"${args.pname}\" \"$LISPDIR\")"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{ pname, version, nativeBuildInputs ? [], enableParallelBuilding ? true, ... }@args:
|
||||
|
||||
let Dune =
|
||||
let dune-version = args.duneVersion or "2"; in
|
||||
let dune-version = args.duneVersion or "3"; in
|
||||
{ "1" = dune_1; "2" = dune_2; "3" = dune_3; }."${dune-version}"
|
||||
; in
|
||||
|
||||
|
|
|
@ -94,6 +94,20 @@
|
|||
else salted;
|
||||
in checked;
|
||||
|
||||
# See doc/builders/testers.chapter.md or
|
||||
# https://nixos.org/manual/nixpkgs/unstable/#tester-runNixOSTest
|
||||
runNixOSTest =
|
||||
let nixos = import ../../../nixos/lib {};
|
||||
in testModule:
|
||||
nixos.runTest {
|
||||
_file = "pkgs.runNixOSTest implementation";
|
||||
imports = [
|
||||
(lib.setDefaultModuleLocation "the argument that was passed to pkgs.runNixOSTest" testModule)
|
||||
];
|
||||
hostPkgs = pkgs;
|
||||
node.pkgs = pkgs;
|
||||
};
|
||||
|
||||
# See doc/builders/testers.chapter.md or
|
||||
# https://nixos.org/manual/nixpkgs/unstable/#tester-invalidateFetcherByDrvHash
|
||||
nixosTest =
|
||||
|
|
|
@ -14,6 +14,17 @@ in
|
|||
lib.recurseIntoAttrs {
|
||||
hasPkgConfigModule = pkgs.callPackage ../hasPkgConfigModule/tests.nix { };
|
||||
|
||||
runNixOSTest-example = pkgs-with-overlay.testers.runNixOSTest ({ lib, ... }: {
|
||||
name = "runNixOSTest-test";
|
||||
nodes.machine = { pkgs, ... }: {
|
||||
system.nixos = dummyVersioning;
|
||||
environment.systemPackages = [ pkgs.proof-of-overlay-hello pkgs.figlet ];
|
||||
};
|
||||
testScript = ''
|
||||
machine.succeed("hello | figlet >/dev/console")
|
||||
'';
|
||||
});
|
||||
|
||||
# Check that the wiring of nixosTest is correct.
|
||||
# Correct operation of the NixOS test driver should be asserted elsewhere.
|
||||
nixosTest-example = pkgs-with-overlay.testers.nixosTest ({ lib, pkgs, figlet, ... }: {
|
||||
|
|
|
@ -1,25 +1,27 @@
|
|||
{ lib, fetchurl, stdenvNoCC }:
|
||||
{ lib, fetchFromGitHub, stdenvNoCC }:
|
||||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "carlito";
|
||||
version = "20130920";
|
||||
pname = "carlito-unstable";
|
||||
version = "20230309";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/crosextrafonts-carlito-${version}.tar.gz";
|
||||
sha256 = "sha256-S9ErbLwyHBzxbaduLFhcklzpVqCAZ65vbGTv9sz9r1o=";
|
||||
src = fetchFromGitHub {
|
||||
owner = "googlefonts";
|
||||
repo = "carlito";
|
||||
rev = "3a810cab78ebd6e2e4eed42af9e8453c4f9b850a";
|
||||
hash = "sha256-U4TvZZ7n7dr1/14oZkF1Eo96ZcdWIDWron70um77w+E=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/etc/fonts/conf.d
|
||||
mkdir -p $out/share/fonts/truetype
|
||||
cp -v *.ttf $out/share/fonts/truetype
|
||||
cp -v fonts/ttf/*.ttf $out/share/fonts/truetype
|
||||
cp -v ${./calibri-alias.conf} $out/etc/fonts/conf.d/30-calibri.conf
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
# This font doesn't appear to have any official web site but this
|
||||
# one provides some good information and samples.
|
||||
homepage = "http://openfontlibrary.org/en/font/carlito";
|
||||
homepage = "https://github.com/googlefonts/carlito";
|
||||
description = "A sans-serif font metric-compatible with Microsoft Calibri";
|
||||
longDescription = ''
|
||||
Carlito is a free font that is metric-compatible with the
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "gentium";
|
||||
version = "6.101";
|
||||
version = "6.200";
|
||||
|
||||
src = fetchzip {
|
||||
url = "http://software.sil.org/downloads/r/gentium/GentiumPlus-${version}.zip";
|
||||
hash = "sha256-iKD1Q7/lsbZCuJQoJqySQHwplrHv8yzmph+QwKpYgMU=";
|
||||
hash = "sha256-gpVOtmF4Kp3y1Rm00c4o3WQEskO7mY1Z5SVaYHI0hzg=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
|
|
|
@ -16,11 +16,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "mate-terminal";
|
||||
version = "1.26.0";
|
||||
version = "1.26.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://pub.mate-desktop.org/releases/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "08mgxbviik2dwwnbclp0518wlag2fhcr6c2yadgcbhwiq4aff9vp";
|
||||
sha256 = "fBMCBvC0eIfoySdOc/jBn65RETRXKGmnwjERt4nh4dA=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "mate-user-guide";
|
||||
version = "1.26.0";
|
||||
version = "1.26.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://pub.mate-desktop.org/releases/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "1h620ngryqc4m8ybvc92ba8404djnm0l65f34mlw38g9ad8d9085";
|
||||
sha256 = "XQTJdLd/L/OQQkQ4mY6F7ErdjiJnJA51WnqODvd/wi8=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "pluma";
|
||||
version = "1.26.0";
|
||||
version = "1.26.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://pub.mate-desktop.org/releases/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "0lway12q2xygiwjgrx7chgka838jbnmlzz98g7agag1rwzd481ii";
|
||||
sha256 = "WVns49cRjhBmWfZNIC0O0XY60Qu7ul0qzYy/ui45lPE=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -1,25 +1,36 @@
|
|||
{ lib
|
||||
, rustPlatform
|
||||
, fetchCrate
|
||||
, fetchpatch
|
||||
, stdenv
|
||||
, darwin
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "hvm";
|
||||
version = "1.0.0";
|
||||
version = "1.0.8";
|
||||
|
||||
src = fetchCrate {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-nPkUGUcekZ2fvQgiVTNvt8vfQsNMyqsrkT2zqEfu/bE=";
|
||||
hash = "sha256-dPO3GWDojuz7nilOr09xC6tPhBZ95wjAk0ErItzAbxw=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-EaZTpKFZPfDlP/2XylhJHznvlah7VNw4snrKDmT7ecw=";
|
||||
cargoHash = "sha256-XsKVXlceg3HHGalHcXfmJPKhAQm4DqdsJ2c+NF+AOI4=";
|
||||
|
||||
buildInputs = lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [
|
||||
darwin.apple_sdk.frameworks.IOKit
|
||||
] ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
|
||||
darwin.apple_sdk_11_0.frameworks.Foundation
|
||||
patches = [
|
||||
# see https://github.com/higherorderco/hvm/pull/220
|
||||
# this commit removes the feature to fix build with rust nightly
|
||||
# but this feature is required with rust stable
|
||||
(fetchpatch {
|
||||
name = "revert-fix-remove-feature-automic-mut-ptr.patch";
|
||||
url = "https://github.com/higherorderco/hvm/commit/c0e35c79b4e31c266ad33beadc397c428e4090ee.patch";
|
||||
hash = "sha256-9xxu7NOtz3Tuzf5F0Mi4rw45Xnyh7h9hbTrzq4yfslg=";
|
||||
revert = true;
|
||||
})
|
||||
];
|
||||
|
||||
buildInputs = lib.optionals stdenv.isDarwin [
|
||||
darwin.apple_sdk_11_0.frameworks.IOKit
|
||||
];
|
||||
|
||||
# tests are broken
|
||||
|
@ -30,7 +41,7 @@ rustPlatform.buildRustPackage rec {
|
|||
|
||||
meta = with lib; {
|
||||
description = "A pure functional compile target that is lazy, non-garbage-collected, and parallel";
|
||||
homepage = "https://github.com/kindelia/hvm";
|
||||
homepage = "https://github.com/higherorderco/hvm";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ figsoda ];
|
||||
};
|
||||
|
|
104
pkgs/development/compilers/julia/1.9-bin.nix
Normal file
104
pkgs/development/compilers/julia/1.9-bin.nix
Normal file
|
@ -0,0 +1,104 @@
|
|||
{ autoPatchelfHook, fetchurl, lib, stdenv }:
|
||||
|
||||
let
|
||||
skip_tests = [
|
||||
# Test flaky on ofborg
|
||||
"channels"
|
||||
|
||||
# Test flaky because of our RPATH patching
|
||||
# https://github.com/NixOS/nixpkgs/pull/230965#issuecomment-1545336489
|
||||
"compiler/codegen"
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
# Test flaky on ofborg
|
||||
"FileWatching"
|
||||
# Test requires pbcopy
|
||||
"InteractiveUtils"
|
||||
# Test requires network access
|
||||
"Sockets"
|
||||
] ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
|
||||
# Test Failed at $out/share/julia/stdlib/v1.8/LinearAlgebra/test/blas.jl:702
|
||||
"LinearAlgebra/blas"
|
||||
# Test Failed at $out/share/julia/test/misc.jl:724
|
||||
"misc"
|
||||
];
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "julia-bin";
|
||||
version = "1.9.0";
|
||||
|
||||
src = {
|
||||
x86_64-linux = fetchurl {
|
||||
url = "https://julialang-s3.julialang.org/bin/linux/x64/${lib.versions.majorMinor version}/julia-${version}-linux-x86_64.tar.gz";
|
||||
hash = "sha256-AMYURm75gJwusjSA440ZaixXf/8nMMT4PRNbkT1HM1k=";
|
||||
};
|
||||
aarch64-linux = fetchurl {
|
||||
url = "https://julialang-s3.julialang.org/bin/linux/aarch64/${lib.versions.majorMinor version}/julia-${version}-linux-aarch64.tar.gz";
|
||||
hash = "sha256-ChQxW1Os2X8i0m1Kj9LCN+Uk6Vw77JjS14tU2Awrw2Q=";
|
||||
};
|
||||
x86_64-darwin = fetchurl {
|
||||
url = "https://julialang-s3.julialang.org/bin/mac/x64/${lib.versions.majorMinor version}/julia-${version}-mac64.tar.gz";
|
||||
hash = "sha256-ALxMJ+6xvr01BZcxL/CRkXYxX9MZnGPslj+0HjsEv68=";
|
||||
};
|
||||
aarch64-darwin = fetchurl {
|
||||
url = "https://julialang-s3.julialang.org/bin/mac/aarch64/${lib.versions.majorMinor version}/julia-${version}-macaarch64.tar.gz";
|
||||
hash = "sha256-U+YncKaZDVqJ56AB72iqJd4lEmo76DggDEyacF2uo3w=";
|
||||
};
|
||||
}.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
||||
|
||||
patches = [
|
||||
# https://github.com/JuliaLang/julia/commit/f5eeba35d9bf20de251bb9160cc935c71e8b19ba
|
||||
./patches/1.9-bin/0001-allow-skipping-internet-required-tests.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# Julia fails to pick up our Certification Authority root certificates, but
|
||||
# it provides its own so we can simply disable the test. Patching in the
|
||||
# dynamic path to ours require us to rebuild the Julia system image.
|
||||
substituteInPlace share/julia/stdlib/v${lib.versions.majorMinor version}/NetworkOptions/test/runtests.jl \
|
||||
--replace '@test ca_roots_path() != bundled_ca_roots()' \
|
||||
'@test_skip ca_roots_path() != bundled_ca_roots()'
|
||||
'';
|
||||
|
||||
nativeBuildInputs = lib.optionals stdenv.isLinux [
|
||||
autoPatchelfHook
|
||||
# https://github.com/JuliaLang/julia/blob/v1.9.0/NEWS.md#external-dependencies
|
||||
stdenv.cc.cc
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
cp -r . $out
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# Breaks backtraces, etc.
|
||||
dontStrip = true;
|
||||
|
||||
doInstallCheck = true;
|
||||
preInstallCheck = ''
|
||||
export JULIA_TEST_USE_MULTIPLE_WORKERS=true
|
||||
# Some tests require read/write access to $HOME.
|
||||
export HOME="$TMPDIR"
|
||||
'';
|
||||
installCheckPhase = ''
|
||||
runHook preInstallCheck
|
||||
# Command lifted from `test/Makefile`.
|
||||
$out/bin/julia \
|
||||
--check-bounds=yes \
|
||||
--startup-file=no \
|
||||
--depwarn=error \
|
||||
$out/share/julia/test/runtests.jl \
|
||||
--skip internet_required ${toString skip_tests}
|
||||
runHook postInstallCheck
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "High-level, high-performance, dynamic language for technical computing";
|
||||
homepage = "https://julialang.org";
|
||||
# Bundled and linked with various GPL code, although Julia itself is MIT.
|
||||
license = lib.licenses.gpl2Plus;
|
||||
maintainers = with lib.maintainers; [ raskin nickcao wegank ];
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
mainProgram = "julia";
|
||||
};
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
diff --git a/share/julia/test/choosetests.jl b/share/julia/test/choosetests.jl
|
||||
index 334ef05..db5f795 100644
|
||||
--- a/share/julia/test/choosetests.jl
|
||||
+++ b/share/julia/test/choosetests.jl
|
||||
@@ -31,6 +31,19 @@ const TESTNAMES = [
|
||||
"smallarrayshrink", "opaque_closure", "filesystem", "download",
|
||||
]
|
||||
|
||||
+const INTERNET_REQUIRED_LIST = [
|
||||
+ "Artifacts",
|
||||
+ "Downloads",
|
||||
+ "LazyArtifacts",
|
||||
+ "LibCURL",
|
||||
+ "LibGit2",
|
||||
+ "Pkg",
|
||||
+ "download",
|
||||
+ "TOML",
|
||||
+]
|
||||
+
|
||||
+const NETWORK_REQUIRED_LIST = vcat(INTERNET_REQUIRED_LIST, ["Sockets"])
|
||||
+
|
||||
"""
|
||||
`(; tests, net_on, exit_on_error, seed) = choosetests(choices)` selects a set of tests to be
|
||||
run. `choices` should be a vector of test names; if empty or set to
|
||||
@@ -149,6 +162,7 @@ function choosetests(choices = [])
|
||||
filtertests!(tests, "compiler/EscapeAnalysis", [
|
||||
"compiler/EscapeAnalysis/local", "compiler/EscapeAnalysis/interprocedural"])
|
||||
filtertests!(tests, "stdlib", STDLIBS)
|
||||
+ filtertests!(tests, "internet_required", INTERNET_REQUIRED_LIST)
|
||||
# do ambiguous first to avoid failing if ambiguities are introduced by other tests
|
||||
filtertests!(tests, "ambiguous")
|
||||
|
||||
@@ -164,16 +178,7 @@ function choosetests(choices = [])
|
||||
filter!(x -> x != "rounding", tests)
|
||||
end
|
||||
|
||||
- net_required_for = filter!(in(tests), [
|
||||
- "Artifacts",
|
||||
- "Downloads",
|
||||
- "LazyArtifacts",
|
||||
- "LibCURL",
|
||||
- "LibGit2",
|
||||
- "Sockets",
|
||||
- "download",
|
||||
- "TOML",
|
||||
- ])
|
||||
+ net_required_for = filter!(in(tests), NETWORK_REQUIRED_LIST)
|
||||
net_on = true
|
||||
JULIA_TEST_NETWORKING_AVAILABLE = get(ENV, "JULIA_TEST_NETWORKING_AVAILABLE", "") |>
|
||||
strip |>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue