Merge branch 'master' into add-missing-licenses

Conflicts:
	pkgs/development/libraries/exiv2/default.nix
        Set license to gpl2Plus
This commit is contained in:
Pascal Wittmann 2018-08-06 12:04:52 +02:00
commit f7be21f4c9
No known key found for this signature in database
GPG Key ID: C899ACE7E2322852
249 changed files with 8809 additions and 5372 deletions

View File

@ -8,7 +8,7 @@ build daemon as so-called channels. To get channel information via git, add
[nixpkgs-channels](https://github.com/NixOS/nixpkgs-channels.git) as a remote:
```
% git remote add channels git://github.com/NixOS/nixpkgs-channels.git
% git remote add channels https://github.com/NixOS/nixpkgs-channels.git
```
For stability and maximum binary package support, it is recommended to maintain

View File

@ -9,7 +9,7 @@
<para>
Checkout the Nixpkgs source tree:
<screen>
$ git clone git://github.com/NixOS/nixpkgs.git
$ git clone https://github.com/NixOS/nixpkgs
$ cd nixpkgs</screen>
</para>
</listitem>

View File

@ -103,8 +103,9 @@
<itemizedlist>
<listitem>
<para>
mention-bot usually notifies GitHub users based on the submitted changes,
but it can happen that it misses some of the package maintainers.
<link xlink:href="https://help.github.com/articles/about-codeowners/">CODEOWNERS</link>
will make GitHub notify users based on the submitted changes, but it can
happen that it misses some of the package maintainers.
</para>
</listitem>
</itemizedlist>
@ -376,8 +377,9 @@ $ nix-shell -p nox --run "nox-review -k pr PRNUMBER"
<itemizedlist>
<listitem>
<para>
Mention-bot notify GitHub users based on the submitted changes, but it
can happen that it miss some of the package maintainers.
<link xlink:href="https://help.github.com/articles/about-codeowners/">CODEOWNERS</link>
will make GitHub notify users based on the submitted changes, but it can
happen that it misses some of the package maintainers.
</para>
</listitem>
</itemizedlist>

View File

@ -936,6 +936,11 @@
github = "demin-dmitriy";
name = "Dmitriy Demin";
};
demize = {
email = "johannes@kyriasis.com";
github = "kyrias";
name = "Johannes Löthberg";
};
demyanrogozhin = {
email = "demyan.rogozhin@gmail.com";
github = "demyanrogozhin";
@ -1684,6 +1689,11 @@
github = "imalsogreg";
name = "Greg Hale";
};
imuli = {
email = "i@imu.li";
github = "imuli";
name = "Imuli";
};
infinisil = {
email = "infinisil@icloud.com";
github = "infinisil";
@ -2089,6 +2099,11 @@
github = "kuznero";
name = "Roman Kuznetsov";
};
kylewlacy = {
email = "kylelacy+nix@pm.me";
github = "kylewlacy";
name = "Kyle Lacy";
};
lasandell = {
email = "lasandell@gmail.com";
github = "lasandell";
@ -2174,6 +2189,11 @@
github = "nathanielbaxter";
name = "Nathaniel Baxter";
};
lightdiscord = {
email = "arnaud@lightdiscord.me";
github = "lightdiscord";
name = "Arnaud Pascal";
};
lihop = {
email = "nixos@leroy.geek.nz";
github = "lihop";
@ -3683,6 +3703,11 @@
github = "s-na";
name = "S. Nordin Abouzahra";
};
snaar = {
email = "snaar@snaar.net";
github = "snaar";
name = "Serguei Narojnyi";
};
snyh = {
email = "snyh@snyh.org";
github = "snyh";

View File

@ -14,7 +14,7 @@
xlink:href="http://nixos.org/nixpkgs/manual">Nixpkgs
manual</link>. In short, you clone Nixpkgs:
<screen>
$ git clone git://github.com/NixOS/nixpkgs.git
$ git clone https://github.com/NixOS/nixpkgs
$ cd nixpkgs
</screen>
Then you write and test the package as described in the Nixpkgs manual.

View File

@ -26,6 +26,7 @@
<xref linkend="opt-services.xserver.desktopManager.plasma5.enable"/> = true;
<xref linkend="opt-services.xserver.desktopManager.xfce.enable"/> = true;
<xref linkend="opt-services.xserver.desktopManager.gnome3.enable"/> = true;
<xref linkend="opt-services.xserver.desktopManager.mate.enable"/> = true;
<xref linkend="opt-services.xserver.windowManager.xmonad.enable"/> = true;
<xref linkend="opt-services.xserver.windowManager.twm.enable"/> = true;
<xref linkend="opt-services.xserver.windowManager.icewm.enable"/> = true;

View File

@ -11,9 +11,9 @@
modify NixOS, however, you should check out the latest sources from Git. This
is as follows:
<screen>
$ git clone git://github.com/NixOS/nixpkgs.git
$ git clone https://github.com/NixOS/nixpkgs
$ cd nixpkgs
$ git remote add channels git://github.com/NixOS/nixpkgs-channels.git
$ git remote add channels https://github.com/NixOS/nixpkgs-channels
$ git remote update channels
</screen>
This will check out the latest Nixpkgs sources to

View File

@ -73,6 +73,12 @@ $ nix-instantiate -E '(import &lt;nixpkgsunstable&gt; {}).gitFull'
</para>
<itemizedlist>
<listitem>
<para>
There is a new <varname>services.foundationdb</varname> module for deploying
<link xlink:href="https://www.foundationdb.org">FoundationDB</link> clusters.
</para>
</listitem>
<listitem>
<para>
When enabled the <literal>iproute2</literal> will copy the files expected
@ -81,6 +87,22 @@ $ nix-instantiate -E '(import &lt;nixpkgsunstable&gt; {}).gitFull'
routing tables for instance.
</para>
</listitem>
<listitem>
<para>
<varname>services.strongswan-swanctl</varname>
is a modern replacement for <varname>services.strongswan</varname>.
You can use either one of them to setup IPsec VPNs but not both at the same time.
</para>
<para>
<varname>services.strongswan-swanctl</varname> uses the
<link xlink:href="https://wiki.strongswan.org/projects/strongswan/wiki/swanctl">swanctl</link>
command which uses the modern
<link xlink:href="https://github.com/strongswan/strongswan/blob/master/src/libcharon/plugins/vici/README.md">vici</link>
<emphasis>Versatile IKE Configuration Interface</emphasis>.
The deprecated <literal>ipsec</literal> command used in <varname>services.strongswan</varname> is using the legacy
<link xlink:href="https://github.com/strongswan/strongswan/blob/master/README_LEGACY.md">stroke configuration interface</link>.
</para>
</listitem>
</itemizedlist>
</section>

View File

@ -536,6 +536,13 @@ if ($showHardwareConfig) {
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
EOF
} elsif (-e "/boot/extlinux") {
$bootLoaderConfig = <<EOF;
# Use the extlinux boot loader. (NixOS wants to enable GRUB by default)
boot.loader.grub.enable = false;
# Enables the generation of /boot/extlinux/extlinux.conf
boot.loader.generic-extlinux-compatible.enable = true;
EOF
} elsif ($virt ne "systemd-nspawn") {
$bootLoaderConfig = <<EOF;

View File

@ -323,6 +323,7 @@
mapred = 296;
hadoop = 297;
hydron = 298;
cfssl = 299;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -606,6 +607,7 @@
mapred = 296;
hadoop = 297;
hydron = 298;
cfssl = 299;
# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal

View File

@ -622,6 +622,7 @@
./services/search/hound.nix
./services/search/kibana.nix
./services/search/solr.nix
./services/security/cfssl.nix
./services/security/clamav.nix
./services/security/fail2ban.nix
./services/security/fprintd.nix

View File

@ -9,7 +9,6 @@ with lib;
(mkRenamedOptionModule [ "system" "nixos" "stateVersion" ] [ "system" "stateVersion" ])
(mkRenamedOptionModule [ "system" "nixos" "defaultChannel" ] [ "system" "defaultChannel" ])
(mkRenamedOptionModule [ "dysnomia" ] [ "services" "dysnomia" ])
(mkRenamedOptionModule [ "environment" "x11Packages" ] [ "environment" "systemPackages" ])
(mkRenamedOptionModule [ "environment" "enableBashCompletion" ] [ "programs" "bash" "enableCompletion" ])
(mkRenamedOptionModule [ "environment" "nix" ] [ "nix" "package" ])

View File

@ -55,11 +55,11 @@ in {
};
musicDirectory = mkOption {
type = types.path;
type = with types; either path (strMatching "(http|https|nfs|smb)://.+");
default = "${cfg.dataDir}/music";
defaultText = ''''${dataDir}/music'';
description = ''
The directory where mpd reads music from.
The directory or NFS/SMB network share where mpd reads music from.
'';
};

View File

@ -12,12 +12,10 @@
<para><emphasis>Maintainer:</emphasis> Austin Seipp</para>
<para><emphasis>Available version(s):</emphasis> 5.1.x</para>
<para><emphasis>Available version(s):</emphasis> 5.1.x, 5.2.x, 6.0.x</para>
<para>FoundationDB (or "FDB") is a distributed, open source, high performance,
transactional key-value store. It can store petabytes of data and deliver
exceptional performance while maintaining consistency and ACID semantics
(serializable transactions) over a large cluster.</para>
<para>FoundationDB (or "FDB") is an open source, distributed, transactional
key-value store.</para>
<section><title>Configuring and basic setup</title>
@ -26,12 +24,12 @@ exceptional performance while maintaining consistency and ACID semantics
<programlisting>
services.foundationdb.enable = true;
services.foundationdb.package = pkgs.foundationdb51; # FoundationDB 5.1.x
services.foundationdb.package = pkgs.foundationdb52; # FoundationDB 5.2.x
</programlisting>
</para>
<para>The <option>services.foundationdb.package</option> option is required,
and must always be specified. Because FoundationDB network protocols and
and must always be specified. Due to the fact FoundationDB network protocols and
on-disk storage formats may change between (major) versions, and upgrades must
be explicitly handled by the user, you must always manually specify this
yourself so that the NixOS module will use the proper version. Note that minor,
@ -70,6 +68,40 @@ fdb>
</programlisting>
</para>
<para>You can also write programs using the available client libraries.
For example, the following Python program can be run in order to grab the
cluster status, as a quick example. (This example uses
<command>nix-shell</command> shebang support to automatically supply the
necessary Python modules).
<programlisting>
a@link> cat fdb-status.py
#! /usr/bin/env nix-shell
#! nix-shell -i python -p python pythonPackages.foundationdb52
import fdb
import json
def main():
fdb.api_version(520)
db = fdb.open()
@fdb.transactional
def get_status(tr):
return str(tr['\xff\xff/status/json'])
obj = json.loads(get_status(db))
print('FoundationDB available: %s' % obj['client']['database_status']['available'])
if __name__ == "__main__":
main()
a@link> chmod +x fdb-status.py
a@link> ./fdb-status.py
FoundationDB available: True
a@link>
</programlisting>
</para>
<para>FoundationDB is run under the <command>foundationdb</command> user and
group by default, but this may be changed in the NixOS configuration. The
systemd unit <command>foundationdb.service</command> controls the
@ -295,7 +327,6 @@ only undergone fairly basic testing of all the available functionality.</para>
individual <command>fdbserver</command> processes. Currently, all server
processes inherit all the global <command>fdbmonitor</command> settings.
</para></listitem>
<listitem><para>Python bindings are not currently installed.</para></listitem>
<listitem><para>Ruby bindings are not currently installed.</para></listitem>
<listitem><para>Go bindings are not currently installed.</para></listitem>
</itemizedlist>
@ -306,8 +337,9 @@ only undergone fairly basic testing of all the available functionality.</para>
<para>NixOS's FoundationDB module allows you to configure all of the most
relevant configuration options for <command>fdbmonitor</command>, matching it
quite closely. For a complete list of all options, check <command>man
configuration.nix</command>.</para>
quite closely. A complete list of options for the FoundationDB module may be
found <link linkend="opt-services.foundationdb.enable">here</link>. You should
also read the FoundationDB documentation as well.</para>
</section>

View File

@ -47,7 +47,7 @@ in
###### implementation
config = mkIf cfg.enable {
services.dysnomia.enable = true;
dysnomia.enable = true;
environment.systemPackages = [ pkgs.disnix ] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService;

View File

@ -3,7 +3,7 @@
with lib;
let
cfg = config.services.dysnomia;
cfg = config.dysnomia;
printProperties = properties:
concatMapStrings (propertyName:
@ -69,7 +69,7 @@ let
in
{
options = {
services.dysnomia = {
dysnomia = {
enable = mkOption {
type = types.bool;
@ -142,7 +142,7 @@ in
environment.systemPackages = [ cfg.package ];
services.dysnomia.package = pkgs.dysnomia.override (origArgs: {
dysnomia.package = pkgs.dysnomia.override (origArgs: {
enableApacheWebApplication = config.services.httpd.enable;
enableAxis2WebService = config.services.tomcat.axis2.enable;
enableEjabberdDump = config.services.ejabberd.enable;
@ -153,7 +153,7 @@ in
enableMongoDatabase = config.services.mongodb.enable;
});
services.dysnomia.properties = {
dysnomia.properties = {
hostname = config.networking.hostName;
inherit (config.nixpkgs.localSystem) system;
@ -171,7 +171,7 @@ in
}}");
};
services.dysnomia.containers = lib.recursiveUpdate ({
dysnomia.containers = lib.recursiveUpdate ({
process = {};
wrapper = {};
}

View File

@ -57,12 +57,6 @@ let
--nodaemon --syslog --prefix=${name} --pidfile /run/${name}/${name}.pid ${name}
'';
mkPidFileDir = name: ''
mkdir -p /run/${name}
chmod 0700 /run/${name}
chown -R graphite:graphite /run/${name}
'';
carbonEnv = {
PYTHONPATH = let
cenv = pkgs.python.buildEnv.override {
@ -136,7 +130,7 @@ in {
finders = mkOption {
description = "List of finder plugins to load.";
default = [];
example = literalExample "[ pkgs.python27Packages.graphite_influxdb ]";
example = literalExample "[ pkgs.python27Packages.influxgraph ]";
type = types.listOf types.package;
};
@ -412,18 +406,16 @@ in {
after = [ "network.target" ];
environment = carbonEnv;
serviceConfig = {
RuntimeDirectory = name;
ExecStart = "${pkgs.pythonPackages.twisted}/bin/twistd ${carbonOpts name}";
User = "graphite";
Group = "graphite";
PermissionsStartOnly = true;
PIDFile="/run/${name}/${name}.pid";
};
preStart = mkPidFileDir name + ''
mkdir -p ${cfg.dataDir}/whisper
chmod 0700 ${cfg.dataDir}/whisper
chown graphite:graphite ${cfg.dataDir}
chown graphite:graphite ${cfg.dataDir}/whisper
preStart = ''
install -dm0700 -o graphite -g graphite ${cfg.dataDir}
install -dm0700 -o graphite -g graphite ${cfg.dataDir}/whisper
'';
};
})
@ -436,12 +428,12 @@ in {
after = [ "network.target" ];
environment = carbonEnv;
serviceConfig = {
RuntimeDirectory = name;
ExecStart = "${pkgs.pythonPackages.twisted}/bin/twistd ${carbonOpts name}";
User = "graphite";
Group = "graphite";
PIDFile="/run/${name}/${name}.pid";
};
preStart = mkPidFileDir name;
};
})
@ -452,12 +444,12 @@ in {
after = [ "network.target" ];
environment = carbonEnv;
serviceConfig = {
RuntimeDirectory = name;
ExecStart = "${pkgs.pythonPackages.twisted}/bin/twistd ${carbonOpts name}";
User = "graphite";
Group = "graphite";
PIDFile="/run/${name}/${name}.pid";
};
preStart = mkPidFileDir name;
};
})
@ -485,7 +477,7 @@ in {
PYTHONPATH = let
penv = pkgs.python.buildEnv.override {
extraLibs = [
pythonPackages.graphite_web
pythonPackages.graphite-web
pythonPackages.pysqlite
];
};
@ -524,16 +516,16 @@ in {
fi
# Only collect static files when graphite_web changes.
if ! [ "${dataDir}/current_graphite_web" -ef "${pythonPackages.graphite_web}" ]; then
if ! [ "${dataDir}/current_graphite_web" -ef "${pythonPackages.graphite-web}" ]; then
mkdir -p ${staticDir}
${pkgs.pythonPackages.django_1_8}/bin/django-admin.py collectstatic --noinput --clear
chown -R graphite:graphite ${staticDir}
ln -sfT "${pythonPackages.graphite_web}" "${dataDir}/current_graphite_web"
ln -sfT "${pythonPackages.graphite-web}" "${dataDir}/current_graphite_web"
fi
'';
};
environment.systemPackages = [ pythonPackages.graphite_web ];
environment.systemPackages = [ pythonPackages.graphite-web ];
}))
(mkIf cfg.api.enable {
@ -607,7 +599,7 @@ in {
GRAPHITE_URL = cfg.pager.graphiteUrl;
};
serviceConfig = {
ExecStart = "${pkgs.pythonPackages.graphite_pager}/bin/graphite-pager --config ${pagerConfig}";
ExecStart = "${pkgs.pythonPackages.graphitepager}/bin/graphite-pager --config ${pagerConfig}";
User = "graphite";
Group = "graphite";
};
@ -615,7 +607,7 @@ in {
services.redis.enable = mkDefault true;
environment.systemPackages = [ pkgs.pythonPackages.graphite_pager ];
environment.systemPackages = [ pkgs.pythonPackages.graphitepager ];
})
(mkIf cfg.beacon.enable {

View File

@ -14,6 +14,10 @@ let
global = {
"plugins directory" = "${wrappedPlugins}/libexec/netdata/plugins.d ${pkgs.netdata}/libexec/netdata/plugins.d";
};
web = {
"web files owner" = "root";
"web files group" = "root";
};
};
mkConfig = generators.toINI {} (recursiveUpdate localConfig cfg.config);
configFile = pkgs.writeText "netdata.conf" (if cfg.configText != null then cfg.configText else mkConfig);

View File

@ -73,7 +73,7 @@ let
description = ''
Specify a filter for iptables to use when
<option>services.prometheus.exporters.${name}.openFirewall</option>
is true. It is used as `ip46tables -I INPUT <option>firewallFilter</option> -j ACCEPT`.
is true. It is used as `ip46tables -I nixos-fw <option>firewallFilter</option> -j nixos-fw-accept`.
'';
};
user = mkOption {
@ -116,9 +116,10 @@ let
mkExporterConf = { name, conf, serviceOpts }:
mkIf conf.enable {
networking.firewall.extraCommands = mkIf conf.openFirewall ''
ip46tables -I INPUT ${conf.firewallFilter} -j ACCEPT
'';
networking.firewall.extraCommands = mkIf conf.openFirewall (concatStrings [
"ip46tables -I nixos-fw ${conf.firewallFilter} "
"-m comment --comment ${name}-exporter -j nixos-fw-accept"
]);
systemd.services."prometheus-${name}-exporter" = mkMerge ([{
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];

View File

@ -0,0 +1,209 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.cfssl;
in {
options.services.cfssl = {
enable = mkEnableOption "the CFSSL CA api-server";
dataDir = mkOption {
default = "/var/lib/cfssl";
type = types.path;
description = "Cfssl work directory.";
};
address = mkOption {
default = "127.0.0.1";
type = types.str;
description = "Address to bind.";
};
port = mkOption {
default = 8888;
type = types.ints.u16;
description = "Port to bind.";
};
ca = mkOption {
defaultText = "\${cfg.dataDir}/ca.pem";
type = types.str;
description = "CA used to sign the new certificate -- accepts '[file:]fname' or 'env:varname'.";
};
caKey = mkOption {
defaultText = "file:\${cfg.dataDir}/ca-key.pem";
type = types.str;
description = "CA private key -- accepts '[file:]fname' or 'env:varname'.";
};
caBundle = mkOption {
default = null;
type = types.nullOr types.path;
description = "Path to root certificate store.";
};
intBundle = mkOption {
default = null;
type = types.nullOr types.path;
description = "Path to intermediate certificate store.";
};
intDir = mkOption {
default = null;
type = types.nullOr types.path;
description = "Intermediates directory.";
};
metadata = mkOption {
default = null;
type = types.nullOr types.path;
description = ''
Metadata file for root certificate presence.
The content of the file is a json dictionary (k,v): each key k is
a SHA-1 digest of a root certificate while value v is a list of key
store filenames.
'';
};
remote = mkOption {
default = null;
type = types.nullOr types.str;
description = "Remote CFSSL server.";
};
configFile = mkOption {
default = null;
type = types.nullOr types.str;
description = "Path to configuration file. Do not put this in nix-store as it might contain secrets.";
};
responder = mkOption {
default = null;
type = types.nullOr types.path;
description = "Certificate for OCSP responder.";
};
responderKey = mkOption {
default = null;
type = types.nullOr types.str;
description = "Private key for OCSP responder certificate. Do not put this in nix-store.";
};
tlsKey = mkOption {
default = null;
type = types.nullOr types.str;
description = "Other endpoint's CA private key. Do not put this in nix-store.";
};
tlsCert = mkOption {
default = null;
type = types.nullOr types.path;
description = "Other endpoint's CA to set up TLS protocol.";
};
mutualTlsCa = mkOption {
default = null;
type = types.nullOr types.path;
description = "Mutual TLS - require clients be signed by this CA.";
};
mutualTlsCn = mkOption {
default = null;
type = types.nullOr types.str;
description = "Mutual TLS - regex for whitelist of allowed client CNs.";
};
tlsRemoteCa = mkOption {
default = null;
type = types.nullOr types.path;
description = "CAs to trust for remote TLS requests.";
};
mutualTlsClientCert = mkOption {
default = null;
type = types.nullOr types.path;
description = "Mutual TLS - client certificate to call remote instance requiring client certs.";
};
mutualTlsClientKey = mkOption {
default = null;
type = types.nullOr types.path;
description = "Mutual TLS - client key to call remote instance requiring client certs. Do not put this in nix-store.";
};
dbConfig = mkOption {
default = null;
type = types.nullOr types.path;
description = "Certificate db configuration file. Path must be writeable.";
};
logLevel = mkOption {
default = 1;
type = types.enum [ 0 1 2 3 4 5 ];
description = "Log level (0 = DEBUG, 5 = FATAL).";
};
};
config = {
users.extraGroups.cfssl = {
gid = config.ids.gids.cfssl;
};
users.extraUsers.cfssl = {
description = "cfssl user";
createHome = true;
home = cfg.dataDir;
group = "cfssl";
uid = config.ids.uids.cfssl;
};
systemd.services.cfssl = mkIf cfg.enable {
description = "CFSSL CA API server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
WorkingDirectory = cfg.dataDir;
StateDirectory = cfg.dataDir;
StateDirectoryMode = 700;
Restart = "always";
User = "cfssl";
ExecStart = with cfg; let
opt = n: v: optionalString (v != null) ''-${n}="${v}"'';
in
lib.concatStringsSep " \\\n" [
"${pkgs.cfssl}/bin/cfssl serve"
(opt "address" address)
(opt "port" (toString port))
(opt "ca" ca)
(opt "ca-key" caKey)
(opt "ca-bundle" caBundle)
(opt "int-bundle" intBundle)
(opt "int-dir" intDir)
(opt "metadata" metadata)
(opt "remote" remote)
(opt "config" configFile)
(opt "responder" responder)
(opt "responder-key" responderKey)
(opt "tls-key" tlsKey)
(opt "tls-cert" tlsCert)
(opt "mutual-tls-ca" mutualTlsCa)
(opt "mutual-tls-cn" mutualTlsCn)
(opt "mutual-tls-client-key" mutualTlsClientKey)
(opt "mutual-tls-client-cert" mutualTlsClientCert)
(opt "tls-remote-ca" tlsRemoteCa)
(opt "db-config" dbConfig)
(opt "loglevel" (toString logLevel))
];
};
};
services.cfssl = {
ca = mkDefault "${cfg.dataDir}/ca.pem";
caKey = mkDefault "${cfg.dataDir}/ca-key.pem";
};
};
}

View File

@ -1,6 +1,8 @@
{ config, lib, pkgs, ... }:
let cfg = config.services.hydron;
let
cfg = config.services.hydron;
postgres = config.services.postgresql;
in with lib; {
options.services.hydron = {
enable = mkEnableOption "hydron";
@ -25,6 +27,38 @@ in with lib; {
'';
};
password = mkOption {
type = types.str;
default = "hydron";
example = "dumbpass";
description = "Password for the hydron database.";
};
passwordFile = mkOption {
type = types.path;
default = "/run/keys/hydron-password-file";
example = "/home/okina/hydron/keys/pass";
description = "Password file for the hydron database.";
};
postgresArgs = mkOption {
type = types.str;
description = "Postgresql connection arguments.";
example = ''
{
"driver": "postgres",
"connection": "user=hydron password=dumbpass dbname=hydron sslmode=disable"
}
'';
};
postgresArgsFile = mkOption {
type = types.path;
default = "/run/keys/hydron-postgres-args";
example = "/home/okina/hydron/keys/postgres";
description = "Postgresql connection arguments file.";
};
listenAddress = mkOption {
type = types.nullOr types.str;
default = null;
@ -47,16 +81,36 @@ in with lib; {
};
config = mkIf cfg.enable {
security.sudo.enable = cfg.enable;
services.postgresql.enable = cfg.enable;
services.hydron.passwordFile = mkDefault (pkgs.writeText "hydron-password-file" cfg.password);
services.hydron.postgresArgsFile = mkDefault (pkgs.writeText "hydron-postgres-args" cfg.postgresArgs);
services.hydron.postgresArgs = mkDefault ''
{
"driver": "postgres",
"connection": "user=hydron password=${cfg.password} dbname=hydron sslmode=disable"
}
'';
systemd.services.hydron = {
description = "hydron";
after = [ "network.target" ];
after = [ "network.target" "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
preStart = ''
# Ensure folder exists and permissions are correct
mkdir -p ${escapeShellArg cfg.dataDir}/images
# Ensure folder exists or create it and permissions are correct
mkdir -p ${escapeShellArg cfg.dataDir}/{.hydron,images}
ln -sf ${escapeShellArg cfg.postgresArgsFile} ${escapeShellArg cfg.dataDir}/.hydron/db_conf.json
chmod 750 ${escapeShellArg cfg.dataDir}
chown -R hydron:hydron ${escapeShellArg cfg.dataDir}
# Ensure the database is correct or create it
${pkgs.sudo}/bin/sudo -u ${postgres.superUser} ${postgres.package}/bin/createuser \
-SDR hydron || true
${pkgs.sudo}/bin/sudo -u ${postgres.superUser} ${postgres.package}/bin/createdb \
-T template0 -E UTF8 -O hydron hydron || true
${pkgs.sudo}/bin/sudo -u hydron ${postgres.package}/bin/psql \
-c "ALTER ROLE hydron WITH PASSWORD '$(cat ${escapeShellArg cfg.passwordFile})';" || true
'';
serviceConfig = {
@ -101,5 +155,9 @@ in with lib; {
};
};
imports = [
(mkRenamedOptionModule [ "services" "hydron" "baseDir" ] [ "services" "hydron" "dataDir" ])
];
meta.maintainers = with maintainers; [ chiiruno ];
}

View File

@ -1,65 +1,71 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.meguca;
postgres = config.services.postgresql;
in
{
in with lib; {
options.services.meguca = {
enable = mkEnableOption "meguca";
baseDir = mkOption {
dataDir = mkOption {
type = types.path;
default = "/run/meguca";
default = "/var/lib/meguca";
example = "/home/okina/meguca";
description = "Location where meguca stores it's database and links.";
};
password = mkOption {
type = types.str;
default = "meguca";
example = "dumbpass";
description = "Password for the meguca database.";
};
passwordFile = mkOption {
type = types.path;
default = "/run/keys/meguca-password-file";
example = "/home/okina/meguca/keys/pass";
description = "Password file for the meguca database.";
};
reverseProxy = mkOption {
type = types.nullOr types.str;
default = null;
example = "192.168.1.5";
description = "Reverse proxy IP.";
};
sslCertificate = mkOption {
type = types.nullOr types.str;
default = null;
example = "/home/okina/meguca/ssl.cert";
description = "Path to the SSL certificate.";
};
listenAddress = mkOption {
type = types.nullOr types.str;
default = null;
example = "127.0.0.1:8000";
description = "Listen on a specific IP address and port.";
};
cacheSize = mkOption {
type = types.nullOr types.int;
default = null;
example = 256;
description = "Cache size in MB.";
};
postgresArgs = mkOption {
type = types.str;
default = "user=meguca password=" + cfg.password + " dbname=meguca sslmode=disable";
example = "user=meguca password=dumbpass dbname=meguca sslmode=disable";
description = "Postgresql connection arguments.";
};
postgresArgsFile = mkOption {
type = types.path;
default = "/run/keys/meguca-postgres-args";
example = "/home/okina/meguca/keys/postgres";
description = "Postgresql connection arguments file.";
};
@ -83,18 +89,11 @@ in
};
config = mkIf cfg.enable {
security.sudo.enable = cfg.enable == true;
services.postgresql.enable = cfg.enable == true;
services.meguca.passwordFile = mkDefault (toString (pkgs.writeTextFile {
name = "meguca-password-file";
text = cfg.password;
}));
services.meguca.postgresArgsFile = mkDefault (toString (pkgs.writeTextFile {
name = "meguca-postgres-args";
text = cfg.postgresArgs;
}));
security.sudo.enable = cfg.enable;
services.postgresql.enable = cfg.enable;
services.meguca.passwordFile = mkDefault (pkgs.writeText "meguca-password-file" cfg.password);
services.meguca.postgresArgsFile = mkDefault (pkgs.writeText "meguca-postgres-args" cfg.postgresArgs);
services.meguca.postgresArgs = mkDefault "user=meguca password=${cfg.password} dbname=meguca sslmode=disable";
systemd.services.meguca = {
description = "meguca";
@ -102,10 +101,11 @@ in
wantedBy = [ "multi-user.target" ];
preStart = ''
# Ensure folder exists and links are correct or create them
mkdir -p ${cfg.baseDir}
chmod 750 ${cfg.baseDir}
ln -sf ${pkgs.meguca}/share/meguca/www ${cfg.baseDir}
# Ensure folder exists or create it and links and permissions are correct
mkdir -p ${escapeShellArg cfg.dataDir}
ln -sf ${pkgs.meguca}/share/meguca/www ${escapeShellArg cfg.dataDir}
chmod 750 ${escapeShellArg cfg.dataDir}
chown -R meguca:meguca ${escapeShellArg cfg.dataDir}
# Ensure the database is correct or create it
${pkgs.sudo}/bin/sudo -u ${postgres.superUser} ${postgres.package}/bin/createuser \
@ -113,47 +113,46 @@ in
${pkgs.sudo}/bin/sudo -u ${postgres.superUser} ${postgres.package}/bin/createdb \
-T template0 -E UTF8 -O meguca meguca || true
${pkgs.sudo}/bin/sudo -u meguca ${postgres.package}/bin/psql \
-c "ALTER ROLE meguca WITH PASSWORD '$(cat ${cfg.passwordFile})';" || true
-c "ALTER ROLE meguca WITH PASSWORD '$(cat ${escapeShellArg cfg.passwordFile})';" || true
'';
script = ''
cd ${cfg.baseDir}
cd ${escapeShellArg cfg.dataDir}
${pkgs.meguca}/bin/meguca -d "$(cat ${cfg.postgresArgsFile})"\
${optionalString (cfg.reverseProxy != null) " -R ${cfg.reverseProxy}"}\
${optionalString (cfg.sslCertificate != null) " -S ${cfg.sslCertificate}"}\
${optionalString (cfg.listenAddress != null) " -a ${cfg.listenAddress}"}\
${optionalString (cfg.cacheSize != null) " -c ${toString cfg.cacheSize}"}\
${optionalString (cfg.compressTraffic) " -g"}\
${optionalString (cfg.assumeReverseProxy) " -r"}\
${optionalString (cfg.httpsOnly) " -s"} start
'';
${pkgs.meguca}/bin/meguca -d "$(cat ${escapeShellArg cfg.postgresArgsFile})"''
+ optionalString (cfg.reverseProxy != null) " -R ${cfg.reverseProxy}"
+ optionalString (cfg.sslCertificate != null) " -S ${cfg.sslCertificate}"
+ optionalString (cfg.listenAddress != null) " -a ${cfg.listenAddress}"
+ optionalString (cfg.cacheSize != null) " -c ${toString cfg.cacheSize}"
+ optionalString (cfg.compressTraffic) " -g"
+ optionalString (cfg.assumeReverseProxy) " -r"
+ optionalString (cfg.httpsOnly) " -s" + " start";
serviceConfig = {
PermissionsStartOnly = true;
Type = "forking";
User = "meguca";
Group = "meguca";
RuntimeDirectory = "meguca";
ExecStop = "${pkgs.meguca}/bin/meguca stop";
};
};
users = {
groups.meguca.gid = config.ids.gids.meguca;
users.meguca = {
description = "meguca server service user";
home = cfg.baseDir;
home = cfg.dataDir;
createHome = true;
group = "meguca";
uid = config.ids.uids.meguca;
};
groups.meguca = {
gid = config.ids.gids.meguca;
members = [ "meguca" ];
};
};
};
imports = [
(mkRenamedOptionModule [ "services" "meguca" "baseDir" ] [ "services" "meguca" "dataDir" ])
];
meta.maintainers = with maintainers; [ chiiruno ];
}

View File

@ -108,7 +108,7 @@ in
};
webapps = mkOption {
type = types.listOf types.package;
type = types.listOf types.path;
default = [ tomcat.webapps ];
defaultText = "[ pkgs.tomcat85.webapps ]";
description = "List containing WAR files or directories with WAR files which are web applications to be deployed on Tomcat";
@ -118,8 +118,15 @@ in
type = types.listOf (types.submodule {
options = {
name = mkOption {
type = types.listOf types.str;
type = types.str;
description = "name of the virtualhost";
};
webapps = mkOption {
type = types.listOf types.path;
description = ''
List containing web application WAR files and/or directories containing
web applications and configuration files for the virtual host.
'';
default = [];
};
};

View File

@ -96,13 +96,13 @@ in
else if any (w: w.name == defaultDM) cfg.session.list then
defaultDM
else
throw ''
Default desktop manager (${defaultDM}) not found.
Probably you want to change
services.xserver.desktopManager.default = "${defaultDM}";
to one of
builtins.trace ''
Default desktop manager (${defaultDM}) not found at evaluation time.
These are the known valid session names:
${concatMapStringsSep "\n " (w: "services.xserver.desktopManager.default = \"${w.name}\";") cfg.session.list}
'';
It's also possible the default can be found in one of these packages:
${concatMapStringsSep "\n " (p: p.name) config.services.xserver.displayManager.extraSessionFilePackages}
'' defaultDM;
};
};

View File

@ -57,8 +57,12 @@ in {
sessionPath = mkOption {
default = [];
example = literalExample "[ pkgs.gnome3.gpaste ]";
description = "Additional list of packages to be added to the session search path.
Useful for gnome shell extensions or gsettings-conditionated autostart.";
description = ''
Additional list of packages to be added to the session search path.
Useful for GNOME Shell extensions or GSettings-conditional autostart.
Note that this should be a last resort; patching the package is preferred (see GPaste).
'';
apply = list: list ++ [ pkgs.gnome3.gnome-shell pkgs.gnome3.gnome-shell-extensions ];
};
@ -126,18 +130,10 @@ in {
fonts.fonts = [ pkgs.dejavu_fonts pkgs.cantarell-fonts ];
services.xserver.desktopManager.session = singleton
{ name = "gnome3";
bgSupport = true;
start = ''
# Set GTK_DATA_PREFIX so that GTK+ can find the themes
export GTK_DATA_PREFIX=${config.system.path}
# find theme engines
export GTK_PATH=${config.system.path}/lib/gtk-3.0:${config.system.path}/lib/gtk-2.0
export XDG_MENU_PREFIX=gnome-
services.xserver.displayManager.extraSessionFilePackages = [ pkgs.gnome3.gnome-session ];
services.xserver.displayManager.sessionCommands = ''
if test "$XDG_CURRENT_DESKTOP" = "GNOME"; then
${concatMapStrings (p: ''
if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then
export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
@ -148,34 +144,28 @@ in {
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${p}/lib
fi
'') cfg.sessionPath}
fi
'';
# Override default mimeapps
export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${mimeAppsList}/share
environment.variables.GNOME_SESSION_DEBUG = optionalString cfg.debug "1";
# Override gsettings-desktop-schema
export NIX_GSETTINGS_OVERRIDES_DIR=${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
# Override default mimeapps
environment.variables.XDG_DATA_DIRS = [ "${mimeAppsList}/share" ];
# Let nautilus find extensions
export NAUTILUS_EXTENSION_DIR=${config.system.path}/lib/nautilus/extensions-3.0/
# Override GSettings schemas
environment.variables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
# Find the mouse
export XCURSOR_PATH=~/.icons:${config.system.path}/share/icons
# Update user dirs as described in http://freedesktop.org/wiki/Software/xdg-user-dirs/
${pkgs.xdg-user-dirs}/bin/xdg-user-dirs-update
${pkgs.gnome3.gnome-session}/bin/gnome-session ${optionalString cfg.debug "--debug"} &
waitPID=$!
'';
};
services.xserver.updateDbusEnvironment = true;
# Let nautilus find extensions
# TODO: Create nautilus-with-extensions package
environment.variables.NAUTILUS_EXTENSION_DIR = "${config.system.path}/lib/nautilus/extensions-3.0";
environment.variables.GIO_EXTRA_MODULES = [ "${lib.getLib pkgs.gnome3.dconf}/lib/gio/modules"
"${pkgs.gnome3.glib-networking.out}/lib/gio/modules"
"${pkgs.gnome3.gvfs}/lib/gio/modules" ];
environment.systemPackages = pkgs.gnome3.corePackages ++ cfg.sessionPath
++ (removePackagesByName pkgs.gnome3.optionalPackages config.environment.gnome3.excludePackages);
++ (removePackagesByName pkgs.gnome3.optionalPackages config.environment.gnome3.excludePackages) ++ [
pkgs.xdg-user-dirs # Update user dirs as described in http://freedesktop.org/wiki/Software/xdg-user-dirs/
];
# Use the correct gnome3 packageSet
networking.networkmanager.basePackages =

View File

@ -27,55 +27,26 @@ let
Xft.hintstyle: hintslight
'';
# file provided by services.xserver.displayManager.session.script
xsession = wm: dm: pkgs.writeScript "xsession"
# file provided by services.xserver.displayManager.session.wrapper
xsessionWrapper = pkgs.writeScript "xsession-wrapper"
''
#! ${pkgs.bash}/bin/bash
# Expected parameters:
# $1 = <desktop-manager>+<window-manager>
# Actual parameters (FIXME):
# SDDM is calling this script like the following:
# $1 = /nix/store/xxx-xsession (= $0)
# $2 = <desktop-manager>+<window-manager>
# SLiM is using the following parameter:
# $1 = /nix/store/xxx-xsession <desktop-manager>+<window-manager>
# LightDM keeps the double quotes:
# $1 = /nix/store/xxx-xsession "<desktop-manager>+<window-manager>"
# The fake/auto display manager doesn't use any parameters and GDM is
# broken.
# If you want to "debug" this script don't print the parameters to stdout
# or stderr because this script will be executed multiple times and the
# output won't be visible in the log when the script is executed for the
# first time (e.g. append them to a file instead)!
# All of the above cases are handled by the following hack (FIXME).
# Since this line is *very important* for *all display managers* it is
# very important to test changes to the following line with all display
# managers:
if [ "''${1:0:1}" = "/" ]; then eval exec "$1" "$2" ; fi
# Now it should be safe to assume that the script was called with the
# expected parameters.
# Shared environment setup for graphical sessions.
. /etc/profile
cd "$HOME"
# The first argument of this script is the session type.
sessionType="$1"
if [ "$sessionType" = default ]; then sessionType=""; fi
${optionalString cfg.startDbusSession ''
if test -z "$DBUS_SESSION_BUS_ADDRESS"; then
exec ${pkgs.dbus.dbus-launch} --exit-with-session "$0" "$sessionType"
exec ${pkgs.dbus.dbus-launch} --exit-with-session "$0" "$@"
fi
''}
${optionalString cfg.displayManager.job.logToJournal ''
if [ -z "$_DID_SYSTEMD_CAT" ]; then
export _DID_SYSTEMD_CAT=1
exec ${config.systemd.package}/bin/systemd-cat -t xsession "$0" "$sessionType"
exec ${config.systemd.package}/bin/systemd-cat -t xsession "$0" "$@"
fi
''}
@ -90,7 +61,9 @@ let
}
# Publish access credentials in the root window.
${config.hardware.pulseaudio.package.out}/bin/pactl load-module module-x11-publish "display=$DISPLAY"
if ${config.hardware.pulseaudio.package.out}/bin/pulseaudio --dump-modules | grep module-x11-publish &> /dev/null; then
${config.hardware.pulseaudio.package.out}/bin/pactl load-module module-x11-publish "display=$DISPLAY"
fi
''}
# Tell systemd about our $DISPLAY and $XAUTHORITY.
@ -101,6 +74,7 @@ let
${config.systemd.package}/bin/systemctl --user import-environment DISPLAY XAUTHORITY DBUS_SESSION_BUS_ADDRESS
# Load X defaults.
# FIXME: Check XDG_SESSION_TYPE against x11
${xorg.xrdb}/bin/xrdb -merge ${xresourcesXft}
if test -e ~/.Xresources; then
${xorg.xrdb}/bin/xrdb -merge ~/.Xresources
@ -132,12 +106,33 @@ let
# Allow the user to setup a custom session type.
if test -x ~/.xsession; then
exec ~/.xsession
else
if test "$sessionType" = "custom"; then
sessionType="" # fall-thru if there is no ~/.xsession
fi
fi
if test "$1"; then
# Run the supplied session command. Remove any double quotes with eval.
eval exec "$@"
else
# Fall back to the default window/desktopManager
exec ${cfg.displayManager.session.script}
fi
'';
# file provided by services.xserver.displayManager.session.script
xsession = wm: dm: pkgs.writeScript "xsession"
''
#! ${pkgs.bash}/bin/bash
# Legacy session script used to construct .desktop files from
# `services.xserver.displayManager.session` entries. Called from
# `sessionWrapper`.
# Expected parameters:
# $1 = <desktop-manager>+<window-manager>
# The first argument of this script is the session type.
sessionType="$1"
if [ "$sessionType" = default ]; then sessionType=""; fi
# The session type is "<desktop-manager>+<window-manager>", so
# extract those (see:
# http://wiki.bash-hackers.org/syntax/pe#substring_removal).
@ -186,19 +181,22 @@ let
allowSubstitutes = false;
}
''
mkdir -p "$out"
mkdir -p "$out/share/xsessions"
${concatMapStrings (n: ''
cat - > "$out/${n}.desktop" << EODESKTOP
cat - > "$out/share/xsessions/${n}.desktop" << EODESKTOP
[Desktop Entry]
Version=1.0
Type=XSession
TryExec=${cfg.displayManager.session.script}
Exec=${cfg.displayManager.session.script} "${n}"
X-GDM-BypassXsession=true
Name=${n}
Comment=
EODESKTOP
'') names}
${concatMapStrings (pkg: ''
${xorg.lndir}/bin/lndir ${pkg}/share/xsessions $out/share/xsessions
'') cfg.displayManager.extraSessionFilePackages}
'';
in
@ -245,6 +243,14 @@ in
'';
};
extraSessionFilePackages = mkOption {
type = types.listOf types.package;
default = [];
description = ''
A list of packages containing xsession files to be passed to the display manager.
'';
};
session = mkOption {
default = [];
example = literalExample
@ -280,6 +286,7 @@ in
(filter (w: d.name != "none" || w.name != "none") wm));
desktops = mkDesktops names;
script = xsession wm dm;
wrapper = xsessionWrapper;
};
};

View File

@ -109,7 +109,7 @@ in
environment = {
GDM_X_SERVER_EXTRA_ARGS = toString
(filter (arg: arg != "-terminate") cfg.xserverArgs);
GDM_SESSIONS_DIR = "${cfg.session.desktops}";
GDM_SESSIONS_DIR = "${cfg.session.desktops}/share/xsessions";
# Find the mouse
XCURSOR_PATH = "~/.icons:${pkgs.gnome3.adwaita-icon-theme}/share/icons";
};
@ -173,6 +173,8 @@ in
${optionalString cfg.gdm.debug "Enable=true"}
'';
environment.etc."gdm/Xsession".source = config.services.xserver.displayManager.session.wrapper;
# GDM LFS PAM modules, adapted somehow to NixOS
security.pam.services = {
gdm-launch-environment.text = ''

View File

@ -23,7 +23,7 @@ let
makeWrapper ${pkgs.lightdm_gtk_greeter}/sbin/lightdm-gtk-greeter \
$out/greeter \
--prefix PATH : "${pkgs.glibc.bin}/bin" \
--set GDK_PIXBUF_MODULE_FILE "${pkgs.gdk_pixbuf.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" \
--set GDK_PIXBUF_MODULE_FILE "${pkgs.librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" \
--set GTK_PATH "${theme}:${pkgs.gtk3.out}" \
--set GTK_EXE_PREFIX "${theme}" \
--set GTK_DATA_PREFIX "${theme}" \

View File

@ -45,11 +45,11 @@ let
greeter-user = ${config.users.users.lightdm.name}
greeters-directory = ${cfg.greeter.package}
''}
sessions-directory = ${dmcfg.session.desktops}
sessions-directory = ${dmcfg.session.desktops}/share/xsessions
[Seat:*]
xserver-command = ${xserverWrapper}
session-wrapper = ${dmcfg.session.script}
session-wrapper = ${dmcfg.session.wrapper}
${optionalString cfg.greeter.enable ''
greeter-session = ${cfg.greeter.name}
''}
@ -176,21 +176,13 @@ in
LightDM auto-login requires services.xserver.displayManager.lightdm.autoLogin.user to be set
'';
}
{ assertion = cfg.autoLogin.enable -> elem defaultSessionName dmcfg.session.names;
{ assertion = cfg.autoLogin.enable -> dmDefault != "none" || wmDefault != "none";
message = ''
LightDM auto-login requires that services.xserver.desktopManager.default and
services.xserver.windowMananger.default are set to valid values. The current
default session: ${defaultSessionName} is not valid.
'';
}
{ assertion = hasDefaultUserSession -> elem defaultSessionName dmcfg.session.names;
message = ''
services.xserver.desktopManager.default and
services.xserver.windowMananger.default are not set to valid
values. The current default session: ${defaultSessionName}
is not valid.
'';
}
{ assertion = !cfg.greeter.enable -> (cfg.autoLogin.enable && cfg.autoLogin.timeout == 0);
message = ''
LightDM can only run without greeter if automatic login is enabled and the timeout for it

View File

@ -49,8 +49,8 @@ let
MinimumVT=${toString (if xcfg.tty != null then xcfg.tty else 7)}
ServerPath=${xserverWrapper}
XephyrPath=${pkgs.xorg.xorgserver.out}/bin/Xephyr
SessionCommand=${dmcfg.session.script}
SessionDir=${dmcfg.session.desktops}
SessionCommand=${dmcfg.session.wrapper}
SessionDir=${dmcfg.session.desktops}/share/xsessions
XauthPath=${pkgs.xorg.xauth}/bin/xauth
DisplayCommand=${Xsetup}
DisplayStopCommand=${Xstop}

View File

@ -13,8 +13,8 @@ let
xauth_path ${dmcfg.xauthBin}
default_xserver ${dmcfg.xserverBin}
xserver_arguments ${toString dmcfg.xserverArgs}
sessiondir ${dmcfg.session.desktops}
login_cmd exec ${pkgs.runtimeShell} ${dmcfg.session.script} "%session"
sessiondir ${dmcfg.session.desktops}/share/xsessions
login_cmd exec ${pkgs.runtimeShell} ${dmcfg.session.wrapper} "%session"
halt_cmd ${config.systemd.package}/sbin/shutdown -h now
reboot_cmd ${config.systemd.package}/sbin/shutdown -r now
logfile /dev/stderr

View File

@ -43,6 +43,7 @@ def write_loader_conf(profile, generation):
f.write("default nixos-generation-%d\n" % (generation))
if not @editor@:
f.write("editor 0");
f.write("console-mode @consoleMode@\n");
os.rename("@efiSysMountPoint@/loader/loader.conf.tmp", "@efiSysMountPoint@/loader/loader.conf")
def profile_path(profile, generation, name):

View File

@ -22,6 +22,8 @@ let
editor = if cfg.editor then "True" else "False";
inherit (cfg) consoleMode;
inherit (efi) efiSysMountPoint canTouchEfiVariables;
};
in {
@ -52,6 +54,38 @@ in {
compatibility.
'';
};
consoleMode = mkOption {
default = "keep";
type = types.enum [ "0" "1" "2" "auto" "max" "keep" ];
description = ''
The resolution of the console. The following values are valid:
</para>
<para>
<itemizedlist>
<listitem><para>
<literal>"0"</literal>: Standard UEFI 80x25 mode
</para></listitem>
<listitem><para>
<literal>"1"</literal>: 80x50 mode, not supported by all devices
</para></listitem>
<listitem><para>
<literal>"2"</literal>: The first non-standard mode provided by the device firmware, if any
</para></listitem>
<listitem><para>
<literal>"auto"</literal>: Pick a suitable mode automatically using heuristics
</para></listitem>
<listitem><para>
<literal>"max"</literal>: Pick the highest-numbered available mode
</para></listitem>
<listitem><para>
<literal>"keep"</literal>: Keep the mode selected by firmware (the default)
</para></listitem>
</itemizedlist>
'';
};
};
config = mkIf cfg.enable {

View File

@ -55,6 +55,15 @@ with lib;
'';
};
device = mkOption {
default = "TPPS/2 IBM TrackPoint";
type = types.str;
description = ''
The device name of the trackpoint. You can check with xinput.
Some newer devices (example x1c6) use "TPPS/2 Elan TrackPoint".
'';
};
};
};
@ -68,12 +77,12 @@ with lib;
(mkIf cfg.enable {
services.udev.extraRules =
''
ACTION=="add|change", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{device/speed}="${toString cfg.speed}", ATTR{device/sensitivity}="${toString cfg.sensitivity}"
ACTION=="add|change", SUBSYSTEM=="input", ATTR{name}=="${cfg.device}", ATTR{device/speed}="${toString cfg.speed}", ATTR{device/sensitivity}="${toString cfg.sensitivity}"
'';
system.activationScripts.trackpoint =
''
${config.systemd.package}/bin/udevadm trigger --attr-match=name="TPPS/2 IBM TrackPoint"
${config.systemd.package}/bin/udevadm trigger --attr-match=name="${cfg.device}"
'';
})
@ -81,7 +90,7 @@ with lib;
services.xserver.inputClassSections =
[''
Identifier "Trackpoint Wheel Emulation"
MatchProduct "${if cfg.fakeButtons then "PS/2 Generic Mouse" else "ETPS/2 Elantech TrackPoint|Elantech PS/2 TrackPoint|TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device|Composite TouchPad / TrackPoint"}"
MatchProduct "${if cfg.fakeButtons then "PS/2 Generic Mouse" else "ETPS/2 Elantech TrackPoint|Elantech PS/2 TrackPoint|TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device|Composite TouchPad / TrackPoint|${cfg.device}"}"
MatchDevicePath "/dev/input/event*"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"

View File

@ -256,6 +256,7 @@ in rec {
tests.buildbot = callTest tests/buildbot.nix {};
tests.cadvisor = callTestOnMatchingSystems ["x86_64-linux"] tests/cadvisor.nix {};
tests.ceph = callTestOnMatchingSystems ["x86_64-linux"] tests/ceph.nix {};
tests.cfssl = callTestOnMatchingSystems ["x86_64-linux"] tests/cfssl.nix {};
tests.chromium = (callSubTestsOnMatchingSystems ["x86_64-linux"] tests/chromium.nix {}).stable or {};
tests.cjdns = callTest tests/cjdns.nix {};
tests.cloud-init = callTest tests/cloud-init.nix {};

View File

@ -12,7 +12,9 @@ let
'';
});
pythonPackages = (super.python.override {
# Override certifi so that it accepts fake certificate for Let's Encrypt
# Need to override the attribute used by simp_le, which is python3Packages
python3Packages = (super.python3.override {
packageOverrides = lib.const (pysuper: {
certifi = pysuper.certifi.overridePythonAttrs (attrs: {
postPatch = (attrs.postPatch or "") + ''

67
nixos/tests/cfssl.nix Normal file
View File

@ -0,0 +1,67 @@
import ./make-test.nix ({ pkgs, ...} : {
name = "cfssl";
machine = { config, lib, pkgs, ... }:
{
networking.firewall.allowedTCPPorts = [ config.services.cfssl.port ];
services.cfssl.enable = true;
systemd.services.cfssl.after = [ "cfssl-init.service" ];
systemd.services.cfssl-init = {
description = "Initialize the cfssl CA";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
User = "cfssl";
Type = "oneshot";
WorkingDirectory = config.services.cfssl.dataDir;
};
script = with pkgs; ''
${cfssl}/bin/cfssl genkey -initca ${pkgs.writeText "ca.json" (builtins.toJSON {
hosts = [ "ca.example.com" ];
key = {
algo = "rsa"; size = 4096; };
names = [
{
C = "US";
L = "San Francisco";
O = "Internet Widgets, LLC";
OU = "Certificate Authority";
ST = "California";
}
];
})} | ${cfssl}/bin/cfssljson -bare ca
'';
};
};
testScript =
let
cfsslrequest = with pkgs; writeScript "cfsslrequest" ''
curl -X POST -H "Content-Type: application/json" -d @${csr} \
http://localhost:8888/api/v1/cfssl/newkey | ${cfssl}/bin/cfssljson /tmp/certificate
'';
csr = pkgs.writeText "csr.json" (builtins.toJSON {
CN = "www.example.com";
hosts = [ "example.com" "www.example.com" ];
key = {
algo = "rsa";
size = 2048;
};
names = [
{
C = "US";
L = "San Francisco";
O = "Example Company, LLC";
OU = "Operations";
ST = "California";
}
];
});
in
''
$machine->waitForUnit('cfssl.service');
$machine->waitUntilSucceeds('${cfsslrequest}');
$machine->succeed('ls /tmp/certificate-key.pem');
'';
})

View File

@ -15,6 +15,7 @@ import ./make-test.nix ({ pkgs, ...} : {
services.xserver.displayManager.lightdm.autoLogin.enable = true;
services.xserver.displayManager.lightdm.autoLogin.user = "alice";
services.xserver.desktopManager.gnome3.enable = true;
services.xserver.desktopManager.default = "gnome";
virtualisation.memorySize = 1024;
};

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ ... } :
import ./make-test.nix ({ pkgs, ... } :
{
name = "graphite";
nodes = {
@ -11,10 +11,12 @@ import ./make-test.nix ({ ... } :
api = {
enable = true;
port = 8082;
finders = [ pkgs.python27Packages.influxgraph ];
};
carbon.enableCache = true;
seyren.enable = true;
pager.enable = true;
beacon.enable = true;
};
};
};
@ -25,6 +27,7 @@ import ./make-test.nix ({ ... } :
$one->waitForUnit("graphiteWeb.service");
$one->waitForUnit("graphiteApi.service");
$one->waitForUnit("graphitePager.service");
$one->waitForUnit("graphite-beacon.service");
$one->waitForUnit("carbonCache.service");
$one->waitForUnit("seyren.service");
# The services above are of type "simple". systemd considers them active immediately

View File

@ -19,8 +19,12 @@ import ./make-test.nix ({ pkgs, ...} : {
startAll;
$netdata->waitForUnit("netdata.service");
# check if netdata can read disk ops for root owned processes.
# if > 0, successful. verifies both netdata working and
# check if the netdata main page loads.
$netdata->succeed("curl --fail http://localhost:19999/");
# check if netdata can read disk ops for root owned processes.
# if > 0, successful. verifies both netdata working and
# apps.plugin has elevated capabilities.
my $cmd = <<'CMD';
curl -s http://localhost:19999/api/v1/data\?chart=users.pwrites | \

View File

@ -86,6 +86,7 @@ rec {
};
parity = callPackage ./parity { };
parity-beta = callPackage ./parity/beta.nix { };
parity-ui = callPackage ./parity-ui { };
particl-core = callPackage ./particl/particl-core.nix { boost = boost165; miniupnpc = miniupnpc_2; };

View File

@ -0,0 +1,7 @@
let
version = "2.0.1";
sha256 = "0rfq0izpswfwbyvr5kb6zjyf6sd7l1706c0sp7ccy6ykdfb4v6zs";
cargoSha256 = "1ij17bfwvikqi5aj71j1nwf3jhkf3y9a0kwydajviwal47p9grl9";
patches = [ ./patches/vendored-sources-2.0.patch ];
in
import ./parity.nix { inherit version sha256 cargoSha256 patches; }

View File

@ -1,7 +1,7 @@
let
version = "1.10.9";
sha256 = "1irfksx887vvvdf97q26qacn22kmyj8fgb3ghh9wv5qnzrn3564g";
cargoSha256 = "0rzhabyhprmcg0cdmibbb8zgqf6z4izsdq8m060mppkkv675x0lf";
patches = [ ./patches/vendored-sources-1.10.patch ];
version = "1.11.8";
sha256 = "0qk5vl8ql3pr9pz5iz7whahwqi1fcbsf8kphn6z4grgc87id7b19";
cargoSha256 = "0p2idd36cyzp2ax81k533bdma4hz0ws2981qj2s7jnhvmj4941l8";
patches = [ ./patches/vendored-sources-1.11.patch ];
in
import ./parity.nix { inherit version sha256 cargoSha256 patches; }

View File

@ -10,6 +10,8 @@
, pkgconfig
, openssl
, systemd
, cmake
, perl
}:
rustPlatform.buildRustPackage rec {
@ -18,12 +20,15 @@ rustPlatform.buildRustPackage rec {
src = fetchFromGitHub {
owner = "paritytech";
repo = "parity";
repo = "parity-ethereum";
rev = "v${version}";
inherit sha256;
};
buildInputs = [ pkgconfig systemd.lib systemd.dev openssl openssl.dev ];
buildInputs = [
pkgconfig cmake perl
systemd.lib systemd.dev openssl openssl.dev
];
# Some checks failed
doCheck = false;

View File

@ -1,5 +1,5 @@
diff --git a/.cargo/config b/.cargo/config
index 72652ad2f..b21c6aa7b 100644
index 72652ad2f..57c5c2f8f 100644
--- a/.cargo/config
+++ b/.cargo/config
@@ -1,3 +1,108 @@
@ -52,19 +52,19 @@ index 72652ad2f..b21c6aa7b 100644
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/daemonize"]
+git = "https://github.com/paritytech/daemonize"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/hidapi-rs"]
+git = "https://github.com/paritytech/hidapi-rs"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/hyper"]
+git = "https://github.com/paritytech/hyper"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/jsonrpc.git"]
+git = "https://github.com/paritytech/jsonrpc.git"
+branch = "parity-1.10"
+branch = "parity-1.11"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/libusb-rs"]
@ -77,6 +77,11 @@ index 72652ad2f..b21c6aa7b 100644
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/ring"]
+git = "https://github.com/paritytech/ring"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/rust-ctrlc.git"]
+git = "https://github.com/paritytech/rust-ctrlc.git"
+branch = "master"
@ -102,13 +107,7 @@ index 72652ad2f..b21c6aa7b 100644
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/tailhook/rotor"]
+git = "https://github.com/tailhook/rotor"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/tomusdrw/ws-rs"]
+git = "https://github.com/tomusdrw/ws-rs"
+branch = "master"
+replace-with = "vendored-sources"
+

View File

@ -0,0 +1,98 @@
diff --git a/.cargo/config b/.cargo/config
index 72652ad2f..3c0eca89a 100644
--- a/.cargo/config
+++ b/.cargo/config
@@ -1,3 +1,93 @@
[target.x86_64-pc-windows-msvc]
# Link the C runtime statically ; https://github.com/paritytech/parity/issues/6643
rustflags = ["-Ctarget-feature=+crt-static"]
+
+[source."https://github.com/alexcrichton/mio-named-pipes"]
+git = "https://github.com/alexcrichton/mio-named-pipes"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/nikvolf/parity-tokio-ipc"]
+git = "https://github.com/nikvolf/parity-tokio-ipc"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/nikvolf/tokio-named-pipes"]
+git = "https://github.com/nikvolf/tokio-named-pipes"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/app-dirs-rs"]
+git = "https://github.com/paritytech/app-dirs-rs"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/bn"]
+git = "https://github.com/paritytech/bn"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/daemonize"]
+git = "https://github.com/paritytech/daemonize"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/hidapi-rs"]
+git = "https://github.com/paritytech/hidapi-rs"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/jsonrpc.git"]
+git = "https://github.com/paritytech/jsonrpc.git"
+branch = "parity-1.11"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/libusb-rs"]
+git = "https://github.com/paritytech/libusb-rs"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/libusb-sys"]
+git = "https://github.com/paritytech/libusb-sys"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/parity-common"]
+git = "https://github.com/paritytech/parity-common"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/ring"]
+git = "https://github.com/paritytech/ring"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/rust-ctrlc.git"]
+git = "https://github.com/paritytech/rust-ctrlc.git"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/rust-rocksdb"]
+git = "https://github.com/paritytech/rust-rocksdb"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/rust-secp256k1"]
+git = "https://github.com/paritytech/rust-secp256k1"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/rust-snappy"]
+git = "https://github.com/paritytech/rust-snappy"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/paritytech/trezor-sys"]
+git = "https://github.com/paritytech/trezor-sys"
+branch = "master"
+replace-with = "vendored-sources"
+
+[source."https://github.com/tomusdrw/ws-rs"]
+git = "https://github.com/tomusdrw/ws-rs"
+branch = "master"
+replace-with = "vendored-sources"

View File

@ -1,4 +1,4 @@
{ stdenv, fetchFromGitHub, cairo, fftw, gtkmm2, lv2, lvtk, pkgconfig, python }:
{ stdenv, fetchFromGitHub, cairo, fftw, gtkmm2, lv2, lvtk, pkgconfig, python3 }:
stdenv.mkDerivation rec {
name = "ams-lv2-${version}";
@ -12,13 +12,13 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ cairo fftw gtkmm2 lv2 lvtk python ];
buildInputs = [ cairo fftw gtkmm2 lv2 lvtk ];
configurePhase = "python waf configure --prefix=$out";
configurePhase = "${python3.interpreter} waf configure --prefix=$out";
buildPhase = "python waf";
buildPhase = "${python3.interpreter} waf";
installPhase = "python waf install";
installPhase = "${python3.interpreter} waf install";
meta = with stdenv.lib; {
description = "An LV2 port of the internal modules found in Alsa Modular Synth";

View File

@ -0,0 +1,65 @@
{ stdenv
, fetchurl
, pkgconfig
, qtbase
, makeWrapper
, jack2Full
, python3Packages
, a2jmidid
}:
stdenv.mkDerivation rec {
version = "0.9.0";
name = "cadence";
src = fetchurl {
url = "https://github.com/falkTX/Cadence/archive/v${version}.tar.gz";
sha256 = "07z1mnb0bmldb3i31bgw816pnvlvr9gawr51rpx3mhixg5wpiqzb";
};
buildInputs = [
makeWrapper
pkgconfig
qtbase
];
apps = [
"cadence"
"cadence-jacksettings"
"cadence-pulse2loopback"
"claudia"
"cadence-aloop-daemon"
"cadence-logs"
"cadence-render"
"catarina"
"claudia-launcher"
"cadence-pulse2jack"
"cadence-session-start"
"catia"
];
makeFlags = ''
PREFIX=""
DESTDIR=$(out)
'';
propagatedBuildInputs = with python3Packages; [ pyqt5 ];
postInstall = ''
# replace with our own wrappers.
for app in $apps; do
rm $out/bin/$app
makeWrapper ${python3Packages.python.interpreter} $out/bin/$app \
--set PYTHONPATH "$PYTHONPATH:$out/share/cadence" \
--add-flags "-O $out/share/cadence/src/$app.py"
done
'';
meta = {
homepage = https://github.com/falkTX/Cadence/;
description = "Collection of tools useful for audio production";
license = stdenv.lib.licenses.mit;
maintainers = with stdenv.lib.maintainers; [ genesis ];
platforms = stdenv.lib.platforms.linux;
};
}

View File

@ -0,0 +1,81 @@
{ stdenv, fetchurl, autoPatchelfHook, makeWrapper
, alsaLib, xorg
, fetchFromGitHub, pkgconfig, gnome3
, gnome2, gdk_pixbuf, cairo, glib, freetype
, libpulseaudio
}:
let
libSwell = stdenv.mkDerivation {
name = "libSwell";
src = fetchFromGitHub {
owner = "justinfrankel";
repo = "WDL";
rev = "e87f5bdee7327b63398366fde6ec0a3f08bf600d";
sha256 = "147idjqc6nc23w9krl8a9w571k5jx190z3id6ir6cr8zsx0lakdb";
};
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ gnome3.gtk ];
buildPhase = ''
cd WDL/swell
make
'';
installPhase = ''
mv libSwell.so $out
'';
};
in stdenv.mkDerivation rec {
name = "reaper-${version}";
version = "5.94";
src = fetchurl {
url = "https://www.reaper.fm/files/${stdenv.lib.versions.major version}.x/reaper${builtins.replaceStrings ["."] [""] version}_linux_x86_64.tar.xz";
sha256 = "16g5q12wh1cfbl9wq03vb7vpsd870k7i7883z0wn492x7y9syz8z";
};
nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
buildInputs = [
alsaLib
stdenv.cc.cc.lib
xorg.libX11
xorg.libXi
gnome3.gtk
gdk_pixbuf
gnome2.pango
cairo
glib
freetype
];
dontBuild = true;
installPhase = ''
./install-reaper.sh --install $out/opt
rm $out/opt/REAPER/uninstall-reaper.sh
cp ${libSwell.out} $out/opt/REAPER/libSwell.so
wrapProgram $out/opt/REAPER/reaper \
--prefix LD_LIBRARY_PATH : ${libpulseaudio}/lib
mkdir $out/bin
ln -s $out/opt/REAPER/reaper $out/bin/
ln -s $out/opt/REAPER/reamote-server $out/bin/
'';
meta = with stdenv.lib; {
description = "Digital audio workstation";
homepage = https://www.reaper.fm/;
license = licenses.unfree;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ jfrankenau ];
};
}

View File

@ -1,13 +1,18 @@
{ fetchurl, stdenv, dpkg, xorg, alsaLib, makeWrapper, openssl, freetype
{ fetchurl, stdenv, squashfsTools, xorg, alsaLib, makeWrapper, openssl, freetype
, glib, pango, cairo, atk, gdk_pixbuf, gtk2, cups, nspr, nss, libpng
, libgcrypt, systemd, fontconfig, dbus, expat, ffmpeg_0_10, curl, zlib, gnome3 }:
let
# Please update the stable branch!
# Latest version number can be found at:
# http://repository-origin.spotify.com/pool/non-free/s/spotify-client/
# Be careful not to pick the testing version.
version = "1.0.80.480.g51b03ac3-13";
# "rev" decides what is actually being downloaded
version = "1.0.80.474.gef6b503e-7";
# To get the latest stable revision:
# curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=stable' | jq '.download_url,.version,.last_updated'
# To get general information:
# curl -H 'Snap-Device-Series: 16' 'https://api.snapcraft.io/v2/snaps/info/spotify' | jq '.'
# More exapmles of api usage:
# https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py
rev = "16";
deps = [
alsaLib
@ -49,12 +54,20 @@ in
stdenv.mkDerivation {
name = "spotify-${version}";
# fetch from snapcraft instead of the debian repository most repos fetch from.
# That is a bit more cumbersome. But the debian repository only keeps the last
# two versions, while snapcraft should provide versions indefinately:
# https://forum.snapcraft.io/t/how-can-a-developer-remove-her-his-app-from-snap-store/512
# This is the next-best thing, since we're not allowed to re-distribute
# spotify ourselves:
# https://community.spotify.com/t5/Desktop-Linux/Redistribute-Spotify-on-Linux-Distributions/td-p/1695334
src = fetchurl {
url = "https://repository-origin.spotify.com/pool/non-free/s/spotify-client/spotify-client_${version}_amd64.deb";
sha256 = "e32f4816ae79dbfa0c14086e76df3bc83d526402aac1dbba534127fc00fe50ea";
url = "https://api.snapcraft.io/api/v1/snaps/download/pOBIoZ2LrCB3rDohMxoYGnbN14EHOgD7_${rev}.snap";
sha512 = "45b7ab574b30fb368e0b6f4dd60addbfd1ddc02173b4f98b31c524eed49073432352a361e75959ce8e2f752231e93c79ca1b538c4bd295c935d1e2e0585d147f";
};
buildInputs = [ dpkg makeWrapper ];
buildInputs = [ squashfsTools makeWrapper ];
doConfigure = false;
doBuild = false;
@ -63,7 +76,23 @@ stdenv.mkDerivation {
unpackPhase = ''
runHook preUnpack
dpkg-deb -x $src .
unsquashfs "$src" '/usr/share/spotify' '/usr/bin/spotify' '/meta/snap.yaml'
cd squashfs-root
if ! grep -q 'grade: stable' meta/snap.yaml; then
# Unfortunately this check is not reliable: At the moment (2018-07-26) the
# latest version in the "edge" channel is also marked as stable.
echo "The snap package is marked as unstable:"
grep 'grade: ' meta/snap.yaml
echo "You probably chose the wrong revision."
exit 1
fi
if ! grep -q '${version}' meta/snap.yaml; then
echo "Package version differs from version found in snap metadata:"
grep 'version: ' meta/snap.yaml
echo "While the nix package specifies: ${version}."
echo "You probably chose the wrong revision or forgot to update the nix version."
exit 1
fi
runHook postUnpack
'';
@ -75,6 +104,8 @@ stdenv.mkDerivation {
mkdir -p $libdir
mv ./usr/* $out/
cp meta/snap.yaml $out
# Work around Spotify referring to a specific minor version of
# OpenSSL.

View File

@ -0,0 +1,49 @@
channel="stable" # stable/candidate/edge
nixpkgs="$(git rev-parse --show-toplevel)"
spotify_nix="$nixpkgs/pkgs/applications/audio/spotify/default.nix"
# create bash array from snap info
snap_info=($(
curl -H 'X-Ubuntu-Series: 16' \
"https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=$channel" \
| jq --raw-output \
'.revision,.download_sha512,.version,.last_updated'
))
revision="${snap_info[0]}"
sha512="${snap_info[1]}"
version="${snap_info[2]}"
last_updated="${snap_info[3]}"
# find the last commited version
version_pre=$(
git grep 'version\s*=' HEAD "$spotify_nix" \
| sed -Ene 's/.*"(.*)".*/\1/p'
)
if [[ "$version_pre" = "$version" ]]; then
echo "Spotify is already up ot date"
exit 0
fi
echo "Updating from ${version_pre} to ${version}, released on ${last_updated}"
# search-andreplace revision, hash and version
sed --regexp-extended \
-e 's/rev\s*=\s*"[0-9]+"\s*;/rev = "'"${revision}"'";/' \
-e 's/sha512\s*=\s*".{128}"\s*;/sha512 = "'"${sha512}"'";/' \
-e 's/version\s*=\s*".*"\s*;/version = "'"${version}"'";/' \
-i "$spotify_nix"
if ! nix-build -A spotify "$nixpkgs"; then
echo "The updated spotify failed to build."
exit 1
fi
git add "$spotify_nix"
# show diff for review
git diff HEAD
# prepare commit message, but allow edit
git commit --edit --message "spotify: $version_pre -> $version"

View File

@ -1,4 +1,4 @@
{ channel, pname, version, build, sha256Hash, deprecated ? false }:
{ channel, pname, version, build, sha256Hash }:
{ bash
, buildFHSUserEnv
@ -37,18 +37,6 @@
}:
let
# TODO: This is a bit stupid to be honest...
# The problem is that we have to make sure this is only executed if the
# derivation is actually build to avoid always printing this warning (e.g.
# "nix-env -qaP"). Since this will always evaluate to "" it won't actually
# change the derivation (only generate a side-effect) but we have to make
# sure this expression is evaluated lazily!
printDeprecationWarning = if deprecated then (builtins.trace ''
android-studio-preview and androidStudioPackages.preview are old aliases
and will be dropped at some point, please use androidStudioPackages.beta
instead (corresponds to the correct channel name).''
"")
else "";
drvName = "android-studio-${channel}-${version}";
androidStudio = stdenv.mkDerivation {
name = drvName;
@ -142,7 +130,7 @@ in
text = ''
#!${bash}/bin/bash
${fhsEnv}/bin/${drvName}-fhs-env ${androidStudio}/bin/studio.sh
'' + printDeprecationWarning;
'';
} // {
meta = with stdenv.lib; {
description = "The Official IDE for Android (${channel} channel)";

View File

@ -18,17 +18,13 @@ let
sha256Hash = "016nyn1pqviy089hg0dq7m4cqb39fdxdcy4zknkaq7dmgv1dj6x9";
};
latestVersion = { # canary & dev
version = "3.3.0.2"; # "Android Studio 3.3 Canary 3"
build = "181.4884283";
sha256Hash = "0r93yzw87cgzz60p60gknij5vaqmv1a1kyd4cr9gx8cbxw46lhwh";
version = "3.3.0.3"; # "Android Studio 3.3 Canary 4"
build = "182.4924367";
sha256Hash = "03fxjxlsbrpklsss1nvlkb41skr5ymmq9vdns8iikcm1ng925vfd";
};
in rec {
# TODO: Drop old alias after 18.09
preview = mkStudio (betaVersion // {
channel = "beta";
pname = "android-studio-preview";
deprecated = true;
});
# Old alias
preview = beta;
# Attributes are named by their corresponding release channels

View File

@ -1,4 +1,4 @@
{ stdenv, pkgs, fetchurl, makeWrapper, gvfs, atomEnv}:
{ stdenv, pkgs, fetchurl, makeWrapper, wrapGAppsHook, gvfs, gtk3, atomEnv }:
let
common = pname: {version, sha256, beta ? null}:
@ -14,7 +14,19 @@ let
inherit sha256;
};
nativeBuildInputs = [ makeWrapper ];
nativeBuildInputs = [
wrapGAppsHook # Fix error: GLib-GIO-ERROR **: No GSettings schemas are installed on the system
];
buildInputs = [
gtk3 # Fix error: GLib-GIO-ERROR **: Settings schema 'org.gtk.Settings.FileChooser' is not installed
];
preFixup = ''
gappsWrapperArgs+=(
--prefix "PATH" : "${gvfs}/bin" \
)
'';
buildCommand = ''
mkdir -p $out/usr/
@ -25,9 +37,6 @@ let
rm -r $out/share/lintian
rm -r $out/usr/
sed -i "s/${pname})/.${pname}-wrapped)/" $out/bin/${pname}
# sed -i "s/'${pname}'/'.${pname}-wrapped'/" $out/bin/${pname}
wrapProgram $out/bin/${pname} \
--prefix "PATH" : "${gvfs}/bin"
fixupPhase

View File

@ -5,7 +5,7 @@
}:
stdenv.mkDerivation rec {
name = "qgis-2.18.20";
name = "qgis-2.18.22";
buildInputs = [ gdal qt4 flex openssl bison proj geos xlibsWrapper sqlite gsl qwt qscintilla
fcgi libspatialindex libspatialite postgresql qjson qca2 txt2tags pkgconfig ]
@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "https://qgis.org/downloads/${name}.tar.bz2";
sha256 = "0bm9sv268lc3v48zjypsjjs62xnyb7zabzrms4jsy020waz6sk9g";
sha256 = "00b3a2hfn3i7bdx7x96vz2nj0976vpkhid4ss7n8c33fdvw3k82a";
};
# CMAKE_FIND_FRAMEWORK=never stops the installer choosing system

View File

@ -12,14 +12,14 @@ let
};
in
stdenv.mkDerivation rec {
version = "1.0";
version = "1.1";
name = "renderdoc-${version}";
src = fetchFromGitHub {
owner = "baldurk";
repo = "renderdoc";
rev = "v${version}";
sha256 = "0l7pjxfrly4llryjnwk42dzx65n78wc98h56qm4yh04ja8fdbx2y";
sha256 = "0kb9m1dm0mnglqyh1srvl0f1bgjghxzbqarn0xfqw49wphqwhmcd";
};
buildInputs = [

View File

@ -1,7 +1,8 @@
{ stdenv, fetchFromGitHub, pythonPackages }:
{ stdenv, fetchFromGitHub, python3Packages }:
pythonPackages.buildPythonApplication rec {
name = "antfs-cli-unstable-2017-02-11";
python3Packages.buildPythonApplication rec {
pname = "antfs-cli";
version = "unstable-2017-02-11";
meta = with stdenv.lib; {
homepage = https://github.com/Tigge/antfs-cli;
@ -17,5 +18,5 @@ pythonPackages.buildPythonApplication rec {
sha256 = "0v8y64kldfbs809j1g9d75dd1vxq7mfxnp4b45pz8anpxhjf64fy";
};
propagatedBuildInputs = [ pythonPackages.openant ];
propagatedBuildInputs = [ python3Packages.openant ];
}

View File

@ -1,19 +1,19 @@
{ stdenv, fetchFromGitHub, rustPlatform, cmake, CoreServices, cf-private }:
{ stdenv, fetchFromGitHub, rustPlatform, cmake, pkgconfig, openssl, CoreServices, cf-private }:
rustPlatform.buildRustPackage rec {
name = "gutenberg-${version}";
version = "0.3.4";
version = "0.4.0";
src = fetchFromGitHub {
owner = "Keats";
repo = "gutenberg";
rev = "v${version}";
sha256 = "1v26q1m3bx7mdmmwgd6p601ncf13rr4rrx9s06fiy8vnd0ar1vlf";
sha256 = "1i2jcyq6afswxyjifhl5irv84licsad7c83yiy17454mplvrmyg2";
};
cargoSha256 = "0cdy0wvibkpnmlqwxvn02a2k2vqy6zdqzflj2dh6g1cjbz1j8qh5";
cargoSha256 = "0hzxwvb5m8mvpfxys4ikkaag6khflh5bfglmay11wf6ayighv834";
nativeBuildInputs = [ cmake ];
nativeBuildInputs = [ cmake pkgconfig openssl ];
buildInputs = stdenv.lib.optionals stdenv.isDarwin [ CoreServices cf-private ];
postInstall = ''

View File

@ -2,7 +2,7 @@
buildGoPackage rec {
name = "hugo-${version}";
version = "0.42.1";
version = "0.46";
goPackagePath = "github.com/gohugoio/hugo";
@ -10,11 +10,13 @@ buildGoPackage rec {
owner = "gohugoio";
repo = "hugo";
rev = "v${version}";
sha256 = "17m8bkldvnd7yyzxi4rc8vv3qfypjzik38bjy4qavb7sjdjmfij9";
sha256 = "0w5xkb6s03hprb4v151gdk8zzsgvy0i406363j1w03bic8ajwgmj";
};
goDeps = ./deps.nix;
buildFlags = "-tags extended";
postInstall = ''
rm $bin/bin/generate
'';

View File

@ -1,5 +1,14 @@
# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
[
{
goPackagePath = "github.com/BurntSushi/locker";
fetch = {
type = "git";
url = "https://github.com/BurntSushi/locker";
rev = "a6e239ea1c69bff1cfdb20c4b73dadf52f784b6a";
sha256 = "1xak4aync4klswq5217qvw191asgla51jr42y94vp109lirm5dzg";
};
}
{
goPackagePath = "github.com/BurntSushi/toml";
fetch = {
@ -32,8 +41,8 @@
fetch = {
type = "git";
url = "https://github.com/alecthomas/chroma";
rev = "d7b2ed20a4989ab604703f61f86523560f8a6a87";
sha256 = "0ni2ncck787sxk9gl14xnyjnw4y27ipypjf4kc00g635fvc64ik6";
rev = "5d7fef2ae60b501bbf28d476c3f273b8017d8261";
sha256 = "150jv4vhsdi1gj3liwkgicdrwnzgv5qkq2fwznlnzf64vmfb0b9f";
};
}
{
@ -50,8 +59,17 @@
fetch = {
type = "git";
url = "https://github.com/bep/gitmap";
rev = "012701e8669671499fc43e9792335a1dcbfe2afb";
sha256 = "10ixv4zwmrpxvpchws78yzsjvw1zplljw3iqvwpina2mkwwp71ql";
rev = "ecb6fe06dbfd6bb4225e7fda7dc15612ecc8d960";
sha256 = "0zqdl5h4ayi2gi5aqf35f1sjszhbcriksm2bf84fkrg7ngr48jn6";
};
}
{
goPackagePath = "github.com/bep/go-tocss";
fetch = {
type = "git";
url = "https://github.com/bep/go-tocss";
rev = "2abb118dc8688b6c7df44e12f4152c2bded9b19c";
sha256 = "12q7h6nydklq4kg65kcgd85209rx7zf64ba6nf3k7y16knj4233q";
};
}
{
@ -68,8 +86,8 @@
fetch = {
type = "git";
url = "https://github.com/cpuguy83/go-md2man";
rev = "48d8747a2ca13185e7cc8efe6e9fc196a83f71a5";
sha256 = "01hpll16rvxhnvv35vs3z8p51x54c5jyl1gjdm0g7kwfwp2chvjx";
rev = "691ee98543af2f262f35fbb54bdd42f00b9b9cc5";
sha256 = "1864g10y9n6ni0p1yqjhvwyjdh0lgxnf7dlb0c4njazdg5rppww9";
};
}
{
@ -86,8 +104,8 @@
fetch = {
type = "git";
url = "https://github.com/disintegration/imaging";
rev = "5e63c9a565d0a3260d23d060a795783dab90fefe";
sha256 = "1mmiz439lygi30dj1rbps57iqh762jkinnpb4wfl382v4h136qvp";
rev = "8021a62ea0dfe0ed2e6107f5ccd37e0d4a92a996";
sha256 = "1c32sqfz78g9wxvpng8n9r404lf2lgjn9b24mg8y3rxylx29gks7";
};
}
{
@ -176,8 +194,8 @@
fetch = {
type = "git";
url = "https://github.com/jdkato/prose";
rev = "e27abfd3f31b84c37bbce37179b0428fcb1384be";
sha256 = "04rjqh3jdxaqr9czp4vcj14hqfv7yppv4nb7ynb04c9jcq23ajw7";
rev = "99216ea17cba4e2f2a4e8bca778643e5a529b7aa";
sha256 = "1mdh276lmj21jbi22ky8ngdsl9hfcdv6czshycbaiwjr5y9cv7bn";
};
}
{
@ -234,13 +252,22 @@
sha256 = "0hlqcwx6qqgy3vs13r10wn0d9x0xmww1v9jm09y2dp1ykgbampnk";
};
}
{
goPackagePath = "github.com/mitchellh/hashstructure";
fetch = {
type = "git";
url = "https://github.com/mitchellh/hashstructure";
rev = "2bca23e0e452137f789efbc8610126fd8b94f73b";
sha256 = "0vpacsls26474wya360fjhzi6l4y8s8s251c4szvqxh17n5f5gk1";
};
}
{
goPackagePath = "github.com/mitchellh/mapstructure";
fetch = {
type = "git";
url = "https://github.com/mitchellh/mapstructure";
rev = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b";
sha256 = "1aqk9qr46bwgdc5j7n7als61xvssvyjf4qzfsvhacl4izpygqnw7";
rev = "f15292f7a699fcc1a38a80977f80a046874ba8ac";
sha256 = "0zm3nhdvmj3f8q0vg2sjfw1sm3pwsw0ggz501awz95w99664a8al";
};
}
{
@ -257,8 +284,8 @@
fetch = {
type = "git";
url = "https://github.com/nicksnyder/go-i18n";
rev = "f6ac3d9cf0c4b6a32527779e992ebde26bd3d948";
sha256 = "1vg25khaf7lr90xwf97bsyn873cdi1j7nxh68s80jrg2a86zw0ff";
rev = "461e8b98df7454b4cb46a1611a6734f05ee331d0";
sha256 = "0aq1q06y6azsi6mfmary5xs7gmmg8fh8lhx1wbpdlqk11asm9rq0";
};
}
{
@ -275,8 +302,8 @@
fetch = {
type = "git";
url = "https://github.com/pelletier/go-toml";
rev = "c01d1270ff3e442a8a57cddc1c92dc1138598194";
sha256 = "1fjzpcjng60mc3a4b2ql5a00d5gah84wj740dabv9kq67mpg8fxy";
rev = "c2dbbc24a97911339e01bda0b8cabdbd8f13b602";
sha256 = "0v1dsqnk5zmn6ir8jgxijx14s47jvijlqfz3aq435snfrgybd5rz";
};
}
{
@ -320,8 +347,8 @@
fetch = {
type = "git";
url = "https://github.com/spf13/cobra";
rev = "1e58aa3361fd650121dceeedc399e7189c05674a";
sha256 = "1d6dy60dw7i2mcab10yp99wi5w28jzhzzf16w4ys6bna7ymndiin";
rev = "7c4570c3ebeb8129a1f7456d0908a8b676b6f9f1";
sha256 = "16amh0prlzqrrbg5j629sg0f688nfzfgn9sair8jyybqampr3wc7";
};
}
{
@ -365,8 +392,35 @@
fetch = {
type = "git";
url = "https://github.com/spf13/viper";
rev = "15738813a09db5c8e5b60a19d67d3f9bd38da3a4";
sha256 = "1mjfzg8zvnxckaq6l8gw99i2msrfqn9yr04dc3b7kd5bpxi6zr4v";
rev = "d493c32b69b8c6f2377bf30bc4d70267ffbc0793";
sha256 = "1jq46790rkjn6c1887wz98dqjk792ij6wnrifzk1maglmfb061hh";
};
}
{
goPackagePath = "github.com/tdewolff/minify";
fetch = {
type = "git";
url = "https://github.com/tdewolff/minify";
rev = "cf3a1790b606e292e4a0ee82e949a4f0d1c7617d";
sha256 = "1r496149l5iqzxkfcbll5dqcqxy4a7jjxvzm62c8hrybmwj574kn";
};
}
{
goPackagePath = "github.com/tdewolff/parse";
fetch = {
type = "git";
url = "https://github.com/tdewolff/parse";
rev = "4ceb50b40fad068875f5b093c5df0619012dc544";
sha256 = "1ap76hdiabn41r7zxc7nq3n3ld7zqf97jaf71zlzzjrphi3fwrg1";
};
}
{
goPackagePath = "github.com/wellington/go-libsass";
fetch = {
type = "git";
url = "https://github.com/wellington/go-libsass";
rev = "615eaa47ef794d037c1906a0eb7bf85375a5decf";
sha256 = "0imjiskn4vq7nml5jwb1scgl61jg53cfpkjnb9rsc6m8gsd8s16s";
};
}
{
@ -374,8 +428,8 @@
fetch = {
type = "git";
url = "https://github.com/yosssi/ace";
rev = "ea038f4770b6746c3f8f84f14fa60d9fe1205b56";
sha256 = "1kbvbc56grrpnl65grygd23gyn3nkkhxdg8awhzkjmd0cvki8w1f";
rev = "2b21b56204aee785bf8d500c3f9dcbe3ed7d4515";
sha256 = "0cgpq1zdnh8l8zsn9w63asc9k7cm6k4qvjgrb4hr1106h8fjwfma";
};
}
{
@ -383,8 +437,8 @@
fetch = {
type = "git";
url = "https://go.googlesource.com/image";
rev = "af66defab954cb421ca110193eed9477c8541e2a";
sha256 = "0dgi7svwzs37c7m5dz2jig3xr45fyjihhr8cg0x8nc8sc8fsyq4h";
rev = "c73c2afc3b812cdd6385de5a50616511c4a3d458";
sha256 = "1kkafy29vz5xf6r29ghbvvbwrgjxwxvzk6dsa2qhyp1ddk6l2vkz";
};
}
{
@ -392,8 +446,8 @@
fetch = {
type = "git";
url = "https://go.googlesource.com/net";
rev = "db08ff08e8622530d9ed3a0e8ac279f6d4c02196";
sha256 = "1f6q8kbijnrfy6wjqxrzgjf38ippckc5w34lhqsjs7kq045aar9a";
rev = "f4c29de78a2a91c00474a2e689954305c350adf9";
sha256 = "02nibjrr1il8sxnr0w1s5fj7gz6ayhg3hsywf948qhc68n5adv8x";
};
}
{
@ -410,8 +464,8 @@
fetch = {
type = "git";
url = "https://go.googlesource.com/sys";
rev = "6c888cc515d3ed83fc103cf1d84468aad274b0a7";
sha256 = "18anqrdajp4p015v3f5y641k3lmgp2jr0lfyx0pb3ia0qvn93mrp";
rev = "3dc4335d56c789b04b0ba99b7a37249d9b614314";
sha256 = "1105b7jqzz8g2bfkdbkj2pdzq4vhfmhm42khir88vjqfd1l7ha31";
};
}
{
@ -419,8 +473,8 @@
fetch = {
type = "git";
url = "https://go.googlesource.com/text";
rev = "5c1cf69b5978e5a34c5f9ba09a83e56acc4b7877";
sha256 = "03br8p1sb1ffr02l8hyrgcyib7ms0z06wy3v4r1dj2l6q4ghwzfs";
rev = "96e34ec0e18a62a1e59880c7bf617b655efecb66";
sha256 = "1n1p5zz0vyvlhac40hxml6c5xwpsw8rjx1pbls9381a0s19ncbdg";
};
}
{

View File

@ -1,14 +1,14 @@
{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig, libusb1, rtl-sdr }:
stdenv.mkDerivation rec {
version = "2018-02-23";
version = "18.05";
name = "rtl_433-${version}";
src = fetchFromGitHub {
owner = "merbanan";
repo = "rtl_433";
rev = "51d275c";
sha256 = "1j443wmws5xgc18s47bvw3pqljk747izypz52rmlrvs16v96cg2g";
rev = "18.05";
sha256 = "0vfhnjyrx6w1m8g1hww5vdz4zgdlhcaps9g0397mxlki4sm77wpc";
};
nativeBuildInputs = [ autoreconfHook pkgconfig ];

View File

@ -9,15 +9,17 @@
with lib;
let
version = "3.9.0";
version = "3.10.0";
ver = stdenv.lib.elemAt (stdenv.lib.splitString "." version);
versionMajor = ver 0;
versionMinor = ver 1;
versionPatch = ver 2;
gitCommit = "191fece";
gitCommit = "dd10d17";
# version is in vendor/k8s.io/kubernetes/pkg/version/base.go
k8sversion = "v1.9.1";
k8sgitcommit = "a0ce1bc657";
k8sversion = "v1.10.0";
k8sgitcommit = "b81c8f8";
k8sgitMajor = "0";
k8sgitMinor = "1";
in stdenv.mkDerivation rec {
name = "openshift-origin-${version}";
inherit version;
@ -26,7 +28,7 @@ in stdenv.mkDerivation rec {
owner = "openshift";
repo = "origin";
rev = "v${version}";
sha256 = "06k0zilfyvll7z34yirraslgpwgah9k6y5i6wgi7f00a79k76k78";
sha256 = "13aglz005jl48z17vnggkvr39l5h6jcqgkfyvkaz4c3jakms1hi9";
};
# go > 1.10
@ -38,15 +40,15 @@ in stdenv.mkDerivation rec {
patchPhase = ''
patchShebangs ./hack
substituteInPlace pkg/oc/bootstrap/docker/host/host.go \
substituteInPlace pkg/oc/clusterup/docker/host/host.go \
--replace 'nsenter --mount=/rootfs/proc/1/ns/mnt findmnt' \
'nsenter --mount=/rootfs/proc/1/ns/mnt ${utillinux}/bin/findmnt'
substituteInPlace pkg/oc/bootstrap/docker/host/host.go \
substituteInPlace pkg/oc/clusterup/docker/host/host.go \
--replace 'nsenter --mount=/rootfs/proc/1/ns/mnt mount' \
'nsenter --mount=/rootfs/proc/1/ns/mnt ${utillinux}/bin/mount'
substituteInPlace pkg/oc/bootstrap/docker/host/host.go \
substituteInPlace pkg/oc/clusterup/docker/host/host.go \
--replace 'nsenter --mount=/rootfs/proc/1/ns/mnt mkdir' \
'nsenter --mount=/rootfs/proc/1/ns/mnt ${coreutils}/bin/mkdir'
'';
@ -61,6 +63,8 @@ in stdenv.mkDerivation rec {
echo "OS_GIT_COMMIT=${gitCommit}" >> os-version-defs
echo "KUBE_GIT_VERSION=${k8sversion}" >> os-version-defs
echo "KUBE_GIT_COMMIT=${k8sgitcommit}" >> os-version-defs
echo "KUBE_GIT_MAJOR=${k8sgitMajor}" >> os-version-defs
echo "KUBE_GIT_MINOR=${k8sgitMinor}" >> os-version-defs
export OS_VERSION_FILE="os-version-defs"
export CC=clang
make all WHAT='${concatStringsSep " " components}'

View File

@ -19,7 +19,7 @@
buildGoPackage rec {
name = "terraform-provider-libvirt-${version}";
version = "0.3";
version = "0.4";
goPackagePath = "github.com/dmacvicar/terraform-provider-libvirt";
@ -27,13 +27,13 @@ buildGoPackage rec {
owner = "dmacvicar";
repo = "terraform-provider-libvirt";
rev = "v${version}";
sha256 = "004gxy55p5cf39f2zpah0i2zhvs4x6ixnxy8z9v7314604ggpkna";
sha256 = "05jkjp1kis4ncryv34pkb9cz2yhzbwg62x9qmlqsqlxwz9hqny3r";
};
buildInputs = [ libvirt pkgconfig makeWrapper ];
goDeps = ./deps.nix;
# mkisofs needed to create ISOs holding cloud-init data,
# and wrapped to terraform via deecb4c1aab780047d79978c636eeb879dd68630
propagatedBuildInputs = [ cdrtools ];
meta = with stdenv.lib; {

View File

@ -1,12 +0,0 @@
# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
[
{
goPackagePath = "github.com/aws/aws-sdk-go";
fetch = {
type = "git";
url = "https://github.com/aws/aws-sdk-go";
rev = "c861d27d0304a79f727e9a8a4e2ac1e74602fdc0";
sha256 = "023cyg551dvm2l50dx1qsikkj77lk2dhiya7by8in7h65av6hjgl";
};
}
]

View File

@ -4,15 +4,15 @@
{
owner = "terraform-providers";
repo = "terraform-provider-alicloud";
version = "1.9.5";
sha256 = "12yhy0p4xciw70i0gvwzbg39f6mfin2cfdblxyqjlv9bwg26k7jz";
version = "1.10.0";
sha256 = "19lplakpl8dz4a8xw9va86gd774yq4gayq4kzv3pvr62b03a999x";
};
archive =
{
owner = "terraform-providers";
repo = "terraform-provider-archive";
version = "1.0.3";
sha256 = "1il8v9zi838naprr8dqzipk6ns71l8vdqidarxklnn8wdwxmacg4";
version = "1.1.0";
sha256 = "1fsynv725cmqz819v9p4i4h4w4y77mbya5y9v81sqvacqvr3i05h";
};
arukas =
{
@ -32,29 +32,22 @@
{
owner = "terraform-providers";
repo = "terraform-provider-aws";
version = "1.25.0";
sha256 = "1cg2pch6nip96qdzca7q0ak6308fkjxz9zjdcv74cwg0f65frh7d";
};
azure-classic =
{
owner = "terraform-providers";
repo = "terraform-provider-azure-classic";
version = "0.1.1";
sha256 = "11myqq3wnxvpysjycvwg7b14ll8d9vkn06xb3r26kmc42fkl5xv1";
version = "1.30.0";
sha256 = "1si2fm5nm7gad90lf410zwjf2q5kd8mv6nkkbfnfdzkpkchavr95";
};
azurerm =
{
owner = "terraform-providers";
repo = "terraform-provider-azurerm";
version = "1.7.0";
sha256 = "0lf83pc5gdmd61i93221zdg9pdzfpfnvhis8kf1s2jlc6zshbabv";
version = "1.12.0";
sha256 = "1avp2vhlj60iw17pw39003p30byms7xvq5lkippm60ak4ky9p51b";
};
azurestack =
{
owner = "terraform-providers";
repo = "terraform-provider-azurestack";
version = "0.1.0";
sha256 = "144dfaq16g41i9y2pcq2ilgygndad3vivr6fbygg8yl10m5l4qp0";
version = "0.2.0";
sha256 = "0s1ga0ga0rbpp552hbq1dfnkpdjvk1c40i7qqnqmm20xlz6k55mb";
};
bitbucket =
{
@ -63,6 +56,13 @@
version = "1.0.0";
sha256 = "0gi8p1q0y8x5y8lqihijkpqs3v152h0q7icv7ixk33xsdcvb418y";
};
brightbox =
{
owner = "terraform-providers";
repo = "terraform-provider-brightbox";
version = "1.0.5";
sha256 = "0sn7k5bqgms5sxjhjikmby0jf2n6y14z6s4wsifxaw7b0082fy28";
};
chef =
{
owner = "terraform-providers";
@ -88,8 +88,8 @@
{
owner = "terraform-providers";
repo = "terraform-provider-cloudflare";
version = "1.0.0";
sha256 = "1ar9wcgr45f2v6bqjn24zii0qwfppla8ya3gjc546sh1a7m0h9p3";
version = "1.1.0";
sha256 = "1rmg7gndhmb1wp0zszhwx9vrax8411iy24yrpkmayjify3vsvdpx";
};
cloudscale =
{
@ -123,8 +123,8 @@
{
owner = "terraform-providers";
repo = "terraform-provider-datadog";
version = "1.0.3";
sha256 = "0nh2dww3hx6jrkcd9lq5hpnqr3grp9cmqi4nwmxlrc5azf8x0mii";
version = "1.1.0";
sha256 = "0ckmjpw9dkj5490kwxamdvnnidnjdgxnb1biqpvwj4139hlcl628";
};
digitalocean =
{
@ -158,8 +158,8 @@
{
owner = "terraform-providers";
repo = "terraform-provider-docker";
version = "0.1.1";
sha256 = "02lhbl34dq7lsby3g32969i4g9l3z6xw1v00shljd3amgyz2l2r2";
version = "1.0.0";
sha256 = "09ribvyv02r907pdvyrwaklr14xyvyn14rijslnm16xp8d4waz9h";
};
dyn =
{
@ -179,15 +179,15 @@
{
owner = "terraform-providers";
repo = "terraform-provider-fastly";
version = "0.2.0";
sha256 = "0vrvyqhzbrvhyhdkg2y2dgadf5j7bj0cbzd13f9m86d146zlf8lb";
version = "0.3.0";
sha256 = "1hh4s81g256iy1rvp9snqbyhidz8n6p7pzanlxp89ffrq9p32sp0";
};
flexibleengine =
{
owner = "terraform-providers";
repo = "terraform-provider-flexibleengine";
version = "1.0.1";
sha256 = "1xf5cmn434a0zr9qxc7f0jma9gf111cp7fm2vgyhkd62hipafcas";
version = "1.1.0";
sha256 = "07g6kc211crxf9nvgvghg05jdahd1fb09lpwfcps9ph259pwwam3";
};
github =
{
@ -207,15 +207,15 @@
{
owner = "terraform-providers";
repo = "terraform-provider-google";
version = "1.15.0";
sha256 = "0xwijnv7mzlyzplkylfphph568b9bxavrclnlwvp9ylvklq70nzl";
version = "1.16.2";
sha256 = "1d8by6rb4s2dggapcbb4b2g5hf280bjayz9p5q9njgsn83579pnm";
};
grafana =
{
owner = "terraform-providers";
repo = "terraform-provider-grafana";
version = "1.0.2";
sha256 = "17pj4mm7ik9llhgckza822866x6986cdcr821f16dchvn3bfbf2i";
version = "1.2.0";
sha256 = "1kn2bbdgci6nfl2gyk4w8w203fscqws2748idv9m53ikczg8n573";
};
hcloud =
{
@ -228,8 +228,8 @@
{
owner = "terraform-providers";
repo = "terraform-provider-heroku";
version = "1.0.1";
sha256 = "1kx74d0ywzim5zj3y5ac80r18igsqax39yv9qaam546a88ya31yy";
version = "1.2.0";
sha256 = "1w2r0wnfcr9aqij5ckq0apd8az8yzdg704hi1zjb1ggb54v97n31";
};
http =
{
@ -238,6 +238,13 @@
version = "1.0.1";
sha256 = "1bnqrx4xya3lm5wp4byy6npazll6w1g6bv4rawgncswsgx08zqng";
};
huaweicloud =
{
owner = "terraform-providers";
repo = "terraform-provider-huaweicloud";
version = "1.1.0";
sha256 = "1jsvv5yfxgz998p4wbldbq82hl4ykn1yp21igphl94n3b0jj33dj";
};
icinga2 =
{
owner = "terraform-providers";
@ -256,8 +263,8 @@
{
owner = "terraform-providers";
repo = "terraform-provider-influxdb";
version = "1.0.0";
sha256 = "1w1izzs22b2w2qmpdxbhaj9kvnfyw0wlq3nigrigwwvqav43knh9";
version = "1.0.1";
sha256 = "0713h50675njnpdy4w1azfq8h6yai40gx6w2fbvw4n59h6jlfny4";
};
kubernetes =
{
@ -347,22 +354,22 @@
{
owner = "terraform-providers";
repo = "terraform-provider-oneandone";
version = "1.1.0";
sha256 = "1yps2mcdy61afxva7vg0i82s24zkdrn5abwblm0gcgc0cz588r9d";
version = "1.2.0";
sha256 = "1lrcy05zklv7vc8653f8cn3jjc9zjjwi488dpaphsmsl1md3m88b";
};
opc =
{
owner = "terraform-providers";
repo = "terraform-provider-opc";
version = "1.1.2";
sha256 = "0v413wgnr8h682han88s0n15cdwd9a0dxr9s2mknpi4664c41qlk";
version = "1.2.0";
sha256 = "19rfm12w97ccyrzpdw0qlwfn7gh64lqh17kj3cv11y1f731z8rlw";
};
openstack =
{
owner = "terraform-providers";
repo = "terraform-provider-openstack";
version = "1.6.0";
sha256 = "14chn2vb8y9rz5irh8m2ky9yxmw2za45gikncjm4gfc3xl6803iq";
version = "1.7.0";
sha256 = "0sw2kmcsi9sjzi549fj6knida01q0lnpqvc3cpyjyv92f6w4bznn";
};
opentelekomcloud =
{
@ -382,15 +389,15 @@
{
owner = "terraform-providers";
repo = "terraform-provider-oraclepaas";
version = "1.2.1";
sha256 = "0r404rysjhbsxh45ad23k12rs8js2pdczakzavnjx508kr29gcqc";
version = "1.3.0";
sha256 = "09vsb52cbf2h1rdwfg4xb54gklwgmaxdgjcdq1yx5gxj7lfbdl9v";
};
ovh =
{
owner = "terraform-providers";
repo = "terraform-provider-ovh";
version = "0.2.0";
sha256 = "12dpgx0fpmqw64v5a70fihbgixyw71bdjbdi17gal7s2pj1xw159";
version = "0.3.0";
sha256 = "05bzkwa50alh8mpslh64dddp815m8df240w1mmphdmp9rsi6hqp8";
};
packet =
{
@ -417,8 +424,8 @@
{
owner = "terraform-providers";
repo = "terraform-provider-postgresql";
version = "0.1.1";
sha256 = "0ls5z02vaalcrbaq375qnk0267pb17rpsx4s3plfnr7qclv21pwn";
version = "0.1.2";
sha256 = "08wv03j70mych4nnamivjihwvca3aksjxgjlj8yasz5292qgl05w";
};
powerdns =
{
@ -431,8 +438,8 @@
{
owner = "terraform-providers";
repo = "terraform-provider-profitbricks";
version = "1.3.1";
sha256 = "1g4filwv38rq9wcdbpnpgfnv8qj1kzdnjc8awvbsdlxlj4fa06bi";
version = "1.3.2";
sha256 = "0mk77n833np6ahm6bzvpg31a0m1qazaipd0vqzccqfkbz78sm3jb";
};
rabbitmq =
{
@ -466,15 +473,15 @@
{
owner = "terraform-providers";
repo = "terraform-provider-runscope";
version = "0.1.0";
sha256 = "05l305423njds2cmmxg67swpdnp3zibs36dq4cfjk47i4byvipjz";
version = "0.3.0";
sha256 = "1srnnlw94q1av8rzy8753fk4vazv5ldbimgr9gd51vrmpvmlgxas";
};
scaleway =
{
owner = "terraform-providers";
repo = "terraform-provider-scaleway";
version = "1.4.1";
sha256 = "1zxb3981w30hv1aax28ayiy0sl0vzrrwkynp4lmwwhfjyhyagnm1";
version = "1.5.1";
sha256 = "1b42fh7mwj2cx3g16lgp4sw6ca5qqj0mhm6i7qid8agwsga34v0y";
};
softlayer =
{
@ -487,15 +494,22 @@
{
owner = "terraform-providers";
repo = "terraform-provider-spotinst";
version = "1.0.0";
sha256 = "1p05wamv70mywfqf0b3nxpvxc0m8ydb5zcl2kpzsrii9mq21pjrf";
version = "1.2.0";
sha256 = "09k79xg5cbs4qhxr0b4f42qpxj6j2795z5vmwbxfkirb5bkpqdq1";
};
statuscake =
{
owner = "terraform-providers";
repo = "terraform-provider-statuscake";
version = "0.1.0";
sha256 = "084520cak2krwpks2ipqcjfw3k4rrzn6gqqncz8c4i6g01f1m7yg";
version = "0.2.0";
sha256 = "065izach0hq04664hz7rc3gd0r3l06lzwcbj5800zjfv1inp6pxs";
};
telefonicaopencloud =
{
owner = "terraform-providers";
repo = "terraform-provider-telefonicaopencloud";
version = "1.0.0";
sha256 = "1761wkjz3d2458xl7855lxklyxgyk05fddh92rp6975y0ca6xa5m";
};
template =
{
@ -536,8 +550,8 @@
{
owner = "terraform-providers";
repo = "terraform-provider-vault";
version = "1.1.0";
sha256 = "1g0cca662glqcz83l1skhj3nb7g386x65kwz95kyp59nvyxywvbq";
version = "1.1.1";
sha256 = "0kiqpnb4669xw9b8nf6a8ky0jhnp14bipaizml3gdh1hnda6hflw";
};
vcd =
{

View File

@ -16,10 +16,5 @@ let
# if the versions are not provided via file paths.
postBuild = "mv go/bin/${repo}{,_v${version}}";
};
maybeDrv = name: data:
# azure-classic is an archived repo
if name == "azure-classic" then null
else toDrv data;
in
lib.mapAttrs maybeDrv list
lib.mapAttrs (n: v: toDrv v) list

View File

@ -71,7 +71,7 @@ fi
org=terraform-providers
repos=$(get_org_repos "$org" | grep terraform-provider- | grep -v terraform-provider-scaffolding | grep -v terraform-provider-telefonicaopencloud | sort)
repos=$(get_org_repos "$org" | grep terraform-provider- | grep -v terraform-provider-scaffolding | grep -v terraform-provider-azure-classic | sort)
# Get all the providers with index

View File

@ -13,13 +13,13 @@
}:
stdenv.mkDerivation rec {
name = "dino-unstable-2018-06-03";
name = "dino-unstable-2018-07-08";
src = fetchFromGitHub {
owner = "dino";
repo = "dino";
rev = "52e116ee44be1667660c08858a28fe8fda125f79";
sha256 = "1yybmjd50r41366clrsw21qybbpjfkvim2n5b3dkcagjnifak0zl";
rev = "df8b5fcb722c4a33ed18cbbaafecb206f127b849";
sha256 = "1r7h9pxix0sylnwab7a8lir9h5yssk98128x2bzva77id9id33vi";
fetchSubmodules = true;
};

View File

@ -3,9 +3,24 @@
, dbus, libX11, xorg, libXi, libXcursor, libXdamage, libXrandr, libXcomposite
, libXext, libXfixes, libXrender, libXtst, libXScrnSaver, nss, nspr, alsaLib
, cups, expat, udev
# Unfortunately this also overwrites the UI language (not just the spell
# checking language!):
, hunspellDicts, spellcheckerLanguage ? null # E.g. "de_DE"
# For a full list of available languages:
# $ cat pkgs/development/libraries/hunspell/dictionaries.nix | grep "dictFileName =" | awk '{ print $3 }'
}:
let
customLanguageWrapperArgs = (with lib;
let
# E.g. "de_DE" -> "de-de" (spellcheckerLanguage -> hunspellDict)
spellLangComponents = splitString "_" spellcheckerLanguage;
hunspellDict = elemAt spellLangComponents 0 + "-" + toLower (elemAt spellLangComponents 1);
in if spellcheckerLanguage != null
then ''
--set HUNSPELL_DICTIONARIES "${hunspellDicts.${hunspellDict}}/share/hunspell" \
--set LC_MESSAGES "${spellcheckerLanguage}"''
else "");
rpath = lib.makeLibraryPath [
alsaLib
atk
@ -40,11 +55,11 @@ let
in stdenv.mkDerivation rec {
name = "signal-desktop-${version}";
version = "1.14.4";
version = "1.15.0";
src = fetchurl {
url = "https://updates.signal.org/desktop/apt/pool/main/s/signal-desktop/signal-desktop_${version}_amd64.deb";
sha256 = "0590r7748kv6g7zygq95v8qxf7vi2n5ypj6734x9yshrn8z6p8lr";
sha256 = "1q73jx92h8zwk1dn103ymskz35q6kfiqc44886jr0p7mlpndqsa4";
};
phases = [ "unpackPhase" "installPhase" ];
@ -68,6 +83,7 @@ in stdenv.mkDerivation rec {
--set-rpath ${rpath}:$out/libexec $out/libexec/signal-desktop
wrapProgram $out/libexec/signal-desktop \
--prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
${customLanguageWrapperArgs} \
"''${gappsWrapperArgs[@]}"
# Symlink to bin

View File

@ -14,5 +14,7 @@ in {
stable = mkTelegram stableVersion;
preview = mkTelegram (stableVersion // {
stable = false;
version = "1.3.12";
sha256Hash = "00z4ljs4fvbk7sf8wv1v50kln26gv8q12x6q41ai9gfzkvq5f69a";
});
}

View File

@ -2,41 +2,59 @@
, fetchurl
, dbus
, zlib, fontconfig
, qtbase, qtmultimedia
, libjson, libgpgerror
, libX11, libxcb, libXau, libXdmcp, freetype, libbsd
, pythonPackages, squashfsTools, makeDesktopItem
}:
with stdenv.lib;
let
libPath = makeLibraryPath
[ stdenv.cc.cc dbus libX11 zlib libX11 libxcb libXau libXdmcp freetype fontconfig libbsd ];
[ stdenv.cc.cc qtbase qtmultimedia dbus libX11 zlib libX11 libxcb libXau libXdmcp freetype fontconfig libbsd libjson libgpgerror];
version = "2016-1-17";
version = "2018-1-30";
mainbin = "SoulseekQt-" + (version) +"-"+ (if stdenv.is64bit then "64bit" else "32bit");
srcs = {
"i686-linux" = fetchurl {
url = "https://www.dropbox.com/s/kebk1b5ib1m3xxw/${mainbin}.tgz";
sha256 = "0r9rhnfslkgbw3l7fnc0rcfqjh58amgh5p33kwam0qvn1h1frnir";
};
"x86_64-linux" = fetchurl {
url = "https://www.dropbox.com/s/7qh902qv2sxyp6p/${mainbin}.tgz";
sha256 = "05l3smpdvw8xdhv4v8a28j0yi1kvzhrha2ck23g4bl7x9wkay4cc";
url = "https://www.dropbox.com/s/0vi87eef3ooh7iy/${mainbin}.tgz";
sha256 = "0d1cayxr1a4j19bc5a3qp9pg22ggzmd55b6f5av3lc6lvwqqg4w6";
};
};
desktopItem = makeDesktopItem {
name = "SoulseekQt";
exec = "soulseekqt";
icon = "$out/share/soulseekqt/";
comment = "Official Qt SoulSeek client";
desktopName = "SoulseekQt";
genericName = "SoulseekQt";
categories = "Network;";
};
in stdenv.mkDerivation rec {
name = "soulseekqt-${version}";
inherit version;
src = srcs."${stdenv.system}" or (throw "unsupported system: ${stdenv.system}");
sourceRoot = ".";
buildPhase = ":"; # nothing to build
dontBuild = true;
buildInputs = [ pythonPackages.binwalk squashfsTools ];
# avoid usage of appimagetool
unpackCmd = ''
export HOME=$(pwd) # workaround for binwalk
tar xvf $curSrc && binwalk --quiet \
${mainbin}.AppImage -D 'squashfs:.squashfs:unsquashfs %e'
'';
installPhase = ''
mkdir -p $out/bin
cp ${mainbin} $out/bin/soulseekqt
mkdir -p $out/{bin,share/soulseekqt}
cd squashfs-root/
cp -R soulseek.png translations $out/share/soulseekqt
cp SoulseekQt $out/bin/soulseekqt
'';
fixupPhase = ''
@ -50,6 +68,6 @@ in stdenv.mkDerivation rec {
homepage = http://www.soulseekqt.net;
license = licenses.unfree;
maintainers = [ maintainers.genesis ];
platforms = [ "i686-linux" "x86_64-linux" ];
platforms = [ "x86_64-linux" ];
};
}

View File

@ -0,0 +1,83 @@
{ stdenv, fetchurl, lib, qtbase, qtmultimedia, qtsvg, qtdeclarative, qttools, full,
libsecret, libGL, libpulseaudio, glib, makeWrapper, makeDesktopItem }:
let
version = "1.0.5-1";
description = ''
An application that runs on your computer in the background and seamlessly encrypts
and decrypts your mail as it enters and leaves your computer
'';
desktopItem = makeDesktopItem {
name = "Desktop-Bridge";
exec = "Desktop-Bridge";
icon = "desktop-bridge";
comment = stdenv.lib.replaceStrings ["\n"] [" "] description;
desktopName = "ProtonMail Bridge";
genericName = "ProtonMail Bridge for Linux";
categories = "Utility;Security;Network;Email";
};
in stdenv.mkDerivation rec {
name = "protonmail-bridge-${version}";
src = fetchurl {
url = "https://protonmail.com/download/protonmail-bridge_${version}_amd64.deb";
sha256 = "1fsf4l5c9ii370fgy721a71h34g7vjfddscal3jblb4mm3ywzxfl";
};
nativeBuildInputs = [ makeWrapper ];
sourceRoot = ".";
unpackCmd = ''
ar p "$src" data.tar.xz | tar xJ
'';
installPhase = ''
mkdir -p $out/{bin,lib,share}
mkdir -p $out/share/{applications,icons/hicolor/scalable/apps}
cp -r usr/lib/protonmail/bridge/Desktop-Bridge{,.sh} $out/lib
cp usr/share/icons/protonmail/Desktop-Bridge.svg $out/share/icons/hicolor/scalable/apps/desktop-bridge.svg
cp ${desktopItem}/share/applications/* $out/share/applications
ln -s $out/lib/Desktop-Bridge $out/bin/Desktop-Bridge
'';
postFixup = let
rpath = lib.makeLibraryPath [
stdenv.cc.cc.lib
qtbase
qtmultimedia
qtsvg
qtdeclarative
qttools
libGL
libsecret
libpulseaudio
glib
];
qtPath = prefix: "${full}/${prefix}";
in ''
patchelf \
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath "${rpath}" \
$out/lib/Desktop-Bridge
wrapProgram $out/lib/Desktop-Bridge \
--set QT_PLUGIN_PATH "${qtPath qtbase.qtPluginPrefix}" \
--set QML_IMPORT_PATH "${qtPath qtbase.qtQmlPrefix}" \
--set QML2_IMPORT_PATH "${qtPath qtbase.qtQmlPrefix}" \
'';
meta = with stdenv.lib; {
homepage = https://www.protonmail.com/bridge;
license = licenses.mit;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ lightdiscord ];
inherit description;
};
}

View File

@ -15,6 +15,8 @@ stdenv.mkDerivation rec {
buildInputs = [ cmake zlib ncurses ];
enableParallelBuilding = false;
meta = with stdenv.lib; {
description = "Identify single nucleotide positions that are different between tumor and normal";
license = licenses.mit;

View File

@ -1,11 +1,9 @@
{ stdenv, buildPythonApplication, fetchFromGitHub, ncurses, pillow, pytest }:
{ stdenv, python3, fetchFromGitHub, ncurses }:
let
with python3.pkgs; buildPythonApplication rec {
pname = "almonds";
version = "1.25b";
in
buildPythonApplication {
name = "almonds-${version}";
src = fetchFromGitHub {
owner = "Tenchi2xh";
repo = "Almonds";

View File

@ -1,20 +1,22 @@
{ stdenv, fetchFromGitHub, python3Packages }:
{ stdenv, fetchFromGitHub, python3Packages, readline }:
with stdenv.lib;
stdenv.mkDerivation rec {
name = "bcal-${version}";
version = "1.8";
version = "1.9";
src = fetchFromGitHub {
owner = "jarun";
repo = "bcal";
rev = "v${version}";
sha256 = "0jdn46wzwq7yn3x6p1xyqarp52pcr0ghnfhkm7nyxv734g1abw7r";
sha256 = "0h6qi5rvzl6c6fsfdpdb3l4jcgip03l18i0b1x08z1y89i56y8mm";
};
nativeBuildInputs = [ python3Packages.pytest ];
buildInputs = [ readline ];
doCheck = true;
checkPhase = ''
python3 -m pytest test.py

View File

@ -8,10 +8,6 @@ let
# https://trac.sagemath.org/ticket/15980 for tracking of python3 support
python = nixpkgs.python2.override {
packageOverrides = self: super: {
cypari2 = super.cypari2.override { inherit pari; };
cysignals = super.cysignals.override { inherit pari; };
# python packages that appear unmaintained and were not accepted into the nixpkgs
# tree because of that. These packages are only dependencies of the more-or-less
# deprecated sagenb. However sagenb is still a default dependency and the doctests
@ -24,7 +20,7 @@ let
pybrial = self.callPackage ./pybrial.nix {};
sagelib = self.callPackage ./sagelib.nix {
inherit flint ecl pari eclib ntl arb;
inherit flint ecl arb;
inherit sage-src openblas-blas-pc openblas-cblas-pc openblas-lapack-pc pynac singular;
linbox = nixpkgs.linbox.override { withSage = true; };
};
@ -38,20 +34,20 @@ let
};
env-locations = self.callPackage ./env-locations.nix {
inherit pari_data ecl pari;
inherit pari_data ecl;
inherit singular;
three = nodePackages_8_x.three;
mathjax = nodePackages_8_x.mathjax;
};
sage-env = self.callPackage ./sage-env.nix {
inherit sage-src python rWrapper openblas-cblas-pc ecl singular eclib pari palp flint pynac pythonEnv giac ntl;
inherit sage-src python rWrapper openblas-cblas-pc ecl singular palp flint pynac pythonEnv;
pkg-config = nixpkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
};
sage-with-env = self.callPackage ./sage-with-env.nix {
inherit pari eclib pythonEnv ntl;
inherit sage-src openblas-blas-pc openblas-cblas-pc openblas-lapack-pc pynac singular giac;
inherit pythonEnv;
inherit sage-src openblas-blas-pc openblas-cblas-pc openblas-lapack-pc pynac singular;
pkg-config = nixpkgs.pkgconfig; # not to confuse with pythonPackages.pkgconfig
three = nodePackages_8_x.three;
};
@ -106,41 +102,18 @@ let
});
};
# https://trac.sagemath.org/ticket/25532
ntl = nixpkgs.ntl.overrideAttrs (oldAttrs: rec {
name = "ntl-10.5.0";
sourceRoot = "${name}/src";
src = fetchurl {
url = "http://www.shoup.net/ntl/${name}.tar.gz";
sha256 = "1lmldaldgfr2b2a6585m3np5ds8bq1bis2s1ajycjm49vp4kc2xr";
};
});
giac = nixpkgs.giac.override { inherit ntl; };
arb = nixpkgs.arb.override { inherit flint; };
# update causes issues
# https://groups.google.com/forum/#!topic/sage-packaging/cS3v05Q0zso
# https://trac.sagemath.org/ticket/24735
singular = (nixpkgs.singular.override { inherit ntl flint; }).overrideAttrs (oldAttrs: {
name = "singular-4.1.0p3";
src = fetchurl {
url = "http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/SOURCES/4-1-0/singular-4.1.0p3.tar.gz";
sha256 = "105zs3zk46b1cps403ap9423rl48824ap5gyrdgmg8fma34680a4";
};
});
singular = nixpkgs.singular.override { inherit flint; };
# *not* to confuse with the python package "pynac"
# https://trac.sagemath.org/ticket/24838 (depends on arb update)
pynac = nixpkgs.pynac.override { inherit singular flint; };
eclib = nixpkgs.eclib.override { inherit pari ntl; };
# With openblas (64 bit), the tests fail the same way as when sage is build with
# openblas instead of openblasCompat. Apparently other packages somehow use flints
# blas when it is available. Alternative would be to override flint to use
# openblasCompat.
flint = nixpkgs.flint.override { withBlas = false; inherit ntl; };
flint = nixpkgs.flint.override { withBlas = false; };
# Multiple palp dimensions need to be available and sage expects them all to be
# in the same folder.
@ -165,15 +138,6 @@ let
# https://trac.sagemath.org/ticket/22191
ecl = nixpkgs.ecl_16_1_2;
# sage currently uses an unreleased version of pari
pari = (nixpkgs.pari.override { withThread = false; }).overrideAttrs (attrs: rec {
version = "2.10-1280-g88fb5b3"; # on update remove pari-stackwarn patch from `sage-src.nix`
src = fetchurl {
url = "mirror://sageupstream/pari/pari-${version}.tar.gz";
sha256 = "19gbsm8jqq3hraanbmsvzkbh88iwlqbckzbnga3y76r7k42akn7m";
};
});
in
python.pkgs.sage-wrapper // {
doc = python.pkgs.sagedoc;

View File

@ -1,427 +0,0 @@
commit c885927e25b29bd23869e02379c2918da430323e
Author: Timo Kaufmann <timokau@zoho.com>
Date: Sat Jun 30 02:26:15 2018 +0200
diff --git a/build/pkgs/arb/checksums.ini b/build/pkgs/arb/checksums.ini
index 1924ee03c3..9323b97391 100644
--- a/build/pkgs/arb/checksums.ini
+++ b/build/pkgs/arb/checksums.ini
@@ -1,4 +1,4 @@
tarball=arb-VERSION.tar.gz
-sha1=27476d0529e48a07d92da90bd0fb80dd18f443e3
-md5=733285d9705d10b8024e551ffa81952f
-cksum=2391183744
+sha1=44eda7bf8eaa666c45b1fc2c1b5bd08756d94b58
+md5=fa24de9fffe4394fb6a7a6792e2ecc5f
+cksum=3689220688
diff --git a/build/pkgs/arb/package-version.txt b/build/pkgs/arb/package-version.txt
index c8810e9bdb..fb2c0766b7 100644
--- a/build/pkgs/arb/package-version.txt
+++ b/build/pkgs/arb/package-version.txt
@@ -1 +1 @@
-2.12.0.p0
+2.13.0
diff --git a/build/pkgs/arb/patches/arb-pie-hardening-conflict.patch b/build/pkgs/arb/patches/arb-pie-hardening-conflict.patch
deleted file mode 100644
index 3e5c0e708b..0000000000
--- a/build/pkgs/arb/patches/arb-pie-hardening-conflict.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-In newer binutils, ld options -r and -pie conflict.
-Patch due to Jörg-Volker Peetz
-(source : https://groups.google.com/d/msg/sage-devel/TduebNoZuBE/sEULolL0BQAJ),
-packaged by Emmanuel Charpentier
-
-diff -ru arb-2.8.1-orig/Makefile.subdirs arb-2.8.1-new/Makefile.subdirs
---- arb-2.8.1-orig/Makefile.subdirs 2015-12-31 17:30:01.000000000 +0100
-+++ arb-2.8.1-new/Makefile.subdirs 2016-11-07 18:50:34.540051779 +0100
-@@ -52,7 +52,7 @@
- $(QUIET_CC) $(CC) $(CFLAGS) $(INCS) -c $< -o $@ -MMD -MP -MF "$(BUILD_DIR)/$(MOD_DIR)_$*.d" -MT "$(BUILD_DIR)/$(MOD_DIR)_$*.d" -MT "$@"
-
- $(MOD_LOBJ): $(LOBJS)
-- $(QUIET_CC) $(CC) $(ABI_FLAG) -Wl,-r $^ -o $@ -nostdlib
-+ $(QUIET_CC) $(CC) $(ABI_FLAG) -r $^ -o $@ -nostdlib
-
- -include $(LOBJS:.lo=.d)
-
diff --git a/src/sage/rings/complex_arb.pyx b/src/sage/rings/complex_arb.pyx
index 70d51e655a..00e7caea2c 100644
--- a/src/sage/rings/complex_arb.pyx
+++ b/src/sage/rings/complex_arb.pyx
@@ -857,14 +857,14 @@ class ComplexBallField(UniqueRepresentation, Field):
[0.500000000000000 +/- 2.09e-16]
sage: CBF.integral(lambda x, _: x.gamma(), 1 - CBF(i), 1 + CBF(i))
- [+/- 3.95e-15] + [1.5723926694981 +/- 4.53e-14]*I
+ [+/- 4...e-15] + [1.5723926694981 +/- 4...e-14]*I
sage: C = ComplexBallField(100)
sage: C.integral(lambda x, _: x.cos() * x.sin(), 0, 1)
[0.35403670913678559674939205737 +/- 8.89e-30]
sage: CBF.integral(lambda x, _: (x + x.exp()).sin(), 0, 8)
- [0.34740017266 +/- 6.36e-12]
+ [0.34740017266 +/- 6...e-12]
sage: C = ComplexBallField(2000)
sage: C.integral(lambda x, _: (x + x.exp()).sin(), 0, 8) # long time
@@ -879,14 +879,14 @@ class ComplexBallField(UniqueRepresentation, Field):
....: else:
....: return z.sqrt()
sage: CBF.integral(my_sqrt, -1 + CBF(i), -1 - CBF(i))
- [+/- 1.14e-14] + [-0.4752076627926 +/- 5.18e-14]*I
+ [+/- 1.14e-14] + [-0.4752076627926 +/- 5...e-14]*I
Note, though, that proper handling of the ``analytic`` flag is required
even when the path does not touch the branch cut::
sage: correct = CBF.integral(my_sqrt, 1, 2); correct
[1.21895141649746 +/- 3.73e-15]
- sage: RBF(integral(sqrt(x), x, 1, 2))
+ sage: RBF(integral(sqrt(x), x, 1, 2)) # long time
[1.21895141649746 +/- 1.79e-15]
sage: wrong = CBF.integral(lambda z, _: z.sqrt(), 1, 2) # WRONG!
sage: correct - wrong
@@ -915,9 +915,9 @@ class ComplexBallField(UniqueRepresentation, Field):
the integrand is unbounded::
sage: CBF.integral(lambda x, _: 1/x, -1, 1)
- [+/- inf] + [+/- inf]*I
+ nan + nan*I
sage: CBF.integral(lambda x, _: 1/x, 10^-1000, 1)
- [+/- inf] + [+/- inf]*I
+ nan + nan*I
sage: CBF.integral(lambda x, _: 1/x, 10^-1000, 1, abs_tol=1e-10)
[2302.5850930 +/- 1.26e-8]
@@ -928,14 +928,15 @@ class ComplexBallField(UniqueRepresentation, Field):
sage: CBF.integral(lambda x, _: x.exp(), -1020, -1010, abs_tol=1e-450)
[2.304377150950e-439 +/- 9.74e-452]
sage: CBF.integral(lambda x, _: x.exp(), -1020, -1010, abs_tol=0)
- [2.304377150949e-439 +/- 7.53e-452]
- sage: CBF.integral(lambda x, _: x.exp(), -1020, -1010, rel_tol=1e-4, abs_tol=0)
- [2.30438e-439 +/- 3.90e-445]
+ [2.304377150950e-439 +/- 7...e-452]
+ sage: CBF.integral(lambda x, _: x.exp(), -1020, -1010, rel_tol=1e-2, abs_tol=0)
+ [2.30438e-439 +/- 5.94e-445]
- sage: CBF.integral(lambda x, _: x*(1/x).sin(), 0, 1)
- [+/- 0.644]
- sage: CBF.integral(lambda x, _: x*(1/x).sin(), 0, 1, use_heap=True)
- [0.3785300 +/- 4.32e-8]
+ sage: epsi = CBF(1e-10)
+ sage: CBF.integral(lambda x, _: x*(1/x).sin(), epsi, 1)
+ [0.38 +/- 8.54e-3]
+ sage: CBF.integral(lambda x, _: x*(1/x).sin(), epsi, 1, use_heap=True)
+ [0.37853002 +/- 8.73e-9]
ALGORITHM:
@@ -951,12 +952,12 @@ class ComplexBallField(UniqueRepresentation, Field):
sage: i = QuadraticField(-1).gen()
sage: CBF.integral(lambda x, _: (1 + i*x).gamma(), -1, 1)
- [1.5723926694981 +/- 4.53e-14] + [+/- 3.95e-15]*I
+ [1.5723926694981 +/- 4...e-14] + [+/- 4...e-15]*I
- sage: ComplexBallField(10000).integral(lambda x, _: x.sin(), 0, 1, rel_tol=1e-400)
- [0.459... +/- ...e-4...]
+ sage: ComplexBallField(10000).integral(lambda x, _: x.sin(), 0, 1, rel_tol=1e-300)
+ [0.459... +/- ...e-3...]
sage: CBF.integral(lambda x, _: x.sin(), 0, 100, rel_tol=10)
- [+/- 7.61]
+ [0.138 +/- 5.53e-4]
sage: ComplexBallField(10000).integral(lambda x, _: x.sin(), 0, 1, abs_tol=1e-400)
[0.459697... +/- ...e-4...]
@@ -2389,9 +2390,9 @@ cdef class ComplexBall(RingElement):
sage: ~CBF(i/3)
[-3.00000000000000 +/- 9.44e-16]*I
sage: ~CBF(0)
- [+/- inf]
+ nan
sage: ~CBF(RIF(10,11))
- [0.1 +/- 9.53e-3]
+ [0.1 +/- 9.10e-3]
"""
cdef ComplexBall res = self._new()
if _do_sig(prec(self)): sig_on()
@@ -2512,9 +2513,9 @@ cdef class ComplexBall(RingElement):
sage: CBF(-2, 1)/CBF(1, 1/3)
[-1.500000000000000 +/- 8.83e-16] + [1.500000000000000 +/- 5.64e-16]*I
sage: CBF(2+I)/CBF(0)
- [+/- inf] + [+/- inf]*I
+ nan + nan*I
sage: CBF(1)/CBF(0)
- [+/- inf]
+ nan
sage: CBF(1)/CBF(RBF(0, 1.))
nan
"""
@@ -2543,9 +2544,9 @@ cdef class ComplexBall(RingElement):
sage: CBF(0)^(1/3)
0
sage: CBF(0)^(-1)
- [+/- inf]
+ nan
sage: CBF(0)^(-2)
- [+/- inf] + [+/- inf]*I
+ nan + nan*I
TESTS::
@@ -2656,12 +2657,12 @@ cdef class ComplexBall(RingElement):
sage: CBF(1).rising_factorial(5)
120.0000000000000
sage: CBF(1/3, 1/2).rising_factorial(300)
- [-3.87949484514e+612 +/- 5.23e+600] + [-3.52042209763e+612 +/- 5.55e+600]*I
+ [-3.87949484514e+612 +/- 5...e+600] + [-3.52042209763e+612 +/- 5...e+600]*I
sage: CBF(1).rising_factorial(-1)
nan
sage: CBF(1).rising_factorial(2**64)
- [+/- 2.30e+347382171305201370464]
+ [+/- 2.30e+347382171326740403407]
sage: ComplexBallField(128)(1).rising_factorial(2**64)
[2.343691126796861348e+347382171305201285713 +/- 4.71e+347382171305201285694]
sage: CBF(1/2).rising_factorial(CBF(2,3))
@@ -2700,7 +2701,7 @@ cdef class ComplexBall(RingElement):
[1.000000000000000 +/- 2.83e-16] + [-0.441271200305303 +/- 2.82e-16]*I
sage: CBF('inf').log()
- nan + nan*I
+ [+/- inf]
sage: CBF(2).log(0)
nan + nan*I
"""
@@ -2808,7 +2809,7 @@ cdef class ComplexBall(RingElement):
sage: CBF(pi/2, 1/10).tan()
[+/- 2.87e-14] + [10.0333111322540 +/- 2.36e-14]*I
sage: CBF(pi/2).tan()
- [+/- inf]
+ nan
"""
cdef ComplexBall res = self._new()
if _do_sig(prec(self)): sig_on()
@@ -2825,7 +2826,7 @@ cdef class ComplexBall(RingElement):
sage: CBF(pi, 1/10).cot()
[+/- 5.74e-14] + [-10.0333111322540 +/- 2.81e-14]*I
sage: CBF(pi).cot()
- [+/- inf]
+ nan
"""
cdef ComplexBall res = self._new()
if _do_sig(prec(self)): sig_on()
@@ -3211,9 +3212,9 @@ cdef class ComplexBall(RingElement):
1.000000000000000*I
sage: CBF(2+3*I).hypergeometric([1/4,1/3],[1/2])
- [0.7871684267473 +/- 7.34e-14] + [0.2749254173721 +/- 9.23e-14]*I
+ [0.7871684267473 +/- 7...e-14] + [0.2749254173721 +/- 9...e-14]*I
sage: CBF(2+3*I).hypergeometric([1/4,1/3],[1/2],regularized=True)
- [0.4441122268685 +/- 3.96e-14] + [0.1551100567338 +/- 5.75e-14]*I
+ [0.4441122268685 +/- 3...e-14] + [0.1551100567338 +/- 5...e-14]*I
sage: CBF(5).hypergeometric([2,3], [-5])
nan + nan*I
@@ -4041,9 +4042,9 @@ cdef class ComplexBall(RingElement):
sage: phi = CBF(1,1)
sage: (CBF.pi()/2).elliptic_e_inc(phi)
- [1.283840957898 +/- 3.23e-13] + [-0.5317843366915 +/- 7.79e-14]*I
+ [1.283840957898 +/- 3...e-13] + [-0.5317843366915 +/- 7...e-14]*I
sage: phi.elliptic_e()
- [1.2838409578982 +/- 5.90e-14] + [-0.5317843366915 +/- 3.35e-14]*I
+ [1.2838409578982 +/- 5...e-14] + [-0.5317843366915 +/- 3...e-14]*I
sage: phi = CBF(2, 3/7)
sage: (CBF.pi()/2).elliptic_e_inc(phi)
@@ -4312,8 +4313,7 @@ cdef class ComplexBall(RingElement):
sage: CBF(10).laguerre_L(3, 2)
[-6.666666666667 +/- 4.15e-13]
sage: CBF(5,7).laguerre_L(CBF(2,3), CBF(1,-2))
- [5515.315030271 +/- 4.37e-10] + [-12386.942845271 +/- 5.47e-10]*I
-
+ [5515.315030271 +/- 4...e-10] + [-12386.942845271 +/- 5...e-10]*I
"""
cdef ComplexBall my_n = self._parent.coerce(n)
cdef ComplexBall my_m = self._parent.coerce(m)
@@ -4357,9 +4357,9 @@ cdef class ComplexBall(RingElement):
EXAMPLES::
sage: CBF(1/2).legendre_P(5)
- [0.08984375000000000 +/- 4.5...e-18]
+ [0.0898437500000000 +/- 7...e-17]
sage: CBF(1,2).legendre_P(CBF(2,3), CBF(0,1))
- [0.10996180744364 +/- 7.45e-15] + [0.14312767804055 +/- 8.38e-15]*I
+ [0.10996180744364 +/- 7.12e-15] + [0.14312767804055 +/- 8.07e-15]*I
sage: CBF(-10).legendre_P(5, 325/100)
[-22104403.487377 +/- 6.81e-7] + [53364750.687392 +/- 7.25e-7]*I
sage: CBF(-10).legendre_P(5, 325/100, type=3)
@@ -4393,9 +4393,9 @@ cdef class ComplexBall(RingElement):
sage: CBF(1/2).legendre_Q(5)
[0.55508089057168 +/- 2.79e-15]
sage: CBF(1,2).legendre_Q(CBF(2,3), CBF(0,1))
- [0.167678710 +/- 4.60e-10] + [-0.161558598 +/- 7.47e-10]*I
+ [0.167678710 +/- 3.91e-10] + [-0.161558598 +/- 6.77e-10]*I
sage: CBF(-10).legendre_Q(5, 325/100)
- [-83825154.36008 +/- 4.94e-6] + [-34721515.80396 +/- 5.40e-6]*I
+ [-83825154.36008 +/- 5.02e-6] + [-34721515.80396 +/- 5.42e-6]*I
sage: CBF(-10).legendre_Q(5, 325/100, type=3)
[-4.797306921692e-6 +/- 6.82e-19] + [-4.797306921692e-6 +/- 6.57e-19]*I
diff --git a/src/sage/rings/polynomial/polynomial_complex_arb.pyx b/src/sage/rings/polynomial/polynomial_complex_arb.pyx
index c436d4705b..ef611a566b 100644
--- a/src/sage/rings/polynomial/polynomial_complex_arb.pyx
+++ b/src/sage/rings/polynomial/polynomial_complex_arb.pyx
@@ -543,7 +543,7 @@ cdef class Polynomial_complex_arb(Polynomial):
sage: (1 - x/3).inverse_series_trunc(3)
([0.1111111111111111 +/- 5.99e-17])*x^2 + ([0.3333333333333333 +/- 7.04e-17])*x + 1.000000000000000
sage: x.inverse_series_trunc(1)
- [+/- inf]
+ nan
sage: Pol(0).inverse_series_trunc(2)
(nan + nan*I)*x + nan + nan*I
@@ -671,7 +671,7 @@ cdef class Polynomial_complex_arb(Polynomial):
sage: pol._sqrt_series(2)
([+/- 7.51e-3] + [+/- 0.501]*I)*x + [+/- 5.01e-3] + [+/- 1.01]*I
sage: x._sqrt_series(2)
- ([+/- inf] + [+/- inf]*I)*x
+ (nan + nan*I)*x
"""
cdef Polynomial_complex_arb res = self._new()
if n < 0:
diff --git a/src/sage/rings/real_arb.pyx b/src/sage/rings/real_arb.pyx
index c9f68e38d7..76e3037a9a 100644
--- a/src/sage/rings/real_arb.pyx
+++ b/src/sage/rings/real_arb.pyx
@@ -161,7 +161,7 @@ values and should be preferred::
sage: RBF(NaN) < RBF(infinity)
False
- sage: 1/RBF(0) <= RBF(infinity)
+ sage: RBF(0).add_error(infinity) <= RBF(infinity)
True
TESTS::
@@ -252,6 +252,8 @@ cdef void mpfi_to_arb(arb_t target, const mpfi_t source, const long precision):
(+infinity, +infinity)
sage: RBF(RIF(-infinity)).endpoints()
(-infinity, -infinity)
+ sage: RBF(RIF(-infinity, infinity)).endpoints()
+ (-infinity, +infinity)
sage: RIF(RBF(infinity)).endpoints()
(+infinity, +infinity)
sage: RIF(RBF(-infinity)).endpoints()
@@ -266,10 +268,11 @@ cdef void mpfi_to_arb(arb_t target, const mpfi_t source, const long precision):
if _do_sig(precision): sig_on()
mpfi_get_left(left, source)
mpfi_get_right(right, source)
- arb_set_interval_mpfr(target, left, right, precision)
- # Work around weakness of arb_set_interval_mpfr(tgt, inf, inf)
- if mpfr_equal_p(left, right):
- mag_zero(arb_radref(target))
+ if mpfr_inf_p(left) and mpfr_inf_p(right) and mpfr_sgn(left) < 0 < mpfr_sgn(right):
+ # Work around a weakness of arb_set_interval_mpfr(tgt, -inf, inf)
+ arb_zero_pm_inf(target)
+ else:
+ arb_set_interval_mpfr(target, left, right, precision)
if _do_sig(precision): sig_off()
mpfr_clear(left)
@@ -649,17 +652,15 @@ class RealBallField(UniqueRepresentation, Field):
EXAMPLES::
sage: RBF.some_elements()
- [1.000000000000000,
- [0.3333333333333333 +/- 7.04e-17],
+ [0, 1.000000000000000, [0.3333333333333333 +/- 7.04e-17],
[-4.733045976388941e+363922934236666733021124 +/- 3.46e+363922934236666733021108],
- [+/- inf],
- [+/- inf],
- nan]
+ [+/- inf], [+/- inf], [+/- inf], nan]
"""
import sage.symbolic.constants
- return [self(1), self(1)/3,
+ inf = self(sage.rings.infinity.Infinity)
+ return [self(0), self(1), self(1)/3,
-self(2)**(Integer(2)**80),
- self(sage.rings.infinity.Infinity), ~self(0),
+ inf, -inf, self.zero().add_error(inf),
self.element_class(self, sage.symbolic.constants.NotANumber())]
def _sum_of_products(self, terms):
@@ -881,7 +882,7 @@ class RealBallField(UniqueRepresentation, Field):
sage: RBF.gamma(5)
24.00000000000000
sage: RBF.gamma(10**20)
- [+/- 5.92e+1956570551809674821757]
+ [+/- 5.50e+1956570552410610660600]
sage: RBF.gamma(1/3)
[2.678938534707747 +/- 8.99e-16]
sage: RBF.gamma(-5)
@@ -2247,7 +2248,7 @@ cdef class RealBall(RingElement):
sage: inf = RBF(+infinity)
sage: other_inf = RBF(+infinity, 42.r)
sage: neg_inf = RBF(-infinity)
- sage: extended_line = 1/RBF(0)
+ sage: extended_line = RBF(0).add_error(infinity)
sage: exact_nan = inf - inf
sage: exact_nan.mid(), exact_nan.rad()
(NaN, 0.00000000)
@@ -2659,7 +2660,7 @@ cdef class RealBall(RingElement):
sage: ~RBF(5)
[0.2000000000000000 +/- 4.45e-17]
sage: ~RBF(0)
- [+/- inf]
+ nan
sage: RBF(RIF(-0.1,0.1))
[+/- 0.101]
@@ -2739,7 +2740,7 @@ cdef class RealBall(RingElement):
sage: RBF(pi)/RBF(e)
[1.155727349790922 +/- 8.43e-16]
sage: RBF(2)/RBF(0)
- [+/- inf]
+ nan
"""
cdef RealBall res = self._new()
if _do_sig(prec(self)): sig_on()
@@ -2765,7 +2766,7 @@ cdef class RealBall(RingElement):
sage: RBF(-1)^(1/3)
nan
sage: RBF(0)^(-1)
- [+/- inf]
+ nan
sage: RBF(-e)**RBF(pi)
nan
@@ -3129,7 +3130,7 @@ cdef class RealBall(RingElement):
sage: RBF(1).tan()
[1.557407724654902 +/- 3.26e-16]
sage: RBF(pi/2).tan()
- [+/- inf]
+ nan
"""
cdef RealBall res = self._new()
if _do_sig(prec(self)): sig_on()
@@ -3146,7 +3147,7 @@ cdef class RealBall(RingElement):
sage: RBF(1).cot()
[0.642092615934331 +/- 4.79e-16]
sage: RBF(pi).cot()
- [+/- inf]
+ nan
"""
cdef RealBall res = self._new()
if _do_sig(prec(self)): sig_on()
@@ -3257,7 +3258,7 @@ cdef class RealBall(RingElement):
sage: RBF(1).coth()
[1.313035285499331 +/- 4.97e-16]
sage: RBF(0).coth()
- [+/- inf]
+ nan
"""
cdef RealBall res = self._new()
if _do_sig(prec(self)): sig_on()

View File

@ -0,0 +1,15 @@
diff --git a/build/pkgs/openblas/package-version.txt b/build/pkgs/openblas/package-version.txt
index 3bc45c25d4..7c7c224887 100644
--- a/src/sage/schemes/elliptic_curves/padics.py
+++ b/src/sage/schemes/elliptic_curves/padics.py
@@ -292,8 +292,8 @@ def padic_regulator(self, p, prec=20, height=None, check_hypotheses=True):
sage: max_prec = 30 # make sure we get past p^2 # long time
sage: full = E.padic_regulator(5, max_prec) # long time
- sage: for prec in range(1, max_prec): # long time
- ....: assert E.padic_regulator(5, prec) == full # long time
+ sage: for prec in range(1, max_prec): # known bug (#25969) # long time
+ ....: assert E.padic_regulator(5, prec) == full # known bug (#25969) # long time
A case where the generator belongs to the formal group already
(:trac:`3632`)::

View File

@ -1,48 +0,0 @@
diff --git a/src/sage/interfaces/maxima_abstract.py b/src/sage/interfaces/maxima_abstract.py
index 961c20aaac..3d601d8939 100644
--- a/src/sage/interfaces/maxima_abstract.py
+++ b/src/sage/interfaces/maxima_abstract.py
@@ -1743,7 +1743,7 @@ class MaximaAbstractElement(ExtraTabCompletion, InterfaceElement):
sage: y,d = var('y,d')
sage: f = function('f')
sage: latex(maxima(derivative(f(x*y), x)))
- \left(\left.{{{\it \partial}}\over{{\it \partial}\, {\it t_0}}}\,f\left({\it t_0}\right) \right|_{{\it t_0}={\it x}\, {\it y}}\right)\,{\it y}
+ \left(\left.{{{\it \partial}}\over{{\it \partial}\, {\it t}_{0}}}\,f\left({\it t}_{0}\right) \right|_{{\it t}_{0}={\it x}\, {\it y}}\right)\,{\it y}
sage: latex(maxima(derivative(f(x,y,d), d,x,x,y)))
{{{\it \partial}^4}\over{{\it \partial}\,{\it d}\, {\it \partial}\,{\it x}^2\,{\it \partial}\, {\it y}}}\,f\left({\it x} , {\it y} , {\it d}\right)
sage: latex(maxima(d/(d-2)))
diff --git a/src/sage/manifolds/differentiable/metric.py b/src/sage/manifolds/differentiable/metric.py
index 3cd6ad3235..1e18af1a6b 100644
--- a/src/sage/manifolds/differentiable/metric.py
+++ b/src/sage/manifolds/differentiable/metric.py
@@ -993,7 +993,7 @@ class PseudoRiemannianMetric(TensorField):
2-dimensional differentiable manifold S^2
sage: g.riemann()[:]
[[[[0, 0], [0, 0]], [[0, sin(th)^2], [-sin(th)^2, 0]]],
- [[[0, (cos(th)^2 - 1)/sin(th)^2], [1, 0]], [[0, 0], [0, 0]]]]
+ [[[0, -1], [1, 0]], [[0, 0], [0, 0]]]]
In dimension 2, the Riemann tensor can be expressed entirely in terms of
the Ricci scalar `r`:
diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx
index dfb8751467..27402e54ab 100644
--- a/src/sage/symbolic/expression.pyx
+++ b/src/sage/symbolic/expression.pyx
@@ -7154,7 +7154,7 @@ cdef class Expression(CommutativeRingElement):
sage: ex = lcm(sin(x)^2 - 1, sin(x)^2 + sin(x)); ex
(sin(x)^2 + sin(x))*(sin(x)^2 - 1)/(sin(x) + 1)
sage: ex.simplify_full()
- -cos(x)^2*sin(x)
+ sin(x)^3 - sin(x)
TESTS:
@@ -10004,7 +10004,7 @@ cdef class Expression(CommutativeRingElement):
sage: f=tan(3*x)
sage: f.simplify_trig()
- (4*cos(x)^2 - 1)*sin(x)/(4*cos(x)^3 - 3*cos(x))
+ -(4*cos(x)^2 - 1)*sin(x)/(4*cos(x)*sin(x)^2 - cos(x))
sage: f.simplify_trig(False)
sin(3*x)/cos(3*x)

View File

@ -0,0 +1,18 @@
diff --git a/src/sage/libs/pari/__init__.py b/src/sage/libs/pari/__init__.py
index e451766474..77eda66097 100644
--- a/src/sage/libs/pari/__init__.py
+++ b/src/sage/libs/pari/__init__.py
@@ -205,6 +205,13 @@ def _get_pari_instance():
# messages in Sage.
P.default("debugmem", 0)
+ # Make sure pari doesn't use threads, regardless of how it was compiled.
+ # Threads cause some doctest failures (memory issues). Those could probably
+ # be solved without disabling threads. But that would require figuring out
+ # some sensible values for `threadsizemax`. See
+ # https://pari.math.u-bordeaux.fr/dochtml/html/GP_defaults.html
+ P.default("nbthreads", 1)
+
return P
pari = _get_pari_instance()

View File

@ -1,479 +0,0 @@
diff --git a/src/sage/calculus/calculus.py b/src/sage/calculus/calculus.py
index 3a417d9d5c..fadaadbaf6 100644
--- a/src/sage/calculus/calculus.py
+++ b/src/sage/calculus/calculus.py
@@ -231,7 +231,7 @@ Another example::
sage: f(x=3)
arcsinh(1)
sage: f.derivative(x)
- 1/3/sqrt(1/9*x^2 + 1)
+ 1/sqrt(x^2 + 9)
We compute the length of the parabola from 0 to 2::
@@ -1509,8 +1509,8 @@ def laplace(ex, t, s, algorithm='maxima'):
Testing SymPy::
sage: laplace(t^n, t, s, algorithm='sympy')
- (s^(-n)*gamma(n + 1)/s, 0, -re(n) < 1)
-
+ (gamma(n + 1)/(s*s^n), 0, -re(n) < 1)
+
Testing Maxima::
sage: laplace(t^n, t, s, algorithm='maxima')
diff --git a/src/sage/functions/hypergeometric.py b/src/sage/functions/hypergeometric.py
index 1fc2db5c94..f3e49b9cdb 100644
--- a/src/sage/functions/hypergeometric.py
+++ b/src/sage/functions/hypergeometric.py
@@ -34,7 +34,7 @@ Simplification (note that ``simplify_full`` does not yet call
sage: a.simplify_hypergeometric()
1/((-e^x + 1)^e^x)
sage: a.simplify_hypergeometric(algorithm='sage')
- (-e^x + 1)^(-e^x)
+ 1/((-e^x + 1)^e^x)
Equality testing::
@@ -145,7 +145,7 @@ Series expansions of confluent hypergeometric functions::
sage: hypergeometric_M(2, 2, x).series(x, 3)
1 + 1*x + 1/2*x^2 + Order(x^3)
- sage: hypergeometric_U(2, 2, x).series(x == 3, 100).subs(x=1).n()
+ sage: hypergeometric_U(2, 2, x).series(x == 3, 100).subs(x=1).n() # known bug (see :trac:`25688`)
0.403652637676806
sage: hypergeometric_U(2, 2, 1).n()
0.403652637676806
@@ -773,7 +773,7 @@ def closed_form(hyp):
sage: closed_form(hypergeometric([], [], z))
e^z
sage: closed_form(hypergeometric([a], [], z))
- (-z + 1)^(-a)
+ 1/((-z + 1)^a)
sage: closed_form(hypergeometric([1, 1, 2], [1, 1], z))
(z - 1)^(-2)
sage: closed_form(hypergeometric([2, 3], [1], x))
@@ -1121,7 +1121,7 @@ class Hypergeometric_U(BuiltinFunction):
sage: var('a b z')
(a, b, z)
sage: hypergeometric_U(a, b, z).generalized()
- z^(-a)*hypergeometric((a, a - b + 1), (), -1/z)
+ hypergeometric((a, a - b + 1), (), -1/z)/z^a
sage: hypergeometric_U(1, 3, 1/2).generalized()
2*hypergeometric((1, -1), (), -2)
sage: hypergeometric_U(3, I, 2).generalized()
diff --git a/src/sage/functions/log.py b/src/sage/functions/log.py
index 75d1bf8060..61968582af 100644
--- a/src/sage/functions/log.py
+++ b/src/sage/functions/log.py
@@ -518,17 +518,17 @@ class Function_polylog(GinacFunction):
sage: BF = RealBallField(100)
sage: polylog(2, BF(1/3))
- [0.36621322997706348761674629766 +/- 4.51e-30]
+ [0.36621322997706348761674629766... +/- ...]
sage: polylog(2, BF(4/3))
- nan
+ [2.27001825336107090380391448586 +/- 5.64e-30] + [-0.90377988538400159956755721265 +/- 8.39e-30]*I
sage: parent(_)
- Real ball field with 100 bits of precision
+ Complex ball field with 100 bits of precision
sage: polylog(2, CBF(1/3))
- [0.366213229977063 +/- 5.85e-16]
+ [0.366213229977063 +/- ...]
sage: parent(_)
Complex ball field with 53 bits of precision
sage: polylog(2, CBF(1))
- [1.644934066848226 +/- 6.59e-16]
+ [1.644934066848226 +/- ...]
sage: parent(_)
Complex ball field with 53 bits of precision
"""
diff --git a/src/sage/functions/trig.py b/src/sage/functions/trig.py
index e7e7a311cd..1f2926d6c9 100644
--- a/src/sage/functions/trig.py
+++ b/src/sage/functions/trig.py
@@ -529,13 +529,8 @@ class Function_arcsin(GinacFunction):
arcsin
sage: asin(complex(1,1))
(0.6662394324925152+1.0612750619050357j)
-
- Check that :trac:`22823` is fixed::
-
- sage: bool(asin(SR(2.1)) == NaN)
- True
- sage: asin(SR(2.1)).is_real()
- False
+ sage: asin(SR(2.1))
+ 1.57079632679490 - 1.37285914424258*I
"""
GinacFunction.__init__(self, 'arcsin', latex_name=r"\arcsin",
conversions=dict(maxima='asin', sympy='asin', fricas="asin", giac="asin"))
@@ -595,13 +590,8 @@ class Function_arccos(GinacFunction):
arccos
sage: acos(complex(1,1))
(0.9045568943023814-1.0612750619050357j)
-
- Check that :trac:`22823` is fixed::
-
- sage: bool(acos(SR(2.1)) == NaN)
- True
- sage: acos(SR(2.1)).is_real()
- False
+ sage: acos(SR(2.1))
+ 1.37285914424258*I
"""
GinacFunction.__init__(self, 'arccos', latex_name=r"\arccos",
conversions=dict(maxima='acos', sympy='acos', fricas='acos', giac='acos'))
@@ -807,7 +797,7 @@ class Function_arcsec(GinacFunction):
sage: arcsec(2).n(100)
1.0471975511965977461542144611
sage: arcsec(1/2).n(100)
- NaN
+ 1.3169578969248167086250463473*I
sage: RDF(arcsec(2)) # abs tol 1e-15
1.0471975511965976
sage: arcsec(1 + I)
@@ -958,7 +948,9 @@ class Function_arctan2(GinacFunction):
sage: atan2(0,0,hold=True)
arctan2(0, 0)
sage: atan2(0,0,hold=True).n()
- NaN
+ Traceback (most recent call last):
+ ...
+ RuntimeError: atan2(): division by zero
Check if :trac:`10062` is fixed, this was caused by
``(I*I).is_positive()`` returning ``True``::
diff --git a/src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py b/src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py
index 3b5c8d1729..1c6b73a16c 100644
--- a/src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py
+++ b/src/sage/geometry/hyperbolic_space/hyperbolic_geodesic.py
@@ -1422,8 +1422,10 @@ class HyperbolicGeodesicUHP(HyperbolicGeodesic):
expressions do not generate runtime errors. ::
sage: g=HyperbolicPlane().UHP().get_geodesic(-1+I,1+I)
- sage: g.midpoint()
- Point in UHP 1/2*(sqrt(2)*e^(1/2*arccosh(3)) - sqrt(2) + (I - 1)*e^(1/2*arccosh(3)) + I - 1)/((1/4*I - 1/4)*sqrt(2)*e^(1/2*arccosh(3)) - (1/4*I - 1/4)*sqrt(2) + 1/2*e^(1/2*arccosh(3)) + 1/2)
+ sage: point = g.midpoint(); point
+ Point in UHP -1/2*(sqrt(2)*...
+ sage: QQbar(point.coordinates()).radical_expression()
+ I*sqrt(2)
Check that floating points remain floating points
in :meth:`midpoint` ::
diff --git a/src/sage/interfaces/fricas.py b/src/sage/interfaces/fricas.py
index 82aae78e37..8501ea2a18 100644
--- a/src/sage/interfaces/fricas.py
+++ b/src/sage/interfaces/fricas.py
@@ -1084,14 +1084,14 @@ class FriCASElement(ExpectElement):
0.451026811796262,
0.732815101786507,
0.837981225008390,
- NaN,
- NaN,
+ 1.57079632679490 - 0.467145308103262*I,
+ 0.467145308103262*I,
1.11976951499863,
0.451026811796262,
0.732815101786507,
0.837981225008390,
- NaN,
- NaN]
+ 1.57079632679490 - 0.467145308103262*I,
+ 0.467145308103262*I]
sage: l = [tanh, sinh, cosh, coth, sech, csch, asinh, acosh, atanh, acoth, asech, acsch, arcsinh, arccosh, arctanh, arccoth, arcsech, arccsch]
sage: [f(x)._fricas_().sage().subs(x=0.9) for f in l] # optional - fricas
[0.716297870199024,
diff --git a/src/sage/libs/pynac/pynac.pyx b/src/sage/libs/pynac/pynac.pyx
index 9e9d8f664b..e3406f007e 100644
--- a/src/sage/libs/pynac/pynac.pyx
+++ b/src/sage/libs/pynac/pynac.pyx
@@ -1824,7 +1824,7 @@ cdef py_atan2(x, y):
sage: atan2(CC(I), CC(I+1))
0.553574358897045 + 0.402359478108525*I
sage: atan2(CBF(I), CBF(I+1))
- [0.55357435889705 +/- 5.58e-15] + [0.402359478108525 +/- 7.11e-16]*I
+ [0.55357435889705 +/- ...] + [0.402359478108525 +/- ...]*I
Check that :trac:`23776` is fixed and RDF input gives real output::
diff --git a/src/sage/matrix/matrix_symbolic_dense.pyx b/src/sage/matrix/matrix_symbolic_dense.pyx
index 46a15e53eb..7a0beb437b 100644
--- a/src/sage/matrix/matrix_symbolic_dense.pyx
+++ b/src/sage/matrix/matrix_symbolic_dense.pyx
@@ -200,7 +200,7 @@ cdef class Matrix_symbolic_dense(Matrix_generic_dense):
sage: eval, [evec], mult = es[0]
sage: delta = eval*evec - evec*A
sage: abs(abs(delta)) < 1e-10
- sqrt(9/25*((2*sqrt(6) - 3)*(sqrt(6) - 2) + 7*sqrt(6) - 18)^2 + 9/25*((sqrt(6) - 2)*(sqrt(6) - 4) + 6*sqrt(6) - 14)^2) < (1.00000000000000e-10)
+ 3/5*sqrt(((2*sqrt(6) - 3)*(sqrt(6) - 2) + 7*sqrt(6) - 18)^2 + ((sqrt(6) - 2)*(sqrt(6) - 4) + 6*sqrt(6) - 14)^2) < (1.00000000000000e-10)
sage: abs(abs(delta)).n() < 1e-10
True
diff --git a/src/sage/modules/matrix_morphism.py b/src/sage/modules/matrix_morphism.py
index 17a1d6e290..03892ceec0 100644
--- a/src/sage/modules/matrix_morphism.py
+++ b/src/sage/modules/matrix_morphism.py
@@ -214,9 +214,9 @@ class MatrixMorphism_abstract(sage.categories.morphism.Morphism):
sage: f((1, 0))
Traceback (most recent call last):
...
- TypeError: Unable to coerce entries (=[1.00000000000000*I, 0.000000000000000]) to coefficients in Real Field with 53 bits of precision
+ TypeError: Unable to coerce entries (=[1.00000000000000*I, 0]) to coefficients in Real Field with 53 bits of precision
sage: f((1, 0), coerce=False)
- (1.00000000000000*I, 0.000000000000000)
+ (1.00000000000000*I, 0)
"""
if self.domain().is_ambient():
diff --git a/src/sage/plot/plot.py b/src/sage/plot/plot.py
index 77cdeb8c46..e501e74036 100644
--- a/src/sage/plot/plot.py
+++ b/src/sage/plot/plot.py
@@ -2061,7 +2061,7 @@ def _plot(funcs, xrange, parametric=False,
plot properly (:trac:`13246`)::
sage: parametric_plot((x, arcsec(x)), (x, -2, 2))
- Graphics object consisting of 1 graphics primitive
+ Graphics object consisting of 2 graphics primitives
"""
from sage.plot.colors import Color
diff --git a/src/sage/repl/display/formatter.py b/src/sage/repl/display/formatter.py
index 8ce2e839d7..948207c95e 100644
--- a/src/sage/repl/display/formatter.py
+++ b/src/sage/repl/display/formatter.py
@@ -25,11 +25,11 @@ generally, all sage expression as an ASCII art object::
sage: shell = get_test_shell()
sage: shell.run_cell('%display ascii_art')
sage: shell.run_cell('integral(x^2/pi^x, x)')
- / 2 2 \ -x*log(pi)
- -\x *log (pi) + 2*x*log(pi) + 2/*e
- ---------------------------------------------
- 3
- log (pi)
+ -x / 2 2 \
+ -pi *\x *log (pi) + 2*x*log(pi) + 2/
+ --------------------------------------
+ 3
+ log (pi)
sage: shell.run_cell("i = var('i')")
sage: shell.run_cell('sum(i*x^i, i, 0, 10)')
10 9 8 7 6 5 4 3 2
diff --git a/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py b/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py
index d8ebbf4f76..8c60f65e99 100644
--- a/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py
+++ b/src/sage/rings/asymptotic/asymptotics_multivariate_generating_functions.py
@@ -151,8 +151,8 @@ A multiple point example (Example 6.5 of [RaWi2012]_)::
[(x + 2*y - 1, 1), (2*x + y - 1, 1)])
sage: F1 = decomp[1]
sage: F1.asymptotics(p, alpha, 2)
- (-3*((2*a^2 - 5*a*b + 2*b^2)*r^2 + (a + b)*r + 3)*((1/3)^(-a)*(1/3)^(-b))^r,
- (1/3)^(-a)*(1/3)^(-b), -3*(2*a^2 - 5*a*b + 2*b^2)*r^2 - 3*(a + b)*r - 9)
+ (-3*((2*a^2 - 5*a*b + 2*b^2)*r^2 + (a + b)*r + 3)*(1/((1/3)^a*(1/3)^b))^r,
+ 1/((1/3)^a*(1/3)^b), -3*(2*a^2 - 5*a*b + 2*b^2)*r^2 - 3*(a + b)*r - 9)
sage: alpha = [4, 3]
sage: decomp = F.asymptotic_decomposition(alpha)
sage: F1 = decomp[1]
@@ -2159,7 +2159,7 @@ class FractionWithFactoredDenominator(RingElement):
sage: p = {x: 1/3, y: 1/3}
sage: alpha = (var('a'), var('b'))
sage: F.asymptotics_multiple(p, alpha, 2, var('r')) # long time
- (3*((1/3)^(-a)*(1/3)^(-b))^r*e^(2/3), (1/3)^(-a)*(1/3)^(-b), 3*e^(2/3))
+ (3*(1/((1/3)^a*(1/3)^b))^r*e^(2/3), 1/((1/3)^a*(1/3)^b), 3*e^(2/3))
"""
from itertools import product
from sage.calculus.functions import jacobian
diff --git a/src/sage/stats/basic_stats.py b/src/sage/stats/basic_stats.py
index 16a268a02c..5fd244e93b 100644
--- a/src/sage/stats/basic_stats.py
+++ b/src/sage/stats/basic_stats.py
@@ -183,7 +183,7 @@ def std(v, bias=False):
sage: std([])
NaN
sage: std([I, sqrt(2), 3/5])
- sqrt(1/450*(10*sqrt(2) - 5*I - 3)^2 + 1/450*(5*sqrt(2) - 10*I + 3)^2 + 1/450*(5*sqrt(2) + 5*I - 6)^2)
+ 1/15*sqrt(1/2)*sqrt((10*sqrt(2) - 5*I - 3)^2 + (5*sqrt(2) - 10*I + 3)^2 + (5*sqrt(2) + 5*I - 6)^2)
sage: std([RIF(1.0103, 1.0103), RIF(2)])
0.6998235813403261?
sage: import numpy
diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx
index ab4c05de3a..60f0dc549a 100644
--- a/src/sage/symbolic/expression.pyx
+++ b/src/sage/symbolic/expression.pyx
@@ -622,7 +622,7 @@ cdef class Expression(CommutativeRingElement):
sage: x^(-5)
x^(-5)
sage: x^(-y)
- x^(-y)
+ 1/(x^y)
sage: 2*x^(-1)
2/x
sage: i*x
@@ -3621,14 +3621,14 @@ cdef class Expression(CommutativeRingElement):
sage: repl_dict = {b_0: b_0, b_3: b_1, b_2: b_3, b_1: b_2}
sage: P = precomp.substitute(repl_dict)
sage: P.expand()
- -2^(-b_0)*2^(-b_2)*2^b_3 - 2^b_0*2^(-b_2)*2^b_3 -
- 2^(-b_0)*2^b_2*2^b_3 + 2^b_0*2^b_2*2^b_3 - 2*2^(-b_0)*2^(-b_2)
- - 2*2^b_0*2^(-b_2) - 2*2^(-b_0)*2^b_2 + 2*2^b_0*2^b_2 +
- 2^(-b_0)*2^b_3 + 2^b_0*2^b_3 + 2^(-b_2)*2^b_3 + 2^b_2*2^b_3 +
- 2*2^(-b_0) + 2*2^b_0 + 2*2^(-b_2) + 2*2^b_2 - 9*2^b_3 -
- 2^(-b_0)*2^(-b_2)/2^b_3 - 2^b_0*2^(-b_2)/2^b_3 -
- 2^(-b_0)*2^b_2/2^b_3 + 2^b_0*2^b_2/2^b_3 + 2^(-b_0)/2^b_3 +
- 2^b_0/2^b_3 + 2^(-b_2)/2^b_3 + 2^b_2/2^b_3 - 9/2^b_3 - 18
+ 2^b_0*2^b_2*2^b_3 + 2*2^b_0*2^b_2 + 2^b_0*2^b_3 + 2^b_2*2^b_3 +
+ 2*2^b_0 + 2*2^b_2 - 9*2^b_3 + 2^b_0*2^b_2/2^b_3 -
+ 2^b_0*2^b_3/2^b_2 - 2^b_2*2^b_3/2^b_0 - 2*2^b_0/2^b_2 -
+ 2*2^b_2/2^b_0 + 2^b_0/2^b_3 + 2^b_2/2^b_3 + 2^b_3/2^b_0 +
+ 2^b_3/2^b_2 + 2/2^b_0 + 2/2^b_2 - 2^b_0/(2^b_2*2^b_3) -
+ 2^b_2/(2^b_0*2^b_3) - 9/2^b_3 - 2^b_3/(2^b_0*2^b_2) -
+ 2/(2^b_0*2^b_2) + 1/(2^b_0*2^b_3) + 1/(2^b_2*2^b_3) -
+ 1/(2^b_0*2^b_2*2^b_3) - 18
sage: _0,b_1,b_2=var('b_0,b_1,b_2')
sage: f = 1/27*b_2^2/(2^b_2)^2 + 1/27*b_1^2/(2^b_1)^2 + \
@@ -3809,7 +3809,7 @@ cdef class Expression(CommutativeRingElement):
sage: x = SR.symbol('x', domain='real')
sage: (x^3)^(1/3)
- (x^3)^(1/3)
+ x
sage: (x^4)^(1/4)
abs(x)
sage: (x^8)^(1/4)
@@ -3872,7 +3872,7 @@ cdef class Expression(CommutativeRingElement):
sage: 2^(x/log(2))
e^x
sage: 2^(-x^2/2/log(2))
- e^(-1/2*x^2)
+ 1/e^(1/2*x^2)
sage: x^(x/log(x))
x^(x/log(x))
sage: assume(x > 0)
@@ -4816,18 +4816,24 @@ cdef class Expression(CommutativeRingElement):
sage: ((x+y)^(x+y)).match(w0^w0)
{$0: x + y}
sage: t = ((a+b)*(a+c)).match((a+w0)*(a+w1))
- sage: t[w0], t[w1]
- (c, b)
+ sage: set([t[w0], t[w1]]) == set([b, c])
+ True
sage: ((a+b)*(a+c)).match((w0+b)*(w0+c))
{$0: a}
sage: t = ((a+b)*(a+c)).match((w0+w1)*(w0+w2))
- sage: t[w0], t[w1], t[w2]
- (a, c, b)
- sage: print(((a+b)*(a+c)).match((w0+w1)*(w1+w2)))
- None
+ sage: t[w0]
+ a
+ sage: set([t[w1], t[w2]]) == set([b, c])
+ True
+ sage: t = ((a+b)*(a+c)).match((w0+w1)*(w1+w2))
+ sage: t[w1]
+ a
+ sage: set([t[w0], t[w2]]) == set([b, c])
+ True
sage: t = (a*(x+y)+a*z+b).match(a*w0+w1)
- sage: t[w0], t[w1]
- (x + y, a*z + b)
+ sage: s = set([t[w0], t[w1]])
+ sage: s == set([x+y, a*z+b]) or s == set([z, a*(x+y)+b])
+ True
sage: print((a+b+c+d+f+g).match(c))
None
sage: (a+b+c+d+f+g).has(c)
@@ -4836,7 +4842,7 @@ cdef class Expression(CommutativeRingElement):
{$0: a + b + d + f + g}
sage: (a+b+c+d+f+g).match(c+g+w0)
{$0: a + b + d + f}
- sage: (a+b).match(a+b+w0)
+ sage: (a+b).match(a+b+w0) # known bug
{$0: 0}
sage: print((a*b^2).match(a^w0*b^w1))
None
@@ -5009,7 +5015,7 @@ cdef class Expression(CommutativeRingElement):
a^3 + b^3 + (x + y)^3
sage: t.subs(w0 == w0^2)
- (x^2 + y^2)^18 + a^16 + b^16
+ a^8 + b^8 + (x^2 + y^2)^6
sage: t.subs(a == b, b == c)
(x + y)^3 + b^2 + c^2
@@ -8392,9 +8398,13 @@ cdef class Expression(CommutativeRingElement):
sage: SR(I).arctan2(1)
arctan2(I, 1)
sage: SR(CDF(0,1)).arctan2(1)
- NaN + +infinity*I
- sage: SR(1).arctan2(CDF(0,1)) # known bug
- 0.7853981633974484 - 19.012501686914433*I
+ Traceback (most recent call last):
+ ...
+ ValueError: power::eval(): division by zero
+ sage: SR(1).arctan2(CDF(0,1))
+ Traceback (most recent call last):
+ ...
+ ValueError: power::eval(): division by zero
sage: arctan2(0,oo)
0
@@ -8656,7 +8666,7 @@ cdef class Expression(CommutativeRingElement):
1/2*I*pi
sage: SR(1/2).arccosh()
arccosh(1/2)
- sage: SR(CDF(1/2)).arccosh() # rel tol 1e-15
+ sage: SR(CDF(1/2)).arccosh() # rel tol 1e-15
1.0471975511965976*I
sage: maxima('acosh(0.5)')
1.04719755119659...*%i
@@ -11687,7 +11697,7 @@ cdef class Expression(CommutativeRingElement):
sage: a.solve(t)
[]
sage: b = a.canonicalize_radical(); b
- -23040.0*(-2.0*e^(1800*t) + 25.0*e^(900*t) - 32.0)*e^(-2400*t)
+ (46080.0*e^(1800*t) - 576000.0*e^(900*t) + 737280.0)*e^(-2400*t)
sage: b.solve(t)
[]
sage: b.solve(t, to_poly_solve=True)
@@ -12163,14 +12173,14 @@ cdef class Expression(CommutativeRingElement):
sage: (n,k,j)=var('n,k,j')
sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n)
- -(-1)^(-j)*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n)
+ -(-1)^j*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n)
sage: assume(j>-1)
sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n)
1
sage: forget()
sage: assume(n>=j)
sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n)
- -(-1)^(-j)*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n)
+ -(-1)^j*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n)
sage: forget()
sage: assume(j==-1)
sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n)
@@ -12178,7 +12188,7 @@ cdef class Expression(CommutativeRingElement):
sage: forget()
sage: assume(j<-1)
sage: sum(binomial(n,k)*binomial(k-1,j)*(-1)**(k-1-j),k,j+1,n)
- -(-1)^(-j)*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n)
+ -(-1)^j*sum((-1)^k*binomial(k - 1, j)*binomial(n, k), k, j + 1, n)
sage: forget()
Check that :trac:`16176` is fixed::
diff --git a/src/sage/symbolic/relation.py b/src/sage/symbolic/relation.py
index da6f0eef42..4bd65ef572 100644
--- a/src/sage/symbolic/relation.py
+++ b/src/sage/symbolic/relation.py
@@ -895,7 +895,7 @@ def solve(f, *args, **kwds):
sage: (r[0][x], r[0][y])
(2*lambert_w(1/2), 1)
sage: solve(-2*x**3 + 4*x**2 - 2*x + 6 > 0, x, algorithm='sympy')
- [x < (1/6*sqrt(77) + 79/54)^(1/3) + 1/9/(1/6*sqrt(77) + 79/54)^(1/3) + 2/3]
+ [x < 1/3*(1/2)^(1/3)*(9*sqrt(77) + 79)^(1/3) + 2/3*(1/2)^(2/3)/(9*sqrt(77) + 79)^(1/3) + 2/3]
sage: solve(sqrt(2*x^2 - 7) - (3 - x),x,algorithm='sympy')
[x == -8, x == 2]
sage: solve(sqrt(2*x + 9) - sqrt(x + 1) - sqrt(x + 4),x,algorithm='sympy')

View File

@ -1,40 +0,0 @@
diff --git a/src/sage/tests/py3_syntax.py b/src/sage/tests/py3_syntax.py
index e564860b48..86ab3725f9 100644
--- a/src/sage/tests/py3_syntax.py
+++ b/src/sage/tests/py3_syntax.py
@@ -179,15 +179,30 @@ class Python3SyntaxTest(SortedDirectoryWalkerABC):
sage: py3_syntax = Python3SyntaxTest()
sage: py3_syntax.test(src.name)
Invalid Python 3 syntax found:
- File "...py", line 1
- print "invalid print statement"
- ^
- SyntaxError: Missing parentheses in call to 'print'
+ Missing parentheses in call to 'print'...
sage: os.unlink(src.name)
"""
+
+ # compile all given files in memory, printing all errors
+ # inspired by the py_compile module (but without writing to file)
+ script = """
+import sys
+import importlib.machinery
+rv = 0
+for file in sys.argv[1:]:
+ loader = importlib.machinery.SourceFileLoader('<sage_test>', file)
+ source_bytes = loader.get_data(file)
+ try:
+ code = loader.source_to_code(source_bytes, file)
+ except Exception as err:
+ print(err)
+ rv = 1
+sys.exit(rv)
+"""
cmd = [
'python3',
- '-m', 'py_compile'
+ '-c',
+ script,
] + list(filenames)
process = subprocess.Popen(
cmd,

View File

@ -1,31 +0,0 @@
From 7419e0246230594ebfd5e7a2fe6b80d67abfc98a Mon Sep 17 00:00:00 2001
From: Jeroen Demeyer <jdemeyer@cage.ugent.be>
Date: Tue, 20 Mar 2018 10:40:41 +0100
Subject: Fix sphinxify doctests
---
sagenb/misc/sphinxify.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/sagenb/misc/sphinxify.py b/sagenb/misc/sphinxify.py
index 4f76d41..15623d9 100644
--- a/sagenb/misc/sphinxify.py
+++ b/sagenb/misc/sphinxify.py
@@ -47,11 +47,11 @@ def sphinxify(docstring, format='html'):
sage: from sage.misc.sphinxify import sphinxify
sage: sphinxify('A test')
- '...<div class="docstring">\n \n <p>A test</p>\n\n\n</div>'
+ '<div class="docstring">\n \n <p>A test</p>\n\n\n</div>'
sage: sphinxify('**Testing**\n`monospace`')
- '...<div class="docstring"...<strong>Testing</strong>\n<span class="math"...</p>\n\n\n</div>'
+ '<div class="docstring"...<strong>Testing</strong>\n<span class="math notranslate"...</p>\n\n\n</div>'
sage: sphinxify('`x=y`')
- '...<div class="docstring">\n \n <p><span class="math">x=y</span></p>\n\n\n</div>'
+ '<div class="docstring">\n \n <p><span class="math notranslate">x=y</span></p>\n\n\n</div>'
sage: sphinxify('`x=y`', format='text')
'x=y\n'
sage: sphinxify(':math:`x=y`', format='text')
--
cgit v1.0-1-gd88e

View File

@ -0,0 +1,274 @@
diff --git a/src/sage/interfaces/singular.py b/src/sage/interfaces/singular.py
index 9d65c9fa6c..a028bbe719 100644
--- a/src/sage/interfaces/singular.py
+++ b/src/sage/interfaces/singular.py
@@ -654,7 +654,7 @@ class Singular(ExtraTabCompletion, Expect):
s = Expect.eval(self, x, **kwds)
- if s.find("error") != -1 or s.find("Segment fault") != -1:
+ if s.find("error occurred") != -1 or s.find("Segment fault") != -1:
raise SingularError('Singular error:\n%s'%s)
if get_verbose() > 0:
@@ -1079,7 +1079,7 @@ class Singular(ExtraTabCompletion, Expect):
sage: S = singular.ring('real', '(a,b)', 'lp')
sage: singular.current_ring()
polynomial ring, over a field, global ordering
- // coefficients: float
+ // coefficients: Float()
// number of vars : 2
// block 1 : ordering lp
// : names a b
@@ -1157,7 +1157,7 @@ class Singular(ExtraTabCompletion, Expect):
sage: singular._tab_completion()
['exteriorPower',
...
- 'flintZ']
+ 'crossprod']
"""
p = re.compile("// *([a-z0-9A-Z_]*).*") #compiles regular expression
proclist = self.eval("listvar(proc)").splitlines()
@@ -1183,7 +1183,7 @@ class Singular(ExtraTabCompletion, Expect):
EXAMPLES::
sage: singular.version()
- "Singular ... version 4.1.0 ...
+ "Singular ... version 4...
"""
return singular_version()
@@ -1562,7 +1562,7 @@ class SingularElement(ExtraTabCompletion, ExpectElement):
elif charstr[0] in ['0', 'QQ']:
from sage.all import QQ
br = QQ
- elif charstr[0]=='real':
+ elif charstr[0].startswith('Float'):
from sage.all import RealField, ceil, log
prec = singular.eval('ringlist(basering)[1][2][1]')
br = RealField(ceil((ZZ(prec)+1)/log(2,10)))
@@ -1750,7 +1750,7 @@ class SingularElement(ExtraTabCompletion, ExpectElement):
# Singular 4 puts parentheses around floats and sign outside them
charstr = self.parent().eval('charstr(basering)').split(',',1)
- if charstr[0] in ['real', 'complex']:
+ if charstr[0]=='complex' or charstr[0].startswith('Float'):
for i in range(coeff_start, 2 * coeff_start):
singular_poly_list[i] = singular_poly_list[i].replace('(','').replace(')','')
@@ -1992,7 +1992,7 @@ class SingularElement(ExtraTabCompletion, ExpectElement):
sage: S = singular.ring('real', '(a,b)', 'lp')
sage: singular.current_ring()
polynomial ring, over a field, global ordering
- // coefficients: float
+ // coefficients: Float()
// number of vars : 2
// block 1 : ordering lp
// : names a b
@@ -2072,7 +2072,7 @@ class SingularElement(ExtraTabCompletion, ExpectElement):
sage: R._tab_completion()
['exteriorPower',
...
- 'flintZ']
+ 'crossprod']
"""
return self.parent()._tab_completion()
@@ -2358,7 +2358,7 @@ def singular_version():
EXAMPLES::
sage: singular.version()
- "Singular ... version 4.1.0 ...
+ "Singular ... version 4...
"""
return singular.eval('system("--version");')
diff --git a/src/sage/libs/singular/decl.pxd b/src/sage/libs/singular/decl.pxd
index 4b658c4807..d863740419 100644
--- a/src/sage/libs/singular/decl.pxd
+++ b/src/sage/libs/singular/decl.pxd
@@ -170,7 +170,7 @@ cdef extern from "singular/Singular/libsingular.h":
int n_NumberOfParameters(const n_Procs_s* r)
- ctypedef struct poly "polyrec":
+ ctypedef struct poly "spolyrec":
poly *next
number *coef
unsigned long exp[1]
@@ -630,9 +630,13 @@ cdef extern from "singular/Singular/libsingular.h":
# return p*q, destroys p and q
poly *p_Mult_q(poly *p, poly *q, ring *r)
+ # polynomial division, ignoring the rest
+ # via singclap_pdivide resp. idLift, destroys p,q
+ poly *p_Divide(poly *p, poly *q, ring *r)
+
# divide monomial p by monomial q, p,q const
- poly *pDivide(poly *p,poly *q)
+ poly *pMDivide(poly *p,poly *q)
# return the i-th power of p; p destroyed, requires global ring
diff --git a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
index 2a8d9ae021..aeff53af6c 100644
--- a/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
+++ b/src/sage/rings/polynomial/multi_polynomial_libsingular.pyx
@@ -190,8 +190,8 @@ from sage.libs.singular.decl cimport (
n_IsUnit, n_Invers,
p_ISet, rChangeCurrRing, p_Copy, p_Init, p_SetCoeff, p_Setm, p_SetExp, p_Add_q,
p_NSet, p_GetCoeff, p_Delete, p_GetExp, pNext, rRingVar, omAlloc0, omStrDup,
- omFree, pDivide, p_SetCoeff0, n_Init, p_DivisibleBy, pLcm, p_LmDivisibleBy,
- pDivide, p_IsConstant, p_ExpVectorEqual, p_String, p_LmInit, n_Copy,
+ omFree, pMDivide, p_Divide, p_SetCoeff0, n_Init, p_DivisibleBy, pLcm, p_LmDivisibleBy,
+ pMDivide, p_IsConstant, p_ExpVectorEqual, p_String, p_LmInit, n_Copy,
p_IsUnit, p_Series, p_Head, idInit, fast_map_common_subexp, id_Delete,
p_IsHomogeneous, p_Homogen, p_Totaldegree,pLDeg1_Totaldegree, singclap_pdivide, singclap_factorize,
idLift, IDELEMS, On, Off, SW_USE_CHINREM_GCD, SW_USE_EZGCD,
@@ -1693,8 +1693,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base):
if not g._poly:
raise ZeroDivisionError
- if r!=currRing: rChangeCurrRing(r) # pDivide
- res = pDivide(f._poly, g._poly)
+ if r!=currRing: rChangeCurrRing(r) # pMDivide
+ res = pMDivide(f._poly, g._poly)
if coeff:
if r.cf.type == n_unknown or r.cf.cfDivBy(p_GetCoeff(f._poly, r), p_GetCoeff(g._poly, r), r.cf):
n = r.cf.cfDiv( p_GetCoeff(f._poly, r) , p_GetCoeff(g._poly, r), r.cf)
@@ -1853,8 +1853,8 @@ cdef class MPolynomialRing_libsingular(MPolynomialRing_base):
and (<MPolynomial_libsingular>g) \
and g.parent() is self \
and p_LmDivisibleBy((<MPolynomial_libsingular>g)._poly, m, r):
- if r!=currRing: rChangeCurrRing(r) # pDivide
- flt = pDivide(f._poly, (<MPolynomial_libsingular>g)._poly)
+ if r!=currRing: rChangeCurrRing(r) # pMDivide
+ flt = pMDivide(f._poly, (<MPolynomial_libsingular>g)._poly)
#p_SetCoeff(flt, n_Div( p_GetCoeff(f._poly, r) , p_GetCoeff((<MPolynomial_libsingular>g)._poly, r), r), r)
p_SetCoeff(flt, n_Init(1, r), r)
return new_MP(self,flt), g
@@ -4023,16 +4023,6 @@ cdef class MPolynomial_libsingular(MPolynomial):
Traceback (most recent call last):
...
NotImplementedError: Division of multivariate polynomials over non fields by non-monomials not implemented.
-
- TESTS::
-
- sage: P.<x,y> = ZZ[]
- sage: p = 3*(-x^8*y^2 - x*y^9 + 6*x^8*y + 17*x^2*y^6 - x^3*y^2)
- sage: q = 7*(x^2 + x*y + y^2 + 1)
- sage: p*q//q == p
- True
- sage: p*q//p == q
- True
"""
cdef MPolynomialRing_libsingular parent = self._parent
cdef ring *r = self._parent_ring
@@ -4052,13 +4042,18 @@ cdef class MPolynomial_libsingular(MPolynomial):
_right = <MPolynomial_libsingular>right
if r.cf.type != n_unknown:
+ if r.cf.type == n_Z:
+ P = parent.change_ring(RationalField())
+ f = P(self)//P(right)
+ CM = list(f)
+ return parent(sum([c.floor()*m for c,m in CM]))
if _right.is_monomial():
p = _self._poly
quo = p_ISet(0,r)
- if r != currRing: rChangeCurrRing(r) # pDivide
+ if r != currRing: rChangeCurrRing(r) # pMDivide
while p:
if p_DivisibleBy(_right._poly, p, r):
- temp = pDivide(p, _right._poly)
+ temp = pMDivide(p, _right._poly)
p_SetCoeff0(temp, n_Copy(p_GetCoeff(p, r), r), r)
quo = p_Add_q(quo, temp, r)
p = pNext(p)
@@ -4794,6 +4789,8 @@ cdef class MPolynomial_libsingular(MPolynomial):
sage: p = -x*y + x*z + 54*x - 2
sage: (5*p^2).lcm(3*p) == 15*p^2
True
+ sage: lcm(2*x,2*x*y)
+ 2*x*y
"""
cdef ring *_ring = self._parent_ring
cdef poly *ret
@@ -4821,9 +4818,7 @@ cdef class MPolynomial_libsingular(MPolynomial):
if _ring!=currRing: rChangeCurrRing(_ring) # singclap_gcd
gcd = singclap_gcd(p_Copy(self._poly, _ring), p_Copy(_g._poly, _ring), _ring )
prod = pp_Mult_qq(self._poly, _g._poly, _ring)
- ret = singclap_pdivide(prod , gcd , _ring)
- p_Delete(&prod, _ring)
- p_Delete(&gcd, _ring)
+ ret = p_Divide(prod, gcd, _ring)
if count >= 20:
sig_off()
return new_MP(self._parent, ret)
@@ -4866,7 +4861,7 @@ cdef class MPolynomial_libsingular(MPolynomial):
sage: f.quo_rem(y)
(2*x^2, x + 1)
sage: f.quo_rem(3*x)
- (2*x*y + 1, -4*x^2*y - 2*x + 1)
+ (0, 2*x^2*y + x + 1)
TESTS::
@@ -4888,7 +4883,7 @@ cdef class MPolynomial_libsingular(MPolynomial):
if right.is_zero():
raise ZeroDivisionError
- if not self._parent._base.is_field() and not is_IntegerRing(self._parent._base):
+ if not self._parent._base.is_field():
py_quo = self//right
py_rem = self - right*py_quo
return py_quo, py_rem
diff --git a/src/sage/rings/polynomial/plural.pyx b/src/sage/rings/polynomial/plural.pyx
index d5439f7f08..ad20ebcca0 100644
--- a/src/sage/rings/polynomial/plural.pyx
+++ b/src/sage/rings/polynomial/plural.pyx
@@ -998,7 +998,7 @@ cdef class NCPolynomialRing_plural(Ring):
if not g._poly:
raise ZeroDivisionError
- res = pDivide(f._poly,g._poly)
+ res = pMDivide(f._poly,g._poly)
if coeff:
if (r.cf.type == n_unknown) or r.cf.cfDivBy(p_GetCoeff(f._poly, r), p_GetCoeff(g._poly, r), r.cf):
n = r.cf.cfDiv( p_GetCoeff(f._poly, r) , p_GetCoeff(g._poly, r), r.cf)
@@ -1193,7 +1193,7 @@ cdef class NCPolynomialRing_plural(Ring):
if isinstance(g, NCPolynomial_plural) \
and (<NCPolynomial_plural>g) \
and p_LmDivisibleBy((<NCPolynomial_plural>g)._poly, m, r):
- flt = pDivide(f._poly, (<NCPolynomial_plural>g)._poly)
+ flt = pMDivide(f._poly, (<NCPolynomial_plural>g)._poly)
#p_SetCoeff(flt, n_Div( p_GetCoeff(f._poly, r) , p_GetCoeff((<NCPolynomial_plural>g)._poly, r), r), r)
p_SetCoeff(flt, n_Init(1, r), r)
return new_NCP(self,flt), g
diff --git a/src/sage/rings/polynomial/polynomial_singular_interface.py b/src/sage/rings/polynomial/polynomial_singular_interface.py
index 9331169f8b..f753610fd3 100644
--- a/src/sage/rings/polynomial/polynomial_singular_interface.py
+++ b/src/sage/rings/polynomial/polynomial_singular_interface.py
@@ -81,8 +81,8 @@ class PolynomialRing_singular_repr:
sage: R.<x,y> = PolynomialRing(CC)
sage: singular(R)
polynomial ring, over a field, global ordering
- // coefficients: float[I](complex:15 digits, additional 0 digits)/(I^2+1)
- // number of vars : 2
+ // coefficients: real[I](complex:15 digits, additional 0 digits)/(I^2+1)
+ // number of vars : 2
// block 1 : ordering dp
// : names x y
// block 2 : ordering C
@@ -90,8 +90,8 @@ class PolynomialRing_singular_repr:
sage: R.<x,y> = PolynomialRing(RealField(100))
sage: singular(R)
polynomial ring, over a field, global ordering
- // coefficients: float
- // number of vars : 2
+ // coefficients: Float()
+ // number of vars : 2
// block 1 : ordering dp
// : names x y
// block 2 : ordering C

View File

@ -1,62 +0,0 @@
diff --git a/src/bin/sage b/src/bin/sage
index 397f30cbed..3fc473c343 100755
--- a/src/bin/sage
+++ b/src/bin/sage
@@ -980,8 +980,11 @@ if [ "$1" = '-rsyncdist' -o "$1" = "--rsyncdist" ]; then
fi
if [ "$1" = "-docbuild" -o "$1" = "--docbuild" ]; then
+ # Redirect stdin from /dev/null. This helps with running TeX which
+ # tends to ask interactive questions if something goes wrong. These
+ # cause the build to hang. If stdin is /dev/null, TeX just aborts.
shift
- exec sage-python23 -m "sage_setup.docbuild" "$@"
+ exec sage-python23 -m sage_setup.docbuild "$@" </dev/null
fi
if [ "$1" = '-gdb' -o "$1" = "--gdb" ]; then
diff --git a/src/doc/common/conf.py b/src/doc/common/conf.py
index 25f94f7b7d..3f07474d9b 100644
--- a/src/doc/common/conf.py
+++ b/src/doc/common/conf.py
@@ -627,7 +627,7 @@ def call_intersphinx(app, env, node, contnode):
sage: for line in open(thematic_index).readlines():
....: if "padics" in line:
....: sys.stdout.write(line)
- <li><a class="reference external" href="../reference/padics/sage/rings/padics/tutorial.html#sage-rings-padics-tutorial" title="(in Sage Reference Manual: p-Adics ...)"><span>Introduction to the -adics</span></a></li>
+ <li><a class="reference external" href="../reference/padics/sage/rings/padics/tutorial.html#sage-rings-padics-tutorial" title="(in Sage Reference Manual: p-Adics v...)"><span>Introduction to the -adics</span></a></li>
"""
debug_inf(app, "???? Trying intersphinx for %s"%node['reftarget'])
builder = app.builder
diff --git a/src/sage/misc/sphinxify.py b/src/sage/misc/sphinxify.py
index 4f76d4113a..8f426b5989 100644
--- a/src/sage/misc/sphinxify.py
+++ b/src/sage/misc/sphinxify.py
@@ -47,11 +47,11 @@ def sphinxify(docstring, format='html'):
sage: from sage.misc.sphinxify import sphinxify
sage: sphinxify('A test')
- '...<div class="docstring">\n \n <p>A test</p>\n\n\n</div>'
+ '<div class="docstring">\n \n <p>A test</p>\n\n\n</div>'
sage: sphinxify('**Testing**\n`monospace`')
- '...<div class="docstring"...<strong>Testing</strong>\n<span class="math"...</p>\n\n\n</div>'
+ '<div class="docstring"...<strong>Testing</strong>\n<span class="math...</p>\n\n\n</div>'
sage: sphinxify('`x=y`')
- '...<div class="docstring">\n \n <p><span class="math">x=y</span></p>\n\n\n</div>'
+ '<div class="docstring">\n \n <p><span class="math notranslate nohighlight">x=y</span></p>\n\n\n</div>'
sage: sphinxify('`x=y`', format='text')
'x=y\n'
sage: sphinxify(':math:`x=y`', format='text')
diff --git a/src/sage_setup/docbuild/sphinxbuild.py b/src/sage_setup/docbuild/sphinxbuild.py
index fda76a4174..d3413239dd 100644
--- a/src/sage_setup/docbuild/sphinxbuild.py
+++ b/src/sage_setup/docbuild/sphinxbuild.py
@@ -207,7 +207,7 @@ def runsphinx():
try:
sys.stdout = SageSphinxLogger(sys.stdout, os.path.basename(output_dir))
sys.stderr = SageSphinxLogger(sys.stderr, os.path.basename(output_dir))
- sphinx.cmdline.main(sys.argv)
+ sphinx.cmdline.main(sys.argv[1:])
finally:
sys.stdout = saved_stdout
sys.stderr = saved_stderr

View File

@ -0,0 +1,46 @@
commit f02714d4aea80e17cb8df62bab75d7c1a1b61a8e
Author: Timo Kaufmann <timokau@zoho.com>
Date: Mon Jul 9 18:26:18 2018 +0200
Don't attempt to create dirs when showing pkg info
The script dir cannot be assumed to be writeable after installation.
diff --git a/build/bin/sage-spkg b/build/bin/sage-spkg
index f3e02aeae5..190d558ad1 100755
--- a/build/bin/sage-spkg
+++ b/build/bin/sage-spkg
@@ -167,14 +167,6 @@ if [ -z "$SAGE_BUILD_DIR" ]; then
export SAGE_BUILD_DIR="$SAGE_LOCAL/var/tmp/sage/build"
fi
-for dir in "$SAGE_SPKG_INST" "$SAGE_SPKG_SCRIPTS"; do
- mkdir -p "$dir"
- if [ $? -ne 0 ]; then
- error_msg "Error creating directory $dir"
- exit 1
- fi
-done
-
# Remove '.' from PYTHONPATH, which may also come from SAGE_PATH, to avoid
# trouble with setuptools / easy_install (cf. #10192, #10176):
@@ -563,11 +555,13 @@ fi
# Setup directories
##################################################################
-mkdir -p "$SAGE_BUILD_DIR"
-if [ $? -ne 0 ]; then
- error_msg "Error creating directory $SAGE_BUILD_DIR"
- exit 1
-fi
+for dir in "$SAGE_SPKG_INST" "$SAGE_SPKG_SCRIPTS" "$SAGE_BUILD_DIR"; do
+ mkdir -p "$dir"
+ if [ $? -ne 0 ]; then
+ error_msg "Error creating directory $dir"
+ exit 1
+ fi
+done
# Trac #5852: check write permissions
if [ ! -w "$SAGE_BUILD_DIR" ]; then

View File

@ -1,13 +0,0 @@
diff --git a/src/sage/misc/package.py b/src/sage/misc/package.py
index 7ff4f21675..1d72168833 100644
--- a/src/sage/misc/package.py
+++ b/src/sage/misc/package.py
@@ -350,7 +350,7 @@ def package_versions(package_type, local=False):
sage: 'gap' in std
True
sage: std['zn_poly']
- ('0.9.p11', '0.9.p11')
+ ('0.9', '0.9.p11')
"""
return {pkg['name']: (pkg['installed_version'], pkg['remote_version']) for pkg in list_packages(package_type, local=local).values()}

View File

@ -3,17 +3,20 @@
, fetchpatch
}:
stdenv.mkDerivation rec {
version = "8.2";
version = "8.3";
name = "sage-src-${version}";
src = fetchFromGitHub {
owner = "sagemath";
repo = "sage";
rev = version;
sha256 = "0d7vc16s7dj23an2cb8v5bhbnc6nsw20qhnnxr0xh8qg629027b8";
sha256 = "0mbm99m5xry21xpi4q3q96gx392liwbifywf5awvl0j85a7rkfyx";
};
nixPatches = [
# https://trac.sagemath.org/ticket/25809
./patches/spkg-scripts.patch
# https://trac.sagemath.org/ticket/25309
(fetchpatch {
name = "spkg-paths.patch";
@ -26,14 +29,7 @@ stdenv.mkDerivation rec {
sha256 = "14s50yg3hpw9cp3v581dx7zfmpm2j972im7x30iwki8k45mjvk3i";
})
# https://trac.sagemath.org/ticket/25328
# https://trac.sagemath.org/ticket/25546
# https://trac.sagemath.org/ticket/25722
(fetchpatch {
name = "install-jupyter-kernel-in-correct-prefix.patch";
url = "https://git.sagemath.org/sage.git/patch?id=72167b98e3f64326df6b2c78785df25539472fcc";
sha256 = "0pscnjhm7r2yr2rxnv4kkkq626vwaja720lixa3m3w9rwlxll5a7";
})
./patches/test-in-tmpdir.patch
# https://trac.sagemath.org/ticket/25358
@ -43,27 +39,13 @@ stdenv.mkDerivation rec {
sha256 = "1hhannz7xzprijakn2w2d0rhd5zv2zikik9p51i87bas3nc658f7";
})
# https://trac.sagemath.org/ticket/25357 rebased on 8.2
./patches/python3-syntax-without-write.patch
# https://trac.sagemath.org/ticket/25314
(fetchpatch {
name = "make-qepcad-test-optional.patch";
url = "https://git.sagemath.org/sage.git/patch/?h=fe294c58bd035ef427e268901d54a6faa0058138";
sha256 = "003d5baf5c0n5rfg010ijwkwz8kg0s414cxwczs2vhdayxdixbix";
})
# Unfortunately inclusion in upstream sage was rejected. Instead the bug was
# fixed in python, but of course not backported to 2.7. So we'll probably
# have to keep this around until 2.7 is deprecated.
# https://trac.sagemath.org/ticket/25316
# https://github.com/python/cpython/pull/7476
./patches/python-5755-hotpatch.patch
# https://trac.sagemath.org/ticket/25354
# https://trac.sagemath.org/ticket/25531
(fetchpatch {
name = "cysignals-include.patch";
url = "https://git.sagemath.org/sage.git/patch/?h=28778bd25a37c80884d2b24e0683fb2989300cef";
sha256 = "0fiiiw91pgs8avm9ggj8hb64bhqzl6jcw094d94nhirmh8w2jmc5";
})
# https://trac.sagemath.org/ticket/25315
(fetchpatch {
name = "find-libraries-in-dyld-library-path.patch";
@ -71,16 +53,13 @@ stdenv.mkDerivation rec {
sha256 = "1k3afq3qlzmgqwx6rzs5wv153vv9dsf5rk8pi61g57l3r3npbjmc";
})
# Pari upstream has since accepted a patch, so this patch won't be necessary once sage updates pari.
# https://trac.sagemath.org/ticket/25312
./patches/pari-stackwarn.patch
# https://trac.sagemath.org/ticket/25311
./patches/zn_poly_version.patch
# https://trac.sagemath.org/ticket/25345
# (upstream patch doesn't apply on 8.2 source)
./patches/dochtml-optional.patch
# work with pari with threads enabled at compile time (disable them at runtime)
# https://trac.sagemath.org/ticket/26002
./patches/pari-no-threads.patch
];
packageUpgradePatches = [
@ -106,87 +85,55 @@ stdenv.mkDerivation rec {
# the last version.
./patches/eclib-regulator-precision.patch
# sphinx 1.6 -> 1.7 upgrade
# https://trac.sagemath.org/ticket/24935
./patches/sphinx-1.7.patch
# Adapt hashes to new boost version
# https://trac.sagemath.org/ticket/22243
# (this ticket doesn't only upgrade boost but also avoids this problem in the future)
(fetchpatch {
name = "boost-upgrade.patch";
url = "https://git.sagemath.org/sage.git/patch?id=a24a9c6b30b93957333a3116196214a931325b69";
sha256 = "0z3870g2ms2a81vnw08dc2i4k7jr62w8fggvcdwaavgd1wvdxwfl";
})
# gfan 0.6.2
# https://trac.sagemath.org/ticket/23353
(fetchpatch {
name = "gfan-update.patch";
url = "https://git.sagemath.org/sage.git/patch/?h=420215fc469cde733ec7a339e59b78ad6eec804c&id=112498a293ea2bf563e41aed35f1aa608f01b349";
sha256 = "0ga3hkx8cr23dpc919lgvpi5lmy0d728jkq9z6kf0fl9s8g31mxb";
})
# New glpk version has new warnings, filter those out until upstream sage has found a solution
# https://trac.sagemath.org/ticket/24824
./patches/pari-stackwarn.patch # not actually necessary since tha pari upgrade, but necessary for the glpk patch to apply
(fetchpatch {
url = "https://salsa.debian.org/science-team/sagemath/raw/58bbba93a807ca2933ca317501d093a1bb4b84db/debian/patches/dt-version-glpk-4.65-ignore-warnings.patch";
sha256 = "0b9293v73wb4x13wv5zwyjgclc01zn16msccfzzi6znswklgvddp";
stripLen = 1;
})
# https://trac.sagemath.org/ticket/25329
(fetchpatch {
name = "dont-check-exact-glpk-version.patch";
url = "https://git.sagemath.org/sage.git/patch?id2=8bdc326ba57d1bb9664f63cf165a9e9920cc1afc&id=89d068d8d77316bfffa6bf8e9ebf70b3b3b88e5c";
sha256 = "00knwxs6fmymfgfl0q5kcavmxm9sf90a4r76y35n5s55gj8pl918";
})
# https://trac.sagemath.org/ticket/25355
(fetchpatch {
name = "maxima-5.41.0.patch";
url = "https://git.sagemath.org/sage.git/patch/?id=87328023c4739abdf24108038201e3fa9bdfc739";
sha256 = "0hxi7qr5mfx1bc32r8j7iba4gzd7c6v63asylyf5cbyp86azpb7i";
})
# Update cddlib from 0.94g to 0.94h.
# https://trac.sagemath.org/ticket/25341 (doesn't apply to 8.2 sources)
(fetchpatch {
url = "https://salsa.debian.org/science-team/sagemath/raw/58bbba93a807ca2933ca317501d093a1bb4b84db/debian/patches/u2-version-cddlib-094h.patch";
sha256 = "0fmw7pzbaxs2dshky6iw9pr8i23p9ih2y2lw661qypdrxh5xw03k";
stripLen = 1;
})
(fetchpatch {
name = "revert-cddlib-doctest-changes.patch";
url = "https://git.sagemath.org/sage.git/patch/?id=269c1e1551285566b8ba7a2b890989e5590e9f11";
sha256 = "12bcjhq7hm2pmmj2bgjvcffjyls2x7q61ivlnaj5v5bsvhc183iy";
revert = true;
})
# Only formatting changes.
# https://trac.sagemath.org/ticket/25260
./patches/numpy-1.14.3.patch
# https://trac.sagemath.org/ticket/24374
(fetchpatch {
name = "networkx-2.1.patch";
url = "https://salsa.debian.org/science-team/sagemath/raw/487df9ae48ca1d93d9b1cb3af8745d31e30fb741/debian/patches/u0-version-networkx-2.1.patch";
sha256 = "1xxxawygbgxgvlv7b4w8hhzgdnva4rhmgdxaiaa3pwdwln0yc750";
stripLen = 1;
})
# https://trac.sagemath.org/ticket/24927 rebased
./patches/arb-2.13.0.patch
# https://trac.sagemath.org/ticket/24838 rebased
./patches/pynac-0.7.22.patch
# https://trac.sagemath.org/ticket/25862
./patches/eclib-20180710.patch
# https://trac.sagemath.org/ticket/24735
./patches/singular-4.1.1p2.patch
# https://trac.sagemath.org/ticket/25567 and dependency #25635
(fetchpatch {
name = "pari-upgrade-dependency.patch";
url = "https://git.sagemath.org/sage.git/patch/?id=6995e7cae1b3476ad0145f8dfc897cf91f0c3c4d";
sha256 = "1dvhabl1c9pwd9xkjvbjjg15mvb14b24p1f3cby1mlqk34d4lrs6";
})
(fetchpatch {
name = "pari-2.11.0.patch";
url = "https://git.sagemath.org/sage.git/patch/?id=7af4748cab37d651eaa88be501db88f4a5ffc584";
sha256 = "13f740ly3c19gcmhjngiycvmc3mcfj61y00i6jv0wmfgpm2z3ank";
})
# ntl upgrade
(fetchpatch {
name = "lcalc-c++11.patch";
url = "https://git.archlinux.org/svntogit/community.git/plain/trunk/sagemath-lcalc-c++11.patch?h=packages/sagemath&id=0e31ae526ab7c6b5c0bfacb3f8b1c4fd490035aa";
sha256 = "0p5wnvbx65i7cp0bjyaqgp4rly8xgnk12pqwaq3dqby0j2bk6ijb";
})
# cddlib 0.94i -> 0.94j
(fetchpatch {
name = "cddlib-0.94j.patch";
url = "https://git.sagemath.org/sage.git/patch/?id=2ab1546b3e21d1d0ab3b4fcd58576848b3a2d888";
sha256 = "1c5gnasq7y9xxj762bn79bis0zi8d9bgg7jzlf64ifixsrc5cymb";
})
];
patches = nixPatches ++ packageUpgradePatches;
patches = nixPatches ++ packageUpgradePatches ++ [
./patches/known-padics-bug.patch
];
postPatch = ''
# make sure shebangs etc are fixed, but sage-python23 still works

View File

@ -3,7 +3,7 @@
let
name = "scilab-bin-${ver}";
ver = "5.5.2";
ver = "6.0.1";
majorVer = builtins.elemAt (lib.splitString "." ver) 0;
@ -24,9 +24,9 @@ stdenv.mkDerivation rec {
url = "https://www.scilab.org/download/${ver}/scilab-${ver}.bin.linux-${architecture}.tar.gz";
sha256 =
if stdenv.system == "i686-linux" then
"6143a95ded40411a35630a89b365875a6526cd4db1e2865ac5612929a7db937a"
"0fgjc2ak3b2qi6yin3fy50qwk2bcj0zbz1h4lyyic9n1n1qcliib"
else if stdenv.system == "x86_64-linux" then
"c0dd7a5f06ec7a1df7a6b1b8b14407ff7f45e56821dff9b3c46bd09d4df8d350"
"1scswlznc14vyzg0gqa1q9gcpwx05kz1sbn563463mzkdp7nd35d"
else
badArch;
};

View File

@ -1,5 +1,6 @@
{ stdenv, fetchurl, gmp, bison, perl, ncurses, readline, coreutils, pkgconfig
, lib
, fetchpatch
, autoreconfHook
, file
, flint
@ -36,6 +37,18 @@ stdenv.mkDerivation rec {
patchShebangs .
'';
patches = [
# NTL error handler was introduced in the library part, preventing users of
# the library from implementing their own error handling
# https://www.singular.uni-kl.de/forum/viewtopic.php?t=2769
(fetchpatch {
name = "move_error_handler_out_of_libsingular.patch";
# rebased version of https://github.com/Singular/Sources/commit/502cf86d0bb2a96715be6764774b64a69c1ca34c.patch
url = "https://git.sagemath.org/sage.git/plain/build/pkgs/singular/patches/singular-ntl-error-handler.patch?h=50b9ae2fd233c30860e1cbb3e63a26f2cc10560a";
sha256 = "0vgh4m9zn1kjl0br68n04j4nmn5i1igfn28cph0chnwf7dvr9194";
})
];
# For reference (last checked on commit 75f460d):
# https://github.com/Singular/Sources/blob/spielwiese/doc/Building-Singular-from-source.md
# https://github.com/Singular/Sources/blob/spielwiese/doc/external-packages-dynamic-modules.md

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, fetchFromGitHub, makeWrapper
{ stdenv, fetchpatch, fetchurl, fetchFromGitHub, makeWrapper
, docutils, perl, pkgconfig, python3, which, ffmpeg_4
, freefont_ttf, freetype, libass, libpthreadstubs
, lua, luasocket, libuchardet, libiconv ? null, darwin
@ -35,7 +35,7 @@
, youtubeSupport ? true, youtube-dl ? null
, vaapiSupport ? true, libva ? null
, drmSupport ? true, libdrm ? null
, openalSupport ? true, openalSoft ? null
, openalSupport ? false, openalSoft ? null
, vapoursynthSupport ? false, vapoursynth ? null
, archiveSupport ? false, libarchive ? null
, jackaudioSupport ? false, libjack2 ? null
@ -93,6 +93,13 @@ in stdenv.mkDerivation rec {
sha256 = "0i2nl65diqsjyz28dj07h6d8gq6ix72ysfm0nhs8514hqccaihs3";
};
# FIXME: Remove this patch for building on macOS if it gets released in
# the future.
patches = optional stdenv.isDarwin (fetchpatch {
url = https://github.com/mpv-player/mpv/commit/dc553c8cf4349b2ab5d2a373ad2fac8bdd229ebb.patch;
sha256 = "0pa8vlb8rsxvd1s39c4iv7gbaqlkn3hx21a6xnpij99jdjkw3pg8";
});
postPatch = ''
patchShebangs ./TOOLS/
'';
@ -107,6 +114,7 @@ in stdenv.mkDerivation rec {
"--disable-libmpv-static"
"--disable-static-build"
"--disable-build-date" # Purity
"--disable-macos-cocoa-cb" # Disable whilst Swift isn't supported
(enableFeature archiveSupport "libarchive")
(enableFeature dvdreadSupport "dvdread")
(enableFeature dvdnavSupport "dvdnav")
@ -143,7 +151,6 @@ in stdenv.mkDerivation rec {
++ optional speexSupport speex
++ optional bs2bSupport libbs2b
++ optional openalSupport openalSoft
++ optional (openalSupport && stdenv.isDarwin) darwin.apple_sdk.frameworks.OpenAL
++ optional libpngSupport libpng
++ optional youtubeSupport youtube-dl
++ optional sdl2Support SDL2
@ -152,20 +159,24 @@ in stdenv.mkDerivation rec {
++ optional drmSupport libdrm
++ optional vapoursynthSupport vapoursynth
++ optional archiveSupport libarchive
++ optional stdenv.isDarwin libiconv
++ optionals dvdnavSupport [ libdvdnav libdvdnav.libdvdread ]
++ optionals x11Support [ libX11 libXext libGLU_combined libXxf86vm libXrandr ]
++ optionals waylandSupport [ wayland wayland-protocols libxkbcommon ]
++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
CoreFoundation libiconv Cocoa CoreAudio
CoreFoundation Cocoa CoreAudio
]);
enableParallelBuilding = true;
buildPhase = ''
python3 ${waf} build
'' + optionalString stdenv.isDarwin ''
python3 TOOLS/osxbundle.py -s build/mpv
'';
installPhase =
# Ensure youtube-dl is available in $PATH for mpv
wrapperFlags =
let
getPath = type : "${luasocket}/lib/lua/${lua.luaversion}/?.${type};" +
"${luasocket}/share/lua/${lua.luaversion}/?.${type}";
@ -173,24 +184,32 @@ in stdenv.mkDerivation rec {
luaCPath = getPath "so";
in
''
python3 ${waf} install
# Use a standard font
mkdir -p $out/share/mpv
ln -s ${freefont_ttf}/share/fonts/truetype/FreeSans.ttf $out/share/mpv/subfont.ttf
# Ensure youtube-dl is available in $PATH for MPV
wrapProgram $out/bin/mpv \
--prefix LUA_PATH : "${luaPath}" \
--prefix LUA_CPATH : "${luaCPath}" \
'' + optionalString youtubeSupport ''
--prefix PATH : "${youtube-dl}/bin" \
'' + optionalString vapoursynthSupport ''
--prefix PYTHONPATH : "${vapoursynth}/lib/${python3.libPrefix}/site-packages:$PYTHONPATH"
'' + ''
'';
installPhase = ''
python3 ${waf} install
# Use a standard font
mkdir -p $out/share/mpv
ln -s ${freefont_ttf}/share/fonts/truetype/FreeSans.ttf $out/share/mpv/subfont.ttf
wrapProgram "$out/bin/mpv" \
${wrapperFlags}
cp TOOLS/umpv $out/bin
wrapProgram $out/bin/umpv \
--set MPV "$out/bin/mpv"
'' + optionalString stdenv.isDarwin ''
mkdir -p $out/Applications
cp -r build/mpv.app $out/Applications
wrapProgram "$out/Applications/mpv.app/Contents/MacOS/mpv" \
${wrapperFlags}
'';
meta = with stdenv.lib; {

View File

@ -0,0 +1,86 @@
{ stdenv, fetchFromGitHub, fetchurl, makeDesktopItem, pkgconfig, cmake, python3
, libX11, libXrandr, qtbase, qtwebchannel, qtwebengine, qtx11extras
, libvdpau, SDL2, mpv, libGL }:
let
# During compilation, a CMake bundle is downloaded from `artifacts.plex.tv`,
# which then downloads a handful of web client-related files. To enable
# sandboxed builds, we manually download them and save them so these files
# are fetched ahead-of-time instead of during the CMake build. Whenever
# plex-media-player is updated, the versions for these files are changed,
# so the build IDs (and SHAs) below will need to be updated!
depSrcs = rec {
webClientBuildId = "56-23317d81e49651";
webClientDesktopBuildId = "3.57.1-1e49651";
webClientTvBuildId = "3.60.1-23317d8";
webClient = fetchurl {
url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/buildid.cmake";
sha256 = "1a48a65zzdx347kfnxriwkb0yjlhvn2g8jkda5pz10r3lwja0gbi";
};
webClientDesktopHash = fetchurl {
url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-desktop-${webClientDesktopBuildId}.tar.xz.sha1";
sha256 = "04wdgpsh33y8hyjhjrfw6ymf9g002jny7hvhld4xp33lwxhd2j5w";
};
webClientDesktop = fetchurl {
url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-desktop-${webClientDesktopBuildId}.tar.xz";
sha256 = "1asw9f84z9sm3w7ifnc7j631j84rgx23c6msmn2dnw48ckv3bj2z";
};
webClientTvHash = fetchurl {
url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-tv-${webClientTvBuildId}.tar.xz.sha1";
sha256 = "0d1hsvmpwczwx442f8qdvfr8c3w84630j9qwpg2y4qm423sgdvja";
};
webClientTv = fetchurl {
url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-tv-${webClientTvBuildId}.tar.xz";
sha256 = "1ih3l5paf1jl68b1xq3iqqmvs3m07fybz57hcz4f78v0gwq2kryq";
};
};
in stdenv.mkDerivation rec {
name = "plex-media-player-${version}";
version = "2.14.1.880";
vsnHash = "301a4b6c";
src = fetchFromGitHub {
owner = "plexinc";
repo = "plex-media-player";
rev = "v${version}-${vsnHash}";
sha256 = "0xz41r697vl6s3qvy6jwriv3pb9cfy61j6sydvdq121x5a0jnh9a";
};
nativeBuildInputs = [ pkgconfig cmake python3 ];
buildInputs = [ libX11 libXrandr qtbase qtwebchannel qtwebengine qtx11extras
libvdpau SDL2 mpv libGL ];
desktopItem = makeDesktopItem {
name = "plex-media-player";
exec = "plexmediaplayer";
icon = "plex-media-player";
comment = "View your media";
desktopName = "Plex Media Player";
genericName = "Media Player";
categories = "AudioVideo;Video;Player;TV;";
};
preConfigure = with depSrcs; ''
mkdir -p build/dependencies
ln -s ${webClient} build/dependencies/buildid-${webClientBuildId}.cmake
ln -s ${webClientDesktopHash} build/dependencies/web-client-desktop-${webClientDesktopBuildId}.tar.xz.sha1
ln -s ${webClientDesktop} build/dependencies/web-client-desktop-${webClientDesktopBuildId}.tar.xz
ln -s ${webClientTvHash} build/dependencies/web-client-tv-${webClientTvBuildId}.tar.xz.sha1
ln -s ${webClientTv} build/dependencies/web-client-tv-${webClientTvBuildId}.tar.xz
'';
postInstall = ''
mkdir -p $out/share/{applications,pixmaps}
cp ${src}/resources/images/icon.png $out/share/pixmaps/plex-media-player.png
cp ${desktopItem}/share/applications/* $out/share/applications
'';
cmakeFlags = [ "-DCMAKE_BUILD_TYPE=RelWithDebInfo" "-DQTROOT=${qtbase}" ];
meta = with stdenv.lib; {
description = "Streaming media player for Plex";
license = licenses.gpl2;
maintainers = with maintainers; [ kylewlacy ];
homepage = https://plex.tv;
};
}

View File

@ -1,20 +1,20 @@
{ stdenv, fetchFromGitHub, SDL2, frei0r, gettext, mlt, jack1, pkgconfig, qtbase
, qtmultimedia, qtwebkit, qtx11extras, qtwebsockets, qtquickcontrols
, qtgraphicaleffects, libmlt
, qmake, makeWrapper, fetchpatch, qttools }:
, qmake, makeWrapper, qttools }:
assert stdenv.lib.versionAtLeast libmlt.version "6.8.0";
assert stdenv.lib.versionAtLeast mlt.version "6.8.0";
stdenv.mkDerivation rec {
name = "shotcut-${version}";
version = "18.06.02";
version = "18.08";
src = fetchFromGitHub {
owner = "mltframework";
repo = "shotcut";
rev = "v${version}";
sha256 = "1pqpgsb8ix1akq326chf46vvl5h02dwmdskskf2n6impygsy4x7v";
sha256 = "1p2s4avm3bl5ippmgfzkkbb2w0xs4vhk2wbcd22g7bh1zq9w190n";
};
enableParallelBuilding = true;
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
];
NIX_CFLAGS_COMPILE = "-I${libmlt}/include/mlt++ -I${libmlt}/include/mlt";
qmakeFlags = [ "QMAKE_LRELEASE=${stdenv.lib.getDev qttools}/bin/lrelease" ];
qmakeFlags = [ "QMAKE_LRELEASE=${stdenv.lib.getDev qttools}/bin/lrelease" "SHOTCUT_VERSION=${version}" ];
prePatch = ''
sed 's_shotcutPath, "qmelt"_"${mlt}/bin/melt"_' -i src/jobs/meltjob.cpp
@ -35,12 +35,6 @@ stdenv.mkDerivation rec {
sed "s_/usr/bin/nice_''${NICE}_" -i src/jobs/meltjob.cpp src/jobs/ffmpegjob.cpp
'';
patches = [ (fetchpatch {
url = https://github.com/mltframework/shotcut/commit/f304b7403cc7beb57b1610afd9c5c8173749e80b.patch;
name = "qt511.patch";
sha256 = "1ynvyjchcb33a33x4w1ddnah2gyzmnm125ailgg6xy60lqsnsmp9";
} ) ];
postInstall = ''
mkdir -p $out/share/shotcut
cp -r src/qml $out/share/shotcut/

View File

@ -0,0 +1,25 @@
{ stdenv, fetchzip }:
let
version = "2.5";
in fetchzip {
name = "inter-ui-${version}";
url = "https://github.com/rsms/inter/releases/download/v${version}/Inter-UI-${version}.zip";
postFetch = ''
mkdir -p $out/share/fonts/opentype
unzip -j $downloadedFile \*.otf -d $out/share/fonts/opentype
'';
sha256 = "1d88y6c9vbjz5siazhavnpfpazfkvpbcbb4pdycbnj03mmx6y07v";
meta = with stdenv.lib; {
homepage = https://rsms.me/inter/;
description = "A typeface specially designed for user interfaces";
license = licenses.ofl;
platforms = platforms.all;
maintainers = with maintainers; [ demize ];
};
}

View File

@ -34,56 +34,48 @@ let
};
in stdenv.lib.mapAttrs mkVariant {
adventor = {
displayName = "Adventor";
version = "2_501";
sha256 = "0qjg3x0adfppyx3x33cm07ww9i9sl88xaq07m7wfip8rmyp567fn";
outputHash = "117h6f02m1r54b4f1a98q5kkjchl5pv9ibm1jla6xrzhk2pchb27";
abbreviation = "qag";
};
bonum = {
displayName = "Bonum";
version = "2.004";
sha256 = "0qbrs98knx4h0b297c5n3vav4mkal1a95ai2dzmdc10pghfzl8vv";
outputHash = "0bid8gzwz50ylmm8jyqf9s4nfvy6cp1x34wbyrh4gyk1ki6hf3z1";
abbreviation = "qbk";
};
chorus = {
displayName = "Chorus";
version = "2.003";
sha256 = "1b0zak27fzmapwbf2jasvsd95vhnqyc92n985d1lc1ivwja1zgfa";
outputHash = "0fqifd45c1ys6y98b66lmldfbv7wjb2414fs9swicv4n7xvl3cp1";
abbreviation = "qzc";
};
cursor = {
displayName = "Cursor";
version = "2.004";
sha256 = "0ck3jm33bk2xsxp5d2irzd3j24zb49f0gnjvd1nikg1ivk8w85ng";
outputHash = "0i76835xqlkrnlx303mx63m0f4899j056c2ag2fl6p9qk8s4rskp";
abbreviation = "qcr";
};
heros = {
displayName = "Heros";
version = "2.004";
sha256 = "1fj2srxxf6ap913y5yd3dn4jzg828j7381gifs39nm5lnzmgw78y";
outputHash = "16y76ab46fxm9k8wfmwx4w0cl96yrmjywz587lyr08s0agp1v3kf";
abbreviation = "qhv";
};
pagella = {
displayName = "Pagella";
version ="2_501";
sha256 = "1kccaxs3vk93la2pz4nv05hx1x3diyla49cz4l33zifdcp2zgg9d";
outputHash = "1nnjsgplimh29502pkd19rvfg93x31svxxmx4x7h51njrx1j8qa8";
abbreviation = "qpl";
};
schola = {
displayName = "Schola";
version = "2.005";
sha256 = "05z3gk4mm0sa7wwjcv31j2xlzqhwhcncpamn0kn9y0221cdknyp8";
outputHash = "1yqq1ngcylhldrh1v35l439k72szq9m4gx6g0wh235fk65chb2bm";
abbreviation = "qcs";
};
termes = {
displayName = "Termes";
version = "2.004";
sha256 = "1aq3yqbgkc3z20dkcqyhicsyq0afbgg4l397z96sd8a16jyz2x8k";
outputHash = "1igw821m601h8937pix6yish4d8fxmz3h4j9hripf41bxsiafzzg";

View File

@ -0,0 +1,47 @@
{ stdenv, fetchurl, meson, ninja, pkgconfig, wrapGAppsHook
, gettext, gnome3, glib, gtk, libpeas
, gnome-online-accounts, gsettings-desktop-schemas
, evolution-data-server, libxml2, libsoup, libical, rest, json-glib }:
let
pname = "gnome-todo";
version = "3.28.1";
in stdenv.mkDerivation rec {
name = "${pname}-${version}";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${gnome3.versionBranch version}/${name}.tar.xz";
sha256 = "08ygqbib72jlf9y0a16k54zz51sncpq2wa18wp81v46q8301ymy7";
};
nativeBuildInputs = [
meson ninja pkgconfig gettext wrapGAppsHook
];
buildInputs = [
glib gtk libpeas gnome-online-accounts
gsettings-desktop-schemas gnome3.defaultIconTheme
# Plug-ins
evolution-data-server libxml2 libsoup libical
rest json-glib
];
postPatch = ''
chmod +x meson_post_install.py
patchShebangs meson_post_install.py
'';
passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "gnome3.${pname}";
};
};
meta = with stdenv.lib; {
description = "Personal task manager for GNOME";
homepage = https://wiki.gnome.org/Apps/Todo;
license = licenses.gpl3Plus;
maintainers = gnome3.maintainers;
platforms = platforms.linux;
};
}

View File

@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
"--sysconfdir=/etc"
"--localstatedir=/var"
"--with-plymouth=yes"
"--enable-gdm-xsession"
"--with-initial-vt=7"
"--with-systemdsystemunitdir=$(out)/etc/systemd/system"
];

View File

@ -1,4 +1,4 @@
{ fetchurl, stdenv, meson, ninja, pkgconfig, gnome3, glib, gtk, gsettings-desktop-schemas
{ fetchurl, stdenv, substituteAll, meson, ninja, pkgconfig, gnome3, glib, gtk, gsettings-desktop-schemas
, gnome-desktop, dbus, json-glib, libICE, xmlto, docbook_xsl, docbook_xml_dtd_412
, libxslt, gettext, makeWrapper, systemd, xorg, epoxy }:
@ -11,6 +11,15 @@ stdenv.mkDerivation rec {
sha256 = "14nmbirgrp2nm16khbz109saqdlinlbrlhjnbjydpnrlimfgg4xq";
};
patches = [
(substituteAll {
src = ./fix-paths.patch;
# FIXME: glib binaries shouldn't be in .dev!
gsettings = "${glib.dev}/bin/gsettings";
dbusLaunch = "${dbus.lib}/bin/dbus-launch";
})
];
mesonFlags = [ "-Dsystemd=true" ];
nativeBuildInputs = [
@ -29,15 +38,13 @@ stdenv.mkDerivation rec {
patchShebangs meson_post_install.py
'';
# FIXME: glib binaries shouldn't be in .dev!
preFixup = ''
for desktopFile in $(grep -rl "Exec=gnome-session" $out/share)
do
echo "Patching gnome-session path in: $desktopFile"
sed -i "s,^Exec=gnome-session,Exec=$out/bin/gnome-session," $desktopFile
sed -i "s,Exec=gnome-session,Exec=$out/bin/gnome-session," $desktopFile
done
wrapProgram "$out/bin/gnome-session" \
--prefix PATH : "${glib.dev}/bin" \
--prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
--suffix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
--suffix XDG_DATA_DIRS : "${gnome3.gnome-shell}/share"\

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