Project import generated by Copybara.

GitOrigin-RevId: 22a81aa5fc15b2d41b12f7160a71cd4a9f3c3fa1
This commit is contained in:
Default email 2020-06-15 17:56:04 +02:00
parent e1c3016e0e
commit 2ce89355c3
813 changed files with 13120 additions and 8626 deletions

View file

@ -193,3 +193,6 @@
/nixos/modules/virtualisation/cri-o.nix @NixOS/podman /nixos/modules/virtualisation/cri-o.nix @NixOS/podman
/nixos/modules/virtualisation/podman.nix @NixOS/podman /nixos/modules/virtualisation/podman.nix @NixOS/podman
/nixos/tests/podman.nix @NixOS/podman /nixos/tests/podman.nix @NixOS/podman
# Blockchains
/pkgs/applications/blockchains @mmahut

View file

@ -34,6 +34,7 @@ the main ones:
* [Nix](https://github.com/NixOS/nix) - the purely functional package manager * [Nix](https://github.com/NixOS/nix) - the purely functional package manager
* [NixOps](https://github.com/NixOS/nixops) - the tool to remotely deploy NixOS machines * [NixOps](https://github.com/NixOS/nixops) - the tool to remotely deploy NixOS machines
* [nixos-hardware](https://github.com/NixOS/nixos-hardware) - NixOS profiles to optimize settings for different hardware
* [Nix RFCs](https://github.com/NixOS/rfcs) - the formal process for making substantial changes to the community * [Nix RFCs](https://github.com/NixOS/rfcs) - the formal process for making substantial changes to the community
* [NixOS homepage](https://github.com/NixOS/nixos-homepage) - the [NixOS.org](https://nixos.org) website * [NixOS homepage](https://github.com/NixOS/nixos-homepage) - the [NixOS.org](https://nixos.org) website
* [hydra](https://github.com/NixOS/hydra) - our continuous integration system * [hydra](https://github.com/NixOS/hydra) - our continuous integration system

View file

@ -139,6 +139,12 @@
githubId = 1517066; githubId = 1517066;
name = "Aiken Cairncross"; name = "Aiken Cairncross";
}; };
aciceri = {
name = "Andrea Ciceri";
email = "andrea.ciceri@autistici.org";
github = "aciceri";
githubId = 2318843;
};
acowley = { acowley = {
email = "acowley@gmail.com"; email = "acowley@gmail.com";
github = "acowley"; github = "acowley";
@ -313,6 +319,12 @@
githubId = 2387841; githubId = 2387841;
name = "Alexander Bakker"; name = "Alexander Bakker";
}; };
alexbiehl = {
email = "alexbiehl@gmail.com";
github = "alexbiehl";
githubId = 1876617;
name = "Alex Biehl";
};
alexchapman = { alexchapman = {
email = "alex@farfromthere.net"; email = "alex@farfromthere.net";
github = "AJChapman"; github = "AJChapman";
@ -2460,6 +2472,12 @@
githubId = 7432848; githubId = 7432848;
name = "Daniel Albert"; name = "Daniel Albert";
}; };
eskytthe = {
email = "eskytthe@gmail.com";
github = "eskytthe";
githubId = 2544204;
name = "Erik Skytthe";
};
Esteth = { Esteth = {
email = "adam.copp@gmail.com"; email = "adam.copp@gmail.com";
name = "Adam Copp"; name = "Adam Copp";
@ -3518,6 +3536,12 @@
githubId = 117874; githubId = 117874;
name = "Jeroen de Haas"; name = "Jeroen de Haas";
}; };
jduan = {
name = "Jingjing Duan";
email = "duanjingjing@gmail.com";
github = "jduan";
githubId = 452450;
};
jefdaj = { jefdaj = {
email = "jefdaj@gmail.com"; email = "jefdaj@gmail.com";
github = "jefdaj"; github = "jefdaj";
@ -3680,6 +3704,12 @@
githubId = 1102396; githubId = 1102396;
name = "Jussi Maki"; name = "Jussi Maki";
}; };
jobojeha = {
email = "jobojeha@jeppener.de";
github = "jobojeha";
githubId = 60272884;
name = "Jonathan Jeppener-Haltenhoff";
};
joelburget = { joelburget = {
email = "joelburget@gmail.com"; email = "joelburget@gmail.com";
github = "joelburget"; github = "joelburget";
@ -5002,6 +5032,10 @@
github = "mdlayher"; github = "mdlayher";
githubId = 1926905; githubId = 1926905;
name = "Matt Layher"; name = "Matt Layher";
keys = [{
longkeyid = "rsa2048/0x77BFE531397EDE94";
fingerprint = "D709 03C8 0BE9 ACDC 14F0 3BFB 77BF E531 397E DE94";
}];
}; };
meditans = { meditans = {
email = "meditans@gmail.com"; email = "meditans@gmail.com";
@ -8909,6 +8943,12 @@
githubId = 474343; githubId = 474343;
name = "Xavier Zwirtz"; name = "Xavier Zwirtz";
}; };
ymarkus = {
name = "Yannick Markus";
email = "nixpkgs@ymarkus.dev";
github = "ymarkus";
githubId = 62380378;
};
ymeister = { ymeister = {
name = "Yuri Meister"; name = "Yuri Meister";
email = "47071325+ymeister@users.noreply.github.com"; email = "47071325+ymeister@users.noreply.github.com";

View file

@ -490,6 +490,11 @@ systemd.services.nginx.serviceConfig.ReadWritePaths = [ "/var/www" ];
<link xlink:href="https://github.com/NixOS/nixpkgs/issues/89205">#89205</link>. <link xlink:href="https://github.com/NixOS/nixpkgs/issues/89205">#89205</link>.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
In the <literal>resilio</literal> module, <xref linkend="opt-services.resilio.httpListenAddr"/> has been changed to listen to <literal>[::1]</literal> instead of <literal>0.0.0.0</literal>.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>
@ -642,6 +647,16 @@ systemd.services.nginx.serviceConfig.ReadWritePaths = [ "/var/www" ];
<package>netbeans</package> was upgraded to 12.0 and now defaults to OpenJDK 11. This might cause problems if your projects depend on packages that were removed in Java 11. <package>netbeans</package> was upgraded to 12.0 and now defaults to OpenJDK 11. This might cause problems if your projects depend on packages that were removed in Java 11.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
<package>nextcloud</package> has been updated to <link xlink:href="https://nextcloud.com/blog/nextcloud-hub-brings-productivity-to-home-office/">v19</link>.
</para>
<para>
If you have an existing installation, please make sure that you're on
<package>nextcloud18</package> before upgrading to <package>nextcloud19</package>
since Nextcloud doesn't support upgrades across multiple major versions.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>
</section> </section>

View file

@ -43,7 +43,7 @@ pkgs.stdenv.mkDerivation {
# Make a crude approximation of the size of the target image. # Make a crude approximation of the size of the target image.
# If the script starts failing, increase the fudge factors here. # If the script starts failing, increase the fudge factors here.
numInodes=$(find $storePaths ./files | wc -l) numInodes=$(find $storePaths ./files | wc -l)
numDataBlocks=$(du -s -c -B 4096 --apparent-size $storePaths ./files | tail -1 | awk '{ print int($1 * 1.03) }') numDataBlocks=$(du -s -c -B 4096 --apparent-size $storePaths ./files | tail -1 | awk '{ print int($1 * 1.10) }')
bytes=$((2 * 4096 * $numInodes + 4096 * $numDataBlocks)) bytes=$((2 * 4096 * $numInodes + 4096 * $numDataBlocks))
echo "Creating an EXT4 image of $bytes bytes (numInodes=$numInodes, numDataBlocks=$numDataBlocks)" echo "Creating an EXT4 image of $bytes bytes (numInodes=$numInodes, numDataBlocks=$numDataBlocks)"

View file

@ -278,7 +278,14 @@ in
(mkRemovedOptionModule [ "fonts" "fontconfig" "hinting" "style" ] "") (mkRemovedOptionModule [ "fonts" "fontconfig" "hinting" "style" ] "")
(mkRemovedOptionModule [ "fonts" "fontconfig" "forceAutohint" ] "") (mkRemovedOptionModule [ "fonts" "fontconfig" "forceAutohint" ] "")
(mkRemovedOptionModule [ "fonts" "fontconfig" "renderMonoTTFAsBitmap" ] "") (mkRemovedOptionModule [ "fonts" "fontconfig" "renderMonoTTFAsBitmap" ] "")
]; ] ++ lib.forEach [ "enable" "substitutions" "preset" ]
(opt: lib.mkRemovedOptionModule [ "fonts" "fontconfig" "ultimate" "${opt}" ] ''
The fonts.fontconfig.ultimate module and configuration is obsolete.
The repository has since been archived and activity has ceased.
https://github.com/bohoomil/fontconfig-ultimate/issues/171.
No action should be needed for font configuration, as the fonts.fontconfig
module is already used by default.
'');
options = { options = {

View file

@ -84,7 +84,7 @@ in {
model = mkOption { model = mkOption {
type = types.str; type = types.str;
example = literalExample '' example = literalExample ''
gutenprint.''${lib.version.majorMinor (lib.getVersion pkgs.cups)}://brother-hl-5140/expert gutenprint.''${lib.versions.majorMinor (lib.getVersion pkgs.gutenprint)}://brother-hl-5140/expert
''; '';
description = '' description = ''
Location of the ppd driver file for the printer. Location of the ppd driver file for the printer.

View file

@ -18,6 +18,7 @@
sdImage = { sdImage = {
firmwareSize = 128; firmwareSize = 128;
firmwarePartitionName = "NIXOS_BOOT";
# This is a hack to avoid replicating config.txt from boot.loader.raspberryPi # This is a hack to avoid replicating config.txt from boot.loader.raspberryPi
populateFirmwareCommands = populateFirmwareCommands =
"${config.system.build.installBootLoader} ${config.system.build.toplevel} -d ./firmware"; "${config.system.build.installBootLoader} ${config.system.build.toplevel} -d ./firmware";
@ -25,6 +26,12 @@
populateRootCommands = ""; populateRootCommands = "";
}; };
fileSystems."/boot/firmware" = {
# This effectively "renames" the loaOf entry set in sd-image.nix
mountPoint = "/boot";
neededForBoot = true;
};
# the installation media is also the installation target, # the installation media is also the installation target,
# so we don't want to provide the installation configuration.nix. # so we don't want to provide the installation configuration.nix.
installer.cloneConfig = false; installer.cloneConfig = false;

View file

@ -63,6 +63,14 @@ in
''; '';
}; };
firmwarePartitionName = mkOption {
type = types.str;
default = "FIRMWARE";
description = ''
Name of the filesystem which holds the boot firmware.
'';
};
rootPartitionUUID = mkOption { rootPartitionUUID = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
@ -114,7 +122,7 @@ in
config = { config = {
fileSystems = { fileSystems = {
"/boot/firmware" = { "/boot/firmware" = {
device = "/dev/disk/by-label/FIRMWARE"; device = "/dev/disk/by-label/${config.sdImage.firmwarePartitionName}";
fsType = "vfat"; fsType = "vfat";
# Alternatively, this could be removed from the configuration. # Alternatively, this could be removed from the configuration.
# The filesystem is not needed at runtime, it could be treated # The filesystem is not needed at runtime, it could be treated
@ -178,7 +186,7 @@ in
# Create a FAT32 /boot/firmware partition of suitable size into firmware_part.img # Create a FAT32 /boot/firmware partition of suitable size into firmware_part.img
eval $(partx $img -o START,SECTORS --nr 1 --pairs) eval $(partx $img -o START,SECTORS --nr 1 --pairs)
truncate -s $((SECTORS * 512)) firmware_part.img truncate -s $((SECTORS * 512)) firmware_part.img
faketime "1970-01-01 00:00:00" mkfs.vfat -i ${config.sdImage.firmwarePartitionID} -n FIRMWARE firmware_part.img faketime "1970-01-01 00:00:00" mkfs.vfat -i ${config.sdImage.firmwarePartitionID} -n ${config.sdImage.firmwarePartitionName} firmware_part.img
# Populate the files intended for /boot/firmware # Populate the files intended for /boot/firmware
mkdir firmware mkdir firmware

View file

@ -757,6 +757,7 @@
./services/networking/v2ray.nix ./services/networking/v2ray.nix
./services/networking/vsftpd.nix ./services/networking/vsftpd.nix
./services/networking/wakeonlan.nix ./services/networking/wakeonlan.nix
./services/networking/wasabibackend.nix
./services/networking/websockify.nix ./services/networking/websockify.nix
./services/networking/wg-quick.nix ./services/networking/wg-quick.nix
./services/networking/wicd.nix ./services/networking/wicd.nix

View file

@ -3,7 +3,7 @@
with lib; with lib;
{ {
meta.maintainers = maintainers.fabianhauser; meta.maintainers = pkgs.hamster.meta.maintainers;
options.programs.hamster.enable = options.programs.hamster.enable =
mkEnableOption "Whether to enable hamster time tracking."; mkEnableOption "Whether to enable hamster time tracking.";

View file

@ -21,6 +21,12 @@ let
${optionalString (cfg.network.listenAddress != "any") ''bind_to_address "${cfg.network.listenAddress}"''} ${optionalString (cfg.network.listenAddress != "any") ''bind_to_address "${cfg.network.listenAddress}"''}
${optionalString (cfg.network.port != 6600) ''port "${toString cfg.network.port}"''} ${optionalString (cfg.network.port != 6600) ''port "${toString cfg.network.port}"''}
${optionalString (cfg.fluidsynth) ''
decoder {
plugin "fluidsynth"
soundfont "${pkgs.soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2"
}
''}
${cfg.extraConfig} ${cfg.extraConfig}
''; '';
@ -133,6 +139,14 @@ in {
parameter is omitted from the configuration. parameter is omitted from the configuration.
''; '';
}; };
fluidsynth = mkOption {
type = types.bool;
default = false;
description = ''
If set, add fluidsynth soundfont and configure the plugin.
'';
};
}; };
}; };

View file

@ -25,7 +25,7 @@ let
change_source = [ ${concatStringsSep "," cfg.changeSource} ], change_source = [ ${concatStringsSep "," cfg.changeSource} ],
schedulers = [ ${concatStringsSep "," cfg.schedulers} ], schedulers = [ ${concatStringsSep "," cfg.schedulers} ],
builders = [ ${concatStringsSep "," cfg.builders} ], builders = [ ${concatStringsSep "," cfg.builders} ],
status = [ ${concatStringsSep "," cfg.status} ], services = [ ${concatStringsSep "," cfg.reporters} ],
) )
for step in [ ${concatStringsSep "," cfg.factorySteps} ]: for step in [ ${concatStringsSep "," cfg.factorySteps} ]:
factory.addStep(step) factory.addStep(step)
@ -119,10 +119,10 @@ in {
default = [ "worker.Worker('example-worker', 'pass')" ]; default = [ "worker.Worker('example-worker', 'pass')" ];
}; };
status = mkOption { reporters = mkOption {
default = []; default = [];
type = types.listOf types.str; type = types.listOf types.str;
description = "List of status notification endpoints."; description = "List of reporter objects used to present build status to various users.";
}; };
user = mkOption { user = mkOption {
@ -276,6 +276,10 @@ in {
imports = [ imports = [
(mkRenamedOptionModule [ "services" "buildbot-master" "bpPort" ] [ "services" "buildbot-master" "pbPort" ]) (mkRenamedOptionModule [ "services" "buildbot-master" "bpPort" ] [ "services" "buildbot-master" "pbPort" ])
(mkRemovedOptionModule [ "services" "buildbot-master" "status" ] ''
Since Buildbot 0.9.0, status targets are deprecated and ignored.
Review your configuration and migrate to reporters (available at services.buildbot-master.reporters).
'')
]; ];
meta.maintainers = with lib.maintainers; [ nand0p mic92 ]; meta.maintainers = with lib.maintainers; [ nand0p mic92 ];

View file

@ -232,7 +232,7 @@ in
}; };
meta = { meta = {
maintainers = lib.maintainers.mic92; maintainers = [ lib.maintainers.mic92 ];
}; };

View file

@ -1,18 +1,32 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
with lib; with lib;
let let
cfg = config.services.undervolt; cfg = config.services.undervolt;
in { cliArgs = lib.cli.toGNUCommandLineShell {} {
options.services.undervolt = { inherit (cfg)
enable = mkOption { verbose
type = types.bool; temp
default = false; ;
description = '' # `core` and `cache` are both intentionally set to `cfg.coreOffset` as according to the undervolt docs:
Whether to undervolt intel cpus. #
''; # Core or Cache offsets have no effect. It is not possible to set different offsets for
# CPU Core and Cache. The CPU will take the smaller of the two offsets, and apply that to
# both CPU and Cache. A warning message will be displayed if you attempt to set different offsets.
core = cfg.coreOffset;
cache = cfg.coreOffset;
gpu = cfg.gpuOffset;
uncore = cfg.uncoreOffset;
analogio = cfg.analogioOffset;
temp-bat = cfg.tempBat;
temp-ac = cfg.tempAc;
}; };
in
{
options.services.undervolt = {
enable = mkEnableOption
"Intel CPU undervolting service (WARNING: may permanently damage your hardware!)";
verbose = mkOption { verbose = mkOption {
type = types.bool; type = types.bool;
@ -32,58 +46,58 @@ in {
}; };
coreOffset = mkOption { coreOffset = mkOption {
type = types.nullOr types.str; type = types.nullOr types.int;
default = null; default = null;
description = '' description = ''
The amount of voltage to offset the CPU cores by. Accepts a floating point number. The amount of voltage in mV to offset the CPU cores by.
''; '';
}; };
gpuOffset = mkOption { gpuOffset = mkOption {
type = types.nullOr types.str; type = types.nullOr types.int;
default = null; default = null;
description = '' description = ''
The amount of voltage to offset the GPU by. Accepts a floating point number. The amount of voltage in mV to offset the GPU by.
''; '';
}; };
uncoreOffset = mkOption { uncoreOffset = mkOption {
type = types.nullOr types.str; type = types.nullOr types.int;
default = null; default = null;
description = '' description = ''
The amount of voltage to offset uncore by. Accepts a floating point number. The amount of voltage in mV to offset uncore by.
''; '';
}; };
analogioOffset = mkOption { analogioOffset = mkOption {
type = types.nullOr types.str; type = types.nullOr types.int;
default = null; default = null;
description = '' description = ''
The amount of voltage to offset analogio by. Accepts a floating point number. The amount of voltage in mV to offset analogio by.
''; '';
}; };
temp = mkOption { temp = mkOption {
type = types.nullOr types.str; type = types.nullOr types.int;
default = null; default = null;
description = '' description = ''
The temperature target. Accepts a floating point number. The temperature target in Celsius degrees.
''; '';
}; };
tempAc = mkOption { tempAc = mkOption {
type = types.nullOr types.str; type = types.nullOr types.int;
default = null; default = null;
description = '' description = ''
The temperature target on AC power. Accepts a floating point number. The temperature target on AC power in Celsius degrees.
''; '';
}; };
tempBat = mkOption { tempBat = mkOption {
type = types.nullOr types.str; type = types.nullOr types.int;
default = null; default = null;
description = '' description = ''
The temperature target on battery power. Accepts a floating point number. The temperature target on battery power in Celsius degrees.
''; '';
}; };
}; };
@ -100,24 +114,7 @@ in {
serviceConfig = { serviceConfig = {
Type = "oneshot"; Type = "oneshot";
Restart = "no"; Restart = "no";
ExecStart = "${pkgs.undervolt}/bin/undervolt ${cliArgs}";
# `core` and `cache` are both intentionally set to `cfg.coreOffset` as according to the undervolt docs:
#
# Core or Cache offsets have no effect. It is not possible to set different offsets for
# CPU Core and Cache. The CPU will take the smaller of the two offsets, and apply that to
# both CPU and Cache. A warning message will be displayed if you attempt to set different offsets.
ExecStart = ''
${pkgs.undervolt}/bin/undervolt \
${optionalString cfg.verbose "--verbose"} \
${optionalString (cfg.coreOffset != null) "--core ${cfg.coreOffset}"} \
${optionalString (cfg.coreOffset != null) "--cache ${cfg.coreOffset}"} \
${optionalString (cfg.gpuOffset != null) "--gpu ${cfg.gpuOffset}"} \
${optionalString (cfg.uncoreOffset != null) "--uncore ${cfg.uncoreOffset}"} \
${optionalString (cfg.analogioOffset != null) "--analogio ${cfg.analogioOffset}"} \
${optionalString (cfg.temp != null) "--temp ${cfg.temp}"} \
${optionalString (cfg.tempAc != null) "--temp-ac ${cfg.tempAc}"} \
${optionalString (cfg.tempBat != null) "--temp-bat ${cfg.tempBat}"}
'';
}; };
}; };

View file

@ -6,42 +6,46 @@ let
cfg = config.services.mailman; cfg = config.services.mailman;
pythonEnv = pkgs.python3.withPackages (ps:
[ps.mailman ps.mailman-web]
++ lib.optional cfg.hyperkitty.enable ps.mailman-hyperkitty
++ cfg.extraPythonPackages);
# This deliberately doesn't use recursiveUpdate so users can # This deliberately doesn't use recursiveUpdate so users can
# override the defaults. # override the defaults.
settings = { webSettings = {
DEFAULT_FROM_EMAIL = cfg.siteOwner; DEFAULT_FROM_EMAIL = cfg.siteOwner;
SERVER_EMAIL = cfg.siteOwner; SERVER_EMAIL = cfg.siteOwner;
ALLOWED_HOSTS = [ "localhost" "127.0.0.1" ] ++ cfg.webHosts; ALLOWED_HOSTS = [ "localhost" "127.0.0.1" ] ++ cfg.webHosts;
COMPRESS_OFFLINE = true; COMPRESS_OFFLINE = true;
STATIC_ROOT = "/var/lib/mailman-web/static"; STATIC_ROOT = "/var/lib/mailman-web-static";
MEDIA_ROOT = "/var/lib/mailman-web/media"; MEDIA_ROOT = "/var/lib/mailman-web/media";
LOGGING = {
version = 1;
disable_existing_loggers = true;
handlers.console.class = "logging.StreamHandler";
loggers.django = {
handlers = [ "console" ];
level = "INFO";
};
};
HAYSTACK_CONNECTIONS.default = {
ENGINE = "haystack.backends.whoosh_backend.WhooshEngine";
PATH = "/var/lib/mailman-web/fulltext-index";
};
} // cfg.webSettings; } // cfg.webSettings;
settingsJSON = pkgs.writeText "settings.json" (builtins.toJSON settings); webSettingsJSON = pkgs.writeText "settings.json" (builtins.toJSON webSettings);
mailmanCfg = '' # TODO: Should this be RFC42-ised so that users can set additional options without modifying the module?
[mailman] mtaConfig = pkgs.writeText "mailman-postfix.cfg" ''
site_owner: ${cfg.siteOwner} [postfix]
layout: fhs postmap_command: ${pkgs.postfix}/bin/postmap
transport_file_type: hash
[paths.fhs]
bin_dir: ${pkgs.python3Packages.mailman}/bin
var_dir: /var/lib/mailman
queue_dir: $var_dir/queue
template_dir: $var_dir/templates
log_dir: $var_dir/log
lock_dir: $var_dir/lock
etc_dir: /etc
ext_dir: $etc_dir/mailman.d
pid_file: /run/mailman/master.pid
'' + optionalString cfg.hyperkitty.enable ''
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /var/lib/mailman/mailman-hyperkitty.cfg
''; '';
mailmanCfg = lib.generators.toINI {} cfg.settings;
mailmanHyperkittyCfg = pkgs.writeText "mailman-hyperkitty.cfg" '' mailmanHyperkittyCfg = pkgs.writeText "mailman-hyperkitty.cfg" ''
[general] [general]
# This is your HyperKitty installation, preferably on the localhost. This # This is your HyperKitty installation, preferably on the localhost. This
@ -84,7 +88,7 @@ in {
type = types.package; type = types.package;
default = pkgs.mailman; default = pkgs.mailman;
defaultText = "pkgs.mailman"; defaultText = "pkgs.mailman";
example = "pkgs.mailman.override { archivers = []; }"; example = literalExample "pkgs.mailman.override { archivers = []; }";
description = "Mailman package to use"; description = "Mailman package to use";
}; };
@ -98,18 +102,6 @@ in {
''; '';
}; };
webRoot = mkOption {
type = types.path;
default = "${pkgs.mailman-web}/${pkgs.python3.sitePackages}";
defaultText = "\${pkgs.mailman-web}/\${pkgs.python3.sitePackages}";
description = ''
The web root for the Hyperkity + Postorius apps provided by Mailman.
This variable can be set, of course, but it mainly exists so that site
admins can refer to it in their own hand-written web server
configuration files.
'';
};
webHosts = mkOption { webHosts = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = []; default = [];
@ -124,7 +116,7 @@ in {
webUser = mkOption { webUser = mkOption {
type = types.str; type = types.str;
default = config.services.httpd.user; default = "mailman-web";
description = '' description = ''
User to run mailman-web as User to run mailman-web as
''; '';
@ -138,6 +130,22 @@ in {
''; '';
}; };
serve = {
enable = mkEnableOption "Automatic nginx and uwsgi setup for mailman-web";
};
extraPythonPackages = mkOption {
description = "Packages to add to the python environment used by mailman and mailman-web";
type = types.listOf types.package;
default = [];
};
settings = mkOption {
description = "Settings for mailman.cfg";
type = types.attrsOf (types.attrsOf types.str);
default = {};
};
hyperkitty = { hyperkitty = {
enable = mkEnableOption "the Hyperkitty archiver for Mailman"; enable = mkEnableOption "the Hyperkitty archiver for Mailman";
@ -158,6 +166,35 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.mailman.settings = {
mailman.site_owner = lib.mkDefault cfg.siteOwner;
mailman.layout = "fhs";
"paths.fhs" = {
bin_dir = "${pkgs.python3Packages.mailman}/bin";
var_dir = "/var/lib/mailman";
queue_dir = "$var_dir/queue";
template_dir = "$var_dir/templates";
log_dir = "/var/log/mailman";
lock_dir = "$var_dir/lock";
etc_dir = "/etc";
ext_dir = "$etc_dir/mailman.d";
pid_file = "/run/mailman/master.pid";
};
mta.configuration = lib.mkDefault "${mtaConfig}";
"archiver.hyperkitty" = lib.mkIf cfg.hyperkitty.enable {
class = "mailman_hyperkitty.Archiver";
enable = "yes";
configuration = "/var/lib/mailman/mailman-hyperkitty.cfg";
};
} // (let
loggerNames = ["root" "archiver" "bounce" "config" "database" "debug" "error" "fromusenet" "http" "locks" "mischief" "plugins" "runner" "smtp"];
loggerSectionNames = map (n: "logging.${n}") loggerNames;
in lib.genAttrs loggerSectionNames(name: { handler = "stderr"; })
);
assertions = let assertions = let
inherit (config.services) postfix; inherit (config.services) postfix;
@ -183,7 +220,17 @@ in {
(requirePostfixHash [ "config" "local_recipient_maps" ] "postfix_lmtp") (requirePostfixHash [ "config" "local_recipient_maps" ] "postfix_lmtp")
]; ];
users.users.mailman = { description = "GNU Mailman"; isSystemUser = true; }; users.users.mailman = {
description = "GNU Mailman";
isSystemUser = true;
group = "mailman";
};
users.users.mailman-web = lib.mkIf (cfg.webUser == "mailman-web") {
description = "GNU Mailman web interface";
isSystemUser = true;
group = "mailman";
};
users.groups.mailman = {};
environment.etc."mailman.cfg".text = mailmanCfg; environment.etc."mailman.cfg".text = mailmanCfg;
@ -198,14 +245,35 @@ in {
import json import json
with open('${settingsJSON}') as f: with open('${webSettingsJSON}') as f:
globals().update(json.load(f)) globals().update(json.load(f))
with open('/var/lib/mailman-web/settings_local.json') as f: with open('/var/lib/mailman-web/settings_local.json') as f:
globals().update(json.load(f)) globals().update(json.load(f))
''; '';
environment.systemPackages = [ cfg.package ] ++ (with pkgs; [ mailman-web ]); services.nginx = mkIf cfg.serve.enable {
enable = mkDefault true;
virtualHosts."${lib.head cfg.webHosts}" = {
serverAliases = cfg.webHosts;
locations = {
"/".extraConfig = "uwsgi_pass unix:/run/mailman-web.socket;";
"/static/".alias = webSettings.STATIC_ROOT + "/";
};
};
};
environment.systemPackages = [ (pkgs.buildEnv {
name = "mailman-tools";
# We don't want to pollute the system PATH with a python
# interpreter etc. so let's pick only the stuff we actually
# want from pythonEnv
pathsToLink = ["/bin"];
paths = [pythonEnv];
postBuild = ''
find $out/bin/ -mindepth 1 -not -name "mailman*" -delete
'';
}) ];
services.postfix = { services.postfix = {
recipientDelimiter = "+"; # bake recipient addresses in mail envelopes via VERP recipientDelimiter = "+"; # bake recipient addresses in mail envelopes via VERP
@ -214,25 +282,33 @@ in {
}; };
}; };
systemd.services.mailman = { systemd.sockets.mailman-uwsgi = lib.mkIf cfg.serve.enable {
wantedBy = ["sockets.target"];
before = ["nginx.service"];
socketConfig.ListenStream = "/run/mailman-web.socket";
};
systemd.services = {
mailman = {
description = "GNU Mailman Master Process"; description = "GNU Mailman Master Process";
after = [ "network.target" ]; after = [ "network.target" ];
restartTriggers = [ config.environment.etc."mailman.cfg".source ]; restartTriggers = [ config.environment.etc."mailman.cfg".source ];
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
serviceConfig = { serviceConfig = {
ExecStart = "${cfg.package}/bin/mailman start"; ExecStart = "${pythonEnv}/bin/mailman start";
ExecStop = "${cfg.package}/bin/mailman stop"; ExecStop = "${pythonEnv}/bin/mailman stop";
User = "mailman"; User = "mailman";
Group = "mailman";
Type = "forking"; Type = "forking";
RuntimeDirectory = "mailman"; RuntimeDirectory = "mailman";
LogsDirectory = "mailman";
PIDFile = "/run/mailman/master.pid"; PIDFile = "/run/mailman/master.pid";
}; };
}; };
systemd.services.mailman-settings = { mailman-settings = {
description = "Generate settings files (including secrets) for Mailman"; description = "Generate settings files (including secrets) for Mailman";
before = [ "mailman.service" "mailman-web.service" "hyperkitty.service" "httpd.service" "uwsgi.service" ]; before = [ "mailman.service" "mailman-web-setup.service" "mailman-uwsgi.service" "hyperkitty.service" ];
requiredBy = [ "mailman.service" "mailman-web.service" "hyperkitty.service" "httpd.service" "uwsgi.service" ]; requiredBy = [ "mailman.service" "mailman-web-setup.service" "mailman-uwsgi.service" "hyperkitty.service" ];
path = with pkgs; [ jq ]; path = with pkgs; [ jq ];
script = '' script = ''
mailmanDir=/var/lib/mailman mailmanDir=/var/lib/mailman
@ -241,8 +317,9 @@ in {
mailmanCfg=$mailmanDir/mailman-hyperkitty.cfg mailmanCfg=$mailmanDir/mailman-hyperkitty.cfg
mailmanWebCfg=$mailmanWebDir/settings_local.json mailmanWebCfg=$mailmanWebDir/settings_local.json
install -m 0700 -o mailman -g nogroup -d $mailmanDir install -m 0775 -o mailman -g mailman -d /var/lib/mailman-web-static
install -m 0700 -o ${cfg.webUser} -g nogroup -d $mailmanWebDir install -m 0770 -o mailman -g mailman -d $mailmanDir
install -m 0770 -o ${cfg.webUser} -g mailman -d $mailmanWebDir
if [ ! -e $mailmanWebCfg ]; then if [ ! -e $mailmanWebCfg ]; then
hyperkittyApiKey=$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 64) hyperkittyApiKey=$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 64)
@ -253,142 +330,108 @@ in {
--arg archiver_key "$hyperkittyApiKey" \ --arg archiver_key "$hyperkittyApiKey" \
--arg secret_key "$secretKey" \ --arg secret_key "$secretKey" \
>"$mailmanWebCfgTmp" >"$mailmanWebCfgTmp"
chown ${cfg.webUser} "$mailmanWebCfgTmp" chown root:mailman "$mailmanWebCfgTmp"
mv -n "$mailmanWebCfgTmp" $mailmanWebCfg chmod 440 "$mailmanWebCfgTmp"
mv -n "$mailmanWebCfgTmp" "$mailmanWebCfg"
fi fi
hyperkittyApiKey="$(jq -r .MAILMAN_ARCHIVER_KEY $mailmanWebCfg)" hyperkittyApiKey="$(jq -r .MAILMAN_ARCHIVER_KEY "$mailmanWebCfg")"
mailmanCfgTmp=$(mktemp) mailmanCfgTmp=$(mktemp)
sed "s/@API_KEY@/$hyperkittyApiKey/g" ${mailmanHyperkittyCfg} >"$mailmanCfgTmp" sed "s/@API_KEY@/$hyperkittyApiKey/g" ${mailmanHyperkittyCfg} >"$mailmanCfgTmp"
chown mailman "$mailmanCfgTmp" chown mailman:mailman "$mailmanCfgTmp"
mv "$mailmanCfgTmp" $mailmanCfg mv "$mailmanCfgTmp" "$mailmanCfg"
''; '';
serviceConfig = {
Type = "oneshot";
# RemainAfterExit makes restartIfChanged work for this service, so
# downstream services will get updated automatically when things like
# services.mailman.hyperkitty.baseUrl change. Otherwise users have to
# restart things manually, which is confusing.
RemainAfterExit = "yes";
};
}; };
systemd.services.mailman-web = { mailman-web-setup = {
description = "Init Postorius DB"; description = "Prepare mailman-web files and database";
before = [ "httpd.service" "uwsgi.service" ]; before = [ "uwsgi.service" "mailman-uwsgi.service" ];
requiredBy = [ "httpd.service" "uwsgi.service" ]; requiredBy = [ "mailman-uwsgi.service" ];
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ]; restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
script = '' script = ''
${pkgs.mailman-web}/bin/mailman-web migrate [[ -e "${webSettings.STATIC_ROOT}" ]] && find "${webSettings.STATIC_ROOT}/" -mindepth 1 -delete
rm -rf static ${pythonEnv}/bin/mailman-web migrate
${pkgs.mailman-web}/bin/mailman-web collectstatic ${pythonEnv}/bin/mailman-web collectstatic
${pkgs.mailman-web}/bin/mailman-web compress ${pythonEnv}/bin/mailman-web compress
''; '';
serviceConfig = { serviceConfig = {
User = cfg.webUser; User = cfg.webUser;
Group = "mailman";
Type = "oneshot"; Type = "oneshot";
# Similar to mailman-settings.service, this makes restartTriggers work
# properly for this service.
RemainAfterExit = "yes";
WorkingDirectory = "/var/lib/mailman-web"; WorkingDirectory = "/var/lib/mailman-web";
}; };
}; };
systemd.services.mailman-daily = { mailman-uwsgi = mkIf cfg.serve.enable (let
uwsgiConfig.uwsgi = {
type = "normal";
plugins = ["python3"];
home = pythonEnv;
module = "mailman_web.wsgi";
};
uwsgiConfigFile = pkgs.writeText "uwsgi-mailman.json" (builtins.toJSON uwsgiConfig);
in {
wantedBy = ["multi-user.target"];
requires = ["mailman-uwsgi.socket" "mailman-web-setup.service"];
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = {
# Since the mailman-web settings.py obstinately creates a logs
# dir in the cwd, change to the (writable) runtime directory before
# starting uwsgi.
ExecStart = "${pkgs.coreutils}/bin/env -C $RUNTIME_DIRECTORY ${pkgs.uwsgi.override { plugins = ["python3"]; }}/bin/uwsgi --json ${uwsgiConfigFile}";
User = cfg.webUser;
Group = "mailman";
RuntimeDirectory = "mailman-uwsgi";
};
});
mailman-daily = {
description = "Trigger daily Mailman events"; description = "Trigger daily Mailman events";
startAt = "daily"; startAt = "daily";
restartTriggers = [ config.environment.etc."mailman.cfg".source ]; restartTriggers = [ config.environment.etc."mailman.cfg".source ];
serviceConfig = { serviceConfig = {
ExecStart = "${cfg.package}/bin/mailman digests --send"; ExecStart = "${pythonEnv}/bin/mailman digests --send";
User = "mailman"; User = "mailman";
Group = "mailman";
}; };
}; };
systemd.services.hyperkitty = { hyperkitty = lib.mkIf cfg.hyperkitty.enable {
inherit (cfg.hyperkitty) enable;
description = "GNU Hyperkitty QCluster Process"; description = "GNU Hyperkitty QCluster Process";
after = [ "network.target" ]; after = [ "network.target" ];
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ]; restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
wantedBy = [ "mailman.service" "multi-user.target" ]; wantedBy = [ "mailman.service" "multi-user.target" ];
serviceConfig = { serviceConfig = {
ExecStart = "${pkgs.mailman-web}/bin/mailman-web qcluster"; ExecStart = "${pythonEnv}/bin/mailman-web qcluster";
User = cfg.webUser; User = cfg.webUser;
Group = "mailman";
WorkingDirectory = "/var/lib/mailman-web"; WorkingDirectory = "/var/lib/mailman-web";
}; };
}; };
} // flip lib.mapAttrs' {
systemd.services.hyperkitty-minutely = { "minutely" = "minutely";
inherit (cfg.hyperkitty) enable; "quarter_hourly" = "*:00/15";
description = "Trigger minutely Hyperkitty events"; "hourly" = "hourly";
startAt = "minutely"; "daily" = "daily";
"weekly" = "weekly";
"yearly" = "yearly";
} (name: startAt:
lib.nameValuePair "hyperkitty-${name}" (lib.mkIf cfg.hyperkitty.enable {
description = "Trigger ${name} Hyperkitty events";
inherit startAt;
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ]; restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = { serviceConfig = {
ExecStart = "${pkgs.mailman-web}/bin/mailman-web runjobs minutely"; ExecStart = "${pythonEnv}/bin/mailman-web runjobs minutely";
User = cfg.webUser;
WorkingDirectory = "/var/lib/mailman-web";
};
};
systemd.services.hyperkitty-quarter-hourly = {
inherit (cfg.hyperkitty) enable;
description = "Trigger quarter-hourly Hyperkitty events";
startAt = "*:00/15";
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = {
ExecStart = "${pkgs.mailman-web}/bin/mailman-web runjobs quarter_hourly";
User = cfg.webUser;
WorkingDirectory = "/var/lib/mailman-web";
};
};
systemd.services.hyperkitty-hourly = {
inherit (cfg.hyperkitty) enable;
description = "Trigger hourly Hyperkitty events";
startAt = "hourly";
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = {
ExecStart = "${pkgs.mailman-web}/bin/mailman-web runjobs hourly";
User = cfg.webUser;
WorkingDirectory = "/var/lib/mailman-web";
};
};
systemd.services.hyperkitty-daily = {
inherit (cfg.hyperkitty) enable;
description = "Trigger daily Hyperkitty events";
startAt = "daily";
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = {
ExecStart = "${pkgs.mailman-web}/bin/mailman-web runjobs daily";
User = cfg.webUser;
WorkingDirectory = "/var/lib/mailman-web";
};
};
systemd.services.hyperkitty-weekly = {
inherit (cfg.hyperkitty) enable;
description = "Trigger weekly Hyperkitty events";
startAt = "weekly";
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = {
ExecStart = "${pkgs.mailman-web}/bin/mailman-web runjobs weekly";
User = cfg.webUser;
WorkingDirectory = "/var/lib/mailman-web";
};
};
systemd.services.hyperkitty-yearly = {
inherit (cfg.hyperkitty) enable;
description = "Trigger yearly Hyperkitty events";
startAt = "yearly";
restartTriggers = [ config.environment.etc."mailman3/settings.py".source ];
serviceConfig = {
ExecStart = "${pkgs.mailman-web}/bin/mailman-web runjobs yearly";
User = cfg.webUser; User = cfg.webUser;
Group = "mailman";
WorkingDirectory = "/var/lib/mailman-web"; WorkingDirectory = "/var/lib/mailman-web";
}; };
}));
}; };
meta = {
maintainers = with lib.maintainers; [ lheckemann ];
doc = ./mailman.xml;
}; };
} }

View file

@ -0,0 +1,59 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
version="5.0"
xml:id="module-services-mailman">
<title>Mailman</title>
<para>
<link xlink:href="https://www.list.org">Mailman</link> is free
software for managing electronic mail discussion and e-newsletter
lists. Mailman and its web interface can be configured using the
corresponding NixOS module. Note that this service is best used with
an existing, securely configured Postfix setup, as it does not automatically configure this.
</para>
<section xml:id="module-services-mailman-basic-usage">
<title>Basic usage</title>
<para>
For a basic configuration, the following settings are suggested:
<programlisting>{ config, ... }: {
services.postfix = {
enable = true;
relayDomains = ["hash:/var/lib/mailman/data/postfix_domains"];
sslCert = config.security.acme.certs."lists.example.org".directory + "/full.pem";
sslKey = config.security.acme.certs."lists.example.org".directory + "/key.pem";
config = {
transport_maps = ["hash:/var/lib/mailman/data/postfix_lmtp"];
local_recipient_maps = ["hash:/var/lib/mailman/data/postfix_lmtp"];
};
};
services.mailman = {
<link linkend="opt-services.mailman.enable">enable</link> = true;
<link linkend="opt-services.mailman.serve.enable">serve.enable</link> = true;
<link linkend="opt-services.mailman.hyperkitty.enable">hyperkitty.enable</link> = true;
<link linkend="opt-services.mailman.hyperkitty.enable">webHosts</link> = ["lists.example.org"];
<link linkend="opt-services.mailman.hyperkitty.enable">siteOwner</link> = "mailman@example.org";
};
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">services.nginx.virtualHosts."lists.example.org".enableACME</link> = true;
<link linkend="opt-services.mailman.hyperkitty.enable">networking.firewall.allowedTCPPorts</link> = [ 25 80 443 ];
}</programlisting>
</para>
<para>
DNS records will also be required:
<itemizedlist>
<listitem><para><literal>AAAA</literal> and <literal>A</literal> records pointing to the host in question, in order for browsers to be able to discover the address of the web server;</para></listitem>
<listitem><para>An <literal>MX</literal> record pointing to a domain name at which the host is reachable, in order for other mail servers to be able to deliver emails to the mailing lists it hosts.</para></listitem>
</itemizedlist>
</para>
<para>
After this has been done and appropriate DNS records have been
set up, the Postorius mailing list manager and the Hyperkitty
archive browser will be available at
https://lists.example.org/. Note that this setup is not
sufficient to deliver emails to most email providers nor to
avoid spam -- a number of additional measures for authenticating
incoming and outgoing mails, such as SPF, DMARC and DKIM are
necessary, but outside the scope of the Mailman module.
</para>
</section>
</chapter>

View file

@ -240,6 +240,7 @@ in {
''); '');
serviceConfig = { serviceConfig = {
ExecStart = "${package}/bin/hass --config '${cfg.configDir}'"; ExecStart = "${package}/bin/hass --config '${cfg.configDir}'";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
User = "hass"; User = "hass";
Group = "hass"; Group = "hass";
Restart = "on-failure"; Restart = "on-failure";

View file

@ -39,6 +39,7 @@ let
"node" "node"
"postfix" "postfix"
"postgres" "postgres"
"redis"
"rspamd" "rspamd"
"snmp" "snmp"
"surfboard" "surfboard"
@ -171,15 +172,6 @@ in
(opt: lib.mkRemovedOptionModule [ "services" "prometheus" "${opt}" ] '' (opt: lib.mkRemovedOptionModule [ "services" "prometheus" "${opt}" ] ''
The prometheus exporters are now configured using `services.prometheus.exporters'. The prometheus exporters are now configured using `services.prometheus.exporters'.
See the 18.03 release notes for more information. See the 18.03 release notes for more information.
'' ))
++ (lib.forEach [ "enable" "substitutions" "preset" ]
(opt: lib.mkRemovedOptionModule [ "fonts" "fontconfig" "ultimate" "${opt}" ] ''
The fonts.fontconfig.ultimate module and configuration is obsolete.
The repository has since been archived and activity has ceased.
https://github.com/bohoomil/fontconfig-ultimate/issues/171.
No action should be needed for font configuration, as the fonts.fontconfig
module is already used by default.
'' )); '' ));
options.services.prometheus.exporters = mkOption { options.services.prometheus.exporters = mkOption {

View file

@ -0,0 +1,19 @@
{ config, lib, pkgs, options }:
with lib;
let
cfg = config.services.prometheus.exporters.redis;
in
{
port = 9121;
serviceOpts = {
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-redis-exporter}/bin/redis_exporter \
-web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
${concatStringsSep " \\\n " cfg.extraFlags}
'';
};
};
}

View file

@ -32,7 +32,10 @@ in {
environment.systemPackages = [ pkgs.tuptime ]; environment.systemPackages = [ pkgs.tuptime ];
users.users.tuptime.description = "tuptime database owner"; users = {
groups._tuptime.members = [ "_tuptime" ];
users._tuptime.description = "tuptime database owner";
};
systemd = { systemd = {
services = { services = {
@ -45,7 +48,7 @@ in {
serviceConfig = { serviceConfig = {
StateDirectory = "tuptime"; StateDirectory = "tuptime";
Type = "oneshot"; Type = "oneshot";
User = "tuptime"; User = "_tuptime";
RemainAfterExit = true; RemainAfterExit = true;
ExecStart = "${pkgs.tuptime}/bin/tuptime -x"; ExecStart = "${pkgs.tuptime}/bin/tuptime -x";
ExecStop = "${pkgs.tuptime}/bin/tuptime -xg"; ExecStop = "${pkgs.tuptime}/bin/tuptime -xg";
@ -57,7 +60,7 @@ in {
serviceConfig = { serviceConfig = {
StateDirectory = "tuptime"; StateDirectory = "tuptime";
Type = "oneshot"; Type = "oneshot";
User = "tuptime"; User = "_tuptime";
ExecStart = "${pkgs.tuptime}/bin/tuptime -x"; ExecStart = "${pkgs.tuptime}/bin/tuptime -x";
}; };
}; };

View file

@ -12,6 +12,19 @@ let
(optionalString (cfg.defaultMode == "norouting") "--routing=none") (optionalString (cfg.defaultMode == "norouting") "--routing=none")
] ++ cfg.extraFlags); ] ++ cfg.extraFlags);
splitMulitaddr = addrRaw: lib.tail (lib.splitString "/" addrRaw);
multiaddrToListenStream = addrRaw: let
addr = splitMulitaddr addrRaw;
s = builtins.elemAt addr;
in if s 0 == "ip4" && s 2 == "tcp"
then "${s 1}:${s 3}"
else if s 0 == "ip6" && s 2 == "tcp"
then "[${s 1}]:${s 3}"
else if s 0 == "unix"
then "/${lib.concatStringsSep "/" (lib.tail addr)}"
else null; # not valid for listen stream, skip
in { in {
###### interface ###### interface
@ -80,7 +93,10 @@ in {
swarmAddress = mkOption { swarmAddress = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = [ "/ip4/0.0.0.0/tcp/4001" "/ip6/::/tcp/4001" ]; default = [
"/ip4/0.0.0.0/tcp/4001"
"/ip6/::/tcp/4001"
];
description = "Where IPFS listens for incoming p2p connections"; description = "Where IPFS listens for incoming p2p connections";
}; };
@ -250,14 +266,18 @@ in {
systemd.sockets.ipfs-gateway = { systemd.sockets.ipfs-gateway = {
wantedBy = [ "sockets.target" ]; wantedBy = [ "sockets.target" ];
socketConfig.ListenStream = [ "" ] socketConfig.ListenStream = let
++ lib.optional (cfg.gatewayAddress == opt.gatewayAddress.default) [ "127.0.0.1:8080" "[::1]:8080" ]; fromCfg = multiaddrToListenStream cfg.gatewayAddress;
in [ "" ] ++ lib.optional (fromCfg != null) fromCfg;
}; };
systemd.sockets.ipfs-api = { systemd.sockets.ipfs-api = {
wantedBy = [ "sockets.target" ]; wantedBy = [ "sockets.target" ];
socketConfig.ListenStream = [ "" "%t/ipfs.sock" ] # We also include "%t/ipfs.sock" because tere is no way to put the "%t"
++ lib.optional (cfg.apiAddress == opt.apiAddress.default) [ "127.0.0.1:5001" "[::1]:5001" ]; # in the multiaddr.
socketConfig.ListenStream = let
fromCfg = multiaddrToListenStream cfg.apiAddress;
in [ "" "%t/ipfs.sock" ] ++ lib.optional (fromCfg != null) fromCfg;
}; };
}; };

View file

@ -109,8 +109,8 @@ in
httpListenAddr = mkOption { httpListenAddr = mkOption {
type = types.str; type = types.str;
default = "0.0.0.0"; default = "[::1]";
example = "1.2.3.4"; example = "0.0.0.0";
description = '' description = ''
HTTP address to bind to. HTTP address to bind to.
''; '';
@ -206,16 +206,16 @@ in
If you would like to be able to modify the contents of this If you would like to be able to modify the contents of this
directories, it is recommended that you make your user a directories, it is recommended that you make your user a
member of the <literal>resilio</literal> group. member of the <literal>rslsync</literal> group.
Directories in this list should be in the Directories in this list should be in the
<literal>resilio</literal> group, and that group must have <literal>rslsync</literal> group, and that group must have
write access to the directory. It is also recommended that write access to the directory. It is also recommended that
<literal>chmod g+s</literal> is applied to the directory <literal>chmod g+s</literal> is applied to the directory
so that any sub directories created will also belong to so that any sub directories created will also belong to
the <literal>resilio</literal> group. Also, the <literal>rslsync</literal> group. Also,
<literal>setfacl -d -m group:resilio:rwx</literal> and <literal>setfacl -d -m group:rslsync:rwx</literal> and
<literal>setfacl -m group:resilio:rwx</literal> should also <literal>setfacl -m group:rslsync:rwx</literal> should also
be applied so that the sub directories are writable by be applied so that the sub directories are writable by
the group. the group.
''; '';

View file

@ -0,0 +1,158 @@
{ config, lib, pkgs, ... }:
let
cfg = config.services.wasabibackend;
inherit (lib) mkEnableOption mkIf mkOption optionalAttrs optionalString types;
confOptions = {
BitcoinRpcConnectionString = "${cfg.rpc.user}:${cfg.rpc.password}";
} // optionalAttrs (cfg.network == "mainnet") {
Network = "Main";
MainNetBitcoinP2pEndPoint = "${cfg.endpoint.ip}:${toString cfg.endpoint.port}";
MainNetBitcoinCoreRpcEndPoint = "${cfg.rpc.ip}:${toString cfg.rpc.port}";
} // optionalAttrs (cfg.network == "testnet") {
Network = "TestNet";
TestNetBitcoinP2pEndPoint = "${cfg.endpoint.ip}:${toString cfg.endpoint.port}";
TestNetBitcoinCoreRpcEndPoint = "${cfg.rpc.ip}:${toString cfg.rpc.port}";
} // optionalAttrs (cfg.network == "regtest") {
Network = "RegTest";
RegTestBitcoinP2pEndPoint = "${cfg.endpoint.ip}:${toString cfg.endpoint.port}";
RegTestBitcoinCoreRpcEndPoint = "${cfg.rpc.ip}:${toString cfg.rpc.port}";
};
configFile = pkgs.writeText "wasabibackend.conf" (builtins.toJSON confOptions);
in {
options = {
services.wasabibackend = {
enable = mkEnableOption "Wasabi backend service";
dataDir = mkOption {
type = types.path;
default = "/var/lib/wasabibackend";
description = "The data directory for the Wasabi backend node.";
};
customConfigFile = mkOption {
type = types.nullOr types.path;
default = null;
description = "Defines the path to a custom configuration file that is copied to the user's directory. Overrides any config options.";
};
network = mkOption {
type = types.enum [ "mainnet" "testnet" "regtest" ];
default = "mainnet";
description = "The network to use for the Wasabi backend service.";
};
endpoint = {
ip = mkOption {
type = types.str;
default = "127.0.0.1";
description = "IP address for P2P connection to bitcoind.";
};
port = mkOption {
type = types.port;
default = 8333;
description = "Port for P2P connection to bitcoind.";
};
};
rpc = {
ip = mkOption {
type = types.str;
default = "127.0.0.1";
description = "IP address for RPC connection to bitcoind.";
};
port = mkOption {
type = types.port;
default = 8332;
description = "Port for RPC connection to bitcoind.";
};
user = mkOption {
type = types.str;
default = "bitcoin";
description = "RPC user for the bitcoin endpoint.";
};
password = mkOption {
type = types.str;
default = "password";
description = "RPC password for the bitcoin endpoint. Warning: this is stored in cleartext in the Nix store! Use <literal>configFile</literal> or <literal>passwordFile</literal> if needed.";
};
passwordFile = mkOption {
type = types.nullOr types.path;
default = null;
description = "File that contains the password of the RPC user.";
};
};
user = mkOption {
type = types.str;
default = "wasabibackend";
description = "The user as which to run the wasabibackend node.";
};
group = mkOption {
type = types.str;
default = cfg.user;
description = "The group as which to run the wasabibackend node.";
};
};
};
config = mkIf cfg.enable {
systemd.tmpfiles.rules = [
"d '${cfg.dataDir}' 0770 '${cfg.user}' '${cfg.group}' - -"
];
systemd.services.wasabibackend = {
description = "wasabibackend server";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
environment = {
DOTNET_PRINT_TELEMETRY_MESSAGE = "false";
DOTNET_CLI_TELEMETRY_OPTOUT = "true";
};
preStart = ''
mkdir -p ${cfg.dataDir}/.walletwasabi/backend
${if cfg.customConfigFile != null then ''
cp -v ${cfg.customConfigFile} ${cfg.dataDir}/.walletwasabi/backend/Config.json
'' else ''
cp -v ${configFile} ${cfg.dataDir}/.walletwasabi/backend/Config.json
${optionalString (cfg.rpc.passwordFile != null) ''
CONFIGTMP=$(mktemp)
cat ${cfg.dataDir}/.walletwasabi/backend/Config.json | ${pkgs.jq}/bin/jq --arg rpconnection "${cfg.rpc.user}:$(cat "${cfg.rpc.passwordFile}")" '. + { BitcoinRpcConnectionString: $rpconnection }' > $CONFIGTMP
mv $CONFIGTMP ${cfg.dataDir}/.walletwasabi/backend/Config.json
''}
''}
chmod ug+w ${cfg.dataDir}/.walletwasabi/backend/Config.json
'';
serviceConfig = {
User = cfg.user;
Group = cfg.group;
ExecStart = "${pkgs.wasabibackend}/bin/WasabiBackend";
ProtectSystem = "full";
};
};
users.users.${cfg.user} = {
name = cfg.user;
group = cfg.group;
description = "wasabibackend daemon user";
home = cfg.dataDir;
isSystemUser = true;
};
users.groups.${cfg.group} = {};
};
}

View file

@ -17,6 +17,10 @@ let
lib.generators.toGitINI cfg.settings lib.generators.toGitINI cfg.settings
); );
replicationConfig = pkgs.writeText "replication.conf" (
lib.generators.toGitINI cfg.replicationSettings
);
# Wrap the gerrit java with all the java options so it can be called # Wrap the gerrit java with all the java options so it can be called
# like a normal CLI app # like a normal CLI app
gerrit-cli = pkgs.writeShellScriptBin "gerrit" '' gerrit-cli = pkgs.writeShellScriptBin "gerrit" ''
@ -106,6 +110,15 @@ in
''; '';
}; };
replicationSettings = mkOption {
type = gitIniType;
default = {};
description = ''
Replication configuration. This will be generated to the
<literal>etc/replication.config</literal> file.
'';
};
plugins = mkOption { plugins = mkOption {
type = types.listOf types.package; type = types.listOf types.package;
default = []; default = [];
@ -138,6 +151,13 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
assertions = [
{
assertion = cfg.replicationSettings != {} -> elem "replication" cfg.builtinPlugins;
message = "Gerrit replicationSettings require enabling the replication plugin";
}
];
services.gerrit.settings = { services.gerrit.settings = {
cache.directory = "/var/cache/gerrit"; cache.directory = "/var/cache/gerrit";
container.heapLimit = cfg.jvmHeapLimit; container.heapLimit = cfg.jvmHeapLimit;
@ -194,6 +214,7 @@ in
# copy the config, keep it mutable because Gerrit # copy the config, keep it mutable because Gerrit
ln -sfv ${gerritConfig} etc/gerrit.config ln -sfv ${gerritConfig} etc/gerrit.config
ln -sfv ${replicationConfig} etc/replication.config
# install the plugins # install the plugins
rm -rf plugins rm -rf plugins

View file

@ -69,7 +69,7 @@ in {
package = mkOption { package = mkOption {
type = types.package; type = types.package;
description = "Which package to use for the Nextcloud instance."; description = "Which package to use for the Nextcloud instance.";
relatedPackages = [ "nextcloud17" "nextcloud18" ]; relatedPackages = [ "nextcloud17" "nextcloud18" "nextcloud19" ];
}; };
maxUploadSize = mkOption { maxUploadSize = mkOption {
@ -303,6 +303,14 @@ in {
''; '';
}; };
}; };
occ = mkOption {
type = types.package;
default = occ;
internal = true;
description = ''
The nextcloud-occ program preconfigured to target this Nextcloud instance.
'';
};
}; };
config = mkIf cfg.enable (mkMerge [ config = mkIf cfg.enable (mkMerge [
@ -336,7 +344,16 @@ in {
server, and wait until the upgrade to 17 is finished. server, and wait until the upgrade to 17 is finished.
Then, set `services.nextcloud.package` to `pkgs.nextcloud18` to upgrade to Then, set `services.nextcloud.package` to `pkgs.nextcloud18` to upgrade to
Nextcloud version 18. Nextcloud version 18. Please note that Nextcloud 19 is already out and it's
recommended to upgrade to nextcloud19 after that.
'')
++ (optional (versionOlder cfg.package.version "19") ''
A legacy Nextcloud install (from before NixOS 20.09/unstable) may be installed.
If/After nextcloud18 is installed successfully, you can safely upgrade to
nextcloud19. If not, please upgrade to nextcloud18 first since Nextcloud doesn't
support upgrades that skip multiple versions (i.e. an upgrade from 17 to 19 isn't
possible, but an upgrade from 18 to 19).
''); '');
services.nextcloud.package = with pkgs; services.nextcloud.package = with pkgs;
@ -348,7 +365,8 @@ in {
`pkgs.nextcloud`. `pkgs.nextcloud`.
'' ''
else if versionOlder stateVersion "20.03" then nextcloud17 else if versionOlder stateVersion "20.03" then nextcloud17
else nextcloud18 else if versionOlder stateVersion "20.09" then nextcloud18
else nextcloud19
); );
} }
@ -360,6 +378,11 @@ in {
}; };
systemd.services = { systemd.services = {
# When upgrading the Nextcloud package, Nextcloud can report errors such as
# "The files of the app [all apps in /var/lib/nextcloud/apps] were not replaced correctly"
# Restarting phpfpm on Nextcloud package update fixes these issues (but this is a workaround).
phpfpm-nextcloud.restartTriggers = [ cfg.package ];
nextcloud-setup = let nextcloud-setup = let
c = cfg.config; c = cfg.config;
writePhpArrary = a: "[${concatMapStringsSep "," (val: ''"${toString val}"'') a}]"; writePhpArrary = a: "[${concatMapStringsSep "," (val: ''"${toString val}"'') a}]";

View file

@ -161,5 +161,11 @@
}; };
}</programlisting> }</programlisting>
</para> </para>
<para>
Ideally we should make sure that it's possible to jump two NixOS versions forward:
i.e. the warnings and the logic in the module should guard a user to upgrade from a
Nextcloud on e.g. 19.09 to a Nextcloud on 20.09.
</para>
</section> </section>
</chapter> </chapter>

View file

@ -20,10 +20,10 @@ let
in valueType; in valueType;
dynamicConfigFile = if cfg.dynamicConfigFile == null then dynamicConfigFile = if cfg.dynamicConfigFile == null then
pkgs.runCommand "config.toml" { pkgs.runCommand "config.toml" {
buildInputs = [ pkgs.remarshal ]; buildInputs = [ pkgs.yj ];
preferLocalBuild = true; preferLocalBuild = true;
} '' } ''
remarshal -if json -of toml \ yj -jt -i \
< ${ < ${
pkgs.writeText "dynamic_config.json" pkgs.writeText "dynamic_config.json"
(builtins.toJSON cfg.dynamicConfigOptions) (builtins.toJSON cfg.dynamicConfigOptions)

View file

@ -1,4 +1,7 @@
#! @bash@/bin/sh -e #! @bash@/bin/sh
# This can end up being called disregarding the shebang.
set -e
shopt -s nullglob shopt -s nullglob

View file

@ -47,9 +47,9 @@ def write_loader_conf(profile, generation):
if "@timeout@" != "": if "@timeout@" != "":
f.write("timeout @timeout@\n") f.write("timeout @timeout@\n")
if profile: if profile:
f.write("default nixos-%s-generation-%d.conf\n".format(profile, generation)) f.write("default nixos-%s-generation-%d.conf\n" % (profile, generation))
else: else:
f.write("default nixos-generation-%d.conf\n".format(generation)) f.write("default nixos-generation-%d.conf\n" % (generation))
if not @editor@: if not @editor@:
f.write("editor 0\n"); f.write("editor 0\n");
f.write("console-mode @consoleMode@\n"); f.write("console-mode @consoleMode@\n");

View file

@ -233,6 +233,7 @@ in rec {
path = mkOption { path = mkOption {
default = []; default = [];
type = with types; listOf (oneOf [ package str ]);
apply = ps: "${makeBinPath ps}:${makeSearchPathOutput "bin" "sbin" ps}"; apply = ps: "${makeBinPath ps}:${makeSearchPathOutput "bin" "sbin" ps}";
description = '' description = ''
Packages added to the service's <envar>PATH</envar> Packages added to the service's <envar>PATH</envar>

View file

@ -128,7 +128,10 @@ in
Nice = 19; Nice = 19;
IOSchedulingClass = "idle"; IOSchedulingClass = "idle";
ExecStart = "${pkgs.btrfs-progs}/bin/btrfs scrub start -B ${fs}"; ExecStart = "${pkgs.btrfs-progs}/bin/btrfs scrub start -B ${fs}";
ExecStop = "${pkgs.btrfs-progs}/bin/btrfs scrub cancel ${fs}"; # if the service is stopped before scrub end, cancel it
ExecStop = pkgs.writeShellScript "btrfs-scrub-maybe-cancel" ''
(${pkgs.btrfs-progs}/bin/btrfs scrub status ${fs} | ${pkgs.gnugrep}/bin/grep finished) || ${pkgs.btrfs-progs}/bin/btrfs scrub cancel ${fs}
'';
}; };
}; };
in listToAttrs (map scrubService cfgScrub.fileSystems); in listToAttrs (map scrubService cfgScrub.fileSystems);

View file

@ -236,6 +236,7 @@ in
nginx-pubhtml = handleTest ./nginx-pubhtml.nix {}; nginx-pubhtml = handleTest ./nginx-pubhtml.nix {};
nginx-sandbox = handleTestOn ["x86_64-linux"] ./nginx-sandbox.nix {}; nginx-sandbox = handleTestOn ["x86_64-linux"] ./nginx-sandbox.nix {};
nginx-sso = handleTest ./nginx-sso.nix {}; nginx-sso = handleTest ./nginx-sso.nix {};
nginx-variants = handleTest ./nginx-variants.nix {};
nix-ssh-serve = handleTest ./nix-ssh-serve.nix {}; nix-ssh-serve = handleTest ./nix-ssh-serve.nix {};
nixos-generate-config = handleTest ./nixos-generate-config.nix {}; nixos-generate-config = handleTest ./nixos-generate-config.nix {};
novacomd = handleTestOn ["x86_64-linux"] ./novacomd.nix {}; novacomd = handleTestOn ["x86_64-linux"] ./novacomd.nix {};
@ -345,6 +346,7 @@ in
vault = handleTest ./vault.nix {}; vault = handleTest ./vault.nix {};
victoriametrics = handleTest ./victoriametrics.nix {}; victoriametrics = handleTest ./victoriametrics.nix {};
virtualbox = handleTestOn ["x86_64-linux"] ./virtualbox.nix {}; virtualbox = handleTestOn ["x86_64-linux"] ./virtualbox.nix {};
wasabibackend = handleTest ./wasabibackend.nix {};
wireguard = handleTest ./wireguard {}; wireguard = handleTest ./wireguard {};
wordpress = handleTest ./wordpress.nix {}; wordpress = handleTest ./wordpress.nix {};
xandikos = handleTest ./xandikos.nix {}; xandikos = handleTest ./xandikos.nix {};

View file

@ -42,6 +42,20 @@ import ./make-test-python.nix ({ pkgs, ... }: {
"docker rmi ${examples.nix.imageName}", "docker rmi ${examples.nix.imageName}",
) )
with subtest("The nix binary symlinks are intact"):
docker.succeed(
"docker load --input='${examples.nix}'",
"docker run --rm ${examples.nix.imageName} ${pkgs.bash}/bin/bash -c 'test nix == $(readlink ${pkgs.nix}/bin/nix-daemon)'",
"docker rmi ${examples.nix.imageName}",
)
with subtest("The nix binary symlinks are intact when the image is layered"):
docker.succeed(
"docker load --input='${examples.nixLayered}'",
"docker run --rm ${examples.nixLayered.imageName} ${pkgs.bash}/bin/bash -c 'test nix == $(readlink ${pkgs.nix}/bin/nix-daemon)'",
"docker rmi ${examples.nixLayered.imageName}",
)
with subtest("The pullImage tool works"): with subtest("The pullImage tool works"):
docker.succeed( docker.succeed(
"docker load --input='${examples.nixFromDockerHub}'", "docker load --input='${examples.nixFromDockerHub}'",

View file

@ -2,28 +2,18 @@ import ./make-test-python.nix ({ pkgs, ... }:
let let
configDir = "/var/lib/foobar"; configDir = "/var/lib/foobar";
apiPassword = "some_secret"; mqttPassword = "secret";
mqttPassword = "another_secret";
hassCli = "hass-cli --server http://hass:8123 --password '${apiPassword}'";
in { in {
name = "home-assistant"; name = "home-assistant";
meta = with pkgs.stdenv.lib; { meta = with pkgs.stdenv.lib; {
maintainers = with maintainers; [ dotlambda ]; maintainers = with maintainers; [ dotlambda ];
}; };
nodes = { nodes.hass = { pkgs, ... }: {
hass = environment.systemPackages = with pkgs; [ mosquitto ];
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
mosquitto home-assistant-cli
];
services.home-assistant = { services.home-assistant = {
inherit configDir; inherit configDir;
enable = true; enable = true;
package = pkgs.home-assistant.override {
extraPackages = ps: with ps; [ hbmqtt ];
};
config = { config = {
homeassistant = { homeassistant = {
name = "Home"; name = "Home";
@ -31,41 +21,35 @@ in {
latitude = "0.0"; latitude = "0.0";
longitude = "0.0"; longitude = "0.0";
elevation = 0; elevation = 0;
auth_providers = [
{
type = "legacy_api_password";
api_password = apiPassword;
}
];
}; };
frontend = { }; frontend = {};
mqtt = { # Use hbmqtt as broker # uses embedded mqtt broker
password = mqttPassword; mqtt.password = mqttPassword;
}; binary_sensor = [{
binary_sensor = [
{
platform = "mqtt"; platform = "mqtt";
state_topic = "home-assistant/test"; state_topic = "home-assistant/test";
payload_on = "let_there_be_light"; payload_on = "let_there_be_light";
payload_off = "off"; payload_off = "off";
} }];
]; logger = {
default = "info";
logs."homeassistant.components.mqtt" = "debug";
};
}; };
lovelaceConfig = { lovelaceConfig = {
title = "My Awesome Home"; title = "My Awesome Home";
views = [ { views = [{
title = "Example"; title = "Example";
cards = [ { cards = [{
type = "markdown"; type = "markdown";
title = "Lovelace"; title = "Lovelace";
content = "Welcome to your **Lovelace UI**."; content = "Welcome to your **Lovelace UI**.";
} ]; }];
} ]; }];
}; };
lovelaceConfigWritable = true; lovelaceConfigWritable = true;
}; };
}; };
};
testScript = '' testScript = ''
start_all() start_all()
@ -77,28 +61,13 @@ in {
with subtest("Check that Home Assistant's web interface and API can be reached"): with subtest("Check that Home Assistant's web interface and API can be reached"):
hass.wait_for_open_port(8123) hass.wait_for_open_port(8123)
hass.succeed("curl --fail http://localhost:8123/lovelace") hass.succeed("curl --fail http://localhost:8123/lovelace")
assert "API running" in hass.succeed(
"curl --fail -H 'x-ha-access: ${apiPassword}' http://localhost:8123/api/"
)
with subtest("Toggle a binary sensor using MQTT"): with subtest("Toggle a binary sensor using MQTT"):
assert '"state": "off"' in hass.succeed( # wait for broker to become available
"curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
)
hass.wait_until_succeeds( hass.wait_until_succeeds(
"mosquitto_pub -V mqttv311 -t home-assistant/test -u homeassistant -P '${mqttPassword}' -m let_there_be_light" "mosquitto_sub -V mqttv311 -t home-assistant/test -u homeassistant -P '${mqttPassword}' -W 1 -t '*'"
)
assert '"state": "on"' in hass.succeed(
"curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
)
with subtest("Toggle a binary sensor using hass-cli"):
assert '"state": "on"' in hass.succeed(
"${hassCli} --output json state get binary_sensor.mqtt_binary_sensor"
) )
hass.succeed( hass.succeed(
"${hassCli} state edit binary_sensor.mqtt_binary_sensor --json='{\"state\": \"off\"}'" "mosquitto_pub -V mqttv311 -t home-assistant/test -u homeassistant -P '${mqttPassword}' -m let_there_be_light"
)
assert '"state": "off"' in hass.succeed(
"curl http://localhost:8123/api/states/binary_sensor.mqtt_binary_sensor -H 'x-ha-access: ${apiPassword}'"
) )
with subtest("Print log to ease debugging"): with subtest("Print log to ease debugging"):
output_log = hass.succeed("cat ${configDir}/home-assistant.log") output_log = hass.succeed("cat ${configDir}/home-assistant.log")
@ -107,5 +76,9 @@ in {
with subtest("Check that no errors were logged"): with subtest("Check that no errors were logged"):
assert "ERROR" not in output_log assert "ERROR" not in output_log
# example line: 2020-06-20 10:01:32 DEBUG (MainThread) [homeassistant.components.mqtt] Received message on home-assistant/test: b'let_there_be_light'
with subtest("Check we received the mosquitto message"):
assert "let_there_be_light" in output_log
''; '';
}) })

View file

@ -7,21 +7,28 @@ import ./make-test-python.nix ({ pkgs, ...} : {
nodes.machine = { ... }: { nodes.machine = { ... }: {
services.ipfs = { services.ipfs = {
enable = true; enable = true;
# Also will add a unix domain socket socket API address, see module.
startWhenNeeded = true;
apiAddress = "/ip4/127.0.0.1/tcp/2324"; apiAddress = "/ip4/127.0.0.1/tcp/2324";
}; };
}; };
testScript = '' testScript = ''
start_all() start_all()
machine.wait_for_unit("ipfs")
machine.wait_until_succeeds("ipfs --api /ip4/127.0.0.1/tcp/2324 id") # IPv4 activation
machine.succeed("ipfs --api /ip4/127.0.0.1/tcp/2324 id")
ipfs_hash = machine.succeed( ipfs_hash = machine.succeed(
"echo fnord | ipfs --api /ip4/127.0.0.1/tcp/2324 add | awk '{ print $2 }'" "echo fnord | ipfs --api /ip4/127.0.0.1/tcp/2324 add | awk '{ print $2 }'"
) )
machine.succeed(f"ipfs cat /ipfs/{ipfs_hash.strip()} | grep fnord") machine.succeed(f"ipfs cat /ipfs/{ipfs_hash.strip()} | grep fnord")
# Unix domain socket activation
machine.stop_job("ipfs")
ipfs_hash = machine.succeed( ipfs_hash = machine.succeed(
"echo fnord2 | ipfs --api /unix/run/ipfs.sock add | awk '{ print $2 }'" "echo fnord2 | ipfs --api /unix/run/ipfs.sock add | awk '{ print $2 }'"
) )

View file

@ -26,7 +26,9 @@ in {
}; };
}; };
nextcloud = { config, pkgs, ... }: { nextcloud = { config, pkgs, ... }: let
cfg = config;
in {
networking.firewall.allowedTCPPorts = [ 80 ]; networking.firewall.allowedTCPPorts = [ 80 ];
services.nextcloud = { services.nextcloud = {
@ -42,6 +44,8 @@ in {
startAt = "20:00"; startAt = "20:00";
}; };
}; };
environment.systemPackages = [ cfg.services.nextcloud.occ ];
}; };
}; };
@ -67,6 +71,8 @@ in {
in '' in ''
start_all() start_all()
nextcloud.wait_for_unit("multi-user.target") nextcloud.wait_for_unit("multi-user.target")
# This is just to ensure the nextcloud-occ program is working
nextcloud.succeed("nextcloud-occ status")
nextcloud.succeed("curl -sSf http://nextcloud/login") nextcloud.succeed("curl -sSf http://nextcloud/login")
nextcloud.succeed( nextcloud.succeed(
"${withRcloneEnv} ${copySharedFile}" "${withRcloneEnv} ${copySharedFile}"

View file

@ -0,0 +1,33 @@
{ system ? builtins.currentSystem,
config ? {},
pkgs ? import ../.. { inherit system config; }
}:
with import ../lib/testing-python.nix { inherit system pkgs; };
builtins.listToAttrs (
builtins.map
(nginxName:
{
name = nginxName;
value = makeTest {
name = "nginx-variant-${nginxName}";
machine = { pkgs, ... }: {
services.nginx = {
enable = true;
virtualHosts.localhost.locations."/".return = "200 'foo'";
package = pkgs."${nginxName}";
};
};
testScript = ''
machine.wait_for_unit("nginx")
machine.wait_for_open_port(80)
machine.succeed('test "$(curl -fvvv http://localhost/)" = foo')
'';
};
}
)
[ "nginxStable" "nginxUnstable" "nginxShibboleth" "openresty" "tengine" ]
)

View file

@ -475,6 +475,20 @@ let
''; '';
}; };
redis = {
exporterConfig = {
enable = true;
};
metricProvider.services.redis.enable = true;
exporterTest = ''
wait_for_unit("redis.service")
wait_for_unit("prometheus-redis-exporter.service")
wait_for_open_port(6379)
wait_for_open_port(9121)
wait_until_succeeds("curl -sSf localhost:9121/metrics | grep -q 'redis_up 1'")
'';
};
rspamd = { rspamd = {
exporterConfig = { exporterConfig = {
enable = true; enable = true;

View file

@ -0,0 +1,38 @@
import ./make-test-python.nix ({ pkgs, ... }: {
name = "wasabibackend";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ mmahut ];
};
nodes = {
machine = { ... }: {
services.wasabibackend = {
enable = true;
network = "testnet";
rpc = {
user = "alice";
port = 18332;
};
};
services.bitcoind = {
enable = true;
testnet = true;
rpc.users = {
alice.passwordHMAC = "e7096bc21da60b29ecdbfcdb2c3acc62$f948e61cb587c399358ed99c6ed245a41460b4bf75125d8330c9f6fcc13d7ae7";
};
};
};
};
testScript = ''
start_all()
machine.wait_for_unit("wasabibackend.service")
machine.wait_until_succeeds(
"grep 'Wasabi Backend started' /var/lib/wasabibackend/.walletwasabi/backend/Logs.txt"
)
machine.sleep(5)
machine.succeed(
"grep 'Config is successfully initialized' /var/lib/wasabibackend/.walletwasabi/backend/Logs.txt"
)
'';
})

View file

@ -0,0 +1,49 @@
{ stdenv, fetchFromGitHub, rustPlatform, pkgconfig, openssl
, withRodio ? true
, withALSA ? true, alsaLib ? null
, withPulseAudio ? false, libpulseaudio ? null
, withPortAudio ? false, portaudio ? null
}:
rustPlatform.buildRustPackage rec {
pname = "librespot";
version = "0.1.1";
src = fetchFromGitHub {
owner = "librespot-org";
repo = "librespot";
rev = "v${version}";
sha256 = "1sdbjv8w2mfpv82rx5iy4s532l1767vmlrg9d8khnvh8vrm2lshy";
};
cargoSha256 = "0zi50imjvalwl6pxl35qrmbg74j5xdfaws8v69am4g9agbfjvlms";
cargoBuildFlags = with stdenv.lib; [
"--no-default-features"
"--features"
(concatStringsSep "," (filter (x: x != "") [
(optionalString withRodio "rodio-backend")
(optionalString withALSA "alsa-backend")
(optionalString withPulseAudio "pulseaudio-backend")
(optionalString withPortAudio "portaudio-backend")
]))
];
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ openssl ]
++ stdenv.lib.optional withALSA alsaLib
++ stdenv.lib.optional withPulseAudio libpulseaudio
++ stdenv.lib.optional withPortAudio portaudio;
doCheck = false;
meta = with stdenv.lib; {
description = "Open Source Spotify client library and playback daemon";
homepage = "https://github.com/librespot-org/librespot";
license = with licenses; [ mit ];
maintainers = with maintainers; [ bennofs ];
platforms = platforms.unix;
};
}

View file

@ -3,11 +3,11 @@
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "mpg123-1.25.13"; name = "mpg123-1.26.1";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/mpg123/${name}.tar.bz2"; url = "mirror://sourceforge/mpg123/${name}.tar.bz2";
sha256 = "02l915jq0ymndb082g6w89bpf66z04ifa1lr7ga3yycw6m46hc4h"; sha256 = "0cp01wdy77ggzqzzasxd5jd9iypcly5m4c89idc9mpgknyd65mkl";
}; };
buildInputs = stdenv.lib.optional (!stdenv.isDarwin) alsaLib; buildInputs = stdenv.lib.optional (!stdenv.isDarwin) alsaLib;

View file

@ -0,0 +1,41 @@
{ stdenv
, fetchFromGitHub
, pkgconfig
, autoreconfHook
, db5
, openssl
, boost
, zlib
, miniupnpc
, libevent
, protobuf
, utillinux
}:
stdenv.mkDerivation rec {
pname = "bitcoind-knots";
version = "0.20.0";
versionDate = "20200614";
src = fetchFromGitHub {
owner = "bitcoinknots";
repo = "bitcoin";
rev = "v${version}.knots${versionDate}";
sha256 = "0c8k1154kcwz6q2803wx0zigvqaij1fi5akgfqlj3yl57jjw48jj";
};
nativeBuildInputs = [ pkgconfig autoreconfHook ];
buildInputs = [ openssl db5 openssl utillinux
protobuf boost zlib miniupnpc libevent ];
configureFlags = [ "--with-incompatible-bdb"
"--with-boost-libdir=${boost.out}/lib" ];
meta = with stdenv.lib; {
description = "An enhanced Bitcoin node software";
homepage = "https://bitcoinknots.org/";
license = licenses.mit;
maintainers = [ maintainers.mmahut ];
platforms = platforms.linux;
};
}

View file

@ -4,7 +4,7 @@
, qtmultimedia, qtxmlpatterns , qtmultimedia, qtxmlpatterns
, qtquickcontrols, qtquickcontrols2 , qtquickcontrols, qtquickcontrols2
, monero, unbound, readline, boost, libunwind , monero, unbound, readline, boost, libunwind
, libsodium, pcsclite, zeromq, cppzmq , libsodium, pcsclite, zeromq, libgcrypt, libgpgerror
, hidapi, libusb-compat-0_1, protobuf, randomx , hidapi, libusb-compat-0_1, protobuf, randomx
}: }:
@ -12,13 +12,13 @@ with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "monero-gui"; pname = "monero-gui";
version = "0.15.0.4"; version = "0.16.0.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "monero-project"; owner = "monero-project";
repo = "monero-gui"; repo = "monero-gui";
rev = "v${version}"; rev = "v${version}";
sha256 = "12m5fgnxkr11q2arx1m5ccpxqm5ljcvm6l547dwqn297zs5jim4z"; sha256 = "06vdrsj5y9k0zn32hspyxc7sw1kkyrvi3chzkdbnxk9jvyj8k4ld";
}; };
nativeBuildInputs = [ qmake pkgconfig wrapQtAppsHook ]; nativeBuildInputs = [ qmake pkgconfig wrapQtAppsHook ];
@ -27,9 +27,9 @@ stdenv.mkDerivation rec {
qtbase qtdeclarative qtgraphicaleffects qtbase qtdeclarative qtgraphicaleffects
qtmultimedia qtquickcontrols qtquickcontrols2 qtmultimedia qtquickcontrols qtquickcontrols2
qtxmlpatterns qtxmlpatterns
monero unbound readline monero unbound readline libgcrypt libgpgerror
boost libunwind libsodium pcsclite zeromq boost libunwind libsodium pcsclite zeromq
cppzmq hidapi libusb-compat-0_1 protobuf randomx hidapi libusb-compat-0_1 protobuf randomx
]; ];
NIX_CFLAGS_COMPILE = [ "-Wno-error=format-security" ]; NIX_CFLAGS_COMPILE = [ "-Wno-error=format-security" ];
@ -52,6 +52,10 @@ stdenv.mkDerivation rec {
preBuild = '' preBuild = ''
sed -i s#/opt/monero-wallet-gui##g Makefile sed -i s#/opt/monero-wallet-gui##g Makefile
make -C src/zxcvbn-c make -C src/zxcvbn-c
# use nixpkgs monero sources
rmdir monero
ln -s "${monero.src}" monero
''; '';
desktopItem = makeDesktopItem { desktopItem = makeDesktopItem {

View file

@ -1,6 +1,6 @@
{ stdenv, fetchFromGitHub { stdenv, fetchFromGitHub
, cmake, pkgconfig , cmake, pkgconfig
, boost, miniupnpc, openssl, unbound, cppzmq , boost, miniupnpc, openssl, unbound
, zeromq, pcsclite, readline, libsodium, hidapi , zeromq, pcsclite, readline, libsodium, hidapi
, pythonProtobuf, randomx, rapidjson, libusb-compat-0_1 , pythonProtobuf, randomx, rapidjson, libusb-compat-0_1
, CoreData, IOKit, PCSC , CoreData, IOKit, PCSC
@ -10,13 +10,13 @@ assert stdenv.isDarwin -> IOKit != null;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "monero"; pname = "monero";
version = "0.15.0.1"; version = "0.16.0.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "monero-project"; owner = "monero-project";
repo = "monero"; repo = "monero";
rev = "v${version}"; rev = "v${version}";
sha256 = "0sypa235lf2bbib4b71xpaw39h9304slgsvnsz8wmy9fq1zx009m"; sha256 = "0x74h5z0nxxxip97ibc854pqmrgd8r4d6w62m424f66i8gbzfskh";
fetchSubmodules = true; fetchSubmodules = true;
}; };
@ -24,13 +24,14 @@ stdenv.mkDerivation rec {
buildInputs = [ buildInputs = [
boost miniupnpc openssl unbound boost miniupnpc openssl unbound
cppzmq zeromq pcsclite readline zeromq pcsclite readline
libsodium hidapi randomx rapidjson libsodium hidapi randomx rapidjson
pythonProtobuf libusb-compat-0_1 pythonProtobuf libusb-compat-0_1
] ++ stdenv.lib.optionals stdenv.isDarwin [ IOKit CoreData PCSC ]; ] ++ stdenv.lib.optionals stdenv.isDarwin [ IOKit CoreData PCSC ];
cmakeFlags = [ cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_BUILD_TYPE=Release"
"-DUSE_DEVICE_TREZOR=ON"
"-DBUILD_GUI_DEPS=ON" "-DBUILD_GUI_DEPS=ON"
"-DReadline_ROOT_DIR=${readline.dev}" "-DReadline_ROOT_DIR=${readline.dev}"
] ++ stdenv.lib.optional stdenv.isDarwin "-DBoost_USE_MULTITHREADED=OFF"; ] ++ stdenv.lib.optional stdenv.isDarwin "-DBoost_USE_MULTITHREADED=OFF";

View file

@ -0,0 +1,98 @@
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p dotnet-sdk_3 nixfmt
# Run this script to generate deps.nix
# ./create_deps.sh /path/to/package/source/checkout > deps.nix
# TODO: consolidate with other dotnet deps generation scripts by which
# this script is inspired:
# - pkgs/servers/nosql/eventstore/create-deps.sh
# - pkgs/development/dotnet-modules/python-language-server/create_deps.sh
URLBASE="https://www.nuget.org/api/v2/package"
DEPS_HEADER="
{ fetchurl }:
let
nugetUrlBase = \"$URLBASE\";
fetchNuGet = { name, version, sha256 }: fetchurl {
inherit sha256;
url = \"\${nugetUrlBase}/\${name}/\${version}\";
};
in ["
DEPS_FOOTER="]"
DEPS_TEMPLATE="
(fetchNuGet {
name = \"%s\";
version = \"%s\";
sha256 = \"%s\";
})"
function generate_restore_log() {
checkout_path=$1
>&2 echo "generating restore log for $checkout_path..."
cd $checkout_path
dotnet nuget locals all --clear
dotnet restore -v normal --no-cache WalletWasabi.Backend -r linux-x64
cd -
}
function process_restore_log() {
restore_log=$1
>&2 echo "processing restore log..."
while read line; do
if echo $line | grep -q "^[[:space:]]*Installing"; then
l=$(echo $line | xargs)
l=${l#Installing }
l=${l%.}
echo $l
fi
done < $restore_log
}
function prefetch_deps() {
processed_log=$1
>&2 echo "prefetching deps..."
while read line; do
name=$(echo $line | cut -d' ' -f1)
>&2 echo "prefetching '$name' version: $version"
version=$(echo $line | cut -d' ' -f2)
hash=$(nix-prefetch-url "$URLBASE/$name/$version" 2>/dev/null)
echo "$name $version $hash"
done < $processed_log
}
function generate_deps_expression() {
packages=$1
>&2 echo "generating deps nix-expression..."
echo $DEPS_HEADER
while read line; do
name=$(echo $line | cut -d' ' -f1)
version=$(echo $line | cut -d' ' -f2)
hash=$(echo $line | cut -d' ' -f3)
printf "$DEPS_TEMPLATE" $name $version $hash
done < $packages
echo $DEPS_FOOTER
}
function main() {
checkout_path=$1
tmpdir=$(mktemp -d)
generate_restore_log $checkout_path > $tmpdir/restore.log
process_restore_log $tmpdir/restore.log > $tmpdir/processed.log
prefetch_deps $tmpdir/processed.log > $tmpdir/prefetched.log
generate_deps_expression $tmpdir/prefetched.log > $tmpdir/deps.nix
nixfmt $tmpdir/deps.nix
cat $tmpdir/deps.nix
rm -rf $tmpdir
}
if [ ! -d "$1" ]; then
>&2 echo "First argument must be a directory, the path to the package source checkout"
exit 1
fi
main $@

View file

@ -0,0 +1,100 @@
{ stdenv
, fetchFromGitHub
, fetchurl
, makeWrapper
, Nuget
, dotnetCorePackages
, openssl
, zlib
}:
let
deps = import ./deps.nix { inherit fetchurl; };
dotnet-sdk = dotnetCorePackages.sdk_3_1;
dotnet-aspnetcore = dotnetCorePackages.aspnetcore_3_1;
nugetSource = stdenv.mkDerivation {
pname = "${pname}-nuget-deps";
inherit version;
dontUnpack = true;
dontInstall = true;
nativeBuildInputs = [ Nuget ];
buildPhase = ''
export HOME=$(mktemp -d)
mkdir -p $out/lib
nuget sources Disable -Name "nuget.org"
for package in ${toString deps}; do
nuget add $package -Source $out/lib
done
'';
};
pname = "WasabiBackend";
version = "1.1.11.1";
projectName = "WalletWasabi.Backend";
projectConfiguration = "Release";
projectRuntime = "linux-x64";
in
stdenv.mkDerivation rec {
inherit pname version;
src = fetchFromGitHub {
owner = "zkSNACKs";
repo = "WalletWasabi";
rev = "v${version}";
sha256 = "0kxww8ywhld00b0qsv5jh5s19jqpahnb9mvshmjnp3cb840j12a7";
};
buildInputs = [
Nuget
dotnet-sdk
makeWrapper
];
buildPhase = ''
export HOME=$(mktemp -d)
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
export DOTNET_ROOT="${dotnet-sdk}/bin"
nuget sources Disable -Name "nuget.org"
dotnet restore \
--source ${nugetSource}/lib \
--runtime ${projectRuntime} \
${projectName}
dotnet publish \
--no-restore \
--runtime ${projectRuntime} \
--configuration ${projectConfiguration} \
${projectName}
'';
installPhase = ''
mkdir -p $out
cp -r ${projectName}/bin/${projectConfiguration}/netcoreapp3.1/${projectRuntime}/publish $out/lib
mkdir -p $out/bin
makeWrapper $out/lib/WalletWasabi.Backend $out/bin/${pname} \
--prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [ openssl zlib ]} \
--run "cd $out/lib"
'';
# If we don't disable stripping the executable fails to start with segfault
dontStrip = true;
meta = with stdenv.lib; {
description = "Backend for the Wasabi Wallet";
homepage = "https://wasabiwallet.io/";
license = licenses.mit;
maintainers = with maintainers; [ mmahut ];
platforms = [ "x86_64-linux" ];
};
}

View file

@ -0,0 +1,951 @@
{ fetchurl }:
let
nugetUrlBase = "https://www.nuget.org/api/v2/package";
fetchNuGet = { name, version, sha256 }:
fetchurl {
inherit sha256;
url = "${nugetUrlBase}/${name}/${version}";
};
in [
(fetchNuGet {
name = "System.Xml.XmlSerializer";
version = "4.0.11";
sha256 = "01nzc3gdslw90qfykq4qzr2mdnqxjl4sj0wp3fixiwdmlmvpib5z";
})
(fetchNuGet {
name = "System.Threading.Overlapped";
version = "4.0.1";
sha256 = "0fi79az3vmqdp9mv3wh2phblfjls89zlj6p9nc3i9f6wmfarj188";
})
(fetchNuGet {
name = "System.Security.Principal";
version = "4.0.1";
sha256 = "1nbzdfqvzzbgsfdd5qsh94d7dbg2v4sw0yx6himyn52zf8z6007p";
})
(fetchNuGet {
name = "System.Dynamic.Runtime";
version = "4.0.11";
sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9";
})
(fetchNuGet {
name = "System.Private.DataContractSerialization";
version = "4.1.1";
sha256 = "1xk9wvgzipssp1393nsg4n16zbr5481k03nkdlj954hzq5jkx89r";
})
(fetchNuGet {
name = "Microsoft.Win32.Registry";
version = "4.0.0";
sha256 = "1spf4m9pikkc19544p29a47qnhcd885klncahz133hbnyqbkmz9k";
})
(fetchNuGet {
name = "System.Reflection.Emit.Lightweight";
version = "4.0.1";
sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr";
})
(fetchNuGet {
name = "System.Reflection.Emit";
version = "4.0.1";
sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp";
})
(fetchNuGet {
name = "System.Reflection.Emit.ILGeneration";
version = "4.0.1";
sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0";
})
(fetchNuGet {
name = "System.Diagnostics.DiagnosticSource";
version = "4.0.0";
sha256 = "1n6c3fbz7v8d3pn77h4v5wvsfrfg7v1c57lg3nff3cjyh597v23m";
})
(fetchNuGet {
name = "System.Globalization.Extensions";
version = "4.0.1";
sha256 = "0hjhdb5ri8z9l93bw04s7ynwrjrhx2n0p34sf33a9hl9phz69fyc";
})
(fetchNuGet {
name = "System.Security.Cryptography.Cng";
version = "4.2.0";
sha256 = "118jijz446kix20blxip0f0q8mhsh9bz118mwc2ch1p6g7facpzc";
})
(fetchNuGet {
name = "System.Security.Cryptography.OpenSsl";
version = "4.0.0";
sha256 = "16sx3cig3d0ilvzl8xxgffmxbiqx87zdi8fc73i3i7zjih1a7f4q";
})
(fetchNuGet {
name = "System.Security.Cryptography.Csp";
version = "4.0.0";
sha256 = "1cwv8lqj8r15q81d2pz2jwzzbaji0l28xfrpw29kdpsaypm92z2q";
})
(fetchNuGet {
name = "runtime.native.System.Net.Http";
version = "4.0.1";
sha256 = "1hgv2bmbaskx77v8glh7waxws973jn4ah35zysnkxmf0196sfxg6";
})
(fetchNuGet {
name = "System.Threading.Tasks.Extensions";
version = "4.0.0";
sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr";
})
(fetchNuGet {
name = "runtime.native.System.IO.Compression";
version = "4.1.0";
sha256 = "0d720z4lzyfcabmmnvh0bnj76ll7djhji2hmfh3h44sdkjnlkknk";
})
(fetchNuGet {
name = "Microsoft.Extensions.FileProviders.Physical";
version = "2.0.0";
sha256 = "0l0l92g7sq4122n139av1pn1jl6wlw92hjmdnr47xdss0ndmwrs3";
})
(fetchNuGet {
name = "Microsoft.VisualStudio.Web.CodeGeneration.Contracts";
version = "2.0.2";
sha256 = "1fs6sbjn0chx6rv38d61zgk8mhyyxz44xp4wsfya0lvkckyszyn1";
})
(fetchNuGet {
name = "Microsoft.NETCore.App";
version = "2.0.5";
sha256 = "0qb7k624w7l0zhapdp519ymqg84a67r8zyd8cpj42hywsgb0dqv6";
})
(fetchNuGet {
name = "Microsoft.VisualStudio.Web.CodeGeneration.Tools";
version = "2.0.2";
sha256 = "0fkjm06irs53d77z29i6dwj5pjhgj9ivhad8v39ghnrwasc0ivq6";
})
(fetchNuGet {
name = "NuGet.Frameworks";
version = "4.0.0";
sha256 = "0nar684cm53cvzx28gzl6kmpg9mrfr1yv29323din7xqal4pscgq";
})
(fetchNuGet {
name = "runtime.native.System";
version = "4.0.0";
sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf";
})
(fetchNuGet {
name = "System.Buffers";
version = "4.0.0";
sha256 = "13s659bcmg9nwb6z78971z1lr6bmh2wghxi1ayqyzl4jijd351gr";
})
(fetchNuGet {
name = "Microsoft.Build.Runtime";
version = "15.3.409";
sha256 = "135ycnqz5jfg61y5zaapgc7xdpjx2aq4icmxb9ph7h5inl445q7q";
})
(fetchNuGet {
name = "Newtonsoft.Json";
version = "10.0.1";
sha256 = "15ncqic3p2rzs8q8ppi0irl2miq75kilw4lh8yfgjq96id0ds3hv";
})
(fetchNuGet {
name = "Microsoft.Extensions.FileSystemGlobbing";
version = "2.0.0";
sha256 = "02lzy6r14ghwfwm384xajq08vv3pl3ww0mi5isrr10vivhijhgg4";
})
(fetchNuGet {
name = "runtime.native.System.Security.Cryptography";
version = "4.0.0";
sha256 = "0k57aa2c3b10wl3hfqbgrl7xq7g8hh3a3ir44b31dn5p61iiw3z9";
})
(fetchNuGet {
name = "Microsoft.Extensions.FileProviders.Abstractions";
version = "2.0.0";
sha256 = "0d6y5isjy6jpf4w3f3w89cwh9p40glzhwvm7cwhx05wkqd8bk9w4";
})
(fetchNuGet {
name = "Microsoft.NETCore.Targets";
version = "1.0.1";
sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p";
})
(fetchNuGet {
name = "Microsoft.NETCore.Platforms";
version = "2.0.1";
sha256 = "1j2hmnivgb4plni2dd205kafzg6mkg7r4knrd3s7mg75wn2l25np";
})
(fetchNuGet {
name = "Microsoft.NETCore.DotNetHostPolicy";
version = "2.0.5";
sha256 = "0v5csskiwpk8kz8wclqad8kcjmxr7ik4w99wl05740qvaag3qysk";
})
(fetchNuGet {
name = "NETStandard.Library";
version = "2.0.1";
sha256 = "0d44wjxphs1ck838v7dapm0ag0b91zpiy33cr5vflsrwrqgj51dk";
})
(fetchNuGet {
name = "System.Globalization.Extensions";
version = "4.3.0";
sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls";
})
(fetchNuGet {
name = "System.Runtime.Serialization.Primitives";
version = "4.3.0";
sha256 = "01vv2p8h4hsz217xxs0rixvb7f2xzbh6wv1gzbfykcbfrza6dvnf";
})
(fetchNuGet {
name = "System.Runtime.Numerics";
version = "4.3.0";
sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z";
})
(fetchNuGet {
name = "System.Runtime.Serialization.Formatters";
version = "4.3.0";
sha256 = "114j35n8gcvn3sqv9ar36r1jjq0y1yws9r0yk8i6wm4aq7n9rs0m";
})
(fetchNuGet {
name = "System.Xml.XmlDocument";
version = "4.3.0";
sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi";
})
(fetchNuGet {
name = "System.Collections";
version = "4.3.0";
sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9";
})
(fetchNuGet {
name = "System.Diagnostics.Debug";
version = "4.3.0";
sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y";
})
(fetchNuGet {
name = "System.Resources.ResourceManager";
version = "4.3.0";
sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49";
})
(fetchNuGet {
name = "System.Reflection.Extensions";
version = "4.3.0";
sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq";
})
(fetchNuGet {
name = "System.Runtime.Handles";
version = "4.3.0";
sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8";
})
(fetchNuGet {
name = "System.Text.Encoding.Extensions";
version = "4.3.0";
sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy";
})
(fetchNuGet {
name = "System.Globalization";
version = "4.3.0";
sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki";
})
(fetchNuGet {
name = "System.Linq";
version = "4.3.0";
sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7";
})
(fetchNuGet {
name = "System.Text.Encoding";
version = "4.3.0";
sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr";
})
(fetchNuGet {
name = "System.ObjectModel";
version = "4.3.0";
sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2";
})
(fetchNuGet {
name = "Microsoft.NETCore.DotNetAppHost";
version = "2.0.5";
sha256 = "00bsxdg9c8msjxyffvfi8siqk8v2m7ca8fqy1npv7b2pzg3byjws";
})
(fetchNuGet {
name = "System.Runtime.CompilerServices.Unsafe";
version = "4.4.0";
sha256 = "0a6ahgi5b148sl5qyfpyw383p3cb4yrkm802k29fsi4mxkiwir29";
})
(fetchNuGet {
name = "System.Threading";
version = "4.3.0";
sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34";
})
(fetchNuGet {
name = "Microsoft.CSharp";
version = "4.3.0";
sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb";
})
(fetchNuGet {
name = "System.IO.Pipes";
version = "4.0.0";
sha256 = "0fxfvcf55s9q8zsykwh8dkq2xb5jcqnml2ycq8srfry2l07h18za";
})
(fetchNuGet {
name = "System.Text.RegularExpressions";
version = "4.3.0";
sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l";
})
(fetchNuGet {
name = "System.Reflection";
version = "4.3.0";
sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m";
})
(fetchNuGet {
name = "System.IO";
version = "4.3.0";
sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f";
})
(fetchNuGet {
name = "System.Xml.XDocument";
version = "4.3.0";
sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd";
})
(fetchNuGet {
name = "System.Threading.Tasks";
version = "4.3.0";
sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7";
})
(fetchNuGet {
name = "System.ComponentModel.TypeConverter";
version = "4.3.0";
sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x";
})
(fetchNuGet {
name = "System.Runtime.Extensions";
version = "4.3.0";
sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60";
})
(fetchNuGet {
name = "System.Dynamic.Runtime";
version = "4.3.0";
sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk";
})
(fetchNuGet {
name = "System.Xml.ReaderWriter";
version = "4.3.0";
sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1";
})
(fetchNuGet {
name = "System.Linq.Expressions";
version = "4.3.0";
sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv";
})
(fetchNuGet {
name = "System.Runtime";
version = "4.3.0";
sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7";
})
(fetchNuGet {
name = "NETStandard.Library";
version = "1.6.0";
sha256 = "0nmmv4yw7gw04ik8ialj3ak0j6pxa9spih67hnn1h2c38ba8h58k";
})
(fetchNuGet {
name = "Microsoft.Build.Framework";
version = "15.3.409";
sha256 = "1dhanwb9ihbfay85xj7cwn0byzmmdz94hqfi3q6r1ncwdjd8y1s2";
})
(fetchNuGet {
name = "Microsoft.Build.Tasks.Core";
version = "15.3.409";
sha256 = "135swyygp7cz2civwsz6a7dj7h8bzp7yrybmgxjanxwrw66hm933";
})
(fetchNuGet {
name = "Microsoft.Build.Utilities.Core";
version = "15.3.409";
sha256 = "1p8a0l9sxmjj86qha748qjw2s2n07q8mn41mj5r6apjnwl27ywnf";
})
(fetchNuGet {
name = "System.Text.Encoding.CodePages";
version = "4.0.1";
sha256 = "00wpm3b9y0k996rm9whxprngm8l500ajmzgy2ip9pgwk0icp06y3";
})
(fetchNuGet {
name = "Microsoft.Build";
version = "15.3.409";
sha256 = "0vzq6csp2yys9s96c7i37bjml439rdi47g8f5rzqdr7xf5a1jk81";
})
(fetchNuGet {
name = "System.Threading.Tasks.Dataflow";
version = "4.6.0";
sha256 = "0a1davr71wssyn4z1hr75lk82wqa0daz0vfwkmg1fm3kckfd72k1";
})
(fetchNuGet {
name = "Microsoft.Extensions.Primitives";
version = "2.0.0";
sha256 = "1xppr5jbny04slyjgngxjdm0maxdh47vq481ps944d7jrfs0p3mb";
})
(fetchNuGet {
name = "Microsoft.NETCore.DotNetHostResolver";
version = "2.0.5";
sha256 = "1sz2fdp8fdwz21x3lr2m1zhhrbix6iz699fjkwiryqdjl4ygd3hw";
})
(fetchNuGet {
name = "Microsoft.NETCore.Platforms";
version = "1.1.0";
sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm";
})
(fetchNuGet {
name = "Microsoft.NETCore.Targets";
version = "1.1.0";
sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh";
})
(fetchNuGet {
name = "System.Reflection.TypeExtensions";
version = "4.3.0";
sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1";
})
(fetchNuGet {
name = "System.Reflection.Primitives";
version = "4.3.0";
sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276";
})
(fetchNuGet {
name = "System.Runtime.InteropServices";
version = "4.3.0";
sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j";
})
(fetchNuGet {
name = "System.Diagnostics.Tools";
version = "4.3.0";
sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1";
})
(fetchNuGet {
name = "System.ComponentModel.Primitives";
version = "4.3.0";
sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0";
})
(fetchNuGet {
name = "System.ComponentModel";
version = "4.3.0";
sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb";
})
(fetchNuGet {
name = "System.Collections.NonGeneric";
version = "4.3.0";
sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k";
})
(fetchNuGet {
name = "System.Collections.Specialized";
version = "4.3.0";
sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20";
})
(fetchNuGet {
name = "System.Reflection.Emit.ILGeneration";
version = "4.3.0";
sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q";
})
(fetchNuGet {
name = "System.Reflection.Emit";
version = "4.3.0";
sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74";
})
(fetchNuGet {
name = "System.IO.FileSystem.Primitives";
version = "4.3.0";
sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c";
})
(fetchNuGet {
name = "System.Threading.Tasks.Extensions";
version = "4.3.0";
sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z";
})
(fetchNuGet {
name = "System.IO.FileSystem";
version = "4.3.0";
sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw";
})
(fetchNuGet {
name = "System.Reflection.Emit.Lightweight";
version = "4.3.0";
sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c";
})
(fetchNuGet {
name = "System.AppContext";
version = "4.1.0";
sha256 = "0fv3cma1jp4vgj7a8hqc9n7hr1f1kjp541s6z0q1r6nazb4iz9mz";
})
(fetchNuGet {
name = "System.ObjectModel";
version = "4.0.12";
sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj";
})
(fetchNuGet {
name = "System.Collections.Concurrent";
version = "4.0.12";
sha256 = "07y08kvrzpak873pmyxs129g1ch8l27zmg51pcyj2jvq03n0r0fc";
})
(fetchNuGet {
name = "System.IO.FileSystem.Primitives";
version = "4.0.1";
sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612";
})
(fetchNuGet {
name = "Microsoft.Win32.Primitives";
version = "4.0.1";
sha256 = "1n8ap0cmljbqskxpf8fjzn7kh1vvlndsa75k01qig26mbw97k2q7";
})
(fetchNuGet {
name = "System.Diagnostics.Tracing";
version = "4.1.0";
sha256 = "1d2r76v1x610x61ahfpigda89gd13qydz6vbwzhpqlyvq8jj6394";
})
(fetchNuGet {
name = "System.Net.Sockets";
version = "4.1.0";
sha256 = "1385fvh8h29da5hh58jm1v78fzi9fi5vj93vhlm2kvqpfahvpqls";
})
(fetchNuGet {
name = "System.Threading.Timer";
version = "4.0.1";
sha256 = "15n54f1f8nn3mjcjrlzdg6q3520571y012mx7v991x2fvp73lmg6";
})
(fetchNuGet {
name = "Microsoft.NETCore.Platforms";
version = "1.0.1";
sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr";
})
(fetchNuGet {
name = "System.Globalization.Calendars";
version = "4.0.1";
sha256 = "0bv0alrm2ck2zk3rz25lfyk9h42f3ywq77mx1syl6vvyncnpg4qh";
})
(fetchNuGet {
name = "System.Security.Cryptography.Encoding";
version = "4.0.0";
sha256 = "0a8y1a5wkmpawc787gfmnrnbzdgxmx1a14ax43jf3rj9gxmy3vk4";
})
(fetchNuGet {
name = "System.Reflection.Primitives";
version = "4.0.1";
sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28";
})
(fetchNuGet {
name = "System.Diagnostics.Tools";
version = "4.0.1";
sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x";
})
(fetchNuGet {
name = "System.Console";
version = "4.0.0";
sha256 = "0ynxqbc3z1nwbrc11hkkpw9skw116z4y9wjzn7id49p9yi7mzmlf";
})
(fetchNuGet {
name = "System.Runtime.Handles";
version = "4.0.1";
sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g";
})
(fetchNuGet {
name = "System.Security.Cryptography.Primitives";
version = "4.0.0";
sha256 = "0i7cfnwph9a10bm26m538h5xcr8b36jscp9sy1zhgifksxz4yixh";
})
(fetchNuGet {
name = "System.Diagnostics.Debug";
version = "4.0.11";
sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz";
})
(fetchNuGet {
name = "System.Collections";
version = "4.0.11";
sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6";
})
(fetchNuGet {
name = "System.Reflection.Extensions";
version = "4.0.1";
sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn";
})
(fetchNuGet {
name = "System.IO.FileSystem";
version = "4.0.1";
sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1";
})
(fetchNuGet {
name = "System.Runtime.Numerics";
version = "4.0.1";
sha256 = "1y308zfvy0l5nrn46mqqr4wb4z1xk758pkk8svbz8b5ij7jnv4nn";
})
(fetchNuGet {
name = "System.IO.Compression.ZipFile";
version = "4.0.1";
sha256 = "0h72znbagmgvswzr46mihn7xm7chfk2fhrp5krzkjf29pz0i6z82";
})
(fetchNuGet {
name = "System.Resources.ResourceManager";
version = "4.0.1";
sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi";
})
(fetchNuGet {
name = "System.Security.Cryptography.Algorithms";
version = "4.2.0";
sha256 = "148s9g5dgm33ri7dnh19s4lgnlxbpwvrw2jnzllq2kijj4i4vs85";
})
(fetchNuGet {
name = "System.Linq";
version = "4.1.0";
sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5";
})
(fetchNuGet {
name = "System.Text.Encoding";
version = "4.0.11";
sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw";
})
(fetchNuGet {
name = "System.Runtime.InteropServices.RuntimeInformation";
version = "4.0.0";
sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6";
})
(fetchNuGet {
name = "System.IO.Compression";
version = "4.1.0";
sha256 = "0iym7s3jkl8n0vzm3jd6xqg9zjjjqni05x45dwxyjr2dy88hlgji";
})
(fetchNuGet {
name = "System.Text.Encoding.Extensions";
version = "4.0.11";
sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs";
})
(fetchNuGet {
name = "System.Globalization";
version = "4.0.11";
sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d";
})
(fetchNuGet {
name = "System.Text.RegularExpressions";
version = "4.1.0";
sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7";
})
(fetchNuGet {
name = "System.Reflection";
version = "4.1.0";
sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9";
})
(fetchNuGet {
name = "System.Xml.XDocument";
version = "4.0.11";
sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18";
})
(fetchNuGet {
name = "System.Threading";
version = "4.0.11";
sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls";
})
(fetchNuGet {
name = "System.Threading.Tasks";
version = "4.0.11";
sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5";
})
(fetchNuGet {
name = "System.Net.Primitives";
version = "4.0.11";
sha256 = "10xzzaynkzkakp7jai1ik3r805zrqjxiz7vcagchyxs2v26a516r";
})
(fetchNuGet {
name = "System.IO";
version = "4.1.0";
sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp";
})
(fetchNuGet {
name = "System.Runtime.Extensions";
version = "4.1.0";
sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z";
})
(fetchNuGet {
name = "System.Security.Cryptography.X509Certificates";
version = "4.1.0";
sha256 = "0clg1bv55mfv5dq00m19cp634zx6inm31kf8ppbq1jgyjf2185dh";
})
(fetchNuGet {
name = "System.Net.Http";
version = "4.1.0";
sha256 = "1i5rqij1icg05j8rrkw4gd4pgia1978mqhjzhsjg69lvwcdfg8yb";
})
(fetchNuGet {
name = "System.Xml.ReaderWriter";
version = "4.0.11";
sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5";
})
(fetchNuGet {
name = "System.Runtime.InteropServices";
version = "4.1.0";
sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1";
})
(fetchNuGet {
name = "System.Linq.Expressions";
version = "4.1.0";
sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg";
})
(fetchNuGet {
name = "System.Runtime";
version = "4.1.0";
sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m";
})
(fetchNuGet {
name = "System.Threading.Thread";
version = "4.0.0";
sha256 = "1gxxm5fl36pjjpnx1k688dcw8m9l7nmf802nxis6swdaw8k54jzc";
})
(fetchNuGet {
name = "System.Diagnostics.TraceSource";
version = "4.0.0";
sha256 = "1mc7r72xznczzf6mz62dm8xhdi14if1h8qgx353xvhz89qyxsa3h";
})
(fetchNuGet {
name = "System.Reflection.TypeExtensions";
version = "4.1.0";
sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7";
})
(fetchNuGet {
name = "System.Runtime.Serialization.Primitives";
version = "4.1.1";
sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k";
})
(fetchNuGet {
name = "System.Xml.XmlDocument";
version = "4.0.1";
sha256 = "0ihsnkvyc76r4dcky7v3ansnbyqjzkbyyia0ir5zvqirzan0bnl1";
})
(fetchNuGet {
name = "Microsoft.AspNetCore.App.Runtime.linux-x64";
version = "3.1.2";
sha256 = "19wfh9yg4n2khbl7pvf6ngx95m5p8lw4l9y935pv7nh4xgwk02p9";
})
(fetchNuGet {
name = "Microsoft.NETCore.App.Runtime.linux-x64";
version = "3.1.2";
sha256 = "0a332ia5pabnz7mdfc99a5hlc7drnwzlc7cj9b5c3an6dq636p66";
})
(fetchNuGet {
name = "System.Collections.NonGeneric";
version = "4.0.1";
sha256 = "19994r5y5bpdhj7di6w047apvil8lh06lh2c2yv9zc4fc5g9bl4d";
})
(fetchNuGet {
name = "System.Resources.Reader";
version = "4.0.0";
sha256 = "1jafi73dcf1lalrir46manq3iy6xnxk2z7gpdpwg4wqql7dv3ril";
})
(fetchNuGet {
name = "System.Xml.XPath.XmlDocument";
version = "4.0.1";
sha256 = "0l7yljgif41iv5g56l3nxy97hzzgck2a7rhnfnljhx9b0ry41bvc";
})
(fetchNuGet {
name = "Microsoft.NETCore.Platforms";
version = "3.1.0";
sha256 = "1gc1x8f95wk8yhgznkwsg80adk1lc65v9n5rx4yaa4bc5dva0z3j";
})
(fetchNuGet {
name = "Microsoft.CSharp";
version = "4.7.0";
sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j";
})
(fetchNuGet {
name = "System.Xml.XPath";
version = "4.0.1";
sha256 = "0fjqgb6y66d72d5n8qq1h213d9nv2vi8mpv8p28j3m9rccmsh04m";
})
(fetchNuGet {
name = "Microsoft.Extensions.Logging.Abstractions";
version = "1.0.0";
sha256 = "1sh9bidmhy32gkz6fkli79mxv06546ybrzppfw5v2aq0bda1ghka";
})
(fetchNuGet {
name = "System.Security.Principal.Windows";
version = "4.7.0";
sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d";
})
(fetchNuGet {
name = "System.Security.AccessControl";
version = "4.7.0";
sha256 = "0n0k0w44flkd8j0xw7g3g3vhw7dijfm51f75xkm1qxnbh4y45mpz";
})
(fetchNuGet {
name = "Microsoft.AspNetCore.JsonPatch";
version = "3.1.1";
sha256 = "0c0aaz9rlh9chc53dnv5jryp0x0415hipaizrmih3kzwd3fmqpml";
})
(fetchNuGet {
name = "Newtonsoft.Json";
version = "12.0.2";
sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5";
})
(fetchNuGet {
name = "System.Resources.Writer";
version = "4.0.0";
sha256 = "07hp218kjdcvpl27djspnixgnacbp9apma61zz3wsca9fx5g3lmv";
})
(fetchNuGet {
name = "System.Reflection.Metadata";
version = "1.3.0";
sha256 = "1y5m6kryhjpqqm2g3h3b6bzig13wkiw954x3b7icqjm6xypm1x3b";
})
(fetchNuGet {
name = "System.Collections.Immutable";
version = "1.2.0";
sha256 = "1jm4pc666yiy7af1mcf7766v710gp0h40p228ghj6bavx7xfa38m";
})
(fetchNuGet {
name = "System.Linq.Parallel";
version = "4.0.1";
sha256 = "0i33x9f4h3yq26yvv6xnq4b0v51rl5z8v1bm7vk972h5lvf4apad";
})
(fetchNuGet {
name = "System.Diagnostics.Process";
version = "4.1.0";
sha256 = "061lrcs7xribrmq7kab908lww6kn2xn1w3rdc41q189y0jibl19s";
})
(fetchNuGet {
name = "System.Runtime.Serialization.Xml";
version = "4.1.1";
sha256 = "11747an5gbz821pwahaim3v82gghshnj9b5c4cw539xg5a3gq7rk";
})
(fetchNuGet {
name = "System.Threading.ThreadPool";
version = "4.0.10";
sha256 = "0fdr61yjcxh5imvyf93n2m3n5g9pp54bnw2l1d2rdl9z6dd31ypx";
})
(fetchNuGet {
name = "System.Runtime.Loader";
version = "4.0.0";
sha256 = "0lpfi3psqcp6zxsjk2qyahal7zaawviimc8lhrlswhip2mx7ykl0";
})
(fetchNuGet {
name = "System.Diagnostics.Contracts";
version = "4.0.1";
sha256 = "0y6dkd9n5k98vzhc3w14r2pbhf10qjn2axpghpmfr6rlxx9qrb9j";
})
(fetchNuGet {
name = "System.Diagnostics.FileVersionInfo";
version = "4.0.0";
sha256 = "1s5vxhy7i09bmw51kxqaiz9zaj9am8wsjyz13j85sp23z267hbv3";
})
(fetchNuGet {
name = "NBitcoin.Secp256k1";
version = "1.0.1";
sha256 = "0j3a8iamqh06b7am6k8gh6d41zvrnmsif3525bw742jw5byjypdl";
})
(fetchNuGet {
name = "Microsoft.AspNetCore.Mvc.NewtonsoftJson";
version = "3.1.1";
sha256 = "1c2lrlp64kkacnjgdyygr6fqdawk10l8j4qgppii6rq61yjwhcig";
})
(fetchNuGet {
name = "Newtonsoft.Json.Bson";
version = "1.0.2";
sha256 = "0c27bhy9x3c2n26inq32kmp6drpm71n6mqnmcr19wrlcaihglj35";
})
(fetchNuGet {
name = "Microsoft.Win32.Registry";
version = "4.7.0";
sha256 = "0bx21jjbs7l5ydyw4p6cn07chryxpmchq2nl5pirzz4l3b0q4dgs";
})
(fetchNuGet {
name = "Microsoft.OpenApi";
version = "1.1.4";
sha256 = "1sn79829nhx6chi2qxsza1801di7zdl5fd983m0jakawzbjhjcb3";
})
(fetchNuGet {
name = "NBitcoin";
version = "5.0.29";
sha256 = "0a6jvdvnf5h9j6c3ii3pdnkq79shmcm1hf6anaqcwvi3gq19chak";
})
(fetchNuGet {
name = "Swashbuckle.AspNetCore.SwaggerUI";
version = "5.0.0";
sha256 = "0d7vjq489rz208j6k3rb7vq6mzxzff3mqg83yk2rqy25vklrsbjd";
})
(fetchNuGet {
name = "Swashbuckle.AspNetCore";
version = "5.0.0";
sha256 = "0rn2awmzrsrppk97xbbwk4kq1mys9bygb5xhl6mphbk0hchrvh09";
})
(fetchNuGet {
name = "Swashbuckle.AspNetCore.SwaggerGen";
version = "5.0.0";
sha256 = "00swg2avqnb38q2bsxljd34n8rpknp74h9vbn0fdnfds3a32cqr4";
})
(fetchNuGet {
name = "Microsoft.Extensions.ApiDescription.Server";
version = "3.0.0";
sha256 = "13a47xcqyi5gz85swxd4mgp7ndgl4kknrvv3xwmbn71hsh953hsh";
})
(fetchNuGet {
name = "Swashbuckle.AspNetCore.Swagger";
version = "5.0.0";
sha256 = "1341nv8nmh6avs3y7w2szzir5qd0bndxwrkdmvvj3hcxj1126w2f";
})
(fetchNuGet {
name = "runtime.unix.System.Private.Uri";
version = "4.0.1";
sha256 = "0ic5dgc45jkhcr1g9xmmzjm7ffiw4cymm0fprczlx4fnww4783nm";
})
(fetchNuGet {
name = "runtime.any.System.Text.Encoding";
version = "4.0.11";
sha256 = "0m4vgmzi1ky8xlj0r7xcyazxln3j9dlialnk6d2gmgrfnzf8f9m7";
})
(fetchNuGet {
name = "runtime.any.System.Threading.Tasks";
version = "4.0.11";
sha256 = "1qzdp09qs8br5qxzlm1lgbjn4n57fk8vr1lzrmli2ysdg6x1xzvk";
})
(fetchNuGet {
name = "System.Private.Uri";
version = "4.0.1";
sha256 = "0k57qhawjysm4cpbfpc49kl4av7lji310kjcamkl23bwgij5ld9j";
})
(fetchNuGet {
name = "runtime.any.System.Diagnostics.Tracing";
version = "4.1.0";
sha256 = "041im8hmp1zdgrx6jzyrdch6kshvbddmkar7r2mlm1ksb5c5kwpq";
})
(fetchNuGet {
name = "runtime.any.System.IO";
version = "4.1.0";
sha256 = "0kasfkjiml2kk8prnyn1990nhsahnjggvqwszqjdsfwfl43vpcb5";
})
(fetchNuGet {
name = "runtime.any.System.Runtime.Handles";
version = "4.0.1";
sha256 = "1kswgqhy34qvc49i981fk711s7knd6z13bp0rin8ms6axkh98nas";
})
(fetchNuGet {
name = "runtime.any.System.Reflection.Primitives";
version = "4.0.1";
sha256 = "1zxrpvixr5fqzkxpnin6g6gjq6xajy1snghz99ds2dwbhm276rhz";
})
(fetchNuGet {
name = "runtime.any.System.Runtime";
version = "4.1.0";
sha256 = "0mjr2bi7wvnkphfjqgkyf8vfyvy15a829jz6mivl6jmksh2bx40m";
})
(fetchNuGet {
name = "runtime.any.System.Resources.ResourceManager";
version = "4.0.1";
sha256 = "1jmgs7hynb2rff48623wnyb37558bbh1q28k9c249j5r5sgsr5kr";
})
(fetchNuGet {
name = "runtime.any.System.Globalization";
version = "4.0.11";
sha256 = "0240rp66pi5bw1xklmh421hj7arwcdmjmgfkiq1cbc6nrm8ah286";
})
(fetchNuGet {
name = "runtime.any.System.Collections";
version = "4.0.11";
sha256 = "1x44bm1cgv28zmrp095wf9mn8a6a0ivnzp9v14dcbhx06igxzgg0";
})
(fetchNuGet {
name = "runtime.unix.System.Diagnostics.Debug";
version = "4.0.11";
sha256 = "05ndbai4vpqrry0ghbfgqc8xblmplwjgndxmdn1zklqimczwjg2d";
})
(fetchNuGet {
name = "runtime.unix.System.Runtime.Extensions";
version = "4.1.0";
sha256 = "0x1cwd7cvifzmn5x1wafvj75zdxlk3mxy860igh3x1wx0s8167y4";
})
(fetchNuGet {
name = "runtime.any.System.Reflection";
version = "4.1.0";
sha256 = "06kcs059d5czyakx75rvlwa2mr86156w18fs7chd03f7084l7mq6";
})
(fetchNuGet {
name = "runtime.any.System.Runtime.InteropServices";
version = "4.1.0";
sha256 = "0gm8if0hcmp1qys1wmx4970k2x62pqvldgljsyzbjhiy5644vl8z";
})
]

View file

@ -8,15 +8,15 @@
assert stdenv ? glibc; assert stdenv ? glibc;
# http://download.eclipse.org/eclipse/downloads/ is the main place to # https://download.eclipse.org/eclipse/downloads/ is the main place to
# find the downloads needed for new versions # find the downloads needed for new versions
let let
platform_major = "4"; platform_major = "4";
platform_minor = "15"; platform_minor = "16";
year = "2020"; year = "2020";
month = "03"; month = "06";
timestamp = "${year}${month}050155"; timestamp = "${year}${month}040540";
gtk = gtk3; gtk = gtk3;
in rec { in rec {
@ -33,8 +33,8 @@ in rec {
description = "Eclipse IDE for C/C++ Developers"; description = "Eclipse IDE for C/C++ Developers";
src = src =
fetchurl { fetchurl {
url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/technology/epp/downloads/release/${year}-${month}/R/eclipse-cpp-${year}-${month}-R-incubation-linux-gtk-x86_64.tar.gz"; url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/technology/epp/downloads/release/${year}-${month}/R/eclipse-cpp-${year}-${month}-R-linux-gtk-x86_64.tar.gz";
sha512 = "2wy4a3p347fajr9zsfz1zlvz6jpy3vficdry27m5fs0azfmxmy2cfns5hh18sin4xqq3jvqppfqxh41rzcpcmiq12zhc6cz42brqgxw"; sha512 = "0vfxzsvfv9zmd0ckrdpziijzskh13g8kgk8ibkwmhmqmj14a3visk6yvn5q2s0knkswl1zy9arinw0mxvqh72dfj63vwc01vhp06lyr";
}; };
}; };
@ -46,7 +46,7 @@ in rec {
src = src =
fetchurl { fetchurl {
url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/technology/epp/downloads/release/${year}-${month}/R/eclipse-modeling-${year}-${month}-R-linux-gtk-x86_64.tar.gz"; url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/technology/epp/downloads/release/${year}-${month}/R/eclipse-modeling-${year}-${month}-R-linux-gtk-x86_64.tar.gz";
sha512 = "0qccsclay9000sqrymm8hkg70a4jcvd70vymw1kkxsklcs7dnrhch55an98gbzf9r0jgd1ap62a4hyxlnm6hdqqniwcgdza0i4nwwgj"; sha512 = "29nr1x3fgdw5ygrppfma6yi1iaqvad24jyb58sag735z1nz4ymajcwakg52mlv3s19d4w8cxpskh1r459mwz7j769qplymspqifvlkd";
}; };
}; };
@ -58,7 +58,7 @@ in rec {
src = src =
fetchurl { fetchurl {
url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/eclipse/downloads/drops${platform_major}/R-${platform_major}.${platform_minor}-${timestamp}/eclipse-platform-${platform_major}.${platform_minor}-linux-gtk-x86_64.tar.gz"; url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/eclipse/downloads/drops${platform_major}/R-${platform_major}.${platform_minor}-${timestamp}/eclipse-platform-${platform_major}.${platform_minor}-linux-gtk-x86_64.tar.gz";
sha512 = "01rv5x7qqm0a2p30828z2snms3nb2kjx9si63sr5rdkdgr3vbh6xq8n8fn757dqazmpz9zskmwxxmbxnwycfllhgb8msb77pcy3fpg7"; sha512 = "2pm4xam0jn9x34k1hr5rn67fpvc6snlkpcfn4bzdcf2xjv9f3dr2039mkcrhri5nv2bj6fkbai6aga6fmmrb3na33b7ir7sqlqqn61b";
}; };
}; };
@ -83,7 +83,7 @@ in rec {
src = src =
fetchurl { fetchurl {
url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/eclipse/downloads/drops${platform_major}/R-${platform_major}.${platform_minor}-${timestamp}/eclipse-SDK-${platform_major}.${platform_minor}-linux-gtk-x86_64.tar.gz"; url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/eclipse/downloads/drops${platform_major}/R-${platform_major}.${platform_minor}-${timestamp}/eclipse-SDK-${platform_major}.${platform_minor}-linux-gtk-x86_64.tar.gz";
sha512 = "33ra8qslwz73240xzjvr751lpl94drlcf425a7kxngq1qla2cda7gxr71bxlr9fm2hrqq0h097ihmg0ix9hv2dmwnc76gp4hwwrlk41"; sha512 = "195c07yabmi2a42qxfmpbv6ychpj15bbpgyp40s1pcdb3p875vcqjinq9dqy2sixzwjhfdrggpvwihav87rkih9arzmk2s4cm31mjqd";
}; };
}; };
@ -95,7 +95,7 @@ in rec {
src = src =
fetchurl { fetchurl {
url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/technology/epp/downloads/release/${year}-${month}/R/eclipse-java-${year}-${month}-R-linux-gtk-x86_64.tar.gz"; url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/technology/epp/downloads/release/${year}-${month}/R/eclipse-java-${year}-${month}-R-linux-gtk-x86_64.tar.gz";
sha512 = "0ffa1q19z31j8i552mp9zg4v0p4iv002cvlzh49ia8hi0hgk75pbkp6vxlr75jz0as03n71f0ww8xbflji31qgwfmy6rs1rzqihfff9"; sha512 = "3n8jllgxarrxgz16n7zb4bgaqxk0m9frcxrgdxvy25ar2iw8js4q4ir3cc20y4ri3ii74rf3jy6n4ndhm57miwqh4p2wqzhfjlinirb";
}; };
}; };

View file

@ -254,12 +254,13 @@ rec {
cdt = buildEclipseUpdateSite rec { cdt = buildEclipseUpdateSite rec {
name = "cdt-${version}"; name = "cdt-${version}";
version = "9.11.0"; # find current version at https://www.eclipse.org/cdt/downloads.php
version = "9.11.1";
src = fetchzip { src = fetchzip {
stripRoot = false; stripRoot = false;
url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/tools/cdt/releases/9.11/${name}/${name}.zip"; url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/tools/cdt/releases/9.11/${name}/${name}.zip";
sha256 = "1730w6rbv649nzfalfd10p2ph0z9rbrrcflga0n1dpmg181xh9lk"; sha256 = "00cpaal6jm9xb4nbkljrf381r3lf1rb1p06vrbn4l0lxnbckb9df";
}; };
meta = with stdenv.lib; { meta = with stdenv.lib; {
@ -474,12 +475,12 @@ rec {
jdt = buildEclipseUpdateSite rec { jdt = buildEclipseUpdateSite rec {
name = "jdt-${version}"; name = "jdt-${version}";
version = "4.15"; version = "4.16";
src = fetchzip { src = fetchzip {
stripRoot = false; stripRoot = false;
url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/eclipse/downloads/drops4/R-${version}-202003050155/org.eclipse.jdt-${version}.zip"; url = "https://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/eclipse/downloads/drops4/R-${version}-202006040540/org.eclipse.jdt-${version}.zip";
sha256 = "1dm4qgfb6rm7w0dk8br071c7wy0ybp7zrwvr3i02c2bxzy2psz7q"; sha256 = "0g349hg2nv1y628daxf84396wpf33z52wxv0gawlgrirbbizaznd";
}; };
meta = with stdenv.lib; { meta = with stdenv.lib; {

View file

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "kdev-php"; pname = "kdev-php";
version = "5.5.1"; version = "5.5.2";
src = fetchurl { src = fetchurl {
url = "https://github.com/KDE/${pname}/archive/v${version}.tar.gz"; url = "https://github.com/KDE/${pname}/archive/v${version}.tar.gz";
sha256 = "1z3mmlg5srzff0y1pjd4wfdf9k4rzk7gfdvbvzizkiy395qw1phv"; sha256 = "0z32x0297g078jk3jhzb4vrf8jhw0qprvqzm9p097h8x0026w42l";
}; };
nativeBuildInputs = [ cmake extra-cmake-modules ]; nativeBuildInputs = [ cmake extra-cmake-modules ];

View file

@ -1,25 +1,35 @@
{ stdenv, buildGoPackage, fetchFromGitHub }: { stdenv, buildGoPackage, fetchFromGitHub, installShellFiles }:
buildGoPackage rec { buildGoPackage rec {
pname = "micro"; pname = "micro";
version = "2.0.3"; version = "2.0.5";
goPackagePath = "github.com/zyedidia/micro"; goPackagePath = "github.com/zyedidia/micro";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "zyedidia"; owner = "zyedidia";
repo = "micro"; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "017m9kb3gfrgzd06f1nma1i3m5rb0hzpgdikb86lsyv8ik18y12z"; sha256 = "12fyyax1mr0n82s5yhmk90iyyzbh32rppkkpj37c25pal73czdhc";
fetchSubmodules = true; fetchSubmodules = true;
}; };
nativeBuildInputs = [ installShellFiles ];
subPackages = [ "cmd/micro" ]; subPackages = [ "cmd/micro" ];
buildFlagsArray = [ "-ldflags=" "-X ${goPackagePath}/internal/util.Version=${version}" ]; buildFlagsArray = let t = "${goPackagePath}/internal/util"; in ''
-ldflags=
-X ${t}.Version=${version}
-X ${t}.CommitHash=${src.rev}
'';
goDeps = ./deps.nix; goDeps = ./deps.nix;
postInstall = ''
installManPage $src/assets/packaging/micro.1
'';
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = "https://micro-editor.github.io"; homepage = "https://micro-editor.github.io";
description = "Modern and intuitive terminal-based text editor"; description = "Modern and intuitive terminal-based text editor";

View file

@ -203,8 +203,8 @@
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/zyedidia/clipboard"; url = "https://github.com/zyedidia/clipboard";
rev = "241f98e9b197"; rev = "7c45b8673834";
sha256 = "1glc8w30sijpbppcvaf3503rmx5nxqkcgw87dr2pr3q3vv1bg3zi"; sha256 = "0ag36wd3830d4s6fvpj05v6f662c5rymgdydsj2gq8aaqplfb0v4";
}; };
} }
{ {
@ -257,8 +257,8 @@
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/zyedidia/tcell"; url = "https://github.com/zyedidia/tcell";
rev = "v1.4.4"; rev = "v1.4.7";
sha256 = "0d62a9csab15b64y09jcbvq71065wliw4bd5m7lfpl5k8rmrrdyi"; sha256 = "1ddaznp0haz35mxfjjh2fmamdrlk1igqg65fz22l5r6vvhcdsfxa";
}; };
} }
{ {

View file

@ -104,6 +104,8 @@ in stdenv.mkDerivation rec {
++ stdenv.lib.optionals luaSupport [ ++ stdenv.lib.optionals luaSupport [
"--with-lua-prefix=${lua}" "--with-lua-prefix=${lua}"
"--enable-luainterp" "--enable-luainterp"
] ++ stdenv.lib.optional lua.pkgs.isLuaJIT [
"--with-luajit"
] ]
++ stdenv.lib.optionals pythonSupport [ ++ stdenv.lib.optionals pythonSupport [
"--enable-python${if isPython3 then "3" else ""}interp=yes" "--enable-python${if isPython3 then "3" else ""}interp=yes"

View file

@ -0,0 +1,39 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl gnugrep gnused gawk
ROOT="$(dirname "$(readlink -f "$0")")"
if [ ! -f "$ROOT/vscode.nix" ]; then
echo "ERROR: cannot find vscode.nix in $ROOT"
exit 1
fi
if [ ! -f "$ROOT/vscodium.nix" ]; then
echo "ERROR: cannot find vscodium.nix in $ROOT"
exit 1
fi
# VSCode
VSCODE_VER=$(curl -s -L "https://code.visualstudio.com/Download" | grep "is now available" | awk -F'</span>' '{print $1}' | awk -F'>' '{print $NF}')
VSCODE_VER=$(curl -s -L "https://code.visualstudio.com/updates/v${VSCODE_VER/./_}" | grep "Downloads:" | awk -F'code.visualstudio.com/' '{print $2}' | awk -F'/' '{print $1}')
sed -i "s/version = \".*\"/version = \"${VSCODE_VER}\"/" "$ROOT/vscode.nix"
VSCODE_LINUX_URL="https://vscode-update.azurewebsites.net/${VSCODE_VER}/linux-x64/stable"
VSCODE_LINUX_SHA256=$(nix-prefetch-url ${VSCODE_LINUX_URL})
sed -i "s/x86_64-linux = \".\{52\}\"/x86_64-linux = \"${VSCODE_LINUX_SHA256}\"/" "$ROOT/vscode.nix"
VSCODE_DARWIN_URL="https://vscode-update.azurewebsites.net/${VSCODE_VER}/darwin/stable"
VSCODE_DARWIN_SHA256=$(nix-prefetch-url ${VSCODE_DARWIN_URL})
sed -i "s/x86_64-darwin = \".\{52\}\"/x86_64-darwin = \"${VSCODE_DARWIN_SHA256}\"/" "$ROOT/vscode.nix"
# VSCodium
VSCODIUM_VER=$(curl -Ls -w %{url_effective} -o /dev/null https://github.com/VSCodium/vscodium/releases/latest | awk -F'/' '{print $NF}')
sed -i "s/version = \".*\"/version = \"${VSCODIUM_VER}\"/" "$ROOT/vscodium.nix"
VSCODIUM_LINUX_URL="https://github.com/VSCodium/vscodium/releases/download/${VSCODIUM_VER}/VSCodium-linux-x64-${VSCODIUM_VER}.tar.gz"
VSCODIUM_LINUX_SHA256=$(nix-prefetch-url ${VSCODIUM_LINUX_URL})
sed -i "s/x86_64-linux = \".\{52\}\"/x86_64-linux = \"${VSCODIUM_LINUX_SHA256}\"/" "$ROOT/vscodium.nix"
VSCODIUM_DARWIN_URL="https://github.com/VSCodium/vscodium/releases/download/${VSCODIUM_VER}/VSCodium-darwin-${VSCODIUM_VER}.zip"
VSCODIUM_DARWIN_SHA256=$(nix-prefetch-url ${VSCODIUM_DARWIN_URL})
sed -i "s/x86_64-darwin = \".\{52\}\"/x86_64-darwin = \"${VSCODIUM_DARWIN_SHA256}\"/" "$ROOT/vscodium.nix"

View file

@ -1,25 +1,22 @@
{ stdenv, rustPlatform , fetchFromGitHub, Security }: { stdenv, rustPlatform , fetchFromGitHub, Security }:
rustPlatform.buildRustPackage rec { rustPlatform.buildRustPackage rec {
pname = "whitebox_tools"; pname = "whitebox_tools";
version = "1.2.0"; version = "1.3.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "jblindsay"; owner = "jblindsay";
repo = "whitebox-tools"; repo = "whitebox-tools";
rev = "v${version}"; rev = "v${version}";
sha256 = "0zi32d0wrbl2763dcllv2g0liwacsfiza5lkx52620prjjbhby8i"; sha256 = "0c9jmfjz6ys65y65zlllv9xvaaavr9jpqc1dc217iywhj07j8k2v";
}; };
buildInputs = stdenv.lib.optional stdenv.isDarwin Security; buildInputs = stdenv.lib.optional stdenv.isDarwin Security;
cargoSha256 = "13k21akyfqgamywj39bw73sldby1s02vyvxfglxbaqq1x96xcy4i"; cargoSha256 = "05w2jimmygg7dc93i8bpjpjc5yj5xfpfkjnbbgw2sq4kh06r5ii4";
# failures: structures::polyline::test::test_polyline_split
doCheck = false;
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "An advanced geospatial data analysis platform"; description = "An advanced geospatial data analysis platform";
homepage = "http://www.uoguelph.ca/~hydrogeo/WhiteboxTools/index.html"; homepage = "https://jblindsay.github.io/ghrg/WhiteboxTools/index.html";
license = licenses.mit; license = licenses.mit;
maintainers = [ maintainers.mpickering ]; maintainers = [ maintainers.mpickering ];
platforms = platforms.all; platforms = platforms.all;

View file

@ -0,0 +1,59 @@
{ mkDerivation
, lib
, fetchFromGitHub
, makeDesktopItem
, qmake
, qtbase
, libpng
, giflib
, impy
}:
let
desktopItem = makeDesktopItem {
name = "EvilPixie";
desktopName = "EvilPixie";
exec = "evilpixie %F";
icon = "evilpixie";
genericName = "Image Editor";
categories = "Graphics;2DGraphics;RasterGraphics;";
mimeType = "image/bmp;image/gif;image/jpeg;image/jpg;image/png;image/x-pcx;image/x-targa;image/x-tga;";
};
in mkDerivation rec {
pname = "evilpixie";
version = "0.2";
src = fetchFromGitHub {
owner = "bcampbell";
repo = "evilpixie";
rev = "v${version}";
sha256 = "1yg4ic3kcxqmr7k5bbvrv5iavlnhpdx6510z5wha9k9k5q9c4dvh";
};
nativeBuildInputs = [
qmake
];
buildInputs = [
qtbase
libpng
giflib
impy
];
postInstall = ''
ln -s ${desktopItem}/share/applications $out/share
install -Dm 444 icon_128x128.png $out/share/icons/hicolor/128x128/apps/evilpixie.png
'';
meta = with lib; {
description = "Pixel-oriented paint program, modelled on Deluxe Paint";
homepage = "http://evilpixie.scumways.com/";
downloadPage = "https://github.com/bcampbell/evilpixie/releases";
license = licenses.gpl3;
maintainers = with maintainers; [ fgaz ];
platforms = platforms.all;
};
}

View file

@ -1,26 +1,33 @@
{ stdenv, fetchFromGitHub, cmake, makeWrapper, qtbase , qttools, python { boost, cmake, fetchFromGitHub, ffmpeg, qtbase, qtx11extras,
, libGLU, libGL , libXt, qtx11extras, qtxmlpatterns , mkDerivation }: qttools, qtxmlpatterns, qtsvg, gdal, gfortran, libXt, makeWrapper,
mkDerivation, ninja, openmpi, python3, stdenv, tbb, libGLU, libGL }:
mkDerivation rec { mkDerivation rec {
pname = "paraview"; pname = "paraview";
version = "5.6.3"; version = "5.8.0";
# fetching from GitHub instead of taking an "official" source
# tarball because of missing submodules there
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "Kitware"; owner = "Kitware";
repo = "ParaView"; repo = "ParaView";
rev = "v${version}"; rev = "v${version}";
sha256 = "0zcij59pg47c45gfddnpbin13w16smzhcbivzm1k4pg4366wxq1q"; sha256 = "1mka6wwg9mbkqi3phs29mvxq6qbc44sspbm4awwamqhilh4grhrj";
fetchSubmodules = true; fetchSubmodules = true;
}; };
cmakeFlags = [ # Avoid error: format not a string literal and
"-DPARAVIEW_ENABLE_PYTHON=ON" # no format arguments [-Werror=format-security]
"-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON" preConfigure = ''
"-DPARAVIEW_ENABLE_EMBEDDED_DOCUMENTATION=OFF" substituteInPlace VTK/Common/Core/vtkLogger.h \
"-DOpenGL_GL_PREFERENCE=GLVND" --replace 'vtkLogScopeF(verbosity_name, __func__)' 'vtkLogScopeF(verbosity_name, "%s", __func__)'
];
substituteInPlace VTK/Common/Core/vtkLogger.h \
--replace 'vtkVLogScopeF(level, __func__)' 'vtkVLogScopeF(level, "%s", __func__)'
'';
# Find the Qt platform plugin "minimal"
patchPhase = ''
export QT_PLUGIN_PATH=${qtbase.bin}/${qtbase.qtPluginPrefix}
'';
# During build, binaries are called that rely on freshly built # During build, binaries are called that rely on freshly built
# libraries. These reside in build/lib, and are not found by # libraries. These reside in build/lib, and are not found by
@ -29,37 +36,50 @@ mkDerivation rec {
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$PWD/lib:$PWD/VTK/ThirdParty/vtkm/vtk-m/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$PWD/lib:$PWD/VTK/ThirdParty/vtkm/vtk-m/lib
''; '';
enableParallelBuilding = true; cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DPARAVIEW_ENABLE_FFMPEG=ON"
"-DPARAVIEW_ENABLE_GDAL=ON"
"-DPARAVIEW_ENABLE_MOTIONFX=ON"
"-DPARAVIEW_ENABLE_VISITBRIDGE=ON"
"-DPARAVIEW_ENABLE_XDMF3=ON"
"-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON"
"-DPARAVIEW_USE_MPI=ON"
"-DPARAVIEW_USE_PYTHON=ON"
"-DVTK_SMP_IMPLEMENTATION_TYPE=TBB"
"-DVTKm_ENABLE_MPI=ON"
"-DCMAKE_INSTALL_LIBDIR=lib"
"-DCMAKE_INSTALL_INCLUDEDIR=include"
"-DCMAKE_INSTALL_BINDIR=bin"
"-DOpenGL_GL_PREFERENCE=GLVND"
"-GNinja"
];
nativeBuildInputs = [ nativeBuildInputs = [
cmake cmake
makeWrapper makeWrapper
ninja
gfortran
]; ];
buildInputs = [ buildInputs = [
python
python.pkgs.numpy
libGLU libGL libGLU libGL
libXt libXt
openmpi
(python3.withPackages (ps: with ps; [ numpy matplotlib mpi4py ]))
tbb
boost
ffmpeg
gdal
qtbase qtbase
qtx11extras qtx11extras
qttools qttools
qtxmlpatterns qtxmlpatterns
qtsvg
]; ];
# Paraview links into the Python library, resolving symbolic links on the way,
# so we need to put the correct sitePackages (with numpy) back on the path
preFixup = ''
wrapQtApp $out/bin/paraview \
--prefix PYTHONPATH "${python.pkgs.numpy}/${python.sitePackages}"
wrapQtApp $out/bin/pvbatch \
--prefix PYTHONPATH "${python.pkgs.numpy}/${python.sitePackages}"
wrapQtApp $out/bin/pvpython \
--prefix PYTHONPATH "${python.pkgs.numpy}/${python.sitePackages}"
'';
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = "http://www.paraview.org/"; homepage = "https://www.paraview.org/";
description = "3D Data analysis and visualization application"; description = "3D Data analysis and visualization application";
license = licenses.free; license = licenses.free;
maintainers = with maintainers; [ guibert ]; maintainers = with maintainers; [ guibert ];

View file

@ -1,10 +1,10 @@
{ callPackage, fetchurl, ... } @ args: { callPackage, fetchurl, ... } @ args:
callPackage ./generic.nix (args // rec { callPackage ./generic.nix (args // rec {
version = "1.0.28"; version = "1.0.30";
src = fetchurl { src = fetchurl {
url = "https://gitlab.com/sane-project/backends/uploads/9e718daff347826f4cfe21126c8d5091/sane-backends-${version}.tar.gz"; url = "https://gitlab.com/sane-project/backends/uploads/c3dd60c9e054b5dee1e7b01a7edc98b0/sane-backends-${version}.tar.gz";
sha256 = "00yy8q9hqdf0zjxxl4d8njr9zf0hhi3a9ib23ikc2anqf8zhy9ii"; sha256 = "18vryaycps3zpjzxh0wjgg8nv2f4pdvcfxxmdfj28qbzqjlrcp9z";
}; };
}) })

View file

@ -90,8 +90,6 @@ rustPlatform.buildRustPackage rec {
--replace xdg-open ${xdg_utils}/bin/xdg-open --replace xdg-open ${xdg_utils}/bin/xdg-open
''; '';
postBuild = lib.optionalString stdenv.isDarwin "make app";
installPhase = '' installPhase = ''
runHook preInstall runHook preInstall
@ -100,7 +98,8 @@ rustPlatform.buildRustPackage rec {
'' + ( '' + (
if stdenv.isDarwin then '' if stdenv.isDarwin then ''
mkdir $out/Applications mkdir $out/Applications
cp -r $releaseDir/osx/Alacritty.app $out/Applications/Alacritty.app cp -r extra/osx/Alacritty.app $out/Applications
ln -s $out/bin $out/Applications/Alacritty.app/Contents/MacOS
'' else '' '' else ''
install -D extra/linux/Alacritty.desktop -t $out/share/applications/ install -D extra/linux/Alacritty.desktop -t $out/share/applications/
install -D extra/logo/compat/alacritty-term.svg $out/share/icons/hicolor/scalable/apps/Alacritty.svg install -D extra/logo/compat/alacritty-term.svg $out/share/icons/hicolor/scalable/apps/Alacritty.svg

View file

@ -0,0 +1,43 @@
{ stdenv, appimageTools, fetchurl, gsettings-desktop-schemas, gtk3 }:
let
version = "0.7.1";
pname = "devdocs-desktop";
name = "${pname}-${version}";
src = fetchurl {
url = "https://github.com/egoist/devdocs-desktop/releases/download/v${version}/DevDocs-${version}.AppImage";
sha256 = "5bba99a34c90a65eff67aface0b7446cbf43d620a1c195f27e7bb33ab6d3d0c2";
};
appimageContents = appimageTools.extractType2 {
inherit name src;
};
in appimageTools.wrapType2 rec {
inherit name src;
profile = ''
export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
'';
extraInstallCommands = ''
mv $out/bin/${name} $out/bin/${pname}
install -m 444 -D ${appimageContents}/devdocs.desktop $out/share/applications/devdocs.desktop
install -m 444 -D ${appimageContents}/devdocs.png $out/share/icons/hicolor/0x0/apps/devdocs.png
substituteInPlace $out/share/applications/devdocs.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
'';
meta = with stdenv.lib; {
description = "A full-featured desktop app for DevDocs.io";
longDescription = ''
DevDocs.io combines multiple API documentations in a fast, organized, and searchable interface. This is an unofficial desktop app for it.
'';
homepage = "https://github.com/egoist/devdocs-desktop";
downloadPage = "https://github.com/egoist/devdocs-desktop/releases";
license = licenses.mit;
maintainers = with maintainers; [ ymarkus ];
platforms = [ "x86_64-linux" ];
};
}

View file

@ -1,12 +1,12 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
backports (3.17.0) backports (3.17.2)
concurrent-ruby (1.1.6) concurrent-ruby (1.1.6)
crass (1.0.6) crass (1.0.6)
execjs (2.7.0) execjs (2.7.0)
ffi (1.12.2) ffi (1.13.1)
gemojione (4.3.2) gemojione (4.3.3)
json json
github-markup (3.0.4) github-markup (3.0.4)
gollum (5.0.1) gollum (5.0.1)
@ -25,28 +25,28 @@ GEM
therubyrhino (~> 2.1.0) therubyrhino (~> 2.1.0)
uglifier (~> 3.2) uglifier (~> 3.2)
useragent (~> 0.16.2) useragent (~> 0.16.2)
gollum-lib (5.0.3) gollum-lib (5.0.4)
gemojione (~> 4.1) gemojione (~> 4.1)
github-markup (~> 3.0) github-markup (~> 3.0)
gollum-rugged_adapter (~> 0.99.4, >= 0.99.4) gollum-rugged_adapter (~> 1.0)
loofah (~> 2.3) loofah (~> 2.3)
nokogiri (~> 1.8) nokogiri (~> 1.8)
octicons (~> 8.5) octicons (~> 8.5)
rouge (~> 3.1) rouge (~> 3.1)
twitter-text (= 1.14.7) twitter-text (= 1.14.7)
gollum-rugged_adapter (0.99.4) gollum-rugged_adapter (1.0)
mime-types (>= 1.15) mime-types (>= 1.15)
rugged (~> 0.99) rugged (~> 0.99)
json (2.3.0) json (2.3.0)
kramdown (2.1.0) kramdown (2.1.0)
kramdown-parser-gfm (1.0.1) kramdown-parser-gfm (1.0.1)
kramdown (~> 2.0) kramdown (~> 2.0)
loofah (2.5.0) loofah (2.6.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mime-types (3.3.1) mime-types (3.3.1)
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2019.1009) mime-types-data (3.2020.0512)
mini_portile2 (2.4.0) mini_portile2 (2.4.0)
multi_json (1.14.1) multi_json (1.14.1)
mustache (0.99.8) mustache (0.99.8)
@ -56,14 +56,14 @@ GEM
mini_portile2 (~> 2.4.0) mini_portile2 (~> 2.4.0)
octicons (8.5.0) octicons (8.5.0)
nokogiri (>= 1.6.3.1) nokogiri (>= 1.6.3.1)
rack (2.2.2) rack (2.2.3)
rack-protection (2.0.8.1) rack-protection (2.0.8.1)
rack rack
rb-fsevent (0.10.3) rb-fsevent (0.10.4)
rb-inotify (0.10.1) rb-inotify (0.10.1)
ffi (~> 1.0) ffi (~> 1.0)
rexml (3.2.4) rexml (3.2.4)
rouge (3.17.0) rouge (3.20.0)
rss (0.2.9) rss (0.2.9)
rexml rexml
ruby2_keywords (0.0.2) ruby2_keywords (0.0.2)
@ -88,7 +88,7 @@ GEM
sprockets (3.7.2) sprockets (3.7.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
sprockets-helpers (1.2.3) sprockets-helpers (1.3.0)
sprockets (>= 2.2) sprockets (>= 2.2)
therubyrhino (2.1.2) therubyrhino (2.1.2)
therubyrhino_jar (>= 1.7.4, < 1.7.9) therubyrhino_jar (>= 1.7.4, < 1.7.9)

View file

@ -4,10 +4,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "13ywgyyxzlgks7nb17gwqjmdqjjmhc8si3iliv8jhf51lb3s865v"; sha256 = "0rg58rd3hgk8wz4fbapn3szwgymk1q9lv4ywg37bkbcflsbi70iy";
type = "gem"; type = "gem";
}; };
version = "3.17.0"; version = "3.17.2";
}; };
concurrent-ruby = { concurrent-ruby = {
groups = ["default"]; groups = ["default"];
@ -44,10 +44,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "10lfhahnnc91v63xpvk65apn61pib086zha3z5sp1xk9acfx12h4"; sha256 = "12lpwaw82bb0rm9f52v1498bpba8aj2l2q359mkwbxsswhpga5af";
type = "gem"; type = "gem";
}; };
version = "1.12.2"; version = "1.13.1";
}; };
gemojione = { gemojione = {
dependencies = ["json"]; dependencies = ["json"];
@ -55,10 +55,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "097mrsahv1h67kjrk1cpiqc1cbrfgvlp2rqwmzdzxrq0kx50461w"; sha256 = "0fwd523pgr72w3w6jwpz9i6sggvz52d7831a1s4y3lv8m50j6ima";
type = "gem"; type = "gem";
}; };
version = "4.3.2"; version = "4.3.3";
}; };
github-markup = { github-markup = {
groups = ["default"]; groups = ["default"];
@ -87,10 +87,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0r59fyf7i4rlp6wj9ilnqd9pmgpkafv0yl4jmrxa6hr2p4cmnf1g"; sha256 = "0pr3djmawqpmifyadw1vfzdkq720dsaqih1wf8k2vksw0lr9la74";
type = "gem"; type = "gem";
}; };
version = "5.0.3"; version = "5.0.4";
}; };
gollum-rugged_adapter = { gollum-rugged_adapter = {
dependencies = ["mime-types" "rugged"]; dependencies = ["mime-types" "rugged"];
@ -98,10 +98,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0016yfac3b3sy34k9wrqg422mjm8cpd1jd1m4gdn4x2d4jxhxkzq"; sha256 = "0ln12976vm1ks74yyrssdx576b1z0hs8r82fivr366knv5hlcrdm";
type = "gem"; type = "gem";
}; };
version = "0.99.4"; version = "1.0";
}; };
json = { json = {
groups = ["default"]; groups = ["default"];
@ -140,10 +140,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0jk9fgn5ayzbqvzqm11gbkqvas77zdbpkvynlylyiwynclgrn040"; sha256 = "1s9hq8bpn6g5vqr3nzyirn3agn7x8agan6151zvq5vmkf6rvmyb2";
type = "gem"; type = "gem";
}; };
version = "2.5.0"; version = "2.6.0";
}; };
mime-types = { mime-types = {
dependencies = ["mime-types-data"]; dependencies = ["mime-types-data"];
@ -161,10 +161,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "18x61fc36951vw7f74gq8cyybdpxvyg5d0azvqhrs82ddw3v16xh"; sha256 = "1z75svngyhsglx0y2f9rnil2j08f9ab54b3l95bpgz67zq2if753";
type = "gem"; type = "gem";
}; };
version = "3.2019.1009"; version = "3.2020.0512";
}; };
mini_portile2 = { mini_portile2 = {
groups = ["default"]; groups = ["default"];
@ -234,10 +234,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "10mp9s48ssnw004aksq90gvhdvwczh8j6q82q2kqiqq92jd1zxbp"; sha256 = "0i5vs0dph9i5jn8dfc6aqd6njcafmb20rwqngrf759c9cvmyff16";
type = "gem"; type = "gem";
}; };
version = "2.2.2"; version = "2.2.3";
}; };
rack-protection = { rack-protection = {
dependencies = ["rack"]; dependencies = ["rack"];
@ -255,10 +255,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8"; sha256 = "1k9bsj7ni0g2fd7scyyy1sk9dy2pg9akniahab0iznvjmhn54h87";
type = "gem"; type = "gem";
}; };
version = "0.10.3"; version = "0.10.4";
}; };
rb-inotify = { rb-inotify = {
dependencies = ["ffi"]; dependencies = ["ffi"];
@ -286,10 +286,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0xl7k5paf66p57sphm4nfa4k86yf93lhdzzr0cv0l4divq12g2pr"; sha256 = "1r5npy9a95qh5v74lw7ir3nhaq4xrzyhfdixd7c5xy295i92nnic";
type = "gem"; type = "gem";
}; };
version = "3.17.0"; version = "3.20.0";
}; };
rss = { rss = {
dependencies = ["rexml"]; dependencies = ["rexml"];
@ -383,10 +383,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1hy67dwz76n5db00d9n3qy59ici96c2g25c9xpmp2nh8ilvha338"; sha256 = "14iq8v16l31bfq7pikfmgcv5x6pkc5lbdmwwg6zlzcy1bibcliar";
type = "gem"; type = "gem";
}; };
version = "1.2.3"; version = "1.3.0";
}; };
therubyrhino = { therubyrhino = {
dependencies = ["therubyrhino_jar"]; dependencies = ["therubyrhino_jar"];

View file

@ -22,6 +22,11 @@ python3.pkgs.buildPythonApplication rec {
install -D misc/zsh/_khard $out/share/zsh/site-functions/_khard install -D misc/zsh/_khard $out/share/zsh/site-functions/_khard
''; '';
preCheck = ''
# see https://github.com/scheibler/khard/issues/263
export COLUMNS=80
'';
meta = { meta = {
homepage = "https://github.com/scheibler/khard"; homepage = "https://github.com/scheibler/khard";
description = "Console carddav client"; description = "Console carddav client";

View file

@ -3,7 +3,7 @@
libstartup_notification, libGL, libX11, libXrandr, libXinerama, libXcursor, libstartup_notification, libGL, libX11, libXrandr, libXinerama, libXcursor,
libxkbcommon, libXi, libXext, wayland-protocols, wayland, libxkbcommon, libXi, libXext, wayland-protocols, wayland,
installShellFiles, installShellFiles,
which, dbus, dbus,
Cocoa, Cocoa,
CoreGraphics, CoreGraphics,
Foundation, Foundation,
@ -20,14 +20,14 @@
with python3Packages; with python3Packages;
buildPythonApplication rec { buildPythonApplication rec {
pname = "kitty"; pname = "kitty";
version = "0.17.4"; version = "0.18.0";
format = "other"; format = "other";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "kovidgoyal"; owner = "kovidgoyal";
repo = "kitty"; repo = "kitty";
rev = "v${version}"; rev = "v${version}";
sha256 = "1rbyj84y8r6h7qd6w7cw58v2abspippignj458ihv2m26i4als2x"; sha256 = "15i4ld65a5rfbaxxdh6kgg9h0ih73iqjskk82h8j72qgzkc6g3hf";
}; };
buildInputs = [ buildInputs = [
@ -50,7 +50,7 @@ buildPythonApplication rec {
]; ];
nativeBuildInputs = [ nativeBuildInputs = [
pkgconfig which sphinx ncurses pkgconfig sphinx ncurses
] ++ stdenv.lib.optionals stdenv.isDarwin [ ] ++ stdenv.lib.optionals stdenv.isDarwin [
imagemagick imagemagick
libicns # For the png2icns tool. libicns # For the png2icns tool.
@ -63,13 +63,6 @@ buildPythonApplication rec {
patches = [ patches = [
./fix-paths.patch ./fix-paths.patch
] ++ stdenv.lib.optionals stdenv.isLinux [
(substituteAll {
src = ./library-paths.patch;
libstartup_notification = "${libstartup_notification}/lib/libstartup-notification-1.so";
libcanberra = "${libcanberra}/lib/libcanberra.so";
libEGL = "${stdenv.lib.getLib libGL}/lib/libEGL.so.1";
})
] ++ stdenv.lib.optionals stdenv.isDarwin [ ] ++ stdenv.lib.optionals stdenv.isDarwin [
./no-lto.patch ./no-lto.patch
]; ];
@ -77,11 +70,23 @@ buildPythonApplication rec {
# Causes build failure due to warning # Causes build failure due to warning
hardeningDisable = stdenv.lib.optional stdenv.isDarwin "strictoverflow"; hardeningDisable = stdenv.lib.optional stdenv.isDarwin "strictoverflow";
dontConfigure = true;
buildPhase = if stdenv.isDarwin then '' buildPhase = if stdenv.isDarwin then ''
${python.interpreter} setup.py kitty.app --update-check-interval=0 ${python.interpreter} setup.py kitty.app --update-check-interval=0
make man make man
'' else '' '' else ''
${python.interpreter} setup.py linux-package --update-check-interval=0 ${python.interpreter} setup.py linux-package \
--update-check-interval=0 \
--egl-library='${stdenv.lib.getLib libGL}/lib/libEGL.so.1' \
--startup-notification-library='${libstartup_notification}/lib/libstartup-notification-1.so' \
--canberra-library='${libcanberra}/lib/libcanberra.so'
'';
checkInputs = [ pillow ];
checkPhase = ''
${python.interpreter} test.py
''; '';
installPhase = '' installPhase = ''
@ -100,8 +105,6 @@ buildPythonApplication rec {
wrapProgram "$out/bin/kitty" --prefix PATH : "$out/bin:${stdenv.lib.makeBinPath [ imagemagick xsel ncurses.dev ]}" wrapProgram "$out/bin/kitty" --prefix PATH : "$out/bin:${stdenv.lib.makeBinPath [ imagemagick xsel ncurses.dev ]}"
runHook postInstall runHook postInstall
# ZSH completions need to be invoked with `source`:
# https://github.com/kovidgoyal/kitty/blob/8ceb941051b89b7c50850778634f0b6137aa5e6e/docs/index.rst#zsh
mkdir -p "$out/share/"{bash-completion/completions,fish/vendor_completions.d,zsh/site-functions} mkdir -p "$out/share/"{bash-completion/completions,fish/vendor_completions.d,zsh/site-functions}
"$out/bin/kitty" + complete setup fish > "$out/share/fish/vendor_completions.d/kitty.fish" "$out/bin/kitty" + complete setup fish > "$out/share/fish/vendor_completions.d/kitty.fish"
"$out/bin/kitty" + complete setup bash > "$out/share/bash-completion/completions/kitty.bash" "$out/bin/kitty" + complete setup bash > "$out/share/bash-completion/completions/kitty.bash"
@ -125,6 +128,7 @@ buildPythonApplication rec {
homepage = "https://github.com/kovidgoyal/kitty"; homepage = "https://github.com/kovidgoyal/kitty";
description = "A modern, hackable, featureful, OpenGL based terminal emulator"; description = "A modern, hackable, featureful, OpenGL based terminal emulator";
license = licenses.gpl3; license = licenses.gpl3;
changelog = "https://sw.kovidgoyal.net/kitty/changelog.html";
platforms = platforms.darwin ++ platforms.linux; platforms = platforms.darwin ++ platforms.linux;
maintainers = with maintainers; [ tex rvolosatovs ma27 Luflosi ]; maintainers = with maintainers; [ tex rvolosatovs ma27 Luflosi ];
}; };

View file

@ -1,38 +0,0 @@
--- a/glfw/egl_context.c
+++ b/glfw/egl_context.c
@@ -314,7 +314,7 @@ bool _glfwInitEGL(void)
#elif defined(__CYGWIN__)
"libEGL-1.so",
#else
- "libEGL.so.1",
+ "@libEGL@",
#endif
NULL
};
--- a/kitty/desktop.c
+++ b/kitty/desktop.c
@@ -34,10 +34,7 @@ init_x11_startup_notification(PyObject UNUSED *self, PyObject *args) {
done = true;
const char* libnames[] = {
- "libstartup-notification-1.so",
- // some installs are missing the .so symlink, so try the full name
- "libstartup-notification-1.so.0",
- "libstartup-notification-1.so.0.0.0",
+ "@libstartup_notification@",
NULL
};
for (int i = 0; libnames[i]; i++) {
@@ -113,10 +110,7 @@ load_libcanberra(void) {
if (done) return;
done = true;
const char* libnames[] = {
- "libcanberra.so",
- // some installs are missing the .so symlink, so try the full name
- "libcanberra.so.0",
- "libcanberra.so.0.2.5",
+ "@libcanberra@",
NULL
};
for (int i = 0; libnames[i]; i++) {

View file

@ -1,6 +1,6 @@
--- a/setup.py --- a/setup.py
+++ b/setup.py +++ b/setup.py
@@ -277,10 +277,6 @@ def init_env( @@ -287,10 +287,6 @@ def init_env(
cppflags += shlex.split(os.environ.get('CPPFLAGS', '')) cppflags += shlex.split(os.environ.get('CPPFLAGS', ''))
cflags += shlex.split(os.environ.get('CFLAGS', '')) cflags += shlex.split(os.environ.get('CFLAGS', ''))
ldflags += shlex.split(os.environ.get('LDFLAGS', '')) ldflags += shlex.split(os.environ.get('LDFLAGS', ''))

View file

@ -0,0 +1,36 @@
{ mkDerivation, lib, fetchFromGitHub, qmake, libusb1, hidapi }:
mkDerivation rec {
pname = "openrgb";
version = "0.2";
src = fetchFromGitHub {
owner = "CalcProgrammer1";
repo = "OpenRGB";
rev = "release_${version}";
sha256 = "0b1mkp4ca4gdzk020kp6dkd3i9a13h4ikrn3417zscsvv5y9kv0s";
};
nativeBuildInputs = [ qmake ];
buildInputs = [ libusb1 hidapi ];
installPhase = ''
mkdir -p $out/bin
cp OpenRGB $out/bin
'';
doInstallCheck = true;
installCheckPhase = ''
$out/bin/OpenRGB --help > /dev/null
'';
enableParallelBuilding = true;
meta = with lib; {
description = "Open source RGB lighting control";
homepage = "https://gitlab.com/CalcProgrammer1/OpenRGB";
maintainers = with maintainers; [ jonringer ];
license = licenses.gpl2;
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,67 @@
{ lib
, fetchurl
, mkDerivation
, kdeApplications
, kinit
, kdelibs4support
, solid
, kxmlgui
, karchive
, kfilemetadata
, khtml
, knewstuff
, libksane
, cmake
, exempi
, extra-cmake-modules
, libcdio
, poppler
, makeWrapper
, kdoctools
}:
mkDerivation rec {
name = "tellico";
version = "3.3.0";
src = fetchurl {
url = "https://tellico-project.org/files/tellico-${lib.versions.majorMinor version}.tar.xz";
sha256 = "1digkpvzrsbv5znf1cgzs6zkmysfz6lzs12n12mrrpgkcdxc426y";
};
patches = [
./hex.patch
];
nativeBuildInputs = [
cmake
extra-cmake-modules
kdoctools
makeWrapper
];
buildInputs = [
kdelibs4support
solid
kxmlgui
karchive
kfilemetadata
khtml
knewstuff
libksane
cmake
exempi
extra-cmake-modules
libcdio
kdeApplications.libkcddb
poppler
];
meta = {
description = "Collection management software, free and simple";
homepage = "https://tellico-project.org/";
maintainers = with lib.maintainers; [ numkem ];
license = with lib.licenses; [ gpl2 gpl3 ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,15 @@
index 7ea81c7..0c19767 100644
--- a/src/utils/iso5426converter.cpp
+++ b/src/utils/iso5426converter.cpp
@@ -1211,7 +1211,11 @@ QChar Iso5426Converter::getCombiningChar(uint c) {
return 0x1EF1; // SMALL LETTER U WITH HORN AND DOT BELOW
default:
+#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0))
+ myDebug() << "no match for" << hex << c;
+#else
myDebug() << "no match for" << Qt::hex << c;
+#endif
return QChar();
}
}

View file

@ -0,0 +1,21 @@
{ lib, python3Packages, fetchgit }:
python3Packages.buildPythonApplication rec {
pname = "av-98";
version = "1.0.2dev";
src = fetchgit {
url = "https://tildegit.org/solderpunk/AV-98.git";
rev = "96cf8e13fe5714c8cdc754f51eef9f0293b8ca1f";
sha256 = "09iskh33hl5aaif763j1fmbz7yvf0yqsxycfd41scj7vbwdsbxl0";
};
propagatedBuildInputs = with python3Packages; [ ansiwrap cryptography ];
meta = with lib; {
homepage = "https://tildegit.org/solderpunk/AV-98";
description = "Experimental console client for the Gemini protocol";
license = licenses.bsd2;
maintainers = with maintainers; [ ehmry ];
};
}

View file

@ -0,0 +1,53 @@
{ stdenv
, fetchurl
, rustPlatform
, pkg-config
, wrapGAppsHook
, openssl
, gtk3
, gdk-pixbuf
, pango
, atk
, cairo
}:
rustPlatform.buildRustPackage rec {
pname = "castor";
version = "0.8.14";
src = fetchurl {
url = "https://git.sr.ht/~julienxx/castor/archive/${version}.tar.gz";
sha256 = "1ykpmbimhfy3ys2hvv0mn8xiwxzdl43gpny1nc58i0gzv07ar8sc";
};
cargoSha256 = "04w49wka1vkb295lk6fzd6c5rwhzrqkp26hd5d94rx7bhcjmmb9w";
verifyCargoDeps = true;
nativeBuildInputs = [
pkg-config
wrapGAppsHook
];
buildInputs = [
openssl
gtk3
gdk-pixbuf
pango
atk
cairo
];
postInstall = "make PREFIX=$out copy-data";
# Sometimes tests fail when run in parallel
checkFlags = [ "--test-threads=1" ];
meta = with stdenv.lib; {
description = "A graphical client for plain-text protocols written in Rust with GTK. It currently supports the Gemini, Gopher and Finger protocols";
homepage = "https://sr.ht/~julienxx/Castor";
license = licenses.mit;
platforms = platforms.all;
maintainers = with maintainers; [ fgaz ];
};
}

View file

@ -8,7 +8,6 @@
, dbus , dbus
, fontconfig , fontconfig
, freetype , freetype
, gconf
, gdk-pixbuf , gdk-pixbuf
, glib , glib
, glibc , glibc
@ -27,9 +26,7 @@
, libXinerama , libXinerama
, libXrender , libXrender
, libXt , libXt
, libcanberra-gtk2 , libcanberra
, libgnome
, libgnomeui
, libnotify , libnotify
, gnome3 , gnome3
, libGLU, libGL , libGLU, libGL
@ -103,7 +100,6 @@ stdenv.mkDerivation {
dbus dbus
fontconfig fontconfig
freetype freetype
gconf
gdk-pixbuf gdk-pixbuf
glib glib
glibc glibc
@ -122,9 +118,7 @@ stdenv.mkDerivation {
libXinerama libXinerama
libXrender libXrender
libXt libXt
libcanberra-gtk2 libcanberra
libgnome
libgnomeui
libnotify libnotify
libGLU libGL libGLU libGL
nspr nspr

View file

@ -2,7 +2,7 @@
, src, unpackPhase ? null, patches ? [] , src, unpackPhase ? null, patches ? []
, extraNativeBuildInputs ? [], extraConfigureFlags ? [], extraMakeFlags ? [] }: , extraNativeBuildInputs ? [], extraConfigureFlags ? [], extraMakeFlags ? [] }:
{ lib, stdenv, pkgconfig, pango, perl, python2, python3, zip, libIDL { lib, stdenv, pkgconfig, pango, perl, python2, python3, zip
, libjpeg, zlib, dbus, dbus-glib, bzip2, xorg , libjpeg, zlib, dbus, dbus-glib, bzip2, xorg
, freetype, fontconfig, file, nspr, nss, libnotify , freetype, fontconfig, file, nspr, nss, libnotify
, yasm, libGLU, libGL, sqlite, unzip, makeWrapper , yasm, libGLU, libGL, sqlite, unzip, makeWrapper
@ -104,7 +104,7 @@ stdenv.mkDerivation ({
patchFlags = [ "-p1" "-l" ]; patchFlags = [ "-p1" "-l" ];
buildInputs = [ buildInputs = [
gtk2 perl zip libIDL libjpeg zlib bzip2 gtk2 perl zip libjpeg zlib bzip2
dbus dbus-glib pango freetype fontconfig xorg.libXi xorg.libXcursor dbus dbus-glib pango freetype fontconfig xorg.libXi xorg.libXcursor
xorg.libX11 xorg.libXrender xorg.libXft xorg.libXt file xorg.libX11 xorg.libXrender xorg.libXft xorg.libXt file
libnotify xorg.pixman yasm libGLU libGL libnotify xorg.pixman yasm libGLU libGL

View file

@ -2,16 +2,16 @@
buildGoModule rec { buildGoModule rec {
pname = "terragrunt"; pname = "terragrunt";
version = "0.23.14"; version = "0.23.23";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "gruntwork-io"; owner = "gruntwork-io";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "1znb9d4n9zv3dq10dw17kb1h04gj8iz6gwx1a741fcf4ygp8zpy1"; sha256 = "1087zs5k73rhhzni8zdj950aw4nsc7mqjj8lgdcc8y3yx8p8y5hy";
}; };
vendorSha256 = "0h737h25f80zfx84vm6ry0581c32ylcb5h9givqk5k5kh5qgkbgx"; vendorSha256 = "1xn7c6y32vpanqvf1sfpw6bs73dbjniavjbf00j0vx83bfyklsr4";
buildInputs = [ makeWrapper ]; buildInputs = [ makeWrapper ];

View file

@ -5,8 +5,8 @@
let let
# TODO: This package requires qt5Full to launch # TODO: This package requires qt5Full to launch
defaultOverrides = commonOverrides ++ [ defaultOverrides = commonOverrides ++ [
(mkOverride "jsonschema" "2.6.0" (mkOverride "jsonschema" "3.2.0"
"00kf3zmpp9ya4sydffpifn0j0mzm342a2vzh82p6r0vh10cg7xbg") "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68")
]; ];
python = python3.override { python = python3.override {

View file

@ -4,8 +4,10 @@
let let
defaultOverrides = commonOverrides ++ [ defaultOverrides = commonOverrides ++ [
(mkOverride "jsonschema" "2.6.0" (mkOverride "jsonschema" "3.2.0"
"00kf3zmpp9ya4sydffpifn0j0mzm342a2vzh82p6r0vh10cg7xbg") "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68")
(mkOverride "aiofiles" "0.4.0"
"1vmvq9qja3wahv8m1adkyk00zm7j0x64pk3f2ry051ja66xa07h2")
]; ];
python = python3.override { python = python3.override {

View file

@ -1,6 +1,7 @@
{ lib, stdenv, buildPythonApplication, fetchFromGitHub, pythonOlder, { lib, stdenv, buildPythonApplication, fetchFromGitHub, pythonOlder,
attrs, aiohttp, appdirs, click, keyring, Logbook, peewee, janus, attrs, aiohttp, appdirs, click, keyring, Logbook, peewee, janus,
prompt_toolkit, matrix-nio, dbus-python, pydbus, notify2, pygobject3, prompt_toolkit, matrix-nio, dbus-python, pydbus, notify2, pygobject3,
setuptools,
pytest, faker, pytest-aiohttp, aioresponses, pytest, faker, pytest-aiohttp, aioresponses,
@ -9,7 +10,7 @@
buildPythonApplication rec { buildPythonApplication rec {
pname = "pantalaimon"; pname = "pantalaimon";
version = "0.6.1"; version = "0.6.3";
disabled = pythonOlder "3.6"; disabled = pythonOlder "3.6";
@ -18,7 +19,7 @@ buildPythonApplication rec {
owner = "matrix-org"; owner = "matrix-org";
repo = pname; repo = pname;
rev = version; rev = version;
sha256 = "0hn3731jh6xwyjayzdf41skhpdx002qs7n5l7ffh4dplhnv9vbxx"; sha256 = "1h1z701sj1qgcqlsk3pnzifnbcg9fshl7v6271h9x54hm3d6hg8a";
}; };
propagatedBuildInputs = [ propagatedBuildInputs = [
@ -32,6 +33,7 @@ buildPythonApplication rec {
matrix-nio matrix-nio
peewee peewee
prompt_toolkit prompt_toolkit
setuptools
] ++ lib.optional enableDbusUi [ ] ++ lib.optional enableDbusUi [
dbus-python dbus-python
notify2 notify2

View file

@ -2,7 +2,7 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "rambox-pro"; pname = "rambox-pro";
version = "1.3.1"; version = "1.3.2";
dontBuild = true; dontBuild = true;
dontStrip = true; dontStrip = true;
@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
src = fetchurl { src = fetchurl {
url = "https://github.com/ramboxapp/download/releases/download/v${version}/RamboxPro-${version}-linux-x64.tar.gz"; url = "https://github.com/ramboxapp/download/releases/download/v${version}/RamboxPro-${version}-linux-x64.tar.gz";
sha256 = "1cy4h2yzrpr3gxd16p4323w06i67d82jjlyx737c3ngzw7aahmq1"; sha256 = "010v5i8lxfz77cb5cn9va5cbnfa28nzdymk5k2fcpi65jldw1pxx";
}; };
installPhase = '' installPhase = ''

View file

@ -19,12 +19,12 @@ with lib;
mkDerivation rec { mkDerivation rec {
pname = "telegram-desktop"; pname = "telegram-desktop";
version = "2.1.11"; version = "2.1.12";
# Telegram-Desktop with submodules # Telegram-Desktop with submodules
src = fetchurl { src = fetchurl {
url = "https://github.com/telegramdesktop/tdesktop/releases/download/v${version}/tdesktop-${version}-full.tar.gz"; url = "https://github.com/telegramdesktop/tdesktop/releases/download/v${version}/tdesktop-${version}-full.tar.gz";
sha256 = "1sd6nrcjg5gpq6ynvwnz8f4jz8flknybx6b0pfxqrqqpzy7wjl5m"; sha256 = "1b9kgib9dxjcfnw2zdbqd12ikcswkl35nwy9m47x5jvy3glxg6m8";
}; };
postPatch = '' postPatch = ''

View file

@ -15,11 +15,11 @@ assert pulseaudioSupport -> libpulseaudio != null;
let let
inherit (stdenv.lib) concatStringsSep makeBinPath optional; inherit (stdenv.lib) concatStringsSep makeBinPath optional;
version = "5.0.418682.0603"; version = "5.1.412382.0614";
srcs = { srcs = {
x86_64-linux = fetchurl { x86_64-linux = fetchurl {
url = "https://zoom.us/client/${version}/zoom_x86_64.tar.xz"; url = "https://zoom.us/client/${version}/zoom_x86_64.tar.xz";
sha256 = "1vlba3jgp3dr16n5g29l0dpdd054d8h6lkwk3a6346shvd46mpja"; sha256 = "07xb3v5i08wq0a3my9id91gizsxj5ppqvxmcbdy04j7yn4i1jm9x";
}; };
}; };
@ -60,7 +60,6 @@ in mkDerivation {
"zcacert.pem" "zcacert.pem"
"zoom" "zoom"
"zoom.sh" "zoom.sh"
"zoomlinux"
"zopen" "zopen"
]; ];
in '' in ''
@ -126,7 +125,7 @@ in mkDerivation {
description = "zoom.us video conferencing application"; description = "zoom.us video conferencing application";
license = stdenv.lib.licenses.unfree; license = stdenv.lib.licenses.unfree;
platforms = builtins.attrNames srcs; platforms = builtins.attrNames srcs;
maintainers = with stdenv.lib.maintainers; [ danbst tadfisher ]; maintainers = with stdenv.lib.maintainers; [ danbst tadfisher doronbehar ];
}; };
} }

View file

@ -2,13 +2,13 @@
buildGoModule rec { buildGoModule rec {
pname = "ipfs"; pname = "ipfs";
version = "0.5.1"; version = "0.6.0";
rev = "v${version}"; rev = "v${version}";
# go-ipfs makes changes to it's source tarball that don't match the git source. # go-ipfs makes changes to it's source tarball that don't match the git source.
src = fetchurl { src = fetchurl {
url = "https://github.com/ipfs/go-ipfs/releases/download/${rev}/go-ipfs-source.tar.gz"; url = "https://github.com/ipfs/go-ipfs/releases/download/${rev}/go-ipfs-source.tar.gz";
sha256 = "0lpilycjbc1g9adp4d5kryfprixj18hg3235fnivakmv7fy2akkm"; sha256 = "14bgq2j2bjjy0pspy2lsj5dm3w9rmfha0l8kyq5ig86yhc4nzn80";
}; };
# tarball contains multiple files/directories # tarball contains multiple files/directories

View file

@ -27,11 +27,11 @@ with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "mutt"; pname = "mutt";
version = "1.14.3"; version = "1.14.4";
src = fetchurl { src = fetchurl {
url = "http://ftp.mutt.org/pub/mutt/${pname}-${version}.tar.gz"; url = "http://ftp.mutt.org/pub/mutt/${pname}-${version}.tar.gz";
sha256 = "0wd4cv1c9hqymvml979g607nh3xxmlyx1ifc4r4qf39v6grnsmdi"; sha256 = "1hykkq3m7kqic5r7vzg45xaww7415fv5i2d03slzykqb47w5d3na";
}; };
patches = optional smimeSupport (fetchpatch { patches = optional smimeSupport (fetchpatch {

View file

@ -1,18 +1,18 @@
{ stdenv, fetchFromGitHub, gettext, makeWrapper, tcl, which, writeScript { stdenv, fetchFromGitHub, gettext, makeWrapper, tcl, which, writeScript
, ncurses, perl , cyrus_sasl, gss, gpgme, kerberos, libidn, libxml2, notmuch, openssl , ncurses, perl , cyrus_sasl, gss, gpgme, kerberos, libidn, libxml2, notmuch, openssl
, lmdb, libxslt, docbook_xsl, docbook_xml_dtd_42, mailcap, runtimeShell, sqlite, zlib , lmdb, libxslt, docbook_xsl, docbook_xml_dtd_42, elinks, mailcap, runtimeShell, sqlite, zlib
, glibcLocales , glibcLocales
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "20200501"; version = "20200619";
pname = "neomutt"; pname = "neomutt";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "neomutt"; owner = "neomutt";
repo = "neomutt"; repo = "neomutt";
rev = version; rev = version;
sha256 = "1xrs2bagrcg489zp7g39l3rrpgz8n1ji9cbr21wrnasfbhqcsmnx"; sha256 = "0dhdpd0wdk5bam0q7cvjy4f451ai0mapmyrar7r7m5dnn6lcwvfv";
}; };
buildInputs = [ buildInputs = [
@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
]; ];
nativeBuildInputs = [ nativeBuildInputs = [
docbook_xsl docbook_xml_dtd_42 gettext libxml2 libxslt.bin makeWrapper tcl which zlib docbook_xsl docbook_xml_dtd_42 gettext libxml2 libxslt.bin makeWrapper tcl which zlib elinks
]; ];
enableParallelBuilding = true; enableParallelBuilding = true;
@ -42,12 +42,10 @@ stdenv.mkDerivation rec {
# and use a far more comprehensive list than the one shipped with neomutt # and use a far more comprehensive list than the one shipped with neomutt
substituteInPlace sendlib.c \ substituteInPlace sendlib.c \
--replace /etc/mime.types ${mailcap}/etc/mime.types --replace /etc/mime.types ${mailcap}/etc/mime.types
'';
# The string conversion tests all fail with the first version of neomutt preBuild = ''
# that has tests (20180223) as well as 20180716 so we disable them for now. export HOME=$(mktemp -d)
# I don't know if that is related to the tests or our build environment.
# Try again with a later release.
sed -i '/rfc2047/d' test/Makefile.autosetup test/main.c
''; '';
configureFlags = [ configureFlags = [
@ -60,6 +58,9 @@ stdenv.mkDerivation rec {
"--sasl" "--sasl"
"--with-homespool=mailbox" "--with-homespool=mailbox"
"--with-mailpath=" "--with-mailpath="
# To make it not reference .dev outputs. See:
# https://github.com/neomutt/neomutt/pull/2367
"--disable-include-path-in-cflags"
# Look in $PATH at runtime, instead of hardcoding /usr/bin/sendmail # Look in $PATH at runtime, instead of hardcoding /usr/bin/sendmail
"ac_cv_path_SENDMAIL=sendmail" "ac_cv_path_SENDMAIL=sendmail"
"--zlib" "--zlib"
@ -80,16 +81,15 @@ stdenv.mkDerivation rec {
cp -r ${fetchFromGitHub { cp -r ${fetchFromGitHub {
owner = "neomutt"; owner = "neomutt";
repo = "neomutt-test-files"; repo = "neomutt-test-files";
rev = "1ee274e9ae1330fb901eb7b8275b3079d7869222"; rev = "8629adab700a75c54e8e28bf05ad092503a98f75";
sha256 = "0dhilz4rr7616jh8jcvh50a3rr09in43nsv72mm6f3vfklcqincp"; sha256 = "1ci04nqkab9mh60zzm66sd6mhsr6lya8wp92njpbvafc86vvwdlr";
}} $(pwd)/test-files }} $(pwd)/test-files
chmod -R +w test-files
(cd test-files && ./setup.sh) (cd test-files && ./setup.sh)
export NEOMUTT_TEST_DIR=$(pwd)/test-files export NEOMUTT_TEST_DIR=$(pwd)/test-files
export LC_ALL="en_US.UTF-8"
''; '';
checkInputs = [ glibcLocales ];
checkTarget = "test"; checkTarget = "test";
postCheck = "unset NEOMUTT_TEST_DIR"; postCheck = "unset NEOMUTT_TEST_DIR";

View file

@ -1,5 +1,4 @@
{ stdenv, fetchurl, config, makeWrapper { stdenv, fetchurl, config, makeWrapper
, gconf
, alsaLib , alsaLib
, at-spi2-atk , at-spi2-atk
, atk , atk
@ -13,8 +12,6 @@
, gdk-pixbuf , gdk-pixbuf
, glib , glib
, glibc , glibc
, gst-plugins-base
, gstreamer
, gtk2 , gtk2
, gtk3 , gtk3
, kerberos , kerberos
@ -30,9 +27,7 @@
, libXrender , libXrender
, libXt , libXt
, libxcb , libxcb
, libcanberra-gtk2 , libcanberra
, libgnome
, libgnomeui
, gnome3 , gnome3
, libGLU, libGL , libGLU, libGL
, nspr , nspr
@ -82,7 +77,6 @@ stdenv.mkDerivation {
libPath = stdenv.lib.makeLibraryPath libPath = stdenv.lib.makeLibraryPath
[ stdenv.cc.cc [ stdenv.cc.cc
gconf
alsaLib alsaLib
at-spi2-atk at-spi2-atk
atk atk
@ -96,8 +90,6 @@ stdenv.mkDerivation {
gdk-pixbuf gdk-pixbuf
glib glib
glibc glibc
gst-plugins-base
gstreamer
gtk2 gtk2
gtk3 gtk3
kerberos kerberos
@ -113,9 +105,7 @@ stdenv.mkDerivation {
libXrender libXrender
libXt libXt
libxcb libxcb
libcanberra-gtk2 libcanberra
libgnome
libgnomeui
libGLU libGL libGLU libGL
nspr nspr
nss nss

View file

@ -18,7 +18,6 @@
, lib , lib
, libGL , libGL
, libGLU , libGLU
, libIDL
, libevent , libevent
, libjpeg , libjpeg
, libnotify , libnotify
@ -113,7 +112,6 @@ stdenv.mkDerivation rec {
jemalloc jemalloc
libGL libGL
libGLU libGLU
libIDL
libevent libevent
libjpeg libjpeg
libnotify libnotify

View file

@ -13,11 +13,11 @@ with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "znc"; pname = "znc";
version = "1.8.0"; version = "1.8.1";
src = fetchurl { src = fetchurl {
url = "https://znc.in/releases/archive/${pname}-${version}.tar.gz"; url = "https://znc.in/releases/archive/${pname}-${version}.tar.gz";
sha256 = "0m5xf60r40pgbg9lyk56dafxj2hj149pn2wf8vzsp8xgq4kv5zcl"; sha256 = "0hb1v167aa6gv5bcwz352l6b8gnd74ymjw92y4x882l099hzg59i";
}; };
nativeBuildInputs = [ pkgconfig ]; nativeBuildInputs = [ pkgconfig ];

View file

@ -7,8 +7,8 @@ let
in in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
srcVersion = "feb20a"; srcVersion = "jun20b";
version = "20200201_a"; version = "20200601_b";
pname = "gildas"; pname = "gildas";
src = fetchurl { src = fetchurl {
@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
# source code of the previous release to a different directory # source code of the previous release to a different directory
urls = [ "http://www.iram.fr/~gildas/dist/gildas-src-${srcVersion}.tar.xz" urls = [ "http://www.iram.fr/~gildas/dist/gildas-src-${srcVersion}.tar.xz"
"http://www.iram.fr/~gildas/dist/archive/gildas/gildas-src-${srcVersion}.tar.xz" ]; "http://www.iram.fr/~gildas/dist/archive/gildas/gildas-src-${srcVersion}.tar.xz" ];
sha256 = "05f34kpi3pfgf4dsyka7mkcln26yzb2mixnnc306krq0isjm7m26"; sha256 = "190na9p9kaif4hviraksig6hsq35i1q3nlrm50l00kpj2n8knisk";
}; };
nativeBuildInputs = [ pkgconfig groff perl getopt gfortran which ]; nativeBuildInputs = [ pkgconfig groff perl getopt gfortran which ];

View file

@ -1,12 +1,13 @@
diff --new-file -r -u gildas-src-feb17d.orig/admin/wrapper.sh gildas-src-feb17d/admin/wrapper.sh diff --new-file -r -u gildas-src-feb17d.orig/admin/wrapper.sh gildas-src-feb17d/admin/wrapper.sh
--- gildas-src-feb17d.orig/admin/wrapper.sh 1970-01-01 01:00:00.000000000 +0100 --- gildas-src-feb17d.orig/admin/wrapper.sh 1970-01-01 01:00:00.000000000 +0100
+++ gildas-src-feb17d/admin/wrapper.sh 2017-05-18 21:00:01.660778782 +0200 +++ gildas-src-feb17d/admin/wrapper.sh 2017-05-18 21:00:01.660778782 +0200
@@ -0,0 +1,15 @@ @@ -0,0 +1,16 @@
+#!/bin/sh -e +#!/bin/sh -e
+ +
+export GAG_ROOT_DIR="%%OUT%%" +export GAG_ROOT_DIR="%%OUT%%"
+export GAG_PATH="${GAG_ROOT_DIR}/etc" +export GAG_PATH="${GAG_ROOT_DIR}/etc"
+export GAG_EXEC_SYSTEM="libexec" +export GAG_EXEC_SYSTEM="libexec"
+export GAG_GAG="${HOME}/.gag"
+export PYTHONHOME="%%PYTHONHOME%%" +export PYTHONHOME="%%PYTHONHOME%%"
+if [ -z "\$PYTHONPATH" ]; then +if [ -z "\$PYTHONPATH" ]; then
+ PYTHONPATH="${GAG_ROOT_DIR}/${GAG_EXEC_SYSTEM}/python" + PYTHONPATH="${GAG_ROOT_DIR}/${GAG_EXEC_SYSTEM}/python"

View file

@ -35,6 +35,7 @@ let
"8.11.0" = "1rfdic6mp7acx2zfwz7ziqk12g95bl9nyj68z4n20a5bcjv2pxpn"; "8.11.0" = "1rfdic6mp7acx2zfwz7ziqk12g95bl9nyj68z4n20a5bcjv2pxpn";
"8.11.1" = "0qriy9dy36dajsv5qmli8gd6v55mah02ya334nw49ky19v7518m0"; "8.11.1" = "0qriy9dy36dajsv5qmli8gd6v55mah02ya334nw49ky19v7518m0";
"8.11.2" = "0f77ccyxdgbf1nrj5fa8qvrk1cyfy06fv8gj9kzfvlcgn0cf48sa"; "8.11.2" = "0f77ccyxdgbf1nrj5fa8qvrk1cyfy06fv8gj9kzfvlcgn0cf48sa";
"8.12+beta1" = "0jbm8am9j926s0h4fi0cjl95l37l6p7i03spcryyrd4sg5xrddr7";
}.${version}; }.${version};
coq-version = stdenv.lib.versions.majorMinor version; coq-version = stdenv.lib.versions.majorMinor version;
versionAtLeast = stdenv.lib.versionAtLeast coq-version; versionAtLeast = stdenv.lib.versionAtLeast coq-version;

View file

@ -1,18 +1,18 @@
{ stdenv, fetchurl, fetchpatch, cmake, pcre, pkgconfig, python2 { stdenv, fetchurl, fetchpatch, cmake, pcre, pkgconfig, python2
, libX11, libXpm, libXft, libXext, libGLU, libGL, zlib, libxml2, lzma, gsl_1 , libX11, libXpm, libXft, libXext, libGLU, libGL, zlib, libxml2, lz4, lzma, gsl_1, xxHash
, Cocoa, OpenGL, noSplash ? false }: , Cocoa, OpenGL, noSplash ? false }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "root"; pname = "root";
version = "5.34.36"; version = "5.34.38";
src = fetchurl { src = fetchurl {
url = "https://root.cern.ch/download/root_v${version}.source.tar.gz"; url = "https://root.cern.ch/download/root_v${version}.source.tar.gz";
sha256 = "1kbx1jxc0i5xfghpybk8927a0wamxyayij9c74zlqm0595gqx1pw"; sha256 = "1ln448lszw4d6jmbdphkr2plwxxlhmjkla48vmmq750xc1lxlfrc";
}; };
nativeBuildInputs = [ pkgconfig ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ cmake pcre python2 zlib libxml2 lzma gsl_1 ] buildInputs = [ cmake pcre python2 zlib libxml2 lz4 lzma gsl_1 xxHash ]
++ stdenv.lib.optionals (!stdenv.isDarwin) [ libX11 libXpm libXft libXext libGLU libGL ] ++ stdenv.lib.optionals (!stdenv.isDarwin) [ libX11 libXpm libXft libXext libGLU libGL ]
++ stdenv.lib.optionals (stdenv.isDarwin) [ Cocoa OpenGL ] ++ stdenv.lib.optionals (stdenv.isDarwin) [ Cocoa OpenGL ]
; ;
@ -20,12 +20,6 @@ stdenv.mkDerivation rec {
patches = [ patches = [
./sw_vers_root5.patch ./sw_vers_root5.patch
(fetchpatch {
name = "enable_new_gcc.patch";
url = "https://aur.archlinux.org/cgit/aur.git/plain/enable_new_gcc.patch?h=root5&id=91c50876081a0af36f84ec4f0f9dba869107fa4f";
sha256 = "1rnp0xlw0yqi7mjs4w145njd79i8kkir1qik7zwicdik9axf8ygm";
})
# prevents rootcint from looking in /usr/includes and such # prevents rootcint from looking in /usr/includes and such
./purify_include_paths_root5.patch ./purify_include_paths_root5.patch

View file

@ -1,6 +1,5 @@
{ stdenv, buildGoPackage, fetchurl, makeWrapper { stdenv, buildGoPackage, fetchurl, makeWrapper
, git, bash, gzip, openssh, pam , git, bash, gzip, openssh, pam
, fetchpatch
, sqliteSupport ? true , sqliteSupport ? true
, pamSupport ? true , pamSupport ? true
}: }:
@ -9,11 +8,11 @@ with stdenv.lib;
buildGoPackage rec { buildGoPackage rec {
pname = "gitea"; pname = "gitea";
version = "1.11.6"; version = "1.12.1";
src = fetchurl { src = fetchurl {
url = "https://github.com/go-gitea/gitea/releases/download/v${version}/gitea-src-${version}.tar.gz"; url = "https://github.com/go-gitea/gitea/releases/download/v${version}/gitea-src-${version}.tar.gz";
sha256 = "11nyq5faq0hy1pi3yhmc6y8is7jyiyfrb162fq9l33pkyw6qihqs"; sha256 = "0n92msf5pbgb5q6pa2p0nj9lnzs4y0qis62c5mp4hp8rc1j22wlb";
}; };
unpackPhase = '' unpackPhase = ''
@ -25,10 +24,6 @@ buildGoPackage rec {
patches = [ patches = [
./static-root-path.patch ./static-root-path.patch
(fetchpatch {
url = "https://github.com/go-gitea/gitea/commit/1830d0ed5f4a67e3360ecbb55933b5540b6affce.patch";
sha256 = "163531pcki28qfs56l64vv4xxaavxgksf038da1sn21j5l2jm81i";
})
]; ];
postPatch = '' postPatch = ''

View file

@ -5,10 +5,10 @@
mkDerivation rec { mkDerivation rec {
pname = "clipgrab"; pname = "clipgrab";
version = "3.8.11"; version = "3.8.12";
src = fetchurl { src = fetchurl {
sha256 = "0jpfdmyzjasq4x1xvk7b1cmhhq6fz6ydvvbwz2wclph367x496xk"; sha256 = "1nnph6sn4mpdj20hngwr57ripmdp60w3vrn89s8ssy7cjv500ngd";
# The .tar.bz2 "Download" link is a binary blob, the source is the .tar.gz! # The .tar.bz2 "Download" link is a binary blob, the source is the .tar.gz!
url = "https://download.clipgrab.org/${pname}-${version}.tar.gz"; url = "https://download.clipgrab.org/${pname}-${version}.tar.gz";
}; };

View file

@ -14,13 +14,13 @@
buildGoModule rec { buildGoModule rec {
pname = "cri-o"; pname = "cri-o";
version = "1.18.1"; version = "1.18.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "cri-o"; owner = "cri-o";
repo = "cri-o"; repo = "cri-o";
rev = "v${version}"; rev = "v${version}";
sha256 = "1fd7ix329kqimysqfh8yl29c0hwrddlirq9bnz95mrllhsgn8kw2"; sha256 = "0p6gprbs54v3n09fjpyfxnzxs680ms8924wdim4q9qw52wc6sbdz";
}; };
vendorSha256 = null; vendorSha256 = null;
outputs = [ "out" "man" ]; outputs = [ "out" "man" ];

View file

@ -1,7 +1,7 @@
{ stdenv, lib, fetchFromGitHub, makeWrapper, autoreconfHook, { stdenv, lib, fetchFromGitHub, makeWrapper, autoreconfHook,
fuse, libmspack, openssl, pam, xercesc, icu, libdnet, procps, fuse, libmspack, openssl, pam, xercesc, icu, libdnet, procps,
libX11, libXext, libXinerama, libXi, libXrender, libXrandr, libXtst, libX11, libXext, libXinerama, libXi, libXrender, libXrandr, libXtst,
pkgconfig, glib, gtk3, gtkmm3, iproute, dbus, systemd, which, pkgconfig, glib, gdk-pixbuf-xlib, gtk3, gtkmm3, iproute, dbus, systemd, which,
withX ? true }: withX ? true }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -21,9 +21,13 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ autoreconfHook makeWrapper pkgconfig ]; nativeBuildInputs = [ autoreconfHook makeWrapper pkgconfig ];
buildInputs = [ fuse glib icu libdnet libmspack openssl pam procps xercesc ] buildInputs = [ fuse glib icu libdnet libmspack openssl pam procps xercesc ]
++ lib.optionals withX [ gtk3 gtkmm3 libX11 libXext libXinerama libXi libXrender libXrandr libXtst ]; ++ lib.optionals withX [ gdk-pixbuf-xlib gtk3 gtkmm3 libX11 libXext libXinerama libXi libXrender libXrandr libXtst ];
patches = [
./recognize_nixos.patch
./find_gdk_pixbuf_xlib.patch #See https://github.com/vmware/open-vm-tools/pull/438
];
patches = [ ./recognize_nixos.patch ];
postPatch = '' postPatch = ''
# Build bugfix for 10.1.0, stolen from Arch PKGBUILD # Build bugfix for 10.1.0, stolen from Arch PKGBUILD
mkdir -p common-agent/etc/config mkdir -p common-agent/etc/config

View file

@ -0,0 +1,12 @@
diff --git a/lib/appUtil/Makefile.am b/lib/appUtil/Makefile.am
index a0d8e391..899cd4e9 100644
--- a/lib/appUtil/Makefile.am
+++ b/lib/appUtil/Makefile.am
@@ -21,4 +21,6 @@ libAppUtil_la_SOURCES =
libAppUtil_la_SOURCES += appUtil.c
libAppUtil_la_SOURCES += appUtilX11.c
-AM_CFLAGS = @GTK_CPPFLAGS@
+AM_CFLAGS =
+AM_CFLAGS += @GTK_CPPFLAGS@
+AM_CFLAGS += @GDK_PIXBUF_XLIB2_CPPFLAGS@

View file

@ -129,6 +129,15 @@ sub findFiles {
return; return;
} }
# If target already exists and both targets resolves to the same path, skip
if (defined $oldTarget && $oldTarget ne "" && abs_path($target) eq abs_path($oldTarget)) {
# Prefer the target that is not a symlink, if any
if (-l $oldTarget && ! -l $target) {
$symlinks{$relName} = [$target, $priority];
}
return;
}
# If target already exists as a symlink to a file (not a # If target already exists as a symlink to a file (not a
# directory) in a higher-priority package, skip. # directory) in a higher-priority package, skip.
if (defined $oldTarget && $priority > $oldPriority && $oldTarget ne "" && ! -d $oldTarget) { if (defined $oldTarget && $priority > $oldPriority && $oldTarget ne "" && ! -d $oldTarget) {

View file

@ -121,6 +121,7 @@ rec {
# the image env variable NIX_PAGER. # the image env variable NIX_PAGER.
pkgs.coreutils pkgs.coreutils
pkgs.nix pkgs.nix
pkgs.bash
]; ];
config = { config = {
Env = [ Env = [
@ -313,4 +314,25 @@ rec {
) )
]; ];
}; };
nixLayered = pkgs.dockerTools.buildLayeredImageWithNixDb {
name = "nix-layered";
tag = "latest";
contents = [
# nix-store uses cat program to display results as specified by
# the image env variable NIX_PAGER.
pkgs.coreutils
pkgs.nix
pkgs.bash
];
config = {
Env = [
"NIX_PAGER=cat"
# A user is required by nix
# https://github.com/NixOS/nix/blob/9348f9291e5d9e4ba3c4347ea1b235640f54fd79/src/libutil/util.cc#L478
"USER=nobody"
];
};
};
} }

View file

@ -16,7 +16,11 @@ mkdir -p "$layerPath"
# when there are other things being added to the # when there are other things being added to the
# nix store, tar could fail, saying, # nix store, tar could fail, saying,
# "tar: /nix/store: file changed as we read it" # "tar: /nix/store: file changed as we read it"
mkdir -p nix/store #
# In addition, we use `__Nix__` instead of `nix` to avoid renaming
# relative symlink destinations like
# /nix/store/...-nix-2.3.4/bin/nix-daemon -> nix
mkdir -p __Nix__/store
# Then we change into the /nix/store in order to # Then we change into the /nix/store in order to
# avoid a similar "file changed as we read it" error # avoid a similar "file changed as we read it" error
@ -35,8 +39,8 @@ tarhash=$(
--hard-dereference --sort=name \ --hard-dereference --sort=name \
--mtime="@$SOURCE_DATE_EPOCH" \ --mtime="@$SOURCE_DATE_EPOCH" \
--owner=0 --group=0 \ --owner=0 --group=0 \
--transform 's,^nix$,/\0,' \ --transform 's,^__Nix__$,/nix,' \
--transform 's,^nix/store$,/\0,' \ --transform 's,^__Nix__/store$,/nix/store,' \
--transform 's,^[^/],/nix/store/\0,rS' | --transform 's,^[^/],/nix/store/\0,rS' |
tee "$layerPath/layer.tar" | tee "$layerPath/layer.tar" |
tarsum tarsum

View file

@ -1,6 +1,6 @@
{ fetchurl }: { fetchurl }:
fetchurl { fetchurl {
url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/e8df5568f80e6230e29c2381e842db35fe11cd71.tar.gz"; url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/65a280e01c4f90470959f0423a5450d2831f845a.tar.gz";
sha256 = "1fz4iax88pmlqpb4zp3l6mb6bmkzzha0q6mm3xasabh5yl83dbhy"; sha256 = "0m5zg7hswch702gprlfsjmp2xk6hs828c1489d1c85w9kxiyqkdq";
} }

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