Merge master into staging
This commit is contained in:
commit
d9fa74ba78
@ -705,4 +705,52 @@ overrides = super: self: rec {
|
||||
</programlisting>
|
||||
</para>
|
||||
</section>
|
||||
<section xml:id="sec-citrix">
|
||||
<title>Citrix Receiver</title>
|
||||
|
||||
<para>
|
||||
The <link xlink:href="https://www.citrix.com/products/receiver/">Citrix Receiver</link> is a remote
|
||||
desktop viewer which provides access to
|
||||
<link xlink:href="https://www.citrix.com/products/xenapp-xendesktop/">XenDesktop</link> installations.
|
||||
</para>
|
||||
|
||||
<section xml:id="sec-citrix-base">
|
||||
<title>Basic usage</title>
|
||||
<para>
|
||||
The tarball archive needs to be downloaded manually as the licenses agreements of the vendor
|
||||
need to be accepted first. This is available at the
|
||||
<link xlink:href="https://www.citrix.com/downloads/citrix-receiver/">download page at citrix.com</link>.
|
||||
Then run <literal>nix-prefetch-url file://$PWD/linuxx64-$version.tar.gz</literal>.
|
||||
With the archive available in the store the package can be built and installed with Nix.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<emphasis>Note: it's recommended to install <literal>Citrix Receiver</literal> using
|
||||
<literal>nix-env -i</literal> or globally to ensure that the <literal>.desktop</literal> files
|
||||
are installed properly into <literal>$XDG_CONFIG_DIRS</literal>. Otherwise it won't
|
||||
be possible to open <literal>.ica</literal> files
|
||||
automatically from the browser to start a Citrix connection.</emphasis>
|
||||
</para>
|
||||
</section>
|
||||
<section xml:id="sec-citrix-custom-certs">
|
||||
<title>Custom certificates</title>
|
||||
<para>
|
||||
The <literal>Citrix Receiver</literal> in <literal>nixpkgs</literal> trusts several certificates
|
||||
<link xlink:href="https://curl.haxx.se/docs/caextract.html">from the Mozilla database</link> by default.
|
||||
However several companies using Citrix might require their own corporate certificate. On distros with imperative
|
||||
packaging these certs can be stored easily in
|
||||
<link xlink:href="https://developer-docs.citrix.com/projects/receiver-for-linux-command-reference/en/13.7/"><literal>$ICAROOT</literal></link>,
|
||||
however this directory is a store path in <literal>nixpkgs</literal>. In order to work around this issue the package provides a simple
|
||||
mechanism to add custom certificates without rebuilding the entire package using <literal>symlinkJoin</literal>:
|
||||
|
||||
<programlisting>
|
||||
<![CDATA[with import <nixpkgs> { config.allowUnfree = true; };
|
||||
let extraCerts = [ ./custom-cert-1.pem ./custom-cert-2.pem /* ... */ ]; in
|
||||
citrix_receiver.override {
|
||||
inherit extraCerts;
|
||||
}]]>
|
||||
</programlisting>
|
||||
</para>
|
||||
</section>
|
||||
</section>
|
||||
</chapter>
|
||||
|
@ -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>
|
||||
|
@ -807,6 +807,11 @@
|
||||
github = "coroa";
|
||||
name = "Jonas Hörsch";
|
||||
};
|
||||
costrouc = {
|
||||
email = "chris.ostrouchov@gmail.com";
|
||||
github = "costrouc";
|
||||
name = "Chris Ostrouchov";
|
||||
};
|
||||
couchemar = {
|
||||
email = "couchemar@yandex.ru";
|
||||
github = "couchemar";
|
||||
@ -1689,6 +1694,11 @@
|
||||
github = "imalsogreg";
|
||||
name = "Greg Hale";
|
||||
};
|
||||
imuli = {
|
||||
email = "i@imu.li";
|
||||
github = "imuli";
|
||||
name = "Imuli";
|
||||
};
|
||||
infinisil = {
|
||||
email = "infinisil@icloud.com";
|
||||
github = "infinisil";
|
||||
@ -1837,6 +1847,11 @@
|
||||
github = "jluttine";
|
||||
name = "Jaakko Luttinen";
|
||||
};
|
||||
jmettes = {
|
||||
email = "jonathan@jmettes.com";
|
||||
github = "jmettes";
|
||||
name = "Jonathan Mettes";
|
||||
};
|
||||
Jo = {
|
||||
email = "0x4A6F@shackspace.de";
|
||||
name = "Joachim Ernst";
|
||||
@ -2094,6 +2109,11 @@
|
||||
github = "kuznero";
|
||||
name = "Roman Kuznetsov";
|
||||
};
|
||||
kylewlacy = {
|
||||
email = "kylelacy+nix@pm.me";
|
||||
github = "kylewlacy";
|
||||
name = "Kyle Lacy";
|
||||
};
|
||||
lasandell = {
|
||||
email = "lasandell@gmail.com";
|
||||
github = "lasandell";
|
||||
@ -2180,7 +2200,7 @@
|
||||
name = "Nathaniel Baxter";
|
||||
};
|
||||
lightdiscord = {
|
||||
email = "arnaud@lightdiscord.me";
|
||||
email = "root@arnaud.sh";
|
||||
github = "lightdiscord";
|
||||
name = "Arnaud Pascal";
|
||||
};
|
||||
|
@ -73,6 +73,20 @@ $ nix-instantiate -E '(import <nixpkgsunstable> {}).gitFull'
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
The <varname>services.cassandra</varname> module has been reworked and
|
||||
was rewritten from scratch. The service has succeeding tests for
|
||||
the versions 2.1, 2.2, 3.0 and 3.11 of <link
|
||||
xlink:href="https://cassandra.apache.org/">Apache Cassandra</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
<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
|
||||
@ -113,6 +127,12 @@ $ nix-instantiate -E '(import <nixpkgsunstable> {}).gitFull'
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
The deprecated <varname>services.cassandra</varname> module has
|
||||
seen a complete rewrite. (See above.)
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>lib.strict</literal> is removed. Use
|
||||
@ -170,6 +190,16 @@ $ nix-instantiate -E '(import <nixpkgsunstable> {}).gitFull'
|
||||
which indicates that the nix output hash will be used as tag.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Options
|
||||
<literal>boot.initrd.luks.devices.<replaceable>name</replaceable>.yubikey.ramfsMountPoint</literal>
|
||||
<literal>boot.initrd.luks.devices.<replaceable>name</replaceable>.yubikey.storage.mountPoint</literal>
|
||||
were removed. <literal>luksroot.nix</literal> module never supported more than one YubiKey at
|
||||
a time anyway, hence those options never had any effect. You should be able to remove them
|
||||
from your config without any issues.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
|
@ -29,8 +29,5 @@ with lib;
|
||||
# Add Memtest86+ to the CD.
|
||||
boot.loader.grub.memtest86.enable = true;
|
||||
|
||||
# Allow the user to log in as root without a password.
|
||||
users.users.root.initialHashedPassword = "";
|
||||
|
||||
system.stateVersion = mkDefault "18.03";
|
||||
}
|
||||
|
@ -33,9 +33,6 @@ in
|
||||
# Also increase the amount of CMA to ensure the virtual console on the RPi3 works.
|
||||
boot.kernelParams = ["cma=32M" "console=ttyS0,115200n8" "console=ttyAMA0,115200n8" "console=tty0"];
|
||||
|
||||
# FIXME: this probably should be in installation-device.nix
|
||||
users.users.root.initialHashedPassword = "";
|
||||
|
||||
sdImage = {
|
||||
populateBootCommands = let
|
||||
configTxt = pkgs.writeText "config.txt" ''
|
||||
|
@ -34,9 +34,6 @@ in
|
||||
# - ttySAC2: for Exynos (ODROID-XU3)
|
||||
boot.kernelParams = ["console=ttyS0,115200n8" "console=ttymxc0,115200n8" "console=ttyAMA0,115200n8" "console=ttyO0,115200n8" "console=ttySAC2,115200n8" "console=tty0"];
|
||||
|
||||
# FIXME: this probably should be in installation-device.nix
|
||||
users.users.root.initialHashedPassword = "";
|
||||
|
||||
sdImage = {
|
||||
populateBootCommands = let
|
||||
configTxt = pkgs.writeText "config.txt" ''
|
||||
|
@ -27,9 +27,6 @@ in
|
||||
boot.consoleLogLevel = lib.mkDefault 7;
|
||||
boot.kernelPackages = pkgs.linuxPackages_rpi;
|
||||
|
||||
# FIXME: this probably should be in installation-device.nix
|
||||
users.users.root.initialHashedPassword = "";
|
||||
|
||||
sdImage = {
|
||||
populateBootCommands = let
|
||||
configTxt = pkgs.writeText "config.txt" ''
|
||||
|
@ -14,7 +14,4 @@ with lib;
|
||||
../../profiles/base.nix
|
||||
../../profiles/installation-device.nix
|
||||
];
|
||||
|
||||
# Allow the user to log in as root without a password.
|
||||
users.users.root.initialHashedPassword = "";
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -324,6 +324,7 @@
|
||||
hadoop = 297;
|
||||
hydron = 298;
|
||||
cfssl = 299;
|
||||
cassandra = 300;
|
||||
|
||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||
|
||||
@ -608,6 +609,7 @@
|
||||
hadoop = 297;
|
||||
hydron = 298;
|
||||
cfssl = 299;
|
||||
cassandra = 300;
|
||||
|
||||
# When adding a gid, make sure it doesn't match an existing
|
||||
# uid. Users and groups with the same name should have equal
|
||||
|
@ -201,6 +201,7 @@
|
||||
./services/databases/4store-endpoint.nix
|
||||
./services/databases/4store.nix
|
||||
./services/databases/aerospike.nix
|
||||
./services/databases/cassandra.nix
|
||||
./services/databases/clickhouse.nix
|
||||
./services/databases/couchdb.nix
|
||||
./services/databases/firebird.nix
|
||||
|
@ -86,5 +86,9 @@ with lib;
|
||||
networking.firewall.logRefusedConnections = mkDefault false;
|
||||
|
||||
environment.systemPackages = [ pkgs.vim ];
|
||||
|
||||
|
||||
# Allow the user to log in as root without a password.
|
||||
users.users.root.initialHashedPassword = "";
|
||||
};
|
||||
}
|
||||
|
@ -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" ])
|
||||
|
@ -4,444 +4,287 @@ with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.cassandra;
|
||||
cassandraPackage = cfg.package.override {
|
||||
jre = cfg.jre;
|
||||
};
|
||||
cassandraUser = {
|
||||
name = cfg.user;
|
||||
home = "/var/lib/cassandra";
|
||||
description = "Cassandra role user";
|
||||
};
|
||||
defaultUser = "cassandra";
|
||||
cassandraConfig = flip recursiveUpdate cfg.extraConfig
|
||||
({ commitlog_sync = "batch";
|
||||
commitlog_sync_batch_window_in_ms = 2;
|
||||
partitioner = "org.apache.cassandra.dht.Murmur3Partitioner";
|
||||
endpoint_snitch = "SimpleSnitch";
|
||||
seed_provider =
|
||||
[{ class_name = "org.apache.cassandra.locator.SimpleSeedProvider";
|
||||
parameters = [ { seeds = "127.0.0.1"; } ];
|
||||
}];
|
||||
data_file_directories = [ "${cfg.homeDir}/data" ];
|
||||
commitlog_directory = "${cfg.homeDir}/commitlog";
|
||||
saved_caches_directory = "${cfg.homeDir}/saved_caches";
|
||||
} // (if builtins.compareVersions cfg.package.version "3" >= 0
|
||||
then { hints_directory = "${cfg.homeDir}/hints"; }
|
||||
else {})
|
||||
);
|
||||
cassandraConfigWithAddresses = cassandraConfig //
|
||||
( if isNull cfg.listenAddress
|
||||
then { listen_interface = cfg.listenInterface; }
|
||||
else { listen_address = cfg.listenAddress; }
|
||||
) // (
|
||||
if isNull cfg.rpcAddress
|
||||
then { rpc_interface = cfg.rpcInterface; }
|
||||
else { rpc_address = cfg.rpcAddress; }
|
||||
);
|
||||
cassandraEtc = pkgs.stdenv.mkDerivation
|
||||
{ name = "cassandra-etc";
|
||||
cassandraYaml = builtins.toJSON cassandraConfigWithAddresses;
|
||||
cassandraEnvPkg = "${cfg.package}/conf/cassandra-env.sh";
|
||||
buildCommand = ''
|
||||
mkdir -p "$out"
|
||||
|
||||
cassandraRackDcProperties = ''
|
||||
dc=${cfg.dc}
|
||||
rack=${cfg.rack}
|
||||
echo "$cassandraYaml" > "$out/cassandra.yaml"
|
||||
ln -s "$cassandraEnvPkg" "$out/cassandra-env.sh"
|
||||
'';
|
||||
|
||||
cassandraConf = ''
|
||||
cluster_name: ${cfg.clusterName}
|
||||
num_tokens: 256
|
||||
auto_bootstrap: ${boolToString cfg.autoBootstrap}
|
||||
hinted_handoff_enabled: ${boolToString cfg.hintedHandOff}
|
||||
hinted_handoff_throttle_in_kb: ${builtins.toString cfg.hintedHandOffThrottle}
|
||||
max_hints_delivery_threads: 2
|
||||
max_hint_window_in_ms: 10800000 # 3 hours
|
||||
authenticator: ${cfg.authenticator}
|
||||
authorizer: ${cfg.authorizer}
|
||||
permissions_validity_in_ms: 2000
|
||||
partitioner: org.apache.cassandra.dht.Murmur3Partitioner
|
||||
data_file_directories:
|
||||
${builtins.concatStringsSep "\n" (map (v: " - "+v) cfg.dataDirs)}
|
||||
commitlog_directory: ${cfg.commitLogDirectory}
|
||||
disk_failure_policy: stop
|
||||
key_cache_size_in_mb:
|
||||
key_cache_save_period: 14400
|
||||
row_cache_size_in_mb: 0
|
||||
row_cache_save_period: 0
|
||||
saved_caches_directory: ${cfg.savedCachesDirectory}
|
||||
commitlog_sync: ${cfg.commitLogSync}
|
||||
commitlog_sync_period_in_ms: ${builtins.toString cfg.commitLogSyncPeriod}
|
||||
commitlog_segment_size_in_mb: 32
|
||||
seed_provider:
|
||||
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
|
||||
parameters:
|
||||
- seeds: "${builtins.concatStringsSep "," cfg.seeds}"
|
||||
concurrent_reads: ${builtins.toString cfg.concurrentReads}
|
||||
concurrent_writes: ${builtins.toString cfg.concurrentWrites}
|
||||
memtable_flush_queue_size: 4
|
||||
trickle_fsync: false
|
||||
trickle_fsync_interval_in_kb: 10240
|
||||
storage_port: 7000
|
||||
ssl_storage_port: 7001
|
||||
listen_address: ${cfg.listenAddress}
|
||||
start_native_transport: true
|
||||
native_transport_port: 9042
|
||||
start_rpc: true
|
||||
rpc_address: ${cfg.rpcAddress}
|
||||
rpc_port: 9160
|
||||
rpc_keepalive: true
|
||||
rpc_server_type: sync
|
||||
thrift_framed_transport_size_in_mb: 15
|
||||
incremental_backups: ${boolToString cfg.incrementalBackups}
|
||||
snapshot_before_compaction: false
|
||||
auto_snapshot: true
|
||||
column_index_size_in_kb: 64
|
||||
in_memory_compaction_limit_in_mb: 64
|
||||
multithreaded_compaction: false
|
||||
compaction_throughput_mb_per_sec: 16
|
||||
compaction_preheat_key_cache: true
|
||||
read_request_timeout_in_ms: 10000
|
||||
range_request_timeout_in_ms: 10000
|
||||
write_request_timeout_in_ms: 10000
|
||||
cas_contention_timeout_in_ms: 1000
|
||||
truncate_request_timeout_in_ms: 60000
|
||||
request_timeout_in_ms: 10000
|
||||
cross_node_timeout: false
|
||||
endpoint_snitch: ${cfg.snitch}
|
||||
dynamic_snitch_update_interval_in_ms: 100
|
||||
dynamic_snitch_reset_interval_in_ms: 600000
|
||||
dynamic_snitch_badness_threshold: 0.1
|
||||
request_scheduler: org.apache.cassandra.scheduler.NoScheduler
|
||||
server_encryption_options:
|
||||
internode_encryption: ${cfg.internodeEncryption}
|
||||
keystore: ${cfg.keyStorePath}
|
||||
keystore_password: ${cfg.keyStorePassword}
|
||||
truststore: ${cfg.trustStorePath}
|
||||
truststore_password: ${cfg.trustStorePassword}
|
||||
client_encryption_options:
|
||||
enabled: ${boolToString cfg.clientEncryption}
|
||||
keystore: ${cfg.keyStorePath}
|
||||
keystore_password: ${cfg.keyStorePassword}
|
||||
internode_compression: all
|
||||
inter_dc_tcp_nodelay: false
|
||||
preheat_kernel_page_cache: false
|
||||
streaming_socket_timeout_in_ms: ${toString cfg.streamingSocketTimoutInMS}
|
||||
'';
|
||||
|
||||
cassandraLog = ''
|
||||
log4j.rootLogger=${cfg.logLevel},stdout
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] %d{HH:mm:ss,SSS} %m%n
|
||||
'';
|
||||
|
||||
cassandraConfFile = pkgs.writeText "cassandra.yaml" cassandraConf;
|
||||
cassandraLogFile = pkgs.writeText "log4j-server.properties" cassandraLog;
|
||||
cassandraRackFile = pkgs.writeText "cassandra-rackdc.properties" cassandraRackDcProperties;
|
||||
|
||||
cassandraEnvironment = {
|
||||
CASSANDRA_HOME = cassandraPackage;
|
||||
JAVA_HOME = cfg.jre;
|
||||
CASSANDRA_CONF = "/etc/cassandra";
|
||||
};
|
||||
|
||||
in {
|
||||
|
||||
###### interface
|
||||
|
||||
options.services.cassandra = {
|
||||
enable = mkOption {
|
||||
description = "Whether to enable cassandra.";
|
||||
default = false;
|
||||
type = types.bool;
|
||||
};
|
||||
package = mkOption {
|
||||
description = "Cassandra package to use.";
|
||||
default = pkgs.cassandra;
|
||||
defaultText = "pkgs.cassandra";
|
||||
type = types.package;
|
||||
};
|
||||
jre = mkOption {
|
||||
description = "JRE package to run cassandra service.";
|
||||
default = pkgs.jre;
|
||||
defaultText = "pkgs.jre";
|
||||
type = types.package;
|
||||
};
|
||||
enable = mkEnableOption ''
|
||||
Apache Cassandra – Scalable and highly available database.
|
||||
'';
|
||||
user = mkOption {
|
||||
description = "User that runs cassandra service.";
|
||||
default = "cassandra";
|
||||
type = types.string;
|
||||
type = types.str;
|
||||
default = defaultUser;
|
||||
description = "Run Apache Cassandra under this user.";
|
||||
};
|
||||
group = mkOption {
|
||||
description = "Group that runs cassandra service.";
|
||||
default = "cassandra";
|
||||
type = types.string;
|
||||
};
|
||||
envFile = mkOption {
|
||||
description = "path to cassandra-env.sh";
|
||||
default = "${cassandraPackage}/conf/cassandra-env.sh";
|
||||
defaultText = "\${cassandraPackage}/conf/cassandra-env.sh";
|
||||
type = types.path;
|
||||
};
|
||||
clusterName = mkOption {
|
||||
description = "set cluster name";
|
||||
default = "cassandra";
|
||||
example = "prod-cluster0";
|
||||
type = types.string;
|
||||
};
|
||||
commitLogDirectory = mkOption {
|
||||
description = "directory for commit logs";
|
||||
default = "/var/lib/cassandra/commit_log";
|
||||
type = types.string;
|
||||
};
|
||||
savedCachesDirectory = mkOption {
|
||||
description = "directory for saved caches";
|
||||
default = "/var/lib/cassandra/saved_caches";
|
||||
type = types.string;
|
||||
};
|
||||
hintedHandOff = mkOption {
|
||||
description = "enable hinted handoff";
|
||||
default = true;
|
||||
type = types.bool;
|
||||
};
|
||||
hintedHandOffThrottle = mkOption {
|
||||
description = "hinted hand off throttle rate in kb";
|
||||
default = 1024;
|
||||
type = types.int;
|
||||
};
|
||||
commitLogSync = mkOption {
|
||||
description = "commitlog sync method";
|
||||
default = "periodic";
|
||||
type = types.str;
|
||||
example = "batch";
|
||||
default = defaultUser;
|
||||
description = "Run Apache Cassandra under this group.";
|
||||
};
|
||||
commitLogSyncPeriod = mkOption {
|
||||
description = "commitlog sync period in ms ";
|
||||
default = 10000;
|
||||
type = types.int;
|
||||
};
|
||||
envScript = mkOption {
|
||||
default = "${cassandraPackage}/conf/cassandra-env.sh";
|
||||
defaultText = "\${cassandraPackage}/conf/cassandra-env.sh";
|
||||
homeDir = mkOption {
|
||||
type = types.path;
|
||||
description = "Supply your own cassandra-env.sh rather than using the default";
|
||||
default = "/var/lib/cassandra";
|
||||
description = ''
|
||||
Home directory for Apache Cassandra.
|
||||
'';
|
||||
};
|
||||
extraParams = mkOption {
|
||||
description = "add additional lines to cassandra-env.sh";
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.cassandra;
|
||||
defaultText = "pkgs.cassandra";
|
||||
example = literalExample "pkgs.cassandra_3_11";
|
||||
description = ''
|
||||
The Apache Cassandra package to use.
|
||||
'';
|
||||
};
|
||||
jvmOpts = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
example = [''JVM_OPTS="$JVM_OPTS -Dcassandra.available_processors=1"''];
|
||||
type = types.listOf types.str;
|
||||
};
|
||||
dataDirs = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [ "/var/lib/cassandra/data" ];
|
||||
description = "Data directories for cassandra";
|
||||
};
|
||||
logLevel = mkOption {
|
||||
type = types.str;
|
||||
default = "INFO";
|
||||
description = "default logging level for log4j";
|
||||
};
|
||||
internodeEncryption = mkOption {
|
||||
description = "enable internode encryption";
|
||||
default = "none";
|
||||
example = "all";
|
||||
type = types.str;
|
||||
};
|
||||
clientEncryption = mkOption {
|
||||
description = "enable client encryption";
|
||||
default = false;
|
||||
type = types.bool;
|
||||
};
|
||||
trustStorePath = mkOption {
|
||||
description = "path to truststore";
|
||||
default = ".conf/truststore";
|
||||
type = types.str;
|
||||
};
|
||||
keyStorePath = mkOption {
|
||||
description = "path to keystore";
|
||||
default = ".conf/keystore";
|
||||
type = types.str;
|
||||
};
|
||||
keyStorePassword = mkOption {
|
||||
description = "password to keystore";
|
||||
default = "cassandra";
|
||||
type = types.str;
|
||||
};
|
||||
trustStorePassword = mkOption {
|
||||
description = "password to truststore";
|
||||
default = "cassandra";
|
||||
type = types.str;
|
||||
};
|
||||
seeds = mkOption {
|
||||
description = "password to truststore";
|
||||
default = [ "127.0.0.1" ];
|
||||
type = types.listOf types.str;
|
||||
};
|
||||
concurrentWrites = mkOption {
|
||||
description = "number of concurrent writes allowed";
|
||||
default = 32;
|
||||
type = types.int;
|
||||
};
|
||||
concurrentReads = mkOption {
|
||||
description = "number of concurrent reads allowed";
|
||||
default = 32;
|
||||
type = types.int;
|
||||
description = ''
|
||||
Populate the JVM_OPT environment variable.
|
||||
'';
|
||||
};
|
||||
listenAddress = mkOption {
|
||||
description = "listen address";
|
||||
default = "localhost";
|
||||
type = types.str;
|
||||
type = types.nullOr types.str;
|
||||
default = "127.0.0.1";
|
||||
example = literalExample "null";
|
||||
description = ''
|
||||
Address or interface to bind to and tell other Cassandra nodes
|
||||
to connect to. You _must_ change this if you want multiple
|
||||
nodes to be able to communicate!
|
||||
|
||||
Set listenAddress OR listenInterface, not both.
|
||||
|
||||
Leaving it blank leaves it up to
|
||||
InetAddress.getLocalHost(). This will always do the Right
|
||||
Thing _if_ the node is properly configured (hostname, name
|
||||
resolution, etc), and the Right Thing is to use the address
|
||||
associated with the hostname (it might not be).
|
||||
|
||||
Setting listen_address to 0.0.0.0 is always wrong.
|
||||
'';
|
||||
};
|
||||
listenInterface = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "eth1";
|
||||
description = ''
|
||||
Set listenAddress OR listenInterface, not both. Interfaces
|
||||
must correspond to a single address, IP aliasing is not
|
||||
supported.
|
||||
'';
|
||||
};
|
||||
rpcAddress = mkOption {
|
||||
description = "rpc listener address";
|
||||
default = "localhost";
|
||||
type = types.str;
|
||||
};
|
||||
incrementalBackups = mkOption {
|
||||
description = "enable incremental backups";
|
||||
default = false;
|
||||
type = types.bool;
|
||||
};
|
||||
snitch = mkOption {
|
||||
description = "snitch to use for topology discovery";
|
||||
default = "GossipingPropertyFileSnitch";
|
||||
example = "Ec2Snitch";
|
||||
type = types.str;
|
||||
};
|
||||
dc = mkOption {
|
||||
description = "datacenter for use in topology configuration";
|
||||
default = "DC1";
|
||||
example = "DC1";
|
||||
type = types.str;
|
||||
};
|
||||
rack = mkOption {
|
||||
description = "rack for use in topology configuration";
|
||||
default = "RAC1";
|
||||
example = "RAC1";
|
||||
type = types.str;
|
||||
};
|
||||
authorizer = mkOption {
|
||||
description = "
|
||||
Authorization backend, implementing IAuthorizer; used to limit access/provide permissions
|
||||
";
|
||||
default = "AllowAllAuthorizer";
|
||||
example = "CassandraAuthorizer";
|
||||
type = types.str;
|
||||
};
|
||||
authenticator = mkOption {
|
||||
description = "
|
||||
Authentication backend, implementing IAuthenticator; used to identify users
|
||||
";
|
||||
default = "AllowAllAuthenticator";
|
||||
example = "PasswordAuthenticator";
|
||||
type = types.str;
|
||||
};
|
||||
autoBootstrap = mkOption {
|
||||
description = "It makes new (non-seed) nodes automatically migrate the right data to themselves.";
|
||||
default = true;
|
||||
type = types.bool;
|
||||
};
|
||||
streamingSocketTimoutInMS = mkOption {
|
||||
description = "Enable or disable socket timeout for streaming operations";
|
||||
default = 3600000; #CASSANDRA-8611
|
||||
example = 120;
|
||||
type = types.int;
|
||||
};
|
||||
repairStartAt = mkOption {
|
||||
default = "Sun";
|
||||
type = types.string;
|
||||
type = types.nullOr types.str;
|
||||
default = "127.0.0.1";
|
||||
example = literalExample "null";
|
||||
description = ''
|
||||
Defines realtime (i.e. wallclock) timers with calendar event
|
||||
expressions. For more details re: systemd OnCalendar at
|
||||
https://www.freedesktop.org/software/systemd/man/systemd.time.html#Displaying%20Time%20Spans
|
||||
'';
|
||||
example = ["weekly" "daily" "08:05:40" "mon,fri *-1/2-1,3 *:30:45"];
|
||||
};
|
||||
repairRandomizedDelayInSec = mkOption {
|
||||
default = 0;
|
||||
type = types.int;
|
||||
description = ''Delay the timer by a randomly selected, evenly distributed
|
||||
amount of time between 0 and the specified time value. re: systemd timer
|
||||
RandomizedDelaySec for more details
|
||||
The address or interface to bind the native transport server to.
|
||||
|
||||
Set rpcAddress OR rpcInterface, not both.
|
||||
|
||||
Leaving rpcAddress blank has the same effect as on
|
||||
listenAddress (i.e. it will be based on the configured hostname
|
||||
of the node).
|
||||
|
||||
Note that unlike listenAddress, you can specify 0.0.0.0, but you
|
||||
must also set extraConfig.broadcast_rpc_address to a value other
|
||||
than 0.0.0.0.
|
||||
|
||||
For security reasons, you should not expose this port to the
|
||||
internet. Firewall it if needed.
|
||||
'';
|
||||
};
|
||||
repairPostStop = mkOption {
|
||||
rpcInterface = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
type = types.nullOr types.string;
|
||||
example = "eth1";
|
||||
description = ''
|
||||
Run a script when repair is over. One can use it to send statsd events, email, etc.
|
||||
Set rpcAddress OR rpcInterface, not both. Interfaces must
|
||||
correspond to a single address, IP aliasing is not supported.
|
||||
'';
|
||||
};
|
||||
repairPostStart = mkOption {
|
||||
default = null;
|
||||
type = types.nullOr types.string;
|
||||
description = ''
|
||||
Run a script when repair starts. One can use it to send statsd events, email, etc.
|
||||
It has same semantics as systemd ExecStopPost; So, if it fails, unit is consisdered
|
||||
failed.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
###### implementation
|
||||
extraConfig = mkOption {
|
||||
type = types.attrs;
|
||||
default = {};
|
||||
example =
|
||||
{ commitlog_sync_batch_window_in_ms = 3;
|
||||
};
|
||||
description = ''
|
||||
Extra options to be merged into cassandra.yaml as nix attribute set.
|
||||
'';
|
||||
};
|
||||
fullRepairInterval = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "3w";
|
||||
example = literalExample "null";
|
||||
description = ''
|
||||
Set the interval how often full repairs are run, i.e.
|
||||
`nodetool repair --full` is executed. See
|
||||
https://cassandra.apache.org/doc/latest/operating/repair.html
|
||||
for more information.
|
||||
|
||||
Set to `null` to disable full repairs.
|
||||
'';
|
||||
};
|
||||
fullRepairOptions = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
example = [ "--partitioner-range" ];
|
||||
description = ''
|
||||
Options passed through to the full repair command.
|
||||
'';
|
||||
};
|
||||
incrementalRepairInterval = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "3d";
|
||||
example = literalExample "null";
|
||||
description = ''
|
||||
Set the interval how often incremental repairs are run, i.e.
|
||||
`nodetool repair` is executed. See
|
||||
https://cassandra.apache.org/doc/latest/operating/repair.html
|
||||
for more information.
|
||||
|
||||
Set to `null` to disable incremental repairs.
|
||||
'';
|
||||
};
|
||||
incrementalRepairOptions = mkOption {
|
||||
type = types.listOf types.string;
|
||||
default = [];
|
||||
example = [ "--partitioner-range" ];
|
||||
description = ''
|
||||
Options passed through to the incremental repair command.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions =
|
||||
[ { assertion =
|
||||
((isNull cfg.listenAddress)
|
||||
|| (isNull cfg.listenInterface)
|
||||
) && !((isNull cfg.listenAddress)
|
||||
&& (isNull cfg.listenInterface)
|
||||
);
|
||||
message = "You have to set either listenAddress or listenInterface";
|
||||
}
|
||||
{ assertion =
|
||||
((isNull cfg.rpcAddress)
|
||||
|| (isNull cfg.rpcInterface)
|
||||
) && !((isNull cfg.rpcAddress)
|
||||
&& (isNull cfg.rpcInterface)
|
||||
);
|
||||
message = "You have to set either rpcAddress or rpcInterface";
|
||||
}
|
||||
];
|
||||
users = mkIf (cfg.user == defaultUser) {
|
||||
extraUsers."${defaultUser}" =
|
||||
{ group = cfg.group;
|
||||
home = cfg.homeDir;
|
||||
createHome = true;
|
||||
uid = config.ids.uids.cassandra;
|
||||
description = "Cassandra service user";
|
||||
};
|
||||
extraGroups."${defaultUser}".gid = config.ids.gids.cassandra;
|
||||
};
|
||||
|
||||
environment.etc."cassandra/cassandra-rackdc.properties" = {
|
||||
source = cassandraRackFile;
|
||||
};
|
||||
environment.etc."cassandra/cassandra.yaml" = {
|
||||
source = cassandraConfFile;
|
||||
};
|
||||
environment.etc."cassandra/log4j-server.properties" = {
|
||||
source = cassandraLogFile;
|
||||
};
|
||||
environment.etc."cassandra/cassandra-env.sh" = {
|
||||
text = ''
|
||||
${builtins.readFile cfg.envFile}
|
||||
${concatStringsSep "\n" cfg.extraParams}
|
||||
'';
|
||||
};
|
||||
systemd.services.cassandra = {
|
||||
description = "Cassandra Daemon";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
systemd.services.cassandra =
|
||||
{ description = "Apache Cassandra service";
|
||||
after = [ "network.target" ];
|
||||
environment = cassandraEnvironment;
|
||||
restartTriggers = [ cassandraConfFile cassandraLogFile cassandraRackFile ];
|
||||
serviceConfig = {
|
||||
|
||||
User = cfg.user;
|
||||
PermissionsStartOnly = true;
|
||||
LimitAS = "infinity";
|
||||
LimitNOFILE = "100000";
|
||||
LimitNPROC = "32768";
|
||||
LimitMEMLOCK = "infinity";
|
||||
|
||||
environment =
|
||||
{ CASSANDRA_CONF = "${cassandraEtc}";
|
||||
JVM_OPTS = builtins.concatStringsSep " " cfg.jvmOpts;
|
||||
};
|
||||
script = ''
|
||||
${cassandraPackage}/bin/cassandra -f
|
||||
'';
|
||||
path = [
|
||||
cfg.jre
|
||||
cassandraPackage
|
||||
pkgs.coreutils
|
||||
];
|
||||
preStart = ''
|
||||
mkdir -m 0700 -p /etc/cassandra/triggers
|
||||
mkdir -m 0700 -p /var/lib/cassandra /var/log/cassandra
|
||||
chown ${cfg.user} /var/lib/cassandra /var/log/cassandra /etc/cassandra/triggers
|
||||
'';
|
||||
postStart = ''
|
||||
sleep 2
|
||||
while ! nodetool status >/dev/null 2>&1; do
|
||||
sleep 2
|
||||
done
|
||||
nodetool status
|
||||
'';
|
||||
};
|
||||
|
||||
environment.systemPackages = [ cassandraPackage ];
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
7000
|
||||
7001
|
||||
9042
|
||||
9160
|
||||
];
|
||||
|
||||
users.users.cassandra =
|
||||
if config.ids.uids ? "cassandra"
|
||||
then { uid = config.ids.uids.cassandra; } // cassandraUser
|
||||
else cassandraUser ;
|
||||
|
||||
boot.kernel.sysctl."vm.swappiness" = pkgs.lib.mkOptionDefault 0;
|
||||
|
||||
systemd.timers."cassandra-repair" = {
|
||||
timerConfig = {
|
||||
OnCalendar = "${toString cfg.repairStartAt}";
|
||||
RandomizedDelaySec = cfg.repairRandomizedDelayInSec;
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig =
|
||||
{ User = cfg.user;
|
||||
Group = cfg.group;
|
||||
ExecStart = "${cfg.package}/bin/cassandra -f";
|
||||
SuccessExitStatus = 143;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services."cassandra-repair" = {
|
||||
description = "Cassandra repair daemon";
|
||||
environment = cassandraEnvironment;
|
||||
script = "${cassandraPackage}/bin/nodetool repair -pr";
|
||||
postStop = mkIf (cfg.repairPostStop != null) cfg.repairPostStop;
|
||||
postStart = mkIf (cfg.repairPostStart != null) cfg.repairPostStart;
|
||||
serviceConfig = {
|
||||
User = cfg.user;
|
||||
systemd.services.cassandra-full-repair =
|
||||
{ description = "Perform a full repair on this Cassandra node";
|
||||
after = [ "cassandra.service" ];
|
||||
requires = [ "cassandra.service" ];
|
||||
serviceConfig =
|
||||
{ User = cfg.user;
|
||||
Group = cfg.group;
|
||||
ExecStart =
|
||||
lib.concatStringsSep " "
|
||||
([ "${cfg.package}/bin/nodetool" "repair" "--full"
|
||||
] ++ cfg.fullRepairOptions);
|
||||
};
|
||||
};
|
||||
systemd.timers.cassandra-full-repair =
|
||||
mkIf (!isNull cfg.fullRepairInterval) {
|
||||
description = "Schedule full repairs on Cassandra";
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig =
|
||||
{ OnBootSec = cfg.fullRepairInterval;
|
||||
OnUnitActiveSec = cfg.fullRepairInterval;
|
||||
Persistent = true;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.cassandra-incremental-repair =
|
||||
{ description = "Perform an incremental repair on this cassandra node.";
|
||||
after = [ "cassandra.service" ];
|
||||
requires = [ "cassandra.service" ];
|
||||
serviceConfig =
|
||||
{ User = cfg.user;
|
||||
Group = cfg.group;
|
||||
ExecStart =
|
||||
lib.concatStringsSep " "
|
||||
([ "${cfg.package}/bin/nodetool" "repair"
|
||||
] ++ cfg.incrementalRepairOptions);
|
||||
};
|
||||
};
|
||||
systemd.timers.cassandra-incremental-repair =
|
||||
mkIf (!isNull cfg.incrementalRepairInterval) {
|
||||
description = "Schedule incremental repairs on Cassandra";
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig =
|
||||
{ OnBootSec = cfg.incrementalRepairInterval;
|
||||
OnUnitActiveSec = cfg.incrementalRepairInterval;
|
||||
Persistent = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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>
|
||||
|
||||
|
@ -71,6 +71,13 @@ in {
|
||||
BlacklistPlugins=${lib.concatStringsSep ";" cfg.blacklistPlugins}
|
||||
'';
|
||||
};
|
||||
"fwupd/uefi.conf" = {
|
||||
source = pkgs.writeText "uefi.conf" ''
|
||||
[uefi]
|
||||
OverrideESPMountPoint=${config.boot.loader.efi.efiSysMountPoint}
|
||||
'';
|
||||
};
|
||||
|
||||
} // originalEtc // extraTrustedKeys;
|
||||
|
||||
services.dbus.packages = [ pkgs.fwupd ];
|
||||
|
@ -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;
|
||||
|
||||
|
@ -5,6 +5,43 @@ with lib;
|
||||
let
|
||||
cfg = config.services.dockerRegistry;
|
||||
|
||||
blobCache = if cfg.enableRedisCache
|
||||
then "redis"
|
||||
else "inmemory";
|
||||
|
||||
registryConfig = {
|
||||
version = "0.1";
|
||||
log.fields.service = "registry";
|
||||
storage = {
|
||||
cache.blobdescriptor = blobCache;
|
||||
filesystem.rootdirectory = cfg.storagePath;
|
||||
delete.enabled = cfg.enableDelete;
|
||||
};
|
||||
http = {
|
||||
addr = ":${builtins.toString cfg.port}";
|
||||
headers.X-Content-Type-Options = ["nosniff"];
|
||||
};
|
||||
health.storagedriver = {
|
||||
enabled = true;
|
||||
interval = "10s";
|
||||
threshold = 3;
|
||||
};
|
||||
};
|
||||
|
||||
registryConfig.redis = mkIf cfg.enableRedisCache {
|
||||
addr = "${cfg.redisUrl}";
|
||||
password = "${cfg.redisPassword}";
|
||||
db = 0;
|
||||
dialtimeout = "10ms";
|
||||
readtimeout = "10ms";
|
||||
writetimeout = "10ms";
|
||||
pool = {
|
||||
maxidle = 16;
|
||||
maxactive = 64;
|
||||
idletimeout = "300s";
|
||||
};
|
||||
};
|
||||
|
||||
configFile = pkgs.writeText "docker-registry-config.yml" (builtins.toJSON (recursiveUpdate registryConfig cfg.extraConfig));
|
||||
|
||||
in {
|
||||
|
@ -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 = {};
|
||||
}
|
||||
|
@ -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 {
|
||||
@ -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;
|
||||
};
|
||||
})
|
||||
|
||||
|
@ -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);
|
||||
|
@ -17,6 +17,15 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
options.services.zerotierone.port = mkOption {
|
||||
default = 9993;
|
||||
example = 9993;
|
||||
type = types.int;
|
||||
description = ''
|
||||
Network port used by ZeroTier.
|
||||
'';
|
||||
};
|
||||
|
||||
options.services.zerotierone.package = mkOption {
|
||||
default = pkgs.zerotierone;
|
||||
defaultText = "pkgs.zerotierone";
|
||||
@ -40,7 +49,7 @@ in
|
||||
touch "/var/lib/zerotier-one/networks.d/${netId}.conf"
|
||||
'') cfg.joinNetworks);
|
||||
serviceConfig = {
|
||||
ExecStart = "${cfg.package}/bin/zerotier-one";
|
||||
ExecStart = "${cfg.package}/bin/zerotier-one -p${toString cfg.port}";
|
||||
Restart = "always";
|
||||
KillMode = "process";
|
||||
};
|
||||
@ -49,8 +58,8 @@ in
|
||||
# ZeroTier does not issue DHCP leases, but some strangers might...
|
||||
networking.dhcpcd.denyInterfaces = [ "zt*" ];
|
||||
|
||||
# ZeroTier receives UDP transmissions on port 9993 by default
|
||||
networking.firewall.allowedUDPPorts = [ 9993 ];
|
||||
# ZeroTier receives UDP transmissions
|
||||
networking.firewall.allowedUDPPorts = [ cfg.port ];
|
||||
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
};
|
||||
|
@ -104,8 +104,9 @@ in
|
||||
systemd.services.cloud-init =
|
||||
{ description = "Initial cloud-init job (metadata service crawler)";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "local-fs.target" "cloud-init-local.service" "sshd.service" "sshd-keygen.service" ];
|
||||
after = [ "local-fs.target" "network.target" "cloud-init-local.service" ];
|
||||
wants = [ "local-fs.target" "network-online.target" "cloud-init-local.service"
|
||||
"sshd.service" "sshd-keygen.service" ];
|
||||
after = [ "local-fs.target" "network-online.target" "cloud-init-local.service" ];
|
||||
before = [ "sshd.service" "sshd-keygen.service" ];
|
||||
requires = [ "network.target "];
|
||||
path = path;
|
||||
@ -121,8 +122,8 @@ in
|
||||
systemd.services.cloud-config =
|
||||
{ description = "Apply the settings specified in cloud-config";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network.target" ];
|
||||
after = [ "network.target" "syslog.target" "cloud-config.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" "syslog.target" "cloud-config.target" ];
|
||||
|
||||
path = path;
|
||||
serviceConfig =
|
||||
@ -137,8 +138,8 @@ in
|
||||
systemd.services.cloud-final =
|
||||
{ description = "Execute cloud user/final scripts";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network.target" ];
|
||||
after = [ "network.target" "syslog.target" "cloud-config.service" "rc-local.service" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" "syslog.target" "cloud-config.service" "rc-local.service" ];
|
||||
requires = [ "cloud-config.target" ];
|
||||
path = path;
|
||||
serviceConfig =
|
||||
|
@ -224,7 +224,7 @@ in
|
||||
# Update the start menu for each user that has `isNormalUser` set.
|
||||
system.activationScripts.plasmaSetup = stringAfter [ "users" "groups" ]
|
||||
(concatStringsSep "\n"
|
||||
(mapAttrsToList (name: value: "${pkgs.su}/bin/su ${name} -c kbuildsycoca5")
|
||||
(mapAttrsToList (name: value: "${pkgs.su}/bin/su ${name} -c ${pkgs.libsForQt5.kservice}/bin/kbuildsycoca5")
|
||||
(filterAttrs (n: v: v.isNormalUser) config.users.users)));
|
||||
})
|
||||
];
|
||||
|
@ -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}" \
|
||||
|
@ -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):
|
||||
|
@ -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 {
|
||||
|
@ -5,61 +5,171 @@ with lib;
|
||||
let
|
||||
luks = config.boot.initrd.luks;
|
||||
|
||||
openCommand = name': { name, device, header, keyFile, keyFileSize, allowDiscards, yubikey, fallbackToPassword, ... }: assert name' == name; ''
|
||||
commonFunctions = ''
|
||||
die() {
|
||||
echo "$@" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Wait for a target (e.g. device, keyFile, header, ...) to appear.
|
||||
wait_target() {
|
||||
local name="$1"
|
||||
local target="$2"
|
||||
local secs="''${3:-10}"
|
||||
local desc="''${4:-$name $target to appear}"
|
||||
|
||||
if [ ! -e $target ]; then
|
||||
echo -n "Waiting 10 seconds for $name $target to appear"
|
||||
echo -n "Waiting $secs seconds for $desc..."
|
||||
local success=false;
|
||||
for try in $(seq 10); do
|
||||
for try in $(seq $secs); do
|
||||
echo -n "."
|
||||
sleep 1
|
||||
if [ -e $target ]; then success=true break; fi
|
||||
if [ -e $target ]; then
|
||||
success=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ $success = true ]; then
|
||||
if [ $success == true ]; then
|
||||
echo " - success";
|
||||
return 0
|
||||
else
|
||||
echo " - failure";
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
wait_yubikey() {
|
||||
local secs="''${1:-10}"
|
||||
|
||||
ykinfo -v 1>/dev/null 2>&1
|
||||
if [ $? != 0 ]; then
|
||||
echo -n "Waiting $secs seconds for Yubikey to appear..."
|
||||
local success=false
|
||||
for try in $(seq $secs); do
|
||||
echo -n .
|
||||
sleep 1
|
||||
ykinfo -v 1>/dev/null 2>&1
|
||||
if [ $? == 0 ]; then
|
||||
success=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ $success == true ]; then
|
||||
echo " - success";
|
||||
return 0
|
||||
else
|
||||
echo " - failure";
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
'';
|
||||
|
||||
preCommands = ''
|
||||
# A place to store crypto things
|
||||
|
||||
# A ramfs is used here to ensure that the file used to update
|
||||
# the key slot with cryptsetup will never get swapped out.
|
||||
# Warning: Do NOT replace with tmpfs!
|
||||
mkdir -p /crypt-ramfs
|
||||
mount -t ramfs none /crypt-ramfs
|
||||
|
||||
# For Yubikey salt storage
|
||||
mkdir -p /crypt-storage
|
||||
|
||||
# Disable all input echo for the whole stage. We could use read -s
|
||||
# instead but that would ocasionally leak characters between read
|
||||
# invocations.
|
||||
stty -echo
|
||||
'';
|
||||
|
||||
postCommands = ''
|
||||
stty echo
|
||||
umount /crypt-storage 2>/dev/null
|
||||
umount /crypt-ramfs 2>/dev/null
|
||||
'';
|
||||
|
||||
openCommand = name': { name, device, header, keyFile, keyFileSize, keyFileOffset, allowDiscards, yubikey, fallbackToPassword, ... }: assert name' == name;
|
||||
let
|
||||
csopen = "cryptsetup luksOpen ${device} ${name} ${optionalString allowDiscards "--allow-discards"} ${optionalString (header != null) "--header=${header}"}";
|
||||
cschange = "cryptsetup luksChangeKey ${device} ${optionalString (header != null) "--header=${header}"}";
|
||||
in ''
|
||||
# Wait for luksRoot (and optionally keyFile and/or header) to appear, e.g.
|
||||
# if on a USB drive.
|
||||
wait_target "device" ${device}
|
||||
|
||||
${optionalString (keyFile != null) ''
|
||||
wait_target "key file" ${keyFile}
|
||||
''}
|
||||
wait_target "device" ${device} || die "${device} is unavailable"
|
||||
|
||||
${optionalString (header != null) ''
|
||||
wait_target "header" ${header}
|
||||
wait_target "header" ${header} || die "${header} is unavailable"
|
||||
''}
|
||||
|
||||
open_normally() {
|
||||
echo luksOpen ${device} ${name} ${optionalString allowDiscards "--allow-discards"} \
|
||||
${optionalString (header != null) "--header=${header}"} \
|
||||
> /.luksopen_args
|
||||
${optionalString (keyFile != null) ''
|
||||
${optionalString fallbackToPassword "if [ -e ${keyFile} ]; then"}
|
||||
echo " --key-file=${keyFile} ${optionalString (keyFileSize != null) "--keyfile-size=${toString keyFileSize}"}" \
|
||||
>> /.luksopen_args
|
||||
${optionalString fallbackToPassword ''
|
||||
do_open_passphrase() {
|
||||
local passphrase
|
||||
|
||||
while true; do
|
||||
echo -n "Passphrase for ${device}: "
|
||||
passphrase=
|
||||
while true; do
|
||||
if [ -e /crypt-ramfs/passphrase ]; then
|
||||
echo "reused"
|
||||
passphrase=$(cat /crypt-ramfs/passphrase)
|
||||
break
|
||||
else
|
||||
echo "keyfile ${keyFile} not found -- fallback to interactive unlocking"
|
||||
# ask cryptsetup-askpass
|
||||
echo -n "${device}" > /crypt-ramfs/device
|
||||
|
||||
# and try reading it from /dev/console with a timeout
|
||||
IFS= read -t 1 -r passphrase
|
||||
if [ -n "$passphrase" ]; then
|
||||
${if luks.reusePassphrases then ''
|
||||
# remember it for the next device
|
||||
echo -n "$passphrase" > /crypt-ramfs/passphrase
|
||||
'' else ''
|
||||
# Don't save it to ramfs. We are very paranoid
|
||||
''}
|
||||
echo
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
echo -n "Verifiying passphrase for ${device}..."
|
||||
echo -n "$passphrase" | ${csopen} --key-file=-
|
||||
if [ $? == 0 ]; then
|
||||
echo " - success"
|
||||
${if luks.reusePassphrases then ''
|
||||
# we don't rm here because we might reuse it for the next device
|
||||
'' else ''
|
||||
rm -f /crypt-ramfs/passphrase
|
||||
''}
|
||||
''}
|
||||
cryptsetup-askpass
|
||||
rm /.luksopen_args
|
||||
break
|
||||
else
|
||||
echo " - failure"
|
||||
# ask for a different one
|
||||
rm -f /crypt-ramfs/passphrase
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
${optionalString (luks.yubikeySupport && (yubikey != null)) ''
|
||||
# LUKS
|
||||
open_normally() {
|
||||
${if (keyFile != null) then ''
|
||||
if wait_target "key file" ${keyFile}; then
|
||||
${csopen} --key-file=${keyFile} \
|
||||
${optionalString (keyFileSize != null) "--keyfile-size=${toString keyFileSize}"} \
|
||||
${optionalString (keyFileOffset != null) "--keyfile-offset=${toString keyFileOffset}"}
|
||||
else
|
||||
${if fallbackToPassword then "echo" else "die"} "${keyFile} is unavailable"
|
||||
echo " - failing back to interactive password prompt"
|
||||
do_open_passphrase
|
||||
fi
|
||||
'' else ''
|
||||
do_open_passphrase
|
||||
''}
|
||||
}
|
||||
|
||||
${if luks.yubikeySupport && (yubikey != null) then ''
|
||||
# Yubikey
|
||||
rbtohex() {
|
||||
( od -An -vtx1 | tr -d ' \n' )
|
||||
}
|
||||
@ -68,8 +178,7 @@ let
|
||||
( tr '[:lower:]' '[:upper:]' | sed -e 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf )
|
||||
}
|
||||
|
||||
open_yubikey() {
|
||||
|
||||
do_open_yubikey() {
|
||||
# Make all of these local to this function
|
||||
# to prevent their values being leaked
|
||||
local salt
|
||||
@ -85,19 +194,18 @@ let
|
||||
local new_response
|
||||
local new_k_luks
|
||||
|
||||
mkdir -p ${yubikey.storage.mountPoint}
|
||||
mount -t ${yubikey.storage.fsType} ${toString yubikey.storage.device} ${yubikey.storage.mountPoint}
|
||||
mount -t ${yubikey.storage.fsType} ${yubikey.storage.device} /crypt-storage || \
|
||||
die "Failed to mount Yubikey salt storage device"
|
||||
|
||||
salt="$(cat ${yubikey.storage.mountPoint}${yubikey.storage.path} | sed -n 1p | tr -d '\n')"
|
||||
iterations="$(cat ${yubikey.storage.mountPoint}${yubikey.storage.path} | sed -n 2p | tr -d '\n')"
|
||||
salt="$(cat /crypt-storage${yubikey.storage.path} | sed -n 1p | tr -d '\n')"
|
||||
iterations="$(cat /crypt-storage${yubikey.storage.path} | sed -n 2p | tr -d '\n')"
|
||||
challenge="$(echo -n $salt | openssl-wrap dgst -binary -sha512 | rbtohex)"
|
||||
response="$(ykchalresp -${toString yubikey.slot} -x $challenge 2>/dev/null)"
|
||||
|
||||
for try in $(seq 3); do
|
||||
|
||||
${optionalString yubikey.twoFactor ''
|
||||
echo -n "Enter two-factor passphrase: "
|
||||
read -s k_user
|
||||
read -r k_user
|
||||
echo
|
||||
''}
|
||||
|
||||
@ -107,9 +215,9 @@ let
|
||||
k_luks="$(echo | pbkdf2-sha512 ${toString yubikey.keyLength} $iterations $response | rbtohex)"
|
||||
fi
|
||||
|
||||
echo -n "$k_luks" | hextorb | cryptsetup luksOpen ${device} ${name} ${optionalString allowDiscards "--allow-discards"} --key-file=-
|
||||
echo -n "$k_luks" | hextorb | ${csopen} --key-file=-
|
||||
|
||||
if [ $? == "0" ]; then
|
||||
if [ $? == 0 ]; then
|
||||
opened=true
|
||||
break
|
||||
else
|
||||
@ -118,11 +226,7 @@ let
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$opened" == false ]; then
|
||||
umount ${yubikey.storage.mountPoint}
|
||||
echo "Maximum authentication errors reached"
|
||||
exit 1
|
||||
fi
|
||||
[ "$opened" == false ] && die "Maximum authentication errors reached"
|
||||
|
||||
echo -n "Gathering entropy for new salt (please enter random keys to generate entropy if this blocks for long)..."
|
||||
for i in $(seq ${toString yubikey.saltLength}); do
|
||||
@ -147,69 +251,52 @@ let
|
||||
new_k_luks="$(echo | pbkdf2-sha512 ${toString yubikey.keyLength} $new_iterations $new_response | rbtohex)"
|
||||
fi
|
||||
|
||||
mkdir -p ${yubikey.ramfsMountPoint}
|
||||
# A ramfs is used here to ensure that the file used to update
|
||||
# the key slot with cryptsetup will never get swapped out.
|
||||
# Warning: Do NOT replace with tmpfs!
|
||||
mount -t ramfs none ${yubikey.ramfsMountPoint}
|
||||
echo -n "$new_k_luks" | hextorb > /crypt-ramfs/new_key
|
||||
echo -n "$k_luks" | hextorb | ${cschange} --key-file=- /crypt-ramfs/new_key
|
||||
|
||||
echo -n "$new_k_luks" | hextorb > ${yubikey.ramfsMountPoint}/new_key
|
||||
echo -n "$k_luks" | hextorb | cryptsetup luksChangeKey ${device} --key-file=- ${yubikey.ramfsMountPoint}/new_key
|
||||
|
||||
if [ $? == "0" ]; then
|
||||
echo -ne "$new_salt\n$new_iterations" > ${yubikey.storage.mountPoint}${yubikey.storage.path}
|
||||
if [ $? == 0 ]; then
|
||||
echo -ne "$new_salt\n$new_iterations" > /crypt-storage${yubikey.storage.path}
|
||||
else
|
||||
echo "Warning: Could not update LUKS key, current challenge persists!"
|
||||
fi
|
||||
|
||||
rm -f ${yubikey.ramfsMountPoint}/new_key
|
||||
umount ${yubikey.ramfsMountPoint}
|
||||
rm -rf ${yubikey.ramfsMountPoint}
|
||||
|
||||
umount ${yubikey.storage.mountPoint}
|
||||
rm -f /crypt-ramfs/new_key
|
||||
umount /crypt-storage
|
||||
}
|
||||
|
||||
${optionalString (yubikey.gracePeriod > 0) ''
|
||||
echo -n "Waiting ${toString yubikey.gracePeriod} seconds as grace..."
|
||||
for i in $(seq ${toString yubikey.gracePeriod}); do
|
||||
sleep 1
|
||||
echo -n .
|
||||
done
|
||||
echo "ok"
|
||||
''}
|
||||
|
||||
yubikey_missing=true
|
||||
ykinfo -v 1>/dev/null 2>&1
|
||||
if [ $? != "0" ]; then
|
||||
echo -n "waiting 10 seconds for yubikey to appear..."
|
||||
for try in $(seq 10); do
|
||||
sleep 1
|
||||
ykinfo -v 1>/dev/null 2>&1
|
||||
if [ $? == "0" ]; then
|
||||
yubikey_missing=false
|
||||
break
|
||||
fi
|
||||
echo -n .
|
||||
done
|
||||
echo "ok"
|
||||
open_yubikey() {
|
||||
if wait_yubikey ${toString yubikey.gracePeriod}; then
|
||||
do_open_yubikey
|
||||
else
|
||||
yubikey_missing=false
|
||||
fi
|
||||
|
||||
if [ "$yubikey_missing" == true ]; then
|
||||
echo "no yubikey found, falling back to non-yubikey open procedure"
|
||||
echo "No yubikey found, falling back to non-yubikey open procedure"
|
||||
open_normally
|
||||
else
|
||||
fi
|
||||
}
|
||||
|
||||
open_yubikey
|
||||
fi
|
||||
''}
|
||||
|
||||
# open luksRoot and scan for logical volumes
|
||||
${optionalString ((!luks.yubikeySupport) || (yubikey == null)) ''
|
||||
'' else ''
|
||||
open_normally
|
||||
''}
|
||||
'';
|
||||
|
||||
askPass = pkgs.writeScriptBin "cryptsetup-askpass" ''
|
||||
#!/bin/sh
|
||||
|
||||
${commonFunctions}
|
||||
|
||||
while true; do
|
||||
wait_target "luks" /crypt-ramfs/device 10 "LUKS to request a passphrase" || die "Passphrase is not requested now"
|
||||
device=$(cat /crypt-ramfs/device)
|
||||
|
||||
echo -n "Passphrase for $device: "
|
||||
IFS= read -rs passphrase
|
||||
echo
|
||||
|
||||
rm /crypt-ramfs/device
|
||||
echo -n "$passphrase" > /crypt-ramfs/passphrase
|
||||
done
|
||||
'';
|
||||
|
||||
preLVM = filterAttrs (n: v: v.preLVM) luks.devices;
|
||||
postLVM = filterAttrs (n: v: !v.preLVM) luks.devices;
|
||||
|
||||
@ -255,6 +342,22 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
boot.initrd.luks.reusePassphrases = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
When opening a new LUKS device try reusing last successful
|
||||
passphrase.
|
||||
|
||||
Useful for mounting a number of devices that use the same
|
||||
passphrase without retyping it several times.
|
||||
|
||||
Such setup can be useful if you use <command>cryptsetup
|
||||
luksSuspend</command>. Different LUKS devices will still have
|
||||
different master keys even when using the same passphrase.
|
||||
'';
|
||||
};
|
||||
|
||||
boot.initrd.luks.devices = mkOption {
|
||||
default = { };
|
||||
example = { "luksroot".device = "/dev/disk/by-uuid/430e9eff-d852-4f68-aa3b-2fa3599ebe08"; };
|
||||
@ -316,6 +419,19 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
keyFileOffset = mkOption {
|
||||
default = null;
|
||||
example = 4096;
|
||||
type = types.nullOr types.int;
|
||||
description = ''
|
||||
The offset of the key file. Use this in combination with
|
||||
<literal>keyFileSize</literal> to use part of a file as key file
|
||||
(often the case if a raw device or partition is used as a key file).
|
||||
If not specified, the key begins at the first byte of
|
||||
<literal>keyFile</literal>.
|
||||
'';
|
||||
};
|
||||
|
||||
# FIXME: get rid of this option.
|
||||
preLVM = mkOption {
|
||||
default = true;
|
||||
@ -383,15 +499,9 @@ in
|
||||
};
|
||||
|
||||
gracePeriod = mkOption {
|
||||
default = 2;
|
||||
default = 10;
|
||||
type = types.int;
|
||||
description = "Time in seconds to wait before attempting to find the Yubikey.";
|
||||
};
|
||||
|
||||
ramfsMountPoint = mkOption {
|
||||
default = "/crypt-ramfs";
|
||||
type = types.str;
|
||||
description = "Path where the ramfs used to update the LUKS key will be mounted during early boot.";
|
||||
description = "Time in seconds to wait for the Yubikey.";
|
||||
};
|
||||
|
||||
/* TODO: Add to the documentation of the current module:
|
||||
@ -414,12 +524,6 @@ in
|
||||
description = "The filesystem of the unencrypted device.";
|
||||
};
|
||||
|
||||
mountPoint = mkOption {
|
||||
default = "/crypt-storage";
|
||||
type = types.str;
|
||||
description = "Path where the unencrypted device will be mounted during early boot.";
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
default = "/crypt-storage/default";
|
||||
type = types.str;
|
||||
@ -432,8 +536,8 @@ in
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
}; }));
|
||||
};
|
||||
}));
|
||||
};
|
||||
|
||||
boot.initrd.luks.yubikeySupport = mkOption {
|
||||
@ -463,18 +567,8 @@ in
|
||||
# copy the cryptsetup binary and it's dependencies
|
||||
boot.initrd.extraUtilsCommands = ''
|
||||
copy_bin_and_libs ${pkgs.cryptsetup}/bin/cryptsetup
|
||||
|
||||
cat > $out/bin/cryptsetup-askpass <<EOF
|
||||
#!$out/bin/sh -e
|
||||
if [ -e /.luksopen_args ]; then
|
||||
cryptsetup \$(cat /.luksopen_args)
|
||||
killall -q cryptsetup
|
||||
else
|
||||
echo "Passphrase is not requested now"
|
||||
exit 1
|
||||
fi
|
||||
EOF
|
||||
chmod +x $out/bin/cryptsetup-askpass
|
||||
copy_bin_and_libs ${askPass}/bin/cryptsetup-askpass
|
||||
sed -i s,/bin/sh,$out/bin/sh, $out/bin/cryptsetup-askpass
|
||||
|
||||
${optionalString luks.yubikeySupport ''
|
||||
copy_bin_and_libs ${pkgs.yubikey-personalization}/bin/ykchalresp
|
||||
@ -506,8 +600,9 @@ in
|
||||
''}
|
||||
'';
|
||||
|
||||
boot.initrd.preLVMCommands = concatStrings (mapAttrsToList openCommand preLVM);
|
||||
boot.initrd.postDeviceCommands = concatStrings (mapAttrsToList openCommand postLVM);
|
||||
boot.initrd.preFailCommands = postCommands;
|
||||
boot.initrd.preLVMCommands = commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand preLVM) + postCommands;
|
||||
boot.initrd.postDeviceCommands = commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand postLVM) + postCommands;
|
||||
|
||||
environment.systemPackages = [ pkgs.cryptsetup ];
|
||||
};
|
||||
|
@ -248,6 +248,14 @@ let
|
||||
|
||||
isExecutable = true;
|
||||
|
||||
postInstall = ''
|
||||
echo checking syntax
|
||||
# check both with bash
|
||||
${pkgs.bash}/bin/sh -n $target
|
||||
# and with ash shell, just in case
|
||||
${extraUtils}/bin/ash -n $target
|
||||
'';
|
||||
|
||||
inherit udevRules extraUtils modulesClosure;
|
||||
|
||||
inherit (config.boot) resumeDevice;
|
||||
|
@ -190,9 +190,8 @@ let
|
||||
];
|
||||
|
||||
makeJobScript = name: text:
|
||||
let mkScriptName = s: (replaceChars [ "\\" ] [ "-" ] (shellEscape s) );
|
||||
x = pkgs.writeTextFile { name = "unit-script"; executable = true; destination = "/bin/${mkScriptName name}"; inherit text; };
|
||||
in "${x}/bin/${mkScriptName name}";
|
||||
let mkScriptName = s: "unit-script-" + (replaceChars [ "\\" "@" ] [ "-" "_" ] (shellEscape s) );
|
||||
in pkgs.writeTextFile { name = mkScriptName name; executable = true; inherit text; };
|
||||
|
||||
unitConfig = { config, ... }: {
|
||||
config = {
|
||||
|
@ -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"
|
||||
|
@ -277,6 +277,7 @@ in rec {
|
||||
tests.docker-tools = callTestOnMatchingSystems ["x86_64-linux"] tests/docker-tools.nix {};
|
||||
tests.docker-tools-overlay = callTestOnMatchingSystems ["x86_64-linux"] tests/docker-tools-overlay.nix {};
|
||||
tests.docker-edge = callTestOnMatchingSystems ["x86_64-linux"] tests/docker-edge.nix {};
|
||||
tests.docker-registry = callTest tests/docker-registry.nix {};
|
||||
tests.dovecot = callTest tests/dovecot.nix {};
|
||||
tests.dnscrypt-proxy = callTestOnMatchingSystems ["x86_64-linux"] tests/dnscrypt-proxy.nix {};
|
||||
tests.ecryptfs = callTest tests/ecryptfs.nix {};
|
||||
|
@ -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 "") + ''
|
||||
|
@ -1,68 +1,71 @@
|
||||
import ./make-test.nix ({ pkgs, ...}:
|
||||
let
|
||||
user = "cassandra";
|
||||
nodeCfg = nodes: selfIP: cassandraOpts:
|
||||
{
|
||||
services.cassandra = {
|
||||
enable = true;
|
||||
listenAddress = selfIP;
|
||||
rpcAddress = "0.0.0.0";
|
||||
seeds = [ "192.168.1.1" ];
|
||||
package = pkgs.cassandra_2_0;
|
||||
jre = pkgs.openjdk;
|
||||
clusterName = "ci ahoy";
|
||||
authenticator = "PasswordAuthenticator";
|
||||
authorizer = "CassandraAuthorizer";
|
||||
user = user;
|
||||
} // cassandraOpts;
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
# Change this to test a different version of Cassandra:
|
||||
testPackage = pkgs.cassandra;
|
||||
cassandraCfg =
|
||||
{ enable = true;
|
||||
listenAddress = null;
|
||||
listenInterface = "eth1";
|
||||
rpcAddress = null;
|
||||
rpcInterface = "eth1";
|
||||
extraConfig =
|
||||
{ start_native_transport = true;
|
||||
seed_provider =
|
||||
[{ class_name = "org.apache.cassandra.locator.SimpleSeedProvider";
|
||||
parameters = [ { seeds = "cass0"; } ];
|
||||
}];
|
||||
};
|
||||
package = testPackage;
|
||||
};
|
||||
nodeCfg = extra: {pkgs, config, ...}:
|
||||
{ environment.systemPackages = [ testPackage ];
|
||||
networking.firewall.enable = false;
|
||||
services.cassandra = cassandraCfg // extra;
|
||||
virtualisation.memorySize = 1024;
|
||||
};
|
||||
|
||||
in
|
||||
{
|
||||
name = "cassandra-ci";
|
||||
|
||||
nodes = {
|
||||
cass0 = { nodes, ... }: nodeCfg nodes "192.168.1.1" {};
|
||||
cass1 = { nodes, ... }: nodeCfg nodes "192.168.1.2" {};
|
||||
cass2 = { nodes, ... }: nodeCfg nodes "192.168.1.3" {
|
||||
extraParams = [
|
||||
''JVM_OPTS="$JVM_OPTS -Dcassandra.replace_address=192.168.1.2"''
|
||||
];
|
||||
listenAddress = "192.168.1.3";
|
||||
};
|
||||
cass0 = nodeCfg {};
|
||||
cass1 = nodeCfg {};
|
||||
cass2 = nodeCfg { jvmOpts = [ "-Dcassandra.replace_address=cass1" ]; };
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
subtest "start seed", sub {
|
||||
subtest "timers exist", sub {
|
||||
$cass0->succeed("systemctl list-timers | grep cassandra-full-repair.timer");
|
||||
$cass0->succeed("systemctl list-timers | grep cassandra-incremental-repair.timer");
|
||||
};
|
||||
subtest "can connect via cqlsh", sub {
|
||||
$cass0->waitForUnit("cassandra.service");
|
||||
$cass0->waitForOpenPort(9160);
|
||||
$cass0->execute("echo show version | cqlsh localhost -u cassandra -p cassandra");
|
||||
sleep 2;
|
||||
$cass0->succeed("echo show version | cqlsh localhost -u cassandra -p cassandra");
|
||||
$cass1->start;
|
||||
$cass0->waitUntilSucceeds("nc -z cass0 9042");
|
||||
$cass0->succeed("echo 'show version;' | cqlsh cass0");
|
||||
};
|
||||
subtest "cassandra user/group", sub {
|
||||
$cass0->succeed("id \"${user}\" >/dev/null");
|
||||
$cass1->succeed("id \"${user}\" >/dev/null");
|
||||
subtest "nodetool is operational", sub {
|
||||
$cass0->waitForUnit("cassandra.service");
|
||||
$cass0->waitUntilSucceeds("nc -z localhost 7199");
|
||||
$cass0->succeed("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass0'");
|
||||
};
|
||||
subtest "bring up cassandra cluster", sub {
|
||||
subtest "bring up cluster", sub {
|
||||
$cass1->waitForUnit("cassandra.service");
|
||||
$cass0->waitUntilSucceeds("nodetool status | grep -c UN | grep 2");
|
||||
$cass1->waitUntilSucceeds("nodetool status | egrep -c '^UN' | grep 2");
|
||||
$cass0->succeed("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass1'");
|
||||
};
|
||||
subtest "break and fix node", sub {
|
||||
$cass0->block;
|
||||
$cass0->waitUntilSucceeds("nodetool status | grep -c DN | grep 1");
|
||||
$cass0->unblock;
|
||||
$cass0->waitUntilSucceeds("nodetool status | grep -c UN | grep 2");
|
||||
$cass1->block;
|
||||
$cass0->waitUntilSucceeds("nodetool status --resolve-ip | egrep -c '^DN[[:space:]]+cass1'");
|
||||
$cass0->succeed("nodetool status | egrep -c '^UN' | grep 1");
|
||||
$cass1->unblock;
|
||||
$cass1->waitUntilSucceeds("nodetool status | egrep -c '^UN' | grep 2");
|
||||
$cass0->succeed("nodetool status | egrep -c '^UN' | grep 2");
|
||||
};
|
||||
subtest "replace crashed node", sub {
|
||||
$cass1->crash;
|
||||
$cass2->start;
|
||||
$cass2->waitForUnit("cassandra.service");
|
||||
$cass0->waitUntilFails("nodetool status | grep UN | grep 192.168.1.2");
|
||||
$cass0->waitUntilSucceeds("nodetool status | grep UN | grep 192.168.1.3");
|
||||
$cass0->waitUntilFails("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass1'");
|
||||
$cass0->waitUntilSucceeds("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass2'");
|
||||
};
|
||||
'';
|
||||
})
|
||||
|
@ -19,6 +19,10 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
startAll;
|
||||
|
||||
$netdata->waitForUnit("netdata.service");
|
||||
|
||||
# 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.
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
buildGoPackage rec {
|
||||
name = "go-ethereum-${version}";
|
||||
version = "1.8.11";
|
||||
version = "1.8.13";
|
||||
goPackagePath = "github.com/ethereum/go-ethereum";
|
||||
|
||||
# Fix for usb-related segmentation faults on darwin
|
||||
@ -16,7 +16,7 @@ buildGoPackage rec {
|
||||
owner = "ethereum";
|
||||
repo = "go-ethereum";
|
||||
rev = "v${version}";
|
||||
sha256 = "1b4za0hszb95jnj97g4xkrgcl0bydllznm0wj6rpi6cwmdr0h8na";
|
||||
sha256 = "123jkyb293z7ww3sa9ji5rw7xd229isi03k4ayyh5p7rr0dg8al0";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
@ -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";
|
||||
|
@ -3,11 +3,11 @@
|
||||
|
||||
bitwig-studio1.overrideAttrs (oldAttrs: rec {
|
||||
name = "bitwig-studio-${version}";
|
||||
version = "2.3.2";
|
||||
version = "2.3.5";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://downloads.bitwig.com/stable/${version}/bitwig-studio-${version}.deb";
|
||||
sha256 = "10ji4jqnnlhv4bgvhqwysprax6jcjk4759jskr9imwj6qjnj3vzn";
|
||||
sha256 = "1v62z08hqla8fz5m7hl9ynf2hpr0j0arm0nb5lpd99qrv36ibrsc";
|
||||
};
|
||||
|
||||
buildInputs = bitwig-studio1.buildInputs ++ [ ffmpeg ];
|
||||
|
65
pkgs/applications/audio/cadence/default.nix
Normal file
65
pkgs/applications/audio/cadence/default.nix
Normal 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;
|
||||
};
|
||||
}
|
@ -28,7 +28,7 @@ assert withOnlineServices -> withTaglib;
|
||||
assert withReplaygain -> withTaglib;
|
||||
|
||||
let
|
||||
version = "2.2.0";
|
||||
version = "2.3.2";
|
||||
pname = "cantata";
|
||||
fstat = x: fn: "-DENABLE_" + fn + "=" + (if x then "ON" else "OFF");
|
||||
fstats = x: map (fstat x);
|
||||
@ -42,18 +42,9 @@ in stdenv.mkDerivation rec {
|
||||
owner = "CDrummond";
|
||||
repo = "cantata";
|
||||
rev = "v${version}";
|
||||
sha256 = "1b633chgfs8rya78bzzck5zijna15d1y4nmrz4dcjp862ks5y5q6";
|
||||
sha256 = "11hjday5vj0wzkc8yb5wbs05jwa8mvgxswd5qvhpci0zkl975yzn";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# patch is needed for 2.2.0 with qt 5.10 (doesn't harm earlier versions)
|
||||
(fetchpatch {
|
||||
url = "https://github.com/CDrummond/cantata/commit/4da7a9128f2c5eaf23ae2a5006d300dc4f21fc6a.patch";
|
||||
sha256 = "1z21ax3542z7hm628xv110lmplaspb407jzgfk16xkphww5qyphj";
|
||||
name = "fix_qt_510.patch";
|
||||
})
|
||||
|
||||
];
|
||||
buildInputs = [ vlc qtbase qtmultimedia qtsvg ]
|
||||
++ stdenv.lib.optionals withTaglib [ taglib taglib_extras ]
|
||||
++ stdenv.lib.optionals withReplaygain [ ffmpeg speex mpg123 ]
|
||||
|
@ -1,14 +1,14 @@
|
||||
{ stdenv, fetchurl, pkgconfig, alsaLib, libjack2, dbus, qtbase, qttools, qtx11extras }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "0.5.2";
|
||||
version = "0.5.3";
|
||||
name = "qjackctl-${version}";
|
||||
|
||||
# some dependencies such as killall have to be installed additionally
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/qjackctl/${name}.tar.gz";
|
||||
sha256 = "0nqr5f82lry3i4if8wdmrqsw84m45ijyj4psll30plxx5732zzaz";
|
||||
sha256 = "0x08af8m5l8qy9av3dlldsg58ny9nc69h1s4i6hqkvj24jwy6fw1";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
@ -3,11 +3,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "qsampler-${version}";
|
||||
version = "0.5.1";
|
||||
version = "0.5.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/qsampler/${name}.tar.gz";
|
||||
sha256 = "18j4cwmn7waih9x5b66cba2aa85spqqp507bf19ahsb5gl358yhh";
|
||||
sha256 = "0xb0j57k03pkdl7yl5mcv1i21ljnxcq6b9h3zp6mris916lj45zq";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ autoconf automake libtool pkgconfig qttools ];
|
||||
|
@ -2,15 +2,15 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "qsynth-${version}";
|
||||
version = "0.5.1";
|
||||
version = "0.5.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/qsynth/${name}.tar.gz";
|
||||
sha256 = "0kpk1rnhbifbvm4xvw8i0d4ksk78pf505qvg08k89kqkg32494ap";
|
||||
sha256 = "1rfkaxq1pyc4hv3l0i6wicianbcbm1wp53kh9i5d4jsljgisd1dv";
|
||||
};
|
||||
|
||||
# cmake is looking for qsynth.desktop.in and fails if it doesn't find it
|
||||
# seems like a bug and can presumable go in the next version after 0.5.1
|
||||
# seems like a bug and can presumable go in the next version after 0.5.2
|
||||
postPatch = ''
|
||||
mv src/qsynth.desktop src/qsynth.desktop.in
|
||||
'';
|
||||
|
@ -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.
|
||||
|
||||
|
49
pkgs/applications/audio/spotify/update.sh
Normal file
49
pkgs/applications/audio/spotify/update.sh
Normal 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"
|
@ -8,9 +8,9 @@ let
|
||||
inherit (gnome2) GConf gnome_vfs;
|
||||
};
|
||||
stableVersion = {
|
||||
version = "3.1.3.0"; # "Android Studio 3.1.3"
|
||||
build = "173.4819257";
|
||||
sha256Hash = "196yaswbxh2nd83gimjxr8ggr5xkdxq7n3xlh6ax73v59pj4hryq";
|
||||
version = "3.1.4.0"; # "Android Studio 3.1.4"
|
||||
build = "173.4907809";
|
||||
sha256Hash = "0xx6yprylmcb32ipmwdcfkgddlm1nrxi1w68miclvgrbk015brf2";
|
||||
};
|
||||
betaVersion = {
|
||||
version = "3.2.0.22"; # "Android Studio 3.2 Beta 5"
|
||||
@ -18,9 +18,9 @@ let
|
||||
sha256Hash = "016nyn1pqviy089hg0dq7m4cqb39fdxdcy4zknkaq7dmgv1dj6x9";
|
||||
};
|
||||
latestVersion = { # canary & dev
|
||||
version = "3.3.0.3"; # "Android Studio 3.3 Canary 4"
|
||||
build = "182.4924367";
|
||||
sha256Hash = "03fxjxlsbrpklsss1nvlkb41skr5ymmq9vdns8iikcm1ng925vfd";
|
||||
version = "3.3.0.4"; # "Android Studio 3.3 Canary 5"
|
||||
build = "182.4928781";
|
||||
sha256Hash = "110gh5ylgf1p8z0rdnvc6clkq3v721v6pjvll66a8v4zgz9ay8b4";
|
||||
};
|
||||
in rec {
|
||||
# Old alias
|
||||
|
@ -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
|
||||
|
||||
|
@ -52,19 +52,9 @@ self:
|
||||
# part of a larger package
|
||||
caml = dontConfigure super.caml;
|
||||
|
||||
# part of a larger package
|
||||
# upstream issue: missing package version
|
||||
cmake-mode = markBroken (dontConfigure super.cmake-mode);
|
||||
|
||||
# Expects bash to be at /bin/bash
|
||||
company-rtags = markBroken super.company-rtags;
|
||||
|
||||
# upstream issue: missing file header
|
||||
connection = markBroken super.connection;
|
||||
|
||||
# upstream issue: missing file header
|
||||
dictionary = markBroken super.dictionary;
|
||||
|
||||
easy-kill-extras = super.easy-kill-extras.override {
|
||||
inherit (self.melpaPackages) easy-kill;
|
||||
};
|
||||
@ -79,6 +69,17 @@ self:
|
||||
inherit (self.melpaPackages) ess ctable popup;
|
||||
};
|
||||
|
||||
evil-magit = super.evil-magit.overrideAttrs (attrs: {
|
||||
# searches for Git at build time
|
||||
nativeBuildInputs =
|
||||
(attrs.nativeBuildInputs or []) ++ [ external.git ];
|
||||
});
|
||||
|
||||
# missing dependencies
|
||||
evil-search-highlight-persist = super.evil-search-highlight-persist.overrideAttrs (attrs: {
|
||||
packageRequires = with self; [ evil highlight ];
|
||||
});
|
||||
|
||||
# missing OCaml
|
||||
flycheck-ocaml = markBroken super.flycheck-ocaml;
|
||||
|
||||
@ -108,15 +109,17 @@ self:
|
||||
# upstream issue: missing file header
|
||||
initsplit = super.initsplit;
|
||||
|
||||
# tries to write a log file to $HOME
|
||||
insert-shebang = super.insert-shebang.overrideAttrs (attrs: {
|
||||
HOME = "/tmp";
|
||||
});
|
||||
|
||||
# Expects bash to be at /bin/bash
|
||||
ivy-rtags = markBroken super.ivy-rtags;
|
||||
|
||||
# upstream issue: missing file header
|
||||
jsfmt = markBroken super.jsfmt;
|
||||
|
||||
# upstream issue: missing file header
|
||||
link = markBroken super.link;
|
||||
|
||||
# upstream issue: missing file header
|
||||
maxframe = markBroken super.maxframe;
|
||||
|
||||
@ -131,6 +134,18 @@ self:
|
||||
(attrs.nativeBuildInputs or []) ++ [ external.git ];
|
||||
});
|
||||
|
||||
magit-annex = super.magit-annex.overrideAttrs (attrs: {
|
||||
# searches for Git at build time
|
||||
nativeBuildInputs =
|
||||
(attrs.nativeBuildInputs or []) ++ [ external.git ];
|
||||
});
|
||||
|
||||
magit-gitflow = super.magit-gitflow.overrideAttrs (attrs: {
|
||||
# searches for Git at build time
|
||||
nativeBuildInputs =
|
||||
(attrs.nativeBuildInputs or []) ++ [ external.git ];
|
||||
});
|
||||
|
||||
# missing OCaml
|
||||
merlin = markBroken super.merlin;
|
||||
|
||||
@ -154,8 +169,10 @@ self:
|
||||
(attrs.nativeBuildInputs or []) ++ [ external.git ];
|
||||
}));
|
||||
|
||||
# upstream issue: truncated file
|
||||
powershell = markBroken super.powershell;
|
||||
# tries to write to $HOME
|
||||
php-auto-yasnippets = super.php-auto-yasnippets.overrideAttrs (attrs: {
|
||||
HOME = "/tmp";
|
||||
});
|
||||
|
||||
# upstream issue: mismatched filename
|
||||
processing-snippets = markBroken super.processing-snippets;
|
||||
|
@ -4,12 +4,12 @@ with stdenv.lib;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kakoune-unstable-${version}";
|
||||
version = "2018-05-21";
|
||||
version = "2018-08-05";
|
||||
src = fetchFromGitHub {
|
||||
repo = "kakoune";
|
||||
owner = "mawww";
|
||||
rev = "878d2a4bdb674a5e7703a66e530520f48efba641";
|
||||
sha256 = "0pwy6ilsb62s1792gjyvhvq8shj60l8lx26b58zvpfb54an4s6rk";
|
||||
rev = "ae75032936ed9ffa2bf14589fef115d3d684a7c6";
|
||||
sha256 = "1qm6i8vzr4wjxxdvhr54pan0ysxq1sn880bz8p2w9y6qa91yd3m3";
|
||||
};
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
buildInputs = [ ncurses asciidoc docbook_xsl libxslt ];
|
||||
|
@ -6,6 +6,7 @@ args@{ source ? "default", callPackage, fetchurl, stdenv, ncurses, pkgconfig, ge
|
||||
, libICE
|
||||
, vimPlugins
|
||||
, makeWrapper
|
||||
, wrapGAppsHook
|
||||
|
||||
# apple frameworks
|
||||
, CoreServices, CoreData, Cocoa, Foundation, libobjc, cf-private
|
||||
@ -73,15 +74,6 @@ in stdenv.mkDerivation rec {
|
||||
|
||||
src = builtins.getAttr source {
|
||||
"default" = common.src; # latest release
|
||||
|
||||
"vim-nox" =
|
||||
{
|
||||
# vim nox branch: client-server without X by uing sockets
|
||||
# REGION AUTO UPDATE: { name="vim-nox"; type="hg"; url="https://code.google.com/r/yukihironakadaira-vim-cmdsrv-nox/"; branch="cmdsrv-nox"; }
|
||||
src = (fetchurl { url = "http://mawercer.de/~nix/repos/vim-nox-hg-2082fc3.tar.bz2"; sha256 = "293164ca1df752b7f975fd3b44766f5a1db752de6c7385753f083499651bd13a"; });
|
||||
name = "vim-nox-hg-2082fc3";
|
||||
# END
|
||||
}.src;
|
||||
};
|
||||
|
||||
patches = [ ./cflags-prune.diff ] ++ stdenv.lib.optional ftNixSupport ./ft-nix-support.patch;
|
||||
@ -131,6 +123,7 @@ in stdenv.mkDerivation rec {
|
||||
++ stdenv.lib.optional wrapPythonDrv makeWrapper
|
||||
++ stdenv.lib.optional nlsSupport gettext
|
||||
++ stdenv.lib.optional perlSupport perl
|
||||
++ stdenv.lib.optional (guiSupport == "gtk3") wrapGAppsHook
|
||||
;
|
||||
|
||||
buildInputs = [ ncurses libX11 libXext libSM libXpm libXt libXaw libXau
|
||||
|
40
pkgs/applications/graphics/animbar/default.nix
Normal file
40
pkgs/applications/graphics/animbar/default.nix
Normal file
@ -0,0 +1,40 @@
|
||||
{ stdenv, lib, fetchurl, cmake, qt4, file, gcc }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "animbar";
|
||||
version = "1.2";
|
||||
name = "${pname}-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/${pname}/${name}.tar.bz2";
|
||||
sha256 = "0836nwcpyfdrapyj3hbg3wh149ihc26pc78h01adpc7c0r7d9pr9";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
|
||||
buildInputs = [ qt4 file ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/pixmaps
|
||||
cp src/animbar $out/bin
|
||||
cp ../icon/* $out/share/pixmaps
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Create your own animation on paper and transparancy";
|
||||
longDescription = ''
|
||||
Animbar lets you easily create your own animation on paper and
|
||||
transparancy. From a set of input images two output images are
|
||||
computed, that are printed one on paper and one on
|
||||
transparency. By moving the transparency over the paper you
|
||||
create a fascinating animation effect. This kind of animation
|
||||
technique is hundreds of years old and known under several
|
||||
names: picket fence animation, barrier grid animation, Moiré
|
||||
animation, to name a few.
|
||||
'';
|
||||
homepage = http://animbar.mnim.org;
|
||||
maintainers = with maintainers; [ leenaars ];
|
||||
platforms = platforms.linux;
|
||||
license = licenses.gpl3;
|
||||
};
|
||||
}
|
@ -1,14 +1,14 @@
|
||||
{ stdenv, fetchFromGitHub, fetchurl, xmlstarlet, makeWrapper, ant, jdk, rsync, javaPackages, libXxf86vm, gsettings-desktop-schemas }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "3.3.7";
|
||||
version = "3.4";
|
||||
name = "processing3-${version}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "processing";
|
||||
repo = "processing";
|
||||
rev = "processing-0264-3.3.7";
|
||||
sha256 = "0a20z19lmc4xarfnr7xshcmlv3xkc2dgjxknis0iv79gxnwlqhpq";
|
||||
rev = "processing-0265-${version}";
|
||||
sha256 = "12wpxgn2wd5vbasx9584w5yb1s319smq1zh8m7dvp7gkqw9plwp4";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ ant rsync makeWrapper ];
|
||||
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
|
||||
${xmlstarlet}/bin/xmlstarlet ed --inplace -P -d '//get[@src="http://download.processing.org/reference.zip"]' build/build.xml
|
||||
install -D -m0444 ${fetchurl {
|
||||
url = http://download.processing.org/reference.zip;
|
||||
sha256 = "104zig026y8vbl4qksmscjq0bms8mi2jmri1ijdlbkxcqnv9bnlf";
|
||||
sha256 = "0dli1bdgw8hsx7g7b048ap81v2za9maa6pfcwdqm3qkfypr8q7pr";
|
||||
}
|
||||
} ./java/reference.zip
|
||||
|
||||
|
@ -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 = [
|
||||
|
@ -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 = ''
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
buildGoPackage rec {
|
||||
name = "overmind-${version}";
|
||||
version = "1.1.1";
|
||||
version = "2.0.0.beta1";
|
||||
goPackagePath = "github.com/DarthSim/overmind";
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
@ -15,7 +15,7 @@ buildGoPackage rec {
|
||||
owner = "DarthSim";
|
||||
repo = "overmind";
|
||||
rev = "v${version}";
|
||||
sha256 = "0gdsbm54ln07jv1kgg53fiavx18xxw4f21lfcdl74ijk6bx4jbzv";
|
||||
sha256 = "15fch3qszdm8bj1m9hxky9zgk6f5gpbswwfslg84qdjf4iwr5drq";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
@ -1,11 +1,11 @@
|
||||
{ stdenv, fetchFromGitHub, pythonPackages, file, less
|
||||
{ stdenv, fetchFromGitHub, python3Packages, file, less
|
||||
, imagePreviewSupport ? true, w3m ? null}:
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
assert imagePreviewSupport -> w3m != null;
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
python3Packages.buildPythonApplication rec {
|
||||
name = "ranger-${version}";
|
||||
version = "1.9.1";
|
||||
|
||||
@ -16,7 +16,7 @@ pythonPackages.buildPythonApplication rec {
|
||||
sha256= "1zhds37j1scxa9b183qbrjwxqldrdk581c5xiy81vg17sndb1kqj";
|
||||
};
|
||||
|
||||
checkInputs = with pythonPackages; [ pytest ];
|
||||
checkInputs = with python3Packages; [ pytest ];
|
||||
propagatedBuildInputs = [ file ];
|
||||
|
||||
checkPhase = ''
|
||||
|
@ -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 ];
|
||||
|
@ -1,11 +1,13 @@
|
||||
{fetchurl, stdenv, gtk3, python34Packages, gobjectIntrospection}:
|
||||
{fetchFromGitHub, stdenv, gtk3, python34Packages, gobjectIntrospection}:
|
||||
python34Packages.buildPythonApplication rec {
|
||||
name = "solaar-${version}";
|
||||
version = "0.9.2";
|
||||
name = "solaar-unstable-${version}";
|
||||
version = "2018-02-02";
|
||||
namePrefix = "";
|
||||
src = fetchurl {
|
||||
sha256 = "0954grz2adggfzcj4df4mpr4d7qyl7w8rb4j2s0f9ymawl92i05j";
|
||||
url = "https://github.com/pwr/Solaar/archive/${version}.tar.gz";
|
||||
src = fetchFromGitHub {
|
||||
owner = "pwr";
|
||||
repo = "Solaar";
|
||||
rev = "59b7285fdfc875119f0c92cfd5f5909e8a8e578c";
|
||||
sha256 = "0zy5vmjzdybnjf0mpp8rny11sc43gmm8172svsm9s51h7x0v83y3";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [python34Packages.pygobject3 python34Packages.pyudev gobjectIntrospection gtk3];
|
||||
@ -35,6 +37,6 @@ python34Packages.buildPythonApplication rec {
|
||||
license = licenses.gpl2;
|
||||
homepage = https://pwr.github.io/Solaar/;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [maintainers.spinus];
|
||||
maintainers = [maintainers.spinus maintainers.ysndr];
|
||||
};
|
||||
}
|
||||
|
19
pkgs/applications/misc/toggldesktop/TogglDesktop.pro
Normal file
19
pkgs/applications/misc/toggldesktop/TogglDesktop.pro
Normal file
@ -0,0 +1,19 @@
|
||||
QT += core network widgets
|
||||
|
||||
DEFINES += APP_ENVIRONMENT=\\\"production\\\"
|
||||
DEFINES += APP_VERSION=\\\"@version@\\\"
|
||||
|
||||
TARGET = toggldesktop
|
||||
TEMPLATE = app
|
||||
|
||||
SOURCES += *.cpp
|
||||
HEADERS += *.h
|
||||
FORMS += *.ui
|
||||
RESOURCES += *.qrc
|
||||
|
||||
target.path = $$PREFIX
|
||||
|
||||
INSTALLS += target
|
||||
|
||||
CONFIG += link_pkgconfig
|
||||
PKGCONFIG += bugsnag-qt qxtglobalshortcut qt-oauth-lib toggl x11 xscrnsaver
|
148
pkgs/applications/misc/toggldesktop/default.nix
Normal file
148
pkgs/applications/misc/toggldesktop/default.nix
Normal file
@ -0,0 +1,148 @@
|
||||
{ stdenv, fetchzip, buildEnv, makeDesktopItem, runCommand, writeText, pkgconfig
|
||||
, cmake, qmake, cacert, jsoncpp, libX11, libXScrnSaver, lua, openssl, poco
|
||||
, qtbase, qtwebkit, qtx11extras, sqlite }:
|
||||
|
||||
let
|
||||
name = "toggldesktop-${version}";
|
||||
version = "7.4.231";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/toggl/toggldesktop/archive/v${version}.tar.gz";
|
||||
sha256 = "01hqkx9dljnhwnyqi6mmzfp02hnbi2j50rsfiasniqrkbi99x9v1";
|
||||
};
|
||||
|
||||
bugsnag-qt = stdenv.mkDerivation rec {
|
||||
name = "bugsnag-qt-${version}";
|
||||
version = "20180522.005732";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/yegortimoshenko/bugsnag-qt/archive/${version}.tar.gz";
|
||||
sha256 = "02s6mlggh0i4a856md46dipy6mh47isap82jlwmjr7hfsk2ykgnq";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake ];
|
||||
buildInputs = [ qtbase ];
|
||||
};
|
||||
|
||||
qxtglobalshortcut = stdenv.mkDerivation rec {
|
||||
name = "qxtglobalshortcut-${version}";
|
||||
version = "f584471dada2099ba06c574bdfdd8b078c2e3550";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/hluk/qxtglobalshortcut/archive/${version}.tar.gz";
|
||||
sha256 = "1iy17gypav10z8aa62s5jb6mq9y4kb9ms4l61ydmk3xwlap7igw1";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
buildInputs = [ qtbase qtx11extras ];
|
||||
};
|
||||
|
||||
qt-oauth-lib = stdenv.mkDerivation rec {
|
||||
name = "qt-oauth-lib-${version}";
|
||||
version = "20180521.233208";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/yegortimoshenko/qt-oauth-lib/archive/${version}.tar.gz";
|
||||
sha256 = "0f46d44slzvzaqx0lksvv14lsc1jp8vd2mragxd61r820hybf5z3";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake ];
|
||||
buildInputs = [ qtbase qtwebkit ];
|
||||
};
|
||||
|
||||
poco-pc = writeText "poco.pc" ''
|
||||
Name: Poco
|
||||
Description: ${poco.meta.description}
|
||||
Version: ${poco.version}
|
||||
Libs: -L${poco}/lib -lPocoDataSQLite -lPocoData -lPocoNet -lPocoNetSSL -lPocoCrypto -lPocoUtil -lPocoXML -lPocoFoundation
|
||||
Cflags: -I${poco}/include/Poco
|
||||
'';
|
||||
|
||||
poco-pc-wrapped = runCommand "poco-pc-wrapped" {} ''
|
||||
mkdir -p $out/lib/pkgconfig && ln -s ${poco-pc} $_/poco.pc
|
||||
'';
|
||||
|
||||
libtoggl = stdenv.mkDerivation {
|
||||
name = "libtoggl-${version}";
|
||||
inherit src version;
|
||||
|
||||
sourceRoot = "source/src";
|
||||
|
||||
nativeBuildInputs = [ qmake pkgconfig ];
|
||||
buildInputs = [ jsoncpp lua openssl poco poco-pc-wrapped sqlite libX11 ];
|
||||
|
||||
postPatch = ''
|
||||
cat ${./libtoggl.pro} > libtoggl.pro
|
||||
rm get_focused_window_{mac,windows}.cc
|
||||
'';
|
||||
};
|
||||
|
||||
toggldesktop = stdenv.mkDerivation {
|
||||
name = "${name}-unwrapped";
|
||||
inherit src version;
|
||||
|
||||
sourceRoot = "source/src/ui/linux/TogglDesktop";
|
||||
|
||||
postPatch = ''
|
||||
substituteAll ${./TogglDesktop.pro} TogglDesktop.pro
|
||||
substituteInPlace toggl.cpp \
|
||||
--replace ./../../../toggl_api.h toggl_api.h
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
ln -s ${cacert}/etc/ssl/certs/ca-bundle.crt $out/cacert.pem
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ qmake pkgconfig ];
|
||||
|
||||
buildInputs = [
|
||||
bugsnag-qt
|
||||
libtoggl
|
||||
qxtglobalshortcut
|
||||
qtbase
|
||||
qtwebkit
|
||||
qt-oauth-lib
|
||||
qtx11extras
|
||||
libX11
|
||||
libXScrnSaver
|
||||
];
|
||||
};
|
||||
|
||||
toggldesktop-icons = stdenv.mkDerivation {
|
||||
name = "${name}-icons";
|
||||
inherit (toggldesktop) src sourceRoot;
|
||||
|
||||
installPhase = ''
|
||||
for f in icons/*; do
|
||||
mkdir -p $out/share/icons/hicolor/$(basename $f)/apps
|
||||
mv $f/toggldesktop.png $_
|
||||
done
|
||||
'';
|
||||
};
|
||||
|
||||
toggldesktop-wrapped = runCommand "toggldesktop-wrapped" {} ''
|
||||
mkdir -p $out/bin && ln -s ${toggldesktop}/toggldesktop $_
|
||||
'';
|
||||
|
||||
desktopItem = makeDesktopItem rec {
|
||||
categories = "Utility;";
|
||||
desktopName = "Toggl";
|
||||
genericName = desktopName;
|
||||
name = "toggldesktop";
|
||||
exec = "${toggldesktop-wrapped}/bin/toggldesktop";
|
||||
icon = "toggldesktop";
|
||||
};
|
||||
in
|
||||
|
||||
buildEnv {
|
||||
inherit name;
|
||||
paths = [ desktopItem toggldesktop-icons toggldesktop-wrapped ];
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Client for Toggl time tracking service";
|
||||
homepage = https://github.com/toggl/toggldesktop;
|
||||
license = licenses.bsd3;
|
||||
maintainers = with maintainers; [ yegortimoshenko ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
20
pkgs/applications/misc/toggldesktop/libtoggl.pro
Normal file
20
pkgs/applications/misc/toggldesktop/libtoggl.pro
Normal file
@ -0,0 +1,20 @@
|
||||
TARGET = toggl
|
||||
TEMPLATE = lib
|
||||
|
||||
SOURCES += *.cc
|
||||
HEADERS += *.h
|
||||
|
||||
headers.files = $$HEADERS
|
||||
headers.path = $$PREFIX/include
|
||||
target.path = $$PREFIX/lib
|
||||
|
||||
INSTALLS += headers target
|
||||
|
||||
CONFIG += create_prl create_pc link_pkgconfig
|
||||
PKGCONFIG += jsoncpp openssl lua poco sqlite3 x11
|
||||
|
||||
QMAKE_PKGCONFIG_NAME = $$TARGET
|
||||
QMAKE_PKGCONFIG_PREFIX = $$PREFIX
|
||||
QMAKE_PKGCONFIG_LIBDIR = $$target.path
|
||||
QMAKE_PKGCONFIG_INCDIR = $$headers.path
|
||||
QMAKE_PKGCONFIG_DESTDIR = pkgconfig
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,31 +0,0 @@
|
||||
{ stdenv, fetchgit, pkgconfig, girara, gtk, webkitgtk, glib-networking, makeWrapper
|
||||
, gsettings-desktop-schemas }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "jumanji-${version}";
|
||||
version = "20150107";
|
||||
|
||||
src = fetchgit {
|
||||
url = https://git.pwmt.org/pwmt/jumanji.git;
|
||||
rev = "f8e04e5b5a9fec47d49ca63a096e5d35be281151";
|
||||
sha256 = "1dsbyz489fx7dp07i29q1rjkl7nhrfscc8ks8an2rdyhx3457asg";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
buildInputs = [ girara gtk webkitgtk makeWrapper gsettings-desktop-schemas ];
|
||||
|
||||
makeFlags = [ "PREFIX=$(out)" ];
|
||||
|
||||
preFixup=''
|
||||
wrapProgram "$out/bin/jumanji" \
|
||||
--prefix GIO_EXTRA_MODULES : "${glib-networking.out}/lib/gio/modules" \
|
||||
--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Minimal web browser";
|
||||
homepage = https://pwmt.org/projects/jumanji/;
|
||||
platforms = platforms.all;
|
||||
maintainers = [ maintainers.koral ];
|
||||
};
|
||||
}
|
@ -10,14 +10,14 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "palemoon-${version}";
|
||||
version = "27.9.2";
|
||||
version = "27.9.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
name = "palemoon-src";
|
||||
owner = "MoonchildProductions";
|
||||
repo = "Pale-Moon";
|
||||
rev = version + "_Release";
|
||||
sha256 = "0v6vgkxac2s1hw1namvrjysj2k1kbkabwdxrpq6kyd8svr7n974r";
|
||||
sha256 = "0ir5gzhw98gfn15x58g1fwi11jd7gysvacqxg1v0jdjhgdl4m5sx";
|
||||
};
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
@ -79,6 +79,8 @@ stdenv.mkDerivation rec {
|
||||
chmod u+w .
|
||||
'';
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
|
||||
buildPhase = ''
|
||||
cd $builddir
|
||||
$src/mach build
|
||||
|
@ -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}'
|
||||
|
@ -1,18 +1,18 @@
|
||||
{ stdenv, fetchFromGitHub, pythonPackages, openssl }:
|
||||
{ stdenv, fetchFromGitHub, python2Packages, openssl }:
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
name = "pybitmessage-${version}";
|
||||
python2Packages.buildPythonApplication rec {
|
||||
pname = "pybitmessage";
|
||||
|
||||
version = "0.6.2";
|
||||
version = "0.6.3.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bitmessage";
|
||||
repo = "PyBitmessage";
|
||||
rev = "v${version}";
|
||||
sha256 = "04sgns9qczzw2152gqdr6bjyy4fmgs26cz8n3qck94l0j51rxhz8";
|
||||
rev = version;
|
||||
sha256 = "1lmhbpwsqh1v93krlqqhafw2pc3y0qp8zby186yllbph6s8kdp35";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = with pythonPackages; [ msgpack-python pyqt4 numpy pyopencl ] ++ [ openssl ];
|
||||
propagatedBuildInputs = with python2Packages; [ msgpack-python pyqt4 numpy pyopencl ] ++ [ openssl ];
|
||||
|
||||
preConfigure = ''
|
||||
# Remove interaction and misleading output
|
||||
|
@ -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.15.0";
|
||||
version = "1.15.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://updates.signal.org/desktop/apt/pool/main/s/signal-desktop/signal-desktop_${version}_amd64.deb";
|
||||
sha256 = "1q73jx92h8zwk1dn103ymskz35q6kfiqc44886jr0p7mlpndqsa4";
|
||||
sha256 = "009bcy90dvwiizya387fqrh3a8l0czgs4wnddxndy9gd477sn704";
|
||||
};
|
||||
|
||||
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
|
||||
|
@ -14,7 +14,7 @@ in {
|
||||
stable = mkTelegram stableVersion;
|
||||
preview = mkTelegram (stableVersion // {
|
||||
stable = false;
|
||||
version = "1.3.11";
|
||||
sha256Hash = "057b7ccba7k2slzbp9xzcs3fni40x7gz3wy13xfgxywr12f04h1r";
|
||||
version = "1.3.12";
|
||||
sha256Hash = "00z4ljs4fvbk7sf8wv1v50kln26gv8q12x6q41ai9gfzkvq5f69a";
|
||||
});
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
buildGoPackage rec {
|
||||
name = "ipfs-${version}";
|
||||
version = "0.4.15";
|
||||
version = "0.4.17";
|
||||
rev = "v${version}";
|
||||
|
||||
goPackagePath = "github.com/ipfs/go-ipfs";
|
||||
@ -10,7 +10,7 @@ buildGoPackage rec {
|
||||
extraSrcPaths = [
|
||||
(fetchgx {
|
||||
inherit name src;
|
||||
sha256 = "0bysfh2hd040i8lnyzhy96frflls4kdnlw748cl51ngqg3rwbhgz";
|
||||
sha256 = "0grdgnr67r3qh0ppc3flrhcw8zlvx10mxypd8q2mhkil9w4dpcna";
|
||||
})
|
||||
];
|
||||
|
||||
@ -18,7 +18,7 @@ buildGoPackage rec {
|
||||
owner = "ipfs";
|
||||
repo = "go-ipfs";
|
||||
inherit rev;
|
||||
sha256 = "1ry4a4pq26dbwy2b9cwi3xjaiyq6sng9lxnb1n30zxhp4w7rla2h";
|
||||
sha256 = "18skmchdqd54wfqhibscqvc360l5ig6vmxd73ivf3bcpj3zvgq7q";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
@ -18,7 +18,8 @@ pythonPackages.buildPythonPackage rec {
|
||||
];
|
||||
|
||||
propagatedBuildInputs = with pythonPackages; [
|
||||
pyGtkGlade libtorrentRasterbar twisted Mako chardet pyxdg pyopenssl service-identity
|
||||
pyGtkGlade twisted Mako chardet pyxdg pyopenssl service-identity
|
||||
libtorrentRasterbar.dev libtorrentRasterbar.python
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ intltool ];
|
||||
|
@ -2,27 +2,35 @@
|
||||
, 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/0vi87eef3ooh7iy/${mainbin}.tgz";
|
||||
sha256 = "0d1cayxr1a4j19bc5a3qp9pg22ggzmd55b6f5av3lc6lvwqqg4w6";
|
||||
};
|
||||
};
|
||||
|
||||
"x86_64-linux" = fetchurl {
|
||||
url = "https://www.dropbox.com/s/7qh902qv2sxyp6p/${mainbin}.tgz";
|
||||
sha256 = "05l3smpdvw8xdhv4v8a28j0yi1kvzhrha2ck23g4bl7x9wkay4cc";
|
||||
};
|
||||
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 {
|
||||
@ -31,12 +39,22 @@ in stdenv.mkDerivation rec {
|
||||
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" ];
|
||||
};
|
||||
}
|
||||
|
@ -39,50 +39,6 @@ let
|
||||
});
|
||||
|
||||
versionInfo = {
|
||||
"13.4.0" = rec {
|
||||
major = "13";
|
||||
minor = "4";
|
||||
patch = "0";
|
||||
x64hash = "133brs0sq6d0mgr19rc6ig1n9ahm3ryi23v5nrgqfh0hgxqcrrjb";
|
||||
x86hash = "0r7jfl5yqv1s2npy8l9gsn0gbb82f6raa092ppkc8xy5pni5sh7l";
|
||||
x64suffix = "10109380";
|
||||
x86suffix = x64suffix;
|
||||
homepage = https://www.citrix.com/downloads/citrix-receiver/legacy-receiver-for-linux/receiver-for-linux-latest-13-4.html;
|
||||
};
|
||||
|
||||
"13.5.0" = rec {
|
||||
major = "13";
|
||||
minor = "5";
|
||||
patch = "0";
|
||||
x64hash = "1r24mhkpcc0z95n597p07fz92pd1b8qqzp2z6w07rmb9wb8mpd4x";
|
||||
x86hash = "0pwxshlryzhkl86cj9ryybm54alhzjx0gpp67fnvdn5r64wy1nd1";
|
||||
x64suffix = "10185126";
|
||||
x86suffix = x64suffix;
|
||||
homepage = https://www.citrix.com/downloads/citrix-receiver/legacy-receiver-for-linux/receiver-for-linux-latest-13-5.html;
|
||||
};
|
||||
|
||||
"13.6.0" = rec {
|
||||
major = "13";
|
||||
minor = "6";
|
||||
patch = "0";
|
||||
x64hash = "6e423be41d5bb8186bcca3fbb4ede54dc3f00b8d2aeb216ae4aabffef9310d34";
|
||||
x86hash = "0ba3eba208b37844904d540b3011075ed5cecf429a0ab6c6cd52f2d0fd841ad2";
|
||||
x64suffix = "10243651";
|
||||
x86suffix = x64suffix;
|
||||
homepage = https://www.citrix.com/downloads/citrix-receiver/legacy-receiver-for-linux/receiver-for-linux-136.html;
|
||||
};
|
||||
|
||||
"13.7.0" = {
|
||||
major = "13";
|
||||
minor = "7";
|
||||
patch = "0";
|
||||
x64hash = "18fb374b9fb8e249b79178500dddca7a1f275411c6537e7695da5dcf19c5ba91";
|
||||
x86hash = "4c68723b0327cf6f12da824056fce2b7853c38e6163a48c9d222b93dd8da75b6";
|
||||
x64suffix = "10276927";
|
||||
x86suffix = "10276925";
|
||||
homepage = https://www.citrix.com/downloads/citrix-receiver/legacy-receiver-for-linux/receiver-for-linux-137.html;
|
||||
};
|
||||
|
||||
"13.8.0" = {
|
||||
major = "13";
|
||||
minor = "8";
|
||||
@ -156,7 +112,7 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
phases = [ "unpackPhase" "installPhase" ];
|
||||
dontBuild = true;
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
@ -203,6 +159,8 @@ let
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
export ICAInstDir="$out/opt/citrix-icaclient"
|
||||
|
||||
sed -i \
|
||||
@ -262,13 +220,15 @@ let
|
||||
|
||||
# We introduce a dependency on the source file so that it need not be redownloaded everytime
|
||||
echo $src >> "$out/share/nix_dependencies.pin"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
license = stdenv.lib.licenses.unfree;
|
||||
inherit homepage;
|
||||
description = "Citrix Receiver";
|
||||
maintainers = with maintainers; [ obadz a1russell ];
|
||||
maintainers = with maintainers; [ obadz a1russell ma27 ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
};
|
||||
|
@ -0,0 +1,19 @@
|
||||
{ citrix_receiver, extraCerts ? [], symlinkJoin }:
|
||||
|
||||
let
|
||||
|
||||
mkCertCopy = certPath:
|
||||
"cp ${certPath} $out/opt/citrix-icaclient/keystore/cacerts/";
|
||||
|
||||
in
|
||||
|
||||
if builtins.length extraCerts == 0 then citrix_receiver else symlinkJoin {
|
||||
name = "citrix-with-extra-certs-${citrix_receiver.version}";
|
||||
paths = [ citrix_receiver ];
|
||||
|
||||
postBuild = ''
|
||||
${builtins.concatStringsSep "\n" (map mkCertCopy extraCerts)}
|
||||
|
||||
sed -i -E "s,-icaroot (.+citrix-icaclient),-icaroot $out/opt/citrix-icaclient," $out/bin/wfica
|
||||
'';
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
}:
|
||||
|
||||
let
|
||||
version = "1.2.30.1";
|
||||
version = "1.2.31.2";
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
name = "remmina";
|
||||
@ -29,7 +29,7 @@ in stdenv.mkDerivation {
|
||||
owner = "Remmina";
|
||||
repo = "Remmina";
|
||||
rev = "v${version}";
|
||||
sha256 = "1jz20yv84a8m9gm9fsz0jii8ag90v1scmbkkx9gk38ax5il7ilvn";
|
||||
sha256 = "09jdrs2hbr9wyd5yqw5bri41rnfnxxyh98mlv6ig2phlvs9cg73d";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
|
@ -1,18 +1,26 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, lua, pkgconfig, rsync,
|
||||
{ stdenv, fetchFromGitHub, fetchpatch, cmake, lua, pkgconfig, rsync,
|
||||
asciidoc, libxml2, docbook_xml_dtd_45, docbook_xsl, libxslt }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "lsyncd-${version}";
|
||||
version = "2.2.2";
|
||||
version = "2.2.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "axkibe";
|
||||
repo = "lsyncd";
|
||||
rev = "release-${version}";
|
||||
sha256 = "1q2ixp52r96ckghgmxdbms6xrq8dbziimp8gmgzqfq4lk1v1w80y";
|
||||
sha256 = "1hbsih5hfq9lhgnxm0wb5mrj6xmlk2l0i9a79wzd5f6cnjil9l3x";
|
||||
};
|
||||
|
||||
patchPhase = ''
|
||||
patches = [
|
||||
(fetchpatch {
|
||||
sha256 = "0b0h2qxh73l502p7phf6qgl8576nf6fvqqp2x5wy3nz7sc9qb1z8";
|
||||
name = "fix-non-versioned-lua-not-search-in-cmake.patch";
|
||||
url = "https://github.com/axkibe/lsyncd/pull/500/commits/0af99d8d5ba35118e8799684a2d4a8ea4b0c6957.patch";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace default-rsync.lua \
|
||||
--replace "/usr/bin/rsync" "${rsync}/bin/rsync"
|
||||
'';
|
||||
|
@ -14,10 +14,10 @@ with stdenv.lib;
|
||||
|
||||
python2Packages.buildPythonApplication rec {
|
||||
pname = "tryton";
|
||||
version = "4.8.3";
|
||||
version = "4.8.4";
|
||||
src = python2Packages.fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "1e2862bbe7c943afbbdf2232cdc55f75d2357640115c7f1483f0814b2c5a6882";
|
||||
sha256 = "6cf3091424853e1270d61f3a9b15ad8e6b36a44c28becf216c324ca8dc1474b0";
|
||||
};
|
||||
nativeBuildInputs = [ pkgconfig gobjectIntrospection ];
|
||||
propagatedBuildInputs = with python2Packages; [
|
||||
|
@ -5,10 +5,10 @@ with stdenv.lib;
|
||||
|
||||
python2Packages.buildPythonApplication rec {
|
||||
pname = "trytond";
|
||||
version = "4.8.2";
|
||||
version = "4.8.3";
|
||||
src = python2Packages.fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "ec5c419418517bf9f7d2af08b2bfd3bcc7526f6d6f07d122abf1699c728ae2a9";
|
||||
sha256 = "11d01dc984d9274229b5c80f883679d130a55e14e9124b051274fce9aea4ef77";
|
||||
};
|
||||
|
||||
# Tells the tests which database to use
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let version = "2.48"; in
|
||||
stdenv.mkDerivation {
|
||||
name = "gwyddion-${version}";
|
||||
version = "2.48";
|
||||
src = fetchurl {
|
||||
url = "http://sourceforge.net/projects/gwyddion/files/gwyddion/2.48/gwyddion-2.48.tar.xz";
|
||||
url = "http://sourceforge.net/projects/gwyddion/files/gwyddion/${version}/gwyddion-${version}.tar.xz";
|
||||
sha256 = "119iw58ac2wn4cas6js8m7r1n4gmmkga6b1y711xzcyjp9hshgwx";
|
||||
};
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "symbiyosys-${version}";
|
||||
version = "2018.05.03";
|
||||
version = "2018.07.26";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "yosyshq";
|
||||
repo = "symbiyosys";
|
||||
rev = "35d956c7bb77c0602d198035b2d73a9c61cb4de4";
|
||||
sha256 = "02zg3nkwp3fdjwz1agvsn55k1xipwh2rradb0bgjrjpsmmw63gda";
|
||||
rev = "2fef25f93dd1cb5137a08e71f507e3eee8100fb1";
|
||||
sha256 = "103fga0n11h4n2q346xyz3k0615d9lgx2b8sqr1pwn2hx26kchav";
|
||||
};
|
||||
|
||||
buildInputs = [ python3 yosys ];
|
||||
|
@ -13,10 +13,10 @@ assert useGoogleHashmap -> sparsehash != null;
|
||||
|
||||
let
|
||||
inherit (stdenv.lib) optional;
|
||||
version = "1.0";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "ripser-${version}";
|
||||
version = "1.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Ripser";
|
||||
|
@ -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;
|
||||
|
@ -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()
|
@ -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`)::
|
@ -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)
|
||||
|
@ -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()
|
@ -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')
|
@ -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,
|
@ -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
|
||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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()}
|
||||
|
@ -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,62 @@ 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";
|
||||
})
|
||||
|
||||
# arb 2.13.0 -> 2.14.0
|
||||
(fetchpatch {
|
||||
name = "arb-2.14.0.patch";
|
||||
url = "https://git.sagemath.org/sage.git/patch?id2=8.4.beta0&id=8bef4fd2876a61969b516fe4eb3b8ad7cc076c5e";
|
||||
sha256 = "00p3hfsfn3w2vxgd9fjd23mz7xfxjfravf8ysjxkyd657jbkpjmk";
|
||||
})
|
||||
];
|
||||
|
||||
patches = nixPatches ++ packageUpgradePatches;
|
||||
patches = nixPatches ++ packageUpgradePatches ++ [
|
||||
./patches/known-padics-bug.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# make sure shebangs etc are fixed, but sage-python23 still works
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -6,19 +6,19 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "cgit-${version}";
|
||||
version = "1.1";
|
||||
version = "1.2.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://git.zx2c4.com/cgit/snapshot/${name}.tar.xz";
|
||||
sha256 = "142qcgs8dwnzhymn0a7xx47p9fc2z5wrb86ah4a9iz0mpqlsz288";
|
||||
sha256 = "1gw2j5xc5qdx2hwiwkr8h6kgya7v9d9ff9j32ga1dys0cca7qm1w";
|
||||
};
|
||||
|
||||
# cgit is tightly coupled with git and needs a git source tree to build.
|
||||
# IMPORTANT: Remember to check which git version cgit needs on every version
|
||||
# bump (look for "GIT_VER" in the top-level Makefile).
|
||||
gitSrc = fetchurl {
|
||||
url = "mirror://kernel/software/scm/git/git-2.10.2.tar.xz";
|
||||
sha256 = "0wc64dzcxrzgi6kwcljz6y3cwm3ajdgf6aws7g58azbhvl1jk04l";
|
||||
url = "mirror://kernel/software/scm/git/git-2.18.0.tar.xz";
|
||||
sha256 = "14hfwfkrci829a9316hnvkglnqqw1p03cw9k56p4fcb078wbwh4b";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ] ++ [ python wrapPython ];
|
||||
|
@ -93,11 +93,12 @@ let
|
||||
|
||||
doCheck = false; # fails 10 out of ~2300 tests
|
||||
|
||||
meta = {
|
||||
meta = with stdenv.lib; {
|
||||
description = "A version control system intended to be a compelling replacement for CVS in the open source community";
|
||||
license = licenses.asl20;
|
||||
homepage = http://subversion.apache.org/;
|
||||
maintainers = with stdenv.lib.maintainers; [ eelco lovek323 ];
|
||||
platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
|
||||
maintainers = with maintainers; [ eelco lovek323 ];
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
};
|
||||
|
||||
} // stdenv.lib.optionalAttrs stdenv.isDarwin {
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mpc-qt-${version}";
|
||||
version = "18.03";
|
||||
version = "18.08";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cmdrkotori";
|
||||
repo = "mpc-qt";
|
||||
rev = "v${version}";
|
||||
sha256 = "0mhzdgjgv08cvnscbfndpr0s8ndbcf91b61zfqspa1qv4wlqd716";
|
||||
sha256 = "1rxlkg3vsrapazdlb1i6c5a1vvf2114bsqwzcm3n2wc5c93yqsna";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig qmake qttools ];
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user