Merge branch 'master' of github.com:NixOS/nixpkgs into update/jetbrains-2019.4

This commit is contained in:
kolaente 2019-12-28 18:14:31 +01:00
commit 4b5bdb7dbe
No known key found for this signature in database
GPG Key ID: F40E70337AB24C9B
224 changed files with 4408 additions and 2351 deletions

View File

@ -2005,7 +2005,7 @@
name = "Edward Tjörnhammar"; name = "Edward Tjörnhammar";
}; };
eelco = { eelco = {
email = "eelco.dolstra@logicblox.com"; email = "edolstra+nixpkgs@gmail.com";
github = "edolstra"; github = "edolstra";
githubId = 1148549; githubId = 1148549;
name = "Eelco Dolstra"; name = "Eelco Dolstra";
@ -2968,7 +2968,12 @@
infinisil = { infinisil = {
email = "contact@infinisil.com"; email = "contact@infinisil.com";
github = "infinisil"; github = "infinisil";
githubId = 20525370;
name = "Silvan Mosberger"; name = "Silvan Mosberger";
keys = [{
longkeyid = "rsa4096/0x422E9EDAE0157170";
fingerprint = "6C2B 55D4 4E04 8266 6B7D DA1A 422E 9EDA E015 7170";
}];
}; };
ingenieroariel = { ingenieroariel = {
email = "ariel@nunez.co"; email = "ariel@nunez.co";
@ -4898,12 +4903,6 @@
githubId = 364510; githubId = 364510;
name = "Tobias Geerinckx-Rice"; name = "Tobias Geerinckx-Rice";
}; };
ndowens = {
email = "ndowens04@gmail.com";
github = "ndowens";
githubId = 117743;
name = "Nathan Owens";
};
neeasade = { neeasade = {
email = "nathanisom27@gmail.com"; email = "nathanisom27@gmail.com";
github = "neeasade"; github = "neeasade";

View File

@ -11,50 +11,46 @@
<programlisting> <programlisting>
{ {
<xref linkend="opt-services.httpd.virtualHosts"/> = <xref linkend="opt-services.httpd.virtualHosts"/> =
[ { hostName = "example.org"; { "blog.example.org" = {
documentRoot = "/webroot"; documentRoot = "/webroot/blog.example.org";
adminAddr = "alice@example.org"; adminAddr = "alice@example.org";
enableUserDir = true; forceSSL = true;
} enableACME = true;
{ hostName = "example.org"; enablePHP = true;
documentRoot = "/webroot"; };
"wiki.example.org" = {
documentRoot = "/webroot/wiki.example.org";
adminAddr = "alice@example.org"; adminAddr = "alice@example.org";
enableUserDir = true; forceSSL = true;
enableSSL = true; enableACME = true;
sslServerCert = "/root/ssl-example-org.crt"; enablePHP = true;
sslServerKey = "/root/ssl-example-org.key"; };
} };
];
} }
</programlisting> </programlisting>
It defines two virtual hosts with nearly identical configuration; the only It defines two virtual hosts with nearly identical configuration; the only
difference is that the second one has SSL enabled. To prevent this difference is the document root directories. To prevent this
duplication, we can use a <literal>let</literal>: duplication, we can use a <literal>let</literal>:
<programlisting> <programlisting>
let let
exampleOrgCommon = commonConfig =
{ hostName = "example.org"; { adminAddr = "alice@example.org";
documentRoot = "/webroot"; forceSSL = true;
adminAddr = "alice@example.org"; enableACME = true;
enableUserDir = true;
}; };
in in
{ {
<xref linkend="opt-services.httpd.virtualHosts"/> = <xref linkend="opt-services.httpd.virtualHosts"/> =
[ exampleOrgCommon { "blog.example.org" = (commonConfig // { documentRoot = "/webroot/blog.example.org"; });
(exampleOrgCommon // { "wiki.example.org" = (commonConfig // { documentRoot = "/webroot/wiki.example.com"; });
enableSSL = true; };
sslServerCert = "/root/ssl-example-org.crt";
sslServerKey = "/root/ssl-example-org.key";
})
];
} }
</programlisting> </programlisting>
The <literal>let exampleOrgCommon = <replaceable>...</replaceable></literal> The <literal>let commonConfig = <replaceable>...</replaceable></literal>
defines a variable named <literal>exampleOrgCommon</literal>. The defines a variable named <literal>commonConfig</literal>. The
<literal>//</literal> operator merges two attribute sets, so the <literal>//</literal> operator merges two attribute sets, so the
configuration of the second virtual host is the set configuration of the second virtual host is the set
<literal>exampleOrgCommon</literal> extended with the SSL options. <literal>commonConfig</literal> extended with the document root option.
</para> </para>
<para> <para>
@ -63,13 +59,13 @@ in
<programlisting> <programlisting>
{ {
<xref linkend="opt-services.httpd.virtualHosts"/> = <xref linkend="opt-services.httpd.virtualHosts"/> =
let exampleOrgCommon = <replaceable>...</replaceable>; in let commonConfig = <replaceable>...</replaceable>; in
[ exampleOrgCommon { "blog.example.org" = (commonConfig // { <replaceable>...</replaceable> })
(exampleOrgCommon // { <replaceable>...</replaceable> }) "wiki.example.org" = (commonConfig // { <replaceable>...</replaceable> })
]; };
} }
</programlisting> </programlisting>
but not <literal>{ let exampleOrgCommon = <replaceable>...</replaceable>; in but not <literal>{ let commonConfig = <replaceable>...</replaceable>; in
<replaceable>...</replaceable>; }</literal> since attributes (as opposed to <replaceable>...</replaceable>; }</literal> since attributes (as opposed to
attribute values) are not expressions. attribute values) are not expressions.
</para> </para>
@ -77,80 +73,29 @@ in
<para> <para>
<emphasis>Functions</emphasis> provide another method of abstraction. For <emphasis>Functions</emphasis> provide another method of abstraction. For
instance, suppose that we want to generate lots of different virtual hosts, instance, suppose that we want to generate lots of different virtual hosts,
all with identical configuration except for the host name. This can be done all with identical configuration except for the document root. This can be done
as follows: as follows:
<programlisting> <programlisting>
{ {
<xref linkend="opt-services.httpd.virtualHosts"/> = <xref linkend="opt-services.httpd.virtualHosts"/> =
let let
makeVirtualHost = name: makeVirtualHost = webroot:
{ hostName = name; { documentRoot = webroot;
documentRoot = "/webroot";
adminAddr = "alice@example.org"; adminAddr = "alice@example.org";
forceSSL = true;
enableACME = true;
}; };
in in
[ (makeVirtualHost "example.org") { "example.org" = (makeVirtualHost "/webroot/example.org");
(makeVirtualHost "example.com") "example.com" = (makeVirtualHost "/webroot/example.com");
(makeVirtualHost "example.gov") "example.gov" = (makeVirtualHost "/webroot/example.gov");
(makeVirtualHost "example.nl") "example.nl" = (makeVirtualHost "/webroot/example.nl");
]; };
} }
</programlisting> </programlisting>
Here, <varname>makeVirtualHost</varname> is a function that takes a single Here, <varname>makeVirtualHost</varname> is a function that takes a single
argument <literal>name</literal> and returns the configuration for a virtual argument <literal>webroot</literal> and returns the configuration for a virtual
host. That function is then called for several names to produce the list of host. That function is then called for several names to produce the list of
virtual host configurations. virtual host configurations.
</para> </para>
<para>
We can further improve on this by using the function <varname>map</varname>,
which applies another function to every element in a list:
<programlisting>
{
<xref linkend="opt-services.httpd.virtualHosts"/> =
let
makeVirtualHost = <replaceable>...</replaceable>;
in map makeVirtualHost
[ "example.org" "example.com" "example.gov" "example.nl" ];
}
</programlisting>
(The function <literal>map</literal> is called a <emphasis>higher-order
function</emphasis> because it takes another function as an argument.)
</para>
<para>
What if you need more than one argument, for instance, if we want to use a
different <literal>documentRoot</literal> for each virtual host? Then we can
make <varname>makeVirtualHost</varname> a function that takes a
<emphasis>set</emphasis> as its argument, like this:
<programlisting>
{
<xref linkend="opt-services.httpd.virtualHosts"/> =
let
makeVirtualHost = { name, root }:
{ hostName = name;
documentRoot = root;
adminAddr = "alice@example.org";
};
in map makeVirtualHost
[ { name = "example.org"; root = "/sites/example.org"; }
{ name = "example.com"; root = "/sites/example.com"; }
{ name = "example.gov"; root = "/sites/example.gov"; }
{ name = "example.nl"; root = "/sites/example.nl"; }
];
}
</programlisting>
But in this case (where every root is a subdirectory of
<filename>/sites</filename> named after the virtual host), it would have been
shorter to define <varname>makeVirtualHost</varname> as
<programlisting>
makeVirtualHost = name:
{ hostName = name;
documentRoot = "/sites/${name}";
adminAddr = "alice@example.org";
};
</programlisting>
Here, the construct <literal>${<replaceable>...</replaceable>}</literal>
allows the result of an expression to be spliced into a string.
</para>
</section> </section>

View File

@ -27,7 +27,7 @@
{ <xref linkend="opt-services.httpd.enable"/> = true; { <xref linkend="opt-services.httpd.enable"/> = true;
<xref linkend="opt-services.httpd.adminAddr"/> = "alice@example.org"; <xref linkend="opt-services.httpd.adminAddr"/> = "alice@example.org";
<xref linkend="opt-services.httpd.documentRoot"/> = "/webroot"; <link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts.localhost.documentRoot</link> = "/webroot";
} }
</programlisting> </programlisting>
defines a configuration with three option definitions that together enable defines a configuration with three option definitions that together enable
@ -50,9 +50,13 @@
httpd = { httpd = {
enable = true; enable = true;
adminAddr = "alice@example.org"; adminAddr = "alice@example.org";
virtualHosts = {
localhost = {
documentRoot = "/webroot"; documentRoot = "/webroot";
}; };
}; };
};
};
} }
</programlisting> </programlisting>
which may be more convenient if you have lots of option definitions that which may be more convenient if you have lots of option definitions that

View File

@ -14,6 +14,26 @@
<refsynopsisdiv> <refsynopsisdiv>
<cmdsynopsis> <cmdsynopsis>
<command>nixos-install</command> <command>nixos-install</command>
<arg>
<group choice='req'>
<arg choice='plain'>
<option>--verbose</option>
</arg>
<arg choice='plain'>
<option>-v</option>
</arg>
</group>
</arg>
<arg>
<group choice='req'>
<arg choice='plain'>
<option>--print-build-logs</option>
</arg>
<arg choice='plain'>
<option>-L</option>
</arg>
</group>
</arg>
<arg> <arg>
<arg choice='plain'> <arg choice='plain'>
<option>-I</option> <option>-I</option>
@ -134,6 +154,23 @@
This command accepts the following options: This command accepts the following options:
</para> </para>
<variablelist> <variablelist>
<varlistentry>
<term><option>--verbose</option> / <option>-v</option></term>
<listitem>
<para>Increases the level of verbosity of diagnostic messages
printed on standard error. For each Nix operation, the information
printed on standard output is well-defined; any diagnostic
information is printed on standard error, never on standard
output.</para>
<para>Please note that this option may be specified repeatedly.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--print-build-logs</option> / <option>-L</option></term>
<listitem>
<para>Print the full build logs of <command>nix build</command> to stderr.</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term> <term>
<option>--root</option> <option>--root</option>

View File

@ -264,6 +264,14 @@ services.xserver.displayManager.defaultSession = "xfce+icewm";
in container config. in container config.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The <literal>kresd</literal> services deprecates the <literal>interfaces</literal> option
in favor of the <literal>listenPlain</literal> option which requires full
<link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd.socket.html#ListenStream=">systemd.socket compatible</link>
declaration which always include a port.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
Virtual console options have been reorganized and can be found under Virtual console options have been reorganized and can be found under
@ -317,16 +325,38 @@ services.xserver.displayManager.defaultSession = "xfce+icewm";
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The <link linkend="opt-services.awstats">awstats</link> module has been rewritten The <link linkend="opt-services.awstats.enable">awstats</link> module has been rewritten
to serve stats via static html pages, updated on a timer, over <link linkend="opt-services.nginx.virtualHosts">nginx</link>, to serve stats via static html pages, updated on a timer, over <link linkend="opt-services.nginx.virtualHosts">nginx</link>,
instead of dynamic cgi pages over <link linkend="opt-services.httpd">apache</link>. instead of dynamic cgi pages over <link linkend="opt-services.httpd.enable">apache</link>.
</para> </para>
<para> <para>
Minor changes will be required to migrate existing configurations. Details of the Minor changes will be required to migrate existing configurations. Details of the
required changes can seen by looking through the <link linkend="opt-services.awstats">awstats</link> required changes can seen by looking through the <link linkend="opt-services.awstats.enable">awstats</link>
module. module.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The httpd module no longer provides options to support serving web content without defining a virtual host. As a
result of this the <link linkend="opt-services.httpd.logPerVirtualHost">services.httpd.logPerVirtualHost</link>
option now defaults to <literal>true</literal> instead of <literal>false</literal>. Please update your
configuration to make use of <link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts</link>.
</para>
<para>
The <link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts.&lt;name&gt;</link>
option has changed type from a list of submodules to an attribute set of submodules, better matching
<link linkend="opt-services.nginx.virtualHosts">services.nginx.virtualHosts.&lt;name&gt;</link>.
</para>
<para>
This change comes with the addition of the following options which mimic the functionality of their <literal>nginx</literal> counterparts:
<link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts.&lt;name&gt;.addSSL</link>,
<link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts.&lt;name&gt;.forceSSL</link>,
<link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts.&lt;name&gt;.onlySSL</link>,
<link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts.&lt;name&gt;.enableACME</link>,
<link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts.&lt;name&gt;.acmeRoot</link>, and
<link linkend="opt-services.httpd.virtualHosts">services.httpd.virtualHosts.&lt;name&gt;.useACMEHost</link>.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>

View File

@ -501,7 +501,7 @@ if (-f $fb_modes_file && -r $fb_modes_file) {
my $console_width = $1, my $console_height = $2; my $console_width = $1, my $console_height = $2;
if ($console_width > 1920) { if ($console_width > 1920) {
push @attrs, "# High-DPI console"; push @attrs, "# High-DPI console";
push @attrs, 'i18n.consoleFont = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz";'; push @attrs, 'console.font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz";';
} }
} }

View File

@ -14,6 +14,8 @@ extraBuildFlags=()
mountPoint=/mnt mountPoint=/mnt
channelPath= channelPath=
system= system=
verbosity=()
buildLogs=
while [ "$#" -gt 0 ]; do while [ "$#" -gt 0 ]; do
i="$1"; shift 1 i="$1"; shift 1
@ -55,6 +57,12 @@ while [ "$#" -gt 0 ]; do
--debug) --debug)
set -x set -x
;; ;;
-v*|--verbose)
verbosity+=("$i")
;;
-L|--print-build-logs)
buildLogs="$i"
;;
*) *)
echo "$0: unknown option \`$i'" echo "$0: unknown option \`$i'"
exit 1 exit 1
@ -94,7 +102,7 @@ if [[ -z $system ]]; then
outLink="$tmpdir/system" outLink="$tmpdir/system"
nix build --out-link "$outLink" --store "$mountPoint" "${extraBuildFlags[@]}" \ nix build --out-link "$outLink" --store "$mountPoint" "${extraBuildFlags[@]}" \
--extra-substituters "$sub" \ --extra-substituters "$sub" \
-f '<nixpkgs/nixos>' system -I "nixos-config=$NIXOS_CONFIG" -f '<nixpkgs/nixos>' system -I "nixos-config=$NIXOS_CONFIG" ${verbosity[@]} ${buildLogs}
system=$(readlink -f $outLink) system=$(readlink -f $outLink)
fi fi
@ -103,7 +111,7 @@ fi
# a progress bar. # a progress bar.
nix-env --store "$mountPoint" "${extraBuildFlags[@]}" \ nix-env --store "$mountPoint" "${extraBuildFlags[@]}" \
--extra-substituters "$sub" \ --extra-substituters "$sub" \
-p $mountPoint/nix/var/nix/profiles/system --set "$system" -p $mountPoint/nix/var/nix/profiles/system --set "$system" ${verbosity[@]}
# Copy the NixOS/Nixpkgs sources to the target as the initial contents # Copy the NixOS/Nixpkgs sources to the target as the initial contents
# of the NixOS channel. # of the NixOS channel.
@ -115,7 +123,8 @@ if [[ -z $noChannelCopy ]]; then
echo "copying channel..." echo "copying channel..."
mkdir -p $mountPoint/nix/var/nix/profiles/per-user/root mkdir -p $mountPoint/nix/var/nix/profiles/per-user/root
nix-env --store "$mountPoint" "${extraBuildFlags[@]}" --extra-substituters "$sub" \ nix-env --store "$mountPoint" "${extraBuildFlags[@]}" --extra-substituters "$sub" \
-p $mountPoint/nix/var/nix/profiles/per-user/root/channels --set "$channelPath" --quiet -p $mountPoint/nix/var/nix/profiles/per-user/root/channels --set "$channelPath" --quiet \
${verbosity[@]}
install -m 0700 -d $mountPoint/root/.nix-defexpr install -m 0700 -d $mountPoint/root/.nix-defexpr
ln -sfn /nix/var/nix/profiles/per-user/root/channels $mountPoint/root/.nix-defexpr/channels ln -sfn /nix/var/nix/profiles/per-user/root/channels $mountPoint/root/.nix-defexpr/channels
fi fi

View File

@ -98,6 +98,23 @@ let
inherit (cfg) startAt; inherit (cfg) startAt;
}; };
# utility function around makeWrapper
mkWrapperDrv = {
original, name, set ? {}
}:
pkgs.runCommandNoCC "${name}-wrapper" {
buildInputs = [ pkgs.makeWrapper ];
} (with lib; ''
makeWrapper "${original}" "$out/bin/${name}" \
${concatStringsSep " \\\n " (mapAttrsToList (name: value: ''--set ${name} "${value}"'') set)}
'');
mkBorgWrapper = name: cfg: mkWrapperDrv {
original = "${pkgs.borgbackup}/bin/borg";
name = "borg-job-${name}";
set = { BORG_REPO = cfg.repo; } // (mkPassEnv cfg) // cfg.environment;
};
# Paths listed in ReadWritePaths must exist before service is started # Paths listed in ReadWritePaths must exist before service is started
mkActivationScript = name: cfg: mkActivationScript = name: cfg:
let let
@ -176,7 +193,11 @@ in {
###### interface ###### interface
options.services.borgbackup.jobs = mkOption { options.services.borgbackup.jobs = mkOption {
description = "Deduplicating backups using BorgBackup."; description = ''
Deduplicating backups using BorgBackup.
Adding a job will cause a borg-job-NAME wrapper to be added
to your system path, so that you can perform maintenance easily.
'';
default = { }; default = { };
example = literalExample '' example = literalExample ''
{ {
@ -623,6 +644,6 @@ in {
users = mkMerge (mapAttrsToList mkUsersConfig repos); users = mkMerge (mapAttrsToList mkUsersConfig repos);
environment.systemPackages = with pkgs; [ borgbackup ]; environment.systemPackages = with pkgs; [ borgbackup ] ++ (mapAttrsToList mkBorgWrapper jobs);
}); });
} }

View File

@ -221,8 +221,8 @@ in
type = types.lines; type = types.lines;
description = '' description = ''
Additional <command>hwdb</command> files. They'll be written Additional <command>hwdb</command> files. They'll be written
into file <filename>10-local.hwdb</filename>. Thus they are into file <filename>99-local.hwdb</filename>. Thus they are
read before all other files. read after all other files.
''; '';
}; };

View File

@ -65,6 +65,7 @@ let
"ValidHTTPCodes" = "404"; "ValidHTTPCodes" = "404";
} }
''; '';
description = "Extra configuration to be appendend to awstats.\${name}.conf.";
}; };
webService = { webService = {

View File

@ -71,7 +71,7 @@ in
maxPower = mkOption { maxPower = mkOption {
type = types.int; type = types.int;
default = 115; default = 113;
description = "Miner max watt usage."; description = "Miner max watt usage.";
}; };
@ -92,7 +92,9 @@ in
serviceConfig = { serviceConfig = {
DynamicUser = true; DynamicUser = true;
ExecStartPre = "${pkgs.ethminer}/bin/.ethminer-wrapped --list-devices";
ExecStartPost = optional (cfg.toolkit == "cuda") "+${getBin config.boot.kernelPackages.nvidia_x11}/bin/nvidia-smi -pl ${toString cfg.maxPower}"; ExecStartPost = optional (cfg.toolkit == "cuda") "+${getBin config.boot.kernelPackages.nvidia_x11}/bin/nvidia-smi -pl ${toString cfg.maxPower}";
Restart = "always";
}; };
environment = { environment = {

View File

@ -8,6 +8,7 @@ let
nagiosState = "/var/lib/nagios"; nagiosState = "/var/lib/nagios";
nagiosLogDir = "/var/log/nagios"; nagiosLogDir = "/var/log/nagios";
urlPath = "/nagios";
nagiosObjectDefs = cfg.objectDefs; nagiosObjectDefs = cfg.objectDefs;
@ -49,12 +50,12 @@ let
'' ''
main_config_file=${cfg.mainConfigFile} main_config_file=${cfg.mainConfigFile}
use_authentication=0 use_authentication=0
url_html_path=${cfg.urlPath} url_html_path=${urlPath}
''; '';
extraHttpdConfig = extraHttpdConfig =
'' ''
ScriptAlias ${cfg.urlPath}/cgi-bin ${pkgs.nagios}/sbin ScriptAlias ${urlPath}/cgi-bin ${pkgs.nagios}/sbin
<Directory "${pkgs.nagios}/sbin"> <Directory "${pkgs.nagios}/sbin">
Options ExecCGI Options ExecCGI
@ -62,7 +63,7 @@ let
SetEnv NAGIOS_CGI_CONFIG ${cfg.cgiConfigFile} SetEnv NAGIOS_CGI_CONFIG ${cfg.cgiConfigFile}
</Directory> </Directory>
Alias ${cfg.urlPath} ${pkgs.nagios}/share Alias ${urlPath} ${pkgs.nagios}/share
<Directory "${pkgs.nagios}/share"> <Directory "${pkgs.nagios}/share">
Options None Options None
@ -72,6 +73,10 @@ let
in in
{ {
imports = [
(mkRemovedOptionModule [ "services" "nagios" "urlPath" ] "The urlPath option has been removed as it is hard coded to /nagios in the nagios package.")
];
options = { options = {
services.nagios = { services.nagios = {
enable = mkOption { enable = mkOption {
@ -128,13 +133,20 @@ in
"; ";
}; };
urlPath = mkOption { virtualHost = mkOption {
default = "/nagios"; type = types.submodule (import ../web-servers/apache-httpd/per-server-options.nix);
description = " example = literalExample ''
The URL path under which the Nagios web interface appears. { hostName = "example.org";
That is, you can access the Nagios web interface through adminAddr = "webmaster@example.org";
<literal>http://<replaceable>server</replaceable>/<replaceable>urlPath</replaceable></literal>. enableSSL = true;
"; sslServerCert = "/var/lib/acme/example.org/full.pem";
sslServerKey = "/var/lib/acme/example.org/key.pem";
}
'';
description = ''
Apache configuration can be done by adapting <option>services.httpd.virtualHosts</option>.
See <xref linkend="opt-services.httpd.virtualHosts"/> for further information.
'';
}; };
}; };
}; };
@ -182,6 +194,8 @@ in
''; '';
}; };
services.httpd.extraConfig = optionalString cfg.enableWebInterface extraHttpdConfig; services.httpd.virtualHosts = optionalAttrs cfg.enableWebInterface {
${cfg.virtualHost.hostName} = mkMerge [ cfg.virtualHost { extraConfig = extraHttpdConfig; } ];
};
}; };
} }

View File

@ -13,6 +13,17 @@ in
{ {
meta.maintainers = [ maintainers.vcunat /* upstream developer */ ]; meta.maintainers = [ maintainers.vcunat /* upstream developer */ ];
imports = [
(mkChangedOptionModule [ "services" "kresd" "interfaces" ] [ "services" "kresd" "listenPlain" ]
(config:
let value = getAttrFromPath [ "services" "kresd" "interfaces" ] config;
in map
(iface: if elem ":" (stringToCharacters iface) then "[${iface}]:53" else "${iface}:53") # Syntax depends on being IPv6 or IPv4.
value
)
)
];
###### interface ###### interface
options.services.kresd = { options.services.kresd = {
enable = mkOption { enable = mkOption {
@ -39,11 +50,12 @@ in
Directory for caches. They are intended to survive reboots. Directory for caches. They are intended to survive reboots.
''; '';
}; };
interfaces = mkOption { listenPlain = mkOption {
type = with types; listOf str; type = with types; listOf str;
default = [ "::1" "127.0.0.1" ]; default = [ "[::1]:53" "127.0.0.1:53" ];
description = '' description = ''
What addresses the server should listen on. (UDP+TCP 53) What addresses and ports the server should listen on.
For detailed syntax see ListenStream in man systemd.socket.
''; '';
}; };
listenTLS = mkOption { listenTLS = mkOption {
@ -51,7 +63,7 @@ in
default = []; default = [];
example = [ "198.51.100.1:853" "[2001:db8::1]:853" "853" ]; example = [ "198.51.100.1:853" "[2001:db8::1]:853" "853" ];
description = '' description = ''
Addresses on which kresd should provide DNS over TLS (see RFC 7858). Addresses and ports on which kresd should provide DNS over TLS (see RFC 7858).
For detailed syntax see ListenStream in man systemd.socket. For detailed syntax see ListenStream in man systemd.socket.
''; '';
}; };
@ -76,10 +88,7 @@ in
systemd.sockets.kresd = rec { systemd.sockets.kresd = rec {
wantedBy = [ "sockets.target" ]; wantedBy = [ "sockets.target" ];
before = wantedBy; before = wantedBy;
listenStreams = map listenStreams = cfg.listenPlain;
# Syntax depends on being IPv6 or IPv4.
(iface: if elem ":" (stringToCharacters iface) then "[${iface}]:53" else "${iface}:53")
cfg.interfaces;
socketConfig = { socketConfig = {
ListenDatagram = listenStreams; ListenDatagram = listenStreams;
FreeBind = true; FreeBind = true;

View File

@ -3,7 +3,7 @@
let let
inherit (lib) mkDefault mkEnableOption mkForce mkIf mkMerge mkOption; inherit (lib) mkDefault mkEnableOption mkForce mkIf mkMerge mkOption;
inherit (lib) mapAttrs optional optionalString types; inherit (lib) literalExample mapAttrs optional optionalString types;
cfg = config.services.limesurvey; cfg = config.services.limesurvey;
fpm = config.services.phpfpm.pools.limesurvey; fpm = config.services.phpfpm.pools.limesurvey;
@ -100,19 +100,15 @@ in
}; };
virtualHost = mkOption { virtualHost = mkOption {
type = types.submodule ({ type = types.submodule (import ../web-servers/apache-httpd/per-server-options.nix);
options = import ../web-servers/apache-httpd/per-server-options.nix { example = literalExample ''
inherit lib; {
forMainServer = false;
};
});
example = {
hostName = "survey.example.org"; hostName = "survey.example.org";
enableSSL = true;
adminAddr = "webmaster@example.org"; adminAddr = "webmaster@example.org";
sslServerCert = "/var/lib/acme/survey.example.org/full.pem"; forceSSL = true;
sslServerKey = "/var/lib/acme/survey.example.org/key.pem"; enableACME = true;
}; }
'';
description = '' description = ''
Apache configuration can be done by adapting <literal>services.httpd.virtualHosts.&lt;name&gt;</literal>. Apache configuration can be done by adapting <literal>services.httpd.virtualHosts.&lt;name&gt;</literal>.
See <xref linkend="opt-services.httpd.virtualHosts"/> for further information. See <xref linkend="opt-services.httpd.virtualHosts"/> for further information.
@ -184,7 +180,7 @@ in
config = { config = {
tempdir = "${stateDir}/tmp"; tempdir = "${stateDir}/tmp";
uploaddir = "${stateDir}/upload"; uploaddir = "${stateDir}/upload";
force_ssl = mkIf cfg.virtualHost.enableSSL "on"; force_ssl = mkIf (cfg.virtualHost.addSSL || cfg.virtualHost.forceSSL || cfg.virtualHost.onlySSL) "on";
config.defaultlang = "en"; config.defaultlang = "en";
}; };
}; };
@ -215,8 +211,7 @@ in
enable = true; enable = true;
adminAddr = mkDefault cfg.virtualHost.adminAddr; adminAddr = mkDefault cfg.virtualHost.adminAddr;
extraModules = [ "proxy_fcgi" ]; extraModules = [ "proxy_fcgi" ];
virtualHosts = [ (mkMerge [ virtualHosts.${cfg.virtualHost.hostName} = mkMerge [ cfg.virtualHost {
cfg.virtualHost {
documentRoot = mkForce "${pkg}/share/limesurvey"; documentRoot = mkForce "${pkg}/share/limesurvey";
extraConfig = '' extraConfig = ''
Alias "/tmp" "${stateDir}/tmp" Alias "/tmp" "${stateDir}/tmp"
@ -245,8 +240,7 @@ in
DirectoryIndex index.php DirectoryIndex index.php
</Directory> </Directory>
''; '';
} } ];
]) ];
}; };
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [

View File

@ -64,7 +64,7 @@ let
$wgScriptPath = ""; $wgScriptPath = "";
## The protocol and server name to use in fully-qualified URLs ## The protocol and server name to use in fully-qualified URLs
$wgServer = "${if cfg.virtualHost.enableSSL then "https" else "http"}://${cfg.virtualHost.hostName}"; $wgServer = "${if cfg.virtualHost.addSSL || cfg.virtualHost.forceSSL || cfg.virtualHost.onlySSL then "https" else "http"}://${cfg.virtualHost.hostName}";
## The URL path to static resources (images, scripts, etc.) ## The URL path to static resources (images, scripts, etc.)
$wgResourceBasePath = $wgScriptPath; $wgResourceBasePath = $wgScriptPath;
@ -290,19 +290,13 @@ in
}; };
virtualHost = mkOption { virtualHost = mkOption {
type = types.submodule ({ type = types.submodule (import ../web-servers/apache-httpd/per-server-options.nix);
options = import ../web-servers/apache-httpd/per-server-options.nix {
inherit lib;
forMainServer = false;
};
});
example = literalExample '' example = literalExample ''
{ {
hostName = "mediawiki.example.org"; hostName = "mediawiki.example.org";
enableSSL = true;
adminAddr = "webmaster@example.org"; adminAddr = "webmaster@example.org";
sslServerCert = "/var/lib/acme/mediawiki.example.org/full.pem"; forceSSL = true;
sslServerKey = "/var/lib/acme/mediawiki.example.org/key.pem"; enableACME = true;
} }
''; '';
description = '' description = ''
@ -389,10 +383,8 @@ in
services.httpd = { services.httpd = {
enable = true; enable = true;
adminAddr = mkDefault cfg.virtualHost.adminAddr;
extraModules = [ "proxy_fcgi" ]; extraModules = [ "proxy_fcgi" ];
virtualHosts = [ (mkMerge [ virtualHosts.${cfg.virtualHost.hostName} = mkMerge [ cfg.virtualHost {
cfg.virtualHost {
documentRoot = mkForce "${pkg}/share/mediawiki"; documentRoot = mkForce "${pkg}/share/mediawiki";
extraConfig = '' extraConfig = ''
<Directory "${pkg}/share/mediawiki"> <Directory "${pkg}/share/mediawiki">
@ -412,8 +404,7 @@ in
Require all granted Require all granted
</Directory> </Directory>
''; '';
} } ];
]) ];
}; };
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [

View File

@ -32,7 +32,7 @@ let
'dbcollation' => 'utf8mb4_unicode_ci', 'dbcollation' => 'utf8mb4_unicode_ci',
); );
$CFG->wwwroot = '${if cfg.virtualHost.enableSSL then "https" else "http"}://${cfg.virtualHost.hostName}'; $CFG->wwwroot = '${if cfg.virtualHost.addSSL || cfg.virtualHost.forceSSL || cfg.virtualHost.onlySSL then "https" else "http"}://${cfg.virtualHost.hostName}';
$CFG->dataroot = '${stateDir}'; $CFG->dataroot = '${stateDir}';
$CFG->admin = 'admin'; $CFG->admin = 'admin';
@ -140,19 +140,15 @@ in
}; };
virtualHost = mkOption { virtualHost = mkOption {
type = types.submodule ({ type = types.submodule (import ../web-servers/apache-httpd/per-server-options.nix);
options = import ../web-servers/apache-httpd/per-server-options.nix { example = literalExample ''
inherit lib; {
forMainServer = false;
};
});
example = {
hostName = "moodle.example.org"; hostName = "moodle.example.org";
enableSSL = true;
adminAddr = "webmaster@example.org"; adminAddr = "webmaster@example.org";
sslServerCert = "/var/lib/acme/moodle.example.org/full.pem"; forceSSL = true;
sslServerKey = "/var/lib/acme/moodle.example.org/key.pem"; enableACME = true;
}; }
'';
description = '' description = ''
Apache configuration can be done by adapting <option>services.httpd.virtualHosts</option>. Apache configuration can be done by adapting <option>services.httpd.virtualHosts</option>.
See <xref linkend="opt-services.httpd.virtualHosts"/> for further information. See <xref linkend="opt-services.httpd.virtualHosts"/> for further information.
@ -241,8 +237,7 @@ in
enable = true; enable = true;
adminAddr = mkDefault cfg.virtualHost.adminAddr; adminAddr = mkDefault cfg.virtualHost.adminAddr;
extraModules = [ "proxy_fcgi" ]; extraModules = [ "proxy_fcgi" ];
virtualHosts = [ (mkMerge [ virtualHosts.${cfg.virtualHost.hostName} = mkMerge [ cfg.virtualHost {
cfg.virtualHost {
documentRoot = mkForce "${cfg.package}/share/moodle"; documentRoot = mkForce "${cfg.package}/share/moodle";
extraConfig = '' extraConfig = ''
<Directory "${cfg.package}/share/moodle"> <Directory "${cfg.package}/share/moodle">
@ -255,8 +250,7 @@ in
DirectoryIndex index.php DirectoryIndex index.php
</Directory> </Directory>
''; '';
} } ];
]) ];
}; };
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [

View File

@ -3,7 +3,7 @@
let let
inherit (lib) mkDefault mkEnableOption mkForce mkIf mkMerge mkOption types; inherit (lib) mkDefault mkEnableOption mkForce mkIf mkMerge mkOption types;
inherit (lib) any attrValues concatMapStringsSep flatten literalExample; inherit (lib) any attrValues concatMapStringsSep flatten literalExample;
inherit (lib) mapAttrs' mapAttrsToList nameValuePair optional optionalAttrs optionalString; inherit (lib) mapAttrs mapAttrs' mapAttrsToList nameValuePair optional optionalAttrs optionalString;
eachSite = config.services.wordpress; eachSite = config.services.wordpress;
user = "wordpress"; user = "wordpress";
@ -209,18 +209,12 @@ let
}; };
virtualHost = mkOption { virtualHost = mkOption {
type = types.submodule ({ type = types.submodule (import ../web-servers/apache-httpd/per-server-options.nix);
options = import ../web-servers/apache-httpd/per-server-options.nix {
inherit lib;
forMainServer = false;
};
});
example = literalExample '' example = literalExample ''
{ {
enableSSL = true;
adminAddr = "webmaster@example.org"; adminAddr = "webmaster@example.org";
sslServerCert = "/var/lib/acme/wordpress.example.org/full.pem"; forceSSL = true;
sslServerKey = "/var/lib/acme/wordpress.example.org/key.pem"; enableACME = true;
} }
''; '';
description = '' description = ''
@ -304,9 +298,7 @@ in
services.httpd = { services.httpd = {
enable = true; enable = true;
extraModules = [ "proxy_fcgi" ]; extraModules = [ "proxy_fcgi" ];
virtualHosts = mapAttrsToList (hostName: cfg: virtualHosts = mapAttrs (hostName: cfg: mkMerge [ cfg.virtualHost {
(mkMerge [
cfg.virtualHost {
documentRoot = mkForce "${pkg hostName cfg}/share/wordpress"; documentRoot = mkForce "${pkg hostName cfg}/share/wordpress";
extraConfig = '' extraConfig = ''
<Directory "${pkg hostName cfg}/share/wordpress"> <Directory "${pkg hostName cfg}/share/wordpress">
@ -336,9 +328,7 @@ in
Require all denied Require all denied
</Files> </Files>
''; '';
} } ]) eachSite;
])
) eachSite;
}; };
systemd.tmpfiles.rules = flatten (mapAttrsToList (hostName: cfg: [ systemd.tmpfiles.rules = flatten (mapAttrsToList (hostName: cfg: [

View File

@ -113,19 +113,15 @@ in
}; };
virtualHost = mkOption { virtualHost = mkOption {
type = types.submodule ({ type = types.submodule (import ../web-servers/apache-httpd/per-server-options.nix);
options = import ../web-servers/apache-httpd/per-server-options.nix { example = literalExample ''
inherit lib; {
forMainServer = false;
};
});
example = {
hostName = "zabbix.example.org"; hostName = "zabbix.example.org";
enableSSL = true;
adminAddr = "webmaster@example.org"; adminAddr = "webmaster@example.org";
sslServerCert = "/var/lib/acme/zabbix.example.org/full.pem"; forceSSL = true;
sslServerKey = "/var/lib/acme/zabbix.example.org/key.pem"; enableACME = true;
}; }
'';
description = '' description = ''
Apache configuration can be done by adapting <literal>services.httpd.virtualHosts.&lt;name&gt;</literal>. Apache configuration can be done by adapting <literal>services.httpd.virtualHosts.&lt;name&gt;</literal>.
See <xref linkend="opt-services.httpd.virtualHosts"/> for further information. See <xref linkend="opt-services.httpd.virtualHosts"/> for further information.
@ -190,8 +186,7 @@ in
enable = true; enable = true;
adminAddr = mkDefault cfg.virtualHost.adminAddr; adminAddr = mkDefault cfg.virtualHost.adminAddr;
extraModules = [ "proxy_fcgi" ]; extraModules = [ "proxy_fcgi" ];
virtualHosts = [ (mkMerge [ virtualHosts.${cfg.virtualHost.hostName} = mkMerge [ cfg.virtualHost {
cfg.virtualHost {
documentRoot = mkForce "${cfg.package}/share/zabbix"; documentRoot = mkForce "${cfg.package}/share/zabbix";
extraConfig = '' extraConfig = ''
<Directory "${cfg.package}/share/zabbix"> <Directory "${cfg.package}/share/zabbix">
@ -205,8 +200,7 @@ in
DirectoryIndex index.php DirectoryIndex index.php
</Directory> </Directory>
''; '';
} } ];
]) ];
}; };
users.users.${user} = mapAttrs (name: mkDefault) { users.users.${user} = mapAttrs (name: mkDefault) {

View File

@ -18,22 +18,20 @@ let
mod_perl = pkgs.apacheHttpdPackages.mod_perl.override { apacheHttpd = httpd; }; mod_perl = pkgs.apacheHttpdPackages.mod_perl.override { apacheHttpd = httpd; };
defaultListen = cfg: if cfg.enableSSL vhosts = attrValues mainCfg.virtualHosts;
then [{ip = "*"; port = 443;}]
else [{ip = "*"; port = 80;}];
getListen = cfg: mkListenInfo = hostOpts:
if cfg.listen == [] if hostOpts.listen != [] then hostOpts.listen
then defaultListen cfg else (
else cfg.listen; optional (hostOpts.onlySSL || hostOpts.addSSL || hostOpts.forceSSL) { ip = "*"; port = 443; ssl = true; } ++
optional (!hostOpts.onlySSL) { ip = "*"; port = 80; ssl = false; }
);
listenToString = l: "${l.ip}:${toString l.port}"; listenInfo = unique (concatMap mkListenInfo vhosts);
allHosts = [mainCfg] ++ mainCfg.virtualHosts; enableSSL = any (listen: listen.ssl) listenInfo;
enableSSL = any (vhost: vhost.enableSSL) allHosts; enableUserDir = any (vhost: vhost.enableUserDir) vhosts;
enableUserDir = any (vhost: vhost.enableUserDir) allHosts;
# NOTE: generally speaking order of modules is very important # NOTE: generally speaking order of modules is very important
modules = modules =
@ -115,26 +113,83 @@ let
</IfModule> </IfModule>
''; '';
mkVHostConf = hostOpts:
let
adminAddr = if hostOpts.adminAddr != null then hostOpts.adminAddr else mainCfg.adminAddr;
listen = filter (listen: !listen.ssl) (mkListenInfo hostOpts);
listenSSL = filter (listen: listen.ssl) (mkListenInfo hostOpts);
perServerConf = isMainServer: cfg: let useACME = hostOpts.enableACME || hostOpts.useACMEHost != null;
sslCertDir =
if hostOpts.enableACME then config.security.acme.certs.${hostOpts.hostName}.directory
else if hostOpts.useACMEHost != null then config.security.acme.certs.${hostOpts.useACMEHost}.directory
else abort "This case should never happen.";
# Canonical name must not include a trailing slash. sslServerCert = if useACME then "${sslCertDir}/full.pem" else hostOpts.sslServerCert;
canonicalNames = sslServerKey = if useACME then "${sslCertDir}/key.pem" else hostOpts.sslServerKey;
let defaultPort = (head (defaultListen cfg)).port; in sslServerChain = if useACME then "${sslCertDir}/fullchain.pem" else hostOpts.sslServerChain;
map (port:
(if cfg.enableSSL then "https" else "http") + "://" +
cfg.hostName +
(if port != defaultPort then ":${toString port}" else "")
) (map (x: x.port) (getListen cfg));
maybeDocumentRoot = fold (svc: acc: acmeChallenge = optionalString useACME ''
if acc == null then svc.documentRoot else assert svc.documentRoot == null; acc Alias /.well-known/acme-challenge/ "${hostOpts.acmeRoot}/.well-known/acme-challenge/"
) null ([ cfg ]); <Directory "${hostOpts.acmeRoot}">
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
Require all granted
</Directory>
'';
in
optionalString (listen != []) ''
<VirtualHost ${concatMapStringsSep " " (listen: "${listen.ip}:${toString listen.port}") listen}>
ServerName ${hostOpts.hostName}
${concatMapStrings (alias: "ServerAlias ${alias}\n") hostOpts.serverAliases}
ServerAdmin ${adminAddr}
<IfModule mod_ssl.c>
SSLEngine off
</IfModule>
${acmeChallenge}
${if hostOpts.forceSSL then ''
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge [NC]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>
'' else mkVHostCommonConf hostOpts}
</VirtualHost>
'' +
optionalString (listenSSL != []) ''
<VirtualHost ${concatMapStringsSep " " (listen: "${listen.ip}:${toString listen.port}") listenSSL}>
ServerName ${hostOpts.hostName}
${concatMapStrings (alias: "ServerAlias ${alias}\n") hostOpts.serverAliases}
ServerAdmin ${adminAddr}
SSLEngine on
SSLCertificateFile ${sslServerCert}
SSLCertificateKeyFile ${sslServerKey}
${optionalString (sslServerChain != null) "SSLCertificateChainFile ${sslServerChain}"}
${acmeChallenge}
${mkVHostCommonConf hostOpts}
</VirtualHost>
''
;
documentRoot = if maybeDocumentRoot != null then maybeDocumentRoot else mkVHostCommonConf = hostOpts:
pkgs.runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out"; let
documentRoot = if hostOpts.documentRoot != null
then hostOpts.documentRoot
else pkgs.runCommand "empty" { preferLocalBuild = true; } "mkdir -p $out"
;
in
''
${optionalString mainCfg.logPerVirtualHost ''
ErrorLog ${mainCfg.logDir}/error-${hostOpts.hostName}.log
CustomLog ${mainCfg.logDir}/access-${hostOpts.hostName}.log ${hostOpts.logFormat}
''}
${optionalString (hostOpts.robotsEntries != "") ''
Alias /robots.txt ${pkgs.writeText "robots.txt" hostOpts.robotsEntries}
''}
documentRootConf = ''
DocumentRoot "${documentRoot}" DocumentRoot "${documentRoot}"
<Directory "${documentRoot}"> <Directory "${documentRoot}">
@ -142,75 +197,32 @@ let
AllowOverride None AllowOverride None
${allGranted} ${allGranted}
</Directory> </Directory>
'';
# If this is a vhost, the include the entries for the main server as well.
robotsTxt = concatStringsSep "\n" (filter (x: x != "") ([ cfg.robotsEntries ] ++ lib.optional (!isMainServer) mainCfg.robotsEntries));
in ''
${concatStringsSep "\n" (map (n: "ServerName ${n}") canonicalNames)}
${concatMapStrings (alias: "ServerAlias ${alias}\n") cfg.serverAliases}
${if cfg.sslServerCert != null then ''
SSLCertificateFile ${cfg.sslServerCert}
SSLCertificateKeyFile ${cfg.sslServerKey}
${if cfg.sslServerChain != null then ''
SSLCertificateChainFile ${cfg.sslServerChain}
'' else ""}
'' else ""}
${if cfg.enableSSL then ''
SSLEngine on
'' else if enableSSL then /* i.e., SSL is enabled for some host, but not this one */
''
SSLEngine off
'' else ""}
${if isMainServer || cfg.adminAddr != null then ''
ServerAdmin ${cfg.adminAddr}
'' else ""}
${if !isMainServer && mainCfg.logPerVirtualHost then ''
ErrorLog ${mainCfg.logDir}/error-${cfg.hostName}.log
CustomLog ${mainCfg.logDir}/access-${cfg.hostName}.log ${cfg.logFormat}
'' else ""}
${optionalString (robotsTxt != "") ''
Alias /robots.txt ${pkgs.writeText "robots.txt" robotsTxt}
''}
${if isMainServer || maybeDocumentRoot != null then documentRootConf else ""}
${if cfg.enableUserDir then ''
${optionalString hostOpts.enableUserDir ''
UserDir public_html UserDir public_html
UserDir disabled root UserDir disabled root
<Directory "/home/*/public_html"> <Directory "/home/*/public_html">
AllowOverride FileInfo AuthConfig Limit Indexes AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS> <Limit GET POST OPTIONS>
${allGranted} Require all granted
</Limit> </Limit>
<LimitExcept GET POST OPTIONS> <LimitExcept GET POST OPTIONS>
${allDenied} Require all denied
</LimitExcept> </LimitExcept>
</Directory> </Directory>
''}
'' else ""} ${optionalString (hostOpts.globalRedirect != null && hostOpts.globalRedirect != "") ''
RedirectPermanent / ${hostOpts.globalRedirect}
${if cfg.globalRedirect != null && cfg.globalRedirect != "" then '' ''}
RedirectPermanent / ${cfg.globalRedirect}
'' else ""}
${ ${
let makeFileConf = elem: '' let makeFileConf = elem: ''
Alias ${elem.urlPath} ${elem.file} Alias ${elem.urlPath} ${elem.file}
''; '';
in concatMapStrings makeFileConf cfg.servedFiles in concatMapStrings makeFileConf hostOpts.servedFiles
} }
${ ${
let makeDirConf = elem: '' let makeDirConf = elem: ''
Alias ${elem.urlPath} ${elem.dir}/ Alias ${elem.urlPath} ${elem.dir}/
@ -220,17 +232,18 @@ let
AllowOverride All AllowOverride All
</Directory> </Directory>
''; '';
in concatMapStrings makeDirConf cfg.servedDirs in concatMapStrings makeDirConf hostOpts.servedDirs
} }
${cfg.extraConfig} ${hostOpts.extraConfig}
''; ''
;
confFile = pkgs.writeText "httpd.conf" '' confFile = pkgs.writeText "httpd.conf" ''
ServerRoot ${httpd} ServerRoot ${httpd}
ServerName ${config.networking.hostName}
DefaultRuntimeDir ${runtimeDir}/runtime DefaultRuntimeDir ${runtimeDir}/runtime
PidFile ${runtimeDir}/httpd.pid PidFile ${runtimeDir}/httpd.pid
@ -246,10 +259,9 @@ let
</IfModule> </IfModule>
${let ${let
listen = concatMap getListen allHosts; toStr = listen: "Listen ${listen.ip}:${toString listen.port} ${if listen.ssl then "https" else "http"}";
toStr = listen: "Listen ${listenToString listen}\n"; uniqueListen = uniqList {inputList = map toStr listenInfo;};
uniqueListen = uniqList {inputList = map toStr listen;}; in concatStringsSep "\n" uniqueListen
in concatStrings uniqueListen
} }
User ${mainCfg.user} User ${mainCfg.user}
@ -297,17 +309,9 @@ let
${allGranted} ${allGranted}
</Directory> </Directory>
# Generate directives for the main server. ${mainCfg.extraConfig}
${perServerConf true mainCfg}
${let ${concatMapStringsSep "\n" mkVHostConf vhosts}
makeVirtualHost = vhost: ''
<VirtualHost ${concatStringsSep " " (map listenToString (getListen vhost))}>
${perServerConf false vhost}
</VirtualHost>
'';
in concatMapStrings makeVirtualHost mainCfg.virtualHosts
}
''; '';
# Generate the PHP configuration file. Should probably be factored # Generate the PHP configuration file. Should probably be factored
@ -329,6 +333,21 @@ in
imports = [ imports = [
(mkRemovedOptionModule [ "services" "httpd" "extraSubservices" ] "Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.") (mkRemovedOptionModule [ "services" "httpd" "extraSubservices" ] "Most existing subservices have been ported to the NixOS module system. Please update your configuration accordingly.")
(mkRemovedOptionModule [ "services" "httpd" "stateDir" ] "The httpd module now uses /run/httpd as a runtime directory.") (mkRemovedOptionModule [ "services" "httpd" "stateDir" ] "The httpd module now uses /run/httpd as a runtime directory.")
# virtualHosts options
(mkRemovedOptionModule [ "services" "httpd" "documentRoot" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "enableSSL" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "enableUserDir" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "globalRedirect" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "hostName" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "listen" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "robotsEntries" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "servedDirs" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "servedFiles" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "serverAliases" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "sslServerCert" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "sslServerChain" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
(mkRemovedOptionModule [ "services" "httpd" "sslServerKey" ] "Please define a virtual host using `services.httpd.virtualHosts`.")
]; ];
###### interface ###### interface
@ -391,9 +410,25 @@ in
''; '';
}; };
adminAddr = mkOption {
type = types.str;
example = "admin@example.org";
description = "E-mail address of the server administrator.";
};
logFormat = mkOption {
type = types.str;
default = "common";
example = "combined";
description = ''
Log format for log files. Possible values are: combined, common, referer, agent.
See <link xlink:href="https://httpd.apache.org/docs/2.4/logs.html"/> for more details.
'';
};
logPerVirtualHost = mkOption { logPerVirtualHost = mkOption {
type = types.bool; type = types.bool;
default = false; default = true;
description = '' description = ''
If enabled, each virtual host gets its own If enabled, each virtual host gets its own
<filename>access.log</filename> and <filename>access.log</filename> and
@ -429,26 +464,28 @@ in
}; };
virtualHosts = mkOption { virtualHosts = mkOption {
type = types.listOf (types.submodule ( type = with types; attrsOf (submodule (import ./per-server-options.nix));
{ options = import ./per-server-options.nix { default = {
inherit lib; localhost = {
forMainServer = false; documentRoot = "${httpd}/htdocs";
};
};
example = literalExample ''
{
"foo.example.com" = {
forceSSL = true;
documentRoot = "/var/www/foo.example.com"
};
"bar.example.com" = {
addSSL = true;
documentRoot = "/var/www/bar.example.com";
}; };
}));
default = [];
example = [
{ hostName = "foo";
documentRoot = "/data/webroot-foo";
} }
{ hostName = "bar"; '';
documentRoot = "/data/webroot-bar";
}
];
description = '' description = ''
Specification of the virtual hosts served by Apache. Each Specification of the virtual hosts served by Apache. Each
element should be an attribute set specifying the element should be an attribute set specifying the
configuration of the virtual host. The available options configuration of the virtual host.
are the non-global options permissible for the main host.
''; '';
}; };
@ -534,13 +571,7 @@ in
example = "All -SSLv2 -SSLv3"; example = "All -SSLv2 -SSLv3";
description = "Allowed SSL/TLS protocol versions."; description = "Allowed SSL/TLS protocol versions.";
}; };
} };
# Include the options shared between the main server and virtual hosts.
// (import ./per-server-options.nix {
inherit lib;
forMainServer = true;
});
}; };
@ -549,10 +580,30 @@ in
config = mkIf config.services.httpd.enable { config = mkIf config.services.httpd.enable {
assertions = [ { assertion = mainCfg.enableSSL == true assertions = [
-> mainCfg.sslServerCert != null {
&& mainCfg.sslServerKey != null; assertion = all (hostOpts: !hostOpts.enableSSL) vhosts;
message = "SSL is enabled for httpd, but sslServerCert and/or sslServerKey haven't been specified."; } message = ''
The option `services.httpd.virtualHosts.<name>.enableSSL` no longer has any effect; please remove it.
Select one of `services.httpd.virtualHosts.<name>.addSSL`, `services.httpd.virtualHosts.<name>.forceSSL`,
or `services.httpd.virtualHosts.<name>.onlySSL`.
'';
}
{
assertion = all (hostOpts: with hostOpts; !(addSSL && onlySSL) && !(forceSSL && onlySSL) && !(addSSL && forceSSL)) vhosts;
message = ''
Options `services.httpd.virtualHosts.<name>.addSSL`,
`services.httpd.virtualHosts.<name>.onlySSL` and `services.httpd.virtualHosts.<name>.forceSSL`
are mutually exclusive.
'';
}
{
assertion = all (hostOpts: !(hostOpts.enableACME && hostOpts.useACMEHost != null)) vhosts;
message = ''
Options `services.httpd.virtualHosts.<name>.enableACME` and
`services.httpd.virtualHosts.<name>.useACMEHost` are mutually exclusive.
'';
}
]; ];
users.users = optionalAttrs (mainCfg.user == "wwwrun") (singleton users.users = optionalAttrs (mainCfg.user == "wwwrun") (singleton
@ -567,6 +618,15 @@ in
gid = config.ids.gids.wwwrun; gid = config.ids.gids.wwwrun;
}); });
security.acme.certs = mapAttrs (name: hostOpts: {
user = mainCfg.user;
group = mkDefault mainCfg.group;
email = if hostOpts.adminAddr != null then hostOpts.adminAddr else mainCfg.adminAddr;
webroot = hostOpts.acmeRoot;
extraDomains = genAttrs hostOpts.serverAliases (alias: null);
postRun = "systemctl reload httpd.service";
}) (filterAttrs (name: hostOpts: hostOpts.enableACME) mainCfg.virtualHosts);
environment.systemPackages = [httpd]; environment.systemPackages = [httpd];
services.httpd.phpOptions = services.httpd.phpOptions =
@ -605,10 +665,14 @@ in
]; ];
systemd.services.httpd = systemd.services.httpd =
let
vhostsACME = filter (hostOpts: hostOpts.enableACME) vhosts;
in
{ description = "Apache HTTPD"; { description = "Apache HTTPD";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = [ "network.target" "fs.target" ]; wants = concatLists (map (hostOpts: [ "acme-${hostOpts.hostName}.service" "acme-selfsigned-${hostOpts.hostName}.service" ]) vhostsACME);
after = [ "network.target" "fs.target" ] ++ map (hostOpts: "acme-selfsigned-${hostOpts.hostName}.service") vhostsACME;
path = path =
[ httpd pkgs.coreutils pkgs.gnugrep ] [ httpd pkgs.coreutils pkgs.gnugrep ]

View File

@ -1,17 +1,13 @@
# This file defines the options that can be used both for the Apache { config, lib, name, ... }:
# main server configuration, and for the virtual hosts. (The latter let
# has additional options that affect the web server as a whole, like inherit (lib) mkOption types;
# the user/group to run under.) in
{ forMainServer, lib }:
with lib;
{ {
options = {
hostName = mkOption { hostName = mkOption {
type = types.str; type = types.str;
default = "localhost"; default = name;
description = "Canonical hostname for the server."; description = "Canonical hostname for the server.";
}; };
@ -25,40 +21,103 @@ with lib;
}; };
listen = mkOption { listen = mkOption {
type = types.listOf (types.submodule ( type = with types; listOf (submodule ({
{
options = { options = {
port = mkOption { port = mkOption {
type = types.int; type = types.port;
description = "port to listen on"; description = "Port to listen on";
}; };
ip = mkOption { ip = mkOption {
type = types.str; type = types.str;
default = "*"; default = "*";
description = "Ip to listen on. 0.0.0.0 for ipv4 only, * for all."; description = "IP to listen on. 0.0.0.0 for IPv4 only, * for all.";
}; };
}; ssl = mkOption {
} ));
description = ''
List of { /* ip: "*"; */ port = 80;} to listen on
'';
default = [];
};
enableSSL = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = "Whether to enable SSL (https) support."; description = "Whether to enable SSL (https) support.";
}; };
};
}));
default = [];
example = [
{ ip = "195.154.1.1"; port = 443; ssl = true;}
{ ip = "192.154.1.1"; port = 80; }
{ ip = "*"; port = 8080; }
];
description = ''
Listen addresses and ports for this virtual host.
<note><para>
This option overrides <literal>addSSL</literal>, <literal>forceSSL</literal> and <literal>onlySSL</literal>.
</para></note>
'';
};
# Note: sslServerCert and sslServerKey can be left empty, but this enableSSL = mkOption {
# only makes sense for virtual hosts (they will inherit from the type = types.bool;
# main server). visible = false;
default = false;
};
addSSL = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable HTTPS in addition to plain HTTP. This will set defaults for
<literal>listen</literal> to listen on all interfaces on the respective default
ports (80, 443).
'';
};
onlySSL = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable HTTPS and reject plain HTTP connections. This will set
defaults for <literal>listen</literal> to listen on all interfaces on port 443.
'';
};
forceSSL = mkOption {
type = types.bool;
default = false;
description = ''
Whether to add a separate nginx server block that permanently redirects (301)
all plain HTTP traffic to HTTPS. This will set defaults for
<literal>listen</literal> to listen on all interfaces on the respective default
ports (80, 443), where the non-SSL listens are used for the redirect vhosts.
'';
};
enableACME = mkOption {
type = types.bool;
default = false;
description = ''
Whether to ask Let's Encrypt to sign a certificate for this vhost.
Alternately, you can use an existing certificate through <option>useACMEHost</option>.
'';
};
useACMEHost = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
A host of an existing Let's Encrypt certificate to use.
This is useful if you have many subdomains and want to avoid hitting the
<link xlink:href="https://letsencrypt.org/docs/rate-limits/">rate limit</link>.
Alternately, you can generate a certificate through <option>enableACME</option>.
<emphasis>Note that this option does not create any certificates, nor it does add subdomains to existing ones you will need to create them manually using <xref linkend="opt-security.acme.certs"/>.</emphasis>
'';
};
acmeRoot = mkOption {
type = types.str;
default = "/var/lib/acme/acme-challenges";
description = "Directory for the acme challenge which is PUBLIC, don't put certs or keys in here";
};
sslServerCert = mkOption { sslServerCert = mkOption {
type = types.nullOr types.path; type = types.path;
default = null;
example = "/var/host.cert"; example = "/var/host.cert";
description = "Path to server SSL certificate."; description = "Path to server SSL certificate.";
}; };
@ -76,11 +135,12 @@ with lib;
description = "Path to server SSL chain file."; description = "Path to server SSL chain file.";
}; };
adminAddr = mkOption ({ adminAddr = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null;
example = "admin@example.org"; example = "admin@example.org";
description = "E-mail address of the server administrator."; description = "E-mail address of the server administrator.";
} // (if forMainServer then {} else {default = null;})); };
documentRoot = mkOption { documentRoot = mkOption {
type = types.nullOr types.path; type = types.nullOr types.path;
@ -171,4 +231,5 @@ with lib;
''; '';
}; };
};
} }

View File

@ -671,6 +671,7 @@ in
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"d '${cfg.stateDir}' 0750 ${cfg.user} ${cfg.group} - -" "d '${cfg.stateDir}' 0750 ${cfg.user} ${cfg.group} - -"
"d '${cfg.stateDir}/logs' 0750 ${cfg.user} ${cfg.group} - -" "d '${cfg.stateDir}/logs' 0750 ${cfg.user} ${cfg.group} - -"
"Z '${cfg.stateDir}' - ${cfg.user} ${cfg.group} - -"
]; ];
systemd.services.nginx = { systemd.services.nginx = {

View File

@ -113,7 +113,7 @@ in {
services.httpd = { services.httpd = {
enable = true; enable = true;
adminAddr = "test@example.org"; adminAddr = "test@example.org";
documentRoot = "${pkgs.valgrind.doc}/share/doc/valgrind/html"; virtualHosts.localhost.documentRoot = "${pkgs.valgrind.doc}/share/doc/valgrind/html";
}; };
networking.firewall.allowedTCPPorts = [ 80 ]; networking.firewall.allowedTCPPorts = [ 80 ];
} }

View File

@ -23,6 +23,7 @@ import ./make-test-python.nix ({ pkgs, ...}: {
}; };
services.httpd = { services.httpd = {
enable = true; enable = true;
virtualHosts.localhost = {
documentRoot = pkgs.writeTextDir "index.txt" "We are all good!"; documentRoot = pkgs.writeTextDir "index.txt" "We are all good!";
adminAddr = "notme@yourhost.local"; adminAddr = "notme@yourhost.local";
listen = [{ listen = [{
@ -32,6 +33,7 @@ import ./make-test-python.nix ({ pkgs, ...}: {
}; };
}; };
}; };
};
testScript = '' testScript = ''
start_all() start_all()
machine.wait_for_unit("multi-user.target") machine.wait_for_unit("multi-user.target")

View File

@ -16,7 +16,7 @@ import ../make-test-python.nix ({ pkgs, ... }:
services.httpd = { services.httpd = {
enable = true; enable = true;
documentRoot = ./example; virtualHosts.localhost.documentRoot = ./example;
adminAddr = "noone@testing.nowhere"; adminAddr = "noone@testing.nowhere";
}; };
}; };

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ...} : import ./make-test-python.nix ({ pkgs, ...} :
let let
client = { pkgs, ... }: { client = { pkgs, ... }: {
@ -24,50 +24,50 @@ in
}; };
testScript = '' testScript = ''
startAll; start_all()
$server->waitForUnit("murmur.service"); server.wait_for_unit("murmur.service")
$client1->waitForX; client1.wait_for_x()
$client2->waitForX; client2.wait_for_x()
$client1->execute("mumble mumble://client1\@server/test &"); client1.execute("mumble mumble://client1\@server/test &")
$client2->execute("mumble mumble://client2\@server/test &"); client2.execute("mumble mumble://client2\@server/test &")
# cancel client audio configuration # cancel client audio configuration
$client1->waitForWindow(qr/Audio Tuning Wizard/); client1.wait_for_window(r"Audio Tuning Wizard")
$client2->waitForWindow(qr/Audio Tuning Wizard/); client2.wait_for_window(r"Audio Tuning Wizard")
$server->sleep(5); # wait because mumble is slow to register event handlers server.sleep(5) # wait because mumble is slow to register event handlers
$client1->sendKeys("esc"); client1.send_key("esc")
$client2->sendKeys("esc"); client2.send_key("esc")
# cancel client cert configuration # cancel client cert configuration
$client1->waitForWindow(qr/Certificate Management/); client1.wait_for_window(r"Certificate Management")
$client2->waitForWindow(qr/Certificate Management/); client2.wait_for_window(r"Certificate Management")
$server->sleep(5); # wait because mumble is slow to register event handlers server.sleep(5) # wait because mumble is slow to register event handlers
$client1->sendKeys("esc"); client1.send_key("esc")
$client2->sendKeys("esc"); client2.send_key("esc")
# accept server certificate # accept server certificate
$client1->waitForWindow(qr/^Mumble$/); client1.wait_for_window(r"^Mumble$")
$client2->waitForWindow(qr/^Mumble$/); client2.wait_for_window(r"^Mumble$")
$server->sleep(5); # wait because mumble is slow to register event handlers server.sleep(5) # wait because mumble is slow to register event handlers
$client1->sendChars("y"); client1.send_chars("y")
$client2->sendChars("y"); client2.send_chars("y")
$server->sleep(5); # wait because mumble is slow to register event handlers server.sleep(5) # wait because mumble is slow to register event handlers
# sometimes the wrong of the 2 windows is focused, we switch focus and try pressing "y" again # sometimes the wrong of the 2 windows is focused, we switch focus and try pressing "y" again
$client1->sendKeys("alt-tab"); client1.send_key("alt-tab")
$client2->sendKeys("alt-tab"); client2.send_key("alt-tab")
$server->sleep(5); # wait because mumble is slow to register event handlers server.sleep(5) # wait because mumble is slow to register event handlers
$client1->sendChars("y"); client1.send_chars("y")
$client2->sendChars("y"); client2.send_chars("y")
# Find clients in logs # Find clients in logs
$server->waitUntilSucceeds("journalctl -eu murmur -o cat | grep -q client1"); server.wait_until_succeeds("journalctl -eu murmur -o cat | grep -q client1")
$server->waitUntilSucceeds("journalctl -eu murmur -o cat | grep -q client2"); server.wait_until_succeeds("journalctl -eu murmur -o cat | grep -q client2")
$server->sleep(5); # wait to get screenshot server.sleep(5) # wait to get screenshot
$client1->screenshot("screen1"); client1.screenshot("screen1")
$client2->screenshot("screen2"); client2.screenshot("screen2")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... }: { import ./make-test-python.nix ({ pkgs, ... }: {
name = "nginx-sso"; name = "nginx-sso";
meta = { meta = {
maintainers = with pkgs.stdenv.lib.maintainers; [ delroth ]; maintainers = with pkgs.stdenv.lib.maintainers; [ delroth ];
@ -27,18 +27,22 @@ import ./make-test.nix ({ pkgs, ... }: {
}; };
testScript = '' testScript = ''
startAll; start_all()
$machine->waitForUnit("nginx-sso.service"); machine.wait_for_unit("nginx-sso.service")
$machine->waitForOpenPort(8080); machine.wait_for_open_port(8080)
# No valid user -> 401. with subtest("No valid user -> 401"):
$machine->fail("curl -sSf http://localhost:8080/auth"); machine.fail("curl -sSf http://localhost:8080/auth")
# Valid user but no matching ACL -> 403. with subtest("Valid user but no matching ACL -> 403"):
$machine->fail("curl -sSf -H 'Authorization: Token MyToken' http://localhost:8080/auth"); machine.fail(
"curl -sSf -H 'Authorization: Token MyToken' http://localhost:8080/auth"
)
# Valid user and matching ACL -> 200. with subtest("Valid user and matching ACL -> 200"):
$machine->succeed("curl -sSf -H 'Authorization: Token MyToken' -H 'X-Application: MyApp' http://localhost:8080/auth"); machine.succeed(
"curl -sSf -H 'Authorization: Token MyToken' -H 'X-Application: MyApp' http://localhost:8080/auth"
)
''; '';
}) })

View File

@ -4,7 +4,7 @@
# 2. whether the ETag header is properly generated whenever we're serving # 2. whether the ETag header is properly generated whenever we're serving
# files in Nix store paths # files in Nix store paths
# 3. nginx doesn't restart on configuration changes (only reloads) # 3. nginx doesn't restart on configuration changes (only reloads)
import ./make-test.nix ({ pkgs, ... }: { import ./make-test-python.nix ({ pkgs, ... }: {
name = "nginx"; name = "nginx";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ mbbx6spp ]; maintainers = [ mbbx6spp ];
@ -69,43 +69,46 @@ import ./make-test.nix ({ pkgs, ... }: {
justReloadSystem = "${nodes.webserver.config.system.build.toplevel}/fine-tune/child-2"; justReloadSystem = "${nodes.webserver.config.system.build.toplevel}/fine-tune/child-2";
reloadRestartSystem = "${nodes.webserver.config.system.build.toplevel}/fine-tune/child-3"; reloadRestartSystem = "${nodes.webserver.config.system.build.toplevel}/fine-tune/child-3";
in '' in ''
my $url = 'http://localhost/index.html'; url = "http://localhost/index.html"
sub checkEtag {
my $etag = $webserver->succeed(
'curl -v '.$url.' 2>&1 | sed -n -e "s/^< [Ee][Tt][Aa][Gg]: *//p"'
);
$etag =~ s/\r?\n$//;
my $httpCode = $webserver->succeed(
'curl -w "%{http_code}" -X HEAD -H \'If-None-Match: '.$etag.'\' '.$url
);
chomp $httpCode;
die "HTTP code is not 304" unless $httpCode == 304;
return $etag;
}
$webserver->waitForUnit("nginx"); def check_etag():
$webserver->waitForOpenPort("80"); etag = webserver.succeed(
f'curl -v {url} 2>&1 | sed -n -e "s/^< etag: *//ip"'
).rstrip()
http_code = webserver.succeed(
f"curl -w '%{{http_code}}' --head --fail -H 'If-None-Match: {etag}' {url}"
)
assert http_code.split("\n")[-1] == "304"
subtest "check ETag if serving Nix store paths", sub { return etag
my $oldEtag = checkEtag;
$webserver->succeed("${etagSystem}/bin/switch-to-configuration test >&2");
$webserver->sleep(1); # race condition
my $newEtag = checkEtag;
die "Old ETag $oldEtag is the same as $newEtag" if $oldEtag eq $newEtag;
};
subtest "config is reloaded on nixos-rebuild switch", sub {
$webserver->succeed("${justReloadSystem}/bin/switch-to-configuration test >&2");
$webserver->waitForOpenPort("8080");
$webserver->fail("journalctl -u nginx | grep -q -i stopped");
$webserver->succeed("journalctl -u nginx | grep -q -i reloaded");
};
subtest "restart when nginx package changes", sub { webserver.wait_for_unit("nginx")
$webserver->succeed("${reloadRestartSystem}/bin/switch-to-configuration test >&2"); webserver.wait_for_open_port(80)
$webserver->waitForUnit("nginx");
$webserver->succeed("journalctl -u nginx | grep -q -i stopped"); with subtest("check ETag if serving Nix store paths"):
}; old_etag = check_etag()
webserver.succeed(
"${etagSystem}/bin/switch-to-configuration test >&2"
)
webserver.sleep(1)
new_etag = check_etag()
assert old_etag != new_etag
with subtest("config is reloaded on nixos-rebuild switch"):
webserver.succeed(
"${justReloadSystem}/bin/switch-to-configuration test >&2"
)
webserver.wait_for_open_port(8080)
webserver.fail("journalctl -u nginx | grep -q -i stopped")
webserver.succeed("journalctl -u nginx | grep -q -i reloaded")
with subtest("restart when nginx package changes"):
webserver.succeed(
"${reloadRestartSystem}/bin/switch-to-configuration test >&2"
)
webserver.wait_for_unit("nginx")
webserver.succeed("journalctl -u nginx | grep -q -i stopped")
''; '';
}) })

View File

@ -7,7 +7,7 @@ let
{ services.httpd.enable = true; { services.httpd.enable = true;
services.httpd.adminAddr = "foo@example.org"; services.httpd.adminAddr = "foo@example.org";
services.httpd.documentRoot = "${pkgs.valgrind.doc}/share/doc/valgrind/html"; services.httpd.virtualHosts.localhost.documentRoot = "${pkgs.valgrind.doc}/share/doc/valgrind/html";
networking.firewall.allowedTCPPorts = [ 80 ]; networking.firewall.allowedTCPPorts = [ 80 ];
}; };
@ -26,11 +26,11 @@ in
{ services.httpd.enable = true; { services.httpd.enable = true;
services.httpd.adminAddr = "bar@example.org"; services.httpd.adminAddr = "bar@example.org";
services.httpd.extraModules = [ "proxy_balancer" "lbmethod_byrequests" ]; services.httpd.extraModules = [ "proxy_balancer" "lbmethod_byrequests" ];
services.httpd.extraConfig = ''
services.httpd.extraConfig =
''
ExtendedStatus on ExtendedStatus on
'';
services.httpd.virtualHosts.localhost = {
extraConfig = ''
<Location /server-status> <Location /server-status>
Require all granted Require all granted
SetHandler server-status SetHandler server-status
@ -50,6 +50,7 @@ in
# For testing; don't want to wait forever for dead backend servers. # For testing; don't want to wait forever for dead backend servers.
ProxyTimeout 5 ProxyTimeout 5
''; '';
};
networking.firewall.allowedTCPPorts = [ 80 ]; networking.firewall.allowedTCPPorts = [ 80 ];
}; };

View File

@ -56,9 +56,11 @@ in
networking.firewall.enable = false; networking.firewall.enable = false;
services.httpd.enable = true; services.httpd.enable = true;
services.httpd.listen = [{ ip = "*"; port = 9000; }]; services.httpd.virtualHosts.localhost = {
services.httpd.adminAddr = "foo@example.org"; listen = [{ ip = "*"; port = 9000; }];
services.httpd.documentRoot = "/tmp"; adminAddr = "foo@example.org";
documentRoot = "/tmp";
};
}; };
client2 = client2 =

View File

@ -29,6 +29,6 @@ stdenv.mkDerivation rec {
homepage = https://flacon.github.io/; homepage = https://flacon.github.io/;
license = licenses.lgpl21; license = licenses.lgpl21;
platforms = platforms.linux; platforms = platforms.linux;
maintainers = with maintainers; [ ndowens nico202 ]; maintainers = with maintainers; [ nico202 ];
}; };
} }

View File

@ -159,7 +159,7 @@ stdenv.mkDerivation {
homepage = https://www.spotify.com/; homepage = https://www.spotify.com/;
description = "Play music from the Spotify music service"; description = "Play music from the Spotify music service";
license = licenses.unfree; license = licenses.unfree;
maintainers = with maintainers; [ eelco ftrvxmtrx sheenobu mudri timokau ]; maintainers = with maintainers; [ eelco ftrvxmtrx sheenobu mudri timokau ma27 ];
platforms = [ "x86_64-linux" ]; platforms = [ "x86_64-linux" ];
}; };
} }

View File

@ -3,12 +3,12 @@
, libGLU, lv2, gtk2, cairo, pango, fftwFloat, zita-convolver }: , libGLU, lv2, gtk2, cairo, pango, fftwFloat, zita-convolver }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "20191013"; version = "20191215";
pname = "x42-plugins"; pname = "x42-plugins";
src = fetchurl { src = fetchurl {
url = "https://gareus.org/misc/x42-plugins/${pname}-${version}.tar.xz"; url = "https://gareus.org/misc/x42-plugins/${pname}-${version}.tar.xz";
sha256 = "18kn1bmc0s6dp834kc51ibifzzn3bxwya4p8s8yq9f4mpmkghi24"; sha256 = "1mwfvhsvc0qgjyiwd8pmmam1mav43lmv39fljhmj9yri558v5g1c";
}; };
nativeBuildInputs = [ pkgconfig ]; nativeBuildInputs = [ pkgconfig ];

View File

@ -113,6 +113,8 @@
perl-completion = perl-completion =
callPackage ./perl-completion { }; callPackage ./perl-completion { };
pod-mode = callPackage ./pod-mode { };
railgun = callPackage ./railgun { }; railgun = callPackage ./railgun { };
structured-haskell-mode = self.shm; structured-haskell-mode = self.shm;

View File

@ -0,0 +1,18 @@
{ trivialBuild, lib, fetchurl }:
trivialBuild rec {
pname = "pod-mode";
version = "1.04";
src = fetchurl {
url = "mirror://cpan/authors/id/F/FL/FLORA/pod-mode-${version}.tar.gz";
sha256 = "1wr0khymkaa65blrc5nya607c1a3sjsww49bbf8f0a6176as71sv";
};
meta = with lib; {
description = "Major mode for editing .pod-files";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ qyliss ];
platform = platforms.all;
};
}

View File

@ -0,0 +1,21 @@
{ lib, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
pname = "glow";
version = "0.1.3";
src = fetchFromGitHub {
owner = "charmbracelet";
repo = "glow";
rev = "v${version}";
sha256 = "16zadrp42y01hi83hg47cw6c9zpw8z4xfssb5pxkmd2ynihaxfv5";
};
modSha256 = "1q67j9wg0kgb41zjgdbcrywxbwh597n8shwnwgl2xa6f7fvzpr4f";
meta = src.meta // {
description = "Render markdown on the CLI";
maintainers = with lib.maintainers; [ ehmry filalex77 ];
license = lib.licenses.mit;
};
}

View File

@ -150,7 +150,7 @@ let
with on-the-fly code analysis, error prevention and with on-the-fly code analysis, error prevention and
automated refactorings for PHP and JavaScript code. automated refactorings for PHP and JavaScript code.
''; '';
maintainers = with maintainers; [ schristo ]; maintainers = with maintainers; [ schristo ma27 ];
platforms = platforms.linux; platforms = platforms.linux;
}; };
}); });

View File

@ -20,11 +20,11 @@ let
in stdenv.mkDerivation rec { in stdenv.mkDerivation rec {
pname = "nano"; pname = "nano";
version = "4.6"; version = "4.7";
src = fetchurl { src = fetchurl {
url = "mirror://gnu/nano/${pname}-${version}.tar.xz"; url = "mirror://gnu/nano/${pname}-${version}.tar.xz";
sha256 = "1s98jsvkfar6qmd5n5l1n1k59623dnc93ciyvlhxjkvpad0kmb4v"; sha256 = "1x9nqy2kgaz6087p63i71gdjsqbdc9jjpx1ymlyclfakvsby3h2q";
}; };
nativeBuildInputs = [ texinfo ] ++ optional enableNls gettext; nativeBuildInputs = [ texinfo ] ++ optional enableNls gettext;
@ -38,15 +38,6 @@ in stdenv.mkDerivation rec {
(stdenv.lib.enableFeature enableTiny "tiny") (stdenv.lib.enableFeature enableTiny "tiny")
]; ];
patches = [
(fetchurl {
# fix compilation on macOS, where 'st_mtim' is unknown
# upstream patch not in 4.6
url = "https://git.savannah.gnu.org/cgit/nano.git/patch/?id=f516cddce749c3bf938271ef3182b9169ac8cbcc";
sha256 = "0gqymvr5vxxypr7y3sm252rsi4gjqp597l01x0lkxyvxsn45a4sx";
})
];
postInstall = '' postInstall = ''
cp ${nixSyntaxHighlight}/nix.nanorc $out/share/nano/ cp ${nixSyntaxHighlight}/nix.nanorc $out/share/nano/
''; '';

View File

@ -2,7 +2,6 @@
, libuv, lua, ncurses, pkgconfig , libuv, lua, ncurses, pkgconfig
, unibilium, xsel, gperf , unibilium, xsel, gperf
, libvterm-neovim , libvterm-neovim
, withJemalloc ? true, jemalloc
, glibcLocales ? null, procps ? null , glibcLocales ? null, procps ? null
# now defaults to false because some tests can be flaky (clipboard etc) # now defaults to false because some tests can be flaky (clipboard etc)
@ -50,8 +49,7 @@ in
ncurses ncurses
neovimLuaEnv neovimLuaEnv
unibilium unibilium
] ++ optional withJemalloc jemalloc ] ++ optional stdenv.isDarwin libiconv
++ optional stdenv.isDarwin libiconv
++ optionals doCheck [ glibcLocales procps ] ++ optionals doCheck [ glibcLocales procps ]
; ;
@ -92,16 +90,11 @@ in
hardeningDisable = [ "fortify" ]; hardeningDisable = [ "fortify" ];
preConfigure = stdenv.lib.optionalString stdenv.isDarwin '' preConfigure = stdenv.lib.optionalString stdenv.isDarwin ''
export DYLD_LIBRARY_PATH=${jemalloc}/lib
substituteInPlace src/nvim/CMakeLists.txt --replace " util" "" substituteInPlace src/nvim/CMakeLists.txt --replace " util" ""
''; '';
postInstall = stdenv.lib.optionalString stdenv.isLinux '' postInstall = stdenv.lib.optionalString stdenv.isLinux ''
sed -i -e "s|'xsel|'${xsel}/bin/xsel|g" $out/share/nvim/runtime/autoload/provider/clipboard.vim sed -i -e "s|'xsel|'${xsel}/bin/xsel|g" $out/share/nvim/runtime/autoload/provider/clipboard.vim
'' + stdenv.lib.optionalString (withJemalloc && stdenv.isDarwin) ''
install_name_tool -change libjemalloc.1.dylib \
${jemalloc}/lib/libjemalloc.1.dylib \
$out/bin/nvim
''; '';
# export PATH=$PWD/build/bin:${PATH} # export PATH=$PWD/build/bin:${PATH}
@ -126,7 +119,7 @@ in
# those contributions were copied from Vim (identified in the commit logs # those contributions were copied from Vim (identified in the commit logs
# by the vim-patch token). See LICENSE for details." # by the vim-patch token). See LICENSE for details."
license = with licenses; [ asl20 vim ]; license = with licenses; [ asl20 vim ];
maintainers = with maintainers; [ manveru rvolosatovs ]; maintainers = with maintainers; [ manveru rvolosatovs ma27 ];
platforms = platforms.unix; platforms = platforms.unix;
}; };
} }

View File

@ -3,16 +3,16 @@
, ilmbase, gtk3, intltool, lcms2, lensfun, libX11, libexif, libgphoto2, libjpeg , ilmbase, gtk3, intltool, lcms2, lensfun, libX11, libexif, libgphoto2, libjpeg
, libpng, librsvg, libtiff, openexr, osm-gps-map, pkgconfig, sqlite, libxslt , libpng, librsvg, libtiff, openexr, osm-gps-map, pkgconfig, sqlite, libxslt
, openjpeg, lua, pugixml, colord, colord-gtk, libwebp, libsecret, gnome3 , openjpeg, lua, pugixml, colord, colord-gtk, libwebp, libsecret, gnome3
, ocl-icd, pcre, gtk-mac-integration, isocodes , ocl-icd, pcre, gtk-mac-integration, isocodes, llvmPackages
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "2.6.3"; version = "3.0.0";
pname = "darktable"; pname = "darktable";
src = fetchurl { src = fetchurl {
url = "https://github.com/darktable-org/darktable/releases/download/release-${version}/darktable-${version}.tar.xz"; url = "https://github.com/darktable-org/darktable/releases/download/release-${version}/darktable-${version}.tar.xz";
sha256 = "a518999c8458472edfc04577026ce5047d74553052af0f52d10ba8ce601b78f0"; sha256 = "7195a5ff7ee95ab7c5a57e4e84f8c90cc4728b2c917359203c21293ab754c0db";
}; };
nativeBuildInputs = [ cmake ninja llvm pkgconfig intltool perl desktop-file-utils wrapGAppsHook ]; nativeBuildInputs = [ cmake ninja llvm pkgconfig intltool perl desktop-file-utils wrapGAppsHook ];
@ -24,7 +24,8 @@ stdenv.mkDerivation rec {
libwebp libsecret gnome3.adwaita-icon-theme osm-gps-map pcre isocodes libwebp libsecret gnome3.adwaita-icon-theme osm-gps-map pcre isocodes
] ++ stdenv.lib.optionals stdenv.isLinux [ ] ++ stdenv.lib.optionals stdenv.isLinux [
colord colord-gtk libX11 ocl-icd colord colord-gtk libX11 ocl-icd
] ++ stdenv.lib.optional stdenv.isDarwin gtk-mac-integration; ] ++ stdenv.lib.optional stdenv.isDarwin gtk-mac-integration
++ stdenv.lib.optional stdenv.cc.isClang llvmPackages.openmp;
cmakeFlags = [ cmakeFlags = [
"-DBUILD_USERMANUAL=False" "-DBUILD_USERMANUAL=False"

View File

@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
description = "A light-weight image viewer"; description = "A light-weight image viewer";
homepage = "https://feh.finalrewind.org/"; homepage = "https://feh.finalrewind.org/";
license = licenses.mit; license = licenses.mit;
maintainers = with maintainers; [ viric willibutz globin ]; maintainers = with maintainers; [ viric willibutz globin ma27 ];
platforms = platforms.unix; platforms = platforms.unix;
}; };
} }

View File

@ -1,5 +1,6 @@
{ stdenv { stdenv
, fetchFromGitHub , fetchFromGitHub
, fetchpatch
, boost , boost
, cmake , cmake
, ilmbase , ilmbase
@ -14,15 +15,22 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "openimageio"; pname = "openimageio";
version = "2.0.12"; version = "2.1.9.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "OpenImageIO"; owner = "OpenImageIO";
repo = "oiio"; repo = "oiio";
rev = "Release-${version}"; rev = "Release-${version}";
sha256 = "0v3k33jb0glb30jdhq3c732a9dxvnidaclz6b2wpqwik8l3658mj"; sha256 = "1bbxx3bcc5jlb90ffxbk29gb8227097rdr8vg97vj9axw2mjd5si";
}; };
patches = [
(fetchpatch {
url = "https://github.com/OpenImageIO/oiio/pull/2441/commits/e9bdd69596103edf41b659ad8ab0ca4ce002f6f5.patch";
sha256 = "0x1wmjf1jrm19d1izhs1cs3y1if9al1zx48lahkfswyjag3r5dn0";
})
];
outputs = [ "bin" "out" "dev" "doc" ]; outputs = [ "bin" "out" "dev" "doc" ];
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -22,7 +22,7 @@ stdenv.mkDerivation (rec {
description = "Powerful image viewer with minimal UI"; description = "Powerful image viewer with minimal UI";
homepage = http://www.pberndt.com/Programme/Linux/pqiv; homepage = http://www.pberndt.com/Programme/Linux/pqiv;
license = licenses.gpl3; license = licenses.gpl3;
maintainers = [ maintainers.ndowens ]; maintainers = [];
platforms = platforms.linux; platforms = platforms.linux;
}; };
}) })

View File

@ -2,7 +2,7 @@
mkDerivation, lib, kdepimTeam, mkDerivation, lib, kdepimTeam,
extra-cmake-modules, kdoctools, extra-cmake-modules, kdoctools,
qtwebengine, qtwebengine,
kcmutils, kcrash, kdbusaddons, kwindowsystem, kcmutils, kcrash, kdbusaddons, kparts, kwindowsystem,
akonadi, grantleetheme, kdepim-apps-libs, kontactinterface, kpimtextedit, akonadi, grantleetheme, kdepim-apps-libs, kontactinterface, kpimtextedit,
mailcommon, libkdepim mailcommon, libkdepim
}: }:
@ -16,7 +16,7 @@ mkDerivation {
nativeBuildInputs = [ extra-cmake-modules kdoctools ]; nativeBuildInputs = [ extra-cmake-modules kdoctools ];
buildInputs = [ buildInputs = [
qtwebengine qtwebengine
kcmutils kcrash kdbusaddons kwindowsystem kcmutils kcrash kdbusaddons kparts kwindowsystem
akonadi grantleetheme kdepim-apps-libs kontactinterface kpimtextedit akonadi grantleetheme kdepim-apps-libs kontactinterface kpimtextedit
mailcommon libkdepim mailcommon libkdepim
]; ];

View File

@ -1,6 +1,6 @@
{ stdenv, fetchFromGitHub, mkDerivation { stdenv, fetchFromGitHub, mkDerivation
, qtbase, qtsvg, qtserialport, qtwebkit, qtmultimedia, qttools , qtbase, qtsvg, qtserialport, qtwebengine, qtmultimedia, qttools
, qtconnectivity, qtcharts , qtconnectivity, qtcharts, libusb
, yacc, flex, zlib, qmake, makeDesktopItem, makeWrapper , yacc, flex, zlib, qmake, makeDesktopItem, makeWrapper
}: }:
@ -16,18 +16,18 @@ let
}; };
in mkDerivation rec { in mkDerivation rec {
pname = "golden-cheetah"; pname = "golden-cheetah";
version = "3.5-DEV1903"; version = "3.5-RC2X";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "GoldenCheetah"; owner = "GoldenCheetah";
repo = "GoldenCheetah"; repo = "GoldenCheetah";
rev = "v${version}"; rev = "V${version}";
sha256 = "130b0hm04i0hf97rs1xrdfhbal5vjsknj3x4cdxjh7rgbg2p1sm3"; sha256 = "1d85700gjbcw2badwz225rjdr954ai89900vp8sal04sk79wbr6g";
}; };
buildInputs = [ buildInputs = [
qtbase qtsvg qtserialport qtwebkit qtmultimedia qttools zlib qtbase qtsvg qtserialport qtwebengine qtmultimedia qttools zlib
qtconnectivity qtcharts qtconnectivity qtcharts libusb
]; ];
nativeBuildInputs = [ flex makeWrapper qmake yacc ]; nativeBuildInputs = [ flex makeWrapper qmake yacc ];
@ -39,7 +39,14 @@ in mkDerivation rec {
cp src/gcconfig.pri.in src/gcconfig.pri cp src/gcconfig.pri.in src/gcconfig.pri
cp qwt/qwtconfig.pri.in qwt/qwtconfig.pri cp qwt/qwtconfig.pri.in qwt/qwtconfig.pri
echo 'QMAKE_LRELEASE = ${qttools.dev}/bin/lrelease' >> src/gcconfig.pri echo 'QMAKE_LRELEASE = ${qttools.dev}/bin/lrelease' >> src/gcconfig.pri
echo 'LIBUSB_INSTALL = ${libusb}' >> src/gcconfig.pri
echo 'LIBUSB_INCLUDE = ${libusb.dev}/include' >> src/gcconfig.pri
echo 'LIBUSB_LIBS = -L${libusb}/lib -lusb' >> src/gcconfig.pri
sed -i -e '21,23d' qwt/qwtconfig.pri # Removed forced installation to /usr/local sed -i -e '21,23d' qwt/qwtconfig.pri # Removed forced installation to /usr/local
# Use qtwebengine instead of qtwebkit
substituteInPlace src/gcconfig.pri \
--replace "#DEFINES += NOWEBKIT" "DEFINES += NOWEBKIT"
''; '';
installPhase = '' installPhase = ''
@ -53,9 +60,6 @@ in mkDerivation rec {
runHook postInstall runHook postInstall
''; '';
# RCC: Error in 'Resources/application.qrc': Cannot find file 'translations/gc_fr.qm'
enableParallelBuilding = false;
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Performance software for cyclists, runners and triathletes"; description = "Performance software for cyclists, runners and triathletes";
platforms = platforms.linux; platforms = platforms.linux;

View File

@ -2,7 +2,7 @@
buildGoModule rec { buildGoModule rec {
pname = "hugo"; pname = "hugo";
version = "0.61.0"; version = "0.62.0";
goPackagePath = "github.com/gohugoio/hugo"; goPackagePath = "github.com/gohugoio/hugo";
@ -10,10 +10,10 @@ buildGoModule rec {
owner = "gohugoio"; owner = "gohugoio";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "1ad70g4gb44dk48pbgk48jzs44b6l7ksxb739ahp7vs1nyvvgffr"; sha256 = "0z14qhsjgwqgm7kj25y0zh4b42bwd7zhcmwjxzkk6chzw7fwq375";
}; };
modSha256 = "1jb1iqlp1005aj8smcgznmwnqaysi5g5wcsj8nvvm70hhc9j8wns"; modSha256 = "0dwv5qnglv00jj7vlps76zlfpkzsplf93401j2l03xfvmvadifrs";
buildFlags = "-tags extended"; buildFlags = "-tags extended";

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "josm"; pname = "josm";
version = "15492"; version = "15553";
src = fetchurl { src = fetchurl {
url = "https://josm.openstreetmap.de/download/josm-snapshot-${version}.jar"; url = "https://josm.openstreetmap.de/download/josm-snapshot-${version}.jar";
sha256 = "0x7ndcrlvrvk2fd4pyn10npr3778khcwg6xzzh19vdw4glh5zfcl"; sha256 = "07kkc19r9xkb5jim26nnmajp0jzvg3absgx55z5qnna6r189ba2j";
}; };
buildInputs = [ jdk11 makeWrapper ]; buildInputs = [ jdk11 makeWrapper ];

View File

@ -97,7 +97,7 @@ in buildFHSUserEnv {
libcap libtiff libva libgphoto2 libxslt libtxc_dxtn libsndfile giflib zlib glib libcap libtiff libva libgphoto2 libxslt libtxc_dxtn libsndfile giflib zlib glib
alsaLib zziplib bash dbus keyutils zip cabextract freetype unzip coreutils alsaLib zziplib bash dbus keyutils zip cabextract freetype unzip coreutils
readline gcc SDL SDL2 curl graphite2 gtk2 gtk3 udev ncurses wayland libglvnd readline gcc SDL SDL2 curl graphite2 gtk2 gtk3 udev ncurses wayland libglvnd
vulkan-loader xdg_utils sqlite vulkan-loader xdg_utils sqlite gnutls
# PCSX2 // TODO: "libgobject-2.0.so.0: wrong ELF class: ELFCLASS64" # PCSX2 // TODO: "libgobject-2.0.so.0: wrong ELF class: ELFCLASS64"

View File

@ -1,4 +1,4 @@
{ stdenv, lib, fetchurl, makeWrapper { stdenv, lib, fetchurl
, autoreconfHook, pkgconfig, libxkbcommon, pango, which, git , autoreconfHook, pkgconfig, libxkbcommon, pango, which, git
, cairo, libxcb, xcbutil, xcbutilwm, xcbutilxrm, libstartup_notification , cairo, libxcb, xcbutil, xcbutilwm, xcbutilxrm, libstartup_notification
, bison, flex, librsvg, check , bison, flex, librsvg, check
@ -19,23 +19,18 @@ stdenv.mkDerivation rec {
sed -i 's/~root/~nobody/g' test/helper-expand.c sed -i 's/~root/~nobody/g' test/helper-expand.c
''; '';
nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper ]; nativeBuildInputs = [ autoreconfHook pkgconfig ];
buildInputs = [ libxkbcommon pango cairo git bison flex librsvg check buildInputs = [ libxkbcommon pango cairo git bison flex librsvg check
libstartup_notification libxcb xcbutil xcbutilwm xcbutilxrm which libstartup_notification libxcb xcbutil xcbutilwm xcbutilxrm which
]; ];
postInstall = ''
wrapProgram $out/bin/rofi-theme-selector \
--prefix XDG_DATA_DIRS : $out/share
'';
doCheck = false; doCheck = false;
meta = with lib; { meta = with lib; {
description = "Window switcher, run dialog and dmenu replacement"; description = "Window switcher, run dialog and dmenu replacement";
homepage = "https://github.com/davatorium/rofi"; homepage = "https://github.com/davatorium/rofi";
license = licenses.mit; license = licenses.mit;
maintainers = with maintainers; [ mbakke ma27 ]; maintainers = with maintainers; [ mbakke ];
platforms = with platforms; linux; platforms = with platforms; linux;
}; };
} }

View File

@ -1,6 +1,5 @@
{ stdenv, rofi-unwrapped, makeWrapper, theme ? null }: { stdenv, rofi-unwrapped, makeWrapper, hicolor-icon-theme, theme ? null }:
if theme == null then rofi-unwrapped else
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "rofi"; pname = "rofi";
version = rofi-unwrapped.version; version = rofi-unwrapped.version;
@ -14,8 +13,15 @@ stdenv.mkDerivation {
rm $out/bin rm $out/bin
mkdir $out/bin mkdir $out/bin
ln -s ${rofi-unwrapped}/bin/* $out/bin ln -s ${rofi-unwrapped}/bin/* $out/bin
rm $out/bin/rofi rm $out/bin/rofi
makeWrapper ${rofi-unwrapped}/bin/rofi $out/bin/rofi --add-flags "-theme ${theme}" makeWrapper ${rofi-unwrapped}/bin/rofi $out/bin/rofi \
--prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share \
${if theme != null then ''--add-flags "-theme ${theme}"'' else ""}
rm $out/bin/rofi-theme-selector
makeWrapper ${rofi-unwrapped}/bin/rofi-theme-selector $out/bin/rofi-theme-selector \
--prefix XDG_DATA_DIRS : $out/share
''; '';
meta = rofi-unwrapped.meta // { meta = rofi-unwrapped.meta // {

View File

@ -16,10 +16,10 @@ let
pname = "simplenote"; pname = "simplenote";
version = "1.11.0"; version = "1.12.0";
sha256 = { sha256 = {
x86_64-linux = "1ljam1yfiy1lh6lrknrq7cdqpj1q7f655mxjiiwv3izp98qr1f8s"; x86_64-linux = "0y9b4haaj7qxr92wnwacziljqrkf4vlyqq3rvis8ribq6zr5b24w";
}.${system} or throwSystem; }.${system} or throwSystem;
meta = with stdenv.lib; { meta = with stdenv.lib; {
@ -87,6 +87,7 @@ let
postFixup = '' postFixup = ''
makeWrapper $out/opt/Simplenote/simplenote $out/bin/simplenote \ makeWrapper $out/opt/Simplenote/simplenote $out/bin/simplenote \
--prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ stdenv.cc.cc ] }" \
"''${gappsWrapperArgs[@]}" "''${gappsWrapperArgs[@]}"
''; '';
}; };

View File

@ -20,14 +20,14 @@
}: }:
mkDerivation rec { mkDerivation rec {
version = "0.10.3"; version = "0.10.4";
pname = "syncthingtray"; pname = "syncthingtray";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "Martchus"; owner = "Martchus";
repo = "syncthingtray"; repo = "syncthingtray";
rev = "v${version}"; rev = "v${version}";
sha256 = "12s1v65h4z051k4gi1b5f3z4hpbgqnhkjnz2xv5bdwhs24zxrrif"; sha256 = "068v63bb1bq6vz7byhnd28l6dmr4jmivailxmjv86wakbsqvlhbi";
}; };
buildInputs = [ qtbase cpp-utilities qtutilities ] buildInputs = [ qtbase cpp-utilities qtutilities ]

View File

@ -1,4 +1,4 @@
{ rustPlatform, lib, fetchFromGitHub, ncurses, openssl, pkgconfig }: { rustPlatform, lib, fetchFromGitHub, ncurses, openssl, pkgconfig, Security, stdenv }:
rustPlatform.buildRustPackage rec { rustPlatform.buildRustPackage rec {
pname = "taizen"; pname = "taizen";
@ -11,7 +11,7 @@ rustPlatform.buildRustPackage rec {
sha256 = "09izgx7icvizskdy9kplk0am61p7550fsd0v42zcihq2vap2j92z"; sha256 = "09izgx7icvizskdy9kplk0am61p7550fsd0v42zcihq2vap2j92z";
}; };
buildInputs = [ ncurses openssl ]; buildInputs = [ ncurses openssl ] ++ lib.optional stdenv.isDarwin Security;
nativeBuildInputs = [ pkgconfig ]; nativeBuildInputs = [ pkgconfig ];
cargoSha256 = "0h8ybhb17pqhhfjcmq1l70kp8g1yyq38228lcf86byk3r2ar2rkg"; cargoSha256 = "0h8ybhb17pqhhfjcmq1l70kp8g1yyq38228lcf86byk3r2ar2rkg";

View File

@ -15,6 +15,6 @@ stdenv.mkDerivation rec {
description = "A two-pane file manager with advanced file manipulation features"; description = "A two-pane file manager with advanced file manipulation features";
homepage = http://www.boomerangsworld.de/cms/worker/index.html; homepage = http://www.boomerangsworld.de/cms/worker/index.html;
license = licenses.gpl2; license = licenses.gpl2;
maintainers = [ maintainers.ndowens ]; maintainers = [];
}; };
} }

View File

@ -4,13 +4,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "xmrig"; pname = "xmrig";
version = "5.1.0"; version = "5.4.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "xmrig"; owner = "xmrig";
repo = "xmrig"; repo = "xmrig";
rev = "v${version}"; rev = "v${version}";
sha256 = "1lkw7xrj20ppfmv7abki9i60yjks9i7nr8ni9p6n7rilfbp4603k"; sha256 = "1rwnlhzhasfa2iklrp897c0z7nvav2bz2z6nk41fvwwd3bsay2sf";
}; };
nativeBuildInputs = [ cmake ]; nativeBuildInputs = [ cmake ];

View File

@ -1,14 +1,14 @@
{ stdenv, buildGoPackage, fetchurl, fetchFromGitHub, go-bindata }: { stdenv, buildGoPackage, fetchurl, fetchFromGitHub, go-bindata }:
let let
version = "1.5.2"; version = "1.6.4";
# TODO: must build the extension instead of downloading it. But since it's # TODO: must build the extension instead of downloading it. But since it's
# literally an asset that is indifferent regardless of the platform, this # literally an asset that is indifferent regardless of the platform, this
# might be just enough. # might be just enough.
webext = fetchurl { webext = fetchurl {
url = "https://github.com/browsh-org/browsh/releases/download/v${version}/browsh-${version}-an.fx.xpi"; url = "https://github.com/browsh-org/browsh/releases/download/v${version}/browsh-${version}-an.fx.xpi";
sha256 = "0b9aycyif0hfhfkivlnvinr13r9h4qyxx768286966p67napbd63"; sha256 = "1shf1s9s525wns5vrsc4ns21zjxm1si43lx6v0q8ma6vd5x5445l";
}; };
in buildGoPackage rec { in buildGoPackage rec {
@ -23,7 +23,7 @@ in buildGoPackage rec {
owner = "browsh-org"; owner = "browsh-org";
repo = "browsh"; repo = "browsh";
rev = "v${version}"; rev = "v${version}";
sha256 = "1z78kgxrbi2jy20rbq6kx5mjk4gpg58w4rb3flp42l9p7bhdbr2h"; sha256 = "0gvf5k1gm81xxg7ha309kgfkgl5357dli0fbc4z01rmfgbl0rfa0";
}; };
buildInputs = [ go-bindata ]; buildInputs = [ go-bindata ];

View File

@ -1,3 +1,4 @@
# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
[ [
{ {
goPackagePath = "github.com/NYTimes/gziphandler"; goPackagePath = "github.com/NYTimes/gziphandler";
@ -49,8 +50,8 @@
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/gorilla/websocket"; url = "https://github.com/gorilla/websocket";
rev = "5ed622c449da6d44c3c8329331ff47a9e5844f71"; rev = "66b9c49e59c6c48f0ffce28c2d8b8a5678502c6d";
sha256 = "1yhcwraijdk6lx7f6m9p6i1b3zfh2hq80l1nfpnckfn10gh72aw7"; sha256 = "00i4vb31nsfkzzk7swvx3i75r2d960js3dri1875vypk3v2s0pzk";
}; };
} }
{ {
@ -103,8 +104,8 @@
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/mitchellh/mapstructure"; url = "https://github.com/mitchellh/mapstructure";
rev = "f15292f7a699fcc1a38a80977f80a046874ba8ac"; rev = "3536a929edddb9a5b34bd6861dc4a9647cb459fe";
sha256 = "0zm3nhdvmj3f8q0vg2sjfw1sm3pwsw0ggz501awz95w99664a8al"; sha256 = "03bpv28jz9zhn4947saqwi328ydj7f6g6pf1m2d4m5zdh5jlfkrr";
}; };
} }
{ {
@ -166,8 +167,8 @@
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/cast"; url = "https://github.com/spf13/cast";
rev = "8965335b8c7107321228e3e3702cab9832751bac"; rev = "8c9545af88b134710ab1cd196795e7f2388358d7";
sha256 = "177bk7lq40jbgv9p9r80aydpaccfk8ja3a7jjhfwiwk9r1pa4rr2"; sha256 = "0xq1ffqj8y8h7dcnm0m9lfrh0ga7pssnn2c1dnr09chqbpn4bdc5";
}; };
} }
{ {
@ -184,8 +185,8 @@
fetch = { fetch = {
type = "git"; type = "git";
url = "https://github.com/spf13/pflag"; url = "https://github.com/spf13/pflag";
rev = "3ebe029320b2676d667ae88da602a5f854788a8a"; rev = "298182f68c66c05229eb03ac171abe6e309ee79a";
sha256 = "11yxs0wqy70wj106fkz8r923yg4ncnc2mbw33v48zmlg4a1rasgp"; sha256 = "1cj3cjm7d3zk0mf1xdybh0jywkbbw7a6yr3y22x9sis31scprswd";
}; };
} }
{ {

View File

@ -16,7 +16,7 @@
, libXScrnSaver, libXcursor, libXtst, libGLU, libGL , libXScrnSaver, libXcursor, libXtst, libGLU, libGL
, protobuf, speechd, libXdamage, cups , protobuf, speechd, libXdamage, cups
, ffmpeg, libxslt, libxml2, at-spi2-core , ffmpeg, libxslt, libxml2, at-spi2-core
, jdk , jre
# optional dependencies # optional dependencies
, libgcrypt ? null # gnomeSupport || cupsSupport , libgcrypt ? null # gnomeSupport || cupsSupport
@ -124,7 +124,7 @@ let
glib gtk3 dbus-glib glib gtk3 dbus-glib
libXScrnSaver libXcursor libXtst libGLU libGL libXScrnSaver libXcursor libXtst libGLU libGL
pciutils protobuf speechd libXdamage at-spi2-core pciutils protobuf speechd libXdamage at-spi2-core
jdk.jre jre
] ++ optional gnomeKeyringSupport libgnome-keyring3 ] ++ optional gnomeKeyringSupport libgnome-keyring3
++ optionals gnomeSupport [ gnome.GConf libgcrypt ] ++ optionals gnomeSupport [ gnome.GConf libgcrypt ]
++ optionals cupsSupport [ libgcrypt cups ] ++ optionals cupsSupport [ libgcrypt cups ]

View File

@ -45,11 +45,11 @@ let
flash = stdenv.mkDerivation rec { flash = stdenv.mkDerivation rec {
pname = "flashplayer-ppapi"; pname = "flashplayer-ppapi";
version = "32.0.0.293"; version = "32.0.0.303";
src = fetchzip { src = fetchzip {
url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/${version}/flash_player_ppapi_linux.x86_64.tar.gz"; url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/${version}/flash_player_ppapi_linux.x86_64.tar.gz";
sha256 = "0rgriqdbyrzpm1bcph35bhzd5dz21yim56z93hkmbpdqg7767dwm"; sha256 = "0b2cw8y9rif2p0lyy2ir1v5lchxlsh543b9c743a2p85c9p7q62b";
stripRoot = false; stripRoot = false;
}; };

View File

@ -74,7 +74,7 @@ let
in in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "flashplayer"; pname = "flashplayer";
version = "32.0.0.293"; version = "32.0.0.303";
src = fetchurl { src = fetchurl {
url = url =
@ -85,14 +85,14 @@ stdenv.mkDerivation rec {
sha256 = sha256 =
if debug then if debug then
if arch == "x86_64" then if arch == "x86_64" then
"0lz1na68gdi9n23hfj5c731dbskm9684cwar7ji8yjfhfryfg5yn" "05hfc5ywmcvp6zf8aqmzjp3qy3byp0zdl0ssrv9gvzcskdqkhsj2"
else else
"10gm2ynndlyk66fndfbh7ah5ssqpyw8415i10n3lpw940x201dk0" "12hl8lvxz648ha70gi3v85mwf0nnayjiaslr669vjan3ww94jymv"
else else
if arch == "x86_64" then if arch == "x86_64" then
"0hmlv0v9lbgxrmz0n7czfnrbrwjwxhy99gsr5g1m0aqgw0y61clc" "0x0mabgswly2v8z13832pkbjsv404aq61pback6sgmp2lyycdg6w"
else else
"0qdw4f48xhnkzdly3jz63v14nmzd0gg49az5wxb08ghs8laaqlik"; "16kbpf1i3aqlrfbfh5ncg1n46ncl9hp6qdp36s5j3ivbc68pj81z";
}; };
nativeBuildInputs = [ unzip ]; nativeBuildInputs = [ unzip ];

View File

@ -50,7 +50,7 @@
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "flashplayer-standalone"; pname = "flashplayer-standalone";
version = "32.0.0.293"; version = "32.0.0.303";
src = fetchurl { src = fetchurl {
url = url =
@ -60,9 +60,9 @@ stdenv.mkDerivation {
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux.x86_64.tar.gz"; "https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux.x86_64.tar.gz";
sha256 = sha256 =
if debug then if debug then
"13mrknvl3yd8vrcs7mp6szz6f9ssfs72apzvc60f9qfwkhiwlg87" "0xkzlv90lpyy54j6pllknrp1l9vjyh6dsl63l4c8cgh4i830gi14"
else else
"0isvmzyi4isxvxxc5ksplcqc5cafpvbrln3dddpms8zps2dxpyzi"; "0mi3ggv6zhzmdd1h68cgl87n6izhp0pbkhnidd2gl2cp95f23c2d";
}; };
nativeBuildInputs = [ unzip ]; nativeBuildInputs = [ unzip ];

View File

@ -1,13 +1,15 @@
{ stdenv, rustPlatform, fetchurl, stfl, sqlite, curl, gettext, pkgconfig, libxml2, json_c, ncurses { stdenv, rustPlatform, fetchFromGitHub, stfl, sqlite, curl, gettext, pkgconfig, libxml2, json_c, ncurses
, asciidoc, docbook_xml_dtd_45, libxslt, docbook_xsl, libiconv, Security, makeWrapper }: , asciidoc, docbook_xml_dtd_45, libxslt, docbook_xsl, libiconv, Security, makeWrapper }:
rustPlatform.buildRustPackage rec { rustPlatform.buildRustPackage rec {
pname = "newsboat"; pname = "newsboat";
version = "2.17.1"; version = "2.17.1";
src = fetchurl { src = fetchFromGitHub {
url = "https://newsboat.org/releases/${version}/${pname}-${version}.tar.xz"; owner = "newsboat";
sha256 = "15qr2y35yvl0hzsf34d863n8v042v78ks6ksh5p1awvi055x5sy1"; repo = "newsboat";
rev = "r${version}";
sha256 = "1xdy45rc3zzmf59zzszq9wpks6pvc0flmmwak39ww7laj2vgb4a7";
}; };
cargoSha256 = "0db4j6y43gacazrvcmq823fzl5pdfdlg8mkjpysrw6h9fxisq83f"; cargoSha256 = "0db4j6y43gacazrvcmq823fzl5pdfdlg8mkjpysrw6h9fxisq83f";

View File

@ -66,6 +66,6 @@ stdenv.mkDerivation rec {
description = "Open Source Video Calls and Chat"; description = "Open Source Video Calls and Chat";
license = licenses.lgpl21Plus; license = licenses.lgpl21Plus;
platforms = platforms.linux; platforms = platforms.linux;
maintainers = with maintainers; [ ndowens ]; maintainers = with maintainers; [];
}; };
} }

View File

@ -7,34 +7,30 @@ def source(url)
source 'https://rubygems.org' source 'https://rubygems.org'
ruby '>= 2.3.0' ruby '>= 2.5.0'
group :default do group :default do
gem 'oauth', '>= 0.5.1' gem 'addressable','>= 2.7.0', '< 2.8'
gem 'json_pure', '~> 1.8' gem 'delayer','>= 1.0.1', '< 1.1'
gem 'addressable', '>= 2.5.2', '< 2.6' gem 'delayer-deferred','>= 2.1.1', '< 2.2'
gem 'diva', '>= 0.3.2', '< 2.0' gem 'diva','>= 1.0.1', '< 1.1'
gem 'memoist', '>= 0.16', '< 0.17' gem 'memoist','>= 0.16.2', '< 0.17'
gem 'ruby-hmac', '~> 0.4' gem 'oauth','>= 0.5.4'
gem 'typed-array', '~> 0.1' gem 'pluggaloid','>= 1.2.0', '< 1.3'
gem 'delayer', '~> 0.0' gem 'typed-array','>= 0.1.2', '< 0.2'
gem 'pluggaloid', '>= 1.1.1', '< 2.0'
gem 'delayer-deferred', '>= 2.0', '< 3.0'
gem 'twitter-text', '>= 2.1.0'
end end
group :test do group :test do
gem 'test-unit', '~> 3.0' gem 'test-unit','>= 3.3.4', '< 4.0'
gem 'rake', '~> 10.1' gem 'rake','>= 13.0.1'
gem 'watch', '~> 0.1' gem 'mocha','>= 1.11.1'
gem 'mocha', '~> 0.14' gem 'webmock','>= 3.7.6'
gem 'webmock', '~> 1.17' gem 'ruby-prof','>= 1.1.0'
gem 'ruby-prof'
end end
group :plugin do group :plugin do
Dir.glob(File.expand_path(File.join(__dir__, 'core/plugin/*/Gemfile'))){ |path| Dir.glob(File.expand_path(File.join(__dir__, 'plugin/*/Gemfile'))){ |path|
eval File.open(path).read eval File.open(path).read
} }
Dir.glob(File.join(File.expand_path(ENV['MIKUTTER_CONFROOT'] || '~/.mikutter'), 'plugin/*/Gemfile')){ |path| Dir.glob(File.join(File.expand_path(ENV['MIKUTTER_CONFROOT'] || '~/.mikutter'), 'plugin/*/Gemfile')){ |path|

View File

@ -1,117 +1,103 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
addressable (2.5.2) addressable (2.7.0)
public_suffix (>= 2.0.2, < 4.0) public_suffix (>= 2.0.2, < 5.0)
atk (3.3.2) atk (3.4.1)
glib2 (= 3.3.2) glib2 (= 3.4.1)
cairo (1.16.4) cairo (1.16.4)
native-package-installer (>= 1.0.3) native-package-installer (>= 1.0.3)
pkg-config (>= 1.2.2) pkg-config (>= 1.2.2)
cairo-gobject (3.3.2) cairo-gobject (3.4.1)
cairo (>= 1.16.2) cairo (>= 1.16.2)
glib2 (= 3.3.2) glib2 (= 3.4.1)
crack (0.4.3) crack (0.4.3)
safe_yaml (~> 1.0.0) safe_yaml (~> 1.0.0)
delayer (0.0.2) delayer (1.0.1)
delayer-deferred (2.0.0) delayer-deferred (2.1.1)
delayer (>= 0.0.2, < 0.1) delayer (>= 1.0, < 2.0)
diva (0.3.2) diva (1.0.1)
addressable (>= 2.5, < 2.6) addressable (>= 2.5.2, < 2.8)
gdk_pixbuf2 (3.3.2) gdk_pixbuf2 (3.4.1)
gio2 (= 3.3.2) gio2 (= 3.4.1)
gettext (3.2.9) gettext (3.2.9)
locale (>= 2.0.5) locale (>= 2.0.5)
text (>= 1.3.0) text (>= 1.3.0)
gio2 (3.3.2) gio2 (3.4.1)
gobject-introspection (= 3.3.2) gobject-introspection (= 3.4.1)
glib2 (3.3.2) glib2 (3.4.1)
native-package-installer (>= 1.0.3) native-package-installer (>= 1.0.3)
pkg-config (>= 1.2.2) pkg-config (>= 1.3.5)
gobject-introspection (3.3.2) gobject-introspection (3.4.1)
glib2 (= 3.3.2) glib2 (= 3.4.1)
gtk2 (3.3.2) gtk2 (3.4.1)
atk (= 3.3.2) atk (= 3.4.1)
gdk_pixbuf2 (= 3.3.2) gdk_pixbuf2 (= 3.4.1)
pango (= 3.3.2) pango (= 3.4.1)
hashdiff (0.3.9) hashdiff (1.0.0)
httpclient (2.8.3) httpclient (2.8.3)
idn-ruby (0.1.0)
instance_storage (1.0.0) instance_storage (1.0.0)
irb (1.0.0) io-console (0.5.3)
json_pure (1.8.6) irb (1.2.1)
reline (>= 0.0.1)
locale (2.1.2) locale (2.1.2)
memoist (0.16.0) memoist (0.16.2)
metaclass (0.0.4)
mini_portile2 (2.4.0) mini_portile2 (2.4.0)
mocha (0.14.0) mocha (1.11.1)
metaclass (~> 0.0.1) moneta (1.2.1)
moneta (1.1.1) native-package-installer (1.0.9)
native-package-installer (1.0.7) nokogiri (1.10.7)
nokogiri (1.10.3)
mini_portile2 (~> 2.4.0) mini_portile2 (~> 2.4.0)
oauth (0.5.4) oauth (0.5.4)
pango (3.3.2) pango (3.4.1)
cairo-gobject (= 3.3.2) cairo-gobject (= 3.4.1)
gobject-introspection (= 3.3.2) gobject-introspection (= 3.4.1)
pkg-config (1.3.7) pkg-config (1.4.0)
pluggaloid (1.1.2) pluggaloid (1.2.0)
delayer delayer (>= 1.0.0, < 2.0)
instance_storage (>= 1.0.0, < 2.0.0) instance_storage (>= 1.0.0, < 2.0.0)
power_assert (1.1.4) power_assert (1.1.5)
public_suffix (3.0.3) public_suffix (4.0.1)
rake (10.5.0) rake (13.0.1)
ruby-hmac (0.4.0) reline (0.1.2)
ruby-prof (0.17.0) io-console (~> 0.5)
ruby-prof (1.1.0)
safe_yaml (1.0.5) safe_yaml (1.0.5)
test-unit (3.3.2) test-unit (3.3.4)
power_assert power_assert
text (1.3.1) text (1.3.1)
totoridipjp (0.1.0)
twitter-text (3.0.0)
idn-ruby
unf (~> 0.1.0)
typed-array (0.1.2) typed-array (0.1.2)
unf (0.1.4) webmock (3.7.6)
unf_ext
unf_ext (0.0.7.6)
watch (0.1.0)
webmock (1.24.6)
addressable (>= 2.3.6) addressable (>= 2.3.6)
crack (>= 0.3.2) crack (>= 0.3.2)
hashdiff hashdiff (>= 0.4.0, < 2.0.0)
PLATFORMS PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
addressable (>= 2.5.2, < 2.6) addressable (>= 2.7.0, < 2.8)
delayer (~> 0.0) delayer (>= 1.0.1, < 1.1)
delayer-deferred (>= 2.0, < 3.0) delayer-deferred (>= 2.1.1, < 2.2)
diva (>= 0.3.2, < 2.0) diva (>= 1.0.1, < 1.1)
gettext (>= 3.2.9, < 3.3) gettext (>= 3.2.9, < 3.3)
gtk2 (= 3.3.2) gtk2 (= 3.4.1)
httpclient httpclient
irb (>= 1.0.0, < 1.1) irb (>= 1.2.0, < 1.3)
json_pure (~> 1.8) memoist (>= 0.16.2, < 0.17)
memoist (>= 0.16, < 0.17) mocha (>= 1.11.1)
mocha (~> 0.14)
moneta moneta
nokogiri nokogiri
oauth (>= 0.5.1) oauth (>= 0.5.4)
pluggaloid (>= 1.1.1, < 2.0) pluggaloid (>= 1.2.0, < 1.3)
rake (~> 10.1) rake (>= 13.0.1)
ruby-hmac (~> 0.4) ruby-prof (>= 1.1.0)
ruby-prof test-unit (>= 3.3.4, < 4.0)
test-unit (~> 3.0) typed-array (>= 0.1.2, < 0.2)
totoridipjp webmock (>= 3.7.6)
twitter-text (>= 2.1.0)
typed-array (~> 0.1)
watch (~> 0.1)
webmock (~> 1.17)
RUBY VERSION RUBY VERSION
ruby 2.5.5p157 ruby 2.7.0p0
BUNDLED WITH BUNDLED WITH
1.17.2 2.1.2

View File

@ -7,23 +7,24 @@
# find latest version at: http://mikutter.hachune.net/download#download # find latest version at: http://mikutter.hachune.net/download#download
# run these commands: # run these commands:
# #
# wget http://mikutter.hachune.net/bin/mikutter.3.8.7.tar.gz # wget http://mikutter.hachune.net/bin/mikutter.4.0.0.tar.gz
# tar xvf mikutter.3.8.7.tar.gz # mkdir mikutter
# cd mikutter # cd mikutter
# tar xvf ../mikutter.4.0.0.tar.gz
# find . -not -name Gemfile -exec rm {} \; # find . -not -name Gemfile -exec rm {} \;
# find . -type d -exec rmdir -p --ignore-fail-on-non-empty {} \; # find . -type d -exec rmdir -p --ignore-fail-on-non-empty {} \;
# cd .. # cd ..
# mv mikutter/* . # mv mikutter/* .
# rm mikutter.3.8.7.tar.gz # rm mikutter.4.0.0.tar.gz
# rm gemset.nix Gemfile.lock; nix-shell -p bundler bundix --run 'bundle lock && bundix' # rm gemset.nix Gemfile.lock; nix-shell -p bundler bundix --run 'bundle lock && bundix'
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "mikutter"; pname = "mikutter";
version = "3.8.7"; version = "4.0.0";
src = fetchurl { src = fetchurl {
url = "https://mikutter.hachune.net/bin/mikutter.${version}.tar.gz"; url = "https://mikutter.hachune.net/bin/mikutter.${version}.tar.gz";
sha256 = "1griypcd1xgyfd9wc3ls32grpw4ig0xxdiygpdinzr3bigfmd7iv"; sha256 = "0nx14vlp7p69m2vw0s6kbiyymsfq0r2jd4nm0v5c4xb9avkpgc8g";
}; };
env = bundlerEnv { env = bundlerEnv {
@ -36,8 +37,11 @@ stdenv.mkDerivation rec {
buildInputs = [ alsaUtils libnotify which gtk2 ruby atk gobject-introspection ]; buildInputs = [ alsaUtils libnotify which gtk2 ruby atk gobject-introspection ];
nativeBuildInputs = [ wrapGAppsHook ]; nativeBuildInputs = [ wrapGAppsHook ];
postUnpack = '' unpackPhase = ''
rm -rf $sourceRoot/vendor mkdir source
cd source
unpackFile $src
rm -rf vendor
''; '';
installPhase = '' installPhase = ''
@ -73,5 +77,6 @@ stdenv.mkDerivation rec {
homepage = https://mikutter.hachune.net; homepage = https://mikutter.hachune.net;
platforms = ruby.meta.platforms; platforms = ruby.meta.platforms;
license = licenses.mit; license = licenses.mit;
broken = true;
}; };
} }

View File

@ -5,10 +5,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk"; sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
type = "gem"; type = "gem";
}; };
version = "2.5.2"; version = "2.7.0";
}; };
atk = { atk = {
dependencies = ["glib2"]; dependencies = ["glib2"];
@ -16,10 +16,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "17c5ixwyg16lbbjix2prk7fa6lm0vkxvc1z6m6inc6jgkb1x0700"; sha256 = "0a8q9a1f6x4gy55p8cf52a22bnpjgn18ad9n959x0f4gybbhs948";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.4.1";
}; };
cairo = { cairo = {
dependencies = ["native-package-installer" "pkg-config"]; dependencies = ["native-package-installer" "pkg-config"];
@ -38,10 +38,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "12q441a5vnfvbcnli4fpq2svb75vq1wvs2rlgsp6fv38fh6fgsfz"; sha256 = "0gkxdfslcvrwrs48giilji3bgxd5bwijwq33p9h00r10jzfg2028";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.4.1";
}; };
crack = { crack = {
dependencies = ["safe_yaml"]; dependencies = ["safe_yaml"];
@ -59,10 +59,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "156vy4x1d2jgafkjaafzfz7g8ghl4p5zgbl859b8slp4wdxy3v1r"; sha256 = "09p4rkh3dpdm1mhq721m4d6zvxqqp44kg7069s8l7kmaf7nv2nb3";
type = "gem"; type = "gem";
}; };
version = "0.0.2"; version = "1.0.1";
}; };
delayer-deferred = { delayer-deferred = {
dependencies = ["delayer"]; dependencies = ["delayer"];
@ -70,10 +70,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0zvqphyzngj5wghgbb2nd1qj2qvj2plsz9vx8hz24c7bfq55n4xz"; sha256 = "1mbdxn1hskjqf3zlj4waxl71ccvbj6lk81c99769paxw4fajwrgx";
type = "gem"; type = "gem";
}; };
version = "2.0.0"; version = "2.1.1";
}; };
diva = { diva = {
dependencies = ["addressable"]; dependencies = ["addressable"];
@ -81,10 +81,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0rp125gdlq7jqq7x8la52pdpimhx5wr66frcgf6z4jm927rjw84d"; sha256 = "182gws1zihhpl7r3m8jsf29maqg9xdhj46s9lidbldar8clpl23h";
type = "gem"; type = "gem";
}; };
version = "0.3.2"; version = "1.0.1";
}; };
gdk_pixbuf2 = { gdk_pixbuf2 = {
dependencies = ["gio2"]; dependencies = ["gio2"];
@ -92,10 +92,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "071z8a8khs5qb43ri5hbvaijwbx43mick7cjfmhn6javifkzijk7"; sha256 = "0194gzn0kialfh0j7crllvp808r64sg6dh297x69b0av21ar5pam";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.4.1";
}; };
gettext = { gettext = {
dependencies = ["locale" "text"]; dependencies = ["locale" "text"];
@ -114,10 +114,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1f131yd9zzfsjn8i4k8xkl7xm3c5f9sm7irvwxnqqh635qccfz8n"; sha256 = "1l3jpgbdvb55xhcmpkcqgwx5068dfyi8kijfvzhbqh96ng0p1m7g";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.4.1";
}; };
glib2 = { glib2 = {
dependencies = ["native-package-installer" "pkg-config"]; dependencies = ["native-package-installer" "pkg-config"];
@ -125,10 +125,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "13r1i8gkgxj0fjz7bdnqqrsvszl7dffbf85ghx2f8p7zrcbzlk3p"; sha256 = "18clyn0fp0h5alnkf9i2bqd6wvl78h468pdbzs1csqnba8vw4q1c";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.4.1";
}; };
gobject-introspection = { gobject-introspection = {
dependencies = ["glib2"]; dependencies = ["glib2"];
@ -136,10 +136,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "15njcm0yg4qpwkhyx6gf2nxvjl6fxm9jffan8zrl2xyh68yr4jf7"; sha256 = "1a3x8qiisbax3x0izj8l5w66r53ba5ma53ax2jhdbhbvaxx3d02n";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.4.1";
}; };
gtk2 = { gtk2 = {
dependencies = ["atk" "gdk_pixbuf2" "pango"]; dependencies = ["atk" "gdk_pixbuf2" "pango"];
@ -147,20 +147,20 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1a4lj6anmvr82cwrg8swzglz90jss995zr7bvsiwr876qqdwv7qs"; sha256 = "17az8g0n1yzz90kdbjg2hpabi04qccda7v6lin76bs637ivfg2md";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.4.1";
}; };
hashdiff = { hashdiff = {
groups = ["default" "test"]; groups = ["default" "test"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1qji49afni3c90zws617x514xi7ik70g2iwngj9skq68mjcq6y4x"; sha256 = "18jqpbvidrlnq3xf0hkdbs00607jgz35lry6gjw4bcxgh52am2mk";
type = "gem"; type = "gem";
}; };
version = "0.3.9"; version = "1.0.0";
}; };
httpclient = { httpclient = {
groups = ["plugin"]; groups = ["plugin"];
@ -172,16 +172,6 @@
}; };
version = "2.8.3"; version = "2.8.3";
}; };
idn-ruby = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "07vblcyk3g72sbq12xz7xj28snpxnh3sbcnxy8bglqbfqqhvmawr";
type = "gem";
};
version = "0.1.0";
};
instance_storage = { instance_storage = {
groups = ["default"]; groups = ["default"];
platforms = []; platforms = [];
@ -192,25 +182,26 @@
}; };
version = "1.0.0"; version = "1.0.0";
}; };
irb = { io-console = {
groups = ["default" "plugin"]; groups = ["default" "plugin"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "181d88hns00fpw8szg8hbchflwq69wp3y5zvd3dyqjzbq91v1dcr"; sha256 = "0srn91ly4cc5qvyj3r87sc7v8dnm52qj1hczzxmysib6ffparngd";
type = "gem"; type = "gem";
}; };
version = "1.0.0"; version = "0.5.3";
}; };
json_pure = { irb = {
groups = ["default"]; dependencies = ["reline"];
groups = ["default" "plugin"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1vllrpm2hpsy5w1r7000mna2mhd7yfrmd8hi713lk0n9mv27bmam"; sha256 = "1r1y8i46qd5izdszzzn5jxvwvq00m89rk0hm8cs8f21p7nlwmh5w";
type = "gem"; type = "gem";
}; };
version = "1.8.6"; version = "1.2.1";
}; };
locale = { locale = {
groups = ["default" "plugin"]; groups = ["default" "plugin"];
@ -227,20 +218,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0pq8fhqh8w25qcw9v3vzfb0i6jp0k3949ahxc3wrwz2791dpbgbh"; sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
type = "gem"; type = "gem";
}; };
version = "0.16.0"; version = "0.16.2";
};
metaclass = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0hp99y2b1nh0nr8pc398n3f8lakgci6pkrg4bf2b2211j1f6hsc5";
type = "gem";
};
version = "0.0.4";
}; };
mini_portile2 = { mini_portile2 = {
groups = ["default" "plugin"]; groups = ["default" "plugin"];
@ -253,35 +234,34 @@
version = "2.4.0"; version = "2.4.0";
}; };
mocha = { mocha = {
dependencies = ["metaclass"];
groups = ["test"]; groups = ["test"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0id1x7g46fzy8f4jna20ys329ydaj3sad75qs9db2a6nd7f0zc2b"; sha256 = "06i2q5qjr9mvjgjc8w41pdf3qalw340y33wjvzc0rp4a1cbbb7pp";
type = "gem"; type = "gem";
}; };
version = "0.14.0"; version = "1.11.1";
}; };
moneta = { moneta = {
groups = ["plugin"]; groups = ["plugin"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1mbs9w3c13phza8008mwlx8s991fzigml7pncq94i1c2flz9vw95"; sha256 = "0q7fskfdc0h5dhl8aamg3ypybd6cyl4x0prh4803gj7hxr17jfm1";
type = "gem"; type = "gem";
}; };
version = "1.1.1"; version = "1.2.1";
}; };
native-package-installer = { native-package-installer = {
groups = ["default" "plugin"]; groups = ["default" "plugin"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "03qrzhk807f98bdwy6c37acksyb5fnairdz4jpl7y3fifh7k7yfn"; sha256 = "0piclgf6pw7hr10x57x0hn675djyna4sb3xc97yb9vh66wkx1fl0";
type = "gem"; type = "gem";
}; };
version = "1.0.7"; version = "1.0.9";
}; };
nokogiri = { nokogiri = {
dependencies = ["mini_portile2"]; dependencies = ["mini_portile2"];
@ -289,10 +269,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "02bjydih0j515szfv9mls195cvpyidh6ixm7dwbl3s2sbaxxk5s4"; sha256 = "0r0qpgf80h764k176yr63gqbs2z0xbsp8vlvs2a79d5r9vs83kln";
type = "gem"; type = "gem";
}; };
version = "1.10.3"; version = "1.10.7";
}; };
oauth = { oauth = {
groups = ["default"]; groups = ["default"];
@ -310,20 +290,20 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0lbhjsd6y42iw572xcynd6gcapczjki41h932s90rkh6022pbm9p"; sha256 = "1d0cn50qgpifrcv8qx72wi6l9xalw3ryngbfmm9xpg9vx5rl1qbp";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.4.1";
}; };
pkg-config = { pkg-config = {
groups = ["default" "plugin"]; groups = ["default" "plugin"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "1s56ym0chq3fycl29vqabcalqdcf7y2f25pmihjwqgbmrmzdyvr1"; sha256 = "1cxdpr2wlz9b587avlq04a1da5fz1vdw8jvr6lx23mcq7mqh2xcx";
type = "gem"; type = "gem";
}; };
version = "1.3.7"; version = "1.4.0";
}; };
pluggaloid = { pluggaloid = {
dependencies = ["delayer" "instance_storage"]; dependencies = ["delayer" "instance_storage"];
@ -331,60 +311,61 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0fkm6y7aq132icmmv4k8mqw08fxqil8k52l8li642jyi79hvzrqh"; sha256 = "1gv0rjjdic8c41gfr3kyyphvf0fmv5rzcf6qd57zjdfcn6fvi3hh";
type = "gem"; type = "gem";
}; };
version = "1.1.2"; version = "1.2.0";
}; };
power_assert = { power_assert = {
groups = ["default" "test"]; groups = ["default" "test"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "072y5ixw59ad47hkfj6nl2i4zcyad8snfxfsyyrgjkiqnvqwvbvq"; sha256 = "1dii0wkfa0jm8sk9b20zl1z4980dmrjh0zqnii058485pp3ws10s";
type = "gem"; type = "gem";
}; };
version = "1.1.4"; version = "1.1.5";
}; };
public_suffix = { public_suffix = {
groups = ["default" "test"]; groups = ["default" "test"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l"; sha256 = "0xnfv2j2bqgdpg2yq9i2rxby0w2sc9h5iyjkpaas2xknwrgmhdb0";
type = "gem"; type = "gem";
}; };
version = "3.0.3"; version = "4.0.1";
}; };
rake = { rake = {
groups = ["test"]; groups = ["test"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b"; sha256 = "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9";
type = "gem"; type = "gem";
}; };
version = "10.5.0"; version = "13.0.1";
}; };
ruby-hmac = { reline = {
groups = ["default"]; dependencies = ["io-console"];
groups = ["default" "plugin"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "01zym41f8fqbmxfz8zv19627swi62ka3gp33bfbkc87v5k7mw954"; sha256 = "0908ijrngc3wkn5iny7d0kxkp74w6ixk2nwzzngplplfla1vkp8x";
type = "gem"; type = "gem";
}; };
version = "0.4.0"; version = "0.1.2";
}; };
ruby-prof = { ruby-prof = {
groups = ["test"]; groups = ["test"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "02z4lh1iv1d8751a1l6r4hfc9mp61gf80g4qc4l6gbync3j3hf2c"; sha256 = "18ga5f4h1fnwn0xh910kpnw4cg3lq3jqljd3h16bdw9pgc5ff7dn";
type = "gem"; type = "gem";
}; };
version = "0.17.0"; version = "1.1.0";
}; };
safe_yaml = { safe_yaml = {
groups = ["default" "test"]; groups = ["default" "test"];
@ -402,10 +383,10 @@
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "0hf47w70ajvwdchx0psq3dir26hh902x9sz0iwbxqj8z9w1kc6sd"; sha256 = "0mrkpb6wz0cs1740kaca240k4ymmkbvb2v5xaxsy6vynqw8n0g6z";
type = "gem"; type = "gem";
}; };
version = "3.3.2"; version = "3.3.4";
}; };
text = { text = {
groups = ["default" "plugin"]; groups = ["default" "plugin"];
@ -417,27 +398,6 @@
}; };
version = "1.3.1"; version = "1.3.1";
}; };
totoridipjp = {
groups = ["plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "03ci9hbwc6xf4x0lkm6px4jgbmi37n8plsjhbf2ir5vka9f29lck";
type = "gem";
};
version = "0.1.0";
};
twitter-text = {
dependencies = ["idn-ruby" "unf"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ibk4bl9hrq0phlg7zplkilsqgniji6yvid1a7k09rs0ai422jax";
type = "gem";
};
version = "3.0.0";
};
typed-array = { typed-array = {
groups = ["default"]; groups = ["default"];
platforms = []; platforms = [];
@ -448,46 +408,15 @@
}; };
version = "0.1.2"; version = "0.1.2";
}; };
unf = {
dependencies = ["unf_ext"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
type = "gem";
};
version = "0.1.4";
};
unf_ext = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ll6w64ibh81qwvjx19h8nj7mngxgffg7aigjx11klvf5k2g4nxf";
type = "gem";
};
version = "0.0.7.6";
};
watch = {
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "02g4g6ynnldyjjzrh19r584gj4z6ksff7h0ajz5jdwhpp5y7cghx";
type = "gem";
};
version = "0.1.0";
};
webmock = { webmock = {
dependencies = ["addressable" "crack" "hashdiff"]; dependencies = ["addressable" "crack" "hashdiff"];
groups = ["test"]; groups = ["test"];
platforms = []; platforms = [];
source = { source = {
remotes = ["https://rubygems.org"]; remotes = ["https://rubygems.org"];
sha256 = "03vlr6axajz6c7xmlk0w1kvkxc92f8y2zp27wq1z6yk916ry25n5"; sha256 = "19xvs7gdf8r75bmyb17w9g367qxzqnlrmbdda1y36cn1vrlnf2l8";
type = "gem"; type = "gem";
}; };
version = "1.24.6"; version = "3.7.6";
}; };
} }

View File

@ -1,3 +1,4 @@
source 'https://rubygems.org' source 'https://rubygems.org'
gem 'gtk2', '3.3.2' gem 'gtk2', '3.4.1'

View File

@ -2,4 +2,3 @@ source 'https://rubygems.org'
gem 'nokogiri' gem 'nokogiri'
gem 'httpclient' gem 'httpclient'
gem 'totoridipjp'

View File

@ -2,5 +2,5 @@ source 'https://rubygems.org'
group :default do group :default do
gem 'gettext', '>= 3.2.9', '< 3.3' gem 'gettext', '>= 3.2.9', '< 3.3'
gem 'irb', '>= 1.0.0', '< 1.1' gem 'irb', '>= 1.2.0', '< 1.3'
end end

View File

@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
inherit src; inherit src;
nodejs = nodejs-10_x; nodejs = nodejs-10_x;
sha256 = "0qsgr8cq81yismal5sqr02skakqpynwwzk5s98dr5bg91y361fgy"; sha256 = "0slzw4791nl7v6sca9xlhzx16p91m92ln2agbkbdx4zpgasg4gnq";
}; };
patches = [ ./isDev.patch ]; patches = [ ./isDev.patch ];

View File

@ -33,7 +33,7 @@ stdenv.mkDerivation rec {
homepage = http://epicsol.org; homepage = http://epicsol.org;
description = "A IRC client that offers a great ircII interface"; description = "A IRC client that offers a great ircII interface";
license = licenses.bsd3; license = licenses.bsd3;
maintainers = [ maintainers.ndowens ]; maintainers = [];
}; };
} }

View File

@ -5,11 +5,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "gnunet"; pname = "gnunet";
version = "0.11.8"; version = "0.12.0";
src = fetchurl { src = fetchurl {
url = "mirror://gnu/gnunet/${pname}-${version}.tar.gz"; url = "mirror://gnu/gnunet/${pname}-${version}.tar.gz";
sha256 = "1zkmcq75sfr3iyg8rgxp9dbl7fwsvc1a71rc0vgisghcbrx1n7yj"; sha256 = "1bz0sbhbsivi1bcabk3vpxqnh4vgp86vrmiwkyb5fiqfjviar111";
}; };
enableParallelBuilding = true; enableParallelBuilding = true;

View File

@ -10,7 +10,7 @@ assert withQt -> qt5 != null;
with stdenv.lib; with stdenv.lib;
let let
version = "3.0.5"; version = "3.2.0";
variant = if withQt then "qt" else "cli"; variant = if withQt then "qt" else "cli";
in stdenv.mkDerivation { in stdenv.mkDerivation {
@ -20,7 +20,7 @@ in stdenv.mkDerivation {
src = fetchurl { src = fetchurl {
url = "https://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.xz"; url = "https://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.xz";
sha256 = "087qv7nd7zlbckvcs37fkkg7v0mw0hjd5yfbghqym764fpjgqlf5"; sha256 = "0v5nn7i2nbqr59jsw8cs2052hr7xd96x1sa3480g8ks5kahk7zac";
}; };
cmakeFlags = [ cmakeFlags = [

View File

@ -12,11 +12,11 @@
python3Packages.buildPythonApplication rec { python3Packages.buildPythonApplication rec {
pname = "pympress"; pname = "pympress";
version = "1.4.0"; version = "1.5.1";
src = python3Packages.fetchPypi { src = python3Packages.fetchPypi {
inherit pname version; inherit pname version;
sha256 = "101wj6m931bj0ah6niw79i8ywb5zlb2783g7n7dmkhw6ay3jj4vq"; sha256 = "173d9scf2z29qg279jf33zcl7sgc3wp662fgpm943bn9667q18wf";
}; };
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -40,7 +40,7 @@ stdenv.mkDerivation {
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "SAT/PseudoBoolean/MaxSat/ASP solver using glucose"; description = "SAT/PseudoBoolean/MaxSat/ASP solver using glucose";
maintainers = with maintainers; [ gebner ma27 ]; maintainers = with maintainers; [ gebner ];
platforms = platforms.unix; platforms = platforms.unix;
license = licenses.asl20; license = licenses.asl20;
homepage = https://alviano.net/software/maxino/; homepage = https://alviano.net/software/maxino/;

View File

@ -118,6 +118,13 @@ stdenv.mkDerivation rec {
url = "https://git.sagemath.org/sage.git/patch?id=fcc11d6effa39f375bc5f4ea5831fb7a2f2767da"; url = "https://git.sagemath.org/sage.git/patch?id=fcc11d6effa39f375bc5f4ea5831fb7a2f2767da";
sha256 = "0hnmc8ld3bblks0hcjvjjaydkgwdr1cs3dbl2ys4gfq964pjgqwc"; sha256 = "0hnmc8ld3bblks0hcjvjjaydkgwdr1cs3dbl2ys4gfq964pjgqwc";
}) })
# https://trac.sagemath.org/ticket/28911
(fetchpatch {
name = "sympy-1.5.patch";
url = "https://git.sagemath.org/sage.git/patch/?h=c6d0308db15efd611211d26cfcbefbd180fc0831";
sha256 = "0nwai2jr22h49km4hx3kwafs3mzsc5kwsv7mqwjf6ibwfx2bbgyq";
})
]; ];
patches = nixPatches ++ bugfixPatches ++ packageUpgradePatches; patches = nixPatches ++ bugfixPatches ++ packageUpgradePatches;

View File

@ -1,5 +1,6 @@
{ stdenv, fetchurl, cmake, gl2ps, gsl, libX11, libXpm, libXft, libXext { stdenv, fetchurl, makeWrapper, cmake, gl2ps, gsl, libX11, libXpm, libXft
, libGLU, libGL, libxml2, lz4, lzma, pcre, pkgconfig, python, xxHash, zlib , libXext, libGLU, libGL, libxml2, lz4, lzma, pcre, pkgconfig, python, xxHash
, zlib
, Cocoa, OpenGL, noSplash ? false }: , Cocoa, OpenGL, noSplash ? false }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -11,7 +12,7 @@ stdenv.mkDerivation rec {
sha256 = "196ghma6g5a7sqz52wyjkgvmh4hj4vqwppm0zwdypy33hgy8anii"; sha256 = "196ghma6g5a7sqz52wyjkgvmh4hj4vqwppm0zwdypy33hgy8anii";
}; };
nativeBuildInputs = [ cmake pkgconfig ]; nativeBuildInputs = [ makeWrapper cmake pkgconfig ];
buildInputs = [ gl2ps pcre python zlib libxml2 lz4 lzma gsl xxHash ] buildInputs = [ gl2ps pcre python zlib libxml2 lz4 lzma gsl 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 ]
@ -73,6 +74,13 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true; enableParallelBuilding = true;
postInstall = ''
for prog in rootbrowse rootcp rooteventselector rootls rootmkdir rootmv rootprint rootrm rootslimtree; do
wrapProgram "$out/bin/$prog" \
--prefix PYTHONPATH : "$out/lib"
done
'';
setupHook = ./setup-hook.sh; setupHook = ./setup-hook.sh;
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -3,11 +3,11 @@
buildPythonApplication rec { buildPythonApplication rec {
pname = "MAVProxy"; pname = "MAVProxy";
version = "1.8.17"; version = "1.8.18";
src = fetchPypi { src = fetchPypi {
inherit pname version; inherit pname version;
sha256 = "193hjilsmbljbgj7v6icy3b4hzm14l0z6v05v7ycx6larij5xj2r"; sha256 = "1fi4m3591wws5cq43q8aljf91mzs6i9yhn9rimhpfrskbyf9knvm";
}; };
propagatedBuildInputs = [ propagatedBuildInputs = [

View File

@ -18,6 +18,6 @@ rustPlatform.buildRustPackage rec {
description = "A syntax-highlighting pager for git"; description = "A syntax-highlighting pager for git";
changelog = "https://github.com/dandavison/delta/releases/tag/${version}"; changelog = "https://github.com/dandavison/delta/releases/tag/${version}";
license = licenses.mit; license = licenses.mit;
maintainers = [ maintainers.marsam ]; maintainers = with maintainers; [ marsam ma27 ];
}; };
} }

View File

@ -1,6 +1,6 @@
{ stdenv, fetchFromGitHub, git, gnupg }: { stdenv, fetchFromGitHub, git, gnupg }:
let version = "2.0.1"; in let version = "2.3.0"; in
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "yadm"; pname = "yadm";
inherit version; inherit version;
@ -11,7 +11,7 @@ stdenv.mkDerivation {
owner = "TheLocehiliosan"; owner = "TheLocehiliosan";
repo = "yadm"; repo = "yadm";
rev = version; rev = version;
sha256 = "0knz2p0xyid65z6gdmjqfcqljqilxhqi02v4n6n4akl2i12kk193"; sha256 = "1by21dh48qbi33wlyyvdwz7ac1lxrblzcr5v7hlnc4cbcgvgs1a0";
}; };
dontConfigure = true; dontConfigure = true;

View File

@ -34,6 +34,6 @@ stdenv.mkDerivation rec {
homepage = https://flavio.tordini.org/minitube; homepage = https://flavio.tordini.org/minitube;
license = licenses.gpl3Plus; license = licenses.gpl3Plus;
platforms = platforms.linux; platforms = platforms.linux;
maintainers = with maintainers; [ ma27 ]; maintainers = with maintainers; [ ];
}; };
} }

View File

@ -105,13 +105,13 @@ let
in stdenv.mkDerivation rec { in stdenv.mkDerivation rec {
pname = "mpv"; pname = "mpv";
version = "0.30.0"; version = "0.31.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "mpv-player"; owner = "mpv-player";
repo = "mpv"; repo = "mpv";
rev = "v${version}"; rev = "v${version}";
sha256 = "17mxjgcfljlv6h0ik3332xsqbs0ybvk6dkwflyl0cjh15vl1iv6f"; sha256 = "138m09l4wi6ifbi15z76j578plmxkclhlzfryasfcdp8hswhs59r";
}; };
postPatch = '' postPatch = ''
@ -197,7 +197,6 @@ in stdenv.mkDerivation rec {
# Ensure youtube-dl is available in $PATH for mpv # Ensure youtube-dl is available in $PATH for mpv
wrapperFlags = wrapperFlags =
''--prefix PATH : "${luaEnv}/bin" \'' ''--prefix PATH : "${luaEnv}/bin" \''
+ optionalString youtubeSupport '' + optionalString youtubeSupport ''
--prefix PATH : "${youtube-dl}/bin" \ --prefix PATH : "${youtube-dl}/bin" \
@ -235,7 +234,7 @@ in stdenv.mkDerivation rec {
description = "A media player that supports many video formats (MPlayer and mplayer2 fork)"; description = "A media player that supports many video formats (MPlayer and mplayer2 fork)";
homepage = https://mpv.io; homepage = https://mpv.io;
license = licenses.gpl2Plus; license = licenses.gpl2Plus;
maintainers = with maintainers; [ AndersonTorres fpletz globin ivan ]; maintainers = with maintainers; [ AndersonTorres fpletz globin ivan ma27 tadeokondrak ];
platforms = platforms.darwin ++ platforms.linux; platforms = platforms.darwin ++ platforms.linux;
longDescription = '' longDescription = ''

View File

@ -2,11 +2,11 @@
, lirc, shared-mime-info, libjpeg }: , lirc, shared-mime-info, libjpeg }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "xine-ui-0.99.10"; name = "xine-ui-0.99.12";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/xine/${name}.tar.xz"; url = "mirror://sourceforge/xine/${name}.tar.xz";
sha256 = "0i3jzhiipfs5p1jbxviwh42zcfzag6iqc6yycaan0vrqm90an86a"; sha256 = "10zmmss3hm8gjjyra20qhdc0lb1m6sym2nb2w62bmfk8isfw9gsl";
}; };
nativeBuildInputs = [ pkgconfig shared-mime-info ]; nativeBuildInputs = [ pkgconfig shared-mime-info ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchFromGitHub, pkgconfig { stdenv, fetchFromGitHub, pkgconfig, installShellFiles
, buildGoPackage, gpgme, lvm2, btrfs-progs, libseccomp, systemd , buildGoPackage, gpgme, lvm2, btrfs-progs, libseccomp, systemd
, go-md2man , go-md2man
}: }:
@ -18,7 +18,7 @@ buildGoPackage rec {
outputs = [ "bin" "out" "man" ]; outputs = [ "bin" "out" "man" ];
nativeBuildInputs = [ pkgconfig go-md2man ]; nativeBuildInputs = [ pkgconfig go-md2man installShellFiles ];
buildInputs = [ btrfs-progs libseccomp gpgme lvm2 systemd ]; buildInputs = [ btrfs-progs libseccomp gpgme lvm2 systemd ];
@ -30,6 +30,8 @@ buildGoPackage rec {
installPhase = '' installPhase = ''
install -Dm555 bin/podman $bin/bin/podman install -Dm555 bin/podman $bin/bin/podman
installShellCompletion --bash completions/bash/podman
installShellCompletion --zsh completions/zsh/_podman
MANDIR=$man/share/man make install.man MANDIR=$man/share/man make install.man
''; '';

View File

@ -1,12 +1,12 @@
{ stdenv, fetchFromGitHub, makeWrapper, nx-libs, xorg, getopt, gnugrep, gawk, ps, mount, iproute }: { stdenv, fetchFromGitHub, makeWrapper, nx-libs, xorg, getopt, gnugrep, gawk, ps, mount, iproute }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "x11docker"; pname = "x11docker";
version = "6.4.0"; version = "6.5.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "mviereck"; owner = "mviereck";
repo = "x11docker"; repo = "x11docker";
rev = "v${version}"; rev = "v${version}";
sha256 = "0s8gk2kqxkfwx1x44g19ckm7rqgrcax59y8brgmigajqizik7sql"; sha256 = "1lh45cxzpdwvhahlcayzqwq1q5hra25mszs13j0dswklcjvjqw8b";
}; };
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper ];

View File

@ -86,7 +86,7 @@ stdenv.mkDerivation rec {
description = "Highly configurable, dynamic window manager for X"; description = "Highly configurable, dynamic window manager for X";
homepage = https://awesomewm.org/; homepage = https://awesomewm.org/;
license = licenses.gpl2Plus; license = licenses.gpl2Plus;
maintainers = with maintainers; [ lovek323 rasendubi ndowens ]; maintainers = with maintainers; [ lovek323 rasendubi ];
platforms = platforms.linux; platforms = platforms.linux;
}; };
} }

View File

@ -34,6 +34,6 @@ stdenv.mkDerivation rec {
description = "Saving, loading and managing layouts for i3wm."; description = "Saving, loading and managing layouts for i3wm.";
license = licenses.mit; license = licenses.mit;
platforms = platforms.linux; platforms = platforms.linux;
maintainers = with maintainers; [ ma27 ]; maintainers = with maintainers; [ ];
}; };
} }

View File

@ -44,6 +44,6 @@ stdenv.mkDerivation rec {
homepage = https://swaywm.org; homepage = https://swaywm.org;
license = licenses.mit; license = licenses.mit;
platforms = platforms.linux; platforms = platforms.linux;
maintainers = with maintainers; [ primeos synthetica ]; maintainers = with maintainers; [ primeos synthetica ma27 ];
}; };
} }

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "caja"; pname = "caja";
version = "1.22.2"; version = "1.22.3";
src = fetchurl { src = fetchurl {
url = "https://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz"; url = "https://pub.mate-desktop.org/releases/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "1c5yr4b8pzd7nz7g7ln9jwp4fx6qgq8vgbv4spfryy53il3gv75h"; sha256 = "1w2liq9h1kr5zyaaq82xz8pic04qi5sra8kaycfg1iddmknkfqn7";
}; };
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -0,0 +1,81 @@
From 74fb65a2574c93a2b20a51875a5e336f727ff4bc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
Date: Wed, 25 Dec 2019 18:48:38 -0300
Subject: [PATCH] Search system themes in system data dirs
---
capplets/common/gtkrc-utils.c | 20 ++++++++++++--------
capplets/common/mate-theme-info.c | 18 +++++++++++-------
2 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/capplets/common/gtkrc-utils.c b/capplets/common/gtkrc-utils.c
index 011c8a1..27e01da 100644
--- a/capplets/common/gtkrc-utils.c
+++ b/capplets/common/gtkrc-utils.c
@@ -60,15 +60,19 @@ gchar* gtkrc_find_named(const gchar* name)
if (!path)
{
- gchar* theme_dir = gtk_rc_get_theme_dir();
- path = g_build_filename(theme_dir, name, subpath, NULL);
- g_free(theme_dir);
+ const gchar * const * dirs = g_get_system_data_dirs();
- if (!g_file_test(path, G_FILE_TEST_EXISTS))
- {
- g_free (path);
- path = NULL;
- }
+ if (dirs != NULL)
+ for (; !path && *dirs != NULL; ++dirs)
+ {
+ path = g_build_filename(*dirs, "themes", name, subpath, NULL);
+
+ if (!g_file_test(path, G_FILE_TEST_EXISTS))
+ {
+ g_free (path);
+ path = NULL;
+ }
+ }
}
return path;
diff --git a/capplets/common/mate-theme-info.c b/capplets/common/mate-theme-info.c
index 54ae3ae..a738f0b 100644
--- a/capplets/common/mate-theme-info.c
+++ b/capplets/common/mate-theme-info.c
@@ -1763,6 +1763,7 @@ mate_theme_color_scheme_equal (const gchar *s1, const gchar *s2)
void
mate_theme_init ()
{
+ const gchar * const * dirs;
GFile *top_theme_dir;
gchar *top_theme_dir_string;
static gboolean initted = FALSE;
@@ -1783,13 +1784,16 @@ mate_theme_init ()
theme_hash_by_uri = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
theme_hash_by_name = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
- /* Add all the toplevel theme dirs. */
- /* $datadir/themes */
- top_theme_dir_string = gtk_rc_get_theme_dir ();
- top_theme_dir = g_file_new_for_path (top_theme_dir_string);
- g_free (top_theme_dir_string);
- add_top_theme_dir_monitor (top_theme_dir, 1, NULL);
- g_object_unref (top_theme_dir);
+ /* Add all the toplevel theme dirs following the XDG Base Directory Specification */
+ dirs = g_get_system_data_dirs ();
+ if (dirs != NULL)
+ for (; *dirs != NULL; ++dirs) {
+ top_theme_dir_string = g_build_filename (*dirs, "themes", NULL);
+ top_theme_dir = g_file_new_for_path (top_theme_dir_string);
+ g_free (top_theme_dir_string);
+ add_top_theme_dir_monitor (top_theme_dir, 1, NULL);
+ g_object_unref (top_theme_dir);
+ }
/* ~/.themes */
top_theme_dir_string = g_build_filename (g_get_home_dir (), ".themes", NULL);
--
2.24.1

View File

@ -38,6 +38,8 @@ stdenv.mkDerivation rec {
]; ];
patches = [ patches = [
# see https://github.com/mate-desktop/mate-control-center/pull/528
./0001-Search-system-themes-in-system-data-dirs.patch
# look up keyboard shortcuts in system data dirs # look up keyboard shortcuts in system data dirs
./mate-control-center.keybindings-dir.patch ./mate-control-center.keybindings-dir.patch
]; ];

View File

@ -129,5 +129,13 @@ in rec {
gcc = gcc7; gcc = gcc7;
}; };
cudatoolkit_10 = cudatoolkit_10_1; cudatoolkit_10_2 = common {
version = "10.2.89";
url = "http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run";
sha256 = "04fasl9sjkb1jvchvqgaqxprnprcz7a8r52249zp2ijarzyhf3an";
gcc = gcc7;
};
cudatoolkit_10 = cudatoolkit_10_2;
} }

View File

@ -0,0 +1,232 @@
{ stdenv, pkgsBuildTarget, targetPackages
# build-tools
, bootPkgs
, autoconf, automake, coreutils, fetchurl, perl, python3, m4, sphinx
, bash
, libiconv ? null, ncurses
, # GHC can be built with system libffi or a bundled one.
libffi ? null
, useLLVM ? !stdenv.targetPlatform.isx86
, # LLVM is conceptually a run-time-only depedendency, but for
# non-x86, we need LLVM to bootstrap later stages, so it becomes a
# build-time dependency too.
buildLlvmPackages, llvmPackages
, # If enabled, GHC will be built with the GPL-free but slower integer-simple
# library instead of the faster but GPLed integer-gmp library.
enableIntegerSimple ? !(stdenv.lib.any (stdenv.lib.meta.platformMatch stdenv.hostPlatform) gmp.meta.platforms), gmp
, # If enabled, use -fPIC when compiling static libs.
enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
, # Whether to build dynamic libs for the standard library (on the target
# platform). Static libs are always built.
enableShared ? !stdenv.targetPlatform.isWindows && !stdenv.targetPlatform.useiOSPrebuilt
, # Whetherto build terminfo.
enableTerminfo ? !stdenv.targetPlatform.isWindows
, # What flavour to build. An empty string indicates no
# specific flavour and falls back to ghc default values.
ghcFlavour ? stdenv.lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
(if useLLVM then "perf-cross" else "perf-cross-ncg")
, # Whether to disable the large address space allocator
# necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64
}:
assert !enableIntegerSimple -> gmp != null;
let
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
inherit (bootPkgs) ghc;
# TODO(@Ericson2314) Make unconditional
targetPrefix = stdenv.lib.optionalString
(targetPlatform != hostPlatform)
"${targetPlatform.config}-";
buildMK = ''
BuildFlavour = ${ghcFlavour}
ifneq \"\$(BuildFlavour)\" \"\"
include mk/flavours/\$(BuildFlavour).mk
endif
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO
BUILD_SPHINX_PDF = NO
'' + stdenv.lib.optionalString enableRelocatedStaticLibs ''
GhcLibHcOpts += -fPIC
GhcRtsHcOpts += -fPIC
'' + stdenv.lib.optionalString targetPlatform.useAndroidPrebuilt ''
EXTRA_CC_OPTS += -std=gnu99
'';
# Splicer will pull out correct variations
libDeps = platform: stdenv.lib.optional enableTerminfo [ ncurses ]
++ [libffi]
++ stdenv.lib.optional (!enableIntegerSimple) gmp
++ stdenv.lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv;
toolsForTarget = [
pkgsBuildTarget.targetPackages.stdenv.cc
] ++ stdenv.lib.optional useLLVM buildLlvmPackages.llvm;
targetCC = builtins.head toolsForTarget;
in
stdenv.mkDerivation (rec {
version = "8.10.0.20191210";
name = "${targetPrefix}ghc-${version}";
src = fetchurl {
url = "https://downloads.haskell.org/ghc/8.10.1-alpha2/ghc-${version}-src.tar.xz";
sha256 = "1mmv8s9cs41kp7wh1qqnzin5wv32cvs3lmzgda7njz0ssqb0mmvj";
};
enableParallelBuilding = true;
outputs = [ "out" "doc" ];
postPatch = "patchShebangs .";
# GHC is a bit confused on its cross terminology.
preConfigure = ''
for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do
export "''${env#TARGET_}=''${!env}"
done
# GHC is a bit confused on its cross terminology, as these would normally be
# the *host* tools.
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
export RANLIB="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ranlib"
export READELF="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}readelf"
export STRIP="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}strip"
echo -n "${buildMK}" > mk/build.mk
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
'' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
export NIX_LDFLAGS+=" -rpath $out/lib/ghc-${version}"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
export NIX_LDFLAGS+=" -no_dtrace_dof"
'' + stdenv.lib.optionalString targetPlatform.useAndroidPrebuilt ''
sed -i -e '5i ,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "cortex-a8", ""))' llvm-targets
'' + stdenv.lib.optionalString targetPlatform.isMusl ''
echo "patching llvm-targets for musl targets..."
echo "Cloning these existing '*-linux-gnu*' targets:"
grep linux-gnu llvm-targets | sed 's/^/ /'
echo "(go go gadget sed)"
sed -i 's,\(^.*linux-\)gnu\(.*\)$,\0\n\1musl\2,' llvm-targets
echo "llvm-targets now contains these '*-linux-musl*' targets:"
grep linux-musl llvm-targets | sed 's/^/ /'
echo "And now patching to preserve '-musleabi' as done with '-gnueabi'"
# (aclocal.m4 is actual source, but patch configure as well since we don't re-gen)
for x in configure aclocal.m4; do
substituteInPlace $x \
--replace '*-android*|*-gnueabi*)' \
'*-android*|*-gnueabi*|*-musleabi*)'
done
'';
# TODO(@Ericson2314): Always pass "--target" and always prefix.
configurePlatforms = [ "build" "host" ]
++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
# `--with` flags for libraries needed for RTS linker
configureFlags = [
"--datadir=$doc/share/doc/ghc"
"--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
] ++ stdenv.lib.optionals (libffi != null) ["--with-system-libffi" "--with-ffi-includes=${targetPackages.libffi.dev}/include" "--with-ffi-libraries=${targetPackages.libffi.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && !enableIntegerSimple) [
"--with-gmp-includes=${targetPackages.gmp.dev}/include" "--with-gmp-libraries=${targetPackages.gmp.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"
] ++ stdenv.lib.optionals (disableLargeAddressSpace) [
"--disable-large-address-space"
];
# Make sure we never relax`$PATH` and hooks support for compatability.
strictDeps = true;
# Dont add -liconv to LDFLAGS automatically so that GHC will add it itself.
dontAddExtraLibs = true;
nativeBuildInputs = [
perl autoconf automake m4 python3 sphinx
ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour
];
# For building runtime libs
depsBuildTarget = toolsForTarget;
buildInputs = [ perl bash ] ++ (libDeps hostPlatform);
propagatedBuildInputs = [ targetPackages.stdenv.cc ]
++ stdenv.lib.optional useLLVM llvmPackages.llvm;
depsTargetTarget = map stdenv.lib.getDev (libDeps targetPlatform);
depsTargetTargetPropagated = map (stdenv.lib.getOutput "out") (libDeps targetPlatform);
# required, because otherwise all symbols from HSffi.o are stripped, and
# that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!targetPlatform.isDarwin) "--keep-file-symbols";
checkTarget = "test";
hardeningDisable = [ "format" ] ++ stdenv.lib.optional stdenv.targetPlatform.isMusl "pie";
postInstall = ''
# Install the bash completion file.
install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/${targetPrefix}ghc
# Patch scripts to include "readelf" and "cat" in $PATH.
for i in "$out/bin/"*; do
test ! -h $i || continue
egrep --quiet '^#!' <(head -n 1 $i) || continue
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' $i
done
'';
passthru = {
inherit bootPkgs targetPrefix;
inherit llvmPackages;
inherit enableShared;
# Our Cabal compiler name
haskellCompilerName = "ghc-${version}";
};
meta = {
homepage = http://haskell.org/ghc;
description = "The Glasgow Haskell Compiler";
maintainers = with stdenv.lib.maintainers; [ marcweber andres peti ];
inherit (ghc.meta) license platforms;
};
} // stdenv.lib.optionalAttrs targetPlatform.useAndroidPrebuilt {
dontStrip = true;
dontPatchELF = true;
noAuditTmpdir = true;
})

View File

@ -0,0 +1,232 @@
{ stdenv, pkgsBuildTarget, targetPackages
# build-tools
, bootPkgs
, autoconf, automake, coreutils, fetchurl, perl, python3, m4, sphinx
, bash
, libiconv ? null, ncurses
, # GHC can be built with system libffi or a bundled one.
libffi ? null
, useLLVM ? !stdenv.targetPlatform.isx86
, # LLVM is conceptually a run-time-only depedendency, but for
# non-x86, we need LLVM to bootstrap later stages, so it becomes a
# build-time dependency too.
buildLlvmPackages, llvmPackages
, # If enabled, GHC will be built with the GPL-free but slower integer-simple
# library instead of the faster but GPLed integer-gmp library.
enableIntegerSimple ? !(stdenv.lib.any (stdenv.lib.meta.platformMatch stdenv.hostPlatform) gmp.meta.platforms), gmp
, # If enabled, use -fPIC when compiling static libs.
enableRelocatedStaticLibs ? stdenv.targetPlatform != stdenv.hostPlatform
, # Whether to build dynamic libs for the standard library (on the target
# platform). Static libs are always built.
enableShared ? !stdenv.targetPlatform.isWindows && !stdenv.targetPlatform.useiOSPrebuilt
, # Whetherto build terminfo.
enableTerminfo ? !stdenv.targetPlatform.isWindows
, # What flavour to build. An empty string indicates no
# specific flavour and falls back to ghc default values.
ghcFlavour ? stdenv.lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)
(if useLLVM then "perf-cross" else "perf-cross-ncg")
, # Whether to disable the large address space allocator
# necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64
}:
assert !enableIntegerSimple -> gmp != null;
let
inherit (stdenv) buildPlatform hostPlatform targetPlatform;
inherit (bootPkgs) ghc;
# TODO(@Ericson2314) Make unconditional
targetPrefix = stdenv.lib.optionalString
(targetPlatform != hostPlatform)
"${targetPlatform.config}-";
buildMK = ''
BuildFlavour = ${ghcFlavour}
ifneq \"\$(BuildFlavour)\" \"\"
include mk/flavours/\$(BuildFlavour).mk
endif
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"}
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"}
CrossCompilePrefix = ${targetPrefix}
HADDOCK_DOCS = NO
BUILD_SPHINX_HTML = NO
BUILD_SPHINX_PDF = NO
'' + stdenv.lib.optionalString enableRelocatedStaticLibs ''
GhcLibHcOpts += -fPIC
GhcRtsHcOpts += -fPIC
'' + stdenv.lib.optionalString targetPlatform.useAndroidPrebuilt ''
EXTRA_CC_OPTS += -std=gnu99
'';
# Splicer will pull out correct variations
libDeps = platform: stdenv.lib.optional enableTerminfo [ ncurses ]
++ [libffi]
++ stdenv.lib.optional (!enableIntegerSimple) gmp
++ stdenv.lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv;
toolsForTarget = [
pkgsBuildTarget.targetPackages.stdenv.cc
] ++ stdenv.lib.optional useLLVM buildLlvmPackages.llvm;
targetCC = builtins.head toolsForTarget;
in
stdenv.mkDerivation (rec {
version = "8.8.1.20191211";
name = "${targetPrefix}ghc-${version}";
src = fetchurl {
url = "https://downloads.haskell.org/ghc/8.8.2-rc1/ghc-${version}-src.tar.xz";
sha256 = "1gl4fzakjbhd94v1saxmr9sfzgk22m1b95jq51rxm93b2g4cixl4";
};
enableParallelBuilding = true;
outputs = [ "out" "doc" ];
postPatch = "patchShebangs .";
# GHC is a bit confused on its cross terminology.
preConfigure = ''
for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do
export "''${env#TARGET_}=''${!env}"
done
# GHC is a bit confused on its cross terminology, as these would normally be
# the *host* tools.
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
# Use gold to work around https://sourceware.org/bugzilla/show_bug.cgi?id=16177
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld${stdenv.lib.optionalString (targetPlatform.isLinux && !(targetPlatform.useLLVM or false)) ".gold"}"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
export RANLIB="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ranlib"
export READELF="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}readelf"
export STRIP="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}strip"
echo -n "${buildMK}" > mk/build.mk
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
'' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
export NIX_LDFLAGS+=" -rpath $out/lib/ghc-${version}"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
export NIX_LDFLAGS+=" -no_dtrace_dof"
'' + stdenv.lib.optionalString targetPlatform.useAndroidPrebuilt ''
sed -i -e '5i ,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "cortex-a8", ""))' llvm-targets
'' + stdenv.lib.optionalString targetPlatform.isMusl ''
echo "patching llvm-targets for musl targets..."
echo "Cloning these existing '*-linux-gnu*' targets:"
grep linux-gnu llvm-targets | sed 's/^/ /'
echo "(go go gadget sed)"
sed -i 's,\(^.*linux-\)gnu\(.*\)$,\0\n\1musl\2,' llvm-targets
echo "llvm-targets now contains these '*-linux-musl*' targets:"
grep linux-musl llvm-targets | sed 's/^/ /'
echo "And now patching to preserve '-musleabi' as done with '-gnueabi'"
# (aclocal.m4 is actual source, but patch configure as well since we don't re-gen)
for x in configure aclocal.m4; do
substituteInPlace $x \
--replace '*-android*|*-gnueabi*)' \
'*-android*|*-gnueabi*|*-musleabi*)'
done
'';
# TODO(@Ericson2314): Always pass "--target" and always prefix.
configurePlatforms = [ "build" "host" ]
++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
# `--with` flags for libraries needed for RTS linker
configureFlags = [
"--datadir=$doc/share/doc/ghc"
"--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
] ++ stdenv.lib.optionals (libffi != null) ["--with-system-libffi" "--with-ffi-includes=${targetPackages.libffi.dev}/include" "--with-ffi-libraries=${targetPackages.libffi.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && !enableIntegerSimple) [
"--with-gmp-includes=${targetPackages.gmp.dev}/include" "--with-gmp-libraries=${targetPackages.gmp.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isAarch32) [
"CFLAGS=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE1=-fuse-ld=gold"
"CONF_GCC_LINKER_OPTS_STAGE2=-fuse-ld=gold"
] ++ stdenv.lib.optionals (disableLargeAddressSpace) [
"--disable-large-address-space"
];
# Make sure we never relax`$PATH` and hooks support for compatability.
strictDeps = true;
# Dont add -liconv to LDFLAGS automatically so that GHC will add it itself.
dontAddExtraLibs = true;
nativeBuildInputs = [
perl autoconf automake m4 python3 sphinx
ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour
];
# For building runtime libs
depsBuildTarget = toolsForTarget;
buildInputs = [ perl bash ] ++ (libDeps hostPlatform);
propagatedBuildInputs = [ targetPackages.stdenv.cc ]
++ stdenv.lib.optional useLLVM llvmPackages.llvm;
depsTargetTarget = map stdenv.lib.getDev (libDeps targetPlatform);
depsTargetTargetPropagated = map (stdenv.lib.getOutput "out") (libDeps targetPlatform);
# required, because otherwise all symbols from HSffi.o are stripped, and
# that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!targetPlatform.isDarwin) "--keep-file-symbols";
checkTarget = "test";
hardeningDisable = [ "format" ] ++ stdenv.lib.optional stdenv.targetPlatform.isMusl "pie";
postInstall = ''
# Install the bash completion file.
install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/${targetPrefix}ghc
# Patch scripts to include "readelf" and "cat" in $PATH.
for i in "$out/bin/"*; do
test ! -h $i || continue
egrep --quiet '^#!' <(head -n 1 $i) || continue
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' $i
done
'';
passthru = {
inherit bootPkgs targetPrefix;
inherit llvmPackages;
inherit enableShared;
# Our Cabal compiler name
haskellCompilerName = "ghc-${version}";
};
meta = {
homepage = http://haskell.org/ghc;
description = "The Glasgow Haskell Compiler";
maintainers = with stdenv.lib.maintainers; [ marcweber andres peti ];
inherit (ghc.meta) license platforms;
};
} // stdenv.lib.optionalAttrs targetPlatform.useAndroidPrebuilt {
dontStrip = true;
dontPatchELF = true;
noAuditTmpdir = true;
})

View File

@ -74,7 +74,7 @@ self: super: {
name = "git-annex-${super.git-annex.version}-src"; name = "git-annex-${super.git-annex.version}-src";
url = "git://git-annex.branchable.com/"; url = "git://git-annex.branchable.com/";
rev = "refs/tags/" + super.git-annex.version; rev = "refs/tags/" + super.git-annex.version;
sha256 = "04l1yrjq7n4nlzkmkg73xp6p7vpw1iq53mrmyb8162wqb7zapg4f"; sha256 = "1i4arhwbc05iz8hl7kk843m2f49i3ysby1kxcm9qfhpk7z9nyzj4";
}; };
}).override { }).override {
dbus = if pkgs.stdenv.isLinux then self.dbus else null; dbus = if pkgs.stdenv.isLinux then self.dbus else null;
@ -643,7 +643,7 @@ self: super: {
# ideal, but Chris doesn't seem to make official releases any more. # ideal, but Chris doesn't seem to make official releases any more.
structured-haskell-mode = overrideCabal super.structured-haskell-mode (drv: { structured-haskell-mode = overrideCabal super.structured-haskell-mode (drv: {
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {
owner = "chrisdone"; owner = "projectional-haskell";
repo = "structured-haskell-mode"; repo = "structured-haskell-mode";
rev = "7f9df73f45d107017c18ce4835bbc190dfe6782e"; rev = "7f9df73f45d107017c18ce4835bbc190dfe6782e";
sha256 = "1jcc30048j369jgsbbmkb63whs4wb37bq21jrm3r6ry22izndsqa"; sha256 = "1jcc30048j369jgsbbmkb63whs4wb37bq21jrm3r6ry22izndsqa";
@ -659,15 +659,6 @@ self: super: {
ln -s $lispdir $data/share/emacs/site-lisp ln -s $lispdir $data/share/emacs/site-lisp
''; '';
}); });
descriptive = overrideSrc super.descriptive {
version = "20180514-git";
src = pkgs.fetchFromGitHub {
owner = "chrisdone";
repo = "descriptive";
rev = "c088960113b2add758553e41cbe439d183b750cd";
sha256 = "17p65ihcvm1ghq23ww6phh8gdj7hwxlypjvh9jabsxvfbp2s8mrk";
};
};
# Make elisp files available at a location where people expect it. # Make elisp files available at a location where people expect it.
hindent = (overrideCabal super.hindent (drv: { hindent = (overrideCabal super.hindent (drv: {
@ -1057,7 +1048,30 @@ self: super: {
generateOptparseApplicativeCompletion "dhall" ( generateOptparseApplicativeCompletion "dhall" (
dontCheck super.dhall dontCheck super.dhall
); );
dhall_1_28_0 = dontCheck super.dhall_1_28_0; # https://github.com/dhall-lang/dhall-haskell/commit/dedd5e0ea6fd12f87d887af3d2220eebc61ee8af
# This raises the lower bound on prettyprinter to 1.5.1 since
# `removeTrailingWhitespace` is buggy in earlier versions.
# This will probably be able to be removed when we update to LTS-15.
dhall_1_28_0 =
dontCheck (super.dhall_1_28_0.override {
prettyprinter = self.prettyprinter_1_5_1;
prettyprinter-ansi-terminal =
self.prettyprinter-ansi-terminal.override {
prettyprinter = self.prettyprinter_1_5_1;
};
});
dhall-bash_1_0_25 = super.dhall-bash_1_0_25.override { dhall = self.dhall_1_28_0; };
dhall-json_1_6_0 = super.dhall-json_1_6_0.override {
dhall = self.dhall_1_28_0;
prettyprinter = self.prettyprinter_1_5_1;
prettyprinter-ansi-terminal =
self.prettyprinter-ansi-terminal.override {
prettyprinter = self.prettyprinter_1_5_1;
};
};
# Tests for dhall access the network.
dhall_1_27_0 = dontCheck super.dhall_1_27_0;
# Missing test files in source distribution, fixed once 1.4.0 is bumped # Missing test files in source distribution, fixed once 1.4.0 is bumped
# https://github.com/dhall-lang/dhall-haskell/pull/997 # https://github.com/dhall-lang/dhall-haskell/pull/997
@ -1322,9 +1336,29 @@ self: super: {
# needs newer version of the systemd package # needs newer version of the systemd package
spacecookie = super.spacecookie.override { systemd = self.systemd_2_2_0; }; spacecookie = super.spacecookie.override { systemd = self.systemd_2_2_0; };
# ghcide needs the latest versions of haskell-lsp. # 2019-12-19 - glirc wants regex-tdfa >=1.3 which results in errors with regex-base which errors more
ghcide = super.ghcide.override { haskell-lsp = self.haskell-lsp_0_18_0_0; lsp-test = self.lsp-test_0_8_2_0; }; # hoping to make a proper derivation with plugins enabled and more reliable building -- kiwi
haskell-lsp_0_18_0_0 = super.haskell-lsp_0_18_0_0.override { haskell-lsp-types = self.haskell-lsp-types_0_18_0_0; }; glirc = doJailbreak super.glirc;
lsp-test_0_8_2_0 = (dontCheck super.lsp-test_0_8_2_0).override { haskell-lsp = self.haskell-lsp_0_18_0_0; };
# apply patches from https://github.com/snapframework/snap-server/pull/126
# manually until they are accepted upstream
snap-server = overrideCabal super.snap-server (drv: {
patches = [(pkgs.fetchpatch {
# allow compilation with network >= 3
url = https://github.com/snapframework/snap-server/pull/126/commits/4338fe15d68e11e3c7fd0f9862f818864adc1d45.patch;
sha256 = "1nlw9lckm3flzkmhkzwc7zxhdh9ns33w8p8ds8nf574nqr5cr8bv";
})
(pkgs.fetchpatch {
# prefer fdSocket over unsafeFdSocket
url = https://github.com/snapframework/snap-server/pull/126/commits/410de2df123b1d56b3093720e9c6a1ad79fe9de6.patch;
sha256 = "08psvw0xny64q4bw1nwg01pkzh01ak542lw6k1ps7cdcwaxk0n94";
})];
});
# https://github.com/haskell-servant/servant-blaze/issues/17
servant-blaze = doJailbreak super.servant-blaze;
# https://github.com/haskell-servant/servant-ekg/issues/15
servant-ekg = doJailbreak super.servant-ekg;
} // import ./configuration-tensorflow.nix {inherit pkgs haskellLib;} self super } // import ./configuration-tensorflow.nix {inherit pkgs haskellLib;} self super

View File

@ -0,0 +1,44 @@
{ pkgs, haskellLib }:
with haskellLib;
self: super: {
# This compiler version needs llvm 9.x.
llvmPackages = pkgs.llvmPackages_9;
# Disable GHC 8.10.x core libraries.
array = null;
base = null;
binary = null;
bytestring = null;
Cabal = null;
containers = null;
deepseq = null;
directory = null;
filepath = null;
ghc-boot = null;
ghc-boot-th = null;
ghc-compact = null;
ghc-heap = null;
ghc-prim = null;
ghci = null;
haskeline = null;
hpc = null;
integer-gmp = null;
libiserv = null;
mtl = null;
parsec = null;
pretty = null;
process = null;
rts = null;
stm = null;
template-haskell = null;
terminfo = null;
text = null;
time = null;
transformers = null;
unix = null;
xhtml = null;
}

View File

@ -91,7 +91,7 @@ self: super: {
microlens-th = self.microlens-th_0_4_3_2; microlens-th = self.microlens-th_0_4_3_2;
network = self.network_3_1_1_1; network = self.network_3_1_1_1;
optparse-applicative = self.optparse-applicative_0_15_1_0; optparse-applicative = self.optparse-applicative_0_15_1_0;
pandoc = self.pandoc_2_9; pandoc = self.pandoc_2_9_1;
pandoc-types = self.pandoc-types_1_20; pandoc-types = self.pandoc-types_1_20;
prettyprinter = self.prettyprinter_1_5_1; prettyprinter = self.prettyprinter_1_5_1;
primitive = dontCheck super.primitive_0_7_0_0; # evaluating the test suite gives an infinite recursion primitive = dontCheck super.primitive_0_7_0_0; # evaluating the test suite gives an infinite recursion

View File

@ -43,7 +43,7 @@ core-packages:
- ghcjs-base-0 - ghcjs-base-0
default-package-overrides: default-package-overrides:
# LTS Haskell 14.17 # LTS Haskell 14.18
- abstract-deque ==0.3 - abstract-deque ==0.3
- abstract-deque-tests ==0.3 - abstract-deque-tests ==0.3
- abstract-par ==0.3.3 - abstract-par ==0.3.3
@ -73,7 +73,7 @@ default-package-overrides:
- alarmclock ==0.7.0.2 - alarmclock ==0.7.0.2
- alerts ==0.1.2.0 - alerts ==0.1.2.0
- alex ==3.2.5 - alex ==3.2.5
- alg ==0.2.12.0 - alg ==0.2.13.0
- algebraic-graphs ==0.4 - algebraic-graphs ==0.4
- Allure ==0.9.5.0 - Allure ==0.9.5.0
- almost-fix ==0.0.2 - almost-fix ==0.0.2
@ -202,7 +202,7 @@ default-package-overrides:
- bitcoin-types ==0.9.2 - bitcoin-types ==0.9.2
- bits ==0.5.2 - bits ==0.5.2
- bitset-word8 ==0.1.1.1 - bitset-word8 ==0.1.1.1
- bits-extra ==0.0.1.4 - bits-extra ==0.0.1.5
- bitvec ==1.0.2.0 - bitvec ==1.0.2.0
- bitx-bitcoin ==0.12.0.0 - bitx-bitcoin ==0.12.0.0
- blake2 ==0.3.0 - blake2 ==0.3.0
@ -235,7 +235,7 @@ default-package-overrides:
- bower-json ==1.0.0.1 - bower-json ==1.0.0.1
- boxes ==0.1.5 - boxes ==0.1.5
- brick ==0.47.1 - brick ==0.47.1
- brittany ==0.12.1.0 - brittany ==0.12.1.1
- bsb-http-chunked ==0.0.0.4 - bsb-http-chunked ==0.0.0.4
- bson ==0.3.2.8 - bson ==0.3.2.8
- bson-lens ==0.1.1 - bson-lens ==0.1.1
@ -266,8 +266,8 @@ default-package-overrides:
- cabal2spec ==2.2.2.1 - cabal2spec ==2.2.2.1
- cabal-doctest ==1.0.8 - cabal-doctest ==1.0.8
- cabal-file-th ==0.2.6 - cabal-file-th ==0.2.6
- cabal-rpm ==1.0.1 - cabal-rpm ==1.0.2
- cache ==0.1.2.0 - cache ==0.1.3.0
- cacophony ==0.10.1 - cacophony ==0.10.1
- calendar-recycling ==0.0.0.1 - calendar-recycling ==0.0.0.1
- call-stack ==0.1.0 - call-stack ==0.1.0
@ -371,7 +371,7 @@ default-package-overrides:
- concurrent-split ==0.0.1.1 - concurrent-split ==0.0.1.1
- concurrent-supply ==0.1.8 - concurrent-supply ==0.1.8
- cond ==0.4.1.1 - cond ==0.4.1.1
- conduit ==1.3.1.1 - conduit ==1.3.1.2
- conduit-algorithms ==0.0.11.0 - conduit-algorithms ==0.0.11.0
- conduit-combinators ==1.3.0 - conduit-combinators ==1.3.0
- conduit-concurrent-map ==0.1.1 - conduit-concurrent-map ==0.1.1
@ -523,9 +523,9 @@ default-package-overrides:
- diagrams-core ==1.4.2 - diagrams-core ==1.4.2
- diagrams-lib ==1.4.3 - diagrams-lib ==1.4.3
- diagrams-postscript ==1.4.1 - diagrams-postscript ==1.4.1
- diagrams-rasterific ==1.4.1.1 - diagrams-rasterific ==1.4.2
- diagrams-solve ==0.1.1 - diagrams-solve ==0.1.1
- diagrams-svg ==1.4.2 - diagrams-svg ==1.4.3
- di-core ==1.0.4 - di-core ==1.0.4
- dictionary-sharing ==0.1.0.0 - dictionary-sharing ==0.1.0.0
- Diff ==0.3.4 - Diff ==0.3.4
@ -595,7 +595,6 @@ default-package-overrides:
- elm-bridge ==0.5.2 - elm-bridge ==0.5.2
- elm-core-sources ==1.0.0 - elm-core-sources ==1.0.0
- elm-export ==0.6.0.1 - elm-export ==0.6.0.1
- elm-street ==0.0.1
- emacs-module ==0.1.1 - emacs-module ==0.1.1
- email-validate ==2.3.2.12 - email-validate ==2.3.2.12
- emd ==0.1.5.1 - emd ==0.1.5.1
@ -662,7 +661,7 @@ default-package-overrides:
- fgl ==5.7.0.1 - fgl ==5.7.0.1
- fib ==0.1 - fib ==0.1
- filecache ==0.4.1 - filecache ==0.4.1
- file-embed ==0.0.11 - file-embed ==0.0.11.1
- file-embed-lzma ==0 - file-embed-lzma ==0
- filelock ==0.1.1.4 - filelock ==0.1.1.4
- filemanip ==0.3.6.3 - filemanip ==0.3.6.3
@ -670,8 +669,8 @@ default-package-overrides:
- filepattern ==0.1.1 - filepattern ==0.1.1
- fileplow ==0.1.0.0 - fileplow ==0.1.0.0
- filter-logger ==0.6.0.0 - filter-logger ==0.6.0.0
- filtrable ==0.1.2.0 - filtrable ==0.1.3.0
- fin ==0.1 - fin ==0.1.1
- FindBin ==0.0.5 - FindBin ==0.0.5
- fingertree ==0.1.4.2 - fingertree ==0.1.4.2
- finite-typelits ==0.1.4.2 - finite-typelits ==0.1.4.2
@ -718,7 +717,7 @@ default-package-overrides:
- free-vl ==0.1.4 - free-vl ==0.1.4
- friendly-time ==0.4.1 - friendly-time ==0.4.1
- frisby ==0.2.2 - frisby ==0.2.2
- from-sum ==0.2.1.0 - from-sum ==0.2.2.0
- frontmatter ==0.1.0.2 - frontmatter ==0.1.0.2
- fsnotify ==0.3.0.1 - fsnotify ==0.3.0.1
- fsnotify-conduit ==0.1.1.1 - fsnotify-conduit ==0.1.1.1
@ -854,7 +853,7 @@ default-package-overrides:
- HandsomeSoup ==0.4.2 - HandsomeSoup ==0.4.2
- hapistrano ==0.3.10.0 - hapistrano ==0.3.10.0
- happy ==1.19.12 - happy ==1.19.12
- hasbolt ==0.1.3.6 - hasbolt ==0.1.4.0
- hashable ==1.2.7.0 - hashable ==1.2.7.0
- hashable-time ==0.2.0.2 - hashable-time ==0.2.0.2
- hashids ==1.0.2.4 - hashids ==1.0.2.4
@ -895,7 +894,7 @@ default-package-overrides:
- hedgehog ==1.0.1 - hedgehog ==1.0.1
- hedgehog-corpus ==0.1.0 - hedgehog-corpus ==0.1.0
- hedgehog-fn ==1.0 - hedgehog-fn ==1.0
- hedis ==0.12.10 - hedis ==0.12.11
- hedn ==0.2.0.1 - hedn ==0.2.0.1
- here ==1.2.13 - here ==1.2.13
- heredoc ==0.2.0.0 - heredoc ==0.2.0.0
@ -1005,7 +1004,7 @@ default-package-overrides:
- html-entities ==1.1.4.3 - html-entities ==1.1.4.3
- html-entity-map ==0.1.0.0 - html-entity-map ==0.1.0.0
- htoml ==1.0.0.3 - htoml ==1.0.0.3
- http2 ==1.6.5 - http2 ==2.0.3
- HTTP ==4000.3.14 - HTTP ==4000.3.14
- http-api-data ==0.4.1.1 - http-api-data ==0.4.1.1
- http-client ==0.6.4 - http-client ==0.6.4
@ -1376,7 +1375,8 @@ default-package-overrides:
- mono-traversable ==1.0.13.0 - mono-traversable ==1.0.13.0
- mono-traversable-instances ==0.1.0.0 - mono-traversable-instances ==0.1.0.0
- mono-traversable-keys ==0.1.0 - mono-traversable-keys ==0.1.0
- more-containers ==0.2.1.2 - more-containers ==0.2.2.0
- morpheus-graphql ==0.8.0
- mountpoints ==1.0.2 - mountpoints ==1.0.2
- mpi-hs ==0.5.3.0 - mpi-hs ==0.5.3.0
- msgpack ==1.0.1.0 - msgpack ==1.0.1.0
@ -1387,12 +1387,12 @@ default-package-overrides:
- multiarg ==0.30.0.10 - multiarg ==0.30.0.10
- multimap ==1.2.1 - multimap ==1.2.1
- multipart ==0.1.3 - multipart ==0.1.3
- multiset ==0.3.4.1 - multiset ==0.3.4.3
- multistate ==0.8.0.2 - multistate ==0.8.0.2
- murmur3 ==1.0.3 - murmur3 ==1.0.3
- murmur-hash ==0.1.0.9 - murmur-hash ==0.1.0.9
- MusicBrainz ==0.4.1 - MusicBrainz ==0.4.1
- mustache ==2.3.0 - mustache ==2.3.1
- mutable-containers ==0.3.4 - mutable-containers ==0.3.4
- mwc-probability ==2.1.0 - mwc-probability ==2.1.0
- mwc-probability-transition ==0.4 - mwc-probability-transition ==0.4
@ -1558,7 +1558,7 @@ default-package-overrides:
- persistable-record ==0.6.0.4 - persistable-record ==0.6.0.4
- persistable-types-HDBC-pg ==0.0.3.5 - persistable-types-HDBC-pg ==0.0.3.5
- persistent ==2.9.2 - persistent ==2.9.2
- persistent-iproute ==0.2.3 - persistent-iproute ==0.2.4
- persistent-mysql ==2.9.0 - persistent-mysql ==2.9.0
- persistent-mysql-haskell ==0.5.2 - persistent-mysql-haskell ==0.5.2
- persistent-pagination ==0.1.1.0 - persistent-pagination ==0.1.1.0
@ -1681,10 +1681,11 @@ default-package-overrides:
- pure-zlib ==0.6.6 - pure-zlib ==0.6.6
- pushbullet-types ==0.4.1.0 - pushbullet-types ==0.4.1.0
- pusher-http-haskell ==1.5.1.11 - pusher-http-haskell ==1.5.1.11
- PyF ==0.8.1.2
- qchas ==1.1.0.1 - qchas ==1.1.0.1
- qm-interpolated-string ==0.3.0.0 - qm-interpolated-string ==0.3.0.0
- qnap-decrypt ==0.3.5 - qnap-decrypt ==0.3.5
- qrcode-core ==0.9.1 - qrcode-core ==0.9.2
- qrcode-juicypixels ==0.8.0 - qrcode-juicypixels ==0.8.0
- quadratic-irrational ==0.1.0 - quadratic-irrational ==0.1.0
- QuasiText ==0.1.2.6 - QuasiText ==0.1.2.6
@ -1858,7 +1859,6 @@ default-package-overrides:
- serialise ==0.2.1.0 - serialise ==0.2.1.0
- servant ==0.16.2 - servant ==0.16.2
- servant-auth ==0.3.2.0 - servant-auth ==0.3.2.0
- servant-auth-client ==0.4.0.0
- servant-auth-docs ==0.2.10.0 - servant-auth-docs ==0.2.10.0
- servant-auth-server ==0.4.4.0 - servant-auth-server ==0.4.4.0
- servant-auth-swagger ==0.2.10.0 - servant-auth-swagger ==0.2.10.0
@ -1923,7 +1923,7 @@ default-package-overrides:
- silently ==1.2.5.1 - silently ==1.2.5.1
- simple ==0.11.3 - simple ==0.11.3
- simple-cabal ==0.1.1 - simple-cabal ==0.1.1
- simple-cmd ==0.2.0.1 - simple-cmd ==0.2.1
- simple-cmd-args ==0.1.4 - simple-cmd-args ==0.1.4
- simple-log ==0.9.12 - simple-log ==0.9.12
- simple-reflect ==0.3.3 - simple-reflect ==0.3.3
@ -1986,7 +1986,7 @@ default-package-overrides:
- StateVar ==1.2 - StateVar ==1.2
- static-text ==0.2.0.4 - static-text ==0.2.0.4
- statistics ==0.15.1.1 - statistics ==0.15.1.1
- stb-image-redux ==0.2.1.2 - stb-image-redux ==0.2.1.3
- step-function ==0.2 - step-function ==0.2
- stm-chans ==3.0.0.4 - stm-chans ==3.0.0.4
- stm-conduit ==4.0.1 - stm-conduit ==4.0.1
@ -2148,6 +2148,7 @@ default-package-overrides:
- th-test-utils ==1.0.1 - th-test-utils ==1.0.1
- th-utilities ==0.2.3.1 - th-utilities ==0.2.3.1
- thyme ==0.3.5.5 - thyme ==0.3.5.5
- tidal ==1.4.5
- tile ==0.3.0.0 - tile ==0.3.0.0
- time-compat ==1.9.2.2 - time-compat ==1.9.2.2
- timeit ==2.0 - timeit ==2.0
@ -2278,7 +2279,7 @@ default-package-overrides:
- users-test ==0.5.0.1 - users-test ==0.5.0.1
- utf8-light ==0.4.2 - utf8-light ==0.4.2
- utf8-string ==1.0.1.1 - utf8-string ==1.0.1.1
- util ==0.1.14.1 - util ==0.1.15.0
- utility-ht ==0.0.14 - utility-ht ==0.0.14
- uuid ==1.3.13 - uuid ==1.3.13
- uuid-types ==1.0.3 - uuid-types ==1.0.3
@ -2341,8 +2342,8 @@ default-package-overrides:
- wai-slack-middleware ==0.2.0 - wai-slack-middleware ==0.2.0
- wai-transformers ==0.1.0 - wai-transformers ==0.1.0
- wai-websockets ==3.0.1.2 - wai-websockets ==3.0.1.2
- warp ==3.2.28 - warp ==3.3.5
- warp-tls ==3.2.8 - warp-tls ==3.2.9
- warp-tls-uid ==0.2.0.6 - warp-tls-uid ==0.2.0.6
- wave ==0.2.0 - wave ==0.2.0
- wcwidth ==0.0.2 - wcwidth ==0.0.2
@ -2367,7 +2368,6 @@ default-package-overrides:
- windns ==0.1.0.1 - windns ==0.1.0.1
- winery ==1.1.3 - winery ==1.1.3
- wire-streams ==0.1.1.0 - wire-streams ==0.1.1.0
- witherable ==0.3.4
- with-location ==0.1.0 - with-location ==0.1.0
- witness ==0.4 - witness ==0.4
- wizards ==1.0.3 - wizards ==1.0.3
@ -2489,6 +2489,7 @@ extra-packages:
- control-monad-free < 0.6 # newer versions don't compile with anything but GHC 7.8.x - control-monad-free < 0.6 # newer versions don't compile with anything but GHC 7.8.x
- dbus <1 # for xmonad-0.26 - dbus <1 # for xmonad-0.26
- deepseq == 1.3.0.1 # required to build Cabal with GHC 6.12.3 - deepseq == 1.3.0.1 # required to build Cabal with GHC 6.12.3
- dhall == 1.27.0 # required for spago 0.13.0. Probably can be removed when next version of spago is available.
- generic-deriving == 1.10.5.* # new versions don't compile with GHC 7.10.x - generic-deriving == 1.10.5.* # new versions don't compile with GHC 7.10.x
- gloss < 1.9.3 # new versions don't compile with GHC 7.8.x - gloss < 1.9.3 # new versions don't compile with GHC 7.8.x
- haddock == 2.22.* # required on GHC 8.0.x - haddock == 2.22.* # required on GHC 8.0.x
@ -2575,6 +2576,8 @@ package-maintainers:
- elm-export-persistent - elm-export-persistent
- pipes-mongodb - pipes-mongodb
- streaming-wai - streaming-wai
kiwi:
- glirc
psibi: psibi:
- path-pieces - path-pieces
- persistent - persistent
@ -5080,7 +5083,6 @@ broken-packages:
- gli - gli
- glicko - glicko
- glider-nlp - glider-nlp
- glirc
- GLMatrix - GLMatrix
- glob-posix - glob-posix
- global - global
@ -6438,6 +6440,7 @@ broken-packages:
- ip2proxy - ip2proxy
- ipatch - ipatch
- ipc - ipc
- ipfs
- ipld-cid - ipld-cid
- ipopt-hs - ipopt-hs
- ipprint - ipprint
@ -6530,6 +6533,7 @@ broken-packages:
- jmonkey - jmonkey
- jni - jni
- jobqueue - jobqueue
- jobs-ui
- join - join
- join-api - join-api
- joinlist - joinlist
@ -7247,6 +7251,8 @@ broken-packages:
- mmsyn2 - mmsyn2
- mmsyn4 - mmsyn4
- mmsyn6ukr - mmsyn6ukr
- mmsyn7h
- mmsyn7ukr
- mmtf - mmtf
- mmtl - mmtl
- mmtl-base - mmtl-base
@ -8063,7 +8069,6 @@ broken-packages:
- postgresql-simple-queue - postgresql-simple-queue
- postgresql-simple-sop - postgresql-simple-sop
- postgresql-simple-typed - postgresql-simple-typed
- postgresql-simple-url
- postgresql-typed - postgresql-typed
- postgresql-typed-lifted - postgresql-typed-lifted
- postgrest - postgrest
@ -9199,7 +9204,6 @@ broken-packages:
- stack-run-auto - stack-run-auto
- stack-type - stack-type
- stack-wrapper - stack-wrapper
- stack2cabal
- stack2nix - stack2nix
- stackage - stackage
- stackage-build-plan - stackage-build-plan

View File

@ -592,12 +592,19 @@ self: super: builtins.intersectAttrs super {
''; '';
}); });
# On Darwin, git-annex mis-detects options to `cp`, so we wrap the binary to
# ensure it uses Nixpkgs' coreutils.
git-annex = with pkgs; git-annex = with pkgs;
if (!stdenv.isLinux) then if (!stdenv.isLinux) then
let path = stdenv.lib.makeBinPath [ coreutils ]; let path = stdenv.lib.makeBinPath [ coreutils ];
in overrideCabal (addBuildTool super.git-annex makeWrapper) (_drv: { in overrideCabal (addBuildTool super.git-annex makeWrapper) (_drv: {
# This is an instance of https://github.com/NixOS/nix/pull/1085
# Fails with:
# gpg: can't connect to the agent: File name too long
postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
substituteInPlace Test.hs \
--replace ', testCase "crypto" test_crypto' ""
'';
# On Darwin, git-annex mis-detects options to `cp`, so we wrap the
# binary to ensure it uses Nixpkgs' coreutils.
postFixup = '' postFixup = ''
wrapProgram $out/bin/git-annex \ wrapProgram $out/bin/git-annex \
--prefix PATH : "${path}" --prefix PATH : "${path}"
@ -644,8 +651,8 @@ self: super: builtins.intersectAttrs super {
# we can safely jailbreak spago and use the older directory package from # we can safely jailbreak spago and use the older directory package from
# LTS-14. # LTS-14.
spagoWithOverrides = doJailbreak (super.spago.override { spagoWithOverrides = doJailbreak (super.spago.override {
# spago requires the latest version of dhall. # spago requires dhall_1_27_0.
directory = self.dhall_1_28_0; dhall = self.dhall_1_27_0;
}); });
docsSearchAppJsFile = pkgs.fetchurl { docsSearchAppJsFile = pkgs.fetchurl {
@ -683,13 +690,9 @@ self: super: builtins.intersectAttrs super {
''; '';
}); });
# Haddock generation is broken for spago.
# https://github.com/spacchetti/spago/issues/511
spagoWithoutHaddocks = dontHaddock spagoFixHpack;
# Because of the problem above with pulling in hspec defaults to the # Because of the problem above with pulling in hspec defaults to the
# package.yaml file, the tests are disabled. # package.yaml file, the tests are disabled.
spagoWithoutChecks = dontCheck spagoWithoutHaddocks; spagoWithoutChecks = dontCheck spagoFixHpack;
in in
spagoWithoutChecks; spagoWithoutChecks;
} }

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