Merge master into haskell-updates
This commit is contained in:
commit
c8f5df5a8e
|
@ -19,6 +19,9 @@ pandoc_flags = --extract-media=$(pandoc_media_dir) \
|
|||
.PHONY: all
|
||||
all: validate format out/html/index.html out/epub/manual.epub
|
||||
|
||||
.PHONY: render-md
|
||||
render-md: ${MD_TARGETS}
|
||||
|
||||
.PHONY: debug
|
||||
debug:
|
||||
nix-shell --run "xmloscopy --docbook5 ./manual.xml ./manual-full.xml"
|
||||
|
|
|
@ -20,6 +20,10 @@ in pkgs.stdenv.mkDerivation {
|
|||
ln -s ${doc-support} ./doc-support/result
|
||||
'';
|
||||
|
||||
preBuild = ''
|
||||
make -j$NIX_BUILD_CORES render-md
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
dest="$out/share/doc/nixpkgs"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
|
|
|
@ -229,7 +229,7 @@ See `node2nix` [docs](https://github.com/svanderburg/node2nix) for more info.
|
|||
#### Pitfalls {#javascript-node2nix-pitfalls}
|
||||
|
||||
- If upstream package.json does not have a "version" attribute, `node2nix` will crash. You will need to add it like shown in [the package.json section](#javascript-upstream-package-json).
|
||||
- `node2nix` has some [bugs](https://github.com/svanderburg/node2nix/issues/238) related to working with lock files from NPM distributed with `nodejs-16_x`.
|
||||
- `node2nix` has some [bugs](https://github.com/svanderburg/node2nix/issues/238) related to working with lock files from NPM distributed with `nodejs_16`.
|
||||
- `node2nix` does not like missing packages from NPM. If you see something like `Cannot resolve version: vue-loader-v16@undefined` then you might want to try another tool. The package might have been pulled off of NPM.
|
||||
|
||||
### yarn2nix {#javascript-yarn2nix}
|
||||
|
|
|
@ -1061,6 +1061,16 @@
|
|||
githubId = 1342360;
|
||||
name = "Andrew Morgan";
|
||||
};
|
||||
anpin = {
|
||||
email = "pavel@anpin.fyi";
|
||||
github = "anpin";
|
||||
githubId = 6060545;
|
||||
matrix = "@anpin:matrix.org";
|
||||
name = "Pavel Anpin";
|
||||
keys = [{
|
||||
fingerprint = "06E8 4FF6 0CCF 7AFD 5101 76C9 0FBC D3EE 6310 7407";
|
||||
}];
|
||||
};
|
||||
anpryl = {
|
||||
email = "anpryl@gmail.com";
|
||||
github = "anpryl";
|
||||
|
@ -3304,9 +3314,12 @@
|
|||
}];
|
||||
};
|
||||
cyntheticfox = {
|
||||
email = "houstdav000@gmail.com";
|
||||
email = "cyntheticfox@gh0st.sh";
|
||||
github = "cyntheticfox";
|
||||
githubId = 17628961;
|
||||
keys = [{
|
||||
fingerprint = "73C1 C5DF 51E7 BB92 85E9 A262 5960 278C E235 F821";
|
||||
}];
|
||||
matrix = "@houstdav000:gh0st.ems.host";
|
||||
name = "Cynthia Fox";
|
||||
};
|
||||
|
@ -4521,6 +4534,7 @@
|
|||
};
|
||||
elvishjerricco = {
|
||||
email = "elvishjerricco@gmail.com";
|
||||
matrix = "@elvishjerricco:matrix.org";
|
||||
github = "ElvishJerricco";
|
||||
githubId = 1365692;
|
||||
name = "Will Fancher";
|
||||
|
|
|
@ -95,6 +95,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
|||
|
||||
- [jellyseerr](https://github.com/Fallenbagel/jellyseerr), a web-based requests manager for Jellyfin, forked from Overseerr. Available as [services.jellyseerr](#opt-services.jellyseerr.enable).
|
||||
|
||||
- [stargazer](https://sr.ht/~zethra/stargazer/), a fast and easy to use Gemini server. Available as [services.stargazer](#opt-services.stargazer.enable).
|
||||
|
||||
- [photoprism](https://photoprism.app/), a AI-Powered Photos App for the Decentralized Web. Available as [services.photoprism](options.html#opt-services.photoprism.enable).
|
||||
|
||||
- [peroxide](https://github.com/ljanyst/peroxide), a fork of the official [ProtonMail bridge](https://github.com/ProtonMail/proton-bridge) that aims to be similar to [Hydroxide](https://github.com/emersion/hydroxide). Available as [services.peroxide](#opt-services.peroxide.enable).
|
||||
|
@ -190,6 +192,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
|||
|
||||
- `lib.systems.examples.ghcjs` and consequently `pkgsCross.ghcjs` now use the target triplet `javascript-unknown-ghcjs` instead of `js-unknown-ghcjs`. This has been done to match an [upstream decision](https://gitlab.haskell.org/ghc/ghc/-/commit/6636b670233522f01d002c9b97827d00289dbf5c) to follow Cabal's platform naming more closely. Nixpkgs will also reject `js` as an architecture name.
|
||||
|
||||
- `dokuwiki` has been updated from 2023-07-31a (Igor) to 2023-04-04 (Jack Jackrum), which has [completely removed](https://www.dokuwiki.org/changes#release_2023-04-04_jack_jackrum) the options to embed HTML and PHP for security reasons. The [htmlok plugin](https://www.dokuwiki.org/plugin:htmlok) can be used to regain this functionality.
|
||||
|
||||
- The old unsupported version 6.x of the ELK-stack and Elastic beats have been removed. Use OpenSearch instead.
|
||||
|
||||
- The `cosmoc` package has been removed. The upstream scripts in `cosmocc` should be used instead.
|
||||
|
|
|
@ -1243,6 +1243,7 @@
|
|||
./services/web-servers/nginx/gitweb.nix
|
||||
./services/web-servers/phpfpm/default.nix
|
||||
./services/web-servers/pomerium.nix
|
||||
./services/web-servers/stargazer.nix
|
||||
./services/web-servers/tomcat.nix
|
||||
./services/web-servers/traefik.nix
|
||||
./services/web-servers/trafficserver/default.nix
|
||||
|
|
|
@ -4,6 +4,49 @@ with lib;
|
|||
|
||||
let
|
||||
cfg = config.services.bird-lg;
|
||||
|
||||
stringOrConcat = sep: v: if builtins.isString v then v else concatStringsSep sep v;
|
||||
|
||||
frontend_args = let
|
||||
fe = cfg.frontend;
|
||||
in {
|
||||
"--servers" = concatStringsSep "," fe.servers;
|
||||
"--domain" = fe.domain;
|
||||
"--listen" = fe.listenAddress;
|
||||
"--proxy-port" = fe.proxyPort;
|
||||
"--whois" = fe.whois;
|
||||
"--dns-interface" = fe.dnsInterface;
|
||||
"--bgpmap-info" = concatStringsSep "," cfg.frontend.bgpMapInfo;
|
||||
"--title-brand" = fe.titleBrand;
|
||||
"--navbar-brand" = fe.navbar.brand;
|
||||
"--navbar-brand-url" = fe.navbar.brandURL;
|
||||
"--navbar-all-servers" = fe.navbar.allServers;
|
||||
"--navbar-all-url" = fe.navbar.allServersURL;
|
||||
"--net-specific-mode" = fe.netSpecificMode;
|
||||
"--protocol-filter" = concatStringsSep "," cfg.frontend.protocolFilter;
|
||||
};
|
||||
|
||||
proxy_args = let
|
||||
px = cfg.proxy;
|
||||
in {
|
||||
"--allowed" = concatStringsSep "," px.allowedIPs;
|
||||
"--bird" = px.birdSocket;
|
||||
"--listen" = px.listenAddress;
|
||||
"--traceroute_bin" = px.traceroute.binary;
|
||||
"--traceroute_flags" = concatStringsSep " " px.traceroute.flags;
|
||||
"--traceroute_raw" = px.traceroute.rawOutput;
|
||||
};
|
||||
|
||||
mkArgValue = value:
|
||||
if isString value
|
||||
then escapeShellArg value
|
||||
else if isBool value
|
||||
then boolToString value
|
||||
else toString value;
|
||||
|
||||
filterNull = filterAttrs (_: v: v != "" && v != null && v != []);
|
||||
|
||||
argsAttrToList = args: mapAttrsToList (name: value: "${name} " + mkArgValue value ) (filterNull args);
|
||||
in
|
||||
{
|
||||
options = {
|
||||
|
@ -44,14 +87,12 @@ in
|
|||
|
||||
domain = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
example = "dn42.lantian.pub";
|
||||
description = lib.mdDoc "Server name domain suffixes.";
|
||||
};
|
||||
|
||||
servers = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
example = [ "gigsgigscloud" "hostdare" ];
|
||||
description = lib.mdDoc "Server name prefixes.";
|
||||
};
|
||||
|
@ -134,10 +175,14 @@ in
|
|||
};
|
||||
|
||||
extraArgs = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
type = with types; either lines (listOf str);
|
||||
default = [ ];
|
||||
description = lib.mdDoc ''
|
||||
Extra parameters documented [here](https://github.com/xddxdd/bird-lg-go#frontend).
|
||||
|
||||
:::{.note}
|
||||
Passing lines (plain strings) is deprecated in favour of passing lists of strings.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
@ -160,8 +205,7 @@ in
|
|||
|
||||
birdSocket = mkOption {
|
||||
type = types.str;
|
||||
default = "/run/bird.ctl";
|
||||
example = "/var/run/bird/bird.ctl";
|
||||
default = "/var/run/bird/bird.ctl";
|
||||
description = lib.mdDoc "Bird control socket path.";
|
||||
};
|
||||
|
||||
|
@ -173,6 +217,12 @@ in
|
|||
description = lib.mdDoc "Traceroute's binary path.";
|
||||
};
|
||||
|
||||
flags = mkOption {
|
||||
type = with types; listOf str;
|
||||
default = [ ];
|
||||
description = lib.mdDoc "Flags for traceroute process";
|
||||
};
|
||||
|
||||
rawOutput = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
|
@ -181,10 +231,14 @@ in
|
|||
};
|
||||
|
||||
extraArgs = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
type = with types; either lines (listOf str);
|
||||
default = [ ];
|
||||
description = lib.mdDoc ''
|
||||
Extra parameters documented [here](https://github.com/xddxdd/bird-lg-go#proxy).
|
||||
|
||||
:::{.note}
|
||||
Passing lines (plain strings) is deprecated in favour of passing lists of strings.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
@ -194,6 +248,16 @@ in
|
|||
###### implementation
|
||||
|
||||
config = {
|
||||
|
||||
warnings =
|
||||
lib.optional (cfg.frontend.enable && builtins.isString cfg.frontend.extraArgs) ''
|
||||
Passing strings to `services.bird-lg.frontend.extraOptions' is deprecated. Please pass a list of strings instead.
|
||||
''
|
||||
++ lib.optional (cfg.proxy.enable && builtins.isString cfg.proxy.extraArgs) ''
|
||||
Passing strings to `services.bird-lg.proxy.extraOptions' is deprecated. Please pass a list of strings instead.
|
||||
''
|
||||
;
|
||||
|
||||
systemd.services = {
|
||||
bird-lg-frontend = mkIf cfg.frontend.enable {
|
||||
enable = true;
|
||||
|
@ -211,23 +275,8 @@ in
|
|||
};
|
||||
script = ''
|
||||
${cfg.package}/bin/frontend \
|
||||
--servers ${concatStringsSep "," cfg.frontend.servers } \
|
||||
--domain ${cfg.frontend.domain} \
|
||||
--listen ${cfg.frontend.listenAddress} \
|
||||
--proxy-port ${toString cfg.frontend.proxyPort} \
|
||||
--whois ${cfg.frontend.whois} \
|
||||
--dns-interface ${cfg.frontend.dnsInterface} \
|
||||
--bgpmap-info ${concatStringsSep "," cfg.frontend.bgpMapInfo } \
|
||||
--title-brand ${cfg.frontend.titleBrand} \
|
||||
--navbar-brand ${cfg.frontend.navbar.brand} \
|
||||
--navbar-brand-url ${cfg.frontend.navbar.brandURL} \
|
||||
--navbar-all-servers ${cfg.frontend.navbar.allServers} \
|
||||
--navbar-all-url ${cfg.frontend.navbar.allServersURL} \
|
||||
--net-specific-mode ${cfg.frontend.netSpecificMode} \
|
||||
--protocol-filter ${concatStringsSep "," cfg.frontend.protocolFilter } \
|
||||
--name-filter ${cfg.frontend.nameFilter} \
|
||||
--time-out ${toString cfg.frontend.timeout} \
|
||||
${cfg.frontend.extraArgs}
|
||||
${concatStringsSep " \\\n " (argsAttrToList frontend_args)} \
|
||||
${stringOrConcat " " cfg.frontend.extraArgs}
|
||||
'';
|
||||
};
|
||||
|
||||
|
@ -247,12 +296,8 @@ in
|
|||
};
|
||||
script = ''
|
||||
${cfg.package}/bin/proxy \
|
||||
--allowed ${concatStringsSep "," cfg.proxy.allowedIPs } \
|
||||
--bird ${cfg.proxy.birdSocket} \
|
||||
--listen ${cfg.proxy.listenAddress} \
|
||||
--traceroute_bin ${cfg.proxy.traceroute.binary}
|
||||
--traceroute_raw ${boolToString cfg.proxy.traceroute.rawOutput}
|
||||
${cfg.proxy.extraArgs}
|
||||
${concatStringsSep " \\\n " (argsAttrToList proxy_args)} \
|
||||
${stringOrConcat " " cfg.proxy.extraArgs}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
@ -266,4 +311,9 @@ in
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
e1mo
|
||||
tchekda
|
||||
];
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ let cfg = config.services.cloud-init;
|
|||
openssh
|
||||
shadow
|
||||
util-linux
|
||||
busybox
|
||||
] ++ optional cfg.btrfs.enable btrfs-progs
|
||||
++ optional cfg.ext4.enable e2fsprogs
|
||||
;
|
||||
|
|
|
@ -429,7 +429,7 @@ in {
|
|||
|
||||
environment = env;
|
||||
|
||||
path = with pkgs; [ bashInteractive ffmpeg nodejs-16_x openssl yarn python3 ];
|
||||
path = with pkgs; [ bashInteractive ffmpeg nodejs_16 openssl yarn python3 ];
|
||||
|
||||
script = ''
|
||||
#!/bin/sh
|
||||
|
@ -859,7 +859,7 @@ in {
|
|||
home = cfg.package;
|
||||
};
|
||||
})
|
||||
(lib.attrsets.setAttrByPath [ cfg.user "packages" ] [ cfg.package peertubeEnv peertubeCli pkgs.ffmpeg pkgs.nodejs-16_x pkgs.yarn ])
|
||||
(lib.attrsets.setAttrByPath [ cfg.user "packages" ] [ cfg.package peertubeEnv peertubeCli pkgs.ffmpeg pkgs.nodejs_16 pkgs.yarn ])
|
||||
(lib.mkIf cfg.redis.enableUnixSocket {${config.services.peertube.user}.extraGroups = [ "redis-peertube" ];})
|
||||
];
|
||||
|
||||
|
|
|
@ -133,7 +133,7 @@ in {
|
|||
WorkingDirectory = "/var/lib/${cfg.stateDirectoryName}";
|
||||
DynamicUser = true;
|
||||
PrivateTmp = true;
|
||||
ExecStart = "${pkgs.nodejs-16_x}/bin/node ${pkgs.wiki-js}/server";
|
||||
ExecStart = "${pkgs.nodejs_16}/bin/node ${pkgs.wiki-js}/server";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
198
nixos/modules/services/web-servers/stargazer.nix
Normal file
198
nixos/modules/services/web-servers/stargazer.nix
Normal file
|
@ -0,0 +1,198 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.stargazer;
|
||||
routesFormat = pkgs.formats.ini { };
|
||||
globalFile = pkgs.writeText "global.ini" ''
|
||||
listen = ${concatStringsSep " " cfg.listen}
|
||||
connection-logging = ${boolToString cfg.connectionLogging}
|
||||
log-ip = ${boolToString cfg.ipLog}
|
||||
log-ip-partial = ${boolToString cfg.ipLogPartial}
|
||||
request-timeout = ${toString cfg.requestTimeout}
|
||||
response-timeout = ${toString cfg.responseTimeout}
|
||||
|
||||
[:tls]
|
||||
store = ${toString cfg.store}
|
||||
organization = ${cfg.certOrg}
|
||||
gen-certs = ${boolToString cfg.genCerts}
|
||||
regen-certs = ${boolToString cfg.regenCerts}
|
||||
${optionalString (cfg.certLifetime != "") "cert-lifetime = ${cfg.certLifetime}"}
|
||||
|
||||
'';
|
||||
routesFile = routesFormat.generate "router.ini" cfg.routes;
|
||||
configFile = pkgs.runCommand "config.ini" { } ''
|
||||
cat ${globalFile} ${routesFile} > $out
|
||||
'';
|
||||
in
|
||||
{
|
||||
options.services.stargazer = {
|
||||
enable = mkEnableOption (lib.mdDoc "Stargazer Gemini server");
|
||||
|
||||
listen = lib.mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ "0.0.0.0" ] ++ optional config.networking.enableIPv6 "[::0]";
|
||||
defaultText = literalExpression ''[ "0.0.0.0" ] ++ lib.optional config.networking.enableIPv6 "[::0]"'';
|
||||
example = literalExpression ''[ "10.0.0.12" "[2002:a00:1::]" ]'';
|
||||
description = lib.mdDoc ''
|
||||
Address and port to listen on.
|
||||
'';
|
||||
};
|
||||
|
||||
connectionLogging = lib.mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = lib.mdDoc "Whether or not to log connections to stdout.";
|
||||
};
|
||||
|
||||
ipLog = lib.mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = lib.mdDoc "Log client IP addresses in the connection log.";
|
||||
};
|
||||
|
||||
ipLogPartial = lib.mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = lib.mdDoc "Log partial client IP addresses in the connection log.";
|
||||
};
|
||||
|
||||
requestTimeout = lib.mkOption {
|
||||
type = types.int;
|
||||
default = 5;
|
||||
description = lib.mdDoc ''
|
||||
Number of seconds to wait for the client to send a complete
|
||||
request. Set to 0 to disable.
|
||||
'';
|
||||
};
|
||||
|
||||
responseTimeout = lib.mkOption {
|
||||
type = types.int;
|
||||
default = 0;
|
||||
description = lib.mdDoc ''
|
||||
Number of seconds to wait for the client to send a complete
|
||||
request and for stargazer to finish sending the response.
|
||||
Set to 0 to disable.
|
||||
'';
|
||||
};
|
||||
|
||||
store = lib.mkOption {
|
||||
type = types.path;
|
||||
default = /var/lib/gemini/certs;
|
||||
description = lib.mdDoc ''
|
||||
Path to the certificate store on disk. This should be a
|
||||
persistent directory writable by Stargazer.
|
||||
'';
|
||||
};
|
||||
|
||||
certOrg = lib.mkOption {
|
||||
type = types.str;
|
||||
default = "stargazer";
|
||||
description = lib.mdDoc ''
|
||||
The name of the organization responsible for the X.509
|
||||
certificate's /O name.
|
||||
'';
|
||||
};
|
||||
|
||||
genCerts = lib.mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = lib.mdDoc ''
|
||||
Set to false to disable automatic certificate generation.
|
||||
Use if you want to provide your own certs.
|
||||
'';
|
||||
};
|
||||
|
||||
regenCerts = lib.mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = lib.mdDoc ''
|
||||
Set to false to turn off automatic regeneration of expired certificates.
|
||||
Use if you want to provide your own certs.
|
||||
'';
|
||||
};
|
||||
|
||||
certLifetime = lib.mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
description = lib.mdDoc ''
|
||||
How long certs generated by Stargazer should live for.
|
||||
Certs live forever by default.
|
||||
'';
|
||||
example = literalExpression "\"1y\"";
|
||||
};
|
||||
|
||||
routes = lib.mkOption {
|
||||
type = routesFormat.type;
|
||||
default = { };
|
||||
description = lib.mdDoc ''
|
||||
Routes that Stargazer should server.
|
||||
|
||||
[Refer to upstream docs](https://git.sr.ht/~zethra/stargazer/tree/main/item/doc/stargazer.ini.5.txt)
|
||||
'';
|
||||
example = literalExpression ''
|
||||
{
|
||||
"example.com" = {
|
||||
root = "/srv/gemini/example.com";
|
||||
};
|
||||
"example.com:/man" = {
|
||||
root = "/cgi-bin";
|
||||
cgi = true;
|
||||
};
|
||||
"other.org~(.*)" = {
|
||||
redirect = "gemini://example.com";
|
||||
rewrite = "\1";
|
||||
};
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "stargazer";
|
||||
description = lib.mdDoc "User account under which stargazer runs.";
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
default = "stargazer";
|
||||
description = lib.mdDoc "Group account under which stargazer runs.";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.stargazer = {
|
||||
description = "Stargazer gemini server";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.stargazer}/bin/stargazer ${configFile}";
|
||||
Restart = "always";
|
||||
# User and group
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
};
|
||||
};
|
||||
|
||||
# Create default cert store
|
||||
system.activationScripts.makeStargazerCertDir =
|
||||
optionalAttrs (cfg.store == /var/lib/gemini/certs) ''
|
||||
mkdir -p /var/lib/gemini/certs
|
||||
chown -R ${cfg.user}:${cfg.group} /var/lib/gemini/certs
|
||||
'';
|
||||
|
||||
users.users = optionalAttrs (cfg.user == "stargazer") {
|
||||
stargazer = {
|
||||
group = cfg.group;
|
||||
isSystemUser = true;
|
||||
};
|
||||
};
|
||||
|
||||
users.groups = optionalAttrs (cfg.group == "stargazer") {
|
||||
stargazer = { };
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ gaykitty ];
|
||||
}
|
|
@ -645,6 +645,7 @@ in {
|
|||
sslh = handleTest ./sslh.nix {};
|
||||
sssd = handleTestOn ["x86_64-linux"] ./sssd.nix {};
|
||||
sssd-ldap = handleTestOn ["x86_64-linux"] ./sssd-ldap.nix {};
|
||||
stargazer = runTest ./web-servers/stargazer.nix;
|
||||
starship = handleTest ./starship.nix {};
|
||||
step-ca = handleTestOn ["x86_64-linux"] ./step-ca.nix {};
|
||||
stratis = handleTest ./stratis {};
|
||||
|
@ -712,6 +713,7 @@ in {
|
|||
tiddlywiki = handleTest ./tiddlywiki.nix {};
|
||||
tigervnc = handleTest ./tigervnc.nix {};
|
||||
timescaledb = handleTest ./timescaledb.nix {};
|
||||
promscale = handleTest ./promscale.nix {};
|
||||
timezone = handleTest ./timezone.nix {};
|
||||
tinc = handleTest ./tinc {};
|
||||
tinydns = handleTest ./tinydns.nix {};
|
||||
|
|
60
nixos/tests/promscale.nix
Normal file
60
nixos/tests/promscale.nix
Normal file
|
@ -0,0 +1,60 @@
|
|||
# mostly copied from ./timescaledb.nix which was copied from ./postgresql.nix
|
||||
# as it seemed unapproriate to test additional extensions for postgresql there.
|
||||
|
||||
{ system ? builtins.currentSystem
|
||||
, config ? { }
|
||||
, pkgs ? import ../.. { inherit system config; }
|
||||
}:
|
||||
|
||||
with import ../lib/testing-python.nix { inherit system pkgs; };
|
||||
with pkgs.lib;
|
||||
|
||||
let
|
||||
postgresql-versions = import ../../pkgs/servers/sql/postgresql pkgs;
|
||||
test-sql = pkgs.writeText "postgresql-test" ''
|
||||
CREATE USER promscale SUPERUSER PASSWORD 'promscale';
|
||||
CREATE DATABASE promscale OWNER promscale;
|
||||
'';
|
||||
|
||||
make-postgresql-test = postgresql-name: postgresql-package: makeTest {
|
||||
name = postgresql-name;
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ anpin ];
|
||||
};
|
||||
|
||||
nodes.machine = { config, pkgs, ... }:
|
||||
{
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
package = postgresql-package;
|
||||
extraPlugins = with postgresql-package.pkgs; [
|
||||
timescaledb
|
||||
promscale_extension
|
||||
];
|
||||
settings = { shared_preload_libraries = "timescaledb, promscale"; };
|
||||
};
|
||||
environment.systemPackages = with pkgs; [ promscale ];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.start()
|
||||
machine.wait_for_unit("postgresql")
|
||||
with subtest("Postgresql with extensions timescaledb and promscale is available just after unit start"):
|
||||
print(machine.succeed("sudo -u postgres psql -f ${test-sql}"))
|
||||
machine.succeed("sudo -u postgres psql promscale -c 'SHOW shared_preload_libraries;' | grep promscale")
|
||||
machine.succeed(
|
||||
"promscale --db.name promscale --db.password promscale --db.user promscale --db.ssl-mode allow --startup.install-extensions --startup.only"
|
||||
)
|
||||
machine.succeed("sudo -u postgres psql promscale -c 'SELECT ps_trace.get_trace_retention_period();' | grep '(1 row)'")
|
||||
machine.shutdown()
|
||||
'';
|
||||
};
|
||||
#version 15 is not supported yet
|
||||
applicablePostgresqlVersions = filterAttrs (_: value: versionAtLeast value.version "12" && !(versionAtLeast value.version "15")) postgresql-versions;
|
||||
in
|
||||
mapAttrs'
|
||||
(name: package: {
|
||||
inherit name;
|
||||
value = make-postgresql-test name package;
|
||||
})
|
||||
applicablePostgresqlVersions
|
30
nixos/tests/web-servers/stargazer.nix
Normal file
30
nixos/tests/web-servers/stargazer.nix
Normal file
|
@ -0,0 +1,30 @@
|
|||
{ pkgs, lib, ... }:
|
||||
{
|
||||
name = "stargazer";
|
||||
meta = with lib.maintainers; { maintainers = [ gaykitty ]; };
|
||||
|
||||
nodes = {
|
||||
geminiserver = { pkgs, ... }: {
|
||||
services.stargazer = {
|
||||
enable = true;
|
||||
routes = {
|
||||
"localhost" = {
|
||||
root = toString (pkgs.writeTextDir "index.gmi" ''
|
||||
# Hello NixOS!
|
||||
'');
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = { nodes, ... }: ''
|
||||
geminiserver.wait_for_unit("stargazer")
|
||||
geminiserver.wait_for_open_port(1965)
|
||||
|
||||
with subtest("check is serving over gemini"):
|
||||
response = geminiserver.succeed("${pkgs.gmni}/bin/gmni -j once -i -N gemini://localhost:1965")
|
||||
print(response)
|
||||
assert "Hello NixOS!" in response
|
||||
'';
|
||||
}
|
|
@ -19,20 +19,20 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "amberol";
|
||||
version = "unstable-2023-01-12";
|
||||
version = "0.10.0";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.gnome.org";
|
||||
owner = "World";
|
||||
repo = pname;
|
||||
rev = "0623386c813d0d68564002324958cef7217cec7f";
|
||||
hash = "sha256-nVL4ydTg4ncDCA9J9qWv+RPDC0Txr/qpo5XxIUiV0zQ=";
|
||||
rev = version;
|
||||
hash = "sha256-G1B+kDH1eWYA/j1t2xJPoGQasIJ77y+BKnnu/6VEWts=";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoTarball {
|
||||
inherit src;
|
||||
name = "${pname}-${version}";
|
||||
hash = "sha256-E0ivUWD3jP/T1GOJ11grDwcF+m92I+W2a2HhZX1bCso=";
|
||||
hash = "sha256-5hy2u1flUKZCM4OPFhoT5b3R8v3zBGtwN+e6kwY3LQ4=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -61,17 +61,19 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "audacity";
|
||||
version = "3.2.5";
|
||||
version = "3.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = pname;
|
||||
repo = pname;
|
||||
rev = "Audacity-${version}";
|
||||
hash = "sha256-tMz55fZh+TfvLEyApDqC0QMd2hEQLJsNQ6y2Xy0xgaQ=";
|
||||
hash = "sha256-OQX3YFUdK9TR7ZuN2dZc6ZAWaqfftk5VH0qoOwbTAuM=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
mkdir src/private
|
||||
substituteInPlace scripts/build/macOS/fix_bundle.py \
|
||||
--replace "path.startswith('/usr/lib/')" "path.startswith('${builtins.storeDir}')"
|
||||
'' + lib.optionalString stdenv.isLinux ''
|
||||
substituteInPlace libraries/lib-files/FileNames.cpp \
|
||||
--replace /usr/include/linux/magic.h ${linuxHeaders}/include/linux/magic.h
|
||||
|
@ -151,13 +153,16 @@ stdenv.mkDerivation rec {
|
|||
|
||||
# RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/
|
||||
"-DCMAKE_SKIP_BUILD_RPATH=ON"
|
||||
|
||||
# Fix duplicate store paths
|
||||
"-DCMAKE_INSTALL_LIBDIR=lib"
|
||||
];
|
||||
|
||||
# [ 57%] Generating LightThemeAsCeeCode.h...
|
||||
# ../../utils/image-compiler: error while loading shared libraries:
|
||||
# lib-theme.so: cannot open shared object file: No such file or directory
|
||||
preBuild = ''
|
||||
export LD_LIBRARY_PATH=$PWD/utils
|
||||
export LD_LIBRARY_PATH=$PWD/Release/lib/audacity
|
||||
'';
|
||||
|
||||
doCheck = false; # Test fails
|
||||
|
|
|
@ -57,6 +57,8 @@ stdenv.mkDerivation rec {
|
|||
|
||||
patchShebangs compile-phazor.sh
|
||||
|
||||
substituteInPlace compile-phazor.sh --replace 'gcc' '${stdenv.cc.targetPrefix}cc'
|
||||
|
||||
substituteInPlace extra/tauonmb.desktop --replace 'Exec=/opt/tauon-music-box/tauonmb.sh' 'Exec=${placeholder "out"}/bin/tauon'
|
||||
'';
|
||||
|
||||
|
@ -95,7 +97,6 @@ stdenv.mkDerivation rec {
|
|||
natsort
|
||||
pillow
|
||||
plexapi
|
||||
pulsectl
|
||||
pycairo
|
||||
pychromecast
|
||||
pylast
|
||||
|
@ -105,7 +106,8 @@ stdenv.mkDerivation rec {
|
|||
requests
|
||||
send2trash
|
||||
setproctitle
|
||||
] ++ lib.optional withDiscordRPC pypresence;
|
||||
] ++ lib.optional withDiscordRPC pypresence
|
||||
++ lib.optional stdenv.isLinux pulsectl;
|
||||
|
||||
makeWrapperArgs = [
|
||||
"--prefix PATH : ${lib.makeBinPath [ffmpeg]}"
|
||||
|
@ -134,6 +136,6 @@ stdenv.mkDerivation rec {
|
|||
changelog = "https://github.com/Taiko2k/TauonMusicBox/releases/tag/v${version}";
|
||||
license = licenses.gpl3;
|
||||
maintainers = with maintainers; [ jansol ];
|
||||
platforms = platforms.linux;
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,19 +4,20 @@
|
|||
, cmake
|
||||
, libsecret
|
||||
, qtkeychain
|
||||
, qttools
|
||||
, restic
|
||||
}:
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "restique";
|
||||
version = "unstable-2021-05-03";
|
||||
version = "unstable-2022-11-29";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "git.srcbox.net";
|
||||
owner = "stefan";
|
||||
repo = "restique";
|
||||
rev = "f83ea63c2e2f2a41e845f54c7fe2c391a528a121";
|
||||
sha256 = "0j1qihv7hd90xkfm4ksv74q6m7cq781fbdnc3l4spcd7h2p8lh0z";
|
||||
rev = "906b0b1726c26988c910baea9665f540c37c99c4";
|
||||
hash = "sha256-EYoADtYX+gm8T3/3gxTtdFOFGJf2rXryiTu8NIO0Ez4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -26,6 +27,7 @@ mkDerivation rec {
|
|||
buildInputs = [
|
||||
libsecret
|
||||
qtkeychain
|
||||
qttools
|
||||
];
|
||||
|
||||
qtWrapperArgs = [
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "besu";
|
||||
version = "22.10.3";
|
||||
version = "23.1.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://hyperledger.jfrog.io/artifactory/${pname}-binaries/${pname}/${version}/${pname}-${version}.tar.gz";
|
||||
sha256 = "sha256-chP5RFqEoZbpSuGHfG/bHlHTe/sZYV2gLvUSHU9A44w=";
|
||||
sha256 = "sha256-PTpwmjqrmToIAbQSpHGddOMZ+ULdwT+w8ws8SlTRJTg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ergo";
|
||||
version = "5.0.8";
|
||||
version = "5.0.9";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ergoplatform/ergo/releases/download/v${version}/ergo-${version}.jar";
|
||||
sha256 = "sha256-ZXLtlxxhM6yOwRRVkzaLk5sLfJbDrodI7kIX6ItOk5I=";
|
||||
sha256 = "sha256-EChnLRoInWFRuRMfnyRlZbZBWB6/QG9yRdwW9+IiMYc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
let
|
||||
pname = "ledger-live-desktop";
|
||||
version = "2.55.0";
|
||||
version = "2.57.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://download.live.ledger.com/${pname}-${version}-linux-x86_64.AppImage";
|
||||
hash = "sha256-N0BhbqZvZs3IP+jMxr85KlHs6I/fxWgoK884EKT9C9Y=";
|
||||
hash = "sha256-fXvCj9eBEp/kGPSiNUdir19eU0x461KzXgl5YgeapHI=";
|
||||
};
|
||||
|
||||
appimageContents = appimageTools.extractType2 {
|
||||
|
|
|
@ -38,13 +38,13 @@ let
|
|||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "cudatext";
|
||||
version = "1.191.0";
|
||||
version = "1.191.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Alexey-T";
|
||||
repo = "CudaText";
|
||||
rev = version;
|
||||
hash = "sha256-wn2pSzz4w8tQjVFEIfR3/1ddeTjQBQaKl26SxXbOXG0=";
|
||||
hash = "sha256-jGIdDgSDgKXI9DHEmu2FRXjoFsvmxUbK5xoajLjX7zQ=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
8
pkgs/applications/editors/cudatext/deps.json
generated
8
pkgs/applications/editors/cudatext/deps.json
generated
|
@ -16,8 +16,8 @@
|
|||
},
|
||||
"ATSynEdit": {
|
||||
"owner": "Alexey-T",
|
||||
"rev": "2023.04.17",
|
||||
"hash": "sha256-QllXTq9BCKedt/Pv14qOn1UoxZ57qz76OyptnjT92hA="
|
||||
"rev": "2023.04.22",
|
||||
"hash": "sha256-12W0p18s15KFFIopgit8l/Bf1KjMZkP2kCAaeaoqfyQ="
|
||||
},
|
||||
"ATSynEdit_Cmp": {
|
||||
"owner": "Alexey-T",
|
||||
|
@ -26,8 +26,8 @@
|
|||
},
|
||||
"EControl": {
|
||||
"owner": "Alexey-T",
|
||||
"rev": "2023.04.17",
|
||||
"hash": "sha256-EdtrKYZTP+1MQU5fLO6vYoU3EjS91PaSQnIxtgAs7TI="
|
||||
"rev": "2023.04.18",
|
||||
"hash": "sha256-Eb8ynxZP3OQ7TGFZMbw8r0HXXvaoR6yotwnwK6nwZxg="
|
||||
},
|
||||
"ATSynEdit_Ex": {
|
||||
"owner": "Alexey-T",
|
||||
|
|
|
@ -4,13 +4,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "orbiton";
|
||||
version = "2.60.6";
|
||||
version = "2.61.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "xyproto";
|
||||
repo = "orbiton";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-uDxdv7HlswGsuM4UewZOO45/P9jIOo4bb0T1RrQqtpg=";
|
||||
hash = "sha256-GknQXHwpdIRzSjIc1ITsoiaks4Vi5KmVqL7sHzmfnmQ=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
/*
|
||||
#!nix-shell -i node -p nodejs-18_x
|
||||
#!nix-shell -i node -p nodejs_18
|
||||
*/
|
||||
|
||||
import { promises as fs } from 'node:fs';
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"version": "3.150.45",
|
||||
"version": "3.151.3",
|
||||
"appimage": {
|
||||
"x86_64-linux": {
|
||||
"url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.150.45/standard-notes-3.150.45-linux-x86_64.AppImage",
|
||||
"hash": "sha512-a1g+nOJJ1MSiCvguFAlAPhwyogAS6cwDD8Ou+P0lufLLG2HyLPdOEwVl8Nhqq4iaFFQoyY3FtKm+Sdpd3WJ72Q=="
|
||||
"url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.151.3/standard-notes-3.151.3-linux-x86_64.AppImage",
|
||||
"hash": "sha512-Wk31nB9OjR8E3cPFfh4KpUqQxXsnerzDt5TgaExXW4OeWLftv3ejyf2ROWXAoqG/8K87OclbunCqS3b2g8hAjA=="
|
||||
},
|
||||
"aarch64-linux": {
|
||||
"url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.150.45/standard-notes-3.150.45-linux-arm64.AppImage",
|
||||
"hash": "sha512-ivnyuMhdBweRs+9Qkt4srm2JlMMxLFDbT0DBaeNCHVuyWM/13LRczIyto2tbPp9xC6DCJmGktjY3ZYsB3odftA=="
|
||||
"url": "https://github.com/standardnotes/app/releases/download/%40standardnotes/desktop%403.151.3/standard-notes-3.151.3-linux-arm64.AppImage",
|
||||
"hash": "sha512-nPTpEJs978wxZjG1pN15ETgUBdGBzl574QHCQNo2ShYvhi9Uf38jCaGQIsY0d779eT8kSHuMBXoAiE/flxfWMQ=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,13 +19,13 @@ in
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "tiled";
|
||||
version = "1.10.0";
|
||||
version = "1.10.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mapeditor";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-y79trmkRrkOOP6p9VMjo/11IE22J3YJtnerBsVP9134=";
|
||||
sha256 = "sha256-zrDka6yXJ++UuGFepn8glQ1r7ufBcjsnNZuH+jnkJw0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config qbs wrapQtAppsHook ];
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs_14"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ./node-env.nix {
|
||||
|
|
|
@ -103,6 +103,7 @@ in mkDerivation rec {
|
|||
license = licenses.gpl3;
|
||||
maintainers = with maintainers; [ fgaz ];
|
||||
platforms = platforms.unix;
|
||||
broken = stdenv.isDarwin;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -19,13 +19,13 @@ assert withOpenCL -> ocl-icd != null;
|
|||
|
||||
mkDerivation rec {
|
||||
pname = "mandelbulber";
|
||||
version = "2.28";
|
||||
version = "2.29";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "buddhi1980";
|
||||
repo = "mandelbulber2";
|
||||
rev = version;
|
||||
sha256 = "sha256-NrXfEUoTJSz8C6rNU+tSO4PUUo5YWP0bknzXQieOqDc=";
|
||||
sha256 = "sha256-PVyJnPPNehQ5qzhuoUsDRQ+V3azauEkIk26XfLZOmXg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
mkDerivation rec {
|
||||
pname = "yacreader";
|
||||
version = "9.11.0";
|
||||
version = "9.12.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "YACReader";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-/fSIV+4j516PgHGn6zF+TfVaVW/lVWykf5J8bnQuttg=";
|
||||
sha256 = "sha256-sIQxUiTGQCcHmxBp0Mf49e/XVaJe7onlLHiorMlNLZ8=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake pkg-config ];
|
||||
|
|
|
@ -12,12 +12,12 @@ let
|
|||
if extension == "zip" then fetchzip args else fetchurl args;
|
||||
|
||||
pname = "1password-cli";
|
||||
version = "2.16.1";
|
||||
version = "2.17.0";
|
||||
sources = rec {
|
||||
aarch64-linux = fetch "linux_arm64" "sha256-8zKxd2yY8syGhgyPv06b+ag2bEfFfG19ZmQPrfi+Qh4=" "zip";
|
||||
i686-linux = fetch "linux_386" "sha256-3OO0JMJMRqbmq/rD/VRKIMBdjYu66ebEFGNLKX9K6A8=" "zip";
|
||||
x86_64-linux = fetch "linux_amd64" "sha256-ZCXfreBiFDc5YFd9YsMddEvzl22KwnnfSQsV6BmHqeA=" "zip";
|
||||
aarch64-darwin = fetch "apple_universal" "sha256-vlsqvz+AgEhL7M8cJhxmjjZ6ocIVUdq7MC1EVZOExU8=" "pkg";
|
||||
aarch64-linux = fetch "linux_arm64" "sha256-pnLAFCKhQKOIqp0qDv3DfAqF4fDXjFdw7Jl9WgDf7C0=" "zip";
|
||||
i686-linux = fetch "linux_386" "sha256-o+pSWUOSzDKA5m+Riu3QOi9gQMyEmbIGcE/yUjKu9p8=" "zip";
|
||||
x86_64-linux = fetch "linux_amd64" "sha256-aukQSeC+5p6ioTE6QlzEAM+9VOI34GfzzjaGt/N0klY=" "zip";
|
||||
aarch64-darwin = fetch "apple_universal" "sha256-HSXbbeDWYrFTh9SsKwvNovprWRwaDr3rA6X6E1QJJos=" "pkg";
|
||||
x86_64-darwin = aarch64-darwin;
|
||||
};
|
||||
platforms = builtins.attrNames sources;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs_14"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ../../../../development/node-packages/node-env.nix {
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "dasel";
|
||||
version = "2.1.2";
|
||||
version = "2.2.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "TomWright";
|
||||
repo = "dasel";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-3zYBgDtptEmuAhLFnPt0eDvgTYltHDdQGX1JCem/UxE=";
|
||||
sha256 = "sha256-DPfahZIb6Cp+E5GxIqNW+IruDZWBvJTRc7gxQOfeJqA=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-GO5Vg8zsXfjMBzRDC1/s/SYpviKUf59JB14vauKVFcE=";
|
||||
vendorHash = "sha256-+3RcjOZjmYu4eNpgczwY4Uyz1+poYA/TXc2Mb+VwRKc=";
|
||||
|
||||
ldflags = [
|
||||
"-s" "-w" "-X github.com/tomwright/dasel/v2/internal.Version=${version}"
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "fluidd";
|
||||
version = "1.23.4";
|
||||
version = "1.23.5";
|
||||
|
||||
src = fetchurl {
|
||||
name = "fluidd-v${version}.zip";
|
||||
url = "https://github.com/cadriel/fluidd/releases/download/v${version}/fluidd.zip";
|
||||
sha256 = "sha256-ofGjIxxk7tBEa4jbNSCNzZJBHvv+mA1u03f9KtdjIbQ=";
|
||||
sha256 = "sha256-od/RoxFjnOuyz7+D+avQJyJzpqpovzs+g4ErfyDJQpY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "jot";
|
||||
version = "0.1.1";
|
||||
version = "0.1.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "araekiel";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-CgS9I05Om4JxAbPN0vxh2Y7dftIkVnZkRP7PY4kOfpw=";
|
||||
sha256 = "sha256-Z8szd6ArwbGiHw7SeAah0LrrzUbcQYygX7IcPUYNxvM=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-8nRO01/hUKT6Jt7/3Sw2+aLU6hITSNl6nn9UEAvfyJY=";
|
||||
cargoHash = "sha256-x61lOwMOOLD3RTdy3Ji+c7zcA1PCn09u75MyrPX/NbE=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Rapid note management for the terminal";
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "pgmodeler";
|
||||
version = "1.0.2";
|
||||
version = "1.0.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pgmodeler";
|
||||
repo = "pgmodeler";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-yvVgBfJLjEynsqxQisDfOM99C8/QM0F44RIHAmxh4uU=";
|
||||
sha256 = "sha256-ZlIz+7YyER0/wQEkEe8XHYHcLK4vu09v1zkDrIgR/Dc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config qmake wrapQtAppsHook ];
|
||||
|
|
|
@ -73,5 +73,6 @@ mkDerivation rec {
|
|||
license = licenses.gpl2;
|
||||
maintainers = with maintainers; [ yvesf ];
|
||||
platforms = qtbase.meta.platforms;
|
||||
broken = stdenv.isDarwin;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchYarnDeps, fixup_yarn_lock, callPackage, nodejs-16_x }:
|
||||
{ stdenv, fetchYarnDeps, fixup_yarn_lock, callPackage, nodejs_16 }:
|
||||
let
|
||||
common = callPackage ./common.nix { };
|
||||
in
|
||||
|
@ -16,8 +16,8 @@ stdenv.mkDerivation {
|
|||
nativeBuildInputs = [
|
||||
fixup_yarn_lock
|
||||
# Use Node JS 16 because of @achrinza/node-ipc@9.2.2
|
||||
nodejs-16_x
|
||||
nodejs-16_x.pkgs.yarn
|
||||
nodejs_16
|
||||
nodejs_16.pkgs.yarn
|
||||
];
|
||||
|
||||
configurePhase = ''
|
||||
|
|
|
@ -16,13 +16,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "tofi";
|
||||
version = "0.8.1";
|
||||
version = "0.9.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "philj56";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-HhkXypRGerWWHrR4maR3AtayWSy5qhl/LYwBHWGKboU=";
|
||||
sha256 = "sha256-lokp6Zmdt7WuAyuRnHBkKD4ydbNiQY7pEVY97Z62U90=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-protocols ];
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "ttdl";
|
||||
version = "3.7.1";
|
||||
version = "3.8.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "VladimirMarkelov";
|
||||
repo = "ttdl";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-Bhi1d01VqeLmxsiyIG8HXD6AgabgsKgZoKYgnGNpk/8=";
|
||||
sha256 = "sha256-6QfUy1Y7qFOdBFmDFQyRr+GJZSdH+pbU3dEcAjsV1JM=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-A/5DS7b7Dgj+GlCPu6fx0t14BfMm4XjkpcDjSpeDSnE=";
|
||||
cargoHash = "sha256-N+mVfgbL22fmynmz4/xFNxQh7l455cH2jyuczc4XsM4=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "A CLI tool to manage todo lists in todo.txt format";
|
||||
|
|
|
@ -2,19 +2,13 @@
|
|||
, flutter
|
||||
, python3
|
||||
, fetchFromGitHub
|
||||
, stdenv
|
||||
, pcre2
|
||||
, gnome
|
||||
, makeWrapper
|
||||
, removeReferencesTo
|
||||
}:
|
||||
let
|
||||
vendorHashes = {
|
||||
x86_64-linux = "sha256-Upe0cEDG02RJD50Ht9VNMwkelsJHX8zOuJZssAhMuMY=";
|
||||
aarch64-linux = "sha256-lKER4+gcyFqnCvgBl/qdVBCbUpocWUnXGLXsX82MSy4=";
|
||||
};
|
||||
in
|
||||
flutter.mkFlutterApp rec {
|
||||
|
||||
flutter.buildFlutterApplication rec {
|
||||
pname = "yubioath-flutter";
|
||||
version = "6.1.0";
|
||||
|
||||
|
@ -27,7 +21,8 @@ flutter.mkFlutterApp rec {
|
|||
|
||||
passthru.helper = python3.pkgs.callPackage ./helper.nix { inherit src version meta; };
|
||||
|
||||
vendorHash = vendorHashes.${stdenv.system};
|
||||
depsListFile = ./deps.json;
|
||||
vendorHash = "sha256-WfZiB7MO4wHUg81xm67BMu4zQdC9CfhN5BQol+AI2S8=";
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace linux/CMakeLists.txt \
|
||||
|
@ -89,6 +84,6 @@ flutter.mkFlutterApp rec {
|
|||
homepage = "https://github.com/Yubico/yubioath-flutter";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ lukegb ];
|
||||
platforms = builtins.attrNames vendorHashes;
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" ];
|
||||
};
|
||||
}
|
||||
|
|
1319
pkgs/applications/misc/yubioath-flutter/deps.json
generated
Normal file
1319
pkgs/applications/misc/yubioath-flutter/deps.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -10,14 +10,14 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "zine";
|
||||
version = "0.13.0";
|
||||
version = "0.14.0";
|
||||
|
||||
src = fetchCrate {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-N+0FEZ8TUbMs9cwPmURr39wRA+m7B4UbUOkpNmF1p9A=";
|
||||
sha256 = "sha256-ydcrU2nIlu7Jx7S00DZmD2lAwLIFNzfv4zzM4SwJLVc=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-2Mc1hrVJ3a1tE/Jo6MYjCfd03889raVTyLBzhCQi8ck=";
|
||||
cargoHash = "sha256-j87mpWuYOx7oQyUIlvqKeQ/LZ2lRxz4hyPC0TsrgX2g=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"packageVersion": "112.0.1-1",
|
||||
"packageVersion": "112.0.1-2",
|
||||
"source": {
|
||||
"rev": "112.0.1-1",
|
||||
"sha256": "0bk3idpl11n4gwk8rgfi2pilwx9n56s8dpp7y599h17mlrsw8az4"
|
||||
"rev": "112.0.1-2",
|
||||
"sha256": "1pm4ilc2zx6qx3qqjl7ypl51mcfwq22abi850kq7l3pznb2z0ljw"
|
||||
},
|
||||
"firefox": {
|
||||
"version": "112.0.1",
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "2.28";
|
||||
version = "2.29";
|
||||
pname = "links2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "${meta.homepage}/download/links-${version}.tar.bz2";
|
||||
sha256 = "sha256-L9VJmxPe5ZRXwTLBZ7hJXEDe2nU4lInGzMtoMZP0VLQ=";
|
||||
sha256 = "sha256-IqqWwLOOGm+PftnXpBZ6R/w3JGCXdZ72BZ7Pj56teZg=";
|
||||
};
|
||||
|
||||
buildInputs = with lib;
|
||||
|
|
|
@ -45,7 +45,7 @@ assert with lib.strings; (
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "palemoon";
|
||||
version = "32.1.0";
|
||||
version = "32.1.1";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "repo.palemoon.org";
|
||||
|
@ -53,7 +53,7 @@ stdenv.mkDerivation rec {
|
|||
repo = "Pale-Moon";
|
||||
rev = "${version}_Release";
|
||||
fetchSubmodules = true;
|
||||
sha256 = "sha256-yfXcHoPdTknryYFV8mBWHvzs68oELqsJjTC/nT4SMB8=";
|
||||
sha256 = "sha256-Z9dBYO5AGDYRLlnEfHUu6thgc2a8OK/tPuRzwp0j9J8=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "arkade";
|
||||
version = "0.9.12";
|
||||
version = "0.9.13";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexellis";
|
||||
repo = "arkade";
|
||||
rev = version;
|
||||
sha256 = "sha256-90X+MRZXjKoXsUvfsUQUZcd90XcOIqyVXBbvEtPynPk=";
|
||||
sha256 = "sha256-j7fqLkVRAH4EN90IQ/9y/uKfFsdXXTW6R/WFRhuKPGQ=";
|
||||
};
|
||||
|
||||
CGO_ENABLED = 0;
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{ lib, buildGoModule, fetchFromGitHub, fetchzip, installShellFiles, stdenv }:
|
||||
|
||||
let
|
||||
version = "0.41.2";
|
||||
sha256 = "0c4in6k6l9kjskcapi6gap9jkbrrfd106z6nbs48afr30cv2wp24";
|
||||
manifestsSha256 = "0kc9s5289s5b1slk2w3sr28yk9hg3lmrpy00mw3im3k6aqgrk9j0";
|
||||
version = "2.0.0-rc.1";
|
||||
sha256 = "0hy8jphb6pd24qifnjgzm2jwz93c5rsk08p8k9kl1fzlz7bivg9g";
|
||||
manifestsSha256 = "0v6skn065hqk0pq5k7c48g68pnpj5har8cfhgbc8xjzg149a22wa";
|
||||
|
||||
manifests = fetchzip {
|
||||
url =
|
||||
|
@ -23,7 +23,7 @@ in buildGoModule rec {
|
|||
inherit sha256;
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-ez4yaFZ5JROdu9boN5wI/XGMqLo8OKW6b0FZsJeFw4w=";
|
||||
vendorSha256 = "sha256-ifzzNEFXq2VzidaxCTdz7VZOCoA0zPcK6uL0CyBNrE4=";
|
||||
|
||||
postUnpack = ''
|
||||
cp -r ${manifests} source/cmd/flux/manifests
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "glooctl";
|
||||
version = "1.13.12";
|
||||
version = "1.13.14";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "solo-io";
|
||||
repo = "gloo";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-JGmt07aXcxbPH772oWTD7YPvLLuxZGy8rdXEN1EgCNc=";
|
||||
hash = "sha256-zqwehcLiBj75+oeNJJXw1ateA1aukCUo+rNxFe59iGc=";
|
||||
};
|
||||
|
||||
subPackages = [ "projects/gloo/cli/cmd" ];
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "istioctl";
|
||||
version = "1.17.1";
|
||||
version = "1.17.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "istio";
|
||||
repo = "istio";
|
||||
rev = version;
|
||||
sha256 = "sha256-6YoznN/wqgmNzBV0ukySwSQvnF4qQeH52uXlEgZTpig=";
|
||||
sha256 = "sha256-YEkvY+Z+zM+9t+vnVk0gXJRTJd0u/Ryk3hYkbSHwP8M=";
|
||||
};
|
||||
vendorHash = "sha256-9A4Du5expdbFKFIrcPTADyRINhiPpsboqsbszg638LY=";
|
||||
vendorHash = "sha256-LMmWhKwuy+HfqkLabTjlTd0f/6DYCGbEzpItQvckE9g=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "kubeshark";
|
||||
version = "39.5";
|
||||
version = "40.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kubeshark";
|
||||
repo = "kubeshark";
|
||||
rev = version;
|
||||
sha256 = "sha256-1SmIL4kA65VlsHw7YUTxklUtXTwMkb12SCpm3Ja24KA=";
|
||||
sha256 = "sha256-Tmk9xbAqEsJ8nffRX6qw3RKKoBbSO2gmVT5Ff4Cn9DA=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-cMX9OYErnnnkvmXgau5xLBSv+wo0VTqgo/rYCBmXYZ4=";
|
||||
vendorHash = "sha256-ckIjmrXkn1AVBQRwM6+wdRwwYHytxKm3rKEe+csORdU=";
|
||||
|
||||
ldflags = let t = "github.com/kubeshark/kubeshark"; in [
|
||||
"-s" "-w"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs_14"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ../../../../development/node-packages/node-env.nix {
|
||||
|
|
|
@ -318,13 +318,13 @@
|
|||
"vendorHash": null
|
||||
},
|
||||
"dns": {
|
||||
"hash": "sha256-Bzj1rLTzWJuqKEq5mz0UAbYMWMp4JoRhedfC2lORocE=",
|
||||
"hash": "sha256-feMN0Fpq8ct3l0u1Y8Zjgee4iC+e90CwAZmk5VQj2So=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/dns",
|
||||
"owner": "hashicorp",
|
||||
"repo": "terraform-provider-dns",
|
||||
"rev": "v3.3.1",
|
||||
"rev": "v3.3.2",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-wx8BXlobu86Nk9D8o5loKhbO14ANI+shFQ2i7jswKgE="
|
||||
"vendorHash": "sha256-SvyeMKuAJ4vu++7Fx0hutx3vQvgf1sh1PFSLPRqJPjw="
|
||||
},
|
||||
"dnsimple": {
|
||||
"hash": "sha256-I5TUhq8OZqcLQs/jr8LB22Uc9s5M/WH9LRzV8EsgRnc=",
|
||||
|
@ -363,11 +363,11 @@
|
|||
"vendorHash": "sha256-rJev48aS0nd8DRWmUN4i0LgDYvfjdfoO67N6AiWeg+k="
|
||||
},
|
||||
"exoscale": {
|
||||
"hash": "sha256-XbuVvVOv8k7T/7smr73+lvhFMxKtJkaLN3WgvTWIkrA=",
|
||||
"hash": "sha256-u/2ePkENpx8Q7WcmtNxXR4GIsr2TnIHyOA8CnzTFTnk=",
|
||||
"homepage": "https://registry.terraform.io/providers/exoscale/exoscale",
|
||||
"owner": "exoscale",
|
||||
"repo": "terraform-provider-exoscale",
|
||||
"rev": "v0.46.0",
|
||||
"rev": "v0.47.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": null
|
||||
},
|
||||
|
@ -437,22 +437,22 @@
|
|||
"vendorHash": "sha256-SLFpH7isx4OM2X9bzWYYD4VlejlgckBovOxthg47OOQ="
|
||||
},
|
||||
"google": {
|
||||
"hash": "sha256-rF68NnqyEY4BWl+oLOxfTaQw5zEGs6Ue/L9DwzsJ46M=",
|
||||
"hash": "sha256-92abTfGWNFQMf8YjOxgKEncdqEdbfAt+3BU0fQaSnGk=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/google",
|
||||
"owner": "hashicorp",
|
||||
"proxyVendor": true,
|
||||
"repo": "terraform-provider-google",
|
||||
"rev": "v4.62.1",
|
||||
"rev": "v4.63.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-Xm1P6P2tMLqjV9QFX6D7koBPzg4umTH6jCQesyt0A/A="
|
||||
},
|
||||
"google-beta": {
|
||||
"hash": "sha256-/wcNrCMaXjameyE3o09N+bPjL8r627BJy1vYy1u2iAI=",
|
||||
"hash": "sha256-OyaMoySQ7qd8fsxMcetZCUVvxi6nWwVJusNV61DASck=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/google-beta",
|
||||
"owner": "hashicorp",
|
||||
"proxyVendor": true,
|
||||
"repo": "terraform-provider-google-beta",
|
||||
"rev": "v4.62.1",
|
||||
"rev": "v4.63.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-Xm1P6P2tMLqjV9QFX6D7koBPzg4umTH6jCQesyt0A/A="
|
||||
},
|
||||
|
@ -1089,13 +1089,13 @@
|
|||
"vendorHash": "sha256-6UxBnQiogcizff5Rv4eadOeiG5JaXQphUWlfnqELvAI="
|
||||
},
|
||||
"talos": {
|
||||
"hash": "sha256-/Ml+Vsh50U5CoVdnls69iTPoSPpgAtOpO2hWlcmbyKw=",
|
||||
"hash": "sha256-bYDFtng6kASmBtQN+iewVOh6HPD57GDUuusiQSVfuBs=",
|
||||
"homepage": "https://registry.terraform.io/providers/siderolabs/talos",
|
||||
"owner": "siderolabs",
|
||||
"repo": "terraform-provider-talos",
|
||||
"rev": "v0.1.2",
|
||||
"rev": "v0.2.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-GkmUKSnqkabwGCl22/90529BWb0oJaIJHYHlS/h3KNY="
|
||||
"vendorHash": "sha256-GNSKSlaFBj2P+z40U+0uwPSOuQBy+9vOVFfPe8p0A24="
|
||||
},
|
||||
"tencentcloud": {
|
||||
"hash": "sha256-kIsH+kp+fnYsZatEJOH51lUdQs9cq/8FtpXHZIRzSM0=",
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "dnscontrol";
|
||||
version = "3.31.1";
|
||||
version = "3.31.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "StackExchange";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-T8fErChbQbarvE3/Zds1482m1hfD9Qa3esYvqjzNN3c=";
|
||||
sha256 = "sha256-vKfbL2a/5rTVsG0rDs/D0t5eXDNWlbwURI2FYzGu9lY=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-BE/UnJw5elHYmyB+quN89ZkrlMcTjaVN0T2+h8cpPS8=";
|
||||
|
|
|
@ -25,7 +25,7 @@ let
|
|||
src = fetchFromGitHub {
|
||||
owner = "deltachat";
|
||||
repo = "deltachat-core-rust";
|
||||
rev = version;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-bvXZtgFZx94Sw9Tst620HAhi9kmG8PjtWnghdw2ZF84=";
|
||||
};
|
||||
cargoDeps = rustPlatform.importCargoLock {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
let
|
||||
versions = if stdenv.isLinux then {
|
||||
stable = "0.0.26";
|
||||
ptb = "0.0.41";
|
||||
ptb = "0.0.42";
|
||||
canary = "0.0.151";
|
||||
} else {
|
||||
stable = "0.0.273";
|
||||
|
@ -18,7 +18,7 @@ let
|
|||
};
|
||||
ptb = fetchurl {
|
||||
url = "https://dl-ptb.discordapp.net/apps/linux/${version}/discord-ptb-${version}.tar.gz";
|
||||
sha256 = "AhiZXgkXG/lroG7XAgcvJ7r5PSvzMFhamsxB1cXJOak=";
|
||||
sha256 = "ZAMyAqyFEBJeTUqQzr5wK+BOFGURqhoHL8w2hJvL0vI=";
|
||||
};
|
||||
canary = fetchurl {
|
||||
url = "https://dl-canary.discordapp.net/apps/linux/${version}/discord-canary-${version}.tar.gz";
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
, qrencode
|
||||
, qtmultimedia
|
||||
, qtnetworkauth
|
||||
, qtpositioning
|
||||
, qtsvg
|
||||
, qtwebengine
|
||||
, qtwebchannel
|
||||
|
@ -64,14 +65,14 @@ let
|
|||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "jami";
|
||||
version = "20230313.0";
|
||||
version = "20230323.0";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "git.jami.net";
|
||||
owner = "savoirfairelinux";
|
||||
repo = "jami-client-qt";
|
||||
rev = "stable/${version}";
|
||||
hash = "sha256-3kZ4nn6x1xsXWybyuaY9W07tEM6LFvLL4QtDRPRmob4=";
|
||||
hash = "sha256-X8iIT8UtI2Vq0Ne5e2ahSPN4g7QLZGnq3SZV/NY+1pY=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
@ -169,6 +170,7 @@ stdenv.mkDerivation rec {
|
|||
qtnetworkauth
|
||||
qtdeclarative
|
||||
qtmultimedia
|
||||
qtpositioning
|
||||
qtsvg
|
||||
qtwebchannel
|
||||
] ++ lib.optionals withWebengine [
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs_14"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ./node-env.nix {
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
postInstall = ''
|
||||
mkdir "$out/bin"
|
||||
echo '#!/bin/sh' >> "$out/bin/matrix-recorder"
|
||||
echo "'${pkgs.nodejs-14_x}/bin/node'" \
|
||||
echo "'${pkgs.nodejs_14}/bin/node'" \
|
||||
"'$out/lib/node_modules/matrix-recorder/matrix-recorder.js'" \
|
||||
'"$@"' >> "$out/bin/matrix-recorder"
|
||||
echo '#!/bin/sh' >> "$out/bin/matrix-recorder-to-html"
|
||||
echo 'cd "$1"' >> "$out/bin/matrix-recorder-to-html"
|
||||
echo "test -d templates/ || ln -sfT '$out/lib/node_modules/matrix-recorder/templates' templates" >> "$out/bin/matrix-recorder-to-html"
|
||||
echo "'${pkgs.nodejs-14_x}/bin/node'" \
|
||||
echo "'${pkgs.nodejs_14}/bin/node'" \
|
||||
"'$out/lib/node_modules/matrix-recorder/recorder-to-html.js'" \
|
||||
'.' >> "$out/bin/matrix-recorder-to-html"
|
||||
chmod a+x "$out/bin/matrix-recorder"
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "signal-cli";
|
||||
version = "0.11.8";
|
||||
version = "0.11.9.1";
|
||||
|
||||
# Building from source would be preferred, but is much more involved.
|
||||
src = fetchurl {
|
||||
url = "https://github.com/AsamK/signal-cli/releases/download/v${version}/signal-cli-${version}-Linux.tar.gz";
|
||||
hash = "sha256-lpCPPYkT+q9oYR32rHUGTJI4TmTvy01ttpJxeTSGxVo=";
|
||||
hash = "sha256-LhTv3ycJXr2vt0vyXfCd1ABro4q7CfBma63Zd1osBhA=";
|
||||
};
|
||||
|
||||
buildInputs = lib.optionals stdenv.isLinux [ libmatthew_java dbus dbus_java ];
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
(if stdenv.isDarwin then darwin.apple_sdk_11_0.clang14Stdenv else stdenv).mkDerivation rec {
|
||||
pname = "signalbackup-tools";
|
||||
version = "20230421-1";
|
||||
version = "20230424-1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bepaald";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
hash = "sha256-ZQFoajkD7vvz74TXVT7I4D0Qjknt5YxfHYpGi3i01Ns=";
|
||||
hash = "sha256-G3cAXpHixRVp+FOwyWS+3uuKGp5+7AGLE/1TlghAlFA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -73,7 +73,7 @@ let
|
|||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "telegram-desktop";
|
||||
version = "4.8.0";
|
||||
version = "4.8.1";
|
||||
# Note: Update via pkgs/applications/networking/instant-messengers/telegram/tdesktop/update.py
|
||||
|
||||
src = fetchFromGitHub {
|
||||
|
@ -81,7 +81,7 @@ stdenv.mkDerivation rec {
|
|||
repo = "tdesktop";
|
||||
rev = "v${version}";
|
||||
fetchSubmodules = true;
|
||||
sha256 = "1ari4kdjd99klrla0rn4cjjc54d6glf17s0q881f67vh2v5zdwf0";
|
||||
sha256 = "0mxxfh70dffkrq76nky3pwrk10s1q4ahxx2ddb58dz8igq6pl4zi";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
let
|
||||
pname = "localsend";
|
||||
version = "1.8.0";
|
||||
version = "1.9.0";
|
||||
|
||||
srcs = {
|
||||
x86_64-linux = fetchurl {
|
||||
url = "https://github.com/localsend/localsend/releases/download/v${version}/LocalSend-${version}.AppImage";
|
||||
hash = "sha256-Setxw0urfJCiHI+Ms+Igroi1CLCgB0H5BsV6RkxyBME=";
|
||||
hash = "sha256-i5/haQHsw3BAOFGsHO41oiop1JgMISTr1Dw0tAeYupU=";
|
||||
};
|
||||
x86_64-darwin = fetchurl {
|
||||
url = "https://github.com/localsend/localsend/releases/download/v${version}/LocalSend-${version}.dmg";
|
||||
hash = "sha256-uVZ/ULhr8CiV/wL9Yaw6q2IYAHNqld606ADKab/EVlU=";
|
||||
hash = "sha256-Ibojcg5To288c+v6IKMOjuLz970osiKJU7/K0VnIs8k=";
|
||||
};
|
||||
};
|
||||
src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
||||
|
@ -21,7 +21,7 @@ let
|
|||
linux = appimageTools.wrapType2 rec {
|
||||
inherit pname version src meta;
|
||||
|
||||
extraPkgs = p: [ p.libepoxy ];
|
||||
extraPkgs = p: [ p.ayatana-ido p.libayatana-appindicator p.libayatana-indicator p.libdbusmenu p.libepoxy ];
|
||||
|
||||
extraInstallCommands = ''
|
||||
mv $out/bin/${pname}-${version} $out/bin/${pname}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ pkgs, nodejs-16_x, stdenv, lib, nixosTests }:
|
||||
{ pkgs, nodejs_16, stdenv, lib, nixosTests }:
|
||||
|
||||
let
|
||||
nodePackages = import ./node-composition.nix {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-16_x"}:
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs_16"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ./node-env.nix {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ lib, stdenv, fetchurl, libxcrypt, ... }:
|
||||
{ lib, stdenv, fetchurl, autoPatchelfHook, libxcrypt-legacy }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "resilio-sync";
|
||||
|
@ -24,11 +24,17 @@ stdenv.mkDerivation rec {
|
|||
dontStrip = true; # Don't strip, otherwise patching the rpaths breaks
|
||||
sourceRoot = ".";
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoPatchelfHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
stdenv.cc.libc
|
||||
libxcrypt-legacy
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
install -D rslsync "$out/bin/rslsync"
|
||||
patchelf \
|
||||
--interpreter "$(< $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ${lib.makeLibraryPath [ stdenv.cc.libc libxcrypt ]} "$out/bin/rslsync"
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
|
|
|
@ -7,16 +7,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "seaweedfs";
|
||||
version = "3.46";
|
||||
version = "3.47";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "seaweedfs";
|
||||
repo = "seaweedfs";
|
||||
rev = version;
|
||||
hash = "sha256-ur4GAgGyqbot3Z8GsJLAj6WUJJ0C7slubemJL021gLM=";
|
||||
hash = "sha256-0RDzTS/bjcXeYBWqRq/oWwI0kEmxYkT6oqCBYRi3dnQ=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-9DH/mkISdJCacpB8Nt9DA9fyHqOEdH1GpFZ6TuRQgAQ=";
|
||||
vendorHash = "sha256-oXf+aZxf0jBiOqYzD9mTjYND0LjjQeHIZXIrqcEuyYk=";
|
||||
|
||||
subPackages = [ "weed" ];
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
assert withQt -> qt5 != null;
|
||||
|
||||
let
|
||||
version = "4.0.4";
|
||||
version = "4.0.5";
|
||||
variant = if withQt then "qt" else "cli";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
|
@ -61,7 +61,7 @@ stdenv.mkDerivation {
|
|||
repo = "wireshark";
|
||||
owner = "wireshark";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-x7McplQVdLczTov+u9eqmT1Ons22KqRsCN65pUuwYGw=";
|
||||
hash = "sha256-9U0V2oLVyzq+3HxvOuD8Uzj1tjoMtYBws43fn5RfGhQ=";
|
||||
};
|
||||
|
||||
cmakeFlags = [
|
||||
|
|
|
@ -4,13 +4,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "celestia";
|
||||
version = "1.6.2.2";
|
||||
version = "1.6.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "CelestiaProject";
|
||||
repo = "Celestia";
|
||||
rev = version;
|
||||
sha256 = "1s9fgxh6i3x1sy75y5wcidi2mjrf5xj71dd4n6rg0hkps441sgsp";
|
||||
sha256 = "sha256-iBlrP9Yr/l3tzR1PpRf8C87WfrL6mZDwDtWyd2yJ7Dc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config autoreconfHook ];
|
||||
|
|
|
@ -18,7 +18,20 @@ stdenv.mkDerivation rec {
|
|||
# We use nixpkgs versions of these libraries
|
||||
rm -r third-party
|
||||
sed -i '/^LIBS/d' system.mk/*
|
||||
sed -i 's|^LIBRARIES.*$|LIBRARIES = -lbz2 -lz -ljansson|' */*/*/*/Makefile
|
||||
sed -i 's|^LIBRARIES.*$|LIBRARIES = -lbz2 -lz -ljansson|' */*/*/*/Makefile*
|
||||
|
||||
# `make support` installs above libraries
|
||||
substituteInPlace system.mk/* \
|
||||
--replace ": support" ":"
|
||||
|
||||
# Variable name is different in this makefile
|
||||
substituteInPlace applications/bed/sort-bed/src/Makefile.darwin \
|
||||
--replace "DIST_DIR" "BINDIR"
|
||||
|
||||
# `mkdir -p $BINDIR` is missing
|
||||
substituteInPlace applications/bed/sort-bed/src/Makefile.darwin \
|
||||
--replace 'mkdir -p ''${OBJ_DIR}' 'mkdir -p ''${OBJ_DIR} ''${BINDIR}'
|
||||
|
||||
substituteInPlace applications/bed/starch/src/Makefile --replace '$(LIBRARIES)' ""
|
||||
|
||||
# Function name is different in nixpkgs provided libraries
|
||||
|
@ -27,7 +40,7 @@ stdenv.mkDerivation rec {
|
|||
done
|
||||
|
||||
# Don't force static
|
||||
for f in */*/*/*/Makefile ; do
|
||||
for f in */*/*/*/Makefile* ; do
|
||||
substituteInPlace $f --replace '-static' ""
|
||||
done
|
||||
'';
|
||||
|
@ -46,6 +59,5 @@ stdenv.mkDerivation rec {
|
|||
license = licenses.gpl2Only;
|
||||
maintainers = with maintainers; [ jbedo ];
|
||||
platforms = platforms.x86_64;
|
||||
broken = stdenv.isDarwin;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "workcraft";
|
||||
version = "3.3.9";
|
||||
version = "3.4.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/workcraft/workcraft/releases/download/v${version}/workcraft-v${version}-linux.tar.gz";
|
||||
sha256 = "sha256-Z3QtOGyOjmiM+qfB0FO4UDg8O99Ru/Qy2WNoBpXd1So=";
|
||||
sha256 = "sha256-iqHdyyZX3AcBAjPTpZAiJi0IHhEDWBtKp0e2LAdWGsQ=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
|
|
@ -1,16 +1,23 @@
|
|||
{ stdenv, lib, fetchurl, util-linux, makeWrapper
|
||||
, enableReadline ? true, readline, ncurses }:
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, makeWrapper
|
||||
, ncurses
|
||||
, readline
|
||||
, util-linux
|
||||
, enableReadline ? true
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "calc";
|
||||
version = "2.14.1.5";
|
||||
|
||||
src = fetchurl {
|
||||
urls = [
|
||||
"https://github.com/lcn2/calc/releases/download/v${version}/${pname}-${version}.tar.bz2"
|
||||
"http://www.isthe.com/chongo/src/calc/${pname}-${version}.tar.bz2"
|
||||
"https://github.com/lcn2/calc/releases/download/v${finalAttrs.version}/calc-${finalAttrs.version}.tar.bz2"
|
||||
"http://www.isthe.com/chongo/src/calc/calc-${finalAttrs.version}.tar.bz2"
|
||||
];
|
||||
sha256 = "sha256-bPacYnEJBdQsIP+Z8D/ODskyEcvhgAy3ra4wasYMo6A=";
|
||||
hash = "sha256-bPacYnEJBdQsIP+Z8D/ODskyEcvhgAy3ra4wasYMo6A=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
@ -19,9 +26,17 @@ stdenv.mkDerivation rec {
|
|||
--replace '-install_name ''${LIBDIR}/libcustcalc''${LIB_EXT_VERSION}' '-install_name ''${T}''${LIBDIR}/libcustcalc''${LIB_EXT_VERSION}'
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
buildInputs = [ util-linux ]
|
||||
++ lib.optionals enableReadline [ readline ncurses ];
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
util-linux
|
||||
]
|
||||
++ lib.optionals enableReadline [
|
||||
ncurses
|
||||
readline
|
||||
];
|
||||
|
||||
makeFlags = [
|
||||
"T=$(out)"
|
||||
|
@ -34,18 +49,22 @@ stdenv.mkDerivation rec {
|
|||
|
||||
# Handle LDFLAGS defaults in calc
|
||||
"DEFAULT_LIB_INSTALL_PATH=$(out)/lib"
|
||||
] ++ lib.optionals enableReadline [
|
||||
]
|
||||
++ lib.optionals enableReadline [
|
||||
"READLINE_LIB=-lreadline"
|
||||
"USE_READLINE=-DUSE_READLINE"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "C-style arbitrary precision calculator";
|
||||
meta = {
|
||||
homepage = "http://www.isthe.com/chongo/tech/comp/calc/";
|
||||
description = "C-style arbitrary precision calculator";
|
||||
changelog = "https://github.com/lcn2/calc/blob/v${finalAttrs.version}/CHANGES";
|
||||
# The licensing situation depends on readline (see section 3 of the LGPL)
|
||||
# If linked against readline then GPLv2 otherwise LGPLv2.1
|
||||
license = with licenses; if enableReadline then gpl2Only else lgpl21Only;
|
||||
maintainers = with maintainers; [ matthewbauer ];
|
||||
platforms = platforms.all;
|
||||
license = if enableReadline
|
||||
then lib.licenses.gpl2Only
|
||||
else lib.licenses.lgpl21Only;
|
||||
maintainers = with lib.maintainers; [ matthewbauer ];
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
}
|
||||
})
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
{ lib, stdenv, fetchFromGitHub, cmake, git, gfortran, mpi, blas, liblapack, pkg-config, libGL, libGLU, opencascade, libsForQt5, vtk_8_withQt5}:
|
||||
{ lib, stdenv, fetchFromGitHub, cmake, git, gfortran, mpi, blas, liblapack, pkg-config, libGL, libGLU, opencascade, libsForQt5, tbb, vtkWithQt5 }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "elmerfem";
|
||||
version = "9.0";
|
||||
version = "unstable-2023-02-03";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "elmercsc";
|
||||
repo = "elmerfem";
|
||||
rev = "release-${version}";
|
||||
sha256 = "VK7jvu4s5d7k0c39XqY9dEzg/vXtX5Yr/09VcuZVQ9A=";
|
||||
repo = pname;
|
||||
rev = "39c8784b6e4543a6bf560b5d597e0eec1eb06343";
|
||||
hash = "sha256-yyxgFvlS+I4PouDL6eD4ZrXuONTDejCSYKq2AwQ0Iug=";
|
||||
};
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
|
@ -29,19 +29,14 @@ stdenv.mkDerivation rec {
|
|||
libGL
|
||||
libGLU
|
||||
opencascade
|
||||
vtk_8_withQt5
|
||||
tbb
|
||||
vtkWithQt5
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
patchShebangs ./
|
||||
'';
|
||||
|
||||
patches = [
|
||||
./patches/0001-fix-import-of-QPainterPath.patch
|
||||
./patches/0002-fem-rename-loopvars-to-avoid-redefinition.patch
|
||||
./patches/0003-ignore-qwt_compat.patch
|
||||
];
|
||||
|
||||
storepath = placeholder "out";
|
||||
|
||||
cmakeFlags = [
|
||||
|
@ -58,7 +53,7 @@ stdenv.mkDerivation rec {
|
|||
];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://elmerfem.org/";
|
||||
homepage = "https://elmerfem.org";
|
||||
description = "A finite element software for multiphysical problems";
|
||||
platforms = platforms.unix;
|
||||
maintainers = with maintainers; [ wulfsta broke ];
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
From 87885de957aa3f891fe963503c94685675c24f49 Mon Sep 17 00:00:00 2001
|
||||
From: grindhold <grindhold@gmx.net>
|
||||
Date: Wed, 27 Apr 2022 19:16:42 +0200
|
||||
Subject: [PATCH] fix import of QPainterPath
|
||||
|
||||
---
|
||||
ElmerGUI/Application/twod/renderarea.cpp | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/ElmerGUI/Application/twod/renderarea.cpp b/ElmerGUI/Application/twod/renderarea.cpp
|
||||
index 4c2515c5..65128ea9 100644
|
||||
--- a/ElmerGUI/Application/twod/renderarea.cpp
|
||||
+++ b/ElmerGUI/Application/twod/renderarea.cpp
|
||||
@@ -38,6 +38,7 @@
|
||||
* *
|
||||
*****************************************************************************/
|
||||
#include <QPainter>
|
||||
+#include <QPainterPath>
|
||||
#include <QMouseEvent>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
--
|
||||
2.33.3
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
From 06634e5fd46a27dca11b87d4a38e9ead561de3d5 Mon Sep 17 00:00:00 2001
|
||||
From: grindhold <grindhold@gmx.net>
|
||||
Date: Thu, 28 Apr 2022 15:47:07 +0200
|
||||
Subject: [PATCH] fem: rename loopvars to avoid redefinition
|
||||
|
||||
---
|
||||
fem/src/modules/DCRComplexSolve.F90 | 28 ++++++++++++++--------------
|
||||
1 file changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/fem/src/modules/DCRComplexSolve.F90 b/fem/src/modules/DCRComplexSolve.F90
|
||||
index 469214ee..268591fd 100644
|
||||
--- a/fem/src/modules/DCRComplexSolve.F90
|
||||
+++ b/fem/src/modules/DCRComplexSolve.F90
|
||||
@@ -502,14 +502,14 @@ CONTAINS
|
||||
|
||||
IF ( SIZE(Hwrk,1) == 1 ) THEN
|
||||
|
||||
- DO i=1,MIN(3,SIZE(Hwrk,2))
|
||||
- Tensor( i,1:n ) = Hwrk( 1,1,1:n )
|
||||
+ DO k=1,MIN(3,SIZE(Hwrk,2))
|
||||
+ Tensor( k,1:n ) = Hwrk( 1,1,1:n )
|
||||
END DO
|
||||
|
||||
ELSE
|
||||
|
||||
- DO i=1,MIN(3,SIZE(Hwrk,1))
|
||||
- Tensor( i,1:n ) = Hwrk( i,1,1:n )
|
||||
+ DO k=1,MIN(3,SIZE(Hwrk,1))
|
||||
+ Tensor( k,1:n ) = Hwrk( k,1,1:n )
|
||||
END DO
|
||||
|
||||
END IF
|
||||
@@ -1391,21 +1391,21 @@ contains
|
||||
|
||||
IF ( SIZE(Hwrk,1) == 1 ) THEN
|
||||
|
||||
- DO i=1,MIN(3,SIZE(Hwrk,2))
|
||||
- Tensor( i,i,1:n ) = Hwrk( 1,1,1:n )
|
||||
+ DO k=1,MIN(3,SIZE(Hwrk,2))
|
||||
+ Tensor( k,k,1:n ) = Hwrk( 1,1,1:n )
|
||||
END DO
|
||||
|
||||
ELSE IF ( SIZE(Hwrk,2) == 1 ) THEN
|
||||
|
||||
- DO i=1,MIN(3,SIZE(Hwrk,1))
|
||||
- Tensor(i,i,1:n) = Hwrk(i,1,1:n)
|
||||
+ DO k=1,MIN(3,SIZE(Hwrk,1))
|
||||
+ Tensor(k,k,1:n) = Hwrk(k,1,1:n)
|
||||
END DO
|
||||
|
||||
ELSE
|
||||
|
||||
- DO i=1,MIN(3,SIZE(Hwrk,1))
|
||||
+ DO k=1,MIN(3,SIZE(Hwrk,1))
|
||||
DO j=1,MIN(3,SIZE(Hwrk,2))
|
||||
- Tensor( i,j,1:n ) = Hwrk(i,j,1:n)
|
||||
+ Tensor( k,j,1:n ) = Hwrk(k,j,1:n)
|
||||
END DO
|
||||
END DO
|
||||
|
||||
@@ -1443,14 +1443,14 @@ contains
|
||||
|
||||
IF ( SIZE(Hwrk,1) == 1 ) THEN
|
||||
|
||||
- DO i=1,MIN(3,SIZE(Hwrk,2))
|
||||
- Tensor( i,1:n ) = Hwrk( 1,1,1:n )
|
||||
+ DO k=1,MIN(3,SIZE(Hwrk,2))
|
||||
+ Tensor( k,1:n ) = Hwrk( 1,1,1:n )
|
||||
END DO
|
||||
|
||||
ELSE
|
||||
|
||||
- DO i=1,MIN(3,SIZE(Hwrk,1))
|
||||
- Tensor( i,1:n ) = Hwrk( i,1,1:n )
|
||||
+ DO k=1,MIN(3,SIZE(Hwrk,1))
|
||||
+ Tensor( k,1:n ) = Hwrk( k,1,1:n )
|
||||
END DO
|
||||
|
||||
END IF
|
||||
--
|
||||
2.33.3
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
From 26601fec36a4978e805aad40e6d0cbf268c653d2 Mon Sep 17 00:00:00 2001
|
||||
From: grindhold <grindhold@gmx.net>
|
||||
Date: Thu, 28 Apr 2022 17:13:06 +0200
|
||||
Subject: [PATCH] ignore qwt_compat
|
||||
|
||||
---
|
||||
ElmerGUI/Application/src/convergenceview.h | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/ElmerGUI/Application/src/convergenceview.h b/ElmerGUI/Application/src/convergenceview.h
|
||||
index 377b644b..64250149 100755
|
||||
--- a/ElmerGUI/Application/src/convergenceview.h
|
||||
+++ b/ElmerGUI/Application/src/convergenceview.h
|
||||
@@ -52,7 +52,7 @@
|
||||
#include <qwt_plot_grid.h>
|
||||
#include <qwt_legend.h>
|
||||
/*#include <qwt_data.h> <-- deprecated in Qwt6, using qwt_compat.h instead*/
|
||||
-#include <qwt_compat.h>
|
||||
+/*#include <qwt_compat.h>*/
|
||||
#include <qwt_text.h>
|
||||
#include <qwt_scale_engine.h>
|
||||
|
||||
@@ -76,8 +76,8 @@ public:
|
||||
|
||||
private:
|
||||
int d_count;
|
||||
- QwtArray<double> d_x;
|
||||
- QwtArray<double> d_y;
|
||||
+ QVector<double> d_x;
|
||||
+ QVector<double> d_y;
|
||||
};
|
||||
|
||||
class Curve
|
||||
--
|
||||
2.33.3
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{pkgs ? import <nixpkgs> {
|
||||
inherit system;
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-14_x"}:
|
||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs_14"}:
|
||||
|
||||
let
|
||||
nodeEnv = import ./node-env.nix {
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
{ lib, stdenv, fetchFromGitHub, installShellFiles, python3, git }:
|
||||
{ lib, stdenv, fetchFromGitHub, installShellFiles, python3, git, git-annex }:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "datalad";
|
||||
version = "0.16.5";
|
||||
version = "0.18.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "datalad";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
hash = "sha256-F5UFW0/XqntrHclpj3TqoAwuHJbiiv5a7/4MnFoJ1dE=";
|
||||
hash = "sha256-vqO37o5NxQk+gHfvhM1I2ea9/q9ZaLWkDEyPYJKEPcs";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ installShellFiles git ];
|
||||
|
@ -24,6 +24,9 @@ python3.pkgs.buildPythonApplication rec {
|
|||
patool
|
||||
tqdm
|
||||
annexremote
|
||||
looseversion
|
||||
setuptools
|
||||
git-annex
|
||||
|
||||
# downloaders-extra
|
||||
# requests-ftp # not in nixpkgs yet
|
||||
|
@ -66,11 +69,14 @@ python3.pkgs.buildPythonApplication rec {
|
|||
installShellCompletion --cmd datalad \
|
||||
--bash <($out/bin/datalad shell-completion) \
|
||||
--zsh <($out/bin/datalad shell-completion)
|
||||
wrapProgram $out/bin/datalad --prefix PYTHONPATH : "$PYTHONPATH"
|
||||
'';
|
||||
|
||||
# no tests
|
||||
doCheck = false;
|
||||
|
||||
pythonImportsCheck = [ "datalad" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Keep code, data, containers under control with git and git-annex";
|
||||
homepage = "https://www.datalad.org";
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "gh";
|
||||
version = "2.27.0";
|
||||
version = "2.28.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cli";
|
||||
repo = "cli";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-WjKHV/GfoPFRTKUJy7ht1H6zbt+EqJk6e9ysjaAkelw=";
|
||||
hash = "sha256-FceyGNQwA6SFg97FtX4ATlevpLzG/FPVSoKBznWIfC8=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-+8/cA0UxyVu7nyLhHYBWmn8Vs0O/EYepqTAOVU4gwt4=";
|
||||
vendorHash = "sha256-iTPdOolvWINUSSYiPZAwn5ZF44x/x1tIWnKUHAn8ITA=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "git-subrepo";
|
||||
version = "0.4.5";
|
||||
version = "0.4.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ingydotnet";
|
||||
repo = "git-subrepo";
|
||||
rev = version;
|
||||
sha256 = "sha256-ZU5yYaiear5AjlBqtzabmMJNUa2ypeJKW3sQPIcyskM=";
|
||||
sha256 = "sha256-83N0Ek6DawUrOc6s2Utzi8776bX4UTGS/a/OffkV44Y=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
buildKodiAddon rec {
|
||||
pname = "arteplussept";
|
||||
namespace = "plugin.video.arteplussept";
|
||||
version = "1.1.8";
|
||||
version = "1.1.9";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip";
|
||||
hash = "sha256-1f+oEHEhSsDMXH7WssSVjjuDjK3UNyMiNhaw7mh/xjI=";
|
||||
hash = "sha256-B4IIYwWrQ5U+aPl9nzAN3HWaQjHX1G+hxpicBgBAwiA=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
|
186
pkgs/build-support/dart/fetch-dart-deps/default.nix
Normal file
186
pkgs/build-support/dart/fetch-dart-deps/default.nix
Normal file
|
@ -0,0 +1,186 @@
|
|||
{ stdenvNoCC
|
||||
, lib
|
||||
, makeSetupHook
|
||||
, dart
|
||||
, git
|
||||
, cacert
|
||||
, jq
|
||||
}:
|
||||
|
||||
{
|
||||
# The output hash of the dependencies for this project.
|
||||
vendorHash ? ""
|
||||
# Commands to run once before using Dart or pub.
|
||||
, sdkSetupScript ? ""
|
||||
# Commands to run to populate the pub cache.
|
||||
, pubGetScript ? "dart pub get"
|
||||
# A path to a pubspec.lock file to use instead of the one in the source directory.
|
||||
, pubspecLockFile ? null
|
||||
# Arguments used in the derivation that builds the Dart package.
|
||||
# Passing these is recommended to ensure that the same steps are made to prepare the sources in both this
|
||||
# derivation and the one that builds the Dart package.
|
||||
, buildDrvArgs ? { }
|
||||
, ...
|
||||
}@args:
|
||||
|
||||
# This is a fixed-output derivation and setup hook that can be used to fetch dependencies for Dart projects.
|
||||
# It is designed to be placed in the nativeBuildInputs of a derivation that builds a Dart package.
|
||||
# Providing the buildDrvArgs argument is highly recommended.
|
||||
let
|
||||
buildDrvInheritArgNames = [
|
||||
"name"
|
||||
"pname"
|
||||
"version"
|
||||
"src"
|
||||
"sourceRoot"
|
||||
"setSourceRoot"
|
||||
"preUnpack"
|
||||
"unpackPhase"
|
||||
"unpackCmd"
|
||||
"postUnpack"
|
||||
"prePatch"
|
||||
"patchPhase"
|
||||
"patches"
|
||||
"patchFlags"
|
||||
"postPatch"
|
||||
];
|
||||
|
||||
buildDrvInheritArgs = builtins.foldl'
|
||||
(attrs: arg:
|
||||
if buildDrvArgs ? ${arg}
|
||||
then attrs // { ${arg} = buildDrvArgs.${arg}; }
|
||||
else attrs)
|
||||
{ }
|
||||
buildDrvInheritArgNames;
|
||||
|
||||
drvArgs = buildDrvInheritArgs // (removeAttrs args [ "buildDrvArgs" ]);
|
||||
name = (if drvArgs ? name then drvArgs.name else "${drvArgs.pname}-${drvArgs.version}");
|
||||
|
||||
deps =
|
||||
stdenvNoCC.mkDerivation ({
|
||||
name = "${name}-dart-deps";
|
||||
|
||||
nativeBuildInputs = [
|
||||
dart
|
||||
git
|
||||
];
|
||||
|
||||
# avoid pub phase
|
||||
dontBuild = true;
|
||||
|
||||
configurePhase = ''
|
||||
# Configure the package cache
|
||||
export PUB_CACHE="$out/cache/.pub-cache"
|
||||
mkdir -p "$PUB_CACHE"
|
||||
|
||||
${sdkSetupScript}
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
_pub_get() {
|
||||
${pubGetScript}
|
||||
}
|
||||
|
||||
# so we can use lock, diff yaml
|
||||
mkdir -p "$out/pubspec"
|
||||
cp "pubspec.yaml" "$out/pubspec"
|
||||
${lib.optionalString (pubspecLockFile != null) "install -m644 ${pubspecLockFile} pubspec.lock"}
|
||||
if ! cp "pubspec.lock" "$out/pubspec"; then
|
||||
echo 1>&2 -e '\nThe pubspec.lock file is missing. This is a requirement for reproducible builds.' \
|
||||
'\nThe following steps should be taken to fix this issue:' \
|
||||
'\n 1. If you are building an application, contact the developer(s).' \
|
||||
'\n The pubspec.lock file should be provided with the source code.' \
|
||||
'\n https://dart.dev/guides/libraries/private-files#pubspeclock' \
|
||||
'\n 2. An attempt to generate and print a compressed pubspec.lock file will be made now.' \
|
||||
'\n It is compressed with gzip and base64 encoded.' \
|
||||
'\n Paste it to a file and extract it with `base64 -d pubspec.lock.in | gzip -d > pubspec.lock`.' \
|
||||
'\n Provide the path to the pubspec.lock file in the pubspecLockFile argument.' \
|
||||
'\n This must be updated whenever the application is updated.' \
|
||||
'\n'
|
||||
_pub_get
|
||||
echo ""
|
||||
gzip --to-stdout --best pubspec.lock | base64 1>&2
|
||||
echo 1>&2 -e '\nA gzipped pubspec.lock file has been printed. Please see the informational message above.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
_pub_get
|
||||
|
||||
# nuke nondeterminism
|
||||
|
||||
# Remove Git directories in the Git package cache - these are rarely used by Pub,
|
||||
# which instead maintains a corresponsing mirror and clones cached packages through it.
|
||||
#
|
||||
# An exception is made to keep .git/pub-packages files, which are important.
|
||||
# https://github.com/dart-lang/pub/blob/c890afa1d65b340fa59308172029680c2f8b0fc6/lib/src/source/git.dart#L621
|
||||
if [ -d "$PUB_CACHE"/git ]; then
|
||||
find "$PUB_CACHE"/git -maxdepth 4 -path "*/.git/*" ! -name "pub-packages" -prune -exec rm -rf {} +
|
||||
fi
|
||||
|
||||
# Remove continuously updated package metadata caches
|
||||
rm -rf "$PUB_CACHE"/hosted/*/.cache # Not pinned by pubspec.lock
|
||||
rm -rf "$PUB_CACHE"/git/cache/*/* # Recreate this on the other end. See: https://github.com/dart-lang/pub/blob/c890afa1d65b340fa59308172029680c2f8b0fc6/lib/src/source/git.dart#L531
|
||||
|
||||
# Miscelaneous transient package cache files
|
||||
rm -f "$PUB_CACHE"/README.md # May change with different Dart versions
|
||||
rm -rf "$PUB_CACHE"/_temp # https://github.com/dart-lang/pub/blob/c890afa1d65b340fa59308172029680c2f8b0fc6/lib/src/system_cache.dart#L131
|
||||
rm -rf "$PUB_CACHE"/log # https://github.com/dart-lang/pub/blob/c890afa1d65b340fa59308172029680c2f8b0fc6/lib/src/command.dart#L348
|
||||
'';
|
||||
|
||||
GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
|
||||
impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [
|
||||
"GIT_PROXY_COMMAND"
|
||||
"NIX_GIT_SSL_CAINFO"
|
||||
"SOCKS_SERVER"
|
||||
];
|
||||
|
||||
# Patching shebangs introduces input references to this fixed-output derivation.
|
||||
# This triggers a bug in Nix, causing the output path to change unexpectedly.
|
||||
# https://github.com/NixOS/nix/issues/6660
|
||||
dontPatchShebangs = true;
|
||||
|
||||
# The following operations are not generally useful for this derivation.
|
||||
# If a package does contain some native components used at build time,
|
||||
# please file an issue.
|
||||
dontStrip = true;
|
||||
dontMoveSbin = true;
|
||||
dontPatchELF = true;
|
||||
|
||||
outputHashAlgo = "sha256";
|
||||
outputHashMode = "recursive";
|
||||
outputHash = if vendorHash != "" then vendorHash else lib.fakeSha256;
|
||||
} // (removeAttrs drvArgs [ "name" "pname" ]));
|
||||
|
||||
depsListDrv = stdenvNoCC.mkDerivation ({
|
||||
name = "${name}-dart-deps-list.json";
|
||||
nativeBuildInputs = [ hook dart jq ];
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
dart pub get --offline
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
dart pub deps --json | jq .packages > $out
|
||||
runHook postBuild
|
||||
'';
|
||||
} // buildDrvInheritArgs);
|
||||
|
||||
hook = (makeSetupHook {
|
||||
# The setup hook should not be part of the fixed-output derivation.
|
||||
# Updates to the hook script should not change vendor hashes, and it won't
|
||||
# work at all anyway due to https://github.com/NixOS/nix/issues/6660.
|
||||
name = "${name}-dart-deps-setup-hook";
|
||||
substitutions = { inherit deps; };
|
||||
propagatedBuildInputs = [ dart git ];
|
||||
passthru = {
|
||||
files = deps.outPath;
|
||||
depsListFile = depsListDrv.outPath;
|
||||
};
|
||||
}) ./setup-hook.sh;
|
||||
in
|
||||
hook
|
41
pkgs/build-support/dart/fetch-dart-deps/setup-hook.sh
Normal file
41
pkgs/build-support/dart/fetch-dart-deps/setup-hook.sh
Normal file
|
@ -0,0 +1,41 @@
|
|||
preConfigureHooks+=(_setupPubCache)
|
||||
|
||||
_setupPubCache() {
|
||||
deps="@deps@"
|
||||
|
||||
# Configure the package cache.
|
||||
export PUB_CACHE="$(mktemp -d)"
|
||||
mkdir -p "$PUB_CACHE"
|
||||
|
||||
if [ -d "$deps/cache/.pub-cache/git" ]; then
|
||||
# Link the Git package cache.
|
||||
mkdir -p "$PUB_CACHE/git"
|
||||
ln -s "$deps/cache/.pub-cache/git"/* "$PUB_CACHE/git"
|
||||
|
||||
# Recreate the internal Git cache subdirectory.
|
||||
# See: https://github.com/dart-lang/pub/blob/c890afa1d65b340fa59308172029680c2f8b0fc6/lib/src/source/git.dart#L339)
|
||||
# Blank repositories are created instead of attempting to match the cache mirrors to checkouts.
|
||||
# This is not an issue, as pub does not need the mirrors in the Flutter build process.
|
||||
rm "$PUB_CACHE/git/cache" && mkdir "$PUB_CACHE/git/cache"
|
||||
for mirror in $(ls -A "$deps/cache/.pub-cache/git/cache"); do
|
||||
git --git-dir="$PUB_CACHE/git/cache/$mirror" init --bare --quiet
|
||||
done
|
||||
fi
|
||||
|
||||
# Link the remaining package cache directories.
|
||||
# At this point, any subdirectories that must be writable must have been taken care of.
|
||||
for file in $(comm -23 <(ls -A "$deps/cache/.pub-cache") <(ls -A "$PUB_CACHE")); do
|
||||
ln -s "$deps/cache/.pub-cache/$file" "$PUB_CACHE/$file"
|
||||
done
|
||||
|
||||
# ensure we're using a lockfile for the right package version
|
||||
if [ ! -e pubspec.lock ]; then
|
||||
cp -v "$deps/pubspec/pubspec.lock" .
|
||||
# Sometimes the pubspec.lock will get opened in write mode, even when offline.
|
||||
chmod u+w pubspec.lock
|
||||
elif ! { diff -u pubspec.lock "$deps/pubspec/pubspec.lock" && diff -u pubspec.yaml "$deps/pubspec/pubspec.yaml"; }; then
|
||||
echo 1>&2 -e 'The pubspec.lock or pubspec.yaml of the project derivation differs from the one in the dependency derivation.' \
|
||||
'\nYou most likely forgot to update the vendorHash while updating the sources.'
|
||||
exit 1
|
||||
fi
|
||||
}
|
|
@ -1,234 +1,72 @@
|
|||
{ flutter
|
||||
, lib
|
||||
, llvmPackages_13
|
||||
, cmake
|
||||
, ninja
|
||||
, pkg-config
|
||||
, wrapGAppsHook
|
||||
, autoPatchelfHook
|
||||
, util-linux
|
||||
, libselinux
|
||||
, libsepol
|
||||
, libthai
|
||||
, libdatrie
|
||||
, libxkbcommon
|
||||
, at-spi2-core
|
||||
, libsecret
|
||||
, jsoncpp
|
||||
, xorg
|
||||
, dbus
|
||||
, gtk3
|
||||
, glib
|
||||
, pcre
|
||||
, libepoxy
|
||||
{ lib
|
||||
, callPackage
|
||||
, stdenvNoCC
|
||||
, makeWrapper
|
||||
, llvmPackages_13
|
||||
, cacert
|
||||
, git
|
||||
, dart
|
||||
, nukeReferences
|
||||
, bash
|
||||
, curl
|
||||
, unzip
|
||||
, which
|
||||
, xz
|
||||
, flutter
|
||||
, jq
|
||||
}:
|
||||
|
||||
# absolutely no mac support for now
|
||||
|
||||
args:
|
||||
{ pubGetScript ? "flutter pub get"
|
||||
, flutterBuildFlags ? [ ]
|
||||
, runtimeDependencies ? [ ]
|
||||
, customPackageOverrides ? { }
|
||||
, autoDepsList ? false
|
||||
, depsListFile ? null
|
||||
, vendorHash
|
||||
, pubspecLockFile ? null
|
||||
, nativeBuildInputs ? [ ]
|
||||
, preUnpack ? ""
|
||||
, postFixup ? ""
|
||||
, ...
|
||||
}@args:
|
||||
let
|
||||
pl = n: "##FLUTTER_${n}_PLACEHOLDER_MARKER##";
|
||||
placeholder_deps = pl "DEPS";
|
||||
placeholder_flutter = pl "FLUTTER";
|
||||
fetchAttrs = [ "src" "sourceRoot" "setSourceRoot" "unpackPhase" "patches" ];
|
||||
getAttrsOrNull = names: attrs: lib.genAttrs names (name: if attrs ? ${name} then attrs.${name} else null);
|
||||
flutterDeps = [
|
||||
# flutter deps
|
||||
flutter.unwrapped
|
||||
bash
|
||||
curl
|
||||
flutter.dart
|
||||
git
|
||||
unzip
|
||||
which
|
||||
xz
|
||||
];
|
||||
self =
|
||||
(self: llvmPackages_13.stdenv.mkDerivation (args // {
|
||||
deps = stdenvNoCC.mkDerivation (lib.recursiveUpdate (getAttrsOrNull fetchAttrs args) {
|
||||
name = "${self.name}-deps-flutter-v${flutter.unwrapped.version}-${stdenvNoCC.targetPlatform.system}.tar.gz";
|
||||
|
||||
nativeBuildInputs = flutterDeps ++ [
|
||||
nukeReferences
|
||||
];
|
||||
|
||||
# avoid pub phase
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
. ${../fetchgit/deterministic-git}
|
||||
|
||||
TMP=$(mktemp -d)
|
||||
|
||||
export HOME="$TMP"
|
||||
export PUB_CACHE=''${PUB_CACHE:-"$HOME/.pub-cache"}
|
||||
export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
|
||||
|
||||
flutterSetupScript = ''
|
||||
export HOME="$NIX_BUILD_TOP"
|
||||
flutter config --no-analytics &>/dev/null # mute first-run
|
||||
flutter config --enable-linux-desktop
|
||||
flutter packages get
|
||||
flutter build linux || true # so it downloads tools
|
||||
${lib.optionalString (args ? flutterExtraFetchCommands) args.flutterExtraFetchCommands}
|
||||
|
||||
RES="$TMP"
|
||||
|
||||
mkdir -p "$RES/f"
|
||||
|
||||
# so we can use lock, diff yaml
|
||||
cp "pubspec.yaml" "$RES"
|
||||
cp "pubspec.lock" "$RES"
|
||||
[[ -e .packages ]] && mv .packages "$RES/f"
|
||||
mv .dart_tool .flutter-plugins .flutter-plugins-dependencies "$RES/f"
|
||||
|
||||
# replace paths with placeholders
|
||||
find "$RES" -type f -exec sed -i \
|
||||
-e s,$TMP,${placeholder_deps},g \
|
||||
-e s,${flutter.unwrapped},${placeholder_flutter},g \
|
||||
{} +
|
||||
|
||||
remove_line_matching() {
|
||||
replace_line_matching "$1" "$2" ""
|
||||
}
|
||||
|
||||
replace_line_matching() {
|
||||
sed "s|.*$2.*|$3|g" -r -i "$1"
|
||||
}
|
||||
|
||||
# nuke nondeterminism
|
||||
|
||||
# clientId is random
|
||||
remove_line_matching "$RES/.flutter" clientId
|
||||
|
||||
# deterministic git repos
|
||||
find "$RES" -iname .git -type d | while read -r repoGit; do
|
||||
make_deterministic_repo "$(dirname "$repoGit")"
|
||||
done
|
||||
|
||||
# dart _fetchedAt, etc
|
||||
DART_DATE=$(date --date="@$SOURCE_DATE_EPOCH" -In | sed "s|,|.|g" | sed "s|+.*||g")
|
||||
find "$RES/.pub-cache" -iname "*.json" -exec sed -r 's|.*_fetchedAt.*| "_fetchedAt": "'"$DART_DATE"'",|g' -i {} +
|
||||
replace_line_matching "$RES/f/.dart_tool/package_config.json" '"generated"' '"generated": "'"$DART_DATE"'",'
|
||||
replace_line_matching "$RES/f/.flutter-plugins-dependencies" '"date_created"' '"date_created": "'"$DART_DATE"'",'
|
||||
[[ -e "$RES/f/.packages" ]] && remove_line_matching "$RES/f/.packages" "Generated by pub"
|
||||
|
||||
# nuke refs
|
||||
find "$RES" -type f -exec nuke-refs {} +
|
||||
|
||||
# Build a reproducible tar, per instructions at https://reproducible-builds.org/docs/archives/
|
||||
tar --owner=0 --group=0 --numeric-owner --format=gnu \
|
||||
--sort=name --mtime="@$SOURCE_DATE_EPOCH" \
|
||||
-czf "$out" -C "$RES" .
|
||||
flutter config --enable-linux-desktop >/dev/null
|
||||
'';
|
||||
|
||||
GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
deps = callPackage ../dart/fetch-dart-deps { dart = flutter; } {
|
||||
sdkSetupScript = flutterSetupScript;
|
||||
inherit pubGetScript vendorHash pubspecLockFile;
|
||||
buildDrvArgs = args;
|
||||
};
|
||||
|
||||
impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [
|
||||
"GIT_PROXY_COMMAND" "NIX_GIT_SSL_CAINFO" "SOCKS_SERVER"
|
||||
];
|
||||
baseDerivation = llvmPackages_13.stdenv.mkDerivation (finalAttrs: args // {
|
||||
inherit flutterBuildFlags runtimeDependencies;
|
||||
|
||||
# unnecesarry
|
||||
dontFixup = true;
|
||||
outputs = [ "out" "debug" ];
|
||||
|
||||
outputHashAlgo = if self ? vendorHash then null else "sha256";
|
||||
# outputHashMode = "recursive";
|
||||
outputHash = if self ? vendorHash then
|
||||
self.vendorHash
|
||||
else if self ? vendorSha256 then
|
||||
self.vendorSha256
|
||||
else
|
||||
lib.fakeSha256;
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
deps
|
||||
flutter
|
||||
jq
|
||||
] ++ nativeBuildInputs;
|
||||
|
||||
});
|
||||
preUnpack = ''
|
||||
${lib.optionalString (!autoDepsList) ''
|
||||
if ! { [ '${lib.boolToString (depsListFile != null)}' = 'true' ] ${lib.optionalString (depsListFile != null) "&& cmp -s <(jq -Sc . '${depsListFile}') <(jq -Sc . '${finalAttrs.passthru.depsListFile}')"}; }; then
|
||||
echo 1>&2 -e '\nThe dependency list file was either not given or differs from the expected result.' \
|
||||
'\nPlease choose one of the following solutions:' \
|
||||
'\n - Duplicate the following file and pass it to the depsListFile argument.' \
|
||||
'\n ${finalAttrs.passthru.depsListFile}' \
|
||||
'\n - Set autoDepsList to true (not supported by Hydra or permitted in Nixpkgs)'.
|
||||
exit 1
|
||||
fi
|
||||
''}
|
||||
|
||||
nativeBuildInputs = flutterDeps ++ [
|
||||
# flutter dev tools
|
||||
cmake
|
||||
ninja
|
||||
pkg-config
|
||||
wrapGAppsHook
|
||||
# flutter likes dynamic linking
|
||||
autoPatchelfHook
|
||||
] ++ lib.optionals (args ? nativeBuildInputs) args.nativeBuildInputs;
|
||||
|
||||
buildInputs = [
|
||||
# cmake deps
|
||||
gtk3
|
||||
glib
|
||||
pcre
|
||||
util-linux
|
||||
# also required by cmake, not sure if really needed or dep of all packages
|
||||
libselinux
|
||||
libsepol
|
||||
libthai
|
||||
libdatrie
|
||||
xorg.libXdmcp
|
||||
xorg.libXtst
|
||||
libxkbcommon
|
||||
dbus
|
||||
at-spi2-core
|
||||
libsecret
|
||||
jsoncpp
|
||||
# build deps
|
||||
xorg.libX11
|
||||
# directly required by build
|
||||
libepoxy
|
||||
] ++ lib.optionals (args ? buildInputs) args.buildInputs;
|
||||
|
||||
# TODO: do we need this?
|
||||
NIX_LDFLAGS = "-rpath ${lib.makeLibraryPath self.buildInputs}";
|
||||
env.NIX_CFLAGS_COMPILE = "-I${xorg.libX11}/include";
|
||||
LD_LIBRARY_PATH = lib.makeLibraryPath self.buildInputs;
|
||||
${preUnpack}
|
||||
'';
|
||||
|
||||
configurePhase = ''
|
||||
runHook preConfigure
|
||||
|
||||
# for some reason fluffychat build breaks without this - seems file gets overriden by some tool
|
||||
cp pubspec.yaml pubspec-backup
|
||||
|
||||
# we get this from $depsFolder so disabled for now, but we might need it again once deps are fetched properly
|
||||
# flutter config --no-analytics >/dev/null 2>/dev/null # mute first-run
|
||||
# flutter config --enable-linux-desktop
|
||||
|
||||
# extract deps
|
||||
depsFolder=$(mktemp -d)
|
||||
tar xzf "$deps" -C "$depsFolder"
|
||||
|
||||
# after extracting update paths to point to real paths
|
||||
find "$depsFolder" -type f -exec sed -i \
|
||||
-e s,${placeholder_deps},$depsFolder,g \
|
||||
-e s,${placeholder_flutter},${flutter.unwrapped},g \
|
||||
{} +
|
||||
|
||||
# ensure we're using a lockfile for the right package version
|
||||
if [ -e pubspec.lock ]; then
|
||||
# FIXME: currently this is broken. in theory this should not break, but flutter has it's own way of doing things.
|
||||
# diff -u pubspec.lock $depsFolder/pubspec.lock
|
||||
true
|
||||
else
|
||||
cp -v "$depsFolder/pubspec.lock" .
|
||||
fi
|
||||
diff -u pubspec.yaml $depsFolder/pubspec.yaml
|
||||
|
||||
mv -v $(find $depsFolder/f -type f) .
|
||||
|
||||
# prepare
|
||||
export HOME=$depsFolder
|
||||
export PUB_CACHE=''${PUB_CACHE:-"$HOME/.pub-cache"}
|
||||
export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1
|
||||
|
||||
# binaries need to be patched
|
||||
autoPatchelf -- "$depsFolder"
|
||||
${flutterSetupScript}
|
||||
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
@ -236,12 +74,10 @@ let
|
|||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
# for some reason fluffychat build breaks without this - seems file gets overriden by some tool
|
||||
mv pubspec-backup pubspec.yaml
|
||||
mkdir -p build/flutter_assets/fonts
|
||||
|
||||
flutter packages get --offline -v
|
||||
flutter build linux --release -v
|
||||
flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") finalAttrs.flutterBuildFlags)}
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
@ -262,9 +98,6 @@ let
|
|||
ln -s $f $out/bin/$(basename $f)
|
||||
done
|
||||
|
||||
# this confuses autopatchelf hook otherwise
|
||||
rm -rf "$depsFolder"
|
||||
|
||||
# make *.so executable
|
||||
find $out/app -iname "*.so" -type f -exec chmod +x {} +
|
||||
|
||||
|
@ -279,6 +112,48 @@ let
|
|||
|
||||
runHook postInstall
|
||||
'';
|
||||
})) self;
|
||||
|
||||
postFixup = ''
|
||||
# Add runtime library dependencies to the LD_LIBRARY_PATH.
|
||||
# For some reason, the RUNPATH of the executable is not used to load dynamic libraries in dart:ffi with DynamicLibrary.open().
|
||||
#
|
||||
# This could alternatively be fixed with patchelf --add-needed, but this would cause all the libraries to be opened immediately,
|
||||
# which is not what application authors expect.
|
||||
for f in "$out"/bin/*; do
|
||||
wrapProgram "$f" \
|
||||
--suffix LD_LIBRARY_PATH : '${lib.makeLibraryPath finalAttrs.runtimeDependencies}'
|
||||
done
|
||||
|
||||
${postFixup}
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit (deps) depsListFile;
|
||||
};
|
||||
});
|
||||
|
||||
packageOverrideRepository = (callPackage ../../development/compilers/flutter/package-overrides { }) // customPackageOverrides;
|
||||
productPackages = builtins.filter (package: package.kind != "dev")
|
||||
(if autoDepsList
|
||||
then builtins.fromJSON (builtins.readFile deps.depsListFile)
|
||||
else
|
||||
if depsListFile == null
|
||||
then [ ]
|
||||
else builtins.fromJSON (builtins.readFile depsListFile));
|
||||
in
|
||||
self
|
||||
builtins.foldl'
|
||||
(prev: package:
|
||||
if packageOverrideRepository ? ${package.name}
|
||||
then
|
||||
prev.overrideAttrs
|
||||
(packageOverrideRepository.${package.name} {
|
||||
inherit (package)
|
||||
name
|
||||
version
|
||||
kind
|
||||
source
|
||||
dependencies;
|
||||
})
|
||||
else prev)
|
||||
baseDerivation
|
||||
productPackages
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
# The output hash of the dependencies for this project.
|
||||
# Can be calculated in advance with prefetch-npm-deps.
|
||||
, npmDepsHash ? ""
|
||||
# Whether to force the usage of Git dependencies that have install scripts, but not a lockfile.
|
||||
# Use with care.
|
||||
, forceGitDeps ? false
|
||||
# Whether to make the cache writable prior to installing dependencies.
|
||||
# Don't set this unless npm tries to write to the cache directory, as it can slow down the build.
|
||||
, makeCacheWritable ? false
|
||||
|
@ -32,7 +35,7 @@
|
|||
|
||||
let
|
||||
npmDeps = fetchNpmDeps {
|
||||
inherit src srcs sourceRoot prePatch patches postPatch;
|
||||
inherit forceGitDeps src srcs sourceRoot prePatch patches postPatch;
|
||||
name = "${name}-npm-deps";
|
||||
hash = npmDepsHash;
|
||||
};
|
||||
|
|
|
@ -36,8 +36,8 @@
|
|||
'';
|
||||
};
|
||||
|
||||
makeTest = { name, src, hash }: testers.invalidateFetcherByDrvHash fetchNpmDeps {
|
||||
inherit name hash;
|
||||
makeTest = { name, src, hash, forceGitDeps ? false }: testers.invalidateFetcherByDrvHash fetchNpmDeps {
|
||||
inherit name hash forceGitDeps;
|
||||
|
||||
src = makeTestSrc { inherit name src; };
|
||||
};
|
||||
|
@ -108,6 +108,8 @@
|
|||
};
|
||||
|
||||
hash = "sha256-+KA8/orSBJ4EhuSyQO8IKSxsN/FAsYU3lOzq+awuxNQ=";
|
||||
|
||||
forceGitDeps = true;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -121,6 +123,7 @@
|
|||
fetchNpmDeps =
|
||||
{ name ? "npm-deps"
|
||||
, hash ? ""
|
||||
, forceGitDeps ? false
|
||||
, ...
|
||||
} @ args:
|
||||
let
|
||||
|
@ -131,6 +134,8 @@
|
|||
outputHash = "";
|
||||
outputHashAlgo = "sha256";
|
||||
};
|
||||
|
||||
forceGitDeps_ = lib.optionalAttrs forceGitDeps { FORCE_GIT_DEPS = true; };
|
||||
in
|
||||
stdenvNoCC.mkDerivation (args // {
|
||||
inherit name;
|
||||
|
@ -161,5 +166,5 @@
|
|||
dontInstall = true;
|
||||
|
||||
outputHashMode = "recursive";
|
||||
} // hash_);
|
||||
} // hash_ // forceGitDeps_);
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ impl Cache {
|
|||
&mut p,
|
||||
&hash
|
||||
.into_iter()
|
||||
.map(|x| format!("{:02x}", x))
|
||||
.map(|n| format!("{n:02x}"))
|
||||
.collect::<String>(),
|
||||
);
|
||||
|
||||
|
|
|
@ -1,250 +1,18 @@
|
|||
#![warn(clippy::pedantic)]
|
||||
|
||||
use crate::cacache::Cache;
|
||||
use anyhow::{anyhow, Context};
|
||||
use anyhow::anyhow;
|
||||
use rayon::prelude::*;
|
||||
use serde::Deserialize;
|
||||
use serde_json::{Map, Value};
|
||||
use std::{
|
||||
collections::{HashMap, HashSet},
|
||||
env, fmt, fs, io,
|
||||
env, fs,
|
||||
path::Path,
|
||||
process::{self, Command, Stdio},
|
||||
process::{self, Command},
|
||||
};
|
||||
use tempfile::tempdir;
|
||||
use url::Url;
|
||||
|
||||
mod cacache;
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct PackageLock {
|
||||
#[serde(rename = "lockfileVersion")]
|
||||
version: u8,
|
||||
dependencies: Option<HashMap<String, OldPackage>>,
|
||||
packages: Option<HashMap<String, Package>>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct OldPackage {
|
||||
version: UrlOrString,
|
||||
#[serde(default)]
|
||||
bundled: bool,
|
||||
resolved: Option<UrlOrString>,
|
||||
integrity: Option<String>,
|
||||
dependencies: Option<HashMap<String, OldPackage>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, PartialEq, Eq)]
|
||||
struct Package {
|
||||
resolved: Option<UrlOrString>,
|
||||
integrity: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, PartialEq, Eq)]
|
||||
#[serde(untagged)]
|
||||
enum UrlOrString {
|
||||
Url(Url),
|
||||
String(String),
|
||||
}
|
||||
|
||||
impl fmt::Display for UrlOrString {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
UrlOrString::Url(url) => url.fmt(f),
|
||||
UrlOrString::String(string) => string.fmt(f),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::case_sensitive_file_extension_comparisons)]
|
||||
fn to_new_packages(
|
||||
old_packages: HashMap<String, OldPackage>,
|
||||
initial_url: &Url,
|
||||
) -> anyhow::Result<HashMap<String, Package>> {
|
||||
let mut new = HashMap::new();
|
||||
|
||||
for (name, mut package) in old_packages {
|
||||
// In some cases, a bundled dependency happens to have the same version as a non-bundled one, causing
|
||||
// the bundled one without a URL to override the entry for the non-bundled instance, which prevents the
|
||||
// dependency from being downloaded.
|
||||
if package.bundled {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let UrlOrString::Url(v) = &package.version {
|
||||
for (scheme, host) in [
|
||||
("github", "github.com"),
|
||||
("bitbucket", "bitbucket.org"),
|
||||
("gitlab", "gitlab.com"),
|
||||
] {
|
||||
if v.scheme() == scheme {
|
||||
package.version = {
|
||||
let mut new_url = initial_url.clone();
|
||||
|
||||
new_url.set_host(Some(host))?;
|
||||
|
||||
if v.path().ends_with(".git") {
|
||||
new_url.set_path(v.path());
|
||||
} else {
|
||||
new_url.set_path(&format!("{}.git", v.path()));
|
||||
}
|
||||
|
||||
new_url.set_fragment(v.fragment());
|
||||
|
||||
UrlOrString::Url(new_url)
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
new.insert(
|
||||
format!("{name}-{}", package.version),
|
||||
Package {
|
||||
resolved: if matches!(package.version, UrlOrString::Url(_)) {
|
||||
Some(package.version)
|
||||
} else {
|
||||
package.resolved
|
||||
},
|
||||
integrity: package.integrity,
|
||||
},
|
||||
);
|
||||
|
||||
if let Some(dependencies) = package.dependencies {
|
||||
new.extend(to_new_packages(dependencies, initial_url)?);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(new)
|
||||
}
|
||||
|
||||
#[allow(clippy::case_sensitive_file_extension_comparisons)]
|
||||
fn get_hosted_git_url(url: &Url) -> Option<Url> {
|
||||
if ["git", "http", "git+ssh", "git+https", "ssh", "https"].contains(&url.scheme()) {
|
||||
let mut s = url.path_segments()?;
|
||||
|
||||
match url.host_str()? {
|
||||
"github.com" => {
|
||||
let user = s.next()?;
|
||||
let mut project = s.next()?;
|
||||
let typ = s.next();
|
||||
let mut commit = s.next();
|
||||
|
||||
if typ.is_none() {
|
||||
commit = url.fragment();
|
||||
} else if typ.is_some() && typ != Some("tree") {
|
||||
return None;
|
||||
}
|
||||
|
||||
if project.ends_with(".git") {
|
||||
project = project.strip_suffix(".git")?;
|
||||
}
|
||||
|
||||
let commit = commit.unwrap();
|
||||
|
||||
Some(
|
||||
Url::parse(&format!(
|
||||
"https://codeload.github.com/{user}/{project}/tar.gz/{commit}"
|
||||
))
|
||||
.ok()?,
|
||||
)
|
||||
}
|
||||
"bitbucket.org" => {
|
||||
let user = s.next()?;
|
||||
let mut project = s.next()?;
|
||||
let aux = s.next();
|
||||
|
||||
if aux == Some("get") {
|
||||
return None;
|
||||
}
|
||||
|
||||
if project.ends_with(".git") {
|
||||
project = project.strip_suffix(".git")?;
|
||||
}
|
||||
|
||||
let commit = url.fragment()?;
|
||||
|
||||
Some(
|
||||
Url::parse(&format!(
|
||||
"https://bitbucket.org/{user}/{project}/get/{commit}.tar.gz"
|
||||
))
|
||||
.ok()?,
|
||||
)
|
||||
}
|
||||
"gitlab.com" => {
|
||||
let path = &url.path()[1..];
|
||||
|
||||
if path.contains("/~/") || path.contains("/archive.tar.gz") {
|
||||
return None;
|
||||
}
|
||||
|
||||
let user = s.next()?;
|
||||
let mut project = s.next()?;
|
||||
|
||||
if project.ends_with(".git") {
|
||||
project = project.strip_suffix(".git")?;
|
||||
}
|
||||
|
||||
let commit = url.fragment()?;
|
||||
|
||||
Some(
|
||||
Url::parse(&format!(
|
||||
"https://gitlab.com/{user}/{project}/repository/archive.tar.gz?ref={commit}"
|
||||
))
|
||||
.ok()?,
|
||||
)
|
||||
}
|
||||
"git.sr.ht" => {
|
||||
let user = s.next()?;
|
||||
let mut project = s.next()?;
|
||||
let aux = s.next();
|
||||
|
||||
if aux == Some("archive") {
|
||||
return None;
|
||||
}
|
||||
|
||||
if project.ends_with(".git") {
|
||||
project = project.strip_suffix(".git")?;
|
||||
}
|
||||
|
||||
let commit = url.fragment()?;
|
||||
|
||||
Some(
|
||||
Url::parse(&format!(
|
||||
"https://git.sr.ht/{user}/{project}/archive/{commit}.tar.gz"
|
||||
))
|
||||
.ok()?,
|
||||
)
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
fn get_ideal_hash(integrity: &str) -> anyhow::Result<&str> {
|
||||
let split: Vec<_> = integrity.split_ascii_whitespace().collect();
|
||||
|
||||
if split.len() == 1 {
|
||||
Ok(split[0])
|
||||
} else {
|
||||
for hash in ["sha512-", "sha1-"] {
|
||||
if let Some(h) = split.iter().find(|s| s.starts_with(hash)) {
|
||||
return Ok(h);
|
||||
}
|
||||
}
|
||||
|
||||
Err(anyhow!("not sure which hash to select out of {split:?}"))
|
||||
}
|
||||
}
|
||||
|
||||
fn get_initial_url() -> anyhow::Result<Url> {
|
||||
Url::parse("git+ssh://git@a.b").context("initial url should be valid")
|
||||
}
|
||||
mod parse;
|
||||
|
||||
/// `fixup_lockfile` removes the `integrity` field from Git dependencies.
|
||||
///
|
||||
|
@ -294,7 +62,6 @@ fn fixup_lockfile(mut lock: Map<String, Value>) -> anyhow::Result<Option<Map<Str
|
|||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_lines)]
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let args = env::args().collect::<Vec<_>>();
|
||||
|
||||
|
@ -319,7 +86,6 @@ fn main() -> anyhow::Result<()> {
|
|||
}
|
||||
|
||||
let lock_content = fs::read_to_string(&args[1])?;
|
||||
let lock: PackageLock = serde_json::from_str(&lock_content)?;
|
||||
|
||||
let out_tempdir;
|
||||
|
||||
|
@ -331,125 +97,24 @@ fn main() -> anyhow::Result<()> {
|
|||
(out_tempdir.path(), true)
|
||||
};
|
||||
|
||||
let agent = ureq::agent();
|
||||
|
||||
eprintln!("lockfile version: {}", lock.version);
|
||||
|
||||
let packages = match lock.version {
|
||||
1 => {
|
||||
let initial_url = get_initial_url()?;
|
||||
|
||||
lock.dependencies
|
||||
.map(|p| to_new_packages(p, &initial_url))
|
||||
.transpose()?
|
||||
}
|
||||
2 | 3 => lock.packages,
|
||||
_ => panic!(
|
||||
"We don't support lockfile version {}, please file an issue.",
|
||||
lock.version
|
||||
),
|
||||
};
|
||||
|
||||
if packages.is_none() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let packages = {
|
||||
let mut seen = HashSet::new();
|
||||
let mut new_packages = HashMap::new();
|
||||
|
||||
for (dep, package) in packages.unwrap().drain() {
|
||||
if let (false, Some(UrlOrString::Url(resolved))) = (dep.is_empty(), &package.resolved) {
|
||||
if !seen.contains(resolved) {
|
||||
seen.insert(resolved.clone());
|
||||
new_packages.insert(dep, package);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
new_packages
|
||||
};
|
||||
let packages = parse::lockfile(&lock_content, env::var("FORCE_GIT_DEPS").is_ok())?;
|
||||
|
||||
let cache = Cache::new(out.join("_cacache"));
|
||||
|
||||
packages
|
||||
.into_par_iter()
|
||||
.try_for_each(|(dep, mut package)| {
|
||||
eprintln!("{dep}");
|
||||
packages.into_par_iter().try_for_each(|package| {
|
||||
eprintln!("{}", package.name);
|
||||
|
||||
let mut resolved = match package.resolved {
|
||||
Some(UrlOrString::Url(url)) => url,
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
let mut hosted = false;
|
||||
|
||||
if let Some(hosted_git_url) = get_hosted_git_url(&resolved) {
|
||||
resolved = hosted_git_url;
|
||||
package.integrity = None;
|
||||
hosted = true;
|
||||
}
|
||||
|
||||
let mut data = Vec::new();
|
||||
|
||||
let mut body = agent.get(resolved.as_str()).call()?.into_reader();
|
||||
|
||||
if hosted {
|
||||
let workdir = tempdir()?;
|
||||
|
||||
let tar_path = workdir.path().join("package");
|
||||
|
||||
fs::create_dir(&tar_path)?;
|
||||
|
||||
let mut cmd = Command::new("tar")
|
||||
.args(["--extract", "--gzip", "--strip-components=1", "-C"])
|
||||
.arg(&tar_path)
|
||||
.stdin(Stdio::piped())
|
||||
.spawn()?;
|
||||
|
||||
io::copy(&mut body, &mut cmd.stdin.take().unwrap())?;
|
||||
|
||||
let exit = cmd.wait()?;
|
||||
|
||||
if !exit.success() {
|
||||
return Err(anyhow!(
|
||||
"failed to extract tarball for {dep}: tar exited with status code {}",
|
||||
exit.code().unwrap()
|
||||
));
|
||||
}
|
||||
|
||||
data = Command::new("tar")
|
||||
.args([
|
||||
"--sort=name",
|
||||
"--mtime=@0",
|
||||
"--owner=0",
|
||||
"--group=0",
|
||||
"--numeric-owner",
|
||||
"--format=gnu",
|
||||
"-I",
|
||||
"gzip -n -9",
|
||||
"--create",
|
||||
"-C",
|
||||
])
|
||||
.arg(workdir.path())
|
||||
.arg("package")
|
||||
.output()?
|
||||
.stdout;
|
||||
} else {
|
||||
body.read_to_end(&mut data)?;
|
||||
}
|
||||
let tarball = package.tarball()?;
|
||||
let integrity = package.integrity();
|
||||
|
||||
cache
|
||||
.put(
|
||||
format!("make-fetch-happen:request-cache:{resolved}"),
|
||||
resolved,
|
||||
&data,
|
||||
package
|
||||
.integrity
|
||||
.map(|i| Ok::<String, anyhow::Error>(get_ideal_hash(&i)?.to_string()))
|
||||
.transpose()?,
|
||||
format!("make-fetch-happen:request-cache:{}", package.url),
|
||||
package.url,
|
||||
&tarball,
|
||||
integrity,
|
||||
)
|
||||
.map_err(|e| anyhow!("couldn't insert cache entry for {dep}: {e:?}"))?;
|
||||
.map_err(|e| anyhow!("couldn't insert cache entry for {}: {e:?}", package.name))?;
|
||||
|
||||
Ok::<_, anyhow::Error>(())
|
||||
})?;
|
||||
|
@ -465,3 +130,59 @@ fn main() -> anyhow::Result<()> {
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::fixup_lockfile;
|
||||
use serde_json::json;
|
||||
|
||||
#[test]
|
||||
fn lockfile_fixup() -> anyhow::Result<()> {
|
||||
let input = json!({
|
||||
"lockfileVersion": 2,
|
||||
"name": "foo",
|
||||
"packages": {
|
||||
"": {
|
||||
|
||||
},
|
||||
"foo": {
|
||||
"resolved": "https://github.com/NixOS/nixpkgs",
|
||||
"integrity": "aaa"
|
||||
},
|
||||
"bar": {
|
||||
"resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
|
||||
"integrity": "bbb"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let expected = json!({
|
||||
"lockfileVersion": 2,
|
||||
"name": "foo",
|
||||
"packages": {
|
||||
"": {
|
||||
|
||||
},
|
||||
"foo": {
|
||||
"resolved": "https://github.com/NixOS/nixpkgs",
|
||||
"integrity": "aaa"
|
||||
},
|
||||
"bar": {
|
||||
"resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
assert_eq!(
|
||||
fixup_lockfile(input.as_object().unwrap().clone())?,
|
||||
Some(expected.as_object().unwrap().clone())
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
fixup_lockfile(json!({"lockfileVersion": 1}).as_object().unwrap().clone())?,
|
||||
None
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
191
pkgs/build-support/node/fetch-npm-deps/src/parse/lock.rs
Normal file
191
pkgs/build-support/node/fetch-npm-deps/src/parse/lock.rs
Normal file
|
@ -0,0 +1,191 @@
|
|||
use anyhow::{bail, Context};
|
||||
use rayon::slice::ParallelSliceMut;
|
||||
use serde::Deserialize;
|
||||
use std::{collections::HashMap, fmt};
|
||||
use url::Url;
|
||||
|
||||
pub(super) fn packages(content: &str) -> anyhow::Result<Vec<Package>> {
|
||||
let lockfile: Lockfile = serde_json::from_str(content)?;
|
||||
|
||||
let mut packages = match lockfile.version {
|
||||
1 => {
|
||||
let initial_url = get_initial_url()?;
|
||||
|
||||
lockfile
|
||||
.dependencies
|
||||
.map(|p| to_new_packages(p, &initial_url))
|
||||
.transpose()?
|
||||
}
|
||||
2 | 3 => lockfile.packages.map(|pkgs| {
|
||||
pkgs.into_iter()
|
||||
.filter(|(n, p)| !n.is_empty() && matches!(p.resolved, Some(UrlOrString::Url(_))))
|
||||
.map(|(n, p)| Package { name: Some(n), ..p })
|
||||
.collect()
|
||||
}),
|
||||
_ => bail!(
|
||||
"We don't support lockfile version {}, please file an issue.",
|
||||
lockfile.version
|
||||
),
|
||||
}
|
||||
.expect("lockfile should have packages");
|
||||
|
||||
packages.par_sort_by(|x, y| {
|
||||
x.resolved
|
||||
.partial_cmp(&y.resolved)
|
||||
.expect("resolved should be comparable")
|
||||
});
|
||||
|
||||
packages.dedup_by(|x, y| x.resolved == y.resolved);
|
||||
|
||||
Ok(packages)
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct Lockfile {
|
||||
#[serde(rename = "lockfileVersion")]
|
||||
version: u8,
|
||||
dependencies: Option<HashMap<String, OldPackage>>,
|
||||
packages: Option<HashMap<String, Package>>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct OldPackage {
|
||||
version: UrlOrString,
|
||||
#[serde(default)]
|
||||
bundled: bool,
|
||||
resolved: Option<UrlOrString>,
|
||||
integrity: Option<String>,
|
||||
dependencies: Option<HashMap<String, OldPackage>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, PartialEq, Eq)]
|
||||
pub(super) struct Package {
|
||||
#[serde(default)]
|
||||
pub(super) name: Option<String>,
|
||||
pub(super) resolved: Option<UrlOrString>,
|
||||
pub(super) integrity: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
|
||||
#[serde(untagged)]
|
||||
pub(super) enum UrlOrString {
|
||||
Url(Url),
|
||||
String(String),
|
||||
}
|
||||
|
||||
impl fmt::Display for UrlOrString {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
UrlOrString::Url(url) => url.fmt(f),
|
||||
UrlOrString::String(string) => string.fmt(f),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::case_sensitive_file_extension_comparisons)]
|
||||
fn to_new_packages(
|
||||
old_packages: HashMap<String, OldPackage>,
|
||||
initial_url: &Url,
|
||||
) -> anyhow::Result<Vec<Package>> {
|
||||
let mut new = Vec::new();
|
||||
|
||||
for (name, mut package) in old_packages {
|
||||
// In some cases, a bundled dependency happens to have the same version as a non-bundled one, causing
|
||||
// the bundled one without a URL to override the entry for the non-bundled instance, which prevents the
|
||||
// dependency from being downloaded.
|
||||
if package.bundled {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let UrlOrString::Url(v) = &package.version {
|
||||
for (scheme, host) in [
|
||||
("github", "github.com"),
|
||||
("bitbucket", "bitbucket.org"),
|
||||
("gitlab", "gitlab.com"),
|
||||
] {
|
||||
if v.scheme() == scheme {
|
||||
package.version = {
|
||||
let mut new_url = initial_url.clone();
|
||||
|
||||
new_url.set_host(Some(host))?;
|
||||
|
||||
if v.path().ends_with(".git") {
|
||||
new_url.set_path(v.path());
|
||||
} else {
|
||||
new_url.set_path(&format!("{}.git", v.path()));
|
||||
}
|
||||
|
||||
new_url.set_fragment(v.fragment());
|
||||
|
||||
UrlOrString::Url(new_url)
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
new.push(Package {
|
||||
name: Some(name),
|
||||
resolved: if matches!(package.version, UrlOrString::Url(_)) {
|
||||
Some(package.version)
|
||||
} else {
|
||||
package.resolved
|
||||
},
|
||||
integrity: package.integrity,
|
||||
});
|
||||
|
||||
if let Some(dependencies) = package.dependencies {
|
||||
new.append(&mut to_new_packages(dependencies, initial_url)?);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(new)
|
||||
}
|
||||
|
||||
fn get_initial_url() -> anyhow::Result<Url> {
|
||||
Url::parse("git+ssh://git@a.b").context("initial url should be valid")
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::{get_initial_url, to_new_packages, OldPackage, Package, UrlOrString};
|
||||
use std::collections::HashMap;
|
||||
use url::Url;
|
||||
|
||||
#[test]
|
||||
fn git_shorthand_v1() -> anyhow::Result<()> {
|
||||
let old = {
|
||||
let mut o = HashMap::new();
|
||||
o.insert(
|
||||
String::from("sqlite3"),
|
||||
OldPackage {
|
||||
version: UrlOrString::Url(
|
||||
Url::parse(
|
||||
"github:mapbox/node-sqlite3#593c9d498be2510d286349134537e3bf89401c4a",
|
||||
)
|
||||
.unwrap(),
|
||||
),
|
||||
bundled: false,
|
||||
resolved: None,
|
||||
integrity: None,
|
||||
dependencies: None,
|
||||
},
|
||||
);
|
||||
o
|
||||
};
|
||||
|
||||
let initial_url = get_initial_url()?;
|
||||
|
||||
let new = to_new_packages(old, &initial_url)?;
|
||||
|
||||
assert_eq!(new.len(), 1, "new packages map should contain 1 value");
|
||||
assert_eq!(new[0], Package {
|
||||
name: Some(String::from("sqlite3")),
|
||||
resolved: Some(UrlOrString::Url(Url::parse("git+ssh://git@github.com/mapbox/node-sqlite3.git#593c9d498be2510d286349134537e3bf89401c4a").unwrap())),
|
||||
integrity: None
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
370
pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs
Normal file
370
pkgs/build-support/node/fetch-npm-deps/src/parse/mod.rs
Normal file
|
@ -0,0 +1,370 @@
|
|||
use anyhow::{anyhow, bail, Context};
|
||||
use lock::UrlOrString;
|
||||
use rayon::prelude::*;
|
||||
use serde_json::{Map, Value};
|
||||
use std::{
|
||||
fs, io,
|
||||
process::{Command, Stdio},
|
||||
};
|
||||
use tempfile::{tempdir, TempDir};
|
||||
use url::Url;
|
||||
|
||||
mod lock;
|
||||
|
||||
pub fn lockfile(content: &str, force_git_deps: bool) -> anyhow::Result<Vec<Package>> {
|
||||
let mut packages = lock::packages(content)
|
||||
.context("failed to extract packages from lockfile")?
|
||||
.into_par_iter()
|
||||
.map(|p| {
|
||||
let n = p.name.clone().unwrap();
|
||||
|
||||
Package::from_lock(p).with_context(|| format!("failed to parse data for {n}"))
|
||||
})
|
||||
.collect::<anyhow::Result<Vec<_>>>()?;
|
||||
|
||||
let mut new = Vec::new();
|
||||
|
||||
for pkg in packages
|
||||
.iter()
|
||||
.filter(|p| matches!(p.specifics, Specifics::Git { .. }))
|
||||
{
|
||||
let dir = match &pkg.specifics {
|
||||
Specifics::Git { workdir } => workdir,
|
||||
Specifics::Registry { .. } => unimplemented!(),
|
||||
};
|
||||
|
||||
let path = dir.path().join("package");
|
||||
|
||||
let lockfile_contents = fs::read_to_string(path.join("package-lock.json"));
|
||||
|
||||
let package_json_path = path.join("package.json");
|
||||
let mut package_json: Map<String, Value> =
|
||||
serde_json::from_str(&fs::read_to_string(package_json_path)?)?;
|
||||
|
||||
if let Some(scripts) = package_json
|
||||
.get_mut("scripts")
|
||||
.and_then(Value::as_object_mut)
|
||||
{
|
||||
// https://github.com/npm/pacote/blob/272edc1bac06991fc5f95d06342334bbacfbaa4b/lib/git.js#L166-L172
|
||||
for typ in [
|
||||
"postinstall",
|
||||
"build",
|
||||
"preinstall",
|
||||
"install",
|
||||
"prepack",
|
||||
"prepare",
|
||||
] {
|
||||
if scripts.contains_key(typ) && lockfile_contents.is_err() && !force_git_deps {
|
||||
bail!("Git dependency {} contains install scripts, but has no lockfile, which is something that will probably break. Open an issue if you can't feasibly patch this dependency out, and we'll come up with a workaround.\nIf you'd like to attempt to try to use this dependency anyways, set `forceGitDeps = true`.", pkg.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Ok(lockfile_contents) = lockfile_contents {
|
||||
new.append(&mut lockfile(&lockfile_contents, force_git_deps)?);
|
||||
}
|
||||
}
|
||||
|
||||
packages.append(&mut new);
|
||||
|
||||
packages.par_sort_by(|x, y| {
|
||||
x.url
|
||||
.partial_cmp(&y.url)
|
||||
.expect("resolved should be comparable")
|
||||
});
|
||||
|
||||
packages.dedup_by(|x, y| x.url == y.url);
|
||||
|
||||
Ok(packages)
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Package {
|
||||
pub name: String,
|
||||
pub url: Url,
|
||||
specifics: Specifics,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Specifics {
|
||||
Registry { integrity: String },
|
||||
Git { workdir: TempDir },
|
||||
}
|
||||
|
||||
impl Package {
|
||||
fn from_lock(pkg: lock::Package) -> anyhow::Result<Package> {
|
||||
let mut resolved = match pkg
|
||||
.resolved
|
||||
.expect("at this point, packages should have URLs")
|
||||
{
|
||||
UrlOrString::Url(u) => u,
|
||||
UrlOrString::String(_) => panic!("at this point, all packages should have URLs"),
|
||||
};
|
||||
|
||||
let specifics = match get_hosted_git_url(&resolved)? {
|
||||
Some(hosted) => {
|
||||
let mut body = ureq::get(hosted.as_str()).call()?.into_reader();
|
||||
|
||||
let workdir = tempdir()?;
|
||||
|
||||
let tar_path = workdir.path().join("package");
|
||||
|
||||
fs::create_dir(&tar_path)?;
|
||||
|
||||
let mut cmd = Command::new("tar")
|
||||
.args(["--extract", "--gzip", "--strip-components=1", "-C"])
|
||||
.arg(&tar_path)
|
||||
.stdin(Stdio::piped())
|
||||
.spawn()?;
|
||||
|
||||
io::copy(&mut body, &mut cmd.stdin.take().unwrap())?;
|
||||
|
||||
let exit = cmd.wait()?;
|
||||
|
||||
if !exit.success() {
|
||||
bail!(
|
||||
"failed to extract tarball for {}: tar exited with status code {}",
|
||||
pkg.name.unwrap(),
|
||||
exit.code().unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
resolved = hosted;
|
||||
|
||||
Specifics::Git { workdir }
|
||||
}
|
||||
None => Specifics::Registry {
|
||||
integrity: get_ideal_hash(
|
||||
&pkg.integrity
|
||||
.expect("non-git dependencies should have assosciated integrity"),
|
||||
)?
|
||||
.to_string(),
|
||||
},
|
||||
};
|
||||
|
||||
Ok(Package {
|
||||
name: pkg.name.unwrap(),
|
||||
url: resolved,
|
||||
specifics,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn tarball(&self) -> anyhow::Result<Vec<u8>> {
|
||||
match &self.specifics {
|
||||
Specifics::Registry { .. } => {
|
||||
let mut body = Vec::new();
|
||||
|
||||
ureq::get(self.url.as_str())
|
||||
.call()?
|
||||
.into_reader()
|
||||
.read_to_end(&mut body)?;
|
||||
|
||||
Ok(body)
|
||||
}
|
||||
Specifics::Git { workdir } => Ok(Command::new("tar")
|
||||
.args([
|
||||
"--sort=name",
|
||||
"--mtime=@0",
|
||||
"--owner=0",
|
||||
"--group=0",
|
||||
"--numeric-owner",
|
||||
"--format=gnu",
|
||||
"-I",
|
||||
"gzip -n -9",
|
||||
"--create",
|
||||
"-C",
|
||||
])
|
||||
.arg(workdir.path())
|
||||
.arg("package")
|
||||
.output()?
|
||||
.stdout),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn integrity(&self) -> Option<String> {
|
||||
match &self.specifics {
|
||||
Specifics::Registry { integrity } => Some(integrity.clone()),
|
||||
Specifics::Git { .. } => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::case_sensitive_file_extension_comparisons)]
|
||||
fn get_hosted_git_url(url: &Url) -> anyhow::Result<Option<Url>> {
|
||||
if ["git", "git+ssh", "git+https", "ssh"].contains(&url.scheme()) {
|
||||
let mut s = url
|
||||
.path_segments()
|
||||
.ok_or_else(|| anyhow!("bad URL: {url}"))?;
|
||||
|
||||
let mut get_url = || match url.host_str()? {
|
||||
"github.com" => {
|
||||
let user = s.next()?;
|
||||
let mut project = s.next()?;
|
||||
let typ = s.next();
|
||||
let mut commit = s.next();
|
||||
|
||||
if typ.is_none() {
|
||||
commit = url.fragment();
|
||||
} else if typ.is_some() && typ != Some("tree") {
|
||||
return None;
|
||||
}
|
||||
|
||||
if project.ends_with(".git") {
|
||||
project = project.strip_suffix(".git")?;
|
||||
}
|
||||
|
||||
let commit = commit.unwrap();
|
||||
|
||||
Some(
|
||||
Url::parse(&format!(
|
||||
"https://codeload.github.com/{user}/{project}/tar.gz/{commit}"
|
||||
))
|
||||
.ok()?,
|
||||
)
|
||||
}
|
||||
"bitbucket.org" => {
|
||||
let user = s.next()?;
|
||||
let mut project = s.next()?;
|
||||
let aux = s.next();
|
||||
|
||||
if aux == Some("get") {
|
||||
return None;
|
||||
}
|
||||
|
||||
if project.ends_with(".git") {
|
||||
project = project.strip_suffix(".git")?;
|
||||
}
|
||||
|
||||
let commit = url.fragment()?;
|
||||
|
||||
Some(
|
||||
Url::parse(&format!(
|
||||
"https://bitbucket.org/{user}/{project}/get/{commit}.tar.gz"
|
||||
))
|
||||
.ok()?,
|
||||
)
|
||||
}
|
||||
"gitlab.com" => {
|
||||
/* let path = &url.path()[1..];
|
||||
|
||||
if path.contains("/~/") || path.contains("/archive.tar.gz") {
|
||||
return None;
|
||||
}
|
||||
|
||||
let user = s.next()?;
|
||||
let mut project = s.next()?;
|
||||
|
||||
if project.ends_with(".git") {
|
||||
project = project.strip_suffix(".git")?;
|
||||
}
|
||||
|
||||
let commit = url.fragment()?;
|
||||
|
||||
Some(
|
||||
Url::parse(&format!(
|
||||
"https://gitlab.com/{user}/{project}/repository/archive.tar.gz?ref={commit}"
|
||||
))
|
||||
.ok()?,
|
||||
) */
|
||||
|
||||
// lmao: https://github.com/npm/hosted-git-info/pull/109
|
||||
None
|
||||
}
|
||||
"git.sr.ht" => {
|
||||
let user = s.next()?;
|
||||
let mut project = s.next()?;
|
||||
let aux = s.next();
|
||||
|
||||
if aux == Some("archive") {
|
||||
return None;
|
||||
}
|
||||
|
||||
if project.ends_with(".git") {
|
||||
project = project.strip_suffix(".git")?;
|
||||
}
|
||||
|
||||
let commit = url.fragment()?;
|
||||
|
||||
Some(
|
||||
Url::parse(&format!(
|
||||
"https://git.sr.ht/{user}/{project}/archive/{commit}.tar.gz"
|
||||
))
|
||||
.ok()?,
|
||||
)
|
||||
}
|
||||
_ => None,
|
||||
};
|
||||
|
||||
match get_url() {
|
||||
Some(u) => Ok(Some(u)),
|
||||
None => Err(anyhow!("This lockfile either contains a Git dependency with an unsupported host, or a malformed URL in the lockfile: {url}"))
|
||||
}
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
fn get_ideal_hash(integrity: &str) -> anyhow::Result<&str> {
|
||||
let split: Vec<_> = integrity.split_ascii_whitespace().collect();
|
||||
|
||||
if split.len() == 1 {
|
||||
Ok(split[0])
|
||||
} else {
|
||||
for hash in ["sha512-", "sha1-"] {
|
||||
if let Some(h) = split.iter().find(|s| s.starts_with(hash)) {
|
||||
return Ok(h);
|
||||
}
|
||||
}
|
||||
|
||||
Err(anyhow!("not sure which hash to select out of {split:?}"))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::{get_hosted_git_url, get_ideal_hash};
|
||||
use url::Url;
|
||||
|
||||
#[test]
|
||||
fn hosted_git_urls() {
|
||||
for (input, expected) in [
|
||||
(
|
||||
"git+ssh://git@github.com/castlabs/electron-releases.git#fc5f78d046e8d7cdeb66345a2633c383ab41f525",
|
||||
Some("https://codeload.github.com/castlabs/electron-releases/tar.gz/fc5f78d046e8d7cdeb66345a2633c383ab41f525"),
|
||||
),
|
||||
(
|
||||
"git+ssh://bitbucket.org/foo/bar#branch",
|
||||
Some("https://bitbucket.org/foo/bar/get/branch.tar.gz")
|
||||
),
|
||||
(
|
||||
"git+ssh://git.sr.ht/~foo/bar#branch",
|
||||
Some("https://git.sr.ht/~foo/bar/archive/branch.tar.gz")
|
||||
),
|
||||
] {
|
||||
assert_eq!(
|
||||
get_hosted_git_url(&Url::parse(input).unwrap()).unwrap(),
|
||||
expected.map(|u| Url::parse(u).unwrap())
|
||||
);
|
||||
}
|
||||
|
||||
assert!(
|
||||
get_hosted_git_url(&Url::parse("ssh://git@gitlab.com/foo/bar.git#fix/bug").unwrap())
|
||||
.is_err(),
|
||||
"GitLab URLs should be marked as invalid (lol)"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ideal_hashes() {
|
||||
for (input, expected) in [
|
||||
("sha512-foo sha1-bar", Some("sha512-foo")),
|
||||
("sha1-bar md5-foo", Some("sha1-bar")),
|
||||
("sha1-bar", Some("sha1-bar")),
|
||||
("sha512-foo", Some("sha512-foo")),
|
||||
("foo-bar sha1-bar", Some("sha1-bar")),
|
||||
("foo-bar baz-foo", None),
|
||||
] {
|
||||
assert_eq!(get_ideal_hash(input).ok(), expected);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,141 +0,0 @@
|
|||
use super::{
|
||||
fixup_lockfile, get_hosted_git_url, get_ideal_hash, get_initial_url, to_new_packages,
|
||||
OldPackage, Package, UrlOrString,
|
||||
};
|
||||
use serde_json::json;
|
||||
use std::collections::HashMap;
|
||||
use url::Url;
|
||||
|
||||
#[test]
|
||||
fn hosted_git_urls() {
|
||||
for (input, expected) in [
|
||||
(
|
||||
"git+ssh://git@github.com/castlabs/electron-releases.git#fc5f78d046e8d7cdeb66345a2633c383ab41f525",
|
||||
Some("https://codeload.github.com/castlabs/electron-releases/tar.gz/fc5f78d046e8d7cdeb66345a2633c383ab41f525"),
|
||||
),
|
||||
(
|
||||
"https://user@github.com/foo/bar#fix/bug",
|
||||
Some("https://codeload.github.com/foo/bar/tar.gz/fix/bug")
|
||||
),
|
||||
(
|
||||
"https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz",
|
||||
None
|
||||
),
|
||||
(
|
||||
"git+ssh://bitbucket.org/foo/bar#branch",
|
||||
Some("https://bitbucket.org/foo/bar/get/branch.tar.gz")
|
||||
),
|
||||
(
|
||||
"ssh://git@gitlab.com/foo/bar.git#fix/bug",
|
||||
Some("https://gitlab.com/foo/bar/repository/archive.tar.gz?ref=fix/bug")
|
||||
),
|
||||
(
|
||||
"git+ssh://git.sr.ht/~foo/bar#branch",
|
||||
Some("https://git.sr.ht/~foo/bar/archive/branch.tar.gz")
|
||||
),
|
||||
] {
|
||||
assert_eq!(
|
||||
get_hosted_git_url(&Url::parse(input).unwrap()),
|
||||
expected.map(|u| Url::parse(u).unwrap())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ideal_hashes() {
|
||||
for (input, expected) in [
|
||||
("sha512-foo sha1-bar", Some("sha512-foo")),
|
||||
("sha1-bar md5-foo", Some("sha1-bar")),
|
||||
("sha1-bar", Some("sha1-bar")),
|
||||
("sha512-foo", Some("sha512-foo")),
|
||||
("foo-bar sha1-bar", Some("sha1-bar")),
|
||||
("foo-bar baz-foo", None),
|
||||
] {
|
||||
assert_eq!(get_ideal_hash(input).ok(), expected);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn git_shorthand_v1() -> anyhow::Result<()> {
|
||||
let old = {
|
||||
let mut o = HashMap::new();
|
||||
o.insert(
|
||||
String::from("sqlite3"),
|
||||
OldPackage {
|
||||
version: UrlOrString::Url(
|
||||
Url::parse(
|
||||
"github:mapbox/node-sqlite3#593c9d498be2510d286349134537e3bf89401c4a",
|
||||
)
|
||||
.unwrap(),
|
||||
),
|
||||
bundled: false,
|
||||
resolved: None,
|
||||
integrity: None,
|
||||
dependencies: None,
|
||||
},
|
||||
);
|
||||
o
|
||||
};
|
||||
|
||||
let initial_url = get_initial_url()?;
|
||||
|
||||
let new = to_new_packages(old, &initial_url)?;
|
||||
|
||||
assert_eq!(new.len(), 1, "new packages map should contain 1 value");
|
||||
assert_eq!(new.into_values().next().unwrap(), Package {
|
||||
resolved: Some(UrlOrString::Url(Url::parse("git+ssh://git@github.com/mapbox/node-sqlite3.git#593c9d498be2510d286349134537e3bf89401c4a").unwrap())),
|
||||
integrity: None
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lockfile_fixup() -> anyhow::Result<()> {
|
||||
let input = json!({
|
||||
"lockfileVersion": 2,
|
||||
"name": "foo",
|
||||
"packages": {
|
||||
"": {
|
||||
|
||||
},
|
||||
"foo": {
|
||||
"resolved": "https://github.com/NixOS/nixpkgs",
|
||||
"integrity": "aaa"
|
||||
},
|
||||
"bar": {
|
||||
"resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
|
||||
"integrity": "bbb"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let expected = json!({
|
||||
"lockfileVersion": 2,
|
||||
"name": "foo",
|
||||
"packages": {
|
||||
"": {
|
||||
|
||||
},
|
||||
"foo": {
|
||||
"resolved": "https://github.com/NixOS/nixpkgs",
|
||||
"integrity": "aaa"
|
||||
},
|
||||
"bar": {
|
||||
"resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
assert_eq!(
|
||||
fixup_lockfile(input.as_object().unwrap().clone())?,
|
||||
Some(expected.as_object().unwrap().clone())
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
fixup_lockfile(json!({"lockfileVersion": 1}).as_object().unwrap().clone())?,
|
||||
None
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -158,6 +158,15 @@ stdenv.mkDerivation ((removeAttrs args [ "depsExtraArgs" "cargoUpdateHook" "carg
|
|||
|
||||
meta = {
|
||||
# default to Rust's platforms
|
||||
platforms = rustc.meta.platforms;
|
||||
platforms = rustc.meta.platforms ++ [
|
||||
# Platforms without host tools from
|
||||
# https://doc.rust-lang.org/nightly/rustc/platform-support.html
|
||||
"armv7a-darwin"
|
||||
"armv5tel-linux" "armv6l-linux" "armv7a-linux" "m68k-linux"
|
||||
"riscv32-linux"
|
||||
"armv6l-netbsd"
|
||||
"x86_64-redox"
|
||||
"wasm32-wasi"
|
||||
];
|
||||
} // meta;
|
||||
})
|
||||
|
|
|
@ -2,12 +2,25 @@
|
|||
fixupOutputHooks+=('convertDesktopFiles $prefix')
|
||||
|
||||
# Get a param out of a desktop file. First parameter is the file and the second
|
||||
# is a pattern of the key who's value we should fetch.
|
||||
# is the key who's value we should fetch.
|
||||
getDesktopParam() {
|
||||
local file="$1";
|
||||
local pattern="$2";
|
||||
local file="$1"
|
||||
local key="$2"
|
||||
local line k v
|
||||
|
||||
awk -F "=" "/${pattern}/ {print \$2}" "${file}"
|
||||
while read -r line; do
|
||||
if [[ "$line" = *=* ]]; then
|
||||
k="${line%%=*}"
|
||||
v="${line#*=}"
|
||||
|
||||
if [[ "$k" = "$key" ]]; then
|
||||
echo "$v"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
done < "$file"
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# Convert a freedesktop.org icon theme for a given app to a .icns file. When possible, missing
|
||||
|
@ -41,21 +54,30 @@ convertIconTheme() {
|
|||
$((iconSize - 2))x$((iconSize - 2))${scaleSuffix}
|
||||
)
|
||||
|
||||
local fallbackIcon=
|
||||
|
||||
for iconIndex in "${!candidateIcons[@]}"; do
|
||||
for maybeSize in "${validSizes[@]}"; do
|
||||
icon=${candidateIcons[$iconIndex]}
|
||||
if [[ $icon = */$maybeSize/* ]]; then
|
||||
if [[ $maybeSize = $exactSize ]]; then
|
||||
echo "fixed $icon"
|
||||
return 0
|
||||
else
|
||||
echo "threshold $icon"
|
||||
fi
|
||||
elif [[ -a $icon ]]; then
|
||||
echo "fallback $icon"
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
elif [[ -a $icon && -z "$fallbackIcon" ]]; then
|
||||
fallbackIcon="$icon"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
if [[ -n "$fallbackIcon" ]]; then
|
||||
echo "fallback $fallbackIcon"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "scalable"
|
||||
}
|
||||
|
||||
|
@ -68,6 +90,7 @@ convertIconTheme() {
|
|||
local density=$((72 * scale))x$((72 * scale))
|
||||
local dim=$((iconSize * scale))
|
||||
|
||||
echo "desktopToDarwinBundle: resizing icon $in to $out, size $dim" >&2
|
||||
magick convert -scale "${dim}x${dim}" -density "$density" -units PixelsPerInch "$in" "$out"
|
||||
}
|
||||
|
||||
|
@ -80,6 +103,8 @@ convertIconTheme() {
|
|||
if [[ $in != '-' ]]; then
|
||||
local density=$((72 * scale))x$((72 * scale))
|
||||
local dim=$((iconSize * scale))
|
||||
|
||||
echo "desktopToDarwinBundle: rasterizing svg $in to $out, size $dim" >&2
|
||||
rsvg-convert --keep-aspect-ratio --width "$dim" --height "$dim" "$in" --output "$out"
|
||||
magick convert -density "$density" -units PixelsPerInch "$out" "$out"
|
||||
else
|
||||
|
@ -121,6 +146,7 @@ convertIconTheme() {
|
|||
local icon=${iconResult#* }
|
||||
local scaleSuffix=${scales[$scale]}
|
||||
local result=${resultdir}/${iconSize}x${iconSize}${scales[$scale]}${scaleSuffix:+x}.png
|
||||
echo "desktopToDarwinBundle: using $type icon $icon for size $iconSize$scaleSuffix" >&2
|
||||
case $type in
|
||||
fixed)
|
||||
local density=$((72 * scale))x$((72 * scale))
|
||||
|
@ -190,14 +216,14 @@ processExecFieldCodes() {
|
|||
convertDesktopFile() {
|
||||
local -r file=$1
|
||||
local -r sharePath=$(dirname "$(dirname "$file")")
|
||||
local -r name=$(getDesktopParam "${file}" "^Name")
|
||||
local -r name=$(getDesktopParam "${file}" "Name")
|
||||
local -r macOSExec=$(getDesktopParam "${file}" "X-macOS-Exec")
|
||||
if [[ "$macOSExec" ]]; then
|
||||
local -r exec="$macOSExec"
|
||||
else
|
||||
local -r exec=$(processExecFieldCodes "${file}")
|
||||
fi
|
||||
local -r iconName=$(getDesktopParam "${file}" "^Icon")
|
||||
local -r iconName=$(getDesktopParam "${file}" "Icon")
|
||||
local -r squircle=$(getDesktopParam "${file}" "X-macOS-SquircleIcon")
|
||||
|
||||
mkdir -p "${!outputBin}/Applications/${name}.app/Contents/MacOS"
|
||||
|
|
|
@ -9,11 +9,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gnome-user-docs";
|
||||
version = "44.0";
|
||||
version = "44.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/gnome-user-docs/${lib.versions.major version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "z2zX65xBSd2Tlm9x+huQevyPZR7MOvVOEIW89K0hsb0=";
|
||||
sha256 = "k/MpTUP9IvmWLM9r0X/2Tq54psoGP+bB6bxY0A8046g=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -11,7 +11,7 @@ let
|
|||
(builtins.attrNames (builtins.removeAttrs variantHashes [ "iosevka" ]));
|
||||
in stdenv.mkDerivation rec {
|
||||
pname = "${name}-bin";
|
||||
version = "22.0.2";
|
||||
version = "22.1.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/be5invis/Iosevka/releases/download/v${version}/ttc-${name}-${version}.zip";
|
||||
|
|
|
@ -1,95 +1,95 @@
|
|||
# This file was autogenerated. DO NOT EDIT!
|
||||
{
|
||||
iosevka = "0dj0fk40impvlnbgmpnhndhad841sbk7056nyaxagiz12qq6rrii";
|
||||
iosevka-aile = "01r6gdl2s93mhsr7ipq8ir6sy7srpyn8w09yd06hqh26ps40ki2b";
|
||||
iosevka-curly = "0d0wsb5fpknxix6qng6mzkfdj2abm8hq067bqvbqhrdwhvbl83x9";
|
||||
iosevka-curly-slab = "1hh9ck2pbsjaj81hivq9b7wqxb03mr6hsargw6gic4qn6pkk4l3n";
|
||||
iosevka-etoile = "0p85jw25pkhndcdi56l9yg1hm4rsdjvy713q89dygrn5678nw74w";
|
||||
iosevka-slab = "11vf6w59pcs71liw0k0nrhaw61nbn4n68vrj1b4rymc7mdaxfp1i";
|
||||
iosevka-ss01 = "0hiffyfhfwwy55i1rvr78mvlmgx3c4czfx0lf4vmq2c6c4bldbf7";
|
||||
iosevka-ss02 = "1z796x3a7hv05wir06rcj8i1l99169a7wab9j3ibb819pdycs5v7";
|
||||
iosevka-ss03 = "1jjmg538avphd3djdjy521q0lbn7ip97qpf479kgvcr1hhv606kl";
|
||||
iosevka-ss04 = "09xfsnl5dqzind60wip38pr0j9db47prbcgndfh283jcaysh5c0b";
|
||||
iosevka-ss05 = "1mj4q45ifxvgwrrrmlv46p9cliznc4z2vipdf6k8b05ad71n7gab";
|
||||
iosevka-ss06 = "02hn8dajvn5x303fv5gfl95hhsvql4h8525hd9k3a93g9qj13ib8";
|
||||
iosevka-ss07 = "1hki40chpp3bnz6ksbly8lpjiqywdhgkqpc2h25lksdg8hwd8mcb";
|
||||
iosevka-ss08 = "16bpzbcq2i0flw48ch2dfxljgscrm2fxfrcb2112wjv8zvi593hd";
|
||||
iosevka-ss09 = "0ajm1gn45zklijyijxvib0iy47q7jvgmp2kdgmsa5zwwvnh8fipb";
|
||||
iosevka-ss10 = "1g1if97w5mzzvm8y141rsqby90pmvc4whxxrjvdpmv94yb2biryp";
|
||||
iosevka-ss11 = "0icx5cflzk05h51i4i7p5wbdkrpnyfn9r89rsvrd22vxc038xhmg";
|
||||
iosevka-ss12 = "1var71j3pfa2fakrmm0c5sgiznbnqnxsnnkmpcb2xpjy4q68xfq1";
|
||||
iosevka-ss13 = "0mpidl1hickx60zmza94002721jfs169b5a1l6vxwi5x6vk5329v";
|
||||
iosevka-ss14 = "15z0ipnx2spgsp68465x7c8fkvb4hjnyl8pmfj2izn6jmgsrlc4x";
|
||||
iosevka-ss15 = "0fyw53nvv45z55x2cnm9kcdcbiw1nykycychkih2fwlydm67vj0d";
|
||||
iosevka-ss16 = "18lja4xw63i013ndqhm7kr7ggpbwc5zsxam7xib258nfhyx548ff";
|
||||
iosevka-ss17 = "1h2q2v93504539imbn0gbkxi9jw71hisl6px87hs3sh6lmm5kjfm";
|
||||
iosevka-ss18 = "085j759av6pspqn3sajrc12w74m7h5y64vdi1spmgd97dnj1gz6q";
|
||||
sgr-iosevka = "1ykc80hgc9pipqvqw4m3mqj37rhf6hskgds42kxqzxdn194072m1";
|
||||
sgr-iosevka-aile = "0c1jhff87hg4hxwrrp1vxx8gq1bkl9q85py1fz7gb3xdbim54s3z";
|
||||
sgr-iosevka-curly = "0zb3y46wbsjb847s31s56gjf9sj8ikp8qvsg1fm2m01idv6f21ig";
|
||||
sgr-iosevka-curly-slab = "113wmkzaaqp1yw95ld2j4l1f7yw9miq4bv4zjf9jib4ss6yjq97v";
|
||||
sgr-iosevka-etoile = "1pgsh5myw2ihnlk6qkxr7p46sg1402mqvqn7bi2ch8gd472gijck";
|
||||
sgr-iosevka-fixed = "1jf1icg1mqv1059p9msvk64j09apcqc9alvzrrxdqblw9b2ckrkj";
|
||||
sgr-iosevka-fixed-curly = "1p3m6i1cbphxqrwyj2n0d7zwx9f75nvdsdfyyh8wvap88xwm0ggf";
|
||||
sgr-iosevka-fixed-curly-slab = "0lgvai6293ddxckr9yvymi704pymcyp3ks4yx3jn207f70mpdg41";
|
||||
sgr-iosevka-fixed-slab = "17935bvl9yly24g95wi2g4faahnj98z3dkb1a6dkb4frjq1nif2m";
|
||||
sgr-iosevka-fixed-ss01 = "0wqpm57zcis9h8pzwvyjw8gggrwfgzlc3zd9c3shh7mpzx6zcj88";
|
||||
sgr-iosevka-fixed-ss02 = "00jlapqakmpjcdycvdlhlm46iyvr05b8qskl6m7fxqg46dvnzz9z";
|
||||
sgr-iosevka-fixed-ss03 = "1qd9wybq9miazkqkpis61s07yak7pn2lfawws421ynfgbb5r7987";
|
||||
sgr-iosevka-fixed-ss04 = "0dbrimliy072mqg1gys9cmbl0ac56iavjnl73d14mxc77ciavkkl";
|
||||
sgr-iosevka-fixed-ss05 = "1xfhvbzi91gddql6q1byyi40s9n6ym517c2pf6zpirnk6a7415k6";
|
||||
sgr-iosevka-fixed-ss06 = "0ibji574aifh7pqpdgnmgmp3k784swjdvly9292sd758mlh8j5sa";
|
||||
sgr-iosevka-fixed-ss07 = "1ixx123q5w7pbp9sgm84bhmzi7zy0h1ki3plm891mfv64pkbg42w";
|
||||
sgr-iosevka-fixed-ss08 = "00jwiwbgrj6yxqjdp4g8cbsq2jk5pz6h401mh7y6wp2j3y2xrrkb";
|
||||
sgr-iosevka-fixed-ss09 = "0jikxfir5md9qp5j1lhk1l9vjx2m15ncy9nkvb50mm32b6y5x3ph";
|
||||
sgr-iosevka-fixed-ss10 = "0ampkjvr8qyadfc0yvmyvac7gnm1xi441vz1pf8n2qniypy29bgj";
|
||||
sgr-iosevka-fixed-ss11 = "1nchlqkilglymydj33jzgp9wfivja2x3p8app3g9rgcsncsgjyc8";
|
||||
sgr-iosevka-fixed-ss12 = "1wpza8g4as1p4cd8g0lv20m2k57f22kazp2w7810k2wzv06613jq";
|
||||
sgr-iosevka-fixed-ss13 = "0phh86fk0l37998vxakz0vsxwsj1lbbzls23q56x7hgynnh8nr3x";
|
||||
sgr-iosevka-fixed-ss14 = "1x1hmfj692ify57lffg08pa2420fgx0amha1kdzyyxf87s3maqx8";
|
||||
sgr-iosevka-fixed-ss15 = "0qbf0b92668pxhjx778nnm5mj2w65c02k3cwk4f4x8vwkagwq2jp";
|
||||
sgr-iosevka-fixed-ss16 = "0wmlcckbyrr1sspqfp5r6rymy5myy53q02fl7agv1c7bwfx9iycr";
|
||||
sgr-iosevka-fixed-ss17 = "1rrkyv919m86biydl8jivfyn7wf8cna5c3b8rwv80ihz131zgj6z";
|
||||
sgr-iosevka-fixed-ss18 = "1s5gj3iyyfgkkxy23yzbibwrzw4s2x9xprc5hhzyh2r10zvib5cf";
|
||||
sgr-iosevka-slab = "1313y3nma1pqxm73yksw1b4vkvbwnv434hvkpqk1gp232j3i6dw2";
|
||||
sgr-iosevka-ss01 = "137lmgn490vyl2y7aa5pqa66rsdwrsd4z8nz22fsks3p1pzm3fc7";
|
||||
sgr-iosevka-ss02 = "1rhc76hfm204l5bmp1jdi74f0ay34g9q2rzi7lz5jirjjinnvadj";
|
||||
sgr-iosevka-ss03 = "1gpb5vcx624gi0jjrj8p7jpm6r2465gpbn3khq46f9557ril4m5y";
|
||||
sgr-iosevka-ss04 = "0kf1pmq2ffiam4zllj6x1dzd738zi9a843fz6jkpjbf9fascad9z";
|
||||
sgr-iosevka-ss05 = "1xibjsa438lwk4y4bf0r7gjqy5czp7j7fml08f492jb1dwz7vqhq";
|
||||
sgr-iosevka-ss06 = "1mk6haqj77b7r8cazkhf0bzd5w9ln2s6chsr12pd6bzmvphvzrzi";
|
||||
sgr-iosevka-ss07 = "087030ckif8w4mv7j9y4pirfia5g8dh385awpqc6fffls9l0l0zh";
|
||||
sgr-iosevka-ss08 = "0gzgsl7li9i1hl0ffw81j4w2ps3wy4kq986fwcwhgk7n9cy9rg97";
|
||||
sgr-iosevka-ss09 = "1hsdgsg5y40bxwjkhm2q7jmjcjffsyjwa741n7fkfaqrqwl6273g";
|
||||
sgr-iosevka-ss10 = "0ayspdypq0n7j8nbx17lxzki84icy5bzk88xq6akp7g6n035vw37";
|
||||
sgr-iosevka-ss11 = "0kf2a1765qrmd5ba3s3hw8hxgzbcqi9dwb754yid18kiipl3lp4l";
|
||||
sgr-iosevka-ss12 = "02d8i8qizfd1akhp0857y5i60hq3y4dj2dg2aq9pf4ldydcvc16g";
|
||||
sgr-iosevka-ss13 = "0aw77vcfmr868vyff01cqln09xb1f30lwcsg4mqg2ym2ibp0xv71";
|
||||
sgr-iosevka-ss14 = "1s1y5hww1vlqavgp4rr36bdvdicx7azw0yyrgv401i5w1p5z0088";
|
||||
sgr-iosevka-ss15 = "1wb8s43hjw36x99sh610ms5x04nb6pi9z7i0dcpch7x9g2kk9ydh";
|
||||
sgr-iosevka-ss16 = "1fwgskyl6ys383sa6fkkmdpw61m0d5nxc2vrhw56wysfvrz2cfa8";
|
||||
sgr-iosevka-ss17 = "1zvzwy90gkaiq9ij9030wssnrjrkx9xkddwghaa1s2p9bdyfnf8x";
|
||||
sgr-iosevka-ss18 = "12ijnkr69hahk8ghgibz438ar3yfky4kzwb9r08y43zjvycf2qhg";
|
||||
sgr-iosevka-term = "13dvkydib9gv7308i093zpxpr40cr3admq0c4gg6ki3ix7cml3ac";
|
||||
sgr-iosevka-term-curly = "0991m6p3b4kiyw0rgvxswwn263i7if7nznbivyzdsj1dgp3b2pkr";
|
||||
sgr-iosevka-term-curly-slab = "1qbhhd4w2nxga2j7llsn8w3qa66rfw4nqylsw6dknqfhf34ba2mq";
|
||||
sgr-iosevka-term-slab = "0g0dy4nrgy1a3xdbc5nxyh7y8j7plkbk09bid8rq51rdsljzp1hg";
|
||||
sgr-iosevka-term-ss01 = "1smlqzqvp8by7rz5g5nbywyg740v9fhyiy3khn9rx5szyj92pmrb";
|
||||
sgr-iosevka-term-ss02 = "1caxixkzbjapdr3k1ki1wfvcgs74mng0h15y00msfga1pjbj41vw";
|
||||
sgr-iosevka-term-ss03 = "1fsbzb57jx2qcdmixxpgpqm8x1rlvc5vzkgx2w9z83nrll3iba5n";
|
||||
sgr-iosevka-term-ss04 = "0zmpgsb0x8d8pggliqyl79hnxv5ivir0d8z2bg5zy1cw5ryzz94w";
|
||||
sgr-iosevka-term-ss05 = "17d8ak2xnmp0g37b5ly3qik38mmmblrdqgmixp4i91wldf66h58c";
|
||||
sgr-iosevka-term-ss06 = "0vv5gga66c5rs2vl4ncid403yqx7nwjfkr4mr5krlpc6lhs7wzhk";
|
||||
sgr-iosevka-term-ss07 = "0mjpm4x0gy4749fnha26xssm7aw72sh7rgf3jf46pmqz40ya829b";
|
||||
sgr-iosevka-term-ss08 = "1hw3cjfr3wwmjvi84vdn32kpk6x9zyqi43ib9nva7db4if39vf7s";
|
||||
sgr-iosevka-term-ss09 = "1049yb11dlxc7d97hw51mzssrc0ips2dll8wglinp0l23y1nhf2s";
|
||||
sgr-iosevka-term-ss10 = "0nzgcr2rlcgzfidnpix1dxyqiz273xmhfipfkflz5plpqvscd0c1";
|
||||
sgr-iosevka-term-ss11 = "135crs740qprnzk0mycp83vw9x1m8za6w51syvvx8h0vncsc8g6b";
|
||||
sgr-iosevka-term-ss12 = "1a2qrp44i4gqqpn2ycmslnm2g92v79v4hsim2ssiia474s5qn41z";
|
||||
sgr-iosevka-term-ss13 = "18dbgl28iykw1hqcmanvpkc8zk12547rgw8zisr4vwqck8an50vb";
|
||||
sgr-iosevka-term-ss14 = "0474ricwyvcmk9baxmd3gq1p6zrgnj59p0bbrsfc142ixqgkc0pp";
|
||||
sgr-iosevka-term-ss15 = "1g8pjbyxnhvx62g96zlfpbq2kdc329j0pcr8iib7isyhijh4ygcx";
|
||||
sgr-iosevka-term-ss16 = "199jhbfh2zbmp07jzi2wm8a63zhmasf4a04bp9i13pqwxz9hic7i";
|
||||
sgr-iosevka-term-ss17 = "1lyv2hpmyalrwbhcxjqw9lzil9dfhrf971vazg366wngwn027sp2";
|
||||
sgr-iosevka-term-ss18 = "1wszzj13gv3kc488yg9bshrf98db86xi0958g9l2y9l137h4frbz";
|
||||
iosevka = "1f0l3d6j936799szy243k58rk28qbrgvgi35g0w6bfsra25lycq2";
|
||||
iosevka-aile = "0prhfpz0ib7cbpi1kznb6yrp0wqjnsh39hymzha6lm0pa7py1r36";
|
||||
iosevka-curly = "0yzdm4ypfk60zvl54fhsmi9xs1bg08pac0srs9nggicp5zswixb3";
|
||||
iosevka-curly-slab = "175d96yzrqdjg7ic88dacvs7hz8daskn1a9vrqks132rr6a26xvw";
|
||||
iosevka-etoile = "1n5xcnq6vbks53vfaxkm1ykpfcsbw1q3zmkrlrwsdd0zdxjsy1fx";
|
||||
iosevka-slab = "07z3r27px5hsnz9rac290f2xraavflxqnd2ppmjiwz1yg9ch80d9";
|
||||
iosevka-ss01 = "1fd5pjyxrqna98nghsp6rxbaqhmxch89s3jdvqdmpwj87jb6dkcc";
|
||||
iosevka-ss02 = "13i8cqdh8g3wv8686g09aazjly157wvzgf5a6n1az4kcax9cawi3";
|
||||
iosevka-ss03 = "1l1dkk6321czqrd7if4wwmps9r6in88952i1hqgjqr3r797x4k8p";
|
||||
iosevka-ss04 = "1798nzr27pv9dpmjgp9bbivg9dcnk3cz603k3n3igmp8rb4rhz5f";
|
||||
iosevka-ss05 = "0csxpmh6ymkgfhzl5x370y4qdl92cjhas25782n8carg16bc854f";
|
||||
iosevka-ss06 = "12kmb4g0f31jr0d2gr66xjcjjqsmbr5hs0ynqbcsdpk4x58lv4y7";
|
||||
iosevka-ss07 = "1fwdiyzs5prggzld9zip2bqzhngljwsy33cdbfq9526qakbxi67g";
|
||||
iosevka-ss08 = "0yha45vyl0kdl593f04m26sl92vhklr1afd7yhmlkmhhhqp6bs9n";
|
||||
iosevka-ss09 = "0av1npxxky47239x64rbrv7q7gb2lrgyzkaw1mqhafg6yzjn9iq5";
|
||||
iosevka-ss10 = "0w3j04sjkrsd91vl7gyxbjjm76xx64p7b5c97p04xsa09gaig7i9";
|
||||
iosevka-ss11 = "1vv20s4kp3mhngdpxzxwa1hldahxm1cxybnf1hzgd79a1162blhx";
|
||||
iosevka-ss12 = "1yh200azn914s8lyzv8ga68ixxrqhcxx1rywxm3cpmm8iisvjf4y";
|
||||
iosevka-ss13 = "0yvnzz53x0np7w53r5989chs9fcv81mckbf41z519r8l30m31bbj";
|
||||
iosevka-ss14 = "17cv02gbzn0v8c8apdh7dd5s3y2qb9cydr8g5rbczzpvywixxrwr";
|
||||
iosevka-ss15 = "04iqvjx0nkzikar4ivi7zswqvpcd954khmjjx8vicq3x56wggj8z";
|
||||
iosevka-ss16 = "1q3krbi3vh8ry35s24cja77a8430x4n8i4anf8v7rh45sns37fmj";
|
||||
iosevka-ss17 = "0vyzhix547j7yq717ffns6pd5mgis5sbxl85c1qf3nhij8czqg6l";
|
||||
iosevka-ss18 = "0qikq8p8kvxw9lmrgzlm1g26bz3lppbc8jcgl8417jz400npfqg9";
|
||||
sgr-iosevka = "095nwxsgwj671m962ix8qva5himdva0iqv9b5lapgb7acidrj8m7";
|
||||
sgr-iosevka-aile = "1fkl0v7rclia5lwfm7f3vc3gkgnd88gf00icm6qka1xylzk8z83l";
|
||||
sgr-iosevka-curly = "0q7dakcldx7j2cvn8hz079j81y5ab6ziqz6jr51w1whzb46al7rq";
|
||||
sgr-iosevka-curly-slab = "0pw3fbygsgdw0isnv18axh49yxyfjdav6xizrvg6x4y8hispx0xp";
|
||||
sgr-iosevka-etoile = "1fs22ap272hkf1wfymhbvgdpsrnxwadp8z6lv2hv5wy8ibc0ccia";
|
||||
sgr-iosevka-fixed = "0bgag04jidcdj0gmsppc2lhvawpvylxs645sgxjj8bljy6480s96";
|
||||
sgr-iosevka-fixed-curly = "0hgablbcb0wrpdkxw78pyvyni7dh457nwb10acwjxy6lbsshd88z";
|
||||
sgr-iosevka-fixed-curly-slab = "1nb3izaq3slaxypylz3l6r8xjg7yy0yan08nsw8zny5lp0kaiqw9";
|
||||
sgr-iosevka-fixed-slab = "16cc32ysmvifx736alp8bmcb9sjs1426sv72qydy99dafw34xhmm";
|
||||
sgr-iosevka-fixed-ss01 = "0vvjj3dsfj8a60pg1qf7hcm6livsjc40xr0sfc9z1hx3dwjqpvlh";
|
||||
sgr-iosevka-fixed-ss02 = "1yy9hqfdb897wi3nl5ny5j5i56jggbppx4ddckfa62a4jxvfks58";
|
||||
sgr-iosevka-fixed-ss03 = "0qhk1w3gsd3qriyk9k33sfq46h9hn5zy9zk9cpd429z0xdps49kc";
|
||||
sgr-iosevka-fixed-ss04 = "02psmn72r1mkza8n7p4sgrag7iz5zylnw03hnq6fnc4bqnn29gph";
|
||||
sgr-iosevka-fixed-ss05 = "1w3jjjr8vvzjihpai9mivkcm2wngag6iva120zsqgb2n2k1z31bp";
|
||||
sgr-iosevka-fixed-ss06 = "1icabqjnnsj59m4lg3qk820kdsq7hhl3gngfm5x4br43h031cdc7";
|
||||
sgr-iosevka-fixed-ss07 = "0j9l18w7xxdgnw728zyphb52a76rbhb8cv388yc94wldzcmsk1jb";
|
||||
sgr-iosevka-fixed-ss08 = "0js9pf92pgd944dywya1yjdx99sz56ra0nwxs9n9g0zn1rj5czwv";
|
||||
sgr-iosevka-fixed-ss09 = "06bnyhx5rhkqjiwkjy1rxx6mby16wkyb1r4l3lkln5v6v0sfixfp";
|
||||
sgr-iosevka-fixed-ss10 = "13y3vvcrm2v78bmadk051zr3izl0hpcxmfag34cikapzmf9vzxn3";
|
||||
sgr-iosevka-fixed-ss11 = "1rwjzdz2ab90rv5p8hh870x9knhilqh0iiwfkyx8kjp7s9shhncp";
|
||||
sgr-iosevka-fixed-ss12 = "0fj2szv0g2dclf7yhi8xc9hkgz1mw7kpc62hcvs3044ciga9cxrv";
|
||||
sgr-iosevka-fixed-ss13 = "1z6rpf9l6yadzqgrdcyi75vd8mh75b6dx7d9bh06n8sjr5amhav5";
|
||||
sgr-iosevka-fixed-ss14 = "0cp58j9c7fkm0q0ym99rhg7ljvzympwks4wk7l8vhh0wp2hfw78h";
|
||||
sgr-iosevka-fixed-ss15 = "1fzs0c12abrf81yy1254nfiaq5q2rgvnv1yhqh985jmwcr010n83";
|
||||
sgr-iosevka-fixed-ss16 = "16wffgq3b9d290kkbb6xa6z9aphn2d1wzqsqfr4mrkbhpwchbh0i";
|
||||
sgr-iosevka-fixed-ss17 = "030l59270vyjhik8cn2jphdvd6vphr9ac8kqzx3bdbf1wgsr4sir";
|
||||
sgr-iosevka-fixed-ss18 = "06qym0ffxy6j9hagpd3vrf6j5bd83ch150wkqg9rkg1i26q71v36";
|
||||
sgr-iosevka-slab = "0mbdgpxkb3s4a8x0dvnjwqg3za0hl73n3a5vrmy8p694bnx1mi7r";
|
||||
sgr-iosevka-ss01 = "0ilr1jiqmjmjfv4py1q3pdn3j20nh8j99629gq9g1zb82x1c9g9l";
|
||||
sgr-iosevka-ss02 = "0l4cbx4v8zffbbq1lklk8knn0w6j9gjdp1f780k6x0z0jz3dxvdw";
|
||||
sgr-iosevka-ss03 = "0dpl84ybj2h6nv03yy4vrwwksx4zms1c8fgr238w1nbhd7lnlyrv";
|
||||
sgr-iosevka-ss04 = "0xlyjxsz6zc3gljvw0rsfgyv9xg1kvgsy2ibd2950vlxk2c597jb";
|
||||
sgr-iosevka-ss05 = "02vfkdjq01jxjcvcnxs8g2snmq2gg56448yk0l0gna9mi1hagsk3";
|
||||
sgr-iosevka-ss06 = "0b75h0al34f6w0s94i5c88pzs4zjl2iinkwjx855a036mdcqkz1l";
|
||||
sgr-iosevka-ss07 = "1grqjqn9gckpgrrch9xa05ljpwr1rdr4lczsn89irhjz102s0bik";
|
||||
sgr-iosevka-ss08 = "1mzbaslpy7pscmyiiz0k7czw3kjjc9an7mdb4yh99bpxwaskiv3k";
|
||||
sgr-iosevka-ss09 = "1d7r2cv1w9q5h1frvzylizwimp8r6bdpg3fckcrdrfxsl0xfdffc";
|
||||
sgr-iosevka-ss10 = "1jr01z6s476aggnnki0q4x24z35jx03fl4fh1l44pf3rckz7c0m9";
|
||||
sgr-iosevka-ss11 = "05kybk7wskrg2i58h9n31sj1g6m93dcbbxr38y9nfcxb02cdbxp3";
|
||||
sgr-iosevka-ss12 = "0pzrn3b5qj2q7k7slwvvz31j566l8xbmgk6kv324r3r19xcmsx31";
|
||||
sgr-iosevka-ss13 = "1cgn33g39pnjkh452r396cyw00iskrr73k2jghw2ywb8ard024gc";
|
||||
sgr-iosevka-ss14 = "0q74z4p3ybhaha4z6myasxyidy464vmccqk0bji6ks6fdklh2l3m";
|
||||
sgr-iosevka-ss15 = "13gcgv08pwsbnr51b67w5hb9x5vcz7ridxjzwcnjhavssq3qn02x";
|
||||
sgr-iosevka-ss16 = "1lkxrvd328ww8xi2189333p40awk7bb4d5k0mpcibp1r2hqbhx3x";
|
||||
sgr-iosevka-ss17 = "0q4j381k2nz88y2nszd90ynmqyzna5il7j5illhdjk9dyp936f1p";
|
||||
sgr-iosevka-ss18 = "16hdbvx9pa5z03i3dv8x40x6d8nvgxn4vga8sgdgpd2d5k8ibcq5";
|
||||
sgr-iosevka-term = "0a16brmr2xsm48bcd5rrsv1c7b4yhvnkrlqp14p0fawyfs05bk5v";
|
||||
sgr-iosevka-term-curly = "0a53j231zd1nkirp3fg6m72455gmkn0ipvdqswkkipxp5llbxkhx";
|
||||
sgr-iosevka-term-curly-slab = "1ypbffwg7pihq5ywy59y3f2d8dw8p5lzk2284336z3a7i8kzmhpq";
|
||||
sgr-iosevka-term-slab = "0rcf9i8fibrvmhzmm192crl7jlv7bwda7b12865w4g719a8ksdsv";
|
||||
sgr-iosevka-term-ss01 = "0h12vz7qkl6xflffiqjqqkd1ziqkg2pi1s8pk28ak706fv4k203n";
|
||||
sgr-iosevka-term-ss02 = "19d3hqlwv7pi9xyh9amshirbj6ypg6ka5g6hz9dmmh0pmwhcvpjs";
|
||||
sgr-iosevka-term-ss03 = "09b3ghyvrjx8dnh8i9ly3cmkbpl10gn1283q9bjamcc8niva6g36";
|
||||
sgr-iosevka-term-ss04 = "0l27i49myv81x09bj8ii732zc6473psa58ls2zgvd7yz2bihi3ar";
|
||||
sgr-iosevka-term-ss05 = "0421p4y94zxwvc7qyl4zgxld3jrx12wsjirmvfxvfndn0f4dwqyk";
|
||||
sgr-iosevka-term-ss06 = "0dl62wnqfqrryp0hrj073yvvy225swv9kcldhygapi16mw97v30b";
|
||||
sgr-iosevka-term-ss07 = "03sipvjji22g0gajj0vxkmsc81fd173bb816vjv56fh489g04hn3";
|
||||
sgr-iosevka-term-ss08 = "0j0y2dzn6a8r0yg40kajzrhyvl5yf2b8hm7n9970h0gl3rrk5pxa";
|
||||
sgr-iosevka-term-ss09 = "1y37cr436hwb1iqqsybg0w595kbn0373hm0zmwcsmsxb25166lcf";
|
||||
sgr-iosevka-term-ss10 = "1ngyppn90nn8f59xkh63ifl077w0zldjxzxjw8skx2jhj2kis537";
|
||||
sgr-iosevka-term-ss11 = "193snjki9wd6cjpd754g7pvhlyg3yizlcjhcw9x0zx60830xcbd3";
|
||||
sgr-iosevka-term-ss12 = "000maksimlm3gapp8d3cwymkmkg4n0dcwxvlxwgi2a6f5rwgfm8n";
|
||||
sgr-iosevka-term-ss13 = "09yfj7kxd0p2w1dd1n8hwr3j2plqiq7l17rhh0lys1clyw1jrph8";
|
||||
sgr-iosevka-term-ss14 = "16fipp8pka2187mclsf24sxx7idcqh4nn4z63glrg6695g8r0vd0";
|
||||
sgr-iosevka-term-ss15 = "0yaj5all8jljzyhd5qmgvmiwv7whx4f9zvxgv3l53xxww5i5yhiz";
|
||||
sgr-iosevka-term-ss16 = "163g9mj2n8z21nr5yslnq8m4m7j4aq7q918zs8nd5hggjzhqpy9y";
|
||||
sgr-iosevka-term-ss17 = "07zicd0f8bclwxfkvxy6x6bhccz3334wmgfxqpzx36sshyhvfihg";
|
||||
sgr-iosevka-term-ss18 = "1qwxyyqv483p05mvkar9vb2m349is0qgdijri8ipran73w363fhc";
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "sarasa-gothic";
|
||||
version = "0.40.5";
|
||||
version = "0.40.6";
|
||||
|
||||
src = fetchurl {
|
||||
# Use the 'ttc' files here for a smaller closure size.
|
||||
# (Using 'ttf' files gives a closure size about 15x larger, as of November 2021.)
|
||||
url = "https://github.com/be5invis/Sarasa-Gothic/releases/download/v${version}/sarasa-gothic-ttc-${version}.7z";
|
||||
hash = "sha256-bs3o8+LyCTCZvUYigUWfSmjFrzPg7nLzElZYxDEsQ9k=";
|
||||
hash = "sha256-AHslDiYBQXcxo8XVh1GMZDR8LJXvzJHl4hrisfhltEM=";
|
||||
};
|
||||
|
||||
sourceRoot = ".";
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue