diff --git a/nixos/modules/programs/cdemu.nix b/nixos/modules/programs/cdemu.nix
index 6a0185d362c5..a59cd93cadfc 100644
--- a/nixos/modules/programs/cdemu.nix
+++ b/nixos/modules/programs/cdemu.nix
@@ -8,6 +8,7 @@ in {
options = {
programs.cdemu = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
cdemu for members of
diff --git a/nixos/modules/programs/criu.nix b/nixos/modules/programs/criu.nix
index 48cf5c88a9fc..1714e1331a48 100644
--- a/nixos/modules/programs/criu.nix
+++ b/nixos/modules/programs/criu.nix
@@ -8,6 +8,7 @@ in {
options = {
programs.criu = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Install criu along with necessary kernel options.
diff --git a/nixos/modules/programs/systemtap.nix b/nixos/modules/programs/systemtap.nix
index ca81e018c9dc..360e106678e6 100644
--- a/nixos/modules/programs/systemtap.nix
+++ b/nixos/modules/programs/systemtap.nix
@@ -8,6 +8,7 @@ in {
options = {
programs.systemtap = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Install systemtap along with necessary kernel options.
diff --git a/nixos/modules/programs/zsh/oh-my-zsh.nix b/nixos/modules/programs/zsh/oh-my-zsh.nix
index 932a780a356a..f24842a47919 100644
--- a/nixos/modules/programs/zsh/oh-my-zsh.nix
+++ b/nixos/modules/programs/zsh/oh-my-zsh.nix
@@ -39,6 +39,7 @@ in
options = {
programs.zsh.ohMyZsh = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Enable oh-my-zsh.
diff --git a/nixos/modules/services/amqp/rabbitmq.nix b/nixos/modules/services/amqp/rabbitmq.nix
index f80d6b3f1ba5..646708e01c48 100644
--- a/nixos/modules/services/amqp/rabbitmq.nix
+++ b/nixos/modules/services/amqp/rabbitmq.nix
@@ -17,6 +17,7 @@ in {
options = {
services.rabbitmq = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Whether to enable the RabbitMQ server, an Advanced Message
diff --git a/nixos/modules/services/backup/mysql-backup.nix b/nixos/modules/services/backup/mysql-backup.nix
index f58af82773f3..31d606b141a8 100644
--- a/nixos/modules/services/backup/mysql-backup.nix
+++ b/nixos/modules/services/backup/mysql-backup.nix
@@ -37,12 +37,7 @@ in
services.mysqlBackup = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable MySQL backups.
- '';
- };
+ enable = mkEnableOption "MySQL backups";
calendar = mkOption {
type = types.str;
diff --git a/nixos/modules/services/backup/postgresql-backup.nix b/nixos/modules/services/backup/postgresql-backup.nix
index 580c7ce68f1d..428861a7598a 100644
--- a/nixos/modules/services/backup/postgresql-backup.nix
+++ b/nixos/modules/services/backup/postgresql-backup.nix
@@ -44,12 +44,7 @@ in {
options = {
services.postgresqlBackup = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable PostgreSQL dumps.
- '';
- };
+ enable = mkEnableOption "PostgreSQL dumps";
startAt = mkOption {
default = "*-*-* 01:15:00";
diff --git a/nixos/modules/services/databases/clickhouse.nix b/nixos/modules/services/databases/clickhouse.nix
index dbabcae43ee5..27440fec4e10 100644
--- a/nixos/modules/services/databases/clickhouse.nix
+++ b/nixos/modules/services/databases/clickhouse.nix
@@ -11,10 +11,7 @@ with lib;
services.clickhouse = {
- enable = mkOption {
- default = false;
- description = "Whether to enable ClickHouse database server.";
- };
+ enable = mkEnableOption "ClickHouse database server";
};
diff --git a/nixos/modules/services/databases/firebird.nix b/nixos/modules/services/databases/firebird.nix
index 042c9841df54..95837aa1cea6 100644
--- a/nixos/modules/services/databases/firebird.nix
+++ b/nixos/modules/services/databases/firebird.nix
@@ -40,12 +40,7 @@ in
services.firebird = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable the Firebird super server.
- '';
- };
+ enable = mkEnableOption "the Firebird super server";
package = mkOption {
default = pkgs.firebirdSuper;
diff --git a/nixos/modules/services/databases/memcached.nix b/nixos/modules/services/databases/memcached.nix
index 89ff957babf5..f54bb6cc9b18 100644
--- a/nixos/modules/services/databases/memcached.nix
+++ b/nixos/modules/services/databases/memcached.nix
@@ -18,12 +18,7 @@ in
services.memcached = {
- enable = mkOption {
- default = false;
- description = "
- Whether to enable Memcached.
- ";
- };
+ enable = mkEnableOption "Memcached";
user = mkOption {
default = "memcached";
diff --git a/nixos/modules/services/databases/mongodb.nix b/nixos/modules/services/databases/mongodb.nix
index 12879afed477..4453a182990d 100644
--- a/nixos/modules/services/databases/mongodb.nix
+++ b/nixos/modules/services/databases/mongodb.nix
@@ -29,12 +29,7 @@ in
services.mongodb = {
- enable = mkOption {
- default = false;
- description = "
- Whether to enable the MongoDB server.
- ";
- };
+ enable = mkEnableOption "the MongoDB server";
package = mkOption {
default = pkgs.mongodb;
diff --git a/nixos/modules/services/databases/virtuoso.nix b/nixos/modules/services/databases/virtuoso.nix
index 0cc027cb1d74..6eb09e0a58fc 100644
--- a/nixos/modules/services/databases/virtuoso.nix
+++ b/nixos/modules/services/databases/virtuoso.nix
@@ -13,10 +13,7 @@ with lib;
services.virtuoso = {
- enable = mkOption {
- default = false;
- description = "Whether to enable Virtuoso Opensource database server.";
- };
+ enable = mkEnableOption "Virtuoso Opensource database server";
config = mkOption {
default = "";
diff --git a/nixos/modules/services/hardware/ratbagd.nix b/nixos/modules/services/hardware/ratbagd.nix
index 103e1d2315ae..01a8276750f2 100644
--- a/nixos/modules/services/hardware/ratbagd.nix
+++ b/nixos/modules/services/hardware/ratbagd.nix
@@ -10,12 +10,7 @@ in
options = {
services.ratbagd = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable ratbagd for configuring gaming mice.
- '';
- };
+ enable = mkEnableOption "ratbagd for configuring gaming mice";
};
};
diff --git a/nixos/modules/services/hardware/thermald.nix b/nixos/modules/services/hardware/thermald.nix
index 69577bbe0181..ecb529e9bf01 100644
--- a/nixos/modules/services/hardware/thermald.nix
+++ b/nixos/modules/services/hardware/thermald.nix
@@ -8,12 +8,7 @@ in {
###### interface
options = {
services.thermald = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable thermald, the temperature management daemon.
- '';
- };
+ enable = mkEnableOption "thermald, the temperature management daemon";
debug = mkOption {
type = types.bool;
diff --git a/nixos/modules/services/mail/spamassassin.nix b/nixos/modules/services/mail/spamassassin.nix
index 2d5fb40fad35..f6c0b9c794c9 100644
--- a/nixos/modules/services/mail/spamassassin.nix
+++ b/nixos/modules/services/mail/spamassassin.nix
@@ -12,10 +12,7 @@ in
options = {
services.spamassassin = {
- enable = mkOption {
- default = false;
- description = "Whether to run the SpamAssassin daemon";
- };
+ enable = mkEnableOption "the SpamAssassin daemon";
debug = mkOption {
default = false;
diff --git a/nixos/modules/services/misc/autofs.nix b/nixos/modules/services/misc/autofs.nix
index f1742177326a..84f49f964b12 100644
--- a/nixos/modules/services/misc/autofs.nix
+++ b/nixos/modules/services/misc/autofs.nix
@@ -19,6 +19,7 @@ in
services.autofs = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Mount filesystems on demand. Unmount them automatically.
diff --git a/nixos/modules/services/misc/cgminer.nix b/nixos/modules/services/misc/cgminer.nix
index 9fcae6452696..7635c2a0f4e9 100644
--- a/nixos/modules/services/misc/cgminer.nix
+++ b/nixos/modules/services/misc/cgminer.nix
@@ -31,13 +31,7 @@ in
services.cgminer = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable cgminer, an ASIC/FPGA/GPU miner for bitcoin and
- litecoin.
- '';
- };
+ enable = mkEnableOption "cgminer, an ASIC/FPGA/GPU miner for bitcoin and litecoin";
package = mkOption {
default = pkgs.cgminer;
diff --git a/nixos/modules/services/misc/devmon.nix b/nixos/modules/services/misc/devmon.nix
index 9dc8fee2964b..e4a3348646b1 100644
--- a/nixos/modules/services/misc/devmon.nix
+++ b/nixos/modules/services/misc/devmon.nix
@@ -8,12 +8,7 @@ let
in {
options = {
services.devmon = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable devmon, an automatic device mounting daemon.
- '';
- };
+ enable = mkEnableOption "devmon, an automatic device mounting daemon";
};
};
diff --git a/nixos/modules/services/misc/disnix.nix b/nixos/modules/services/misc/disnix.nix
index b7b6eb7cd66e..0776ac679088 100644
--- a/nixos/modules/services/misc/disnix.nix
+++ b/nixos/modules/services/misc/disnix.nix
@@ -17,10 +17,7 @@ in
services.disnix = {
- enable = mkOption {
- default = false;
- description = "Whether to enable Disnix";
- };
+ enable = mkEnableOption "Disnix";
enableMultiUser = mkOption {
type = types.bool;
diff --git a/nixos/modules/services/misc/felix.nix b/nixos/modules/services/misc/felix.nix
index 188e45abc58b..21740c8c0b72 100644
--- a/nixos/modules/services/misc/felix.nix
+++ b/nixos/modules/services/misc/felix.nix
@@ -17,10 +17,7 @@ in
services.felix = {
- enable = mkOption {
- default = false;
- description = "Whether to enable the Apache Felix OSGi service";
- };
+ enable = mkEnableOption "the Apache Felix OSGi service";
bundles = mkOption {
type = types.listOf types.package;
diff --git a/nixos/modules/services/misc/ihaskell.nix b/nixos/modules/services/misc/ihaskell.nix
index 11597706d0d1..684a242d7385 100644
--- a/nixos/modules/services/misc/ihaskell.nix
+++ b/nixos/modules/services/misc/ihaskell.nix
@@ -15,6 +15,7 @@ in
options = {
services.ihaskell = {
enable = mkOption {
+ type = types.bool;
default = false;
description = "Autostart an IHaskell notebook service.";
};
diff --git a/nixos/modules/services/misc/safeeyes.nix b/nixos/modules/services/misc/safeeyes.nix
index 1a33971d9227..6ecb0d13187c 100644
--- a/nixos/modules/services/misc/safeeyes.nix
+++ b/nixos/modules/services/misc/safeeyes.nix
@@ -16,10 +16,7 @@ in
services.safeeyes = {
- enable = mkOption {
- default = false;
- description = "Whether to enable the safeeyes OSGi service";
- };
+ enable = mkEnableOption "the safeeyes OSGi service";
};
diff --git a/nixos/modules/services/misc/svnserve.nix b/nixos/modules/services/misc/svnserve.nix
index 6292bc52b1e3..3335ed09d40e 100644
--- a/nixos/modules/services/misc/svnserve.nix
+++ b/nixos/modules/services/misc/svnserve.nix
@@ -18,6 +18,7 @@ in
services.svnserve = {
enable = mkOption {
+ type = types.bool;
default = false;
description = "Whether to enable svnserve to serve Subversion repositories through the SVN protocol.";
};
diff --git a/nixos/modules/services/misc/synergy.nix b/nixos/modules/services/misc/synergy.nix
index bfab8c534d8c..5b7cf3ac46c3 100644
--- a/nixos/modules/services/misc/synergy.nix
+++ b/nixos/modules/services/misc/synergy.nix
@@ -19,12 +19,8 @@ in
# !!! All these option descriptions needs to be cleaned up.
client = {
- enable = mkOption {
- default = false;
- description = "
- Whether to enable the Synergy client (receive keyboard and mouse events from a Synergy server).
- ";
- };
+ enable = mkEnableOption "the Synergy client (receive keyboard and mouse events from a Synergy server)";
+
screenName = mkOption {
default = "";
description = ''
@@ -47,12 +43,8 @@ in
};
server = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable the Synergy server (send keyboard and mouse events).
- '';
- };
+ enable = mkEnableOption "the Synergy server (send keyboard and mouse events)";
+
configFile = mkOption {
default = "/etc/synergy-server.conf";
description = "The Synergy server configuration file.";
diff --git a/nixos/modules/services/monitoring/datadog-agent.nix b/nixos/modules/services/monitoring/datadog-agent.nix
index 2c5fe47242e7..f1cb890794e1 100644
--- a/nixos/modules/services/monitoring/datadog-agent.nix
+++ b/nixos/modules/services/monitoring/datadog-agent.nix
@@ -225,7 +225,7 @@ in {
Restart = "always";
RestartSec = 2;
};
- restartTriggers = [ datadogPkg ] ++ attrNames etcfiles;
+ restartTriggers = [ datadogPkg ] ++ map (x: x.source) (attrValues etcfiles);
} attrs;
in {
datadog-agent = makeService {
diff --git a/nixos/modules/services/network-filesystems/netatalk.nix b/nixos/modules/services/network-filesystems/netatalk.nix
index 1dd869043f0c..b8adb8377c89 100644
--- a/nixos/modules/services/network-filesystems/netatalk.nix
+++ b/nixos/modules/services/network-filesystems/netatalk.nix
@@ -43,10 +43,7 @@ in
options = {
services.netatalk = {
- enable = mkOption {
- default = false;
- description = "Whether to enable the Netatalk AFP fileserver.";
- };
+ enable = mkEnableOption "the Netatalk AFP fileserver";
port = mkOption {
default = 548;
@@ -65,6 +62,7 @@ in
homes = {
enable = mkOption {
+ type = types.bool;
default = false;
description = "Enable sharing of the UNIX server user home directories.";
};
diff --git a/nixos/modules/services/network-filesystems/rsyncd.nix b/nixos/modules/services/network-filesystems/rsyncd.nix
index b17ec3aa9300..28f7aaec2a42 100644
--- a/nixos/modules/services/network-filesystems/rsyncd.nix
+++ b/nixos/modules/services/network-filesystems/rsyncd.nix
@@ -29,10 +29,7 @@ in
options = {
services.rsyncd = {
- enable = mkOption {
- default = false;
- description = "Whether to enable the rsync daemon.";
- };
+ enable = mkEnableOption "the rsync daemon";
motd = mkOption {
type = types.str;
diff --git a/nixos/modules/services/network-filesystems/xtreemfs.nix b/nixos/modules/services/network-filesystems/xtreemfs.nix
index c93e201da56c..b8f8c1d71174 100644
--- a/nixos/modules/services/network-filesystems/xtreemfs.nix
+++ b/nixos/modules/services/network-filesystems/xtreemfs.nix
@@ -100,11 +100,13 @@ in
dir = {
enable = mkOption {
+ type = types.bool;
default = true;
description = ''
Whether to enable XtreemFS DIR service.
'';
};
+
uuid = mkOption {
example = "eacb6bab-f444-4ebf-a06a-3f72d7465e40";
description = ''
@@ -218,11 +220,13 @@ in
mrc = {
enable = mkOption {
+ type = types.bool;
default = true;
description = ''
Whether to enable XtreemFS MRC service.
'';
};
+
uuid = mkOption {
example = "eacb6bab-f444-4ebf-a06a-3f72d7465e41";
description = ''
@@ -354,11 +358,13 @@ in
osd = {
enable = mkOption {
+ type = types.bool;
default = true;
description = ''
Whether to enable XtreemFS OSD service.
'';
};
+
uuid = mkOption {
example = "eacb6bab-f444-4ebf-a06a-3f72d7465e42";
description = ''
diff --git a/nixos/modules/services/network-filesystems/yandex-disk.nix b/nixos/modules/services/network-filesystems/yandex-disk.nix
index 0aa01ef9e6d9..cc73f13bf77a 100644
--- a/nixos/modules/services/network-filesystems/yandex-disk.nix
+++ b/nixos/modules/services/network-filesystems/yandex-disk.nix
@@ -21,6 +21,7 @@ in
services.yandex-disk = {
enable = mkOption {
+ type = types.bool;
default = false;
description = "
Whether to enable Yandex-disk client. See https://disk.yandex.ru/
diff --git a/nixos/modules/services/networking/amuled.nix b/nixos/modules/services/networking/amuled.nix
index 57f02542eafd..1128ee2c3e61 100644
--- a/nixos/modules/services/networking/amuled.nix
+++ b/nixos/modules/services/networking/amuled.nix
@@ -16,6 +16,7 @@ in
services.amule = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Whether to run the AMule daemon. You need to manually run "amuled --ec-config" to configure the service for the first time.
diff --git a/nixos/modules/services/networking/babeld.nix b/nixos/modules/services/networking/babeld.nix
index de863461eab2..e62c74d0069d 100644
--- a/nixos/modules/services/networking/babeld.nix
+++ b/nixos/modules/services/networking/babeld.nix
@@ -35,12 +35,7 @@ in
services.babeld = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to run the babeld network routing daemon.
- '';
- };
+ enable = mkEnableOption "the babeld network routing daemon";
interfaceDefaults = mkOption {
default = null;
diff --git a/nixos/modules/services/networking/bind.nix b/nixos/modules/services/networking/bind.nix
index e3b95afb3d86..faad88635759 100644
--- a/nixos/modules/services/networking/bind.nix
+++ b/nixos/modules/services/networking/bind.nix
@@ -68,12 +68,7 @@ in
services.bind = {
- enable = mkOption {
- default = false;
- description = "
- Whether to enable BIND domain name server.
- ";
- };
+ enable = mkEnableOption "BIND domain name server";
cacheNetworks = mkOption {
default = ["127.0.0.0/24"];
diff --git a/nixos/modules/services/networking/bitlbee.nix b/nixos/modules/services/networking/bitlbee.nix
index 01a16698384a..9ebf382fce42 100644
--- a/nixos/modules/services/networking/bitlbee.nix
+++ b/nixos/modules/services/networking/bitlbee.nix
@@ -48,6 +48,7 @@ in
services.bitlbee = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Whether to run the BitlBee IRC to other chat network gateway.
diff --git a/nixos/modules/services/networking/cntlm.nix b/nixos/modules/services/networking/cntlm.nix
index 4e4e3104c3a8..5b5068e43d7c 100644
--- a/nixos/modules/services/networking/cntlm.nix
+++ b/nixos/modules/services/networking/cntlm.nix
@@ -33,12 +33,7 @@ in
options.services.cntlm = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable the cntlm, which start a local proxy.
- '';
- };
+ enable = mkEnableOption "cntlm, which starts a local proxy";
username = mkOption {
description = ''
diff --git a/nixos/modules/services/networking/flashpolicyd.nix b/nixos/modules/services/networking/flashpolicyd.nix
index 9c51b88ef677..7f25083307c7 100644
--- a/nixos/modules/services/networking/flashpolicyd.nix
+++ b/nixos/modules/services/networking/flashpolicyd.nix
@@ -39,6 +39,7 @@ in
services.flashpolicyd = {
enable = mkOption {
+ type = types.bool;
default = false;
description =
''
diff --git a/nixos/modules/services/networking/gvpe.nix b/nixos/modules/services/networking/gvpe.nix
index 3ef3548e0a08..92e87cd4640d 100644
--- a/nixos/modules/services/networking/gvpe.nix
+++ b/nixos/modules/services/networking/gvpe.nix
@@ -42,12 +42,8 @@ in
{
options = {
services.gvpe = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to run gvpe
- '';
- };
+ enable = lib.mkEnableOption "gvpe";
+
nodename = mkOption {
default = null;
description =''
diff --git a/nixos/modules/services/networking/hostapd.nix b/nixos/modules/services/networking/hostapd.nix
index 2915b54f05b4..12c0626a9414 100644
--- a/nixos/modules/services/networking/hostapd.nix
+++ b/nixos/modules/services/networking/hostapd.nix
@@ -49,6 +49,7 @@ in
services.hostapd = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Enable putting a wireless interface into infrastructure mode,
diff --git a/nixos/modules/services/networking/ircd-hybrid/default.nix b/nixos/modules/services/networking/ircd-hybrid/default.nix
index b236552eb653..91d0bf437d69 100644
--- a/nixos/modules/services/networking/ircd-hybrid/default.nix
+++ b/nixos/modules/services/networking/ircd-hybrid/default.nix
@@ -36,12 +36,7 @@ in
services.ircdHybrid = {
- enable = mkOption {
- default = false;
- description = "
- Enable IRCD.
- ";
- };
+ enable = mkEnableOption "IRCD";
serverName = mkOption {
default = "hades.arpa";
diff --git a/nixos/modules/services/networking/mailpile.nix b/nixos/modules/services/networking/mailpile.nix
index c42d3d5a44cb..b79ee11d17db 100644
--- a/nixos/modules/services/networking/mailpile.nix
+++ b/nixos/modules/services/networking/mailpile.nix
@@ -18,12 +18,8 @@ in
options = {
services.mailpile = {
- enable = mkOption {
- default = false;
- description = "
- Whether to enable Mailpile the mail client.
- ";
- };
+ enable = mkEnableOption "Mailpile the mail client";
+
hostname = mkOption {
default = "localhost";
description = "Listen to this hostname or ip.";
diff --git a/nixos/modules/services/networking/ntp/chrony.nix b/nixos/modules/services/networking/ntp/chrony.nix
index da9d960cc142..ee02f1fb834e 100644
--- a/nixos/modules/services/networking/ntp/chrony.nix
+++ b/nixos/modules/services/networking/ntp/chrony.nix
@@ -30,6 +30,7 @@ in
options = {
services.chrony = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Whether to synchronise your machine's time using chrony.
diff --git a/nixos/modules/services/networking/ntp/ntpd.nix b/nixos/modules/services/networking/ntp/ntpd.nix
index b5403cb747d0..a372857f6e78 100644
--- a/nixos/modules/services/networking/ntp/ntpd.nix
+++ b/nixos/modules/services/networking/ntp/ntpd.nix
@@ -38,6 +38,7 @@ in
services.ntp = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Whether to synchronise your machine's time using ntpd, as a peer in
diff --git a/nixos/modules/services/networking/openfire.nix b/nixos/modules/services/networking/openfire.nix
index 4059eb3db83d..c74f3611f79e 100644
--- a/nixos/modules/services/networking/openfire.nix
+++ b/nixos/modules/services/networking/openfire.nix
@@ -9,12 +9,7 @@ with lib;
services.openfire = {
- enable = mkOption {
- default = false;
- description = "
- Whether to enable OpenFire XMPP server.
- ";
- };
+ enable = mkEnableOption "OpenFire XMPP server";
usePostgreSQL = mkOption {
default = true;
diff --git a/nixos/modules/services/networking/prayer.nix b/nixos/modules/services/networking/prayer.nix
index 9c9eeba23da2..f04dac01d9b8 100644
--- a/nixos/modules/services/networking/prayer.nix
+++ b/nixos/modules/services/networking/prayer.nix
@@ -41,12 +41,7 @@ in
services.prayer = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to run the prayer webmail http server.
- '';
- };
+ enable = mkEnableOption "the prayer webmail http server";
port = mkOption {
default = "2080";
diff --git a/nixos/modules/services/networking/quassel.nix b/nixos/modules/services/networking/quassel.nix
index 52ecd90b7c69..da723ec86adf 100644
--- a/nixos/modules/services/networking/quassel.nix
+++ b/nixos/modules/services/networking/quassel.nix
@@ -16,12 +16,7 @@ in
services.quassel = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to run the Quassel IRC client daemon.
- '';
- };
+ enable = mkEnableOption "the Quassel IRC client daemon";
certificateFile = mkOption {
type = types.nullOr types.str;
diff --git a/nixos/modules/services/networking/radvd.nix b/nixos/modules/services/networking/radvd.nix
index 020faa34922a..f4b00c9b356e 100644
--- a/nixos/modules/services/networking/radvd.nix
+++ b/nixos/modules/services/networking/radvd.nix
@@ -19,6 +19,7 @@ in
options = {
services.radvd.enable = mkOption {
+ type = types.bool;
default = false;
description =
''
diff --git a/nixos/modules/services/networking/rdnssd.nix b/nixos/modules/services/networking/rdnssd.nix
index bccab805beeb..469504c43172 100644
--- a/nixos/modules/services/networking/rdnssd.nix
+++ b/nixos/modules/services/networking/rdnssd.nix
@@ -17,6 +17,7 @@ in
options = {
services.rdnssd.enable = mkOption {
+ type = types.bool;
default = false;
#default = config.networking.enableIPv6;
description =
diff --git a/nixos/modules/services/networking/sabnzbd.nix b/nixos/modules/services/networking/sabnzbd.nix
index 62b24d4377f8..ff5aef7d1cb4 100644
--- a/nixos/modules/services/networking/sabnzbd.nix
+++ b/nixos/modules/services/networking/sabnzbd.nix
@@ -15,10 +15,8 @@ in
options = {
services.sabnzbd = {
- enable = mkOption {
- default = false;
- description = "Whether to enable the sabnzbd server.";
- };
+ enable = mkEnableOption "the sabnzbd server";
+
configFile = mkOption {
default = "/var/lib/sabnzbd/sabnzbd.ini";
description = "Path to config file.";
diff --git a/nixos/modules/services/networking/shairport-sync.nix b/nixos/modules/services/networking/shairport-sync.nix
index 2e988e0ca2e0..b4b86a2d55be 100644
--- a/nixos/modules/services/networking/shairport-sync.nix
+++ b/nixos/modules/services/networking/shairport-sync.nix
@@ -17,6 +17,7 @@ in
services.shairport-sync = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Enable the shairport-sync daemon.
diff --git a/nixos/modules/services/networking/ssh/lshd.nix b/nixos/modules/services/networking/ssh/lshd.nix
index eca599afb33b..892e59778c34 100644
--- a/nixos/modules/services/networking/ssh/lshd.nix
+++ b/nixos/modules/services/networking/ssh/lshd.nix
@@ -19,6 +19,7 @@ in
services.lshd = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Whether to enable the GNU lshd SSH2 daemon, which allows
diff --git a/nixos/modules/services/networking/xinetd.nix b/nixos/modules/services/networking/xinetd.nix
index 8dc6f845ed85..2f527ab156aa 100644
--- a/nixos/modules/services/networking/xinetd.nix
+++ b/nixos/modules/services/networking/xinetd.nix
@@ -44,12 +44,7 @@ in
options = {
- services.xinetd.enable = mkOption {
- default = false;
- description = ''
- Whether to enable the xinetd super-server daemon.
- '';
- };
+ services.xinetd.enable = mkEnableOption "the xinetd super-server daemon";
services.xinetd.extraDefaults = mkOption {
default = "";
diff --git a/nixos/modules/services/security/fprot.nix b/nixos/modules/services/security/fprot.nix
index f203f2abc033..3a0b08b3c6d8 100644
--- a/nixos/modules/services/security/fprot.nix
+++ b/nixos/modules/services/security/fprot.nix
@@ -10,12 +10,7 @@ in {
services.fprot = {
updater = {
- enable = mkOption {
- default = false;
- description = ''
- Whether to enable automatic F-Prot virus definitions database updates.
- '';
- };
+ enable = mkEnableOption "automatic F-Prot virus definitions database updates";
productData = mkOption {
description = ''
diff --git a/nixos/modules/services/system/kerberos/default.nix b/nixos/modules/services/system/kerberos/default.nix
index c55241c4cff1..9a1e67399010 100644
--- a/nixos/modules/services/system/kerberos/default.nix
+++ b/nixos/modules/services/system/kerberos/default.nix
@@ -51,12 +51,7 @@ in
###### interface
options = {
services.kerberos_server = {
- enable = mkOption {
- default = false;
- description = ''
- Enable the kerberos authentification server.
- '';
- };
+ enable = lib.mkEnableOption "the kerberos authentification server";
realms = mkOption {
type = types.attrsOf (types.submodule realm);
diff --git a/nixos/modules/services/system/localtime.nix b/nixos/modules/services/system/localtime.nix
index 74925c5e2c47..8f8e2e2e9339 100644
--- a/nixos/modules/services/system/localtime.nix
+++ b/nixos/modules/services/system/localtime.nix
@@ -8,6 +8,7 @@ in {
options = {
services.localtime = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Enable localtime, simple daemon for keeping the system
diff --git a/nixos/modules/services/system/uptimed.nix b/nixos/modules/services/system/uptimed.nix
index 3c9978ab2269..1e256c51408e 100644
--- a/nixos/modules/services/system/uptimed.nix
+++ b/nixos/modules/services/system/uptimed.nix
@@ -10,6 +10,7 @@ in
options = {
services.uptimed = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Enable uptimed, allowing you to track
diff --git a/nixos/modules/services/web-servers/jboss/default.nix b/nixos/modules/services/web-servers/jboss/default.nix
index d28724281a83..3a125982831b 100644
--- a/nixos/modules/services/web-servers/jboss/default.nix
+++ b/nixos/modules/services/web-servers/jboss/default.nix
@@ -24,6 +24,7 @@ in
services.jboss = {
enable = mkOption {
+ type = types.bool;
default = false;
description = "Whether to enable JBoss. WARNING : this package is outdated and is known to have vulnerabilities.";
};
diff --git a/nixos/modules/services/x11/desktop-managers/enlightenment.nix b/nixos/modules/services/x11/desktop-managers/enlightenment.nix
index 26b662a2a643..e2d322ebe342 100644
--- a/nixos/modules/services/x11/desktop-managers/enlightenment.nix
+++ b/nixos/modules/services/x11/desktop-managers/enlightenment.nix
@@ -23,6 +23,7 @@ in
options = {
services.xserver.desktopManager.enlightenment.enable = mkOption {
+ type = types.bool;
default = false;
description = "Enable the Enlightenment desktop environment.";
};
diff --git a/nixos/modules/services/x11/desktop-managers/gnome3.nix b/nixos/modules/services/x11/desktop-managers/gnome3.nix
index 5756cf14ed94..b393b8141349 100644
--- a/nixos/modules/services/x11/desktop-managers/gnome3.nix
+++ b/nixos/modules/services/x11/desktop-managers/gnome3.nix
@@ -68,6 +68,7 @@ in
services.xserver.desktopManager.gnome3 = {
enable = mkOption {
+ type = types.bool;
default = false;
description = "Enable Gnome 3 desktop manager.";
};
diff --git a/nixos/modules/services/x11/desktop-managers/kodi.nix b/nixos/modules/services/x11/desktop-managers/kodi.nix
index e997b9a11343..bdae9c3afdb7 100644
--- a/nixos/modules/services/x11/desktop-managers/kodi.nix
+++ b/nixos/modules/services/x11/desktop-managers/kodi.nix
@@ -10,6 +10,7 @@ in
options = {
services.xserver.desktopManager.kodi = {
enable = mkOption {
+ type = types.bool;
default = false;
description = "Enable the kodi multimedia center.";
};
diff --git a/nixos/modules/services/x11/display-managers/startx.nix b/nixos/modules/services/x11/display-managers/startx.nix
index 570469843586..3980203b9457 100644
--- a/nixos/modules/services/x11/display-managers/startx.nix
+++ b/nixos/modules/services/x11/display-managers/startx.nix
@@ -15,6 +15,7 @@ in
options = {
services.xserver.displayManager.startx = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Whether to enable the dummy "startx" pseudo-display manager,
diff --git a/nixos/modules/services/x11/hardware/wacom.nix b/nixos/modules/services/x11/hardware/wacom.nix
index a27889c36a70..dad2b308d1b4 100644
--- a/nixos/modules/services/x11/hardware/wacom.nix
+++ b/nixos/modules/services/x11/hardware/wacom.nix
@@ -15,6 +15,7 @@ in
services.xserver.wacom = {
enable = mkOption {
+ type = types.bool;
default = false;
description = ''
Whether to enable the Wacom touchscreen/digitizer/tablet.
diff --git a/nixos/modules/system/boot/networkd.nix b/nixos/modules/system/boot/networkd.nix
index a80f9e3da9ad..4139030c9cda 100644
--- a/nixos/modules/system/boot/networkd.nix
+++ b/nixos/modules/system/boot/networkd.nix
@@ -1012,7 +1012,7 @@ in
systemd.services.systemd-networkd = {
wantedBy = [ "multi-user.target" ];
- restartTriggers = attrNames unitFiles;
+ restartTriggers = map (x: x.source) (attrValues unitFiles);
# prevent race condition with interface renaming (#39069)
requires = [ "systemd-udev-settle.service" ];
after = [ "systemd-udev-settle.service" ];
diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix
index cdc9d2379392..b63672df1e86 100644
--- a/nixos/modules/system/boot/systemd.nix
+++ b/nixos/modules/system/boot/systemd.nix
@@ -593,6 +593,9 @@ in
each other's limit. The value may be specified in the following
units: s, min, h, ms, us. To turn off any kind of rate limiting,
set either value to 0.
+
+ See for important
+ considerations when setting this value.
'';
};
@@ -604,6 +607,19 @@ in
interval) that is applied to all messages generated on the system.
This rate limiting is applied per-service, so that two services
which log do not interfere with each other's limit.
+
+ Note that the effective rate limit is multiplied by a factor derived
+ from the available free disk space for the journal as described on
+
+ journald.conf(5).
+
+ Note that the total amount of logs stored is limited by journald settings
+ such as SystemMaxUse, which defaults to a 4 GB cap.
+
+ It is thus recommended to compute what period of time that you will be
+ able to store logs for when an application logs at full burst rate.
+ With default settings for log lines that are 100 Bytes long, this can
+ amount to just a few hours.
'';
};
diff --git a/pkgs/applications/audio/dfasma/default.nix b/pkgs/applications/audio/dfasma/default.nix
index 1785ca60060c..02c270fcc940 100644
--- a/pkgs/applications/audio/dfasma/default.nix
+++ b/pkgs/applications/audio/dfasma/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, fftw, libsndfile, qtbase, qtmultimedia, qmake }:
+{ mkDerivation, stdenv, fetchFromGitHub, fftw, libsndfile, qtbase, qtmultimedia, qmake }:
let
@@ -26,7 +26,7 @@ let
};
};
-in stdenv.mkDerivation rec {
+in mkDerivation rec {
pname = "dfasma";
version = "1.4.5";
diff --git a/pkgs/applications/audio/iannix/default.nix b/pkgs/applications/audio/iannix/default.nix
index a893390d74ed..95bc1de1ae98 100644
--- a/pkgs/applications/audio/iannix/default.nix
+++ b/pkgs/applications/audio/iannix/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchFromGitHub, alsaLib, pkgconfig, qtbase, qtscript, qmake
+{ mkDerivation, stdenv, fetchFromGitHub, alsaLib, pkgconfig, qtbase, qtscript, qmake
}:
-stdenv.mkDerivation {
+mkDerivation {
pname = "iannix";
version = "2016-01-31";
src = fetchFromGitHub {
diff --git a/pkgs/applications/audio/traverso/default.nix b/pkgs/applications/audio/traverso/default.nix
index 9188003ce66d..104779264185 100644
--- a/pkgs/applications/audio/traverso/default.nix
+++ b/pkgs/applications/audio/traverso/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, cmake, pkgconfig
+{ mkDerivation, stdenv, fetchurl, cmake, pkgconfig
, alsaLib, fftw, flac, lame, libjack2, libmad, libpulseaudio
, libsamplerate, libsndfile, libvorbis, portaudio, qtbase, wavpack
}:
-stdenv.mkDerivation {
+mkDerivation {
pname = "traverso";
version = "0.49.6";
diff --git a/pkgs/applications/editors/mindforger/default.nix b/pkgs/applications/editors/mindforger/default.nix
index 9cfcf95e78b1..a65807fb280e 100644
--- a/pkgs/applications/editors/mindforger/default.nix
+++ b/pkgs/applications/editors/mindforger/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, qmake, qtbase, qtwebkit }:
+{ mkDerivation, stdenv, fetchurl, qmake, qtbase, qtwebkit }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "mindforger";
version = "1.48.2";
diff --git a/pkgs/applications/editors/okteta/default.nix b/pkgs/applications/editors/okteta/default.nix
index fa63ee90adc9..b9d92409198b 100644
--- a/pkgs/applications/editors/okteta/default.nix
+++ b/pkgs/applications/editors/okteta/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, extra-cmake-modules, kdoctools, qtscript, kconfig
+{ mkDerivation, stdenv, fetchurl, extra-cmake-modules, kdoctools, qtscript, kconfig
, kinit, karchive, kcrash, kcmutils, kconfigwidgets, knewstuff, kparts
, qca-qt5, shared-mime-info }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "okteta";
version = "0.26.3";
diff --git a/pkgs/applications/graphics/awesomebump/default.nix b/pkgs/applications/graphics/awesomebump/default.nix
index b827a12f81c8..9571b026fe34 100644
--- a/pkgs/applications/graphics/awesomebump/default.nix
+++ b/pkgs/applications/graphics/awesomebump/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchgit, qtbase, qmake, makeWrapper, qtscript, flex, bison, qtdeclarative }:
+{ mkDerivation, lib, fetchgit, qtbase, qmake, qtscript, flex, bison, qtdeclarative }:
let
@@ -11,7 +11,7 @@ let
fetchSubmodules = true;
};
- qtnproperty = stdenv.mkDerivation {
+ qtnproperty = mkDerivation {
name = "qtnproperty";
inherit src;
sourceRoot = "AwesomeBump/Sources/utils/QtnProperty";
@@ -22,7 +22,7 @@ let
install -D bin-linux/QtnPEG $out/bin/QtnPEG
'';
};
-in stdenv.mkDerivation {
+in mkDerivation {
pname = "awesomebump";
inherit version;
@@ -30,12 +30,13 @@ in stdenv.mkDerivation {
buildInputs = [ qtbase qtscript qtdeclarative ];
- nativeBuildInputs = [ qmake makeWrapper ];
+ nativeBuildInputs = [ qmake ];
preBuild = ''
ln -sf ${qtnproperty}/bin/QtnPEG Sources/utils/QtnProperty/bin-linux/QtnPEG
'';
+ dontWrapQtApps = true;
postInstall = ''
d=$out/libexec/AwesomeBump
@@ -44,7 +45,7 @@ in stdenv.mkDerivation {
cp -prd Bin/Configs Bin/Core $d/
# AwesomeBump expects to find Core and Configs in its current directory.
- makeWrapper $d/AwesomeBump $out/bin/AwesomeBump \
+ makeQtWrapper $d/AwesomeBump $out/bin/AwesomeBump \
--run "cd $d"
'';
diff --git a/pkgs/applications/graphics/phototonic/default.nix b/pkgs/applications/graphics/phototonic/default.nix
index 5e7fb5cf7a0a..9d18d6051100 100644
--- a/pkgs/applications/graphics/phototonic/default.nix
+++ b/pkgs/applications/graphics/phototonic/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, qtbase, qmake, exiv2 }:
+{ mkDerivation, stdenv, fetchFromGitHub, qtbase, qmake, exiv2 }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "phototonic";
version = "2.1";
diff --git a/pkgs/applications/graphics/qcomicbook/default.nix b/pkgs/applications/graphics/qcomicbook/default.nix
index 4d416a7c106d..30792d3bf7dc 100644
--- a/pkgs/applications/graphics/qcomicbook/default.nix
+++ b/pkgs/applications/graphics/qcomicbook/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, pkgconfig, cmake, qtbase, qttools, qtx11extras, poppler }:
+{ mkDerivation, stdenv, fetchFromGitHub, pkgconfig, cmake, qtbase, qttools, qtx11extras, poppler }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "qcomicbook";
version = "0.9.1";
diff --git a/pkgs/applications/graphics/write_stylus/default.nix b/pkgs/applications/graphics/write_stylus/default.nix
index 0f1020b0b078..d2a621aa0dc2 100644
--- a/pkgs/applications/graphics/write_stylus/default.nix
+++ b/pkgs/applications/graphics/write_stylus/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, qtbase, qtsvg, libglvnd, fetchurl, makeDesktopItem }:
+{ mkDerivation, stdenv, lib, qtbase, qtsvg, libglvnd, fetchurl, makeDesktopItem }:
let
# taken from: https://www.iconfinder.com/icons/50835/edit_pencil_write_icon
# license: Free for commercial use
@@ -7,7 +7,7 @@ let
sha256 = "0abdya42yf9alxbsmc2nf8jwld50zfria6z3d4ncvp1zw2a9jhb8";
};
in
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "write_stylus";
version = "209";
diff --git a/pkgs/applications/misc/bibletime/default.nix b/pkgs/applications/misc/bibletime/default.nix
index d0af940ac92a..9b2deed44e68 100644
--- a/pkgs/applications/misc/bibletime/default.nix
+++ b/pkgs/applications/misc/bibletime/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, cmake, pkgconfig, sword, boost, clucene_core
+{ mkDerivation, stdenv, fetchurl, cmake, pkgconfig, sword, boost, clucene_core
, qtbase, qttools, qtsvg, qtwebkit
}:
-stdenv.mkDerivation rec {
+mkDerivation rec {
version = "2.11.2";
diff --git a/pkgs/applications/misc/candle/default.nix b/pkgs/applications/misc/candle/default.nix
index 77cabc409c74..aec6f9b7c506 100644
--- a/pkgs/applications/misc/candle/default.nix
+++ b/pkgs/applications/misc/candle/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, qtbase, qtserialport, qmake }:
+{ mkDerivation, stdenv, fetchFromGitHub, qtbase, qtserialport, qmake }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "candle";
version = "1.1";
diff --git a/pkgs/applications/misc/openbrf/default.nix b/pkgs/applications/misc/openbrf/default.nix
index e943263600cd..140f4b691133 100644
--- a/pkgs/applications/misc/openbrf/default.nix
+++ b/pkgs/applications/misc/openbrf/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchFromGitHub, qtbase, vcg, glew, qmake, libGLU, libGL }:
+{ mkDerivation, stdenv, fetchFromGitHub, qtbase, vcg, glew, qmake, libGLU, libGL }:
-stdenv.mkDerivation {
+mkDerivation {
name = "openbrf-unstable-2016-01-09";
src = fetchFromGitHub {
diff --git a/pkgs/applications/misc/qt-box-editor/default.nix b/pkgs/applications/misc/qt-box-editor/default.nix
index 702cadfdaa91..06dd511b5c71 100644
--- a/pkgs/applications/misc/qt-box-editor/default.nix
+++ b/pkgs/applications/misc/qt-box-editor/default.nix
@@ -1,4 +1,5 @@
-{ stdenv
+{ mkDerivation
+, stdenv
, fetchFromGitHub
, qtbase
, qtsvg
@@ -7,7 +8,7 @@
, tesseract
}:
-stdenv.mkDerivation {
+mkDerivation {
pname = "qt-box-editor";
version = "unstable-2019-07-12";
diff --git a/pkgs/applications/misc/valentina/default.nix b/pkgs/applications/misc/valentina/default.nix
index 5a12465c4c49..0d330fbc3268 100644
--- a/pkgs/applications/misc/valentina/default.nix
+++ b/pkgs/applications/misc/valentina/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchhg
+{ mkDerivation, stdenv, fetchhg
, qmake, qttools
, qtbase, qtsvg, qtxmlpatterns
, poppler_utils
@@ -6,7 +6,7 @@
with stdenv.lib;
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "valentina";
version = "0.6.1";
diff --git a/pkgs/applications/networking/browsers/chromium/common.nix b/pkgs/applications/networking/browsers/chromium/common.nix
index 9f7583b1ef5c..585a5f49df37 100644
--- a/pkgs/applications/networking/browsers/chromium/common.nix
+++ b/pkgs/applications/networking/browsers/chromium/common.nix
@@ -149,10 +149,13 @@ let
#
# ++ optionals (channel == "dev") [ ( githubPatch "" "0000000000000000000000000000000000000000000000000000000000000000" ) ]
# ++ optional (versionRange "68" "72") ( githubPatch "" "0000000000000000000000000000000000000000000000000000000000000000" )
- ] ++ optionals (useVaapi) [
+ ] ++ optionals (useVaapi) ([
# source: https://aur.archlinux.org/cgit/aur.git/tree/vaapi-fix.patch?h=chromium-vaapi
./patches/vaapi-fix.patch
- ];
+ ] ++ optionals (versionRange "81" "82") [
+ (githubPatch "5b2ff215473e0526b5b24aeff4ad90d369b21c75" "0n00vh8wfpn2ay5fqsxcsx0zadnv7mihm72bcvnrfzh75nzbg902")
+ (githubPatch "98e343ab369e4262511b5fce547728e3e5eefba8" "00wwp653jk0k0yvix00vr7ymgck9dj7fxjwx4nc67ynn84dh6064")
+ ]);
postPatch = ''
# We want to be able to specify where the sandbox is via CHROME_DEVEL_SANDBOX
diff --git a/pkgs/applications/networking/browsers/chromium/default.nix b/pkgs/applications/networking/browsers/chromium/default.nix
index 564e50b86709..c66acac12c38 100644
--- a/pkgs/applications/networking/browsers/chromium/default.nix
+++ b/pkgs/applications/networking/browsers/chromium/default.nix
@@ -20,7 +20,7 @@
}:
let
- llvmPackages = if channel == "dev"
+ llvmPackages = if channel != "stable"
then llvmPackages_10
else llvmPackages_9;
stdenv = llvmPackages.stdenv;
@@ -35,7 +35,7 @@ let
mkChromiumDerivation = callPackage ./common.nix ({
inherit gnome gnomeSupport gnomeKeyringSupport proprietaryCodecs cupsSupport pulseSupport useVaapi useOzone;
gnChromium = gn;
- } // lib.optionalAttrs (channel == "dev") {
+ } // lib.optionalAttrs (channel != "stable") {
# TODO: Remove after we can update gn for the stable channel (backward incompatible changes):
gnChromium = gn.overrideAttrs (oldAttrs: {
version = "2020-03-23";
diff --git a/pkgs/applications/networking/browsers/chromium/upstream-info.nix b/pkgs/applications/networking/browsers/chromium/upstream-info.nix
index 50e3abb5ec3f..77505b47d857 100644
--- a/pkgs/applications/networking/browsers/chromium/upstream-info.nix
+++ b/pkgs/applications/networking/browsers/chromium/upstream-info.nix
@@ -1,18 +1,18 @@
# This file is autogenerated from update.sh in the same directory.
{
beta = {
- sha256 = "0hsxxw7fm1p8g53msqb644v8vr4cpvjmpln444c2268rm43yik17";
- sha256bin64 = "1iwn0yyhk0jn47pn7rx9kadli47xyvz3xilfl4faifmasin2fq8v";
- version = "81.0.4044.113";
- };
- dev = {
sha256 = "1s16wl101yabq0l7w0q50lxkr2gn090pcaj6l5sj6g5xvi9lhgbf";
- sha256bin64 = "1hn2hjni5k370jhc0nikmx5ypwzcqnmr02h185a5ry697643abdd";
+ sha256bin64 = "0k6fsqlpiwp9vds83hb3cg9xf74hqgbfdm3ijyad2rmwc5rqk0ax";
version = "83.0.4103.14";
};
+ dev = {
+ sha256 = "0djppzwzpfyyfjb1mhy5wws2379m3wpzyk2x3kw5nd0mdz35hbny";
+ sha256bin64 = "1wg55qhfvd5zvigjl6496za81mh9b2c5da53zy07bk8wj91ly8pf";
+ version = "84.0.4115.5";
+ };
stable = {
- sha256 = "0hsxxw7fm1p8g53msqb644v8vr4cpvjmpln444c2268rm43yik17";
- sha256bin64 = "0ap7flrw3h885454fa2r7psa4sh8567ql7v7x96q11gh9gjrdvp3";
- version = "81.0.4044.113";
+ sha256 = "0ahqh3vmzbpai4xwn7qybgw9phc8ssjdvfc7384mxqk9swqgv7qg";
+ sha256bin64 = "0gpgim244594m35qwf625blwdqgjbp4qr846wq75a9a9zqwqs05w";
+ version = "81.0.4044.122";
};
}
diff --git a/pkgs/applications/networking/instant-messengers/ricochet/default.nix b/pkgs/applications/networking/instant-messengers/ricochet/default.nix
index 96ce9c32a7d6..f0384bc49675 100644
--- a/pkgs/applications/networking/instant-messengers/ricochet/default.nix
+++ b/pkgs/applications/networking/instant-messengers/ricochet/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, pkgconfig, makeDesktopItem
+{ mkDerivation, stdenv, fetchurl, pkgconfig, makeDesktopItem
, qtbase, qttools, qtmultimedia, qtquick1, qtquickcontrols
, openssl, protobuf, qmake
}:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "ricochet";
version = "1.1.4";
diff --git a/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix b/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix
index 7295f6c48ad6..c39b199235d1 100644
--- a/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix
+++ b/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix
@@ -23,7 +23,7 @@ let
else "");
in stdenv.mkDerivation rec {
pname = "signal-desktop";
- version = "1.33.1"; # Please backport all updates to the stable channel.
+ version = "1.33.3"; # Please backport all updates to the stable channel.
# All releases have a limited lifetime and "expire" 90 days after the release.
# When releases "expire" the application becomes unusable until an update is
# applied. The expiration date for the current release can be extracted with:
@@ -33,7 +33,7 @@ in stdenv.mkDerivation rec {
src = fetchurl {
url = "https://updates.signal.org/desktop/apt/pool/main/s/signal-desktop/signal-desktop_${version}_amd64.deb";
- sha256 = "0p9ak0cmk9b77dzbw4y2xmxqg211y62n7ckggwf7bcg48wzj0jy7";
+ sha256 = "1brw1hidmrznb55cb794yvgzin7sf3cxnffivmag4vf2a2vcvf4y";
};
nativeBuildInputs = [
diff --git a/pkgs/applications/networking/instant-messengers/swift-im/default.nix b/pkgs/applications/networking/instant-messengers/swift-im/default.nix
index d47b7d00af92..ea98ae5a0182 100644
--- a/pkgs/applications/networking/instant-messengers/swift-im/default.nix
+++ b/pkgs/applications/networking/instant-messengers/swift-im/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchurl, pkgconfig, qttools, scons
+{ mkDerivation, stdenv, fetchurl, pkgconfig, qttools, scons
, GConf, avahi, boost, hunspell, libXScrnSaver, libedit, libidn, libnatpmp, libxml2
, lua, miniupnpc, openssl, qtbase, qtmultimedia, qtsvg, qtwebkit, qtx11extras, zlib
}:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "swift-im";
version = "4.0.2";
diff --git a/pkgs/applications/networking/instant-messengers/tensor/default.nix b/pkgs/applications/networking/instant-messengers/tensor/default.nix
index 11845ecfb26c..541d0daed545 100644
--- a/pkgs/applications/networking/instant-messengers/tensor/default.nix
+++ b/pkgs/applications/networking/instant-messengers/tensor/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, fetchgit, qtbase, qtquickcontrols, qmake, makeDesktopItem }:
+{ mkDerivation, stdenv, fetchgit, qtbase, qtquickcontrols, qmake, makeDesktopItem }:
# we now have libqmatrixclient so a future version of tensor that supports it
# should use that
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "tensor-git";
version = "2017-02-21";
diff --git a/pkgs/applications/office/elementary-planner/default.nix b/pkgs/applications/office/elementary-planner/default.nix
index def44b40e809..300cb4c8c204 100644
--- a/pkgs/applications/office/elementary-planner/default.nix
+++ b/pkgs/applications/office/elementary-planner/default.nix
@@ -1,6 +1,12 @@
-{ stdenv, fetchFromGitHub, fetchpatch
-, meson, ninja, pkgconfig, desktop-file-utils
-, python3, vala, wrapGAppsHook
+{ stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkgconfig
+, desktop-file-utils
+, python3
+, vala
+, wrapGAppsHook
, evolution-data-server
, libical
, libgee
@@ -53,8 +59,15 @@ stdenv.mkDerivation rec {
patchShebangs build-aux/meson/post_install.py
'';
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # the theme is hardcoded
+ --prefix XDG_DATA_DIRS : "${pantheon.elementary-gtk-theme}/share"
+ )
+ '';
+
meta = with stdenv.lib; {
- description = "Task and project manager designed to elementary OS";
+ description = "Task manager with Todoist support designed for GNU/Linux 🚀️";
homepage = "https://planner-todo.web.app";
license = licenses.gpl3;
maintainers = with maintainers; [ dtzWill ] ++ pantheon.maintainers;
diff --git a/pkgs/applications/science/electronics/caneda/default.nix b/pkgs/applications/science/electronics/caneda/default.nix
index ff41a498ae71..558d632ce87d 100644
--- a/pkgs/applications/science/electronics/caneda/default.nix
+++ b/pkgs/applications/science/electronics/caneda/default.nix
@@ -1,6 +1,6 @@
-{stdenv, fetchFromGitHub, cmake, qtbase, qttools, qtsvg, qwt }:
+{ mkDerivation, stdenv, fetchFromGitHub, cmake, qtbase, qttools, qtsvg, qwt }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "caneda";
version = "0.3.1";
diff --git a/pkgs/applications/version-management/git-and-tools/diff-so-fancy/default.nix b/pkgs/applications/version-management/git-and-tools/diff-so-fancy/default.nix
index 96216e76fd31..6a0de2d0bfec 100644
--- a/pkgs/applications/version-management/git-and-tools/diff-so-fancy/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/diff-so-fancy/default.nix
@@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "diff-so-fancy";
- version = "1.2.7";
+ version = "1.3.0";
src = fetchFromGitHub {
owner = "so-fancy";
repo = "diff-so-fancy";
rev = "v${version}";
- sha256 = "0y5cp236gi6h7llzai5d27086l4zz58mz1zs01r97xnnmjs9vw21";
+ sha256 = "0aavxahzha2mms4vdwysk79pa6wzswpfwgsq2hwaxnaf66maahfl";
};
# Perl is needed here for patchShebangs
diff --git a/pkgs/applications/version-management/redmine/Gemfile b/pkgs/applications/version-management/redmine/Gemfile
index b1c651695c79..beff147c374a 100644
--- a/pkgs/applications/version-management/redmine/Gemfile
+++ b/pkgs/applications/version-management/redmine/Gemfile
@@ -1,8 +1,10 @@
source 'https://rubygems.org'
+ruby '>= 2.3.0', '< 2.7.0' if Bundler::VERSION >= '1.12.0'
gem "bundler", ">= 1.5.0"
-gem "rails", "5.2.4.1"
+gem 'rails', '5.2.4.2'
+gem 'sprockets', '~> 3.7.2' if RUBY_VERSION < '2.5'
gem "rouge", "~> 3.12.0"
gem "request_store", "~> 1.4.1"
gem "mini_mime", "~> 1.0.1"
diff --git a/pkgs/applications/version-management/redmine/Gemfile.lock b/pkgs/applications/version-management/redmine/Gemfile.lock
index 66326b282358..60aed5e17922 100644
--- a/pkgs/applications/version-management/redmine/Gemfile.lock
+++ b/pkgs/applications/version-management/redmine/Gemfile.lock
@@ -1,19 +1,19 @@
GEM
remote: https://rubygems.org/
specs:
- actioncable (5.2.4.1)
- actionpack (= 5.2.4.1)
+ actioncable (5.2.4.2)
+ actionpack (= 5.2.4.2)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
- actionmailer (5.2.4.1)
- actionpack (= 5.2.4.1)
- actionview (= 5.2.4.1)
- activejob (= 5.2.4.1)
+ actionmailer (5.2.4.2)
+ actionpack (= 5.2.4.2)
+ actionview (= 5.2.4.2)
+ activejob (= 5.2.4.2)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
- actionpack (5.2.4.1)
- actionview (= 5.2.4.1)
- activesupport (= 5.2.4.1)
+ actionpack (5.2.4.2)
+ actionview (= 5.2.4.2)
+ activesupport (= 5.2.4.2)
rack (~> 2.0, >= 2.0.8)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
@@ -21,26 +21,26 @@ GEM
actionpack-xml_parser (2.0.1)
actionpack (>= 5.0)
railties (>= 5.0)
- actionview (5.2.4.1)
- activesupport (= 5.2.4.1)
+ actionview (5.2.4.2)
+ activesupport (= 5.2.4.2)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
- activejob (5.2.4.1)
- activesupport (= 5.2.4.1)
+ activejob (5.2.4.2)
+ activesupport (= 5.2.4.2)
globalid (>= 0.3.6)
- activemodel (5.2.4.1)
- activesupport (= 5.2.4.1)
- activerecord (5.2.4.1)
- activemodel (= 5.2.4.1)
- activesupport (= 5.2.4.1)
+ activemodel (5.2.4.2)
+ activesupport (= 5.2.4.2)
+ activerecord (5.2.4.2)
+ activemodel (= 5.2.4.2)
+ activesupport (= 5.2.4.2)
arel (>= 9.0)
- activestorage (5.2.4.1)
- actionpack (= 5.2.4.1)
- activerecord (= 5.2.4.1)
+ activestorage (5.2.4.2)
+ actionpack (= 5.2.4.2)
+ activerecord (= 5.2.4.2)
marcel (~> 0.3.1)
- activesupport (5.2.4.1)
+ activesupport (5.2.4.2)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
@@ -59,8 +59,8 @@ GEM
regexp_parser (~> 1.5)
xpath (~> 3.2)
childprocess (3.0.0)
- concurrent-ruby (1.1.5)
- crass (1.0.5)
+ concurrent-ruby (1.1.6)
+ crass (1.0.6)
css_parser (1.7.1)
addressable
csv (3.1.2)
@@ -73,58 +73,58 @@ GEM
concurrent-ruby (~> 1.0)
jaro_winkler (1.5.4)
json (2.3.0)
- loofah (2.4.0)
+ loofah (2.5.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
mini_mime (>= 0.1.1)
marcel (0.3.3)
mimemagic (~> 0.3.2)
- method_source (0.9.2)
- mimemagic (0.3.3)
+ method_source (1.0.0)
+ mimemagic (0.3.4)
mini_magick (4.9.5)
mini_mime (1.0.2)
mini_portile2 (2.4.0)
- minitest (5.13.0)
- mocha (1.11.1)
+ minitest (5.14.0)
+ mocha (1.11.2)
mysql2 (0.5.3)
net-ldap (0.16.2)
nio4r (2.5.2)
- nokogiri (1.10.7)
+ nokogiri (1.10.9)
mini_portile2 (~> 2.4.0)
parallel (1.19.1)
- parser (2.6.5.0)
+ parser (2.7.1.0)
ast (~> 2.4.0)
pg (1.1.4)
- public_suffix (4.0.1)
- puma (3.12.2)
- rack (2.0.8)
+ public_suffix (4.0.4)
+ puma (3.12.4)
+ rack (2.2.2)
rack-openid (1.4.2)
rack (>= 1.1.0)
ruby-openid (>= 2.1.8)
rack-test (1.1.0)
rack (>= 1.0, < 3)
- rails (5.2.4.1)
- actioncable (= 5.2.4.1)
- actionmailer (= 5.2.4.1)
- actionpack (= 5.2.4.1)
- actionview (= 5.2.4.1)
- activejob (= 5.2.4.1)
- activemodel (= 5.2.4.1)
- activerecord (= 5.2.4.1)
- activestorage (= 5.2.4.1)
- activesupport (= 5.2.4.1)
+ rails (5.2.4.2)
+ actioncable (= 5.2.4.2)
+ actionmailer (= 5.2.4.2)
+ actionpack (= 5.2.4.2)
+ actionview (= 5.2.4.2)
+ activejob (= 5.2.4.2)
+ activemodel (= 5.2.4.2)
+ activerecord (= 5.2.4.2)
+ activestorage (= 5.2.4.2)
+ activesupport (= 5.2.4.2)
bundler (>= 1.3.0)
- railties (= 5.2.4.1)
+ railties (= 5.2.4.2)
sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.3.0)
loofah (~> 2.3)
- railties (5.2.4.1)
- actionpack (= 5.2.4.1)
- activesupport (= 5.2.4.1)
+ railties (5.2.4.2)
+ actionpack (= 5.2.4.2)
+ activesupport (= 5.2.4.2)
method_source
rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0)
@@ -135,15 +135,15 @@ GEM
rbpdf-font (~> 1.19.0)
rbpdf-font (1.19.1)
redcarpet (3.5.0)
- regexp_parser (1.6.0)
+ regexp_parser (1.7.0)
request_store (1.4.1)
rack (>= 1.4)
- roadie (3.5.1)
+ roadie (4.0.0)
css_parser (~> 1.4)
nokogiri (~> 1.8)
- roadie-rails (2.1.0)
+ roadie-rails (2.1.1)
railties (>= 5.1, < 6.1)
- roadie (~> 3.1)
+ roadie (>= 3.1, < 5.0)
rouge (3.12.0)
rubocop (0.76.0)
jaro_winkler (~> 1.5.1)
@@ -152,15 +152,15 @@ GEM
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7)
- rubocop-performance (1.5.1)
+ rubocop-performance (1.5.2)
rubocop (>= 0.71.0)
rubocop-rails (2.3.2)
rack (>= 1.1)
rubocop (>= 0.72.0)
ruby-openid (2.9.2)
ruby-progressbar (1.10.1)
- rubyzip (2.0.0)
- selenium-webdriver (3.142.6)
+ rubyzip (2.3.0)
+ selenium-webdriver (3.142.7)
childprocess (>= 0.5, < 4.0)
rubyzip (>= 1.2.2)
simplecov (0.17.1)
@@ -177,15 +177,15 @@ GEM
sprockets (>= 3.0.0)
thor (1.0.1)
thread_safe (0.3.6)
- tzinfo (1.2.5)
+ tzinfo (1.2.7)
thread_safe (~> 0.1)
- unicode-display_width (1.6.0)
+ unicode-display_width (1.6.1)
websocket-driver (0.7.1)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)
xpath (3.2.0)
nokogiri (~> 1.8)
- yard (0.9.20)
+ yard (0.9.24)
PLATFORMS
ruby
@@ -208,7 +208,7 @@ DEPENDENCIES
pg (~> 1.1.4)
puma (~> 3.7)
rack-openid
- rails (= 5.2.4.1)
+ rails (= 5.2.4.2)
rails-dom-testing
rbpdf (~> 1.20.0)
redcarpet (~> 3.5.0)
@@ -224,5 +224,8 @@ DEPENDENCIES
tzinfo-data
yard
+RUBY VERSION
+ ruby 2.6.6p146
+
BUNDLED WITH
2.1.4
diff --git a/pkgs/applications/version-management/redmine/default.nix b/pkgs/applications/version-management/redmine/default.nix
index a133a9a6a2a9..200b594e2e3c 100644
--- a/pkgs/applications/version-management/redmine/default.nix
+++ b/pkgs/applications/version-management/redmine/default.nix
@@ -1,13 +1,13 @@
{ stdenv, fetchurl, bundlerEnv, ruby }:
let
- version = "4.1.0";
+ version = "4.1.1";
rubyEnv = bundlerEnv {
name = "redmine-env-${version}";
inherit ruby;
gemdir = ./.;
- groups = [ "ldap" "openid" ];
+ groups = [ "development" "ldap" "markdown" "minimagick" "openid" "test" ];
};
in
stdenv.mkDerivation rec {
@@ -16,7 +16,7 @@ in
src = fetchurl {
url = "https://www.redmine.org/releases/${pname}-${version}.tar.gz";
- sha256 = "1fxc0xql54cfvj4g8v31vsv19jbij326qkgdz2h5xlp09r821wli";
+ sha256 = "1nndy5hz8zvfglxf1f3bsb1pkrfwinfxzkdan1vjs3rkckkszyh5";
};
buildInputs = [ rubyEnv rubyEnv.wrappedRuby rubyEnv.bundler ];
diff --git a/pkgs/applications/version-management/redmine/gemset.nix b/pkgs/applications/version-management/redmine/gemset.nix
index e69cbb0e1c23..9a4deb7e155a 100644
--- a/pkgs/applications/version-management/redmine/gemset.nix
+++ b/pkgs/applications/version-management/redmine/gemset.nix
@@ -1,33 +1,41 @@
{
actioncable = {
dependencies = ["actionpack" "nio4r" "websocket-driver"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1yz5mcjl4is99650vq6rkv539xccq8mp5zsbvzh43wqzfga1llwm";
+ sha256 = "0q4by8d41n972j8cdcddrwsh7qphcki50xvgm1syrawyck6w1f5v";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
actionmailer = {
dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1dbw3q3yyh7m7wgc4196hc3v86v123z0xz40llmic8iwx3d9vnda";
+ sha256 = "0kg2nayy8wmxhfp52217h80yqr0mcg793xw3cjlfg9lkvdh0nb5z";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
actionpack = {
dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0f5pm62y08j679k3vhcml8436f92kripd6j3v5dyvn760kwzz72z";
+ sha256 = "1w1l9i6q9xns4yl41l582pyc5i1xi40yyyq802drm58gwylv3wax";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
actionpack-xml_parser = {
dependencies = ["actionpack" "railties"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1rnm6jrw3mzcf2g3q498igmhsn0kfkxq79w0nm532iclx4g4djs0";
@@ -37,60 +45,74 @@
};
actionview = {
dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0hnkyx268czfb6ljv6ipcnz9dbgsb1z9n1gcr6279z9wx9550zij";
+ sha256 = "0fp3my6216lb9gp800s46y0404jwfl6xb3j9rvx4zf087497q8lp";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
activejob = {
dependencies = ["activesupport" "globalid"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0k4j3fcfc8m4hxwhs8xnbxazra760j3amn5r2zm2d5r1a1nqfh91";
+ sha256 = "1qsvb89rwqrp779mvpn67qbzidg2q6d1fa8kwybvpc93nzb9zpvi";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
activemodel = {
dependencies = ["activesupport"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0sg1yyz710pxhq9z0jsbpbgn666y8iv4aj7pywglydipp4i0bpx1";
+ sha256 = "0jcfdv00kmifj86d0z347nw55q1f8vwzr1aa9jrfnwz47ndi22di";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
activerecord = {
dependencies = ["activemodel" "activesupport" "arel"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1p35d6pj1370mnlppqq9lhr7m1ck82xvv621wq6hy12v41qfdnrg";
+ sha256 = "1yaqrh23c8krrjw6rvxv7pvnkpp46nk5aq9z2daby640si4xpmp5";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
activestorage = {
dependencies = ["actionpack" "activerecord" "marcel"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0dd8k91b88b875mypwqific2jilgzj5bx1637cwmzi4c0cy1v17f";
+ sha256 = "1d51zp17c9k4brivm8y46rszcz07s5rb75gmkm0dpzg3rz3v38s9";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
activesupport = {
dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0lmlnx79sv18xv1ddm4vq7z3mwdfa4468mq5186av0k8n1k471sp";
+ sha256 = "0y1397g5xxinjyxjsdmp8c92yn0y3bd2hl4wbmmrpd08bggy6flc";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
addressable = {
dependencies = ["public_suffix"];
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
@@ -99,6 +121,8 @@
version = "2.7.0";
};
arel = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1jk7wlmkr61f6g36w9s2sn46nmdg6wn2jfssrhbhirv5x9n95nk0";
@@ -107,6 +131,8 @@
version = "9.0.0";
};
ast = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7";
@@ -115,6 +141,8 @@
version = "2.4.0";
};
builder = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
@@ -124,6 +152,8 @@
};
capybara = {
dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"];
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bq1y3gy98rqgw8z69b42isc2klb75fvlwvpi36vycf1yk0sfmmx";
@@ -132,6 +162,8 @@
version = "3.25.0";
};
childprocess = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ic028k8xgm2dds9mqnvwwx3ibaz32j8455zxr9f4bcnviyahya5";
@@ -140,23 +172,29 @@
version = "3.0.0";
};
concurrent-ruby = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1x07r23s7836cpp5z9yrlbpljcxpax14yw4fy4bnp6crhr6x24an";
+ sha256 = "094387x4yasb797mv07cs3g6f08y56virc2rjcpb1k79rzaj3nhl";
type = "gem";
};
- version = "1.1.5";
+ version = "1.1.6";
};
crass = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "030sc98kjrb36rh7g21qsbdfxrj6knsjkx0mn3b7gig8zknwhp2f";
+ sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw";
type = "gem";
};
- version = "1.0.5";
+ version = "1.0.6";
};
css_parser = {
dependencies = ["addressable"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "04c4dl8cm5rjr50k9qa6yl9r05fk9zcb1zxh0y0cdahxlsgcydfw";
@@ -165,6 +203,8 @@
version = "1.7.1";
};
csv = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00szzw96bqz59r0kaab4p75qb0wq54iahmq37wpdg96bxc8y80f5";
@@ -173,6 +213,8 @@
version = "3.1.2";
};
docile = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qrwiyagxzl8zlx3dafb0ay8l14ib7imb2rsmx70i5cp420v8gif";
@@ -181,6 +223,8 @@
version = "1.3.2";
};
erubi = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1nwzxnqhr31fn7nbqmffcysvxjdfl3bhxi0bld5qqhcnfc1xd13x";
@@ -190,6 +234,8 @@
};
globalid = {
dependencies = ["activesupport"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1zkxndvck72bfw235bd9nl2ii0lvs5z88q14706cmn702ww2mxv1";
@@ -198,6 +244,8 @@
version = "0.4.2";
};
htmlentities = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
@@ -207,6 +255,8 @@
};
i18n = {
dependencies = ["concurrent-ruby"];
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hfxnlyr618s25xpafw9mypa82qppjccbh292c4l3bj36az7f6wl";
@@ -215,6 +265,8 @@
version = "1.6.0";
};
jaro_winkler = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1y8l6k34svmdyqxya3iahpwbpvmn3fswhwsvrz0nk1wyb8yfihsh";
@@ -223,6 +275,8 @@
version = "1.5.4";
};
json = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nrmw2r4nfxlfgprfgki3hjifgrcrs3l5zvm3ca3gb4743yr25mn";
@@ -232,15 +286,19 @@
};
loofah = {
dependencies = ["crass" "nokogiri"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1g7ps9m3s14cajhxrfgbzahv9i3gy47s4hqrv3mpybpj5cyr0srn";
+ sha256 = "0jk9fgn5ayzbqvzqm11gbkqvas77zdbpkvynlylyiwynclgrn040";
type = "gem";
};
- version = "2.4.0";
+ version = "2.5.0";
};
mail = {
dependencies = ["mini_mime"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
@@ -250,6 +308,8 @@
};
marcel = {
dependencies = ["mimemagic"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1nxbjmcyg8vlw6zwagf17l9y2mwkagmmkg95xybpn4bmf3rfnksx";
@@ -258,22 +318,28 @@
version = "0.3.3";
};
method_source = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
+ sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
type = "gem";
};
- version = "0.9.2";
+ version = "1.0.0";
};
mimemagic = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "04cp5sfbh1qx82yqxn0q75c7hlcx8y1dr5g3kyzwm4mx6wi2gifw";
+ sha256 = "0frrfvz52fh4v1sb2xr9pyxhrxm5f7jppqxagpmd7c5ific66l9p";
type = "gem";
};
- version = "0.3.3";
+ version = "0.3.4";
};
mini_magick = {
+ groups = ["minimagick"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qy09qrd5bwh8mkbj514n5vcw9ni73218h9s3zmvbpmdwrnzi8j4";
@@ -282,6 +348,8 @@
version = "4.9.5";
};
mini_mime = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1axm0rxyx3ss93wbmfkm78a6x03l8y4qy60rhkkiq0aza0vwq3ha";
@@ -290,6 +358,8 @@
version = "1.0.2";
};
mini_portile2 = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
@@ -298,22 +368,36 @@
version = "2.4.0";
};
minitest = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0w16p7cvslh3hxd3cia8jg4pd85z7rz7xqb16vh42gj4rijn8rmi";
+ sha256 = "0g73x65hmjph8dg1h3rkzfg7ys3ffxm35hj35grw75fixmq53qyz";
type = "gem";
};
- version = "5.13.0";
+ version = "5.14.0";
};
mocha = {
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "06i2q5qjr9mvjgjc8w41pdf3qalw340y33wjvzc0rp4a1cbbb7pp";
+ sha256 = "0hxmkm8qxd04vwj8mqnpyrf2dwy7g1k9zipdfhl4y71cw7ijm9n4";
type = "gem";
};
- version = "1.11.1";
+ version = "1.11.2";
};
mysql2 = {
+ groups = ["default"];
+ platforms = [{
+ engine = "maglev";
+ } {
+ engine = "mingw";
+ } {
+ engine = "mingw";
+ } {
+ engine = "ruby";
+ }];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0d14pcy5m4hjig0zdxnl9in5f4izszc7v9zcczf2gyi5kiyxk8jw";
@@ -322,6 +406,8 @@
version = "0.5.3";
};
net-ldap = {
+ groups = ["ldap"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vzfhivjfr9q65hkln7xig3qcba6fw9y4kb4384fpm7d7ww0b7xg";
@@ -330,6 +416,8 @@
version = "0.16.2";
};
nio4r = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0gnmvbryr521r135yz5bv8354m7xn6miiapfgpg1bnwsvxz8xj6c";
@@ -339,14 +427,18 @@
};
nokogiri = {
dependencies = ["mini_portile2"];
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0r0qpgf80h764k176yr63gqbs2z0xbsp8vlvs2a79d5r9vs83kln";
+ sha256 = "12j76d0bp608932xkzmfi638c7aqah57l437q8494znzbj610qnm";
type = "gem";
};
- version = "1.10.7";
+ version = "1.10.9";
};
parallel = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "12jijkap4akzdv11lm08dglsc8jmc87xcgq6947i1s3qb69f4zn2";
@@ -356,14 +448,26 @@
};
parser = {
dependencies = ["ast"];
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "09davv4ld6caqlczw64vhwf8hr41apys3cj8v2h96yxs4qg1m2iw";
+ sha256 = "07awrcwm2xibglrh7qwpj24vwzn9p64m7bmfr9xbrlffaznr0ii7";
type = "gem";
};
- version = "2.6.5.0";
+ version = "2.7.1.0";
};
pg = {
+ groups = ["default"];
+ platforms = [{
+ engine = "maglev";
+ } {
+ engine = "mingw";
+ } {
+ engine = "mingw";
+ } {
+ engine = "ruby";
+ }];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0fmnyxcyrvgdbgq7m09whgn9i8rwfybk0w8aii1nc4g5kqw0k2jy";
@@ -372,31 +476,39 @@
version = "1.1.4";
};
public_suffix = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0xnfv2j2bqgdpg2yq9i2rxby0w2sc9h5iyjkpaas2xknwrgmhdb0";
+ sha256 = "1l1kqw75asziwmzrig8rywxswxz8l91sc3pvns02ffsqac1a3wiz";
type = "gem";
};
- version = "4.0.1";
+ version = "4.0.4";
};
puma = {
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "07sb9xqc9bn5lvl9ia25w8x1fwzk52p5vgysnvjlc3hvn0r00ysj";
+ sha256 = "0mg8yh478mh55pg7pv8z7xyvk35ra98hy61z9lwkfr8fzyyz57zs";
type = "gem";
};
- version = "3.12.2";
+ version = "3.12.4";
};
rack = {
+ groups = ["default" "openid" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1id0jsslx1ipv0pbqjfn7mjbb2vx2xybk7qypq59a17163xp30gr";
+ sha256 = "10mp9s48ssnw004aksq90gvhdvwczh8j6q82q2kqiqq92jd1zxbp";
type = "gem";
};
- version = "2.0.8";
+ version = "2.2.2";
};
rack-openid = {
dependencies = ["rack" "ruby-openid"];
+ groups = ["openid"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0sg85yn981j3a0iri3ch4znzdwscvz29l7vrk3dafqw4fdg31llc";
@@ -406,6 +518,8 @@
};
rack-test = {
dependencies = ["rack"];
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
@@ -415,15 +529,19 @@
};
rails = {
dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties" "sprockets-rails"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1198azwbhlhq2n9xmpb19709d6smkanimip9cagvnlihagw80b20";
+ sha256 = "1x8k6n4yziwf386prhvr9d9plc9fwv0j8spw2bnmkwhf54v2ias4";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
rails-dom-testing = {
dependencies = ["activesupport" "nokogiri"];
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i";
@@ -433,6 +551,8 @@
};
rails-html-sanitizer = {
dependencies = ["loofah"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1icpqmxbppl4ynzmn6dx7wdil5hhq6fz707m9ya6d86c7ys8sd4f";
@@ -442,14 +562,18 @@
};
railties = {
dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1iqsqyyjscwnj2d3i0zl2k9apgsm7bb92l5h4wv1zbpdbb30wsqb";
+ sha256 = "1p2rnd1xdqlk19k3m5gd058yzvwjj25k5hwn4km683b5dhylpd16";
type = "gem";
};
- version = "5.2.4.1";
+ version = "5.2.4.2";
};
rainbow = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk";
@@ -458,6 +582,8 @@
version = "3.0.0";
};
rake = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9";
@@ -467,6 +593,8 @@
};
rbpdf = {
dependencies = ["htmlentities" "rbpdf-font"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0sdj8frakpdms820rwlil38h9bh3p24xmwnjrxsjc1p9irc3za71";
@@ -475,6 +603,8 @@
version = "1.20.1";
};
rbpdf-font = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0pxlr0l4vf785qpy55m439dyii63a26l0sd0yyhbwwcy9zm9hd1v";
@@ -483,6 +613,8 @@
version = "1.19.1";
};
redcarpet = {
+ groups = ["markdown"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0skcyx1h8b5ms0rp2zm3ql6g322b8c1adnkwkqyv7z3kypb4bm7k";
@@ -491,15 +623,19 @@
version = "3.5.0";
};
regexp_parser = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1l44ml30jvqpdi3707x1n1dinq7fx9887pv3q2ywyfmi4kja7yf2";
+ sha256 = "0l2vcj9qffj5b3v9jsyi4k994bdj3rjz7l9ql8x04lndqxfrrrv2";
type = "gem";
};
- version = "1.6.0";
+ version = "1.7.0";
};
request_store = {
dependencies = ["rack"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d";
@@ -509,23 +645,29 @@
};
roadie = {
dependencies = ["css_parser" "nokogiri"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1zihd316bkbnrinz5s1s7pg7s0cadhhj6qs7wmc713j0g6ai1k9r";
+ sha256 = "01kld3drqfiih5x8c13cvr6dpvdl7jml0v9bcw4fsy322lax3kn0";
type = "gem";
};
- version = "3.5.1";
+ version = "4.0.0";
};
roadie-rails = {
dependencies = ["railties" "roadie"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0hdkmnxrmw31dn9jq43xiypz2v6rbvg4x2yd2hgl2xbl3lm1ln7i";
+ sha256 = "1fmn7kkbpgipjsx65rw7hqa3bwinlqykx5qf1x28ya9ag8v2q0ph";
type = "gem";
};
- version = "2.1.0";
+ version = "2.1.1";
};
rouge = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "08fpnxbhqv5sqpnfjasl1ysxafssyq4q1yhcqamqqzmb9czj1czw";
@@ -535,6 +677,8 @@
};
rubocop = {
dependencies = ["jaro_winkler" "parallel" "parser" "rainbow" "ruby-progressbar" "unicode-display_width"];
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "07x51ixlx76y194xsszh5lbkaqakz44ykbrjxg3qaggbs18790q0";
@@ -544,15 +688,19 @@
};
rubocop-performance = {
dependencies = ["rubocop"];
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1kn6rb0ma32gjp5qdvrbbb9ckh66rm6xpfrw8h3kr7svirsww2h8";
+ sha256 = "1fk9nd3b24avgsqp726hy2pl1iyfjrh6jni97wkky6kqy0lq6zq2";
type = "gem";
};
- version = "1.5.1";
+ version = "1.5.2";
};
rubocop-rails = {
dependencies = ["rack" "rubocop"];
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1q7ffsq1cjm4m949nh935kjzv4zf1pacnrl00siwh8flhcn3mmjf";
@@ -561,6 +709,8 @@
version = "2.3.2";
};
ruby-openid = {
+ groups = ["openid"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "190p1m0bxd9xkfk1j6cpcv3x5c367g36nsglg4m1fcwqdd13k3kz";
@@ -569,6 +719,8 @@
version = "2.9.2";
};
ruby-progressbar = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1k77i0d4wsn23ggdd2msrcwfy0i376cglfqypkk2q77r2l3408zf";
@@ -577,24 +729,30 @@
version = "1.10.1";
};
rubyzip = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1gz0ri0pa2xr7b6bf66yjc2wfvk51f4gi6yk7bklwl1nr65zc4gz";
+ sha256 = "0590m2pr9i209pp5z4mx0nb1961ishdiqb28995hw1nln1d1b5ji";
type = "gem";
};
- version = "2.0.0";
+ version = "2.3.0";
};
selenium-webdriver = {
dependencies = ["childprocess" "rubyzip"];
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "11abil34dr8p1kw7hlaqd6kr430v4srmhzf72zzqvhcimlfvm4yb";
+ sha256 = "0adcvp86dinaqq3nhf8p3m0rl2g6q0a4h52k0i7kdnsg1qz9k86y";
type = "gem";
};
- version = "3.142.6";
+ version = "3.142.7";
};
simplecov = {
dependencies = ["docile" "json" "simplecov-html"];
+ groups = ["test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1135k46nik05sdab30yxb8264lqiz01c8v000g16cl9pjc4mxrdw";
@@ -603,6 +761,8 @@
version = "0.17.1";
};
simplecov-html = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn";
@@ -612,6 +772,8 @@
};
sprockets = {
dependencies = ["concurrent-ruby" "rack"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0jm37zpvvm1arxjwrd6am0wrdbfhrhc5y0l4p2i3p11z04bsvgap";
@@ -621,6 +783,8 @@
};
sprockets-rails = {
dependencies = ["actionpack" "activesupport" "sprockets"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1";
@@ -629,6 +793,8 @@
version = "3.2.1";
};
thor = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1xbhkmyhlxwzshaqa7swy2bx6vd64mm0wrr8g3jywvxy7hg0cwkm";
@@ -637,6 +803,8 @@
version = "1.0.1";
};
thread_safe = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
@@ -646,23 +814,29 @@
};
tzinfo = {
dependencies = ["thread_safe"];
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+ sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
type = "gem";
};
- version = "1.2.5";
+ version = "1.2.7";
};
unicode-display_width = {
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "08kfiniak1pvg3gn5k6snpigzvhvhyg7slmm0s2qx5zkj62c1z2w";
+ sha256 = "1pppclzq4qb26g321553nm9xqca3zgllvpwb2kqxsdadwj51s09x";
type = "gem";
};
- version = "1.6.0";
+ version = "1.6.1";
};
websocket-driver = {
dependencies = ["websocket-extensions"];
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bxamwqldmy98hxs5pqby3andws14hl36ch78g0s81gaz9b91nj2";
@@ -671,6 +845,8 @@
version = "0.7.1";
};
websocket-extensions = {
+ groups = ["default"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00i624ng1nvkz1yckj3f8yxxp6hi7xaqf40qh9q3hj2n1l9i8g6m";
@@ -680,6 +856,8 @@
};
xpath = {
dependencies = ["nokogiri"];
+ groups = ["default" "test"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd";
@@ -688,11 +866,13 @@
version = "3.2.0";
};
yard = {
+ groups = ["development"];
+ platforms = [];
source = {
remotes = ["https://rubygems.org"];
- sha256 = "0rxqwry3h2hjz069f0kfr140wgx1khgljnqf112dk5x9rm4l0xny";
+ sha256 = "1g0bw2qcl48fxawrdf68l229508z53mrqisavji2lkxzv4w4j2pp";
type = "gem";
};
- version = "0.9.20";
+ version = "0.9.24";
};
}
\ No newline at end of file
diff --git a/pkgs/applications/video/bomi/default.nix b/pkgs/applications/video/bomi/default.nix
index a9d98a9a2a44..18597c53fb48 100644
--- a/pkgs/applications/video/bomi/default.nix
+++ b/pkgs/applications/video/bomi/default.nix
@@ -1,7 +1,7 @@
-{ config, stdenv, fetchFromGitHub
+{ mkDerivation, config, stdenv, fetchFromGitHub
, fetchpatch, pkgconfig, perl, python, which
, libX11, libxcb, libGLU, libGL
-, qtbase, qtdeclarative, qtquickcontrols, qttools, qtx11extras, qmake, makeWrapper
+, qtbase, qtdeclarative, qtquickcontrols, qttools, qtx11extras, qmake
, libchardet
, ffmpeg
@@ -29,7 +29,7 @@ assert pulseSupport -> libpulseaudio != null;
assert cddaSupport -> libcdda != null;
assert youtubeSupport -> youtube-dl != null;
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "bomi";
version = "0.9.11";
@@ -90,8 +90,9 @@ stdenv.mkDerivation rec {
patchShebangs build-mpv
'';
+ dontWrapQtApps = true;
postInstall = ''
- wrapProgram $out/bin/bomi \
+ wrapQtApp $out/bin/bomi \
${optionalString youtubeSupport "--prefix PATH ':' '${youtube-dl}/bin'"}
'';
@@ -105,7 +106,7 @@ stdenv.mkDerivation rec {
++ optional cddaSupport "--enable-cdda"
;
- nativeBuildInputs = [ makeWrapper pkgconfig perl python which qttools qmake ];
+ nativeBuildInputs = [ pkgconfig perl python which qttools qmake ];
meta = with stdenv.lib; {
description = "Powerful and easy-to-use multimedia player";
diff --git a/pkgs/applications/video/qmediathekview/default.nix b/pkgs/applications/video/qmediathekview/default.nix
index 160066688462..7556727a80d3 100644
--- a/pkgs/applications/video/qmediathekview/default.nix
+++ b/pkgs/applications/video/qmediathekview/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, qtbase, qttools, xz, boost, qmake, pkgconfig }:
+{ mkDerivation, stdenv, fetchFromGitHub, qtbase, qttools, xz, boost, qmake, pkgconfig }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "QMediathekView";
version = "2019-01-06";
diff --git a/pkgs/applications/video/qstopmotion/default.nix b/pkgs/applications/video/qstopmotion/default.nix
index 327a2034265e..c8ce22b5461c 100644
--- a/pkgs/applications/video/qstopmotion/default.nix
+++ b/pkgs/applications/video/qstopmotion/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, qt5, ffmpeg, guvcview, cmake, ninja, libxml2
+{ mkDerivation, stdenv, fetchurl, qt5, ffmpeg, guvcview, cmake, ninja, libxml2
, gettext, pkgconfig, libgphoto2, gphoto2, v4l-utils, libv4l, pcre
, qwt, extra-cmake-modules }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "qstopmotion";
version = "2.4.1";
diff --git a/pkgs/applications/virtualization/aqemu/default.nix b/pkgs/applications/virtualization/aqemu/default.nix
index 02fb256b38ce..9f94a31d6982 100644
--- a/pkgs/applications/virtualization/aqemu/default.nix
+++ b/pkgs/applications/virtualization/aqemu/default.nix
@@ -1,7 +1,7 @@
-{ cmake, fetchFromGitHub, libvncserver, qemu, qtbase, stdenv
+{ mkDerivation, cmake, fetchFromGitHub, libvncserver, qemu, qtbase, stdenv
}:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "aqemu";
version = "0.9.2";
diff --git a/pkgs/applications/virtualization/virtualbox/default.nix b/pkgs/applications/virtualization/virtualbox/default.nix
index 5d3044bdbc71..6120ae27e4d5 100644
--- a/pkgs/applications/virtualization/virtualbox/default.nix
+++ b/pkgs/applications/virtualization/virtualbox/default.nix
@@ -19,10 +19,9 @@ with stdenv.lib;
let
python = python3;
buildType = "release";
- # Remember to change the extpackRev and version in extpack.nix and
- # guest-additions/default.nix as well.
- main = "59f8f5774473f593e3eb5940e2a337e0674bcd9854164b2578fd43f896260c99";
- version = "6.1.4";
+ # Use maintainers/scripts/update.nix to update the version and all related hashes or
+ # change the hashes in extpack.nix and guest-additions/default.nix as well manually.
+ version = "6.1.6";
iasl' = iasl.overrideAttrs (old: rec {
inherit (old) pname;
@@ -39,7 +38,7 @@ in stdenv.mkDerivation {
src = fetchurl {
url = "https://download.virtualbox.org/virtualbox/${version}/VirtualBox-${version}.tar.bz2";
- sha256 = main;
+ sha256 = "b031c30d770f28c5f884071ad933e8c1f83e65b93aaba03a4012077c1d90a54f";
};
outputs = [ "out" "modsrc" ];
@@ -108,6 +107,10 @@ in stdenv.mkDerivation {
postPatch = ''
sed -i -e 's|/sbin/ifconfig|${nettools}/bin/ifconfig|' \
src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp
+ '' + optionalString headless ''
+ # Fix compile error in version 6.1.6
+ substituteInPlace src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11-stubs.cpp \
+ --replace PSHCLFORMATDATA PSHCLFORMATS
'';
# first line: ugly hack, and it isn't yet clear why it's a problem
@@ -216,6 +219,7 @@ in stdenv.mkDerivation {
passthru = {
inherit version; # for guest additions
inherit extensionPack; # for inclusion in profile to prevent gc
+ updateScript = ./update.sh;
};
meta = {
diff --git a/pkgs/applications/virtualization/virtualbox/extpack.nix b/pkgs/applications/virtualization/virtualbox/extpack.nix
index ba8407e4a736..6fb942c4cf64 100644
--- a/pkgs/applications/virtualization/virtualbox/extpack.nix
+++ b/pkgs/applications/virtualization/virtualbox/extpack.nix
@@ -12,7 +12,7 @@ fetchurl rec {
# Manually sha256sum the extensionPack file, must be hex!
# Thus do not use `nix-prefetch-url` but instead plain old `sha256sum`.
# Checksums can also be found at https://www.virtualbox.org/download/hashes/${version}/SHA256SUMS
- let value = "3b73798d776ff223ea8025b1a45001762f8d4e5bcd1ea61449773c1249935800";
+ let value = "80b96b4b51a502141f6a8981f1493ade08a00762622c39e48319e5b122119bf3";
in assert (builtins.stringLength value) == 64; value;
meta = {
diff --git a/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix b/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
index fdb393a94ebe..4275bc0542e8 100644
--- a/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
+++ b/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
@@ -26,7 +26,7 @@ in stdenv.mkDerivation rec {
src = fetchurl {
url = "http://download.virtualbox.org/virtualbox/${version}/VBoxGuestAdditions_${version}.iso";
- sha256 = "e2846a7576cce1b92a7c0744f41eaac750248d6e31dfca5c45d5766648b394c7";
+ sha256 = "bcde4691dea7de93b65a10a43dda2b8f52e570f820992ad281c9bb5c8dede181";
};
KERN_DIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
diff --git a/pkgs/applications/virtualization/virtualbox/update.py b/pkgs/applications/virtualization/virtualbox/update.py
deleted file mode 100755
index 6e8bfd5c8250..000000000000
--- a/pkgs/applications/virtualization/virtualbox/update.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env nix-shell
-#!nix-shell -i python3 -p python3
-
-import os
-import re
-import json
-import urllib.request
-
-from distutils.version import LooseVersion
-
-UPSTREAM_INFO_FILE = os.path.join(
- os.path.dirname(os.path.abspath(__file__)),
- "upstream-info.json"
-)
-
-
-def fetch_latest_version():
- url = "http://download.virtualbox.org/virtualbox/LATEST.TXT"
- return urllib.request.urlopen(url).read().strip().decode()
-
-
-def load_upstream_info():
- try:
- with open(UPSTREAM_INFO_FILE, 'r') as fp:
- return json.load(fp)
- except FileNotFoundError:
- return {'version': "0"}
-
-
-def save_upstream_info(contents):
- remark = "Generated using update.py from the same directory."
- contents['__NOTE'] = remark
- data = json.dumps(contents, indent=2, sort_keys=True)
- with open(UPSTREAM_INFO_FILE, 'w') as fp:
- fp.write(data + "\n")
-
-
-def fetch_file_table(version):
- url = "http://download.virtualbox.org/virtualbox/{}/SHA256SUMS"
- url = url.format(version)
- result = {}
- for line in urllib.request.urlopen(url):
- sha, name = line.rstrip().split()
- result[name.lstrip(b'*').decode()] = sha.decode()
- return result
-
-
-def update_to_version(version):
- extpack_start = 'Oracle_VM_VirtualBox_Extension_Pack-'
- version_re = version.replace('.', '\\.')
- attribute_map = {
- 'extpack': r'^' + extpack_start + r'[^-]+-[^.]+.vbox-extpack$',
- 'extpackRev': r'^' + extpack_start + r'[^-]+-([^.]+).vbox-extpack$',
- 'main': r'^VirtualBox-' + version_re + r'.tar.bz2$',
- 'guest': r'^VBoxGuestAdditions_' + version_re + r'.iso$',
- }
- table = fetch_file_table(version)
- new_attrs = {'version': version}
- for attr, searchexpr in attribute_map.items():
- result = [re.search(searchexpr, key) for key in table.keys()]
- filtered = filter(lambda m: m is not None, result)
- found = [m.groups()[0] if len(m.groups()) > 0 else table[m.group(0)]
- for m in filtered if m is not None]
-
- if len(found) == 0:
- msg = "No package found for attribute {}".format(attr)
- raise AssertionError(msg)
- elif len(found) != 1:
- msg = "More than one package found for attribute {}: ".format(attr)
- msg += ', '.join(found)
- raise AssertionError(msg)
- else:
- new_attrs[attr] = found[0]
- return new_attrs
-
-
-info = load_upstream_info()
-latest = fetch_latest_version()
-if LooseVersion(info['version']) < LooseVersion(latest):
- print("Updating to version {}...".format(latest), end="", flush=True)
- new_attrs = update_to_version(latest)
- save_upstream_info(new_attrs)
- print(" done.")
-else:
- print("Version {} is already the latest one.".format(info['version']))
diff --git a/pkgs/applications/virtualization/virtualbox/update.sh b/pkgs/applications/virtualization/virtualbox/update.sh
new file mode 100755
index 000000000000..fcd02ae8a27b
--- /dev/null
+++ b/pkgs/applications/virtualization/virtualbox/update.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl common-updater-scripts nix-prefetch-scripts jq
+
+set -xeuo pipefail
+
+nixpkgs="$(git rev-parse --show-toplevel)"
+
+attr=virtualbox
+oldVersion="$(nix-instantiate --eval -E "with import $nixpkgs {}; $attr.version or (builtins.parseDrvName $attr.name).version" | tr -d '"')"
+latestVersion="$(curl -sS https://download.virtualbox.org/virtualbox/LATEST.TXT)"
+
+function fileShaSum() {
+ echo "$1" | grep -w $2 | cut -f1 -d' '
+}
+function oldHash() {
+ nix-instantiate --eval --strict -A "$1.drvAttrs.outputHash" | tr -d '"'
+}
+function nixFile() {
+ nix-instantiate --eval --strict -A "${1}.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/'
+}
+
+if [ ! "$oldVersion" = "$latestVersion" ]; then
+ shaSums=$(curl -sS https://download.virtualbox.org/virtualbox/$latestVersion/SHA256SUMS)
+
+ virtualBoxShaSum=$(fileShaSum "$shaSums" "VirtualBox-$latestVersion.tar.bz2")
+ extpackShaSum=$(fileShaSum "$shaSums" "Oracle_VM_VirtualBox_Extension_Pack-$latestVersion.vbox-extpack")
+ guestAdditionsShaSum=$(fileShaSum "$shaSums" "*VBoxGuestAdditions_$latestVersion.iso")
+
+ virtualboxNixFile=$(nixFile ${attr})
+ extpackNixFile=$(nixFile ${attr}Extpack)
+ guestAdditionsNixFile=$(nixFile linuxPackages.${attr}GuestAdditions)
+
+ extpackOldShaSum=$(oldHash ${attr}Extpack)
+ guestAdditionsOldShaSum=$(oldHash linuxPackages.${attr}GuestAdditions.src)
+
+ update-source-version $attr $latestVersion $virtualBoxShaSum
+ sed -i -e 's|value = "'$extpackOldShaSum'"|value = "'$extpackShaSum'"|' $extpackNixFile
+ sed -i -e 's|sha256 = "'$guestAdditionsOldShaSum'"|sha256 = "'$guestAdditionsShaSum'"|' $guestAdditionsNixFile
+
+ git add $virtualboxNixFile $extpackNixFile $guestAdditionsNixFile
+ git commit -m "$attr: ${oldVersion} -> ${latestVersion}"
+else
+ echo "$attr is already up-to-date"
+fi
diff --git a/pkgs/desktops/gnome-3/find-latest-version.py b/pkgs/desktops/gnome-3/find-latest-version.py
index b0359f799699..ad80af24bcb8 100644
--- a/pkgs/desktops/gnome-3/find-latest-version.py
+++ b/pkgs/desktops/gnome-3/find-latest-version.py
@@ -1,10 +1,13 @@
import argparse
+import math
import json
import requests
import sys
+
def version_to_list(version):
- return list(map(int, version.split('.')))
+ return list(map(int, version.split(".")))
+
def odd_unstable(version_str, selected):
version = version_to_list(version_str)
@@ -14,47 +17,58 @@ def odd_unstable(version_str, selected):
even = version[1] % 2 == 0
prerelease = (version[1] >= 90 and version[1] < 100) or (version[1] >= 900 and version[1] < 1000)
stable = even and not prerelease
- if selected == 'stable':
+ if selected == "stable":
return stable
else:
return True
+
def no_policy(version, selected):
return True
+
version_policies = {
- 'odd-unstable': odd_unstable,
- 'none': no_policy,
+ "odd-unstable": odd_unstable,
+ "none": no_policy,
}
-def make_version_policy(version_predicate, selected):
- return lambda version: version_predicate(version, selected)
-parser = argparse.ArgumentParser(description='Find latest version for a GNOME package by crawling their release server.')
-parser.add_argument('package-name', help='Name of the directory in https://ftp.gnome.org/pub/GNOME/sources/ containing the package.')
-parser.add_argument('version-policy', help='Policy determining which versions are considered stable. For most GNOME packages, odd minor versions are unstable but there are exceptions.', choices=version_policies.keys(), nargs='?', default='odd-unstable')
-parser.add_argument('requested-release', help='Most of the time, we will want to update to stable version but sometimes it is useful to test.', choices=['stable', 'unstable'], nargs='?', default='stable')
+def make_version_policy(version_predicate, selected, upper_bound):
+ if not upper_bound:
+ upper_bound = [math.inf, math.inf]
+ else:
+ upper_bound = version_to_list(upper_bound)
+
+ return lambda version: version_predicate(version, selected) and version_to_list(version) < upper_bound
-if __name__ == '__main__':
+parser = argparse.ArgumentParser(description="Find latest version for a GNOME package by crawling their release server.")
+parser.add_argument("package-name", help="Name of the directory in https://ftp.gnome.org/pub/GNOME/sources/ containing the package.")
+parser.add_argument("version-policy", help="Policy determining which versions are considered stable. For most GNOME packages, odd minor versions are unstable but there are exceptions.", choices=version_policies.keys(), nargs="?", default="odd-unstable")
+parser.add_argument("requested-release", help="Most of the time, we will want to update to stable version but sometimes it is useful to test.", choices=["stable", "unstable"], nargs="?", default="stable")
+parser.add_argument("--upper-bound", dest="upper-bound", help="Only look for versions older than this one (useful for pinning dependencies).")
+
+
+if __name__ == "__main__":
args = parser.parse_args()
- package_name = getattr(args, 'package-name')
- requested_release = getattr(args, 'requested-release')
- version_predicate = version_policies[getattr(args, 'version-policy')]
- version_policy = make_version_policy(version_predicate, requested_release)
+ package_name = getattr(args, "package-name")
+ requested_release = getattr(args, "requested-release")
+ upper_bound = getattr(args, "upper-bound")
+ version_predicate = version_policies[getattr(args, "version-policy")]
+ version_policy = make_version_policy(version_predicate, requested_release, upper_bound)
# The structure of cache.json: https://gitlab.gnome.org/Infrastructure/sysadmin-bin/blob/master/ftpadmin#L762
- cache = json.loads(requests.get('https://ftp.gnome.org/pub/GNOME/sources/{}/cache.json'.format(package_name)).text)
+ cache = json.loads(requests.get(f"https://ftp.gnome.org/pub/GNOME/sources/{package_name}/cache.json").text)
if type(cache) != list or cache[0] != 4:
- print('Unknown format of cache.json file.', file=sys.stderr)
+ print("Unknown format of cache.json file.", file=sys.stderr)
sys.exit(1)
versions = cache[2][package_name]
versions = sorted(filter(version_policy, versions), key=version_to_list)
if len(versions) == 0:
- print('No versions matched.', file=sys.stderr)
+ print("No versions matched.", file=sys.stderr)
sys.exit(1)
print(versions[-1])
diff --git a/pkgs/desktops/gnome-3/update.nix b/pkgs/desktops/gnome-3/update.nix
index f42b67239505..a7763febc443 100644
--- a/pkgs/desktops/gnome-3/update.nix
+++ b/pkgs/desktops/gnome-3/update.nix
@@ -1,8 +1,18 @@
-{ stdenv, lib, writeScript, python3, common-updater-scripts }:
-{ packageName, attrPath ? packageName, versionPolicy ? "odd-unstable" }:
+{ stdenv, pkgs, lib, writeScript, python3, common-updater-scripts }:
+{ packageName, attrPath ? packageName, versionPolicy ? "odd-unstable", freeze ? true }:
let
python = python3.withPackages (p: [ p.requests ]);
+ upperBoundFlag =
+ let
+ package = lib.getAttrFromPath (lib.splitString "." attrPath) pkgs;
+ packageVersion = lib.getVersion package;
+ versionComponents = lib.versions.splitVersion packageVersion;
+ minorVersion = lib.versions.minor packageVersion;
+ minorAvailable = builtins.length versionComponents > 1 && builtins.match "[0-9]+" minorVersion != null;
+ nextMinor = builtins.fromJSON minorVersion + 1;
+ upperBound = "${lib.versions.major packageVersion}.${builtins.toString nextMinor}";
+ in lib.optionalString (minorAvailable && freeze) ''--upper-bound="${upperBound}"'';
updateScript = writeScript "gnome-update-script" ''
#!${stdenv.shell}
set -o errexit
@@ -10,7 +20,7 @@ let
attr_path="$2"
version_policy="$3"
PATH=${lib.makeBinPath [ common-updater-scripts python ]}
- latest_tag=$(python "${./find-latest-version.py}" "$package_name" "$version_policy" "stable")
+ latest_tag=$(python "${./find-latest-version.py}" "$package_name" "$version_policy" "stable" ${upperBoundFlag})
update-source-version "$attr_path" "$latest_tag"
'';
in [ updateScript packageName attrPath versionPolicy ]
diff --git a/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix b/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix
index 1a268c35fa2e..407e9e354066 100644
--- a/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix
+++ b/pkgs/desktops/pantheon/desktop/elementary-greeter/default.nix
@@ -103,6 +103,9 @@ stdenv.mkDerivation rec {
# for the compositor
--prefix PATH : "$out/bin"
+
+ # the theme is hardcoded
+ --prefix XDG_DATA_DIRS : "${elementary-gtk-theme}/share"
)
'';
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/207.patch b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/207.patch
new file mode 100644
index 000000000000..c4d6d8574a53
--- /dev/null
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/207.patch
@@ -0,0 +1,4726 @@
+From 20228e34bf97f67b1dd542a22e92cd90f0db5c72 Mon Sep 17 00:00:00 2001
+From: Dirli
+Date: Thu, 9 Apr 2020 16:30:16 +0300
+Subject: [PATCH 1/8] added a single namespace
+
+---
+ meson.build | 14 +-
+ src/DateIterator.vala | 82 -----
+ src/DateRange.vala | 66 ----
+ src/Indicator.vala | 341 +++++++++---------
+ .../calendar => Models}/CalendarModel.vala | 4 +-
+ src/Services/TimeManager.vala | 230 ++++++------
+ src/Util/DateIterator.vala | 84 +++++
+ src/Util/DateRange.vala | 68 ++++
+ src/{Widgets/calendar => Util}/Util.vala | 8 +-
+ src/Widgets/CalendarView.vala | 185 ++++++++++
+ src/Widgets/EventRow.vala | 184 +++++-----
+ src/Widgets/{calendar => }/Grid.vala | 12 +-
+ src/Widgets/GridDay.vala | 180 +++++++++
+ src/Widgets/PanelLabel.vala | 80 ++--
+ src/Widgets/calendar/CalendarView.vala | 183 ----------
+ src/Widgets/calendar/GridDay.vala | 178 ---------
+ 16 files changed, 957 insertions(+), 942 deletions(-)
+ delete mode 100644 src/DateIterator.vala
+ delete mode 100644 src/DateRange.vala
+ rename src/{Widgets/calendar => Models}/CalendarModel.vala (99%)
+ create mode 100644 src/Util/DateIterator.vala
+ create mode 100644 src/Util/DateRange.vala
+ rename src/{Widgets/calendar => Util}/Util.vala (96%)
+ create mode 100644 src/Widgets/CalendarView.vala
+ rename src/Widgets/{calendar => }/Grid.vala (95%)
+ create mode 100644 src/Widgets/GridDay.vala
+ delete mode 100644 src/Widgets/calendar/CalendarView.vala
+ delete mode 100644 src/Widgets/calendar/GridDay.vala
+
+diff --git a/meson.build b/meson.build
+index 2555723..b44c5bd 100644
+--- a/meson.build
++++ b/meson.build
+@@ -39,16 +39,16 @@ endif
+ shared_module(
+ meson.project_name(),
+ gresource,
+- 'src/DateIterator.vala',
+- 'src/DateRange.vala',
+ 'src/Indicator.vala',
++ 'src/Util/DateIterator.vala',
++ 'src/Util/DateRange.vala',
++ 'src/Util/Util.vala',
++ 'src/Models/CalendarModel.vala',
++ 'src/Widgets/CalendarView.vala',
+ 'src/Widgets/EventRow.vala',
++ 'src/Widgets/Grid.vala',
++ 'src/Widgets/GridDay.vala',
+ 'src/Widgets/PanelLabel.vala',
+- 'src/Widgets/calendar/CalendarModel.vala',
+- 'src/Widgets/calendar/CalendarView.vala',
+- 'src/Widgets/calendar/Grid.vala',
+- 'src/Widgets/calendar/GridDay.vala',
+- 'src/Widgets/calendar/Util.vala',
+ 'src/Services/TimeManager.vala',
+ dependencies: [
+ dependency('glib-2.0'),
+diff --git a/src/DateIterator.vala b/src/DateIterator.vala
+deleted file mode 100644
+index 961895b..0000000
+--- a/src/DateIterator.vala
++++ /dev/null
+@@ -1,82 +0,0 @@
+-/*
+- * Copyright 2011-2018 elementary, Inc. (https://elementary.io)
+- *
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public
+- * License along with this program; if not, write to the
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301 USA.
+- *
+- * Authored by: Corentin Noël
+- */
+-
+-public class Util.DateIterator : Object, Gee.Traversable, Gee.Iterator {
+- public GLib.DateTime current { get; construct set; }
+- public Util.DateRange range { get; construct; }
+-
+- // Required by Gee.Iterator
+- public bool valid {
+- get {
+- return true;
+- }
+- }
+-
+- // Required by Gee.Iterator
+- public bool read_only {
+- get {
+- return false;
+- }
+- }
+-
+- public DateIterator (Util.DateRange range) {
+- Object (
+- range: range,
+- current: range.first_dt.add_days (-1)
+- );
+- }
+-
+- public bool @foreach (Gee.ForallFunc f) {
+- var element = range.first_dt;
+-
+- while (element.compare (range.last_dt) < 0) {
+- if (f (element) == false) {
+- return false;
+- }
+-
+- element = element.add_days (1);
+- }
+-
+- return true;
+- }
+-
+- public bool next () {
+- if (!has_next ()) {
+- return false;
+- }
+-
+- current = this.current.add_days (1);
+-
+- return true;
+- }
+-
+- public bool has_next () {
+- return current.compare (range.last_dt) < 0;
+- }
+-
+- public new GLib.DateTime get () {
+- return current;
+- }
+-
+- public void remove () {
+- assert_not_reached ();
+- }
+-}
+diff --git a/src/DateRange.vala b/src/DateRange.vala
+deleted file mode 100644
+index 08e4c00..0000000
+--- a/src/DateRange.vala
++++ /dev/null
+@@ -1,66 +0,0 @@
+-/*
+- * Copyright 2011-2019 elementary, Inc. (https://elementary.io)
+- *
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public
+- * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public
+- * License along with this program; if not, write to the
+- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301 USA.
+- *
+- * Authored by: Corentin Noël
+- */
+-
+-/* Represents date range from 'first' to 'last' inclusive */
+-public class Util.DateRange : Object, Gee.Traversable, Gee.Iterable {
+- public GLib.DateTime first_dt { get; construct; }
+- public GLib.DateTime last_dt { get; construct; }
+-
+- public bool @foreach (Gee.ForallFunc f) {
+- foreach (var date in this) {
+- if (f (date) == false) {
+- return false;
+- }
+- }
+-
+- return true;
+- }
+-
+- public DateRange (GLib.DateTime first, GLib.DateTime last) {
+- Object (
+- first_dt: first,
+- last_dt: last
+- );
+- }
+-
+- public bool equals (DateRange other) {
+- return (first_dt == other.first_dt && last_dt == other.last_dt);
+- }
+-
+- public Gee.Iterator iterator () {
+- return new DateIterator (this);
+- }
+-
+- public Gee.List to_list () {
+- var list = new Gee.ArrayList ((Gee.EqualDataFunc? )datetime_equal_func);
+-
+- foreach (var date in this) {
+- list.add (date);
+- }
+-
+- return list;
+- }
+-
+- /* Returns true if 'a' and 'b' are the same GLib.DateTime */
+- private bool datetime_equal_func (GLib.DateTime a, GLib.DateTime b) {
+- return a.equal (b);
+- }
+-}
+diff --git a/src/Indicator.vala b/src/Indicator.vala
+index 77aa35c..b712c12 100644
+--- a/src/Indicator.vala
++++ b/src/Indicator.vala
+@@ -17,218 +17,219 @@
+ * Boston, MA 02110-1301 USA.
+ */
+
+-public class DateTime.Indicator : Wingpanel.Indicator {
+- public static GLib.Settings settings;
+-
+- private Widgets.PanelLabel panel_label;
+- private Gtk.Grid main_grid;
+- private Widgets.CalendarView calendar;
+- private Gtk.ListBox event_listbox;
+- private uint update_events_idle_source = 0;
+-
+- public Indicator () {
+- Object (
+- code_name: Wingpanel.Indicator.DATETIME,
+- display_name: _("Date & Time"),
+- description: _("The date and time indicator")
+- );
+- }
+-
+- static construct {
+- settings = new GLib.Settings ("io.elementary.desktop.wingpanel.datetime");
+- }
++namespace DateTimeIndicator {
++ public class Indicator : Wingpanel.Indicator {
++ public static GLib.Settings settings;
++
++ private Widgets.PanelLabel panel_label;
++ private Gtk.Grid main_grid;
++ private Widgets.CalendarView calendar;
++ private Gtk.ListBox event_listbox;
++ private uint update_events_idle_source = 0;
++
++ public Indicator () {
++ Object (
++ code_name: Wingpanel.Indicator.DATETIME,
++ display_name: _("Date & Time"),
++ description: _("The date and time indicator")
++ );
++ }
+
+- construct {
+- visible = true;
+- }
++ static construct {
++ settings = new GLib.Settings ("io.elementary.desktop.wingpanel.datetime");
++ }
+
+- public override Gtk.Widget get_display_widget () {
+- if (panel_label == null) {
+- panel_label = new Widgets.PanelLabel ();
++ construct {
++ visible = true;
+ }
+
+- return panel_label;
+- }
++ public override Gtk.Widget get_display_widget () {
++ if (panel_label == null) {
++ panel_label = new Widgets.PanelLabel ();
++ }
+
+- public override Gtk.Widget? get_widget () {
+- if (main_grid == null) {
+- calendar = new Widgets.CalendarView ();
+- calendar.margin_bottom = 6;
+-
+- var placeholder_label = new Gtk.Label (_("No Events on This Day"));
+- placeholder_label.wrap = true;
+- placeholder_label.wrap_mode = Pango.WrapMode.WORD;
+- placeholder_label.margin_start = 12;
+- placeholder_label.margin_end = 12;
+- placeholder_label.max_width_chars = 20;
+- placeholder_label.justify = Gtk.Justification.CENTER;
+- placeholder_label.show_all ();
+-
+- var placeholder_style_context = placeholder_label.get_style_context ();
+- placeholder_style_context.add_class (Gtk.STYLE_CLASS_DIM_LABEL);
+- placeholder_style_context.add_class (Granite.STYLE_CLASS_H3_LABEL);
+-
+- event_listbox = new Gtk.ListBox ();
+- event_listbox.selection_mode = Gtk.SelectionMode.NONE;
+- event_listbox.set_header_func (header_update_func);
+- event_listbox.set_placeholder (placeholder_label);
+- event_listbox.set_sort_func (sort_function);
+-
+- var scrolled_window = new Gtk.ScrolledWindow (null, null);
+- scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER;
+- scrolled_window.add (event_listbox);
+-
+- var settings_button = new Gtk.ModelButton ();
+- settings_button.text = _("Date & Time Settings…");
+-
+- main_grid = new Gtk.Grid ();
+- main_grid.margin_top = 12;
+- main_grid.attach (calendar, 0, 0);
+- main_grid.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0);
+- main_grid.attach (scrolled_window, 2, 0);
+- main_grid.attach (new Wingpanel.Widgets.Separator (), 0, 2, 3);
+- main_grid.attach (settings_button, 0, 3, 3);
+-
+- var size_group = new Gtk.SizeGroup (Gtk.SizeGroupMode.HORIZONTAL);
+- size_group.add_widget (calendar);
+- size_group.add_widget (event_listbox);
+-
+- calendar.day_double_click.connect (() => {
+- close ();
+- });
++ return panel_label;
++ }
+
+- calendar.selection_changed.connect ((date) => {
+- idle_update_events ();
+- });
++ public override Gtk.Widget? get_widget () {
++ if (main_grid == null) {
++ calendar = new Widgets.CalendarView ();
++ calendar.margin_bottom = 6;
++
++ var placeholder_label = new Gtk.Label (_("No Events on This Day"));
++ placeholder_label.wrap = true;
++ placeholder_label.wrap_mode = Pango.WrapMode.WORD;
++ placeholder_label.margin_start = 12;
++ placeholder_label.margin_end = 12;
++ placeholder_label.max_width_chars = 20;
++ placeholder_label.justify = Gtk.Justification.CENTER;
++ placeholder_label.show_all ();
++
++ var placeholder_style_context = placeholder_label.get_style_context ();
++ placeholder_style_context.add_class (Gtk.STYLE_CLASS_DIM_LABEL);
++ placeholder_style_context.add_class (Granite.STYLE_CLASS_H3_LABEL);
++
++ event_listbox = new Gtk.ListBox ();
++ event_listbox.selection_mode = Gtk.SelectionMode.NONE;
++ event_listbox.set_header_func (header_update_func);
++ event_listbox.set_placeholder (placeholder_label);
++ event_listbox.set_sort_func (sort_function);
++
++ var scrolled_window = new Gtk.ScrolledWindow (null, null);
++ scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER;
++ scrolled_window.add (event_listbox);
++
++ var settings_button = new Gtk.ModelButton ();
++ settings_button.text = _("Date & Time Settings…");
++
++ main_grid = new Gtk.Grid ();
++ main_grid.margin_top = 12;
++ main_grid.attach (calendar, 0, 0);
++ main_grid.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0);
++ main_grid.attach (scrolled_window, 2, 0);
++ main_grid.attach (new Wingpanel.Widgets.Separator (), 0, 2, 3);
++ main_grid.attach (settings_button, 0, 3, 3);
++
++ var size_group = new Gtk.SizeGroup (Gtk.SizeGroupMode.HORIZONTAL);
++ size_group.add_widget (calendar);
++ size_group.add_widget (event_listbox);
++
++ calendar.day_double_click.connect (() => {
++ close ();
++ });
++
++ calendar.selection_changed.connect ((date) => {
++ idle_update_events ();
++ });
++
++ event_listbox.row_activated.connect ((row) => {
++ calendar.show_date_in_maya (((EventRow) row).date);
++ close ();
++ });
++
++ settings_button.clicked.connect (() => {
++ try {
++ AppInfo.launch_default_for_uri ("settings://time", null);
++ } catch (Error e) {
++ warning ("Failed to open time and date settings: %s", e.message);
++ }
++ });
++ }
+
+- event_listbox.row_activated.connect ((row) => {
+- calendar.show_date_in_maya (((DateTime.EventRow) row).date);
+- close ();
+- });
++ return main_grid;
++ }
+
+- settings_button.clicked.connect (() => {
+- try {
+- AppInfo.launch_default_for_uri ("settings://time", null);
+- } catch (Error e) {
+- warning ("Failed to open time and date settings: %s", e.message);
++ private void header_update_func (Gtk.ListBoxRow lbrow, Gtk.ListBoxRow? lbbefore) {
++ var row = (EventRow) lbrow;
++ if (lbbefore != null) {
++ var before = (EventRow) lbbefore;
++ if (row.is_allday == before.is_allday) {
++ row.set_header (null);
++ return;
+ }
+- });
+- }
+
+- return main_grid;
+- }
++ if (row.is_allday != before.is_allday) {
++ var header_label = new Granite.HeaderLabel (_("During the Day"));
++ header_label.margin_start = header_label.margin_end = 6;
+
+- private void header_update_func (Gtk.ListBoxRow lbrow, Gtk.ListBoxRow? lbbefore) {
+- var row = (DateTime.EventRow) lbrow;
+- if (lbbefore != null) {
+- var before = (DateTime.EventRow) lbbefore;
+- if (row.is_allday == before.is_allday) {
+- row.set_header (null);
++ row.set_header (header_label);
++ return;
++ }
++ } else {
++ if (row.is_allday) {
++ var allday_header = new Granite.HeaderLabel (_("All Day"));
++ allday_header.margin_start = allday_header.margin_end = 6;
++
++ row.set_header (allday_header);
++ }
+ return;
+ }
++ }
+
+- if (row.is_allday != before.is_allday) {
+- var header_label = new Granite.HeaderLabel (_("During the Day"));
+- header_label.margin_start = header_label.margin_end = 6;
++ [CCode (instance_pos = -1)]
++ private int sort_function (Gtk.ListBoxRow child1, Gtk.ListBoxRow child2) {
++ var e1 = (EventRow) child1;
++ var e2 = (EventRow) child2;
+
+- row.set_header (header_label);
+- return;
++ if (e1.start_time.compare (e2.start_time) != 0) {
++ return e1.start_time.compare (e2.start_time);
+ }
+- } else {
+- if (row.is_allday) {
+- var allday_header = new Granite.HeaderLabel (_("All Day"));
+- allday_header.margin_start = allday_header.margin_end = 6;
+
+- row.set_header (allday_header);
++ // If they have the same date, sort them wholeday first
++ if (e1.is_allday) {
++ return -1;
++ } else if (e2.is_allday) {
++ return 1;
+ }
+- return;
+- }
+- }
+-
+- [CCode (instance_pos = -1)]
+- private int sort_function (Gtk.ListBoxRow child1, Gtk.ListBoxRow child2) {
+- var e1 = (EventRow) child1;
+- var e2 = (EventRow) child2;
+
+- if (e1.start_time.compare (e2.start_time) != 0) {
+- return e1.start_time.compare (e2.start_time);
++ return 0;
+ }
+
+- // If they have the same date, sort them wholeday first
+- if (e1.is_allday) {
+- return -1;
+- } else if (e2.is_allday) {
+- return 1;
++ private void update_events_model (E.Source source, Gee.Collection events) {
++ idle_update_events ();
+ }
+
+- return 0;
+- }
+-
+- private void update_events_model (E.Source source, Gee.Collection events) {
+- idle_update_events ();
+- }
++ private void idle_update_events () {
++ if (update_events_idle_source > 0) {
++ GLib.Source.remove (update_events_idle_source);
++ }
+
+- private void idle_update_events () {
+- if (update_events_idle_source > 0) {
+- GLib.Source.remove (update_events_idle_source);
++ update_events_idle_source = GLib.Idle.add (update_events);
+ }
+
+- update_events_idle_source = GLib.Idle.add (update_events);
+- }
+-
+- private bool update_events () {
+- foreach (unowned Gtk.Widget widget in event_listbox.get_children ()) {
+- widget.destroy ();
+- }
++ private bool update_events () {
++ foreach (unowned Gtk.Widget widget in event_listbox.get_children ()) {
++ widget.destroy ();
++ }
+
+- if (calendar.selected_date == null) {
+- update_events_idle_source = 0;
+- return GLib.Source.REMOVE;
+- }
++ if (calendar.selected_date == null) {
++ update_events_idle_source = 0;
++ return GLib.Source.REMOVE;
++ }
+
+- var date = calendar.selected_date;
++ var date = calendar.selected_date;
+
+- var model = Widgets.CalendarModel.get_default ();
++ var model = Models.CalendarModel.get_default ();
+
+- var events_on_day = new Gee.TreeMap ();
++ var events_on_day = new Gee.TreeMap ();
+
+- model.source_events.@foreach ((source, component_map) => {
+- foreach (var comp in component_map.get_values ()) {
+- if (Util.calcomp_is_on_day (comp, date)) {
+- unowned ICal.Component ical = comp.get_icalcomponent ();
+- var event_uid = ical.get_uid ();
+- if (!events_on_day.has_key (event_uid)) {
+- events_on_day[event_uid] = new DateTime.EventRow (date, ical, source);
++ model.source_events.@foreach ((source, component_map) => {
++ foreach (var comp in component_map.get_values ()) {
++ if (Util.calcomp_is_on_day (comp, date)) {
++ unowned ICal.Component ical = comp.get_icalcomponent ();
++ var event_uid = ical.get_uid ();
++ if (!events_on_day.has_key (event_uid)) {
++ events_on_day[event_uid] = new EventRow (date, ical, source);
+
+- event_listbox.add (events_on_day[event_uid]);
++ event_listbox.add (events_on_day[event_uid]);
++ }
+ }
+ }
+- }
+- });
++ });
+
+- event_listbox.show_all ();
+- update_events_idle_source = 0;
+- return GLib.Source.REMOVE;
+- }
++ event_listbox.show_all ();
++ update_events_idle_source = 0;
++ return GLib.Source.REMOVE;
++ }
+
+- public override void opened () {
+- calendar.show_today ();
++ public override void opened () {
++ calendar.show_today ();
+
+- Widgets.CalendarModel.get_default ().events_added.connect (update_events_model);
+- Widgets.CalendarModel.get_default ().events_updated.connect (update_events_model);
+- Widgets.CalendarModel.get_default ().events_removed.connect (update_events_model);
+- }
++ Models.CalendarModel.get_default ().events_added.connect (update_events_model);
++ Models.CalendarModel.get_default ().events_updated.connect (update_events_model);
++ Models.CalendarModel.get_default ().events_removed.connect (update_events_model);
++ }
+
+- public override void closed () {
+- Widgets.CalendarModel.get_default ().events_added.disconnect (update_events_model);
+- Widgets.CalendarModel.get_default ().events_updated.disconnect (update_events_model);
+- Widgets.CalendarModel.get_default ().events_removed.disconnect (update_events_model);
++ public override void closed () {
++ Models.CalendarModel.get_default ().events_added.disconnect (update_events_model);
++ Models.CalendarModel.get_default ().events_updated.disconnect (update_events_model);
++ Models.CalendarModel.get_default ().events_removed.disconnect (update_events_model);
++ }
+ }
+ }
+-
+ public Wingpanel.Indicator get_indicator (Module module) {
+ debug ("Activating DateTime Indicator");
+- var indicator = new DateTime.Indicator ();
++ var indicator = new DateTimeIndicator.Indicator ();
+
+ return indicator;
+ }
+diff --git a/src/Widgets/calendar/CalendarModel.vala b/src/Models/CalendarModel.vala
+similarity index 99%
+rename from src/Widgets/calendar/CalendarModel.vala
+rename to src/Models/CalendarModel.vala
+index 7602303..965b93e 100644
+--- a/src/Widgets/calendar/CalendarModel.vala
++++ b/src/Models/CalendarModel.vala
+@@ -15,8 +15,8 @@
+ * along with this program. If not, see .
+ */
+
+-namespace DateTime.Widgets {
+- public class CalendarModel : Object {
++namespace DateTimeIndicator {
++ public class Models.CalendarModel : Object {
+ /* The data_range is the range of dates for which this model is storing
+ * data.
+ *
+diff --git a/src/Services/TimeManager.vala b/src/Services/TimeManager.vala
+index b68f158..5baa136 100644
+--- a/src/Services/TimeManager.vala
++++ b/src/Services/TimeManager.vala
+@@ -32,153 +32,155 @@ interface FDO.Accounts : Object {
+ public abstract string find_user_by_name (string username) throws GLib.Error;
+ }
+
+-public class DateTime.Services.TimeManager : Gtk.Calendar {
+- private static TimeManager? instance = null;
++namespace DateTimeIndicator {
++ public class Services.TimeManager : Gtk.Calendar {
++ private static TimeManager? instance = null;
+
+- public signal void minute_changed ();
++ public signal void minute_changed ();
+
+- private GLib.DateTime? current_time = null;
+- private uint timeout_id = 0;
+- private Manager? manager = null;
++ private GLib.DateTime? current_time = null;
++ private uint timeout_id = 0;
++ private Manager? manager = null;
+
+- public bool clock_show_seconds { get; set; }
+- public bool is_12h { get; set; }
++ public bool clock_show_seconds { get; set; }
++ public bool is_12h { get; set; }
+
+- public TimeManager () {
+- update_current_time ();
+-
+- if (current_time == null) {
+- return;
+- }
++ public TimeManager () {
++ update_current_time ();
+
+- add_timeout ();
+- try {
+- var clock_settings = new GLib.Settings ("io.elementary.desktop.wingpanel.datetime");
+- clock_settings.bind ("clock-show-seconds", this, "clock-show-seconds", SettingsBindFlags.DEFAULT);
++ if (current_time == null) {
++ return;
++ }
+
+- notify["clock-show-seconds"].connect (() => {
+- add_timeout ();
+- });
++ add_timeout ();
++ try {
++ var clock_settings = new GLib.Settings ("io.elementary.desktop.wingpanel.datetime");
++ clock_settings.bind ("clock-show-seconds", this, "clock-show-seconds", SettingsBindFlags.DEFAULT);
+
+- // Listen for the D-BUS server that controls time settings
+- Bus.watch_name (BusType.SYSTEM, "org.freedesktop.timedate1", BusNameWatcherFlags.NONE, on_watch, on_unwatch);
+- // Listen for the signal that is fired when waking up from sleep, then update time
+- manager = Bus.get_proxy_sync (BusType.SYSTEM, "org.freedesktop.login1", "/org/freedesktop/login1");
+- manager.prepare_for_sleep.connect ((sleeping) => {
+- if (!sleeping) {
+- update_current_time ();
+- minute_changed ();
++ notify["clock-show-seconds"].connect (() => {
+ add_timeout ();
+- }
+- });
+- } catch (Error e) {
+- warning (e.message);
++ });
++
++ // Listen for the D-BUS server that controls time settings
++ Bus.watch_name (BusType.SYSTEM, "org.freedesktop.timedate1", BusNameWatcherFlags.NONE, on_watch, on_unwatch);
++ // Listen for the signal that is fired when waking up from sleep, then update time
++ manager = Bus.get_proxy_sync (BusType.SYSTEM, "org.freedesktop.login1", "/org/freedesktop/login1");
++ manager.prepare_for_sleep.connect ((sleeping) => {
++ if (!sleeping) {
++ update_current_time ();
++ minute_changed ();
++ add_timeout ();
++ }
++ });
++ } catch (Error e) {
++ warning (e.message);
++ }
+ }
+- }
+-
+- construct {
+- setup_time_format.begin ();
+- }
+
+- private async void setup_time_format () {
+- try {
+- var accounts_service = yield GLib.Bus.get_proxy (GLib.BusType.SYSTEM,
+- "org.freedesktop.Accounts",
+- "/org/freedesktop/Accounts");
+- var user_path = accounts_service.find_user_by_name (GLib.Environment.get_user_name ());
+-
+- var greeter_act = yield GLib.Bus.get_proxy (GLib.BusType.SYSTEM,
+- "org.freedesktop.Accounts",
+- user_path,
+- GLib.DBusProxyFlags.GET_INVALIDATED_PROPERTIES);
+- is_12h = ("12h" in greeter_act.time_format);
+- ((GLib.DBusProxy) greeter_act).g_properties_changed.connect ((changed_properties, invalidated_properties) => {
+- if (changed_properties.lookup_value ("TimeFormat", GLib.VariantType.STRING) != null) {
+- is_12h = ("12h" in greeter_act.time_format);
+- }
+- });
+- } catch (Error e) {
+- critical (e.message);
+- // Connect to the GSettings instead
+- var clock_settings = new GLib.Settings ("org.gnome.desktop.interface");
+- clock_settings.changed["clock-format"].connect (() => {
+- is_12h = ("12h" in clock_settings.get_string ("clock-format"));
+- });
+-
+- is_12h = ("12h" in clock_settings.get_string ("clock-format"));
++ construct {
++ setup_time_format.begin ();
+ }
+- }
+
+- private void on_watch (DBusConnection conn) {
+- // Start updating the time display quicker because someone is changing settings
+- add_timeout (true);
+- }
++ private async void setup_time_format () {
++ try {
++ var accounts_service = yield GLib.Bus.get_proxy (GLib.BusType.SYSTEM,
++ "org.freedesktop.Accounts",
++ "/org/freedesktop/Accounts");
++ var user_path = accounts_service.find_user_by_name (GLib.Environment.get_user_name ());
++
++ var greeter_act = yield GLib.Bus.get_proxy (GLib.BusType.SYSTEM,
++ "org.freedesktop.Accounts",
++ user_path,
++ GLib.DBusProxyFlags.GET_INVALIDATED_PROPERTIES);
++ is_12h = ("12h" in greeter_act.time_format);
++ ((GLib.DBusProxy) greeter_act).g_properties_changed.connect ((changed_properties, invalidated_properties) => {
++ if (changed_properties.lookup_value ("TimeFormat", GLib.VariantType.STRING) != null) {
++ is_12h = ("12h" in greeter_act.time_format);
++ }
++ });
++ } catch (Error e) {
++ critical (e.message);
++ // Connect to the GSettings instead
++ var clock_settings = new GLib.Settings ("org.gnome.desktop.interface");
++ clock_settings.changed["clock-format"].connect (() => {
++ is_12h = ("12h" in clock_settings.get_string ("clock-format"));
++ });
+
+- private void on_unwatch (DBusConnection conn) {
+- // Stop updating the time display quicker
+- add_timeout (false);
+- }
++ is_12h = ("12h" in clock_settings.get_string ("clock-format"));
++ }
++ }
+
+- private void add_timeout (bool update_fast = false) {
+- uint interval;
+- if (update_fast || clock_show_seconds) {
+- interval = 500;
+- } else {
+- interval = calculate_time_until_next_minute ();
++ private void on_watch (DBusConnection conn) {
++ // Start updating the time display quicker because someone is changing settings
++ add_timeout (true);
+ }
+
+- if (timeout_id > 0) {
+- Source.remove (timeout_id);
++ private void on_unwatch (DBusConnection conn) {
++ // Stop updating the time display quicker
++ add_timeout (false);
+ }
+
+- timeout_id = Timeout.add (interval, () => {
+- update_current_time ();
+- minute_changed ();
+- add_timeout (update_fast);
++ private void add_timeout (bool update_fast = false) {
++ uint interval;
++ if (update_fast || clock_show_seconds) {
++ interval = 500;
++ } else {
++ interval = calculate_time_until_next_minute ();
++ }
+
+- return false;
+- });
+- }
++ if (timeout_id > 0) {
++ Source.remove (timeout_id);
++ }
+
+- public string format (string format) {
+- if (current_time == null) {
+- return "undef";
++ timeout_id = Timeout.add (interval, () => {
++ update_current_time ();
++ minute_changed ();
++ add_timeout (update_fast);
++
++ return false;
++ });
+ }
+
+- return current_time.format (format);
+- }
++ public string format (string format) {
++ if (current_time == null) {
++ return "undef";
++ }
+
+- public GLib.DateTime get_current_time () {
+- return current_time;
+- }
++ return current_time.format (format);
++ }
+
+- private void update_current_time () {
+- var local_time = new GLib.DateTime.now_local ();
++ public GLib.DateTime get_current_time () {
++ return current_time;
++ }
+
+- if (local_time == null) {
+- critical ("Can't get the local time.");
++ private void update_current_time () {
++ var local_time = new GLib.DateTime.now_local ();
+
+- return;
+- }
++ if (local_time == null) {
++ critical ("Can't get the local time.");
+
+- current_time = local_time;
+- }
++ return;
++ }
+
+- private uint calculate_time_until_next_minute () {
+- if (current_time == null) {
+- return 60 * 1000;
++ current_time = local_time;
+ }
+
+- var seconds_until_next_minute = 60 - (current_time.to_unix () % 60);
++ private uint calculate_time_until_next_minute () {
++ if (current_time == null) {
++ return 60 * 1000;
++ }
+
+- return (uint)seconds_until_next_minute * 1000;
+- }
++ var seconds_until_next_minute = 60 - (current_time.to_unix () % 60);
+
+- public static TimeManager get_default () {
+- if (instance == null) {
+- instance = new TimeManager ();
++ return (uint)seconds_until_next_minute * 1000;
+ }
+
+- return instance;
++ public static TimeManager get_default () {
++ if (instance == null) {
++ instance = new TimeManager ();
++ }
++
++ return instance;
++ }
+ }
+ }
+diff --git a/src/Util/DateIterator.vala b/src/Util/DateIterator.vala
+new file mode 100644
+index 0000000..c2c771e
+--- /dev/null
++++ b/src/Util/DateIterator.vala
+@@ -0,0 +1,84 @@
++/*
++ * Copyright 2011-2018 elementary, Inc. (https://elementary.io)
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public
++ * License along with this program; if not, write to the
++ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301 USA.
++ *
++ * Authored by: Corentin Noël
++ */
++
++namespace DateTimeIndicator {
++ public class Util.DateIterator : Object, Gee.Traversable, Gee.Iterator {
++ public GLib.DateTime current { get; construct set; }
++ public Util.DateRange range { get; construct; }
++
++ // Required by Gee.Iterator
++ public bool valid {
++ get {
++ return true;
++ }
++ }
++
++ // Required by Gee.Iterator
++ public bool read_only {
++ get {
++ return false;
++ }
++ }
++
++ public DateIterator (Util.DateRange range) {
++ Object (
++ range: range,
++ current: range.first_dt.add_days (-1)
++ );
++ }
++
++ public bool @foreach (Gee.ForallFunc f) {
++ var element = range.first_dt;
++
++ while (element.compare (range.last_dt) < 0) {
++ if (f (element) == false) {
++ return false;
++ }
++
++ element = element.add_days (1);
++ }
++
++ return true;
++ }
++
++ public bool next () {
++ if (!has_next ()) {
++ return false;
++ }
++
++ current = this.current.add_days (1);
++
++ return true;
++ }
++
++ public bool has_next () {
++ return current.compare (range.last_dt) < 0;
++ }
++
++ public new GLib.DateTime get () {
++ return current;
++ }
++
++ public void remove () {
++ assert_not_reached ();
++ }
++ }
++}
+diff --git a/src/Util/DateRange.vala b/src/Util/DateRange.vala
+new file mode 100644
+index 0000000..82da7c8
+--- /dev/null
++++ b/src/Util/DateRange.vala
+@@ -0,0 +1,68 @@
++/*
++ * Copyright 2011-2019 elementary, Inc. (https://elementary.io)
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public
++ * License along with this program; if not, write to the
++ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ * Boston, MA 02110-1301 USA.
++ *
++ * Authored by: Corentin Noël
++ */
++
++namespace DateTimeIndicator {
++/* Represents date range from 'first' to 'last' inclusive */
++ public class Util.DateRange : Object, Gee.Traversable, Gee.Iterable {
++ public GLib.DateTime first_dt { get; construct; }
++ public GLib.DateTime last_dt { get; construct; }
++
++ public bool @foreach (Gee.ForallFunc f) {
++ foreach (var date in this) {
++ if (f (date) == false) {
++ return false;
++ }
++ }
++
++ return true;
++ }
++
++ public DateRange (GLib.DateTime first, GLib.DateTime last) {
++ Object (
++ first_dt: first,
++ last_dt: last
++ );
++ }
++
++ public bool equals (DateRange other) {
++ return (first_dt == other.first_dt && last_dt == other.last_dt);
++ }
++
++ public Gee.Iterator iterator () {
++ return new DateIterator (this);
++ }
++
++ public Gee.List to_list () {
++ var list = new Gee.ArrayList ((Gee.EqualDataFunc? )datetime_equal_func);
++
++ foreach (var date in this) {
++ list.add (date);
++ }
++
++ return list;
++ }
++
++ /* Returns true if 'a' and 'b' are the same GLib.DateTime */
++ private bool datetime_equal_func (GLib.DateTime a, GLib.DateTime b) {
++ return a.equal (b);
++ }
++ }
++}
+diff --git a/src/Widgets/calendar/Util.vala b/src/Util/Util.vala
+similarity index 96%
+rename from src/Widgets/calendar/Util.vala
+rename to src/Util/Util.vala
+index e51f784..c261f4b 100644
+--- a/src/Widgets/calendar/Util.vala
++++ b/src/Util/Util.vala
+@@ -19,7 +19,7 @@
+ * Authored by: Corentin Noël
+ */
+
+-namespace Util {
++namespace DateTimeIndicator.Util {
+ static bool has_scrolled = false;
+
+ public bool on_scroll_event (Gdk.EventScroll event) {
+@@ -35,7 +35,7 @@ namespace Util {
+
+ /* It's mouse scroll ! */
+ if (choice == 1 || choice == -1) {
+- DateTime.Widgets.CalendarModel.get_default ().change_month ((int)choice);
++ Models.CalendarModel.get_default ().change_month ((int)choice);
+
+ return true;
+ }
+@@ -46,14 +46,14 @@ namespace Util {
+
+ if (choice > 0.3) {
+ reset_timer.begin ();
+- DateTime.Widgets.CalendarModel.get_default ().change_month (1);
++ Models.CalendarModel.get_default ().change_month (1);
+
+ return true;
+ }
+
+ if (choice < -0.3) {
+ reset_timer.begin ();
+- DateTime.Widgets.CalendarModel.get_default ().change_month (-1);
++ Models.CalendarModel.get_default ().change_month (-1);
+
+ return true;
+ }
+diff --git a/src/Widgets/CalendarView.vala b/src/Widgets/CalendarView.vala
+new file mode 100644
+index 0000000..65cee28
+--- /dev/null
++++ b/src/Widgets/CalendarView.vala
+@@ -0,0 +1,185 @@
++/*-
++ * Copyright (c) 2011–2018 elementary, Inc. (https://elementary.io)
++ *
++ * This program is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 3 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see .
++ *
++ * Authored by: Maxwell Barvian
++ * Corentin Noël
++ */
++
++namespace DateTimeIndicator {
++ public class Widgets.CalendarView : Gtk.Grid {
++ public signal void day_double_click ();
++ public signal void event_updates ();
++ public signal void selection_changed (GLib.DateTime? new_date);
++
++ public GLib.DateTime? selected_date { get; private set; }
++
++ private Widgets.Grid grid;
++ private Gtk.Stack stack;
++ private Gtk.Grid big_grid;
++
++ construct {
++ var label = new Gtk.Label (new GLib.DateTime.now_local ().format (_("%OB, %Y")));
++ label.hexpand = true;
++ label.margin_start = 6;
++ label.xalign = 0;
++ label.width_chars = 13;
++
++ var provider = new Gtk.CssProvider ();
++ provider.load_from_resource ("/io/elementary/desktop/wingpanel/datetime/ControlHeader.css");
++
++ var label_style_context = label.get_style_context ();
++ label_style_context.add_class ("header-label");
++ label_style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++
++ var left_button = new Gtk.Button.from_icon_name ("pan-start-symbolic");
++ var center_button = new Gtk.Button.from_icon_name ("office-calendar-symbolic");
++ center_button.tooltip_text = _("Go to today's date");
++ var right_button = new Gtk.Button.from_icon_name ("pan-end-symbolic");
++
++ var box_buttons = new Gtk.Grid ();
++ box_buttons.margin_end = 6;
++ box_buttons.valign = Gtk.Align.CENTER;
++ box_buttons.get_style_context ().add_class (Gtk.STYLE_CLASS_LINKED);
++ box_buttons.add (left_button);
++ box_buttons.add (center_button);
++ box_buttons.add (right_button);
++
++ big_grid = create_big_grid ();
++
++ stack = new Gtk.Stack ();
++ stack.add (big_grid);
++ stack.show_all ();
++ stack.expand = true;
++
++ stack.notify["transition-running"].connect (() => {
++ if (stack.transition_running == false) {
++ stack.get_children ().foreach ((child) => {
++ if (child != stack.visible_child) {
++ child.destroy ();
++ }
++ });
++ }
++ });
++
++ column_spacing = 6;
++ row_spacing = 6;
++ margin_start = margin_end = 10;
++ attach (label, 0, 0);
++ attach (box_buttons, 1, 0);
++ attach (stack, 0, 1, 2);
++
++ var model = Models.CalendarModel.get_default ();
++ model.notify["data-range"].connect (() => {
++ label.label = model.month_start.format (_("%OB, %Y"));
++
++ sync_with_model ();
++
++ selected_date = null;
++ selection_changed (selected_date);
++ });
++
++ left_button.clicked.connect (() => {
++ model.change_month (-1);
++ });
++
++ right_button.clicked.connect (() => {
++ model.change_month (1);
++ });
++
++ center_button.clicked.connect (() => {
++ show_today ();
++ });
++ }
++
++ private Gtk.Grid create_big_grid () {
++ grid = new Widgets.Grid ();
++ grid.show_all ();
++
++ grid.on_event_add.connect ((date) => {
++ show_date_in_maya (date);
++ day_double_click ();
++ });
++
++ grid.selection_changed.connect ((date) => {
++ selected_date = date;
++ selection_changed (date);
++ });
++
++ return grid;
++ }
++
++ public void show_today () {
++ var calmodel = Models.CalendarModel.get_default ();
++ var today = Util.strip_time (new GLib.DateTime.now_local ());
++ var start = Util.get_start_of_month (today);
++ selected_date = today;
++ if (!start.equal (calmodel.month_start)) {
++ calmodel.month_start = start;
++ }
++ sync_with_model ();
++
++ grid.set_focus_to_today ();
++ }
++
++ // TODO: As far as maya supports it use the Dbus Activation feature to run the calendar-app.
++ public void show_date_in_maya (GLib.DateTime date) {
++ var command = "io.elementary.calendar --show-day %s".printf (date.format ("%F"));
++
++ try {
++ var appinfo = AppInfo.create_from_commandline (command, null, AppInfoCreateFlags.NONE);
++ appinfo.launch_uris (null, null);
++ } catch (GLib.Error e) {
++ var dialog = new Granite.MessageDialog.with_image_from_icon_name (
++ _("Unable To Launch Calendar"),
++ _("The program \"io.elementary.calendar\" may not be installed"),
++ "dialog-error"
++ );
++ dialog.show_error_details (e.message);
++ dialog.run ();
++ dialog.destroy ();
++ }
++ }
++
++ /* Sets the calendar widgets to the date range of the model */
++ private void sync_with_model () {
++ var model = Models.CalendarModel.get_default ();
++ if (grid.grid_range != null && (model.data_range.equals (grid.grid_range) || grid.grid_range.first_dt.compare (model.data_range.first_dt) == 0)) {
++ grid.update_today ();
++ return; // nothing else to do
++ }
++
++ GLib.DateTime previous_first = null;
++ if (grid.grid_range != null)
++ previous_first = grid.grid_range.first_dt;
++
++ big_grid = create_big_grid ();
++ stack.add (big_grid);
++
++ grid.set_range (model.data_range, model.month_start);
++ grid.update_weeks (model.data_range.first_dt, model.num_weeks);
++
++ if (previous_first != null) {
++ if (previous_first.compare (grid.grid_range.first_dt) == -1) {
++ stack.transition_type = Gtk.StackTransitionType.SLIDE_LEFT;
++ } else {
++ stack.transition_type = Gtk.StackTransitionType.SLIDE_RIGHT;
++ }
++ }
++
++ stack.set_visible_child (big_grid);
++ }
++ }
++}
+diff --git a/src/Widgets/EventRow.vala b/src/Widgets/EventRow.vala
+index 8e0513e..1268311 100644
+--- a/src/Widgets/EventRow.vala
++++ b/src/Widgets/EventRow.vala
+@@ -17,104 +17,106 @@
+ * Boston, MA 02110-1301 USA.
+ */
+
+-public class DateTime.EventRow : Gtk.ListBoxRow {
+- public GLib.DateTime date { get; construct; }
+- public unowned ICal.Component component { get; construct; }
+- public unowned E.SourceCalendar cal { get; construct; }
+-
+- public GLib.DateTime start_time { get; private set; }
+- public GLib.DateTime? end_time { get; private set; }
+- public bool is_allday { get; private set; default = false; }
+-
+- private static Services.TimeManager time_manager;
+- private static Gtk.CssProvider css_provider;
+-
+- private Gtk.Grid grid;
+- private Gtk.Image event_image;
+- private Gtk.Label time_label;
+-
+- public EventRow (GLib.DateTime date, ICal.Component component, E.Source source) {
+- Object (
+- component: component,
+- date: date,
+- cal: (E.SourceCalendar?) source.get_extension (E.SOURCE_EXTENSION_CALENDAR)
+- );
+- }
+-
+- static construct {
+- css_provider = new Gtk.CssProvider ();
+- css_provider.load_from_resource ("/io/elementary/desktop/wingpanel/datetime/EventRow.css");
+-
+- time_manager = Services.TimeManager.get_default ();
+- }
++namespace DateTimeIndicator {
++ public class EventRow : Gtk.ListBoxRow {
++ public GLib.DateTime date { get; construct; }
++ public unowned ICal.Component component { get; construct; }
++ public unowned E.SourceCalendar cal { get; construct; }
++
++ public GLib.DateTime start_time { get; private set; }
++ public GLib.DateTime? end_time { get; private set; }
++ public bool is_allday { get; private set; default = false; }
++
++ private static Services.TimeManager time_manager;
++ private static Gtk.CssProvider css_provider;
++
++ private Gtk.Grid grid;
++ private Gtk.Image event_image;
++ private Gtk.Label time_label;
++
++ public EventRow (GLib.DateTime date, ICal.Component component, E.Source source) {
++ Object (
++ component: component,
++ date: date,
++ cal: (E.SourceCalendar?) source.get_extension (E.SOURCE_EXTENSION_CALENDAR)
++ );
++ }
+
+- construct {
+- start_time = Util.ical_to_date_time (component.get_dtstart ());
+- end_time = Util.ical_to_date_time (component.get_dtend ());
++ static construct {
++ css_provider = new Gtk.CssProvider ();
++ css_provider.load_from_resource ("/io/elementary/desktop/wingpanel/datetime/EventRow.css");
+
+- if (end_time != null && Util.is_the_all_day (start_time, end_time)) {
+- is_allday = true;
++ time_manager = Services.TimeManager.get_default ();
+ }
+
+- unowned string icon_name = "office-calendar-symbolic";
+- if (end_time == null) {
+- icon_name = "alarm-symbolic";
++ construct {
++ start_time = Util.ical_to_date_time (component.get_dtstart ());
++ end_time = Util.ical_to_date_time (component.get_dtend ());
++
++ if (end_time != null && Util.is_the_all_day (start_time, end_time)) {
++ is_allday = true;
++ }
++
++ unowned string icon_name = "office-calendar-symbolic";
++ if (end_time == null) {
++ icon_name = "alarm-symbolic";
++ }
++
++ event_image = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.MENU);
++ event_image.valign = Gtk.Align.START;
++
++ unowned Gtk.StyleContext event_image_context = event_image.get_style_context ();
++ event_image_context.add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++
++ var name_label = new Gtk.Label (component.get_summary ());
++ name_label.hexpand = true;
++ name_label.ellipsize = Pango.EllipsizeMode.END;
++ name_label.lines = 3;
++ name_label.max_width_chars = 30;
++ name_label.wrap = true;
++ name_label.wrap_mode = Pango.WrapMode.WORD_CHAR;
++ name_label.xalign = 0;
++
++ unowned Gtk.StyleContext name_label_context = name_label.get_style_context ();
++ name_label_context.add_class ("title");
++ name_label_context.add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++
++ time_label = new Gtk.Label (null);
++ time_label.use_markup = true;
++ time_label.xalign = 0;
++ time_label.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL);
++
++ grid = new Gtk.Grid ();
++ grid.column_spacing = 6;
++ grid.margin = 3;
++ grid.margin_start = grid.margin_end = 6;
++ grid.attach (event_image, 0, 0);
++ grid.attach (name_label, 1, 0);
++ if (!is_allday) {
++ grid.attach (time_label, 1, 1);
++ }
++
++ unowned Gtk.StyleContext grid_context = grid.get_style_context ();
++ grid_context.add_class ("event");
++ grid_context.add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++
++ add (grid);
++
++ set_color ();
++ cal.notify["color"].connect (set_color);
++
++ update_timelabel ();
++ time_manager.notify["is-12h"].connect (update_timelabel);
+ }
+
+- event_image = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.MENU);
+- event_image.valign = Gtk.Align.START;
+-
+- unowned Gtk.StyleContext event_image_context = event_image.get_style_context ();
+- event_image_context.add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+-
+- var name_label = new Gtk.Label (component.get_summary ());
+- name_label.hexpand = true;
+- name_label.ellipsize = Pango.EllipsizeMode.END;
+- name_label.lines = 3;
+- name_label.max_width_chars = 30;
+- name_label.wrap = true;
+- name_label.wrap_mode = Pango.WrapMode.WORD_CHAR;
+- name_label.xalign = 0;
+-
+- unowned Gtk.StyleContext name_label_context = name_label.get_style_context ();
+- name_label_context.add_class ("title");
+- name_label_context.add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+-
+- time_label = new Gtk.Label (null);
+- time_label.use_markup = true;
+- time_label.xalign = 0;
+- time_label.get_style_context ().add_class (Gtk.STYLE_CLASS_DIM_LABEL);
+-
+- grid = new Gtk.Grid ();
+- grid.column_spacing = 6;
+- grid.margin = 3;
+- grid.margin_start = grid.margin_end = 6;
+- grid.attach (event_image, 0, 0);
+- grid.attach (name_label, 1, 0);
+- if (!is_allday) {
+- grid.attach (time_label, 1, 1);
++ private void update_timelabel () {
++ var time_format = Granite.DateTime.get_default_time_format (time_manager.is_12h);
++ time_label.label = "%s – %s".printf (start_time.format (time_format), end_time.format (time_format));
+ }
+
+- unowned Gtk.StyleContext grid_context = grid.get_style_context ();
+- grid_context.add_class ("event");
+- grid_context.add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+-
+- add (grid);
+-
+- set_color ();
+- cal.notify["color"].connect (set_color);
+-
+- update_timelabel ();
+- time_manager.notify["is-12h"].connect (update_timelabel);
+- }
+-
+- private void update_timelabel () {
+- var time_format = Granite.DateTime.get_default_time_format (time_manager.is_12h);
+- time_label.label = "%s – %s".printf (start_time.format (time_format), end_time.format (time_format));
+- }
+-
+- private void set_color () {
+- Util.set_event_calendar_color (cal, grid);
+- Util.set_event_calendar_color (cal, event_image);
++ private void set_color () {
++ Util.set_event_calendar_color (cal, grid);
++ Util.set_event_calendar_color (cal, event_image);
++ }
+ }
+ }
+diff --git a/src/Widgets/calendar/Grid.vala b/src/Widgets/Grid.vala
+similarity index 95%
+rename from src/Widgets/calendar/Grid.vala
+rename to src/Widgets/Grid.vala
+index 2b48636..165d11d 100644
+--- a/src/Widgets/calendar/Grid.vala
++++ b/src/Widgets/Grid.vala
+@@ -20,11 +20,11 @@
+ * Corentin Noël
+ */
+
+-namespace DateTime.Widgets {
++namespace DateTimeIndicator {
+ /**
+ * Represents the entire date grid as a table.
+ */
+- public class Grid : Gtk.Grid {
++ public class Widgets.Grid : Gtk.Grid {
+ public Util.DateRange grid_range { get; private set; }
+
+ /*
+@@ -59,7 +59,7 @@ namespace DateTime.Widgets {
+ hexpand = true;
+ attach (week_sep_revealer, 1, 1, 1, 6);
+
+- DateTime.Indicator.settings.bind ("show-weeks", week_sep_revealer, "reveal-child", GLib.SettingsBindFlags.DEFAULT);
++ Indicator.settings.bind ("show-weeks", week_sep_revealer, "reveal-child", GLib.SettingsBindFlags.DEFAULT);
+
+ data = new Gee.HashMap ();
+ events |= Gdk.EventMask.SCROLL_MASK;
+@@ -77,7 +77,7 @@ namespace DateTime.Widgets {
+ day.set_selected (true);
+ day.set_state_flags (Gtk.StateFlags.FOCUSED, false);
+ selection_changed (selected_date);
+- var calmodel = CalendarModel.get_default ();
++ var calmodel = Models.CalendarModel.get_default ();
+ var date_month = selected_date.get_month () - calmodel.month_start.get_month ();
+ var date_year = selected_date.get_year () - calmodel.month_start.get_year ();
+
+@@ -127,7 +127,7 @@ namespace DateTime.Widgets {
+ /* Create new widgets for the new range */
+
+ var date = Util.strip_time (today);
+- date = date.add_days (CalendarModel.get_default ().week_starts_on - date.get_day_of_week ());
++ date = date.add_days (Models.CalendarModel.get_default ().week_starts_on - date.get_day_of_week ());
+ foreach (var label in header_labels) {
+ label.label = date.format ("%a");
+ date = date.add_days (1);
+@@ -221,7 +221,7 @@ namespace DateTime.Widgets {
+ week_labels[c].add (week_label);
+ week_labels[c].show_all ();
+
+- DateTime.Indicator.settings.bind ("show-weeks", week_labels[c], "reveal-child", GLib.SettingsBindFlags.DEFAULT);
++ Indicator.settings.bind ("show-weeks", week_labels[c], "reveal-child", GLib.SettingsBindFlags.DEFAULT);
+
+ attach (week_labels[c], 0, c + 1);
+
+diff --git a/src/Widgets/GridDay.vala b/src/Widgets/GridDay.vala
+new file mode 100644
+index 0000000..8c44443
+--- /dev/null
++++ b/src/Widgets/GridDay.vala
+@@ -0,0 +1,180 @@
++// -*- Mode: vala; indent-tabs-mode: nil; tab-width: 4 -*-
++/*-
++ * Copyright (c) 2011–2018 elementary, Inc. (https://elementary.io)
++ *
++ * This program is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 3 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see .
++ *
++ * Authored by: Maxwell Barvian
++ * Corentin Noël
++ */
++
++namespace DateTimeIndicator {
++/**
++ * Represents a single day on the grid.
++ */
++ public class Widgets.GridDay : Gtk.EventBox {
++ /*
++ * Event emitted when the day is double clicked or the ENTER key is pressed.
++ */
++ public signal void on_event_add (GLib.DateTime date);
++
++ public GLib.DateTime date { get; construct set; }
++
++ private static Gtk.CssProvider provider;
++ private static Models.CalendarModel model;
++
++ private Gee.HashMap event_dots;
++ private Gtk.Grid event_grid;
++ private Gtk.Label label;
++ private bool valid_grab = false;
++
++ public GridDay (GLib.DateTime date) {
++ Object (date: date);
++ }
++
++ static construct {
++ model = Models.CalendarModel.get_default ();
++
++ provider = new Gtk.CssProvider ();
++ provider.load_from_resource ("/io/elementary/desktop/wingpanel/datetime/GridDay.css");
++ }
++
++ construct {
++ unowned Gtk.StyleContext style_context = get_style_context ();
++ style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++ style_context.add_class ("circular");
++
++ label = new Gtk.Label (null);
++
++ event_grid = new Gtk.Grid ();
++ event_grid.halign = Gtk.Align.CENTER;
++ event_grid.height_request = 6;
++
++ var grid = new Gtk.Grid ();
++ grid.halign = grid.valign = Gtk.Align.CENTER;
++ grid.attach (label, 0, 0);
++ grid.attach (event_grid, 0, 1);
++
++ can_focus = true;
++ events |= Gdk.EventMask.BUTTON_PRESS_MASK;
++ events |= Gdk.EventMask.KEY_PRESS_MASK;
++ events |= Gdk.EventMask.SMOOTH_SCROLL_MASK;
++ set_size_request (35, 35);
++ halign = Gtk.Align.CENTER;
++ hexpand = true;
++ add (grid);
++ show_all ();
++
++ // Signals and handlers
++ button_press_event.connect (on_button_press);
++ key_press_event.connect (on_key_press);
++ scroll_event.connect ((event) => {return Util.on_scroll_event (event);});
++
++ notify["date"].connect (() => {
++ label.label = date.get_day_of_month ().to_string ();
++ });
++
++ event_dots = new Gee.HashMap ();
++
++ model.events_added.connect (add_event_dots);
++ model.events_removed.connect (remove_event_dots);
++ }
++
++ private void add_event_dots (E.Source source, Gee.Collection events) {
++ foreach (var component in events) {
++ if (event_dots.size >= 3) {
++ return;
++ }
++
++ if (Util.calcomp_is_on_day (component, date)) {
++ unowned ICal.Component ical = component.get_icalcomponent ();
++
++ var event_uid = ical.get_uid ();
++ if (!event_dots.has_key (event_uid)) {
++ var event_dot = new Gtk.Image ();
++ event_dot.gicon = new ThemedIcon ("pager-checked-symbolic");
++ event_dot.pixel_size = 6;
++
++ unowned Gtk.StyleContext style_context = event_dot.get_style_context ();
++ style_context.add_class (Granite.STYLE_CLASS_ACCENT);
++ style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++
++ var source_calendar = (E.SourceCalendar?) source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
++ Util.set_event_calendar_color (source_calendar, event_dot);
++
++ event_dots[event_uid] = event_dot;
++
++ event_grid.add (event_dot);
++ }
++ }
++ }
++
++ event_grid.show_all ();
++ }
++
++ private void remove_event_dots (E.Source source, Gee.Collection events) {
++ foreach (var component in events) {
++ unowned ICal.Component ical = component.get_icalcomponent ();
++ var event_uid = ical.get_uid ();
++ var dot = event_dots[event_uid];
++ if (dot != null) {
++ dot.destroy ();
++ event_dots.remove (event_uid);
++ }
++ }
++ }
++
++ public void set_selected (bool selected) {
++ if (selected) {
++ set_state_flags (Gtk.StateFlags.SELECTED, true);
++ } else {
++ set_state_flags (Gtk.StateFlags.NORMAL, true);
++ }
++ }
++
++ public void grab_focus_force () {
++ valid_grab = true;
++ grab_focus ();
++ }
++
++ public override void grab_focus () {
++ if (valid_grab) {
++ base.grab_focus ();
++ valid_grab = false;
++ }
++ }
++
++ public void sensitive_container (bool sens) {
++ label.sensitive = sens;
++ event_grid.sensitive = sens;
++ }
++
++ private bool on_button_press (Gdk.EventButton event) {
++ if (event.type == Gdk.EventType.2BUTTON_PRESS && event.button == Gdk.BUTTON_PRIMARY)
++ on_event_add (date);
++ valid_grab = true;
++ grab_focus ();
++ return false;
++ }
++
++ private bool on_key_press (Gdk.EventKey event) {
++ if (event.keyval == Gdk.keyval_from_name ("Return") ) {
++ on_event_add (date);
++ return true;
++ }
++
++ return false;
++ }
++ }
++}
+diff --git a/src/Widgets/PanelLabel.vala b/src/Widgets/PanelLabel.vala
+index f253f9b..dff9a21 100644
+--- a/src/Widgets/PanelLabel.vala
++++ b/src/Widgets/PanelLabel.vala
+@@ -17,55 +17,57 @@
+ * Boston, MA 02110-1301 USA.
+ */
+
+-public class DateTime.Widgets.PanelLabel : Gtk.Grid {
+- private Gtk.Label date_label;
+- private Gtk.Label time_label;
+- private Services.TimeManager time_manager;
++namespace DateTimeIndicator {
++ public class Widgets.PanelLabel : Gtk.Grid {
++ private Gtk.Label date_label;
++ private Gtk.Label time_label;
++ private Services.TimeManager time_manager;
+
+- public string clock_format { get; set; }
+- public bool clock_show_seconds { get; set; }
+- public bool clock_show_weekday { get; set; }
++ public string clock_format { get; set; }
++ public bool clock_show_seconds { get; set; }
++ public bool clock_show_weekday { get; set; }
+
+- construct {
+- date_label = new Gtk.Label (null);
+- date_label.margin_end = 12;
++ construct {
++ date_label = new Gtk.Label (null);
++ date_label.margin_end = 12;
+
+- var date_revealer = new Gtk.Revealer ();
+- date_revealer.transition_type = Gtk.RevealerTransitionType.SLIDE_LEFT;
+- date_revealer.add (date_label);
++ var date_revealer = new Gtk.Revealer ();
++ date_revealer.transition_type = Gtk.RevealerTransitionType.SLIDE_LEFT;
++ date_revealer.add (date_label);
+
+- time_label = new Gtk.Label (null);
++ time_label = new Gtk.Label (null);
+
+- valign = Gtk.Align.CENTER;
+- add (date_revealer);
+- add (time_label);
++ valign = Gtk.Align.CENTER;
++ add (date_revealer);
++ add (time_label);
+
+- var clock_settings = new GLib.Settings ("io.elementary.desktop.wingpanel.datetime");
+- clock_settings.bind ("clock-format", this, "clock-format", SettingsBindFlags.DEFAULT);
+- clock_settings.bind ("clock-show-seconds", this, "clock-show-seconds", SettingsBindFlags.DEFAULT);
+- clock_settings.bind ("clock-show-date", date_revealer, "reveal_child", SettingsBindFlags.DEFAULT);
+- clock_settings.bind ("clock-show-weekday", this, "clock-show-weekday", SettingsBindFlags.DEFAULT);
++ var clock_settings = new GLib.Settings ("io.elementary.desktop.wingpanel.datetime");
++ clock_settings.bind ("clock-format", this, "clock-format", SettingsBindFlags.DEFAULT);
++ clock_settings.bind ("clock-show-seconds", this, "clock-show-seconds", SettingsBindFlags.DEFAULT);
++ clock_settings.bind ("clock-show-date", date_revealer, "reveal_child", SettingsBindFlags.DEFAULT);
++ clock_settings.bind ("clock-show-weekday", this, "clock-show-weekday", SettingsBindFlags.DEFAULT);
+
+- notify.connect (() => {
+- update_labels ();
+- });
++ notify.connect (() => {
++ update_labels ();
++ });
+
+- time_manager = Services.TimeManager.get_default ();
+- time_manager.minute_changed.connect (update_labels);
+- time_manager.notify["is-12h"].connect (update_labels);
+- }
+-
+- private void update_labels () {
+- string date_format;
+- if (clock_format == "ISO8601") {
+- date_format = "%F";
+- } else {
+- date_format = Granite.DateTime.get_default_date_format (clock_show_weekday, true, false);
++ time_manager = Services.TimeManager.get_default ();
++ time_manager.minute_changed.connect (update_labels);
++ time_manager.notify["is-12h"].connect (update_labels);
+ }
+
+- date_label.label = time_manager.format (date_format);
++ private void update_labels () {
++ string date_format;
++ if (clock_format == "ISO8601") {
++ date_format = "%F";
++ } else {
++ date_format = Granite.DateTime.get_default_date_format (clock_show_weekday, true, false);
++ }
+
+- string time_format = Granite.DateTime.get_default_time_format (time_manager.is_12h, clock_show_seconds);
+- time_label.label = time_manager.format (time_format);
++ date_label.label = time_manager.format (date_format);
++
++ string time_format = Granite.DateTime.get_default_time_format (time_manager.is_12h, clock_show_seconds);
++ time_label.label = time_manager.format (time_format);
++ }
+ }
+ }
+diff --git a/src/Widgets/calendar/CalendarView.vala b/src/Widgets/calendar/CalendarView.vala
+deleted file mode 100644
+index ef3f8f9..0000000
+--- a/src/Widgets/calendar/CalendarView.vala
++++ /dev/null
+@@ -1,183 +0,0 @@
+-/*-
+- * Copyright (c) 2011–2018 elementary, Inc. (https://elementary.io)
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, either version 3 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program. If not, see .
+- *
+- * Authored by: Maxwell Barvian
+- * Corentin Noël
+- */
+-
+-public class DateTime.Widgets.CalendarView : Gtk.Grid {
+- public signal void day_double_click ();
+- public signal void event_updates ();
+- public signal void selection_changed (GLib.DateTime? new_date);
+-
+- public GLib.DateTime? selected_date { get; private set; }
+-
+- private Grid grid;
+- private Gtk.Stack stack;
+- private Gtk.Grid big_grid;
+-
+- construct {
+- var label = new Gtk.Label (new GLib.DateTime.now_local ().format (_("%OB, %Y")));
+- label.hexpand = true;
+- label.margin_start = 6;
+- label.xalign = 0;
+- label.width_chars = 13;
+-
+- var provider = new Gtk.CssProvider ();
+- provider.load_from_resource ("/io/elementary/desktop/wingpanel/datetime/ControlHeader.css");
+-
+- var label_style_context = label.get_style_context ();
+- label_style_context.add_class ("header-label");
+- label_style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+-
+- var left_button = new Gtk.Button.from_icon_name ("pan-start-symbolic");
+- var center_button = new Gtk.Button.from_icon_name ("office-calendar-symbolic");
+- center_button.tooltip_text = _("Go to today's date");
+- var right_button = new Gtk.Button.from_icon_name ("pan-end-symbolic");
+-
+- var box_buttons = new Gtk.Grid ();
+- box_buttons.margin_end = 6;
+- box_buttons.valign = Gtk.Align.CENTER;
+- box_buttons.get_style_context ().add_class (Gtk.STYLE_CLASS_LINKED);
+- box_buttons.add (left_button);
+- box_buttons.add (center_button);
+- box_buttons.add (right_button);
+-
+- big_grid = create_big_grid ();
+-
+- stack = new Gtk.Stack ();
+- stack.add (big_grid);
+- stack.show_all ();
+- stack.expand = true;
+-
+- stack.notify["transition-running"].connect (() => {
+- if (stack.transition_running == false) {
+- stack.get_children ().foreach ((child) => {
+- if (child != stack.visible_child) {
+- child.destroy ();
+- }
+- });
+- }
+- });
+-
+- column_spacing = 6;
+- row_spacing = 6;
+- margin_start = margin_end = 10;
+- attach (label, 0, 0);
+- attach (box_buttons, 1, 0);
+- attach (stack, 0, 1, 2);
+-
+- var model = CalendarModel.get_default ();
+- model.notify["data-range"].connect (() => {
+- label.label = model.month_start.format (_("%OB, %Y"));
+-
+- sync_with_model ();
+-
+- selected_date = null;
+- selection_changed (selected_date);
+- });
+-
+- left_button.clicked.connect (() => {
+- model.change_month (-1);
+- });
+-
+- right_button.clicked.connect (() => {
+- model.change_month (1);
+- });
+-
+- center_button.clicked.connect (() => {
+- show_today ();
+- });
+- }
+-
+- private Gtk.Grid create_big_grid () {
+- grid = new DateTime.Widgets.Grid ();
+- grid.show_all ();
+-
+- grid.on_event_add.connect ((date) => {
+- show_date_in_maya (date);
+- day_double_click ();
+- });
+-
+- grid.selection_changed.connect ((date) => {
+- selected_date = date;
+- selection_changed (date);
+- });
+-
+- return grid;
+- }
+-
+- public void show_today () {
+- var calmodel = CalendarModel.get_default ();
+- var today = Util.strip_time (new GLib.DateTime.now_local ());
+- var start = Util.get_start_of_month (today);
+- selected_date = today;
+- if (!start.equal (calmodel.month_start)) {
+- calmodel.month_start = start;
+- }
+- sync_with_model ();
+-
+- grid.set_focus_to_today ();
+- }
+-
+- // TODO: As far as maya supports it use the Dbus Activation feature to run the calendar-app.
+- public void show_date_in_maya (GLib.DateTime date) {
+- var command = "io.elementary.calendar --show-day %s".printf (date.format ("%F"));
+-
+- try {
+- var appinfo = AppInfo.create_from_commandline (command, null, AppInfoCreateFlags.NONE);
+- appinfo.launch_uris (null, null);
+- } catch (GLib.Error e) {
+- var dialog = new Granite.MessageDialog.with_image_from_icon_name (
+- _("Unable To Launch Calendar"),
+- _("The program \"io.elementary.calendar\" may not be installed"),
+- "dialog-error"
+- );
+- dialog.show_error_details (e.message);
+- dialog.run ();
+- dialog.destroy ();
+- }
+- }
+-
+- /* Sets the calendar widgets to the date range of the model */
+- private void sync_with_model () {
+- var model = CalendarModel.get_default ();
+- if (grid.grid_range != null && (model.data_range.equals (grid.grid_range) || grid.grid_range.first_dt.compare (model.data_range.first_dt) == 0)) {
+- grid.update_today ();
+- return; // nothing else to do
+- }
+-
+- GLib.DateTime previous_first = null;
+- if (grid.grid_range != null)
+- previous_first = grid.grid_range.first_dt;
+-
+- big_grid = create_big_grid ();
+- stack.add (big_grid);
+-
+- grid.set_range (model.data_range, model.month_start);
+- grid.update_weeks (model.data_range.first_dt, model.num_weeks);
+-
+- if (previous_first != null) {
+- if (previous_first.compare (grid.grid_range.first_dt) == -1) {
+- stack.transition_type = Gtk.StackTransitionType.SLIDE_LEFT;
+- } else {
+- stack.transition_type = Gtk.StackTransitionType.SLIDE_RIGHT;
+- }
+- }
+-
+- stack.set_visible_child (big_grid);
+- }
+-}
+diff --git a/src/Widgets/calendar/GridDay.vala b/src/Widgets/calendar/GridDay.vala
+deleted file mode 100644
+index a9b5a28..0000000
+--- a/src/Widgets/calendar/GridDay.vala
++++ /dev/null
+@@ -1,178 +0,0 @@
+-// -*- Mode: vala; indent-tabs-mode: nil; tab-width: 4 -*-
+-/*-
+- * Copyright (c) 2011–2018 elementary, Inc. (https://elementary.io)
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, either version 3 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program. If not, see .
+- *
+- * Authored by: Maxwell Barvian
+- * Corentin Noël
+- */
+-
+-/**
+- * Represents a single day on the grid.
+- */
+-public class DateTime.Widgets.GridDay : Gtk.EventBox {
+- /*
+- * Event emitted when the day is double clicked or the ENTER key is pressed.
+- */
+- public signal void on_event_add (GLib.DateTime date);
+-
+- public GLib.DateTime date { get; construct set; }
+-
+- private static Gtk.CssProvider provider;
+- private static Widgets.CalendarModel model;
+-
+- private Gee.HashMap event_dots;
+- private Gtk.Grid event_grid;
+- private Gtk.Label label;
+- private bool valid_grab = false;
+-
+- public GridDay (GLib.DateTime date) {
+- Object (date: date);
+- }
+-
+- static construct {
+- model = Widgets.CalendarModel.get_default ();
+-
+- provider = new Gtk.CssProvider ();
+- provider.load_from_resource ("/io/elementary/desktop/wingpanel/datetime/GridDay.css");
+- }
+-
+- construct {
+- unowned Gtk.StyleContext style_context = get_style_context ();
+- style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+- style_context.add_class ("circular");
+-
+- label = new Gtk.Label (null);
+-
+- event_grid = new Gtk.Grid ();
+- event_grid.halign = Gtk.Align.CENTER;
+- event_grid.height_request = 6;
+-
+- var grid = new Gtk.Grid ();
+- grid.halign = grid.valign = Gtk.Align.CENTER;
+- grid.attach (label, 0, 0);
+- grid.attach (event_grid, 0, 1);
+-
+- can_focus = true;
+- events |= Gdk.EventMask.BUTTON_PRESS_MASK;
+- events |= Gdk.EventMask.KEY_PRESS_MASK;
+- events |= Gdk.EventMask.SMOOTH_SCROLL_MASK;
+- set_size_request (35, 35);
+- halign = Gtk.Align.CENTER;
+- hexpand = true;
+- add (grid);
+- show_all ();
+-
+- // Signals and handlers
+- button_press_event.connect (on_button_press);
+- key_press_event.connect (on_key_press);
+- scroll_event.connect ((event) => {return Util.on_scroll_event (event);});
+-
+- notify["date"].connect (() => {
+- label.label = date.get_day_of_month ().to_string ();
+- });
+-
+- event_dots = new Gee.HashMap ();
+-
+- model.events_added.connect (add_event_dots);
+- model.events_removed.connect (remove_event_dots);
+- }
+-
+- private void add_event_dots (E.Source source, Gee.Collection events) {
+- foreach (var component in events) {
+- if (event_dots.size >= 3) {
+- return;
+- }
+-
+- if (Util.calcomp_is_on_day (component, date)) {
+- unowned ICal.Component ical = component.get_icalcomponent ();
+-
+- var event_uid = ical.get_uid ();
+- if (!event_dots.has_key (event_uid)) {
+- var event_dot = new Gtk.Image ();
+- event_dot.gicon = new ThemedIcon ("pager-checked-symbolic");
+- event_dot.pixel_size = 6;
+-
+- unowned Gtk.StyleContext style_context = event_dot.get_style_context ();
+- style_context.add_class (Granite.STYLE_CLASS_ACCENT);
+- style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+-
+- var source_calendar = (E.SourceCalendar?) source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
+- Util.set_event_calendar_color (source_calendar, event_dot);
+-
+- event_dots[event_uid] = event_dot;
+-
+- event_grid.add (event_dot);
+- }
+- }
+- }
+-
+- event_grid.show_all ();
+- }
+-
+- private void remove_event_dots (E.Source source, Gee.Collection events) {
+- foreach (var component in events) {
+- unowned ICal.Component ical = component.get_icalcomponent ();
+- var event_uid = ical.get_uid ();
+- var dot = event_dots[event_uid];
+- if (dot != null) {
+- dot.destroy ();
+- event_dots.remove (event_uid);
+- }
+- }
+- }
+-
+- public void set_selected (bool selected) {
+- if (selected) {
+- set_state_flags (Gtk.StateFlags.SELECTED, true);
+- } else {
+- set_state_flags (Gtk.StateFlags.NORMAL, true);
+- }
+- }
+-
+- public void grab_focus_force () {
+- valid_grab = true;
+- grab_focus ();
+- }
+-
+- public override void grab_focus () {
+- if (valid_grab) {
+- base.grab_focus ();
+- valid_grab = false;
+- }
+- }
+-
+- public void sensitive_container (bool sens) {
+- label.sensitive = sens;
+- event_grid.sensitive = sens;
+- }
+-
+- private bool on_button_press (Gdk.EventButton event) {
+- if (event.type == Gdk.EventType.2BUTTON_PRESS && event.button == Gdk.BUTTON_PRIMARY)
+- on_event_add (date);
+- valid_grab = true;
+- grab_focus ();
+- return false;
+- }
+-
+- private bool on_key_press (Gdk.EventKey event) {
+- if (event.keyval == Gdk.keyval_from_name ("Return") ) {
+- on_event_add (date);
+- return true;
+- }
+-
+- return false;
+- }
+-}
+
+From 11f11073d74dac1d831560c3a92687531aaf846e Mon Sep 17 00:00:00 2001
+From: Dirli
+Date: Thu, 9 Apr 2020 20:46:31 +0300
+Subject: [PATCH 2/8] Events list moved to a separate file
+
+---
+ meson.build | 1 +
+ src/Indicator.vala | 113 +++------------------------------
+ src/Widgets/EventsListBox.vala | 102 +++++++++++++++++++++++++++++
+ 3 files changed, 113 insertions(+), 103 deletions(-)
+ create mode 100644 src/Widgets/EventsListBox.vala
+
+diff --git a/meson.build b/meson.build
+index b44c5bd..1b52276 100644
+--- a/meson.build
++++ b/meson.build
+@@ -46,6 +46,7 @@ shared_module(
+ 'src/Models/CalendarModel.vala',
+ 'src/Widgets/CalendarView.vala',
+ 'src/Widgets/EventRow.vala',
++ 'src/Widgets/EventsListBox.vala',
+ 'src/Widgets/Grid.vala',
+ 'src/Widgets/GridDay.vala',
+ 'src/Widgets/PanelLabel.vala',
+diff --git a/src/Indicator.vala b/src/Indicator.vala
+index b712c12..6a8d001 100644
+--- a/src/Indicator.vala
++++ b/src/Indicator.vala
+@@ -22,9 +22,9 @@ namespace DateTimeIndicator {
+ public static GLib.Settings settings;
+
+ private Widgets.PanelLabel panel_label;
+- private Gtk.Grid main_grid;
+ private Widgets.CalendarView calendar;
+- private Gtk.ListBox event_listbox;
++ private Widgets.EventsListBox event_listbox;
++ private Gtk.Grid main_grid;
+ private uint update_events_idle_source = 0;
+
+ public Indicator () {
+@@ -56,24 +56,7 @@ namespace DateTimeIndicator {
+ calendar = new Widgets.CalendarView ();
+ calendar.margin_bottom = 6;
+
+- var placeholder_label = new Gtk.Label (_("No Events on This Day"));
+- placeholder_label.wrap = true;
+- placeholder_label.wrap_mode = Pango.WrapMode.WORD;
+- placeholder_label.margin_start = 12;
+- placeholder_label.margin_end = 12;
+- placeholder_label.max_width_chars = 20;
+- placeholder_label.justify = Gtk.Justification.CENTER;
+- placeholder_label.show_all ();
+-
+- var placeholder_style_context = placeholder_label.get_style_context ();
+- placeholder_style_context.add_class (Gtk.STYLE_CLASS_DIM_LABEL);
+- placeholder_style_context.add_class (Granite.STYLE_CLASS_H3_LABEL);
+-
+- event_listbox = new Gtk.ListBox ();
+- event_listbox.selection_mode = Gtk.SelectionMode.NONE;
+- event_listbox.set_header_func (header_update_func);
+- event_listbox.set_placeholder (placeholder_label);
+- event_listbox.set_sort_func (sort_function);
++ event_listbox = new Widgets.EventsListBox ();
+
+ var scrolled_window = new Gtk.ScrolledWindow (null, null);
+ scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER;
+@@ -84,11 +67,11 @@ namespace DateTimeIndicator {
+
+ main_grid = new Gtk.Grid ();
+ main_grid.margin_top = 12;
+- main_grid.attach (calendar, 0, 0);
+- main_grid.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0);
+- main_grid.attach (scrolled_window, 2, 0);
+- main_grid.attach (new Wingpanel.Widgets.Separator (), 0, 2, 3);
+- main_grid.attach (settings_button, 0, 3, 3);
++ main_grid.attach (calendar, 0, 0);
++ main_grid.attach (new Wingpanel.Widgets.Separator (), 0, 1);
++ main_grid.attach (settings_button, 0, 2);
++ main_grid.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0, 1, 3);
++ main_grid.attach (scrolled_window, 2, 0, 1, 3);
+
+ var size_group = new Gtk.SizeGroup (Gtk.SizeGroupMode.HORIZONTAL);
+ size_group.add_widget (calendar);
+@@ -119,52 +102,6 @@ namespace DateTimeIndicator {
+ return main_grid;
+ }
+
+- private void header_update_func (Gtk.ListBoxRow lbrow, Gtk.ListBoxRow? lbbefore) {
+- var row = (EventRow) lbrow;
+- if (lbbefore != null) {
+- var before = (EventRow) lbbefore;
+- if (row.is_allday == before.is_allday) {
+- row.set_header (null);
+- return;
+- }
+-
+- if (row.is_allday != before.is_allday) {
+- var header_label = new Granite.HeaderLabel (_("During the Day"));
+- header_label.margin_start = header_label.margin_end = 6;
+-
+- row.set_header (header_label);
+- return;
+- }
+- } else {
+- if (row.is_allday) {
+- var allday_header = new Granite.HeaderLabel (_("All Day"));
+- allday_header.margin_start = allday_header.margin_end = 6;
+-
+- row.set_header (allday_header);
+- }
+- return;
+- }
+- }
+-
+- [CCode (instance_pos = -1)]
+- private int sort_function (Gtk.ListBoxRow child1, Gtk.ListBoxRow child2) {
+- var e1 = (EventRow) child1;
+- var e2 = (EventRow) child2;
+-
+- if (e1.start_time.compare (e2.start_time) != 0) {
+- return e1.start_time.compare (e2.start_time);
+- }
+-
+- // If they have the same date, sort them wholeday first
+- if (e1.is_allday) {
+- return -1;
+- } else if (e2.is_allday) {
+- return 1;
+- }
+-
+- return 0;
+- }
+-
+ private void update_events_model (E.Source source, Gee.Collection events) {
+ idle_update_events ();
+ }
+@@ -174,42 +111,12 @@ namespace DateTimeIndicator {
+ GLib.Source.remove (update_events_idle_source);
+ }
+
+- update_events_idle_source = GLib.Idle.add (update_events);
+- }
+-
+- private bool update_events () {
+- foreach (unowned Gtk.Widget widget in event_listbox.get_children ()) {
+- widget.destroy ();
+- }
++ update_events_idle_source = GLib.Idle.add (() => {
++ event_listbox.update_events (calendar.selected_date);
+
+- if (calendar.selected_date == null) {
+ update_events_idle_source = 0;
+ return GLib.Source.REMOVE;
+- }
+-
+- var date = calendar.selected_date;
+-
+- var model = Models.CalendarModel.get_default ();
+-
+- var events_on_day = new Gee.TreeMap ();
+-
+- model.source_events.@foreach ((source, component_map) => {
+- foreach (var comp in component_map.get_values ()) {
+- if (Util.calcomp_is_on_day (comp, date)) {
+- unowned ICal.Component ical = comp.get_icalcomponent ();
+- var event_uid = ical.get_uid ();
+- if (!events_on_day.has_key (event_uid)) {
+- events_on_day[event_uid] = new EventRow (date, ical, source);
+-
+- event_listbox.add (events_on_day[event_uid]);
+- }
+- }
+- }
+ });
+-
+- event_listbox.show_all ();
+- update_events_idle_source = 0;
+- return GLib.Source.REMOVE;
+ }
+
+ public override void opened () {
+diff --git a/src/Widgets/EventsListBox.vala b/src/Widgets/EventsListBox.vala
+new file mode 100644
+index 0000000..547e4c5
+--- /dev/null
++++ b/src/Widgets/EventsListBox.vala
+@@ -0,0 +1,102 @@
++namespace DateTimeIndicator {
++ public class Widgets.EventsListBox : Gtk.ListBox {
++
++ public EventsListBox () {
++ selection_mode = Gtk.SelectionMode.NONE;
++
++ var placeholder_label = new Gtk.Label (_("No Events on This Day"));
++ placeholder_label.wrap = true;
++ placeholder_label.wrap_mode = Pango.WrapMode.WORD;
++ placeholder_label.margin_start = 12;
++ placeholder_label.margin_end = 12;
++ placeholder_label.max_width_chars = 20;
++ placeholder_label.justify = Gtk.Justification.CENTER;
++ placeholder_label.show_all ();
++
++ var placeholder_style_context = placeholder_label.get_style_context ();
++ placeholder_style_context.add_class (Gtk.STYLE_CLASS_DIM_LABEL);
++ placeholder_style_context.add_class (Granite.STYLE_CLASS_H3_LABEL);
++
++ set_header_func (header_update_func);
++ set_placeholder (placeholder_label);
++ set_sort_func (sort_function);
++ }
++
++ public void update_events (GLib.DateTime? selected_date) {
++ foreach (unowned Gtk.Widget widget in get_children ()) {
++ widget.destroy ();
++ }
++
++ if (selected_date == null) {
++ return;
++ }
++
++ var model = Models.CalendarModel.get_default ();
++
++ var events_on_day = new Gee.TreeMap ();
++
++ model.source_events.@foreach ((source, component_map) => {
++ foreach (var comp in component_map.get_values ()) {
++ if (Util.calcomp_is_on_day (comp, selected_date)) {
++ unowned ICal.Component ical = comp.get_icalcomponent ();
++ var event_uid = ical.get_uid ();
++ if (!events_on_day.has_key (event_uid)) {
++ events_on_day[event_uid] = new EventRow (selected_date, ical, source);
++
++ add (events_on_day[event_uid]);
++ }
++ }
++ }
++ });
++
++ show_all ();
++ return;
++ }
++
++ private void header_update_func (Gtk.ListBoxRow lbrow, Gtk.ListBoxRow? lbbefore) {
++ var row = (EventRow) lbrow;
++ if (lbbefore != null) {
++ var before = (EventRow) lbbefore;
++ if (row.is_allday == before.is_allday) {
++ row.set_header (null);
++ return;
++ }
++
++ if (row.is_allday != before.is_allday) {
++ var header_label = new Granite.HeaderLabel (_("During the Day"));
++ header_label.margin_start = header_label.margin_end = 6;
++
++ row.set_header (header_label);
++ return;
++ }
++ } else {
++ if (row.is_allday) {
++ var allday_header = new Granite.HeaderLabel (_("All Day"));
++ allday_header.margin_start = allday_header.margin_end = 6;
++
++ row.set_header (allday_header);
++ }
++ return;
++ }
++ }
++
++ [CCode (instance_pos = -1)]
++ private int sort_function (Gtk.ListBoxRow child1, Gtk.ListBoxRow child2) {
++ var e1 = (EventRow) child1;
++ var e2 = (EventRow) child2;
++
++ if (e1.start_time.compare (e2.start_time) != 0) {
++ return e1.start_time.compare (e2.start_time);
++ }
++
++ // If they have the same date, sort them wholeday first
++ if (e1.is_allday) {
++ return -1;
++ } else if (e2.is_allday) {
++ return 1;
++ }
++
++ return 0;
++ }
++ }
++}
+
+From 262d91676f78f031bcfbff637344e52c63ab89bd Mon Sep 17 00:00:00 2001
+From: Dirli
+Date: Sat, 11 Apr 2020 21:56:33 +0300
+Subject: [PATCH 3/8] added event manager
+
+---
+ meson.build | 1 +
+ src/Indicator.vala | 38 ++++--
+ src/Models/CalendarModel.vala | 224 +------------------------------
+ src/Services/EventsManager.vala | 226 ++++++++++++++++++++++++++++++++
+ src/Util/Util.vala | 57 ++------
+ src/Widgets/CalendarView.vala | 9 ++
+ src/Widgets/EventsListBox.vala | 7 +-
+ src/Widgets/Grid.vala | 31 +++++
+ src/Widgets/GridDay.vala | 111 +++++++++++-----
+ 9 files changed, 385 insertions(+), 319 deletions(-)
+ create mode 100644 src/Services/EventsManager.vala
+
+diff --git a/meson.build b/meson.build
+index 1b52276..e348e3d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -50,6 +50,7 @@ shared_module(
+ 'src/Widgets/Grid.vala',
+ 'src/Widgets/GridDay.vala',
+ 'src/Widgets/PanelLabel.vala',
++ 'src/Services/EventsManager.vala',
+ 'src/Services/TimeManager.vala',
+ dependencies: [
+ dependency('glib-2.0'),
+diff --git a/src/Indicator.vala b/src/Indicator.vala
+index 6a8d001..bf4358f 100644
+--- a/src/Indicator.vala
++++ b/src/Indicator.vala
+@@ -24,9 +24,14 @@ namespace DateTimeIndicator {
+ private Widgets.PanelLabel panel_label;
+ private Widgets.CalendarView calendar;
+ private Widgets.EventsListBox event_listbox;
++
++ private Services.EventsManager event_manager;
++
+ private Gtk.Grid main_grid;
+ private uint update_events_idle_source = 0;
+
++ private bool opened_widget = false;
++
+ public Indicator () {
+ Object (
+ code_name: Wingpanel.Indicator.DATETIME,
+@@ -56,10 +61,22 @@ namespace DateTimeIndicator {
+ calendar = new Widgets.CalendarView ();
+ calendar.margin_bottom = 6;
+
++ event_manager = new Services.EventsManager ();
++ event_manager.events_updated.connect (update_events_model);
++ event_manager.events_added.connect ((source, events) => {
++ calendar.add_event_dots (source, events);
++ update_events_model (source, events);
++ });
++ event_manager.events_removed.connect ((source, events) => {
++ calendar.remove_event_dots (source, events);
++ update_events_model (source, events);
++ });
++
+ event_listbox = new Widgets.EventsListBox ();
+
+ var scrolled_window = new Gtk.ScrolledWindow (null, null);
+ scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER;
++ scrolled_window.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC;
+ scrolled_window.add (event_listbox);
+
+ var settings_button = new Gtk.ModelButton ();
+@@ -90,6 +107,12 @@ namespace DateTimeIndicator {
+ close ();
+ });
+
++ var model = Models.CalendarModel.get_default ();
++ model.notify["month-start"].connect (() => {
++ model.compute_ranges ();
++ event_manager.load_all_sources ();
++ });
++
+ settings_button.clicked.connect (() => {
+ try {
+ AppInfo.launch_default_for_uri ("settings://time", null);
+@@ -103,7 +126,9 @@ namespace DateTimeIndicator {
+ }
+
+ private void update_events_model (E.Source source, Gee.Collection events) {
+- idle_update_events ();
++ if (opened_widget) {
++ idle_update_events ();
++ }
+ }
+
+ private void idle_update_events () {
+@@ -112,7 +137,7 @@ namespace DateTimeIndicator {
+ }
+
+ update_events_idle_source = GLib.Idle.add (() => {
+- event_listbox.update_events (calendar.selected_date);
++ event_listbox.update_events (calendar.selected_date, event_manager.source_events);
+
+ update_events_idle_source = 0;
+ return GLib.Source.REMOVE;
+@@ -122,18 +147,15 @@ namespace DateTimeIndicator {
+ public override void opened () {
+ calendar.show_today ();
+
+- Models.CalendarModel.get_default ().events_added.connect (update_events_model);
+- Models.CalendarModel.get_default ().events_updated.connect (update_events_model);
+- Models.CalendarModel.get_default ().events_removed.connect (update_events_model);
++ opened_widget = true;
+ }
+
+ public override void closed () {
+- Models.CalendarModel.get_default ().events_added.disconnect (update_events_model);
+- Models.CalendarModel.get_default ().events_updated.disconnect (update_events_model);
+- Models.CalendarModel.get_default ().events_removed.disconnect (update_events_model);
++ opened_widget = false;
+ }
+ }
+ }
++
+ public Wingpanel.Indicator get_indicator (Module module) {
+ debug ("Activating DateTime Indicator");
+ var indicator = new DateTimeIndicator.Indicator ();
+diff --git a/src/Models/CalendarModel.vala b/src/Models/CalendarModel.vala
+index 965b93e..d60a9ac 100644
+--- a/src/Models/CalendarModel.vala
++++ b/src/Models/CalendarModel.vala
+@@ -35,17 +35,6 @@ namespace DateTimeIndicator {
+ /* The start of week, ie. Monday=1 or Sunday=7 */
+ public GLib.DateWeekday week_starts_on { get; set; }
+
+- public HashTable> source_events { get; private set; }
+-
+- /* Notifies when events are added, updated, or removed */
+- public signal void events_added (E.Source source, Gee.Collection events);
+- public signal void events_updated (E.Source source, Gee.Collection events);
+- public signal void events_removed (E.Source source, Gee.Collection events);
+-
+- private E.SourceRegistry registry { get; private set; }
+- private HashTable source_client;
+- private HashTable source_view;
+-
+ private static CalendarModel? calendar_model = null;
+
+ public static CalendarModel get_default () {
+@@ -59,12 +48,6 @@ namespace DateTimeIndicator {
+ }
+
+ construct {
+- open.begin ();
+-
+- source_client = new HashTable (str_hash, str_equal);
+- source_events = new HashTable > (Util.source_hash_func, Util.source_equal_func);
+- source_view = new HashTable (str_hash, str_equal);
+-
+ int week_start = Posix.NLTime.FIRST_WEEKDAY.to_string ().data[0];
+ if (week_start >= 1 && week_start <= 7) {
+ week_starts_on = (GLib.DateWeekday) (week_start - 1);
+@@ -72,66 +55,6 @@ namespace DateTimeIndicator {
+
+ month_start = Util.get_start_of_month ();
+ compute_ranges ();
+- notify["month-start"].connect (on_parameter_changed);
+- }
+-
+- private async void open () {
+- try {
+- registry = yield new E.SourceRegistry (null);
+- registry.source_removed.connect (remove_source);
+- registry.source_added.connect ((source) => add_source_async.begin (source));
+-
+- // Add sources
+- registry.list_sources (E.SOURCE_EXTENSION_CALENDAR).foreach ((source) => {
+- E.SourceCalendar cal = (E.SourceCalendar)source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
+- if (cal.selected == true && source.enabled == true) {
+- add_source_async.begin (source);
+- }
+- });
+-
+- load_all_sources ();
+- } catch (GLib.Error error) {
+- critical (error.message);
+- }
+- }
+-
+- private void load_all_sources () {
+- lock (source_client) {
+- foreach (var id in source_client.get_keys ()) {
+- var source = registry.ref_source (id);
+- E.SourceCalendar cal = (E.SourceCalendar)source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
+-
+- if (cal.selected == true && source.enabled == true) {
+- load_source (source);
+- }
+- }
+- }
+- }
+-
+- private void remove_source (E.Source source) {
+- debug ("Removing source '%s'", source.dup_display_name ());
+- /* Already out of the model, so do nothing */
+- unowned string uid = source.get_uid ();
+-
+- if (!source_view.contains (uid)) {
+- return;
+- }
+-
+- var current_view = source_view.get (uid);
+- try {
+- current_view.stop ();
+- } catch (Error e) {
+- warning (e.message);
+- }
+-
+- source_view.remove (uid);
+- lock (source_client) {
+- source_client.remove (uid);
+- }
+-
+- var events = source_events.get (source).get_values ().read_only_view;
+- events_removed (source, events);
+- source_events.remove (source);
+ }
+
+ public void change_month (int relative) {
+@@ -144,7 +67,7 @@ namespace DateTimeIndicator {
+
+ /* --- Helper Methods ---// */
+
+- private void compute_ranges () {
++ public void compute_ranges () {
+ var month_end = month_start.add_full (0, 1, -1);
+
+ int dow = month_start.get_day_of_week ();
+@@ -182,150 +105,5 @@ namespace DateTimeIndicator {
+
+ debug (@"Date ranges: ($data_range_first <= $month_start < $month_end <= $data_range_last)");
+ }
+-
+- private void load_source (E.Source source) {
+- /* create empty source-event map */
+- var events = new Gee.TreeMultiMap (
+- (GLib.CompareDataFunc?) GLib.strcmp,
+- (GLib.CompareDataFunc?) Util.calcomponent_compare_func
+- );
+- source_events.set (source, events);
+- /* query client view */
+- var iso_first = ECal.isodate_from_time_t ((time_t)data_range.first_dt.to_unix ());
+- var iso_last = ECal.isodate_from_time_t ((time_t)data_range.last_dt.add_days (1).to_unix ());
+- var query = @"(occur-in-time-range? (make-time \"$iso_first\") (make-time \"$iso_last\"))";
+-
+- ECal.Client client;
+- lock (source_client) {
+- client = source_client.get (source.dup_uid ());
+- }
+-
+- if (client == null) {
+- return;
+- }
+-
+- debug ("Getting client-view for source '%s'", source.dup_display_name ());
+- client.get_view.begin (query, null, (obj, results) => {
+- var view = on_client_view_received (results, source, client);
+- view.objects_added.connect ((objects) => on_objects_added (source, client, objects));
+- view.objects_removed.connect ((objects) => on_objects_removed (source, client, objects));
+- view.objects_modified.connect ((objects) => on_objects_modified (source, client, objects));
+- try {
+- view.start ();
+- } catch (Error e) {
+- critical (e.message);
+- }
+-
+- source_view.set (source.dup_uid (), view);
+- });
+- }
+-
+- private async void add_source_async (E.Source source) {
+- debug ("Adding source '%s'", source.dup_display_name ());
+- try {
+- var client = (ECal.Client) ECal.Client.connect_sync (source, ECal.ClientSourceType.EVENTS, -1, null);
+- source_client.insert (source.dup_uid (), client);
+- } catch (Error e) {
+- critical (e.message);
+- }
+-
+- Idle.add (() => {
+- load_source (source);
+-
+- return false;
+- });
+- }
+-
+- private void debug_event (E.Source source, ECal.Component event) {
+- unowned ICal.Component comp = event.get_icalcomponent ();
+- debug (@"Event ['$(comp.get_summary())', $(source.dup_display_name()), $(comp.get_uid()))]");
+- }
+-
+- /* --- Signal Handlers ---// */
+- private void on_parameter_changed () {
+- compute_ranges ();
+- load_all_sources ();
+- }
+-
+- private ECal.ClientView on_client_view_received (AsyncResult results, E.Source source, ECal.Client client) {
+- ECal.ClientView view;
+- try {
+- debug ("Received client-view for source '%s'", source.dup_display_name ());
+- bool status = client.get_view.end (results, out view);
+- assert (status == true);
+- } catch (Error e) {
+- critical ("Error loading client-view from source '%s': %s", source.dup_display_name (), e.message);
+- }
+-
+- return view;
+- }
+-
+-#if E_CAL_2_0
+- private void on_objects_added (E.Source source, ECal.Client client, SList objects) {
+-#else
+- private void on_objects_added (E.Source source, ECal.Client client, SList objects) {
+-#endif
+- debug (@"Received $(objects.length()) added event(s) for source '%s'", source.dup_display_name ());
+- var events = source_events.get (source);
+- var added_events = new Gee.ArrayList ((Gee.EqualDataFunc?) Util.calcomponent_equal_func);
+- objects.foreach ((comp) => {
+- unowned string uid = comp.get_uid ();
+-#if E_CAL_2_0
+- client.generate_instances_for_object_sync (comp, (time_t) data_range.first_dt.to_unix (), (time_t) data_range.last_dt.to_unix (), null, (comp, start, end) => {
+- var event = new ECal.Component.from_icalcomponent (comp);
+-#else
+- client.generate_instances_for_object_sync (comp, (time_t) data_range.first_dt.to_unix (), (time_t) data_range.last_dt.to_unix (), (event, start, end) => {
+-#endif
+- debug_event (source, event);
+- events.set (uid, event);
+- added_events.add (event);
+- return true;
+- });
+- });
+- }
+-
+-#if E_CAL_2_0
+- private void on_objects_modified (E.Source source, ECal.Client client, SList objects) {
+-#else
+- private void on_objects_modified (E.Source source, ECal.Client client, SList objects) {
+-#endif
+- debug (@"Received $(objects.length()) modified event(s) for source '%s'", source.dup_display_name ());
+- var updated_events = new Gee.ArrayList ((Gee.EqualDataFunc?) Util.calcomponent_equal_func);
+-
+- objects.foreach ((comp) => {
+- unowned string uid = comp.get_uid ();
+- var events = source_events.get (source).get (uid);
+- updated_events.add_all (events);
+- foreach (var event in events) {
+- debug_event (source, event);
+- }
+- });
+-
+- events_updated (source, updated_events.read_only_view);
+- }
+-
+-#if E_CAL_2_0
+- private void on_objects_removed (E.Source source, ECal.Client client, SList cids) {
+-#else
+- private void on_objects_removed (E.Source source, ECal.Client client, SList cids) {
+-#endif
+- debug (@"Received $(cids.length()) removed event(s) for source '%s'", source.dup_display_name ());
+- var events = source_events.get (source);
+- var removed_events = new Gee.ArrayList ((Gee.EqualDataFunc?) Util.calcomponent_equal_func);
+-
+- cids.foreach ((cid) => {
+- if (cid == null) {
+- return;
+- }
+-
+- var comps = events.get (cid.get_uid ());
+- foreach (ECal.Component event in comps) {
+- removed_events.add (event);
+- debug_event (source, event);
+- }
+- });
+-
+- events_removed (source, removed_events.read_only_view);
+- }
+ }
+ }
+diff --git a/src/Services/EventsManager.vala b/src/Services/EventsManager.vala
+new file mode 100644
+index 0000000..d939777
+--- /dev/null
++++ b/src/Services/EventsManager.vala
+@@ -0,0 +1,226 @@
++namespace DateTimeIndicator {
++ public class Services.EventsManager : GLib.Object {
++ public signal void events_added (E.Source source, Gee.Collection events);
++ public signal void events_updated (E.Source source, Gee.Collection events);
++ public signal void events_removed (E.Source source, Gee.Collection events);
++
++ public HashTable> source_events { get; private set; }
++
++ private E.SourceRegistry registry { get; private set; }
++ private HashTable source_client;
++ private HashTable source_view;
++
++ public EventsManager () {
++
++ }
++
++ construct {
++ source_client = new HashTable (str_hash, str_equal);
++ source_events = new HashTable > (Util.source_hash_func, Util.source_equal_func);
++ source_view = new HashTable (str_hash, str_equal);
++
++ open.begin ();
++ }
++
++ private async void open () {
++ try {
++ registry = yield new E.SourceRegistry (null);
++ registry.source_removed.connect (remove_source);
++ registry.source_added.connect ((source) => add_source_async.begin (source));
++
++ // Add sources
++ registry.list_sources (E.SOURCE_EXTENSION_CALENDAR).foreach ((source) => {
++ E.SourceCalendar cal = (E.SourceCalendar)source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
++ if (cal.selected == true && source.enabled == true) {
++ add_source_async.begin (source);
++ }
++ });
++
++ load_all_sources ();
++ } catch (GLib.Error error) {
++ critical (error.message);
++ }
++ }
++
++ public void load_all_sources () {
++ lock (source_client) {
++ foreach (var id in source_client.get_keys ()) {
++ var source = registry.ref_source (id);
++ E.SourceCalendar cal = (E.SourceCalendar)source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
++
++ if (cal.selected == true && source.enabled == true) {
++ load_source (source);
++ }
++ }
++ }
++ }
++
++ private void remove_source (E.Source source) {
++ debug ("Removing source '%s'", source.dup_display_name ());
++ /* Already out of the model, so do nothing */
++ unowned string uid = source.get_uid ();
++
++ if (!source_view.contains (uid)) {
++ return;
++ }
++
++ var current_view = source_view.get (uid);
++ try {
++ current_view.stop ();
++ } catch (Error e) {
++ warning (e.message);
++ }
++
++ source_view.remove (uid);
++ lock (source_client) {
++ source_client.remove (uid);
++ }
++
++ var events = source_events.get (source).get_values ().read_only_view;
++ events_removed (source, events);
++ source_events.remove (source);
++ }
++
++ private void load_source (E.Source source) {
++ var model = Models.CalendarModel.get_default ();
++
++ /* create empty source-event map */
++ var events = new Gee.TreeMultiMap (
++ (GLib.CompareDataFunc?) GLib.strcmp,
++ (GLib.CompareDataFunc?) Util.calcomponent_compare_func
++ );
++ source_events.set (source, events);
++ /* query client view */
++ var iso_first = ECal.isodate_from_time_t ((time_t) model.data_range.first_dt.to_unix ());
++ var iso_last = ECal.isodate_from_time_t ((time_t) model.data_range.last_dt.add_days (1).to_unix ());
++ var query = @"(occur-in-time-range? (make-time \"$iso_first\") (make-time \"$iso_last\"))";
++
++ ECal.Client client;
++ lock (source_client) {
++ client = source_client.get (source.dup_uid ());
++ }
++
++ if (client == null) {
++ return;
++ }
++
++ debug ("Getting client-view for source '%s'", source.dup_display_name ());
++ client.get_view.begin (query, null, (obj, results) => {
++ var view = on_client_view_received (results, source, client);
++ view.objects_added.connect ((objects) => on_objects_added (source, client, objects));
++ view.objects_removed.connect ((objects) => on_objects_removed (source, client, objects));
++ view.objects_modified.connect ((objects) => on_objects_modified (source, client, objects));
++ try {
++ view.start ();
++ } catch (Error e) {
++ critical (e.message);
++ }
++
++ source_view.set (source.dup_uid (), view);
++ });
++ }
++
++ private async void add_source_async (E.Source source) {
++ debug ("Adding source '%s'", source.dup_display_name ());
++ try {
++ var client = (ECal.Client) ECal.Client.connect_sync (source, ECal.ClientSourceType.EVENTS, -1, null);
++ source_client.insert (source.dup_uid (), client);
++ } catch (Error e) {
++ critical (e.message);
++ }
++
++ Idle.add (() => {
++ load_source (source);
++
++ return false;
++ });
++ }
++
++ private void debug_event (E.Source source, ECal.Component event) {
++ unowned ICal.Component comp = event.get_icalcomponent ();
++ debug (@"Event ['$(comp.get_summary())', $(source.dup_display_name()), $(comp.get_uid()))]");
++ }
++
++ private ECal.ClientView on_client_view_received (AsyncResult results, E.Source source, ECal.Client client) {
++ ECal.ClientView view;
++ try {
++ debug ("Received client-view for source '%s'", source.dup_display_name ());
++ bool status = client.get_view.end (results, out view);
++ assert (status == true);
++ } catch (Error e) {
++ critical ("Error loading client-view from source '%s': %s", source.dup_display_name (), e.message);
++ }
++
++ return view;
++ }
++
++#if E_CAL_2_0
++ private void on_objects_added (E.Source source, ECal.Client client, SList objects) {
++#else
++ private void on_objects_added (E.Source source, ECal.Client client, SList objects) {
++#endif
++ debug (@"Received $(objects.length()) added event(s) for source '%s'", source.dup_display_name ());
++ var events = source_events.get (source);
++ var added_events = new Gee.ArrayList ((Gee.EqualDataFunc?) Util.calcomponent_equal_func);
++ var model = Models.CalendarModel.get_default ();
++ objects.foreach ((comp) => {
++ unowned string uid = comp.get_uid ();
++#if E_CAL_2_0
++ client.generate_instances_for_object_sync (comp, (time_t) model.data_range.first_dt.to_unix (), (time_t) model.data_range.last_dt.to_unix (), null, (comp, start, end) => {
++ var event = new ECal.Component.from_icalcomponent (comp);
++#else
++ client.generate_instances_for_object_sync (comp, (time_t) model.data_range.first_dt.to_unix (), (time_t) model.data_range.last_dt.to_unix (), (event, start, end) => {
++#endif
++ debug_event (source, event);
++ events.set (uid, event);
++ added_events.add (event);
++ return true;
++ });
++ });
++ }
++
++#if E_CAL_2_0
++ private void on_objects_modified (E.Source source, ECal.Client client, SList objects) {
++#else
++ private void on_objects_modified (E.Source source, ECal.Client client, SList objects) {
++#endif
++ debug (@"Received $(objects.length()) modified event(s) for source '%s'", source.dup_display_name ());
++ var updated_events = new Gee.ArrayList ((Gee.EqualDataFunc?) Util.calcomponent_equal_func);
++
++ objects.foreach ((comp) => {
++ unowned string uid = comp.get_uid ();
++ var events = source_events.get (source).get (uid);
++ updated_events.add_all (events);
++ foreach (var event in events) {
++ debug_event (source, event);
++ }
++ });
++
++ events_updated (source, updated_events.read_only_view);
++ }
++
++#if E_CAL_2_0
++ private void on_objects_removed (E.Source source, ECal.Client client, SList cids) {
++#else
++ private void on_objects_removed (E.Source source, ECal.Client client, SList cids) {
++#endif
++ debug (@"Received $(cids.length()) removed event(s) for source '%s'", source.dup_display_name ());
++ var events = source_events.get (source);
++ var removed_events = new Gee.ArrayList ((Gee.EqualDataFunc?) Util.calcomponent_equal_func);
++
++ cids.foreach ((cid) => {
++ if (cid == null) {
++ return;
++ }
++
++ var comps = events.get (cid.get_uid ());
++ foreach (ECal.Component event in comps) {
++ removed_events.add (event);
++ debug_event (source, event);
++ }
++ });
++
++ events_removed (source, removed_events.read_only_view);
++ }
++ }
++}
+diff --git a/src/Util/Util.vala b/src/Util/Util.vala
+index c261f4b..b0bdf98 100644
+--- a/src/Util/Util.vala
++++ b/src/Util/Util.vala
+@@ -20,47 +20,6 @@
+ */
+
+ namespace DateTimeIndicator.Util {
+- static bool has_scrolled = false;
+-
+- public bool on_scroll_event (Gdk.EventScroll event) {
+- double delta_x;
+- double delta_y;
+- event.get_scroll_deltas (out delta_x, out delta_y);
+-
+- double choice = delta_x;
+-
+- if (((int)delta_x).abs () < ((int)delta_y).abs ()) {
+- choice = delta_y;
+- }
+-
+- /* It's mouse scroll ! */
+- if (choice == 1 || choice == -1) {
+- Models.CalendarModel.get_default ().change_month ((int)choice);
+-
+- return true;
+- }
+-
+- if (has_scrolled == true) {
+- return true;
+- }
+-
+- if (choice > 0.3) {
+- reset_timer.begin ();
+- Models.CalendarModel.get_default ().change_month (1);
+-
+- return true;
+- }
+-
+- if (choice < -0.3) {
+- reset_timer.begin ();
+- Models.CalendarModel.get_default ().change_month (-1);
+-
+- return true;
+- }
+-
+- return false;
+- }
+-
+ public GLib.DateTime get_start_of_month (owned GLib.DateTime? date = null) {
+ if (date == null) {
+ date = new GLib.DateTime.now_local ();
+@@ -225,12 +184,12 @@ namespace DateTimeIndicator.Util {
+ return a.dup_uid () == b.dup_uid ();
+ }
+
+- public async void reset_timer () {
+- has_scrolled = true;
+- Timeout.add (500, () => {
+- has_scrolled = false;
+-
+- return false;
+- });
+- }
++ // public async void reset_timer () {
++ // has_scrolled = true;
++ // Timeout.add (500, () => {
++ // has_scrolled = false;
++ //
++ // return false;
++ // });
++ // }
+ }
+diff --git a/src/Widgets/CalendarView.vala b/src/Widgets/CalendarView.vala
+index 65cee28..070580f 100644
+--- a/src/Widgets/CalendarView.vala
++++ b/src/Widgets/CalendarView.vala
+@@ -181,5 +181,14 @@ namespace DateTimeIndicator {
+
+ stack.set_visible_child (big_grid);
+ }
++
++ public void add_event_dots (E.Source source, Gee.Collection events) {
++ grid.add_event_dots (source, events);
++ }
++
++
++ public void remove_event_dots (E.Source source, Gee.Collection events) {
++ grid.remove_event_dots (source, events);
++ }
+ }
+ }
+diff --git a/src/Widgets/EventsListBox.vala b/src/Widgets/EventsListBox.vala
+index 547e4c5..c25af2e 100644
+--- a/src/Widgets/EventsListBox.vala
++++ b/src/Widgets/EventsListBox.vala
+@@ -1,6 +1,5 @@
+ namespace DateTimeIndicator {
+ public class Widgets.EventsListBox : Gtk.ListBox {
+-
+ public EventsListBox () {
+ selection_mode = Gtk.SelectionMode.NONE;
+
+@@ -22,7 +21,7 @@ namespace DateTimeIndicator {
+ set_sort_func (sort_function);
+ }
+
+- public void update_events (GLib.DateTime? selected_date) {
++ public void update_events (GLib.DateTime? selected_date, HashTable> source_events) {
+ foreach (unowned Gtk.Widget widget in get_children ()) {
+ widget.destroy ();
+ }
+@@ -31,11 +30,9 @@ namespace DateTimeIndicator {
+ return;
+ }
+
+- var model = Models.CalendarModel.get_default ();
+-
+ var events_on_day = new Gee.TreeMap ();
+
+- model.source_events.@foreach ((source, component_map) => {
++ source_events.@foreach ((source, component_map) => {
+ foreach (var comp in component_map.get_values ()) {
+ if (Util.calcomp_is_on_day (comp, selected_date)) {
+ unowned ICal.Component ical = comp.get_icalcomponent ();
+diff --git a/src/Widgets/Grid.vala b/src/Widgets/Grid.vala
+index 165d11d..660f212 100644
+--- a/src/Widgets/Grid.vala
++++ b/src/Widgets/Grid.vala
+@@ -261,5 +261,36 @@ namespace DateTimeIndicator {
+ return date.get_year () * 10000 + date.get_month () * 100 + date.get_day_of_month ();
+ }
+
++ public void add_event_dots (E.Source source, Gee.Collection events) {
++ data.foreach ((entry) => {
++
++ foreach (var component in events) {
++ if (entry.value.skip_day ()) {
++ return true;
++ }
++
++ if (Util.calcomp_is_on_day (component, entry.value.date)) {
++ entry.value.add_dots (source, component.get_icalcomponent ());
++ }
++ }
++
++ entry.value.show_event_grid ();
++
++ return true;
++ });
++ }
++
++ public void remove_event_dots (E.Source source, Gee.Collection events) {
++ foreach (var component in events) {
++ unowned ICal.Component ical = component.get_icalcomponent ();
++ var event_uid = ical.get_uid ();
++ data.foreach ((entry) => {
++ if (entry.value.exist_event (event_uid)) {
++ entry.value.remove_dots (event_uid);
++ }
++ return true;
++ });
++ }
++ }
+ }
+ }
+diff --git a/src/Widgets/GridDay.vala b/src/Widgets/GridDay.vala
+index 8c44443..00f82ea 100644
+--- a/src/Widgets/GridDay.vala
++++ b/src/Widgets/GridDay.vala
+@@ -31,6 +31,8 @@ namespace DateTimeIndicator {
+
+ public GLib.DateTime date { get; construct set; }
+
++ private bool has_scrolled = false;
++
+ private static Gtk.CssProvider provider;
+ private static Models.CalendarModel model;
+
+@@ -79,59 +81,100 @@ namespace DateTimeIndicator {
+ // Signals and handlers
+ button_press_event.connect (on_button_press);
+ key_press_event.connect (on_key_press);
+- scroll_event.connect ((event) => {return Util.on_scroll_event (event);});
++ scroll_event.connect (on_scroll_event);
+
+ notify["date"].connect (() => {
+ label.label = date.get_day_of_month ().to_string ();
+ });
+
+ event_dots = new Gee.HashMap ();
+-
+- model.events_added.connect (add_event_dots);
+- model.events_removed.connect (remove_event_dots);
+ }
+
+- private void add_event_dots (E.Source source, Gee.Collection events) {
+- foreach (var component in events) {
+- if (event_dots.size >= 3) {
+- return;
+- }
++ public bool on_scroll_event (Gdk.EventScroll event) {
++ double delta_x;
++ double delta_y;
++ event.get_scroll_deltas (out delta_x, out delta_y);
++
++ double choice = delta_x;
++
++ if (((int)delta_x).abs () < ((int)delta_y).abs ()) {
++ choice = delta_y;
++ }
++
++ /* It's mouse scroll ! */
++ if (choice == 1 || choice == -1) {
++ Models.CalendarModel.get_default ().change_month ((int)choice);
+
+- if (Util.calcomp_is_on_day (component, date)) {
+- unowned ICal.Component ical = component.get_icalcomponent ();
++ return true;
++ }
+
+- var event_uid = ical.get_uid ();
+- if (!event_dots.has_key (event_uid)) {
+- var event_dot = new Gtk.Image ();
+- event_dot.gicon = new ThemedIcon ("pager-checked-symbolic");
+- event_dot.pixel_size = 6;
++ if (has_scrolled == true) {
++ return true;
++ }
+
+- unowned Gtk.StyleContext style_context = event_dot.get_style_context ();
+- style_context.add_class (Granite.STYLE_CLASS_ACCENT);
+- style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++ if (choice > 0.3) {
++ reset_timer.begin ();
++ Models.CalendarModel.get_default ().change_month (1);
+
+- var source_calendar = (E.SourceCalendar?) source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
+- Util.set_event_calendar_color (source_calendar, event_dot);
++ return true;
++ }
+
+- event_dots[event_uid] = event_dot;
++ if (choice < -0.3) {
++ reset_timer.begin ();
++ Models.CalendarModel.get_default ().change_month (-1);
+
+- event_grid.add (event_dot);
+- }
+- }
++ return true;
+ }
+
++ return false;
++ }
++
++ public async void reset_timer () {
++ has_scrolled = true;
++ Timeout.add (500, () => {
++ has_scrolled = false;
++
++ return false;
++ });
++ }
++
++ public bool skip_day () {
++ return event_dots.size >= 3 ? true : false;
++ }
++
++ public void show_event_grid () {
+ event_grid.show_all ();
+ }
+
+- private void remove_event_dots (E.Source source, Gee.Collection events) {
+- foreach (var component in events) {
+- unowned ICal.Component ical = component.get_icalcomponent ();
+- var event_uid = ical.get_uid ();
+- var dot = event_dots[event_uid];
+- if (dot != null) {
+- dot.destroy ();
+- event_dots.remove (event_uid);
+- }
++ public void add_dots (E.Source source, ICal.Component ical) {
++ var event_uid = ical.get_uid ();
++ if (!event_dots.has_key (event_uid)) {
++ var event_dot = new Gtk. Image ();
++ event_dot.gicon = new ThemedIcon ("pager-checked-symbolic");
++ event_dot.pixel_size = 6;
++
++ unowned Gtk.StyleContext style_context = event_dot.get_style_context ();
++ style_context.add_class (Granite.STYLE_CLASS_ACCENT);
++ style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++
++ var source_calendar = (E.SourceCalendar?) source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
++ Util.set_event_calendar_color (source_calendar, event_dot);
++
++ event_dots[event_uid] = event_dot;
++
++ event_grid.add (event_dot);
++ }
++ }
++
++ public bool exist_event (string ical_uid) {
++ return event_dots.has_key (ical_uid);
++ }
++
++ public void remove_dots (string event_uid) {
++ var dot = event_dots[event_uid];
++ if (dot != null) {
++ dot.destroy ();
++ event_dots.unset (event_uid);
+ }
+ }
+
+
+From c99db5e63b9c48aa1d069b97b98b0c07481de27d Mon Sep 17 00:00:00 2001
+From: Dirli
+Date: Sat, 11 Apr 2020 23:44:14 +0300
+Subject: [PATCH 4/8] rename calendar elements
+
+---
+ meson.build | 4 +--
+ .../{GridDay.vala => CalendarDay.vala} | 4 +--
+ src/Widgets/{Grid.vala => CalendarGrid.vala} | 26 +++++++--------
+ src/Widgets/CalendarView.vala | 33 +++++++++----------
+ 4 files changed, 33 insertions(+), 34 deletions(-)
+ rename src/Widgets/{GridDay.vala => CalendarDay.vala} (98%)
+ rename src/Widgets/{Grid.vala => CalendarGrid.vala} (91%)
+
+diff --git a/meson.build b/meson.build
+index e348e3d..dcdd9b2 100644
+--- a/meson.build
++++ b/meson.build
+@@ -44,11 +44,11 @@ shared_module(
+ 'src/Util/DateRange.vala',
+ 'src/Util/Util.vala',
+ 'src/Models/CalendarModel.vala',
++ 'src/Widgets/CalendarDay.vala',
++ 'src/Widgets/CalendarGrid.vala',
+ 'src/Widgets/CalendarView.vala',
+ 'src/Widgets/EventRow.vala',
+ 'src/Widgets/EventsListBox.vala',
+- 'src/Widgets/Grid.vala',
+- 'src/Widgets/GridDay.vala',
+ 'src/Widgets/PanelLabel.vala',
+ 'src/Services/EventsManager.vala',
+ 'src/Services/TimeManager.vala',
+diff --git a/src/Widgets/GridDay.vala b/src/Widgets/CalendarDay.vala
+similarity index 98%
+rename from src/Widgets/GridDay.vala
+rename to src/Widgets/CalendarDay.vala
+index 00f82ea..a5ca920 100644
+--- a/src/Widgets/GridDay.vala
++++ b/src/Widgets/CalendarDay.vala
+@@ -23,7 +23,7 @@ namespace DateTimeIndicator {
+ /**
+ * Represents a single day on the grid.
+ */
+- public class Widgets.GridDay : Gtk.EventBox {
++ public class Widgets.CalendarDay : Gtk.EventBox {
+ /*
+ * Event emitted when the day is double clicked or the ENTER key is pressed.
+ */
+@@ -41,7 +41,7 @@ namespace DateTimeIndicator {
+ private Gtk.Label label;
+ private bool valid_grab = false;
+
+- public GridDay (GLib.DateTime date) {
++ public CalendarDay (GLib.DateTime date) {
+ Object (date: date);
+ }
+
+diff --git a/src/Widgets/Grid.vala b/src/Widgets/CalendarGrid.vala
+similarity index 91%
+rename from src/Widgets/Grid.vala
+rename to src/Widgets/CalendarGrid.vala
+index 660f212..66e2757 100644
+--- a/src/Widgets/Grid.vala
++++ b/src/Widgets/CalendarGrid.vala
+@@ -24,7 +24,7 @@ namespace DateTimeIndicator {
+ /**
+ * Represents the entire date grid as a table.
+ */
+- public class Widgets.Grid : Gtk.Grid {
++ public class Widgets.CalendarGrid : Gtk.Grid {
+ public Util.DateRange grid_range { get; private set; }
+
+ /*
+@@ -34,8 +34,8 @@ namespace DateTimeIndicator {
+
+ public signal void selection_changed (GLib.DateTime new_date);
+
+- private Gee.HashMap data;
+- private GridDay selected_gridday;
++ private Gee.HashMap data;
++ private Widgets.CalendarDay selected_gridday;
+ private Gtk.Label[] header_labels;
+ private Gtk.Revealer[] week_labels;
+
+@@ -61,12 +61,12 @@ namespace DateTimeIndicator {
+
+ Indicator.settings.bind ("show-weeks", week_sep_revealer, "reveal-child", GLib.SettingsBindFlags.DEFAULT);
+
+- data = new Gee.HashMap ();
++ data = new Gee.HashMap ();
+ events |= Gdk.EventMask.SCROLL_MASK;
+ events |= Gdk.EventMask.SMOOTH_SCROLL_MASK;
+ }
+
+- private void on_day_focus_in (GridDay day) {
++ private void on_day_focus_in (Widgets.CalendarDay day) {
+ debug ("on_day_focus_in %s", day.date.to_string ());
+ if (selected_gridday != null) {
+ selected_gridday.set_selected (false);
+@@ -94,7 +94,7 @@ namespace DateTimeIndicator {
+ Gee.List dates = grid_range.to_list ();
+ for (int i = 0; i < dates.size; i++) {
+ var date = dates[i];
+- GridDay? day = data[day_hash (date)];
++ Widgets.CalendarDay? day = data[day_hash (date)];
+ if (day != null && day.name == "today") {
+ day.grab_focus_force ();
+ return;
+@@ -119,7 +119,7 @@ namespace DateTimeIndicator {
+
+ var new_dates = new_range.to_list ();
+
+- var data_new = new Gee.HashMap ();
++ var data_new = new Gee.HashMap ();
+
+ /* Assert that a valid number of weeks should be displayed */
+ assert (new_dates.size % 7 == 0);
+@@ -138,7 +138,7 @@ namespace DateTimeIndicator {
+
+ for (i = 0; i < new_dates.size; i++) {
+ var new_date = new_dates[i];
+- GridDay day;
++ Widgets.CalendarDay day;
+
+ if (i < old_dates.size) {
+ /* A widget already exists for this date, just change it */
+@@ -147,7 +147,7 @@ namespace DateTimeIndicator {
+ day = update_day (data[day_hash (old_date)], new_date, today, month_start);
+ } else {
+ /* Still update_day to get the color of etc. right */
+- day = update_day (new GridDay (new_date), new_date, today, month_start);
++ day = update_day (new Widgets.CalendarDay (new_date), new_date, today, month_start);
+ day.on_event_add.connect ((date) => on_event_add (date));
+ day.scroll_event.connect ((event) => { scroll_event (event); return false; });
+ day.focus_in_event.connect ((event) => {
+@@ -182,9 +182,9 @@ namespace DateTimeIndicator {
+ }
+
+ /**
+- * Updates the given GridDay so that it shows the given date. Changes to its style etc.
++ * Updates the given CalendarDay so that it shows the given date. Changes to its style etc.
+ */
+- private GridDay update_day (GridDay day, GLib.DateTime new_date, GLib.DateTime today, GLib.DateTime month_start) {
++ private Widgets.CalendarDay update_day (Widgets.CalendarDay day, GLib.DateTime new_date, GLib.DateTime today, GLib.DateTime month_start) {
+ update_today_style (day, new_date, today);
+ if (new_date.get_month () == month_start.get_month ()) {
+ day.sensitive_container (true);
+@@ -237,13 +237,13 @@ namespace DateTimeIndicator {
+ int i = 0;
+ for (i = 0; i < dates.size; i++) {
+ var date = dates[i];
+- GridDay? day = data[day_hash (date)];
++ Widgets.CalendarDay? day = data[day_hash (date)];
+ if (day == null) return;
+ update_today_style (day, date, today);
+ }
+ }
+
+- private void update_today_style (GridDay day, GLib.DateTime date, GLib.DateTime today) {
++ private void update_today_style (Widgets.CalendarDay day, GLib.DateTime date, GLib.DateTime today) {
+ if (date.get_day_of_year () == today.get_day_of_year () && date.get_year () == today.get_year ()) {
+ day.name = "today";
+ day.get_style_context ().add_class (Granite.STYLE_CLASS_ACCENT);
+diff --git a/src/Widgets/CalendarView.vala b/src/Widgets/CalendarView.vala
+index 070580f..db2139c 100644
+--- a/src/Widgets/CalendarView.vala
++++ b/src/Widgets/CalendarView.vala
+@@ -26,7 +26,7 @@ namespace DateTimeIndicator {
+
+ public GLib.DateTime? selected_date { get; private set; }
+
+- private Widgets.Grid grid;
++ private Widgets.CalendarGrid calendar_grid;
+ private Gtk.Stack stack;
+ private Gtk.Grid big_grid;
+
+@@ -105,20 +105,20 @@ namespace DateTimeIndicator {
+ }
+
+ private Gtk.Grid create_big_grid () {
+- grid = new Widgets.Grid ();
+- grid.show_all ();
++ calendar_grid = new Widgets.CalendarGrid ();
++ calendar_grid.show_all ();
+
+- grid.on_event_add.connect ((date) => {
++ calendar_grid.on_event_add.connect ((date) => {
+ show_date_in_maya (date);
+ day_double_click ();
+ });
+
+- grid.selection_changed.connect ((date) => {
++ calendar_grid.selection_changed.connect ((date) => {
+ selected_date = date;
+ selection_changed (date);
+ });
+
+- return grid;
++ return calendar_grid;
+ }
+
+ public void show_today () {
+@@ -131,7 +131,7 @@ namespace DateTimeIndicator {
+ }
+ sync_with_model ();
+
+- grid.set_focus_to_today ();
++ calendar_grid.set_focus_to_today ();
+ }
+
+ // TODO: As far as maya supports it use the Dbus Activation feature to run the calendar-app.
+@@ -156,23 +156,23 @@ namespace DateTimeIndicator {
+ /* Sets the calendar widgets to the date range of the model */
+ private void sync_with_model () {
+ var model = Models.CalendarModel.get_default ();
+- if (grid.grid_range != null && (model.data_range.equals (grid.grid_range) || grid.grid_range.first_dt.compare (model.data_range.first_dt) == 0)) {
+- grid.update_today ();
++ if (calendar_grid.grid_range != null && (model.data_range.equals (calendar_grid.grid_range) || calendar_grid.grid_range.first_dt.compare (model.data_range.first_dt) == 0)) {
++ calendar_grid.update_today ();
+ return; // nothing else to do
+ }
+
+ GLib.DateTime previous_first = null;
+- if (grid.grid_range != null)
+- previous_first = grid.grid_range.first_dt;
++ if (calendar_grid.grid_range != null)
++ previous_first = calendar_grid.grid_range.first_dt;
+
+ big_grid = create_big_grid ();
+ stack.add (big_grid);
+
+- grid.set_range (model.data_range, model.month_start);
+- grid.update_weeks (model.data_range.first_dt, model.num_weeks);
++ calendar_grid.set_range (model.data_range, model.month_start);
++ calendar_grid.update_weeks (model.data_range.first_dt, model.num_weeks);
+
+ if (previous_first != null) {
+- if (previous_first.compare (grid.grid_range.first_dt) == -1) {
++ if (previous_first.compare (calendar_grid.grid_range.first_dt) == -1) {
+ stack.transition_type = Gtk.StackTransitionType.SLIDE_LEFT;
+ } else {
+ stack.transition_type = Gtk.StackTransitionType.SLIDE_RIGHT;
+@@ -183,12 +183,11 @@ namespace DateTimeIndicator {
+ }
+
+ public void add_event_dots (E.Source source, Gee.Collection events) {
+- grid.add_event_dots (source, events);
++ calendar_grid.add_event_dots (source, events);
+ }
+
+-
+ public void remove_event_dots (E.Source source, Gee.Collection events) {
+- grid.remove_event_dots (source, events);
++ calendar_grid.remove_event_dots (source, events);
+ }
+ }
+ }
+
+From 6b1b15305a9c90ff8b7e7244727a225984d34a14 Mon Sep 17 00:00:00 2001
+From: Dirli
+Date: Sun, 12 Apr 2020 03:10:24 +0300
+Subject: [PATCH 5/8] evolution data server now optional
+
+---
+ meson.build | 55 ++++++++++++++---------
+ meson_options.txt | 1 +
+ src/Indicator.vala | 43 ++++++++++--------
+ src/Util/Util.vala | 85 ++++++++++++++++-------------------
+ src/Widgets/CalendarDay.vala | 2 +
+ src/Widgets/CalendarGrid.vala | 2 +
+ src/Widgets/CalendarView.vala | 2 +
+ 7 files changed, 104 insertions(+), 86 deletions(-)
+ create mode 100644 meson_options.txt
+
+diff --git a/meson.build b/meson.build
+index dcdd9b2..5fee9ab 100644
+--- a/meson.build
++++ b/meson.build
+@@ -24,18 +24,40 @@ gresource = gnome.compile_resources(
+ wingpanel_dep = dependency('wingpanel-2.0')
+ wingpanel_indicatorsdir = wingpanel_dep.get_pkgconfig_variable('indicatorsdir', define_variable: ['libdir', libdir])
+
++deps = [
++ dependency('glib-2.0'),
++ dependency('gobject-2.0'),
++ dependency('granite'),
++ dependency('gtk+-3.0'),
++ wingpanel_dep,
++ meson.get_compiler('vala').find_library('posix')
++]
+
+-libecal_dep = dependency('libecal-2.0', required: false)
+-if libecal_dep.found()
+- libical_dep = dependency('libical-glib')
+- add_project_arguments('--define=E_CAL_2_0', language: 'vala')
+- add_project_arguments('-DLIBICAL_GLIB_UNSTABLE_API=1', language: 'c')
+-else
+- libecal_dep = dependency('libecal-1.2', version: '>=3.8.0')
+- libical_dep = dependency('libical')
+- add_project_arguments('--vapidir', join_paths(meson.current_source_dir(), 'vapi'), language: 'vala')
++opt_files = []
++
++if get_option('evo')
++ libecal_dep = dependency ('libecal-2.0', required: false)
++ if libecal_dep.found()
++ deps += dependency('libical-glib')
++ deps += libecal_dep
++ add_project_arguments('--define=E_CAL_2_0', language: 'vala')
++ add_project_arguments('-DLIBICAL_GLIB_UNSTABLE_API=1', language: 'c')
++ else
++ deps += dependency('libecal-1.2', version: '>=3.8.0')
++ deps += dependency('libical')
++ add_project_arguments('--vapidir', join_paths(meson.current_source_dir(), 'vapi'), language: 'vala')
++ endif
++
++ deps += dependency ('libedataserver-1.2')
++ opt_files += files (
++ 'src/Widgets/EventRow.vala',
++ 'src/Widgets/EventsListBox.vala',
++ 'src/Services/EventsManager.vala',
++ )
++ add_project_arguments('--define=USE_EVO', language: 'vala')
+ endif
+
++
+ shared_module(
+ meson.project_name(),
+ gresource,
+@@ -47,21 +69,10 @@ shared_module(
+ 'src/Widgets/CalendarDay.vala',
+ 'src/Widgets/CalendarGrid.vala',
+ 'src/Widgets/CalendarView.vala',
+- 'src/Widgets/EventRow.vala',
+- 'src/Widgets/EventsListBox.vala',
+ 'src/Widgets/PanelLabel.vala',
+- 'src/Services/EventsManager.vala',
+ 'src/Services/TimeManager.vala',
+- dependencies: [
+- dependency('glib-2.0'),
+- dependency('gobject-2.0'),
+- dependency('granite'),
+- dependency('gtk+-3.0'),
+- libecal_dep,
+- dependency('libedataserver-1.2'),
+- libical_dep,
+- wingpanel_dep,
+- ],
++ opt_files,
++ dependencies: deps,
+ install: true,
+ install_dir : wingpanel_indicatorsdir,
+ )
+diff --git a/meson_options.txt b/meson_options.txt
+new file mode 100644
+index 0000000..a1c9f0e
+--- /dev/null
++++ b/meson_options.txt
+@@ -0,0 +1 @@
++option ('evo', type : 'boolean', value : true)
+diff --git a/src/Indicator.vala b/src/Indicator.vala
+index bf4358f..31c7af5 100644
+--- a/src/Indicator.vala
++++ b/src/Indicator.vala
+@@ -23,9 +23,11 @@ namespace DateTimeIndicator {
+
+ private Widgets.PanelLabel panel_label;
+ private Widgets.CalendarView calendar;
+- private Widgets.EventsListBox event_listbox;
+
++#if USE_EVO
++ private Widgets.EventsListBox event_listbox;
+ private Services.EventsManager event_manager;
++#endif
+
+ private Gtk.Grid main_grid;
+ private uint update_events_idle_source = 0;
+@@ -60,7 +62,20 @@ namespace DateTimeIndicator {
+ if (main_grid == null) {
+ calendar = new Widgets.CalendarView ();
+ calendar.margin_bottom = 6;
++ calendar.day_double_click.connect (() => {
++ close ();
++ });
++
++ var settings_button = new Gtk.ModelButton ();
++ settings_button.text = _("Date & Time Settings…");
+
++ main_grid = new Gtk.Grid ();
++ main_grid.margin_top = 12;
++ main_grid.attach (calendar, 0, 0);
++ main_grid.attach (new Wingpanel.Widgets.Separator (), 0, 1);
++ main_grid.attach (settings_button, 0, 2);
++
++#if USE_EVO
+ event_manager = new Services.EventsManager ();
+ event_manager.events_updated.connect (update_events_model);
+ event_manager.events_added.connect ((source, events) => {
+@@ -73,20 +88,16 @@ namespace DateTimeIndicator {
+ });
+
+ event_listbox = new Widgets.EventsListBox ();
++ event_listbox.row_activated.connect ((row) => {
++ calendar.show_date_in_maya (((EventRow) row).date);
++ close ();
++ });
+
+ var scrolled_window = new Gtk.ScrolledWindow (null, null);
+ scrolled_window.hscrollbar_policy = Gtk.PolicyType.NEVER;
+ scrolled_window.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC;
+ scrolled_window.add (event_listbox);
+
+- var settings_button = new Gtk.ModelButton ();
+- settings_button.text = _("Date & Time Settings…");
+-
+- main_grid = new Gtk.Grid ();
+- main_grid.margin_top = 12;
+- main_grid.attach (calendar, 0, 0);
+- main_grid.attach (new Wingpanel.Widgets.Separator (), 0, 1);
+- main_grid.attach (settings_button, 0, 2);
+ main_grid.attach (new Gtk.Separator (Gtk.Orientation.VERTICAL), 1, 0, 1, 3);
+ main_grid.attach (scrolled_window, 2, 0, 1, 3);
+
+@@ -94,23 +105,17 @@ namespace DateTimeIndicator {
+ size_group.add_widget (calendar);
+ size_group.add_widget (event_listbox);
+
+- calendar.day_double_click.connect (() => {
+- close ();
+- });
+-
+ calendar.selection_changed.connect ((date) => {
+ idle_update_events ();
+ });
+-
+- event_listbox.row_activated.connect ((row) => {
+- calendar.show_date_in_maya (((EventRow) row).date);
+- close ();
+- });
++#endif
+
+ var model = Models.CalendarModel.get_default ();
+ model.notify["month-start"].connect (() => {
+ model.compute_ranges ();
++#if USE_EVO
+ event_manager.load_all_sources ();
++#endif
+ });
+
+ settings_button.clicked.connect (() => {
+@@ -125,6 +130,7 @@ namespace DateTimeIndicator {
+ return main_grid;
+ }
+
++#if USE_EVO
+ private void update_events_model (E.Source source, Gee.Collection events) {
+ if (opened_widget) {
+ idle_update_events ();
+@@ -143,6 +149,7 @@ namespace DateTimeIndicator {
+ return GLib.Source.REMOVE;
+ });
+ }
++#endif
+
+ public override void opened () {
+ calendar.show_today ();
+diff --git a/src/Util/Util.vala b/src/Util/Util.vala
+index b0bdf98..26b343a 100644
+--- a/src/Util/Util.vala
++++ b/src/Util/Util.vala
+@@ -32,38 +32,6 @@ namespace DateTimeIndicator.Util {
+ return datetime.add_full (0, 0, 0, -datetime.get_hour (), -datetime.get_minute (), -datetime.get_second ());
+ }
+
+- /**
+- * Converts the given ICal.Time to a DateTime.
+- */
+- public TimeZone timezone_from_ical (ICal.Time date) {
+- int is_daylight;
+- var interval = date.get_timezone ().get_utc_offset (null, out is_daylight);
+- bool is_positive = interval >= 0;
+- interval = interval.abs ();
+- var hours = (interval / 3600);
+- var minutes = (interval % 3600) / 60;
+- var hour_string = "%s%02d:%02d".printf (is_positive ? "+" : "-", hours, minutes);
+-
+- return new TimeZone (hour_string);
+- }
+-
+- /**
+- * Converts the given ICal.Time to a DateTime.
+- * XXX : Track next versions of evolution in order to convert ICal.Timezone to GLib.TimeZone with a dedicated function…
+- */
+- public GLib.DateTime ical_to_date_time (ICal.Time date) {
+-#if E_CAL_2_0
+- int year, month, day, hour, minute, second;
+- date.get_date (out year, out month, out day);
+- date.get_time (out hour, out minute, out second);
+- return new GLib.DateTime (timezone_from_ical (date), year, month,
+- day, hour, minute, second);
+-#else
+- return new GLib.DateTime (timezone_from_ical (date), date.year, date.month,
+- date.day, date.hour, date.minute, date.second);
+-#endif
+- }
+-
+ /**
+ * Say if an event lasts all day.
+ */
+@@ -78,6 +46,7 @@ namespace DateTimeIndicator.Util {
+ }
+ }
+
++#if USE_EVO
+ private Gee.HashMap? providers;
+ public void set_event_calendar_color (E.SourceCalendar cal, Gtk.Widget widget) {
+ if (providers == null) {
+@@ -104,6 +73,38 @@ namespace DateTimeIndicator.Util {
+ style_context.add_provider (providers[color], Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
+
++ /**
++ * Converts the given ICal.Time to a DateTime.
++ */
++ public TimeZone timezone_from_ical (ICal.Time date) {
++ int is_daylight;
++ var interval = date.get_timezone ().get_utc_offset (null, out is_daylight);
++ bool is_positive = interval >= 0;
++ interval = interval.abs ();
++ var hours = (interval / 3600);
++ var minutes = (interval % 3600) / 60;
++ var hour_string = "%s%02d:%02d".printf (is_positive ? "+" : "-", hours, minutes);
++
++ return new TimeZone (hour_string);
++ }
++
++ /**
++ * Converts the given ICal.Time to a DateTime.
++ * XXX : Track next versions of evolution in order to convert ICal.Timezone to GLib.TimeZone with a dedicated function…
++ */
++ public GLib.DateTime ical_to_date_time (ICal.Time date) {
++#if E_CAL_2_0
++ int year, month, day, hour, minute, second;
++ date.get_date (out year, out month, out day);
++ date.get_time (out hour, out minute, out second);
++ return new GLib.DateTime (timezone_from_ical (date), year, month,
++ day, hour, minute, second);
++#else
++ return new GLib.DateTime (timezone_from_ical (date), date.year, date.month,
++ date.day, date.hour, date.minute, date.second);
++#endif
++ }
++
+ /*
+ * Gee Utility Functions
+ */
+@@ -113,6 +114,11 @@ namespace DateTimeIndicator.Util {
+ return key.dup_uid (). hash ();
+ }
+
++ /* Returns true if 'a' and 'b' are the same E.Source */
++ public bool source_equal_func (E.Source a, E.Source b) {
++ return a.dup_uid () == b.dup_uid ();
++ }
++
+ /* Returns true if 'a' and 'b' are the same ECal.Component */
+ public bool calcomponent_equal_func (ECal.Component a, ECal.Component b) {
+ return a.get_id ().equal (b.get_id ());
+@@ -178,18 +184,5 @@ namespace DateTimeIndicator.Util {
+
+ return false;
+ }
+-
+- /* Returns true if 'a' and 'b' are the same E.Source */
+- public bool source_equal_func (E.Source a, E.Source b) {
+- return a.dup_uid () == b.dup_uid ();
+- }
+-
+- // public async void reset_timer () {
+- // has_scrolled = true;
+- // Timeout.add (500, () => {
+- // has_scrolled = false;
+- //
+- // return false;
+- // });
+- // }
++#endif
+ }
+diff --git a/src/Widgets/CalendarDay.vala b/src/Widgets/CalendarDay.vala
+index a5ca920..f9c742a 100644
+--- a/src/Widgets/CalendarDay.vala
++++ b/src/Widgets/CalendarDay.vala
+@@ -146,6 +146,7 @@ namespace DateTimeIndicator {
+ event_grid.show_all ();
+ }
+
++#if USE_EVO
+ public void add_dots (E.Source source, ICal.Component ical) {
+ var event_uid = ical.get_uid ();
+ if (!event_dots.has_key (event_uid)) {
+@@ -177,6 +178,7 @@ namespace DateTimeIndicator {
+ event_dots.unset (event_uid);
+ }
+ }
++#endif
+
+ public void set_selected (bool selected) {
+ if (selected) {
+diff --git a/src/Widgets/CalendarGrid.vala b/src/Widgets/CalendarGrid.vala
+index 66e2757..1d1e06c 100644
+--- a/src/Widgets/CalendarGrid.vala
++++ b/src/Widgets/CalendarGrid.vala
+@@ -261,6 +261,7 @@ namespace DateTimeIndicator {
+ return date.get_year () * 10000 + date.get_month () * 100 + date.get_day_of_month ();
+ }
+
++#if USE_EVO
+ public void add_event_dots (E.Source source, Gee.Collection events) {
+ data.foreach ((entry) => {
+
+@@ -292,5 +293,6 @@ namespace DateTimeIndicator {
+ });
+ }
+ }
++#endif
+ }
+ }
+diff --git a/src/Widgets/CalendarView.vala b/src/Widgets/CalendarView.vala
+index db2139c..77c233c 100644
+--- a/src/Widgets/CalendarView.vala
++++ b/src/Widgets/CalendarView.vala
+@@ -182,6 +182,7 @@ namespace DateTimeIndicator {
+ stack.set_visible_child (big_grid);
+ }
+
++#if USE_EVO
+ public void add_event_dots (E.Source source, Gee.Collection events) {
+ calendar_grid.add_event_dots (source, events);
+ }
+@@ -189,5 +190,6 @@ namespace DateTimeIndicator {
+ public void remove_event_dots (E.Source source, Gee.Collection events) {
+ calendar_grid.remove_event_dots (source, events);
+ }
++#endif
+ }
+ }
+
+From 16715f5114c0597d6961880bf877f04414400334 Mon Sep 17 00:00:00 2001
+From: Dirli
+Date: Mon, 13 Apr 2020 22:21:07 +0300
+Subject: [PATCH 6/8] returned dots in the calendar
+
+---
+ src/Indicator.vala | 6 ++--
+ src/Services/EventsManager.vala | 28 +++++----------
+ src/Widgets/CalendarDay.vala | 62 ++++++++++++++++++---------------
+ src/Widgets/CalendarGrid.vala | 29 ++++++---------
+ 4 files changed, 57 insertions(+), 68 deletions(-)
+
+diff --git a/src/Indicator.vala b/src/Indicator.vala
+index 31c7af5..c7550aa 100644
+--- a/src/Indicator.vala
++++ b/src/Indicator.vala
+@@ -105,8 +105,10 @@ namespace DateTimeIndicator {
+ size_group.add_widget (calendar);
+ size_group.add_widget (event_listbox);
+
+- calendar.selection_changed.connect ((date) => {
+- idle_update_events ();
++ event_manager.open.begin ((obj, res) => {
++ calendar.selection_changed.connect ((date) => {
++ idle_update_events ();
++ });
+ });
+ #endif
+
+diff --git a/src/Services/EventsManager.vala b/src/Services/EventsManager.vala
+index d939777..ad0397d 100644
+--- a/src/Services/EventsManager.vala
++++ b/src/Services/EventsManager.vala
+@@ -10,33 +10,25 @@ namespace DateTimeIndicator {
+ private HashTable source_client;
+ private HashTable source_view;
+
+- public EventsManager () {
+-
+- }
+-
+ construct {
+ source_client = new HashTable (str_hash, str_equal);
+ source_events = new HashTable > (Util.source_hash_func, Util.source_equal_func);
+ source_view = new HashTable (str_hash, str_equal);
+-
+- open.begin ();
+ }
+
+- private async void open () {
++ public async void open () {
+ try {
+ registry = yield new E.SourceRegistry (null);
+ registry.source_removed.connect (remove_source);
+- registry.source_added.connect ((source) => add_source_async.begin (source));
++ registry.source_added.connect (add_source);
+
+ // Add sources
+ registry.list_sources (E.SOURCE_EXTENSION_CALENDAR).foreach ((source) => {
+- E.SourceCalendar cal = (E.SourceCalendar)source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
++ E.SourceCalendar cal = (E.SourceCalendar) source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
+ if (cal.selected == true && source.enabled == true) {
+- add_source_async.begin (source);
++ add_source (source);
+ }
+ });
+-
+- load_all_sources ();
+ } catch (GLib.Error error) {
+ critical (error.message);
+ }
+@@ -46,7 +38,7 @@ namespace DateTimeIndicator {
+ lock (source_client) {
+ foreach (var id in source_client.get_keys ()) {
+ var source = registry.ref_source (id);
+- E.SourceCalendar cal = (E.SourceCalendar)source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
++ E.SourceCalendar cal = (E.SourceCalendar) source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
+
+ if (cal.selected == true && source.enabled == true) {
+ load_source (source);
+@@ -120,7 +112,7 @@ namespace DateTimeIndicator {
+ });
+ }
+
+- private async void add_source_async (E.Source source) {
++ private void add_source (E.Source source) {
+ debug ("Adding source '%s'", source.dup_display_name ());
+ try {
+ var client = (ECal.Client) ECal.Client.connect_sync (source, ECal.ClientSourceType.EVENTS, -1, null);
+@@ -129,11 +121,7 @@ namespace DateTimeIndicator {
+ critical (e.message);
+ }
+
+- Idle.add (() => {
+- load_source (source);
+-
+- return false;
+- });
++ load_source (source);
+ }
+
+ private void debug_event (E.Source source, ECal.Component event) {
+@@ -177,6 +165,8 @@ namespace DateTimeIndicator {
+ return true;
+ });
+ });
++
++ events_added (source, added_events.read_only_view);
+ }
+
+ #if E_CAL_2_0
+diff --git a/src/Widgets/CalendarDay.vala b/src/Widgets/CalendarDay.vala
+index f9c742a..a2c4922 100644
+--- a/src/Widgets/CalendarDay.vala
++++ b/src/Widgets/CalendarDay.vala
+@@ -36,7 +36,8 @@ namespace DateTimeIndicator {
+ private static Gtk.CssProvider provider;
+ private static Models.CalendarModel model;
+
+- private Gee.HashMap event_dots;
++ // private Gee.HashMap event_dots;
++ private Gee.ArrayList event_dots;
+ private Gtk.Grid event_grid;
+ private Gtk.Label label;
+ private bool valid_grab = false;
+@@ -87,7 +88,8 @@ namespace DateTimeIndicator {
+ label.label = date.get_day_of_month ().to_string ();
+ });
+
+- event_dots = new Gee.HashMap ();
++ // event_dots = new Gee.HashMap ();
++ event_dots = new Gee.ArrayList ();
+ }
+
+ public bool on_scroll_event (Gdk.EventScroll event) {
+@@ -138,44 +140,46 @@ namespace DateTimeIndicator {
+ });
+ }
+
+- public bool skip_day () {
+- return event_dots.size >= 3 ? true : false;
+- }
+-
+- public void show_event_grid () {
+- event_grid.show_all ();
+- }
+-
+ #if USE_EVO
+ public void add_dots (E.Source source, ICal.Component ical) {
+ var event_uid = ical.get_uid ();
+- if (!event_dots.has_key (event_uid)) {
+- var event_dot = new Gtk. Image ();
+- event_dot.gicon = new ThemedIcon ("pager-checked-symbolic");
+- event_dot.pixel_size = 6;
++ if (event_dots.contains (event_uid)) {
++ return;
++ }
+
+- unowned Gtk.StyleContext style_context = event_dot.get_style_context ();
+- style_context.add_class (Granite.STYLE_CLASS_ACCENT);
+- style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
++ event_dots.add (event_uid);
++ if (event_dots.size > 3) {
++ return;
++ }
+
+- var source_calendar = (E.SourceCalendar?) source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
+- Util.set_event_calendar_color (source_calendar, event_dot);
++ var event_dot = new Gtk.Image ();
++ event_dot.gicon = new ThemedIcon ("pager-checked-symbolic");
++ event_dot.pixel_size = 6;
+
+- event_dots[event_uid] = event_dot;
++ unowned Gtk.StyleContext style_context = event_dot.get_style_context ();
++ style_context.add_class (Granite.STYLE_CLASS_ACCENT);
++ style_context.add_provider (provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+- event_grid.add (event_dot);
+- }
+- }
++ var source_calendar = (E.SourceCalendar?) source.get_extension (E.SOURCE_EXTENSION_CALENDAR);
++ Util.set_event_calendar_color (source_calendar, event_dot);
+
+- public bool exist_event (string ical_uid) {
+- return event_dots.has_key (ical_uid);
++ event_grid.add (event_dot);
++ event_dot.show ();
+ }
+
+ public void remove_dots (string event_uid) {
+- var dot = event_dots[event_uid];
+- if (dot != null) {
+- dot.destroy ();
+- event_dots.unset (event_uid);
++ if (event_dots.contains (event_uid)) {
++ return;
++ }
++
++ event_dots.remove (event_uid);
++ if (event_dots.size >= 3) {
++ return;
++ }
++
++ var w = event_grid.get_children ();
++ if (w.length () > 0) {
++ w.nth_data (0).destroy ();
+ }
+ }
+ #endif
+diff --git a/src/Widgets/CalendarGrid.vala b/src/Widgets/CalendarGrid.vala
+index 1d1e06c..c544404 100644
+--- a/src/Widgets/CalendarGrid.vala
++++ b/src/Widgets/CalendarGrid.vala
+@@ -263,22 +263,16 @@ namespace DateTimeIndicator {
+
+ #if USE_EVO
+ public void add_event_dots (E.Source source, Gee.Collection events) {
+- data.foreach ((entry) => {
+-
+- foreach (var component in events) {
+- if (entry.value.skip_day ()) {
+- return true;
+- }
+-
+- if (Util.calcomp_is_on_day (component, entry.value.date)) {
+- entry.value.add_dots (source, component.get_icalcomponent ());
+- }
++ foreach (var component in events) {
++ unowned ICal.Component? icomp = component.get_icalcomponent ();
++ ICal.Time? start_time = icomp.get_dtstart ();
++ time_t start_unix = start_time.as_timet ();
++ var t = new DateTime.from_unix_utc (start_unix);
++ var d_hash = day_hash (t);
++ if (data.has_key (d_hash)) {
++ data[d_hash].add_dots (source, component.get_icalcomponent ());
+ }
+-
+- entry.value.show_event_grid ();
+-
+- return true;
+- });
++ }
+ }
+
+ public void remove_event_dots (E.Source source, Gee.Collection events) {
+@@ -286,9 +280,8 @@ namespace DateTimeIndicator {
+ unowned ICal.Component ical = component.get_icalcomponent ();
+ var event_uid = ical.get_uid ();
+ data.foreach ((entry) => {
+- if (entry.value.exist_event (event_uid)) {
+- entry.value.remove_dots (event_uid);
+- }
++ entry.value.remove_dots (event_uid);
++
+ return true;
+ });
+ }
+
+From 149da28659883b01ceb0773b35c018d31aa1d912 Mon Sep 17 00:00:00 2001
+From: Dirli
+Date: Tue, 14 Apr 2020 00:16:01 +0300
+Subject: [PATCH 7/8] issue #55
+
+---
+ src/Services/EventsManager.vala | 2 ++
+ src/Widgets/CalendarDay.vala | 2 +-
+ src/Widgets/CalendarGrid.vala | 11 +++++++----
+ 3 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/src/Services/EventsManager.vala b/src/Services/EventsManager.vala
+index ad0397d..959762f 100644
+--- a/src/Services/EventsManager.vala
++++ b/src/Services/EventsManager.vala
+@@ -208,6 +208,8 @@ namespace DateTimeIndicator {
+ removed_events.add (event);
+ debug_event (source, event);
+ }
++
++ events.remove_all (cid.get_uid ());
+ });
+
+ events_removed (source, removed_events.read_only_view);
+diff --git a/src/Widgets/CalendarDay.vala b/src/Widgets/CalendarDay.vala
+index a2c4922..10d088c 100644
+--- a/src/Widgets/CalendarDay.vala
++++ b/src/Widgets/CalendarDay.vala
+@@ -168,7 +168,7 @@ namespace DateTimeIndicator {
+ }
+
+ public void remove_dots (string event_uid) {
+- if (event_dots.contains (event_uid)) {
++ if (!event_dots.contains (event_uid)) {
+ return;
+ }
+
+diff --git a/src/Widgets/CalendarGrid.vala b/src/Widgets/CalendarGrid.vala
+index c544404..6e6cbdb 100644
+--- a/src/Widgets/CalendarGrid.vala
++++ b/src/Widgets/CalendarGrid.vala
+@@ -279,11 +279,14 @@ namespace DateTimeIndicator {
+ foreach (var component in events) {
+ unowned ICal.Component ical = component.get_icalcomponent ();
+ var event_uid = ical.get_uid ();
+- data.foreach ((entry) => {
+- entry.value.remove_dots (event_uid);
+
+- return true;
+- });
++ ICal.Time? start_time = ical.get_dtstart ();
++ time_t start_unix = start_time.as_timet ();
++ var t = new DateTime.from_unix_utc (start_unix);
++ var d_hash = day_hash (t);
++ if (data.has_key (d_hash)) {
++ data[d_hash].remove_dots (event_uid);
++ }
+ }
+ }
+ #endif
+
+From a3910e2b8242b8c4837cc764da7f268a02d05d6e Mon Sep 17 00:00:00 2001
+From: Dirli
+Date: Fri, 17 Apr 2020 00:52:53 +0300
+Subject: [PATCH 8/8] issue #127
+
+---
+ src/Indicator.vala | 1 +
+ src/Models/CalendarModel.vala | 17 ++++++---
+ src/Services/EventsManager.vala | 17 +++++++++
+ src/Widgets/CalendarDay.vala | 3 +-
+ src/Widgets/CalendarGrid.vala | 66 ++++++++++++++++++++++-----------
+ src/Widgets/CalendarView.vala | 17 ++++-----
+ src/Widgets/EventsListBox.vala | 6 ++-
+ 7 files changed, 87 insertions(+), 40 deletions(-)
+
+diff --git a/src/Indicator.vala b/src/Indicator.vala
+index c7550aa..63614e0 100644
+--- a/src/Indicator.vala
++++ b/src/Indicator.vala
+@@ -116,6 +116,7 @@ namespace DateTimeIndicator {
+ model.notify["month-start"].connect (() => {
+ model.compute_ranges ();
+ #if USE_EVO
++ event_listbox.clear_list ();
+ event_manager.load_all_sources ();
+ #endif
+ });
+diff --git a/src/Models/CalendarModel.vala b/src/Models/CalendarModel.vala
+index d60a9ac..48b6e78 100644
+--- a/src/Models/CalendarModel.vala
++++ b/src/Models/CalendarModel.vala
+@@ -57,12 +57,17 @@ namespace DateTimeIndicator {
+ compute_ranges ();
+ }
+
+- public void change_month (int relative) {
+- month_start = month_start.add_months (relative);
+- }
+-
+- public void change_year (int relative) {
+- month_start = month_start.add_years (relative);
++ public void change_month (int m_relative, int y_relative = 0) {
++ if (y_relative == 0) {
++ month_start = month_start.add_months (m_relative);
++ } else {
++ if (m_relative == 0) {
++ month_start = month_start.add_years (y_relative);
++ } else {
++ GLib.DateTime tmp_date = month_start.add_months (m_relative);
++ month_start = tmp_date.add_years (y_relative);
++ }
++ }
+ }
+
+ /* --- Helper Methods ---// */
+diff --git a/src/Services/EventsManager.vala b/src/Services/EventsManager.vala
+index 959762f..6ece557 100644
+--- a/src/Services/EventsManager.vala
++++ b/src/Services/EventsManager.vala
+@@ -1,3 +1,20 @@
++/*
++ * Copyright (c) 2011-2020 elementary, Inc. (https://elementary.io)
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public
++ * License as published by the Free Software Foundation; either
++ * version 3 of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see .
++ */
++
+ namespace DateTimeIndicator {
+ public class Services.EventsManager : GLib.Object {
+ public signal void events_added (E.Source source, Gee.Collection events);
+diff --git a/src/Widgets/CalendarDay.vala b/src/Widgets/CalendarDay.vala
+index 10d088c..735fdc1 100644
+--- a/src/Widgets/CalendarDay.vala
++++ b/src/Widgets/CalendarDay.vala
+@@ -36,7 +36,6 @@ namespace DateTimeIndicator {
+ private static Gtk.CssProvider provider;
+ private static Models.CalendarModel model;
+
+- // private Gee.HashMap event_dots;
+ private Gee.ArrayList event_dots;
+ private Gtk.Grid event_grid;
+ private Gtk.Label label;
+@@ -105,7 +104,7 @@ namespace DateTimeIndicator {
+
+ /* It's mouse scroll ! */
+ if (choice == 1 || choice == -1) {
+- Models.CalendarModel.get_default ().change_month ((int)choice);
++ Models.CalendarModel.get_default ().change_month ((int) choice);
+
+ return true;
+ }
+diff --git a/src/Widgets/CalendarGrid.vala b/src/Widgets/CalendarGrid.vala
+index 6e6cbdb..ef8edb6 100644
+--- a/src/Widgets/CalendarGrid.vala
++++ b/src/Widgets/CalendarGrid.vala
+@@ -32,7 +32,7 @@ namespace DateTimeIndicator {
+ */
+ public signal void on_event_add (GLib.DateTime date);
+
+- public signal void selection_changed (GLib.DateTime new_date);
++ public signal void selection_changed (GLib.DateTime new_date, bool up);
+
+ private Gee.HashMap data;
+ private Widgets.CalendarDay selected_gridday;
+@@ -66,25 +66,32 @@ namespace DateTimeIndicator {
+ events |= Gdk.EventMask.SMOOTH_SCROLL_MASK;
+ }
+
+- private void on_day_focus_in (Widgets.CalendarDay day) {
+- debug ("on_day_focus_in %s", day.date.to_string ());
++ private bool on_day_focus_in (Gdk.EventFocus event) {
++ var day = get_focus_child ();
++ if (day == null) {
++ return false;
++ }
++
+ if (selected_gridday != null) {
+ selected_gridday.set_selected (false);
+ }
+
+- var selected_date = day.date;
+- selected_gridday = day;
+- day.set_selected (true);
++ var selected_date = (day as Widgets.CalendarDay).date;
++ selected_gridday = day as Widgets.CalendarDay;
++ (day as Widgets.CalendarDay).set_selected (true);
+ day.set_state_flags (Gtk.StateFlags.FOCUSED, false);
+- selection_changed (selected_date);
+ var calmodel = Models.CalendarModel.get_default ();
+ var date_month = selected_date.get_month () - calmodel.month_start.get_month ();
+ var date_year = selected_date.get_year () - calmodel.month_start.get_year ();
+
+ if (date_month != 0 || date_year != 0) {
+- calmodel.change_month (date_month);
+- calmodel.change_year (date_year);
++ selection_changed (selected_date, false);
++ calmodel.change_month (date_month, date_year);
++ } else {
++ selection_changed (selected_date, true);
+ }
++
++ return false;
+ }
+
+ public void set_focus_to_today () {
+@@ -106,7 +113,7 @@ namespace DateTimeIndicator {
+ * Sets the given range to be displayed in the grid. Note that the number of days
+ * must remain the same.
+ */
+- public void set_range (Util.DateRange new_range, GLib.DateTime month_start) {
++ public void set_range (Util.DateRange new_range, GLib.DateTime month_start, GLib.DateTime? selected_date) {
+ var today = new GLib.DateTime.now_local ();
+
+ Gee.List old_dates;
+@@ -138,28 +145,46 @@ namespace DateTimeIndicator {
+
+ for (i = 0; i < new_dates.size; i++) {
+ var new_date = new_dates[i];
+- Widgets.CalendarDay day;
++ Widgets.CalendarDay? day = null;
+
+ if (i < old_dates.size) {
+ /* A widget already exists for this date, just change it */
+
+ var old_date = old_dates[i];
+- day = update_day (data[day_hash (old_date)], new_date, today, month_start);
+- } else {
++ var d_hash = day_hash (old_date);
++ if (data.has_key (d_hash)) {
++ day = data[d_hash];
++ }
++ }
++
++ if (day == null) {
+ /* Still update_day to get the color of etc. right */
+- day = update_day (new Widgets.CalendarDay (new_date), new_date, today, month_start);
++ day = new Widgets.CalendarDay (new_date);
+ day.on_event_add.connect ((date) => on_event_add (date));
+- day.scroll_event.connect ((event) => { scroll_event (event); return false; });
+- day.focus_in_event.connect ((event) => {
+- on_day_focus_in (day);
+-
++ day.scroll_event.connect ((event) => {
++ scroll_event (event);
+ return false;
+ });
++ day.focus_in_event.connect (on_day_focus_in);
+
+ attach (day, col + 2, row);
+ day.show_all ();
+ }
+
++ update_day (day, new_date, month_start);
++ update_today_style (day, new_date, today);
++ if (selected_date != null && day.date.equal (selected_date)) {
++ /* disabled the signal to avoid unnecessary signals and selected
++ * the specified day from the new period */
++ debug (@"focus selected day $selected_date");
++ day.focus_in_event.disconnect (on_day_focus_in);
++ day.grab_focus_force ();
++ day.set_selected (true);
++ day.set_state_flags (Gtk.StateFlags.FOCUSED, false);
++ selected_gridday = day;
++ day.focus_in_event.connect (on_day_focus_in);
++ }
++
+ col = (col + 1) % 7;
+ row = (col == 0) ? row + 1 : row;
+ data_new.set (day_hash (new_date), day);
+@@ -184,8 +209,7 @@ namespace DateTimeIndicator {
+ /**
+ * Updates the given CalendarDay so that it shows the given date. Changes to its style etc.
+ */
+- private Widgets.CalendarDay update_day (Widgets.CalendarDay day, GLib.DateTime new_date, GLib.DateTime today, GLib.DateTime month_start) {
+- update_today_style (day, new_date, today);
++ private void update_day (Widgets.CalendarDay day, GLib.DateTime new_date, GLib.DateTime month_start) {
+ if (new_date.get_month () == month_start.get_month ()) {
+ day.sensitive_container (true);
+ } else {
+@@ -193,8 +217,6 @@ namespace DateTimeIndicator {
+ }
+
+ day.date = new_date;
+-
+- return day;
+ }
+
+ public void update_weeks (GLib.DateTime date, int nr_of_weeks) {
+diff --git a/src/Widgets/CalendarView.vala b/src/Widgets/CalendarView.vala
+index 77c233c..fe957ab 100644
+--- a/src/Widgets/CalendarView.vala
++++ b/src/Widgets/CalendarView.vala
+@@ -85,10 +85,7 @@ namespace DateTimeIndicator {
+ model.notify["data-range"].connect (() => {
+ label.label = model.month_start.format (_("%OB, %Y"));
+
+- sync_with_model ();
+-
+- selected_date = null;
+- selection_changed (selected_date);
++ sync_with_model (selected_date != null);
+ });
+
+ left_button.clicked.connect (() => {
+@@ -113,9 +110,11 @@ namespace DateTimeIndicator {
+ day_double_click ();
+ });
+
+- calendar_grid.selection_changed.connect ((date) => {
++ calendar_grid.selection_changed.connect ((date, up) => {
+ selected_date = date;
+- selection_changed (date);
++ if (up) {
++ selection_changed (date);
++ }
+ });
+
+ return calendar_grid;
+@@ -154,9 +153,9 @@ namespace DateTimeIndicator {
+ }
+
+ /* Sets the calendar widgets to the date range of the model */
+- private void sync_with_model () {
++ private void sync_with_model (bool show_selected = false) {
+ var model = Models.CalendarModel.get_default ();
+- if (calendar_grid.grid_range != null && (model.data_range.equals (calendar_grid.grid_range) || calendar_grid.grid_range.first_dt.compare (model.data_range.first_dt) == 0)) {
++ if (!show_selected && calendar_grid.grid_range != null && (model.data_range.equals (calendar_grid.grid_range) || calendar_grid.grid_range.first_dt.compare (model.data_range.first_dt) == 0)) {
+ calendar_grid.update_today ();
+ return; // nothing else to do
+ }
+@@ -168,7 +167,7 @@ namespace DateTimeIndicator {
+ big_grid = create_big_grid ();
+ stack.add (big_grid);
+
+- calendar_grid.set_range (model.data_range, model.month_start);
++ calendar_grid.set_range (model.data_range, model.month_start, show_selected ? selected_date : null);
+ calendar_grid.update_weeks (model.data_range.first_dt, model.num_weeks);
+
+ if (previous_first != null) {
+diff --git a/src/Widgets/EventsListBox.vala b/src/Widgets/EventsListBox.vala
+index c25af2e..9022072 100644
+--- a/src/Widgets/EventsListBox.vala
++++ b/src/Widgets/EventsListBox.vala
+@@ -21,10 +21,14 @@ namespace DateTimeIndicator {
+ set_sort_func (sort_function);
+ }
+
+- public void update_events (GLib.DateTime? selected_date, HashTable> source_events) {
++ public void clear_list () {
+ foreach (unowned Gtk.Widget widget in get_children ()) {
+ widget.destroy ();
+ }
++ }
++
++ public void update_events (GLib.DateTime? selected_date, HashTable> source_events) {
++ clear_list ();
+
+ if (selected_date == null) {
+ return;
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
index 7194a649d004..7a2a24a6e464 100644
--- a/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
+++ b/pkgs/desktops/pantheon/desktop/wingpanel-indicators/datetime/default.nix
@@ -1,5 +1,5 @@
{ stdenv
-, fetchFromGitHub
+, fetchFromGitHub
, pantheon
, pkgconfig
, meson
@@ -28,6 +28,15 @@ stdenv.mkDerivation rec {
sha256 = "0a0pqrpmrdd5pch30lizr9righlc7165z7krmnaxrzd0fvfkbr2h";
};
+ patches = [
+ # https://github.com/elementary/wingpanel-indicator-datetime/pull/207
+ # Fixes lots of issues despite being rejected upstream
+ # https://github.com/elementary/wingpanel-indicator-datetime/issues/206
+ # https://github.com/elementary/wingpanel-indicator-datetime/issues/55
+ # https://github.com/elementary/wingpanel-indicator-datetime/issues/127
+ ./207.patch
+ ];
+
passthru = {
updateScript = pantheon.updateScript {
attrPath = "pantheon.${pname}";
diff --git a/pkgs/desktops/pantheon/desktop/wingpanel/default.nix b/pkgs/desktops/pantheon/desktop/wingpanel/default.nix
index 0fe63ace3874..56cdfb9ebe79 100644
--- a/pkgs/desktops/pantheon/desktop/wingpanel/default.nix
+++ b/pkgs/desktops/pantheon/desktop/wingpanel/default.nix
@@ -65,6 +65,13 @@ stdenv.mkDerivation rec {
patchShebangs meson/post_install.py
'';
+ preFixup = ''
+ gappsWrapperArgs+=(
+ # this theme is required
+ --prefix XDG_DATA_DIRS : "${elementary-gtk-theme}/share"
+ )
+ '';
+
meta = with stdenv.lib; {
description = "The extensible top panel for Pantheon";
longDescription = ''
diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix
index 0d2785b07e50..d4b8f0bd646b 100644
--- a/pkgs/development/haskell-modules/configuration-common.nix
+++ b/pkgs/development/haskell-modules/configuration-common.nix
@@ -153,11 +153,20 @@ self: super: {
barbly = addBuildDepend super.barbly pkgs.darwin.apple_sdk.frameworks.AppKit;
# Hakyll's tests are broken on Darwin (3 failures); and they require util-linux
- hakyll = if pkgs.stdenv.isDarwin
- then dontCheck (overrideCabal super.hakyll (drv: {
+ hakyll = let
+ # Hakyll needs a relaxed upper bound on `warp` so that the preview server will build
+ patched-hakyll = overrideCabal super.hakyll (drv: {
+ postPatch = (drv.postPatch or "") + ''
+ substituteInPlace hakyll.cabal --replace \
+ "warp >= 3.2 && < 3.3" \
+ "warp >= 3.2 && < 3.4"
+ '';
+ });
+ in if pkgs.stdenv.isDarwin
+ then dontCheck (overrideCabal patched-hakyll (drv: {
testToolDepends = [];
}))
- else super.hakyll;
+ else patched-hakyll;
double-conversion = if !pkgs.stdenv.isDarwin
then super.double-conversion
diff --git a/pkgs/development/haskell-modules/configuration-hackage2nix.yaml b/pkgs/development/haskell-modules/configuration-hackage2nix.yaml
index e9536f2b8f71..afc9c43a75c9 100644
--- a/pkgs/development/haskell-modules/configuration-hackage2nix.yaml
+++ b/pkgs/development/haskell-modules/configuration-hackage2nix.yaml
@@ -3399,7 +3399,6 @@ broken-packages:
- brain-bleep
- Bravo
- breakout
- - breve
- brians-brain
- brick-dropdownmenu
- bricks
diff --git a/pkgs/development/haskell-modules/hackage-packages.nix b/pkgs/development/haskell-modules/hackage-packages.nix
index e9409f48de51..b1c8f5b67c0b 100644
--- a/pkgs/development/haskell-modules/hackage-packages.nix
+++ b/pkgs/development/haskell-modules/hackage-packages.nix
@@ -43341,7 +43341,6 @@ self: {
description = "a url shortener";
license = stdenv.lib.licenses.gpl3;
hydraPlatforms = stdenv.lib.platforms.none;
- broken = true;
}) {};
"brians-brain" = callPackage
diff --git a/pkgs/development/lua-modules/generated-packages.nix b/pkgs/development/lua-modules/generated-packages.nix
index 07115f9f72c4..d95ce128b737 100644
--- a/pkgs/development/lua-modules/generated-packages.nix
+++ b/pkgs/development/lua-modules/generated-packages.nix
@@ -990,7 +990,6 @@ luaexpat = buildLuarocksPackage {
license = {
fullName = "MIT/X11";
};
- broken = true;
};
};
luaffi = buildLuarocksPackage {
diff --git a/pkgs/development/python-modules/ludios_wpull/default.nix b/pkgs/development/python-modules/ludios_wpull/default.nix
index 8ec06aa98d9b..6dd838ca3f4a 100644
--- a/pkgs/development/python-modules/ludios_wpull/default.nix
+++ b/pkgs/development/python-modules/ludios_wpull/default.nix
@@ -2,6 +2,7 @@
, buildPythonPackage
, fetchFromGitHub
, isPy3k
+, isPy38
, chardet
, dnspython
, html5-parser
@@ -16,7 +17,7 @@ buildPythonPackage rec {
pname = "ludios_wpull";
version = "3.0.7";
- disabled = !isPy3k;
+ disabled = !isPy3k || isPy38;
src = fetchFromGitHub {
rev = version;
@@ -35,6 +36,5 @@ buildPythonPackage rec {
homepage = https://github.com/ludios/wpull;
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [ ivan ];
- broken = true;
};
}
diff --git a/pkgs/development/python-modules/namedlist/default.nix b/pkgs/development/python-modules/namedlist/default.nix
index 0a96a9e5c8d9..bb87b4ef2549 100644
--- a/pkgs/development/python-modules/namedlist/default.nix
+++ b/pkgs/development/python-modules/namedlist/default.nix
@@ -2,12 +2,15 @@
, buildPythonPackage
, fetchPypi
, pytest
+, isPy38
}:
buildPythonPackage rec {
pname = "namedlist";
version = "1.7";
+ disabled = isPy38;
+
src = fetchPypi {
inherit pname version;
sha256 = "11n9c4a5ak9971awkf1g92m6mcmiprhrw98ik2cmjsqxmz73j2qr";
@@ -29,6 +32,5 @@ buildPythonPackage rec {
homepage = https://bitbucket.org/ericvsmith/namedlist;
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ ivan ];
- broken = true;
};
}
diff --git a/pkgs/development/python-modules/pyside2-tools/default.nix b/pkgs/development/python-modules/pyside2-tools/default.nix
index 53e3c9f7c572..a96ea5d32ff8 100644
--- a/pkgs/development/python-modules/pyside2-tools/default.nix
+++ b/pkgs/development/python-modules/pyside2-tools/default.nix
@@ -31,6 +31,5 @@ stdenv.mkDerivation {
license = licenses.gpl2;
homepage = "https://wiki.qt.io/Qt_for_Python";
maintainers = with maintainers; [ gebner ];
- broken = true;
};
}
diff --git a/pkgs/development/python-modules/pyside2/default.nix b/pkgs/development/python-modules/pyside2/default.nix
index ad1a7967ac0d..afa48569e2ac 100644
--- a/pkgs/development/python-modules/pyside2/default.nix
+++ b/pkgs/development/python-modules/pyside2/default.nix
@@ -34,6 +34,5 @@ stdenv.mkDerivation rec {
license = licenses.lgpl21;
homepage = "https://wiki.qt.io/Qt_for_Python";
maintainers = with maintainers; [ gebner ];
- broken = true;
};
}
diff --git a/pkgs/development/python-modules/soco/default.nix b/pkgs/development/python-modules/soco/default.nix
index 26257ffd4786..0af09cc01ce7 100644
--- a/pkgs/development/python-modules/soco/default.nix
+++ b/pkgs/development/python-modules/soco/default.nix
@@ -7,11 +7,11 @@
buildPythonPackage rec {
pname = "soco";
- version = "0.18.1";
+ version = "0.19";
src = fetchPypi {
inherit pname version;
- sha256 = "de033ad69f86a655f50d407648b3aa2dd9647c69fd7bb317e9adfcd38a1adf4b";
+ sha256 = "0dgca286vhrabm4r4jj545k895z6w2c70ars06vrjhf9cpgg7qck";
};
postPatch = ''
@@ -27,9 +27,8 @@ buildPythonPackage rec {
];
meta = {
- homepage = http://python-soco.com/;
+ homepage = "http://python-soco.com/";
description = "A CLI and library to control Sonos speakers";
license = lib.licenses.mit;
- broken = true;
};
}
diff --git a/pkgs/development/tools/ocaml/merlin/default.nix b/pkgs/development/tools/ocaml/merlin/default.nix
index ed3d5efc789d..fa78e47951f3 100644
--- a/pkgs/development/tools/ocaml/merlin/default.nix
+++ b/pkgs/development/tools/ocaml/merlin/default.nix
@@ -2,13 +2,13 @@
buildDunePackage rec {
pname = "merlin";
- version = "3.3.3";
+ version = "3.3.4";
minimumOCamlVersion = "4.02.1";
src = fetchurl {
url = "https://github.com/ocaml/merlin/releases/download/v${version}/merlin-v${version}.tbz";
- sha256 = "05dfkbpbb7nvs4g6y0iw7a9f73ygvhs9l45l2g56y7zagvs9x43j";
+ sha256 = "12wxric6n3rmsn0w16xm8vjd8p5aw24cj76zw2x87qfwwgmy1kdd";
};
buildInputs = [ yojson ];
diff --git a/pkgs/development/tools/rust/cargo-make/Cargo.lock b/pkgs/development/tools/rust/cargo-make/Cargo.lock
index 923e8ab61bb2..1f7b5c1d1b75 100644
--- a/pkgs/development/tools/rust/cargo-make/Cargo.lock
+++ b/pkgs/development/tools/rust/cargo-make/Cargo.lock
@@ -4,1102 +4,1086 @@
name = "adler32"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
[[package]]
name = "aho-corasick"
-version = "0.7.6"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
dependencies = [
- "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr",
]
[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi",
]
[[package]]
name = "arrayref"
-version = "0.3.5"
+version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
[[package]]
name = "arrayvec"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
[[package]]
name = "attohttpc"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de33d017f0add8b019c6d98c3132c82c8815ca96bbed8e8006e7402c840562b3"
dependencies = [
- "flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)",
- "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "flate2",
+ "http",
+ "log",
+ "native-tls",
+ "openssl",
+ "url",
]
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
- "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hermit-abi",
+ "libc",
+ "winapi",
]
-[[package]]
-name = "autocfg"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
[[package]]
name = "autocfg"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
[[package]]
name = "base64"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
[[package]]
name = "base64"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3"
[[package]]
name = "bitflags"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
[[package]]
name = "blake2b_simd"
version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a"
dependencies = [
- "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "arrayref",
+ "arrayvec",
+ "constant_time_eq",
]
[[package]]
name = "bytes"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "c2-chacha"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
+checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
[[package]]
name = "cargo-make"
-version = "0.30.5"
+version = "0.30.6"
dependencies = [
- "ci_info 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "colored 1.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "duckscript 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "duckscriptsdk 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "envmnt 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "fern 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "fsio 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "git_info 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "home 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "run_script 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rust_info 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rusty-hook 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
- "shell2batch 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ci_info",
+ "clap",
+ "colored",
+ "dirs",
+ "duckscript",
+ "duckscriptsdk",
+ "envmnt",
+ "fern",
+ "fsio",
+ "git_info",
+ "glob",
+ "home",
+ "indexmap",
+ "log",
+ "run_script",
+ "rust_info",
+ "rusty-hook",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "shell2batch",
+ "toml",
]
[[package]]
name = "cc"
-version = "1.0.50"
+version = "1.0.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d"
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "ci_info"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b407009a4a51ae109dbdfcd7b6e4de38d148f37fad512b8c4623c642c4045e68"
dependencies = [
- "envmnt 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "envmnt",
]
[[package]]
name = "clap"
version = "2.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
dependencies = [
- "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
]
[[package]]
name = "colored"
-version = "1.9.2"
+version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59"
dependencies = [
- "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty",
+ "lazy_static",
+ "winapi",
]
[[package]]
name = "constant_time_eq"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
[[package]]
name = "core-foundation"
-version = "0.6.4"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
dependencies = [
- "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation-sys",
+ "libc",
]
[[package]]
name = "core-foundation-sys"
-version = "0.6.2"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
[[package]]
name = "crc32fast"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if",
]
[[package]]
name = "crossbeam-utils"
-version = "0.7.0"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "cfg-if",
+ "lazy_static",
]
[[package]]
name = "dirs"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if",
+ "dirs-sys",
]
[[package]]
name = "dirs-sys"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if",
+ "libc",
+ "redox_users",
+ "winapi",
]
[[package]]
name = "duckscript"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "606ba1f416b4babf0971b0510b7e49ecb948ad381e4943d5b96a7a22ac701386"
dependencies = [
- "fsio 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fsio",
]
[[package]]
name = "duckscriptsdk"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bdbd838e33acba34abb076b94db7bba43e9dbaccd00486322ce314ddc7d0979"
dependencies = [
- "attohttpc 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "base64 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "duckscript 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "fsio 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "home 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "java-properties 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "meval 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "uname 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "which 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "whoami 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "attohttpc",
+ "base64 0.12.0",
+ "cfg-if",
+ "duckscript",
+ "fs_extra",
+ "fsio",
+ "glob",
+ "home",
+ "java-properties",
+ "meval",
+ "num_cpus",
+ "rand",
+ "uname",
+ "walkdir",
+ "which",
+ "whoami",
]
[[package]]
name = "encoding"
version = "0.2.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
dependencies = [
- "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding-index-japanese",
+ "encoding-index-korean",
+ "encoding-index-simpchinese",
+ "encoding-index-singlebyte",
+ "encoding-index-tradchinese",
]
[[package]]
name = "encoding-index-japanese"
version = "1.20141219.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
dependencies = [
- "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding_index_tests",
]
[[package]]
name = "encoding-index-korean"
version = "1.20141219.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
dependencies = [
- "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding_index_tests",
]
[[package]]
name = "encoding-index-simpchinese"
version = "1.20141219.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
dependencies = [
- "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding_index_tests",
]
[[package]]
name = "encoding-index-singlebyte"
version = "1.20141219.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
dependencies = [
- "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding_index_tests",
]
[[package]]
name = "encoding-index-tradchinese"
version = "1.20141219.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
dependencies = [
- "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding_index_tests",
]
[[package]]
name = "encoding_index_tests"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
[[package]]
name = "envmnt"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fba7e7d8c007e12db7b3bd6f04b8e47e206c9173d9c75413a042ccc941723c8"
dependencies = [
- "fsio 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fsio",
+ "indexmap",
]
[[package]]
name = "fern"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9a4820f0ccc8a7afd67c39a0f1a0f4b07ca1725164271a64939d7aeb9af065"
dependencies = [
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log",
]
[[package]]
name = "flate2"
-version = "1.0.13"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if",
+ "crc32fast",
+ "libc",
+ "miniz_oxide",
]
[[package]]
name = "fnv"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
[[package]]
name = "foreign-types"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
dependencies = [
- "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "foreign-types-shared",
]
[[package]]
name = "foreign-types-shared"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
name = "fs_extra"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674"
[[package]]
name = "fsio"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2131cb03096f67334dfba2f0bc46afc5564b08a919d042c6e217e2665741fc54"
dependencies = [
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "users 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand",
+ "users",
]
[[package]]
name = "getopts"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
dependencies = [
- "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width",
]
[[package]]
name = "getrandom"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if",
+ "libc",
+ "wasi",
]
[[package]]
name = "git_info"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add3a9c3c08c8905a2165ff06891dd1c3bb32d81b2a32d79528abc9793dfb06f"
[[package]]
name = "glob"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]]
name = "hermit-abi"
-version = "0.1.6"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15"
dependencies = [
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
]
[[package]]
name = "home"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi",
]
[[package]]
name = "http"
-version = "0.2.0"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9"
dependencies = [
- "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes",
+ "fnv",
+ "itoa",
]
[[package]]
name = "idna"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
dependencies = [
- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
]
[[package]]
name = "indexmap"
-version = "1.3.1"
+version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292"
dependencies = [
- "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "serde",
]
[[package]]
name = "itoa"
-version = "0.4.4"
+version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
[[package]]
name = "java-properties"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caf4418ade5bde22a283a7f2fb537ea397ec102718f259f2630714e7a5b389fa"
dependencies = [
- "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encoding",
+ "regex",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.66"
+version = "0.2.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005"
[[package]]
name = "log"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if",
]
[[package]]
name = "matches"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
[[package]]
name = "memchr"
-version = "2.3.0"
+version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
[[package]]
name = "meval"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f79496a5651c8d57cd033c5add8ca7ee4e3d5f7587a4777484640d9cb60392d9"
dependencies = [
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fnv",
+ "nom",
]
[[package]]
name = "miniz_oxide"
-version = "0.3.5"
+version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5"
dependencies = [
- "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "adler32",
]
[[package]]
name = "native-tls"
-version = "0.2.3"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)",
- "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
- "security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
]
[[package]]
name = "nias"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab250442c86f1850815b5d268639dff018c0627022bc1940eb2d642ca1ce12f0"
[[package]]
name = "nom"
version = "1.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce"
[[package]]
name = "num_cpus"
-version = "1.12.0"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
dependencies = [
- "hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hermit-abi",
+ "libc",
]
[[package]]
name = "openssl"
-version = "0.10.26"
+version = "0.10.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd"
dependencies = [
- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "lazy_static",
+ "libc",
+ "openssl-sys",
]
[[package]]
name = "openssl-probe"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
[[package]]
name = "openssl-sys"
-version = "0.9.53"
+version = "0.9.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
]
[[package]]
name = "percent-encoding"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pkg-config"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
[[package]]
name = "ppv-lite86"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
[[package]]
name = "proc-macro2"
-version = "1.0.8"
+version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3"
dependencies = [
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid",
]
[[package]]
name = "quote"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
dependencies = [
- "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
]
[[package]]
name = "rand"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
dependencies = [
- "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
]
[[package]]
name = "rand_chacha"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
dependencies = [
- "c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ppv-lite86",
+ "rand_core",
]
[[package]]
name = "rand_core"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
dependencies = [
- "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getrandom",
]
[[package]]
name = "rand_hc"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
dependencies = [
- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core",
]
[[package]]
name = "redox_syscall"
version = "0.1.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
[[package]]
name = "redox_users"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431"
dependencies = [
- "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
- "rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getrandom",
+ "redox_syscall",
+ "rust-argon2",
]
[[package]]
name = "regex"
-version = "1.3.3"
+version = "1.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692"
dependencies = [
- "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex-syntax 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+ "thread_local",
]
[[package]]
name = "regex-syntax"
-version = "0.6.13"
+version = "0.6.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
[[package]]
name = "remove_dir_all"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi",
]
[[package]]
name = "run_script"
-version = "0.6.0"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9527b8b68ef929243a3e8ad7471a2d80f6ac23b810aafd3df4a2e5212d8dacc1"
dependencies = [
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "users 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fsio",
]
[[package]]
name = "rust-argon2"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
dependencies = [
- "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.11.0",
+ "blake2b_simd",
+ "constant_time_eq",
+ "crossbeam-utils",
]
[[package]]
name = "rust_info"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be941f2b996df7ffaf093366039c9dc182b3ca2e00f3e81df44e08c3611e773d"
[[package]]
name = "rusty-hook"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27138b73a8ce63ae918707a5e3b57f9b0c0842a57b82f0e43474cf4e3aaf0ff4"
dependencies = [
- "ci_info 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "nias 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ci_info",
+ "getopts",
+ "nias",
+ "toml",
]
[[package]]
name = "ryu"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1"
[[package]]
name = "same-file"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
dependencies = [
- "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-util",
]
[[package]]
name = "schannel"
-version = "0.1.16"
+version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static",
+ "winapi",
]
[[package]]
name = "security-framework"
-version = "0.3.4"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f331b9025654145cd425b9ded0caf8f5ae0df80d418b326e2dc1c3dc5eb0620"
dependencies = [
- "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
]
[[package]]
name = "security-framework-sys"
-version = "0.3.3"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405"
dependencies = [
- "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "core-foundation-sys",
+ "libc",
]
[[package]]
name = "semver"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
dependencies = [
- "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "semver-parser",
]
[[package]]
name = "semver-parser"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "serde"
-version = "1.0.104"
+version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399"
[[package]]
name = "serde_derive"
-version = "1.0.104"
+version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c"
dependencies = [
- "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
+ "quote",
+ "syn",
]
[[package]]
name = "serde_json"
-version = "1.0.48"
+version = "1.0.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9"
dependencies = [
- "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itoa",
+ "ryu",
+ "serde",
]
[[package]]
name = "shell2batch"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "185a52ee351c1001753c9e3b2eb48c525ff7f51803a4f2cef4365b5c3b743f65"
dependencies = [
- "regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex",
]
[[package]]
name = "smallvec"
-version = "1.1.0"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4"
[[package]]
name = "strsim"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "syn"
-version = "1.0.14"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213"
dependencies = [
- "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
]
[[package]]
name = "tempfile"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
- "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if",
+ "libc",
+ "rand",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
]
[[package]]
name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
- "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width",
]
[[package]]
name = "thread_local"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static",
]
[[package]]
name = "toml"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a"
dependencies = [
- "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde",
]
[[package]]
name = "uname"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8"
dependencies = [
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
]
[[package]]
name = "unicode-bidi"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
dependencies = [
- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "matches",
]
[[package]]
name = "unicode-normalization"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
dependencies = [
- "smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec",
]
[[package]]
name = "unicode-width"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
[[package]]
name = "unicode-xid"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
[[package]]
name = "url"
version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
dependencies = [
- "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "idna",
+ "matches",
+ "percent-encoding",
]
[[package]]
name = "users"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c72f4267aea0c3ec6d07eaabea6ead7c5ddacfafc5e22bcf8d186706851fb4cf"
dependencies = [
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
]
[[package]]
name = "vcpkg"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
[[package]]
name = "vec_map"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
[[package]]
name = "walkdir"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
dependencies = [
- "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "same-file",
+ "winapi",
+ "winapi-util",
]
[[package]]
name = "wasi"
version = "0.9.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
[[package]]
name = "which"
version = "3.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
dependencies = [
- "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc",
]
[[package]]
name = "whoami"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08eb844b158ea881e81b94556eede7f7e306e4c7b976aad88f49e6e36dec391"
[[package]]
name = "winapi"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
dependencies = [
- "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.3"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi",
]
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[metadata]
-"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
-"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
-"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
-"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee"
-"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
-"checksum attohttpc 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de33d017f0add8b019c6d98c3132c82c8815ca96bbed8e8006e7402c840562b3"
-"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
-"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
-"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
-"checksum base64 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3"
-"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-"checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a"
-"checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
-"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb"
-"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
-"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-"checksum ci_info 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b407009a4a51ae109dbdfcd7b6e4de38d148f37fad512b8c4623c642c4045e68"
-"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
-"checksum colored 1.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8815e2ab78f3a59928fc32e141fbeece88320a240e43f47b2fd64ea3a88a5b3d"
-"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
-"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
-"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
-"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
-"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
-"checksum dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
-"checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
-"checksum duckscript 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "606ba1f416b4babf0971b0510b7e49ecb948ad381e4943d5b96a7a22ac701386"
-"checksum duckscriptsdk 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1bdbd838e33acba34abb076b94db7bba43e9dbaccd00486322ce314ddc7d0979"
-"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
-"checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
-"checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
-"checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
-"checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
-"checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
-"checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
-"checksum envmnt 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5fba7e7d8c007e12db7b3bd6f04b8e47e206c9173d9c75413a042ccc941723c8"
-"checksum fern 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8c9a4820f0ccc8a7afd67c39a0f1a0f4b07ca1725164271a64939d7aeb9af065"
-"checksum flate2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f"
-"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
-"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
-"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
-"checksum fs_extra 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5f2a4a2034423744d2cc7ca2068453168dcdb82c438419e639a26bd87839c674"
-"checksum fsio 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2131cb03096f67334dfba2f0bc46afc5564b08a919d042c6e217e2665741fc54"
-"checksum getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
-"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
-"checksum git_info 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "add3a9c3c08c8905a2165ff06891dd1c3bb32d81b2a32d79528abc9793dfb06f"
-"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
-"checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772"
-"checksum home 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654"
-"checksum http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b708cc7f06493459026f53b9a61a7a121a5d1ec6238dee58ea4941132b30156b"
-"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
-"checksum indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b54058f0a6ff80b6803da8faf8997cde53872b38f4023728f6830b06cd3c0dc"
-"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
-"checksum java-properties 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "caf4418ade5bde22a283a7f2fb537ea397ec102718f259f2630714e7a5b389fa"
-"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
-"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
-"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
-"checksum memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3197e20c7edb283f87c071ddfc7a2cca8f8e0b888c242959846a6fce03c72223"
-"checksum meval 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f79496a5651c8d57cd033c5add8ca7ee4e3d5f7587a4777484640d9cb60392d9"
-"checksum miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6f3f74f726ae935c3f514300cc6773a0c9492abc5e972d42ba0c0ebb88757625"
-"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e"
-"checksum nias 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab250442c86f1850815b5d268639dff018c0627022bc1940eb2d642ca1ce12f0"
-"checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce"
-"checksum num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6"
-"checksum openssl 0.10.26 (registry+https://github.com/rust-lang/crates.io-index)" = "3a3cc5799d98e1088141b8e01ff760112bbd9f19d850c124500566ca6901a585"
-"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
-"checksum openssl-sys 0.9.53 (registry+https://github.com/rust-lang/crates.io-index)" = "465d16ae7fc0e313318f7de5cecf57b2fbe7511fd213978b457e1c96ff46736f"
-"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
-"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
-"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
-"checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548"
-"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
-"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
-"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
-"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
-"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
-"checksum redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431"
-"checksum regex 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5508c1941e4e7cb19965abef075d35a9a8b5cdf0846f30b4050e9b55dc55e87"
-"checksum regex-syntax 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e734e891f5b408a29efbf8309e656876276f49ab6a6ac208600b4419bd893d90"
-"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
-"checksum run_script 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2dfbbb48b9c7ee71baadd968640f81ca4bc930c1a2029441eede96a6933275ac"
-"checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
-"checksum rust_info 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "be941f2b996df7ffaf093366039c9dc182b3ca2e00f3e81df44e08c3611e773d"
-"checksum rusty-hook 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "27138b73a8ce63ae918707a5e3b57f9b0c0842a57b82f0e43474cf4e3aaf0ff4"
-"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
-"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
-"checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021"
-"checksum security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8ef2429d7cefe5fd28bd1d2ed41c944547d4ff84776f5935b456da44593a16df"
-"checksum security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e31493fc37615debb8c5090a7aeb4a9730bc61e77ab10b9af59f1a202284f895"
-"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449"
-"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64"
-"checksum serde_json 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "9371ade75d4c2d6cb154141b9752cf3781ec9c05e0e5cf35060e1e70ee7b9c25"
-"checksum shell2batch 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "185a52ee351c1001753c9e3b2eb48c525ff7f51803a4f2cef4365b5c3b743f65"
-"checksum smallvec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44e59e0c9fa00817912ae6e4e6e3c4fe04455e75699d06eedc7d85917ed8e8f4"
-"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-"checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5"
-"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
-"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
-"checksum toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a"
-"checksum uname 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8"
-"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
-"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
-"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
-"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
-"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
-"checksum users 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c72f4267aea0c3ec6d07eaabea6ead7c5ddacfafc5e22bcf8d186706851fb4cf"
-"checksum vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
-"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
-"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
-"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
-"checksum which 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
-"checksum whoami 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a08eb844b158ea881e81b94556eede7f7e306e4c7b976aad88f49e6e36dec391"
-"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
-"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-"checksum winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80"
-"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/pkgs/development/tools/rust/cargo-make/default.nix b/pkgs/development/tools/rust/cargo-make/default.nix
index 520cd8cabcbb..0167588991a7 100644
--- a/pkgs/development/tools/rust/cargo-make/default.nix
+++ b/pkgs/development/tools/rust/cargo-make/default.nix
@@ -2,7 +2,7 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-make";
- version = "0.30.5";
+ version = "0.30.6";
src =
let
@@ -10,7 +10,7 @@ rustPlatform.buildRustPackage rec {
owner = "sagiegurari";
repo = pname;
rev = version;
- sha256 = "0p6rzkrwyfcrg4qrlb67rf0wb12kqldl1xg0rfnwc23y17fbwx49";
+ sha256 = "1kr3ay1gifyhwk6nlzq5vdi45583f5yvszk1pjsy2ki8l8j3ba3h";
};
in
runCommand "source" {} ''
@@ -24,7 +24,7 @@ rustPlatform.buildRustPackage rec {
buildInputs = [ openssl ]
++ stdenv.lib.optionals stdenv.isDarwin [ Security ];
- cargoSha256 = "0l3k4k63zx4gbdp5bnamrnhib2pw6z0d1ff06n8v2z7rcrawhlyx";
+ cargoSha256 = "002nqa35m0b45vv1rxxiq3w6y1a8h5zp47dc0v6rkl6ihm1wmdfc";
# Some tests fail because they need network access.
# However, Travis ensures a proper build.
diff --git a/pkgs/games/enyo-doom/default.nix b/pkgs/games/enyo-doom/default.nix
index af002a690e4d..ba07b50a1e75 100644
--- a/pkgs/games/enyo-doom/default.nix
+++ b/pkgs/games/enyo-doom/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitLab, cmake, qtbase }:
+{ mkDerivation, stdenv, fetchFromGitLab, cmake, qtbase }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "enyo-doom";
version = "1.06.9";
diff --git a/pkgs/games/pro-office-calculator/default.nix b/pkgs/games/pro-office-calculator/default.nix
index 4cfd7de6a55f..76be60a84850 100644
--- a/pkgs/games/pro-office-calculator/default.nix
+++ b/pkgs/games/pro-office-calculator/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchFromGitHub, tinyxml-2, cmake, qtbase, qtmultimedia }:
-stdenv.mkDerivation rec {
+{ mkDerivation, stdenv, fetchFromGitHub, tinyxml-2, cmake, qtbase, qtmultimedia }:
+mkDerivation rec {
version = "1.0.13";
pname = "pro-office-calculator";
diff --git a/pkgs/misc/calaos/installer/default.nix b/pkgs/misc/calaos/installer/default.nix
index 618bc6d85059..53fe9515df57 100644
--- a/pkgs/misc/calaos/installer/default.nix
+++ b/pkgs/misc/calaos/installer/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, qmake, qttools, qtbase }:
+{ mkDerivation, stdenv, fetchFromGitHub, qmake, qttools, qtbase }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
name = "calaos_installer-3.1";
version = "3.1";
diff --git a/pkgs/misc/emulators/firebird-emu/default.nix b/pkgs/misc/emulators/firebird-emu/default.nix
index 079af05e794d..3d87a9fa026a 100644
--- a/pkgs/misc/emulators/firebird-emu/default.nix
+++ b/pkgs/misc/emulators/firebird-emu/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, qmake, qtbase, qtdeclarative }:
+{ mkDerivation, stdenv, fetchFromGitHub, qmake, qtbase, qtdeclarative }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "firebird-emu";
version = "1.4";
diff --git a/pkgs/misc/emulators/yabause/default.nix b/pkgs/misc/emulators/yabause/default.nix
index abceb752b2f8..eeeb093e59cf 100644
--- a/pkgs/misc/emulators/yabause/default.nix
+++ b/pkgs/misc/emulators/yabause/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, cmake, pkgconfig, qtbase, qt5, libGLU, libGL
+{ mkDerivation, stdenv, fetchurl, cmake, pkgconfig, qtbase, qt5, libGLU, libGL
, freeglut ? null, openal ? null, SDL2 ? null }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "yabause";
version = "0.9.15";
diff --git a/pkgs/os-specific/linux/kernel/linux-4.19.nix b/pkgs/os-specific/linux/kernel/linux-4.19.nix
index cdb19fd54ab7..ab3d1b1a7196 100644
--- a/pkgs/os-specific/linux/kernel/linux-4.19.nix
+++ b/pkgs/os-specific/linux/kernel/linux-4.19.nix
@@ -3,7 +3,7 @@
with stdenv.lib;
buildLinux (args // rec {
- version = "4.19.116";
+ version = "4.19.118";
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
modDirVersion = if (modDirVersionArg == null) then concatStringsSep "." (take 3 (splitVersion "${version}.0")) else modDirVersionArg;
@@ -13,6 +13,6 @@ buildLinux (args // rec {
src = fetchurl {
url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
- sha256 = "0r3vdc3npl1bn06w9v6wsq7d5mm7bnhm9wsz36pb9ar3xhimvrlf";
+ sha256 = "15lcq3xky59v88vb8vvnmgcsmm1fadz0m4jyrii6rynsz5jr6x49";
};
} // (args.argsOverride or {}))
diff --git a/pkgs/os-specific/linux/kernel/linux-5.4.nix b/pkgs/os-specific/linux/kernel/linux-5.4.nix
index b2de6ea86899..08b28bc98dcd 100644
--- a/pkgs/os-specific/linux/kernel/linux-5.4.nix
+++ b/pkgs/os-specific/linux/kernel/linux-5.4.nix
@@ -3,7 +3,7 @@
with stdenv.lib;
buildLinux (args // rec {
- version = "5.4.33";
+ version = "5.4.35";
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
modDirVersion = if (modDirVersionArg == null) then concatStringsSep "." (take 3 (splitVersion "${version}.0")) else modDirVersionArg;
@@ -13,6 +13,6 @@ buildLinux (args // rec {
src = fetchurl {
url = "mirror://kernel/linux/kernel/v5.x/linux-${version}.tar.xz";
- sha256 = "0q9q48ij6vppfcrdf7fr24pvpwsd13pxjkdni6rnjq9a60hrcmxm";
+ sha256 = "1m06k19pbb3wz8z2dgf03jvzbbdh6q8jwwdz509s902a53vxasz1";
};
} // (args.argsOverride or {}))
diff --git a/pkgs/os-specific/linux/kernel/linux-5.5.nix b/pkgs/os-specific/linux/kernel/linux-5.6.nix
similarity index 86%
rename from pkgs/os-specific/linux/kernel/linux-5.5.nix
rename to pkgs/os-specific/linux/kernel/linux-5.6.nix
index c4fbe1aea5e9..a31e6e26d3f6 100644
--- a/pkgs/os-specific/linux/kernel/linux-5.5.nix
+++ b/pkgs/os-specific/linux/kernel/linux-5.6.nix
@@ -3,7 +3,7 @@
with stdenv.lib;
buildLinux (args // rec {
- version = "5.5.17";
+ version = "5.6.7";
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
modDirVersion = if (modDirVersionArg == null) then concatStringsSep "." (take 3 (splitVersion "${version}.0")) else modDirVersionArg;
@@ -13,6 +13,6 @@ buildLinux (args // rec {
src = fetchurl {
url = "mirror://kernel/linux/kernel/v5.x/linux-${version}.tar.xz";
- sha256 = "06aqhlysa7zdj6c69hyii3hfqlfa9751ivga38rbqw1lr2gbbnj0";
+ sha256 = "1jljcva3gxg1yc2kw3jjgmhzzdm16nylzxl63zbndjza547l5813";
};
} // (args.argsOverride or {}))
diff --git a/pkgs/servers/matrix-synapse/default.nix b/pkgs/servers/matrix-synapse/default.nix
index 6b06a493509a..bcee165e071b 100644
--- a/pkgs/servers/matrix-synapse/default.nix
+++ b/pkgs/servers/matrix-synapse/default.nix
@@ -23,11 +23,11 @@ let
in buildPythonApplication rec {
pname = "matrix-synapse";
- version = "1.12.1";
+ version = "1.12.4";
src = fetchPypi {
inherit pname version;
- sha256 = "0l3a5dvnahrzwqh8p0cnfr019bxxgd769jk2wprfvfd65h7p0g1r";
+ sha256 = "0psr17ai42ma9923g9bj3q9fd8kph9rx7jpxsxwbfzr2y6lwr306";
};
patches = [
diff --git a/pkgs/tools/admin/pulumi/default.nix b/pkgs/tools/admin/pulumi/default.nix
index d6fc6e8a837a..3ac245b97b7f 100644
--- a/pkgs/tools/admin/pulumi/default.nix
+++ b/pkgs/tools/admin/pulumi/default.nix
@@ -17,10 +17,11 @@ in stdenv.mkDerivation {
installPhase = ''
mkdir -p $out/bin
cp * $out/bin/
+ '' + optionalString stdenv.isLinux ''
wrapProgram $out/bin/pulumi --set LD_LIBRARY_PATH "${stdenv.cc.cc.lib}/lib"
'';
- buildInputs = optionals stdenv.isLinux [ autoPatchelfHook makeWrapper ];
+ nativeBuildInputs = optionals stdenv.isLinux [ autoPatchelfHook makeWrapper ];
meta = {
homepage = https://pulumi.io/;
diff --git a/pkgs/tools/admin/tigervnc/default.nix b/pkgs/tools/admin/tigervnc/default.nix
index 9f105a7d5d55..0bb291d797ba 100644
--- a/pkgs/tools/admin/tigervnc/default.nix
+++ b/pkgs/tools/admin/tigervnc/default.nix
@@ -76,7 +76,7 @@ stdenv.mkDerivation rec {
rm -f $out/lib/xorg/protocol.txt
wrapProgram $out/bin/vncserver \
- --prefix PATH : ${stdenv.lib.makeBinPath (with xorg; [ xterm twm xsetroot ]) }
+ --prefix PATH : ${stdenv.lib.makeBinPath (with xorg; [ xterm twm xsetroot xauth ]) }
'';
buildInputs = with xorg; [
diff --git a/pkgs/tools/archivers/p7zip/default.nix b/pkgs/tools/archivers/p7zip/default.nix
index 465bc474a9e5..2ffc20781cbe 100644
--- a/pkgs/tools/archivers/p7zip/default.nix
+++ b/pkgs/tools/archivers/p7zip/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl }:
+{ stdenv, fetchurl, lib, enableUnfree ? false }:
stdenv.mkDerivation rec {
pname = "p7zip";
@@ -24,6 +24,11 @@ stdenv.mkDerivation rec {
substituteInPlace makefile.machine \
--replace 'CC=gcc' 'CC=${stdenv.cc.targetPrefix}gcc' \
--replace 'CXX=g++' 'CXX=${stdenv.cc.targetPrefix}g++'
+ '' + lib.optionalString (!enableUnfree) ''
+ # Remove non-free RAR source code
+ # (see DOC/License.txt, https://fedoraproject.org/wiki/Licensing:Unrar)
+ rm -r CPP/7zip/Compress/Rar*
+ find . -name makefile'*' -exec sed -i '/Rar/d' {} +
'';
preConfigure = ''
@@ -42,9 +47,9 @@ stdenv.mkDerivation rec {
meta = {
homepage = http://p7zip.sourceforge.net/;
description = "A port of the 7-zip archiver";
- # license = stdenv.lib.licenses.lgpl21Plus; + "unRAR restriction"
platforms = stdenv.lib.platforms.unix;
maintainers = [ stdenv.lib.maintainers.raskin ];
- license = stdenv.lib.licenses.lgpl2Plus;
+ # RAR code is under non-free UnRAR license, but we remove it
+ license = if enableUnfree then lib.licenses.unfree else lib.licenses.lgpl2Plus;
};
}
diff --git a/pkgs/tools/backup/httrack/qt.nix b/pkgs/tools/backup/httrack/qt.nix
index 8cf3eb29462c..55ad6acf9335 100644
--- a/pkgs/tools/backup/httrack/qt.nix
+++ b/pkgs/tools/backup/httrack/qt.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, cmake, pkgconfig, makeWrapper
+{ mkDerivation, stdenv, fetchurl, cmake, pkgconfig, makeWrapper
, httrack, qtbase, qtmultimedia }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "httraqt";
version = "1.4.9";
diff --git a/pkgs/tools/backup/luckybackup/default.nix b/pkgs/tools/backup/luckybackup/default.nix
index 3e89be15391f..7203ba480e60 100644
--- a/pkgs/tools/backup/luckybackup/default.nix
+++ b/pkgs/tools/backup/luckybackup/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchurl
+{ mkDerivation, stdenv, fetchurl
, pkgconfig, libtool, qmake
, rsync, ssh
}:
with stdenv.lib;
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "luckybackup";
version = "0.5.0";
diff --git a/pkgs/tools/graphics/rocket/default.nix b/pkgs/tools/graphics/rocket/default.nix
index 97c400fbc9e3..683a2c73f454 100644
--- a/pkgs/tools/graphics/rocket/default.nix
+++ b/pkgs/tools/graphics/rocket/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, qmake, qtbase }:
+{ mkDerivation, stdenv, fetchFromGitHub, qmake, qtbase }:
-stdenv.mkDerivation {
+mkDerivation {
pname = "rocket";
version = "2018-06-09";
diff --git a/pkgs/tools/misc/colord-kde/default.nix b/pkgs/tools/misc/colord-kde/default.nix
index 41c80146e68f..7c075c91ebc9 100644
--- a/pkgs/tools/misc/colord-kde/default.nix
+++ b/pkgs/tools/misc/colord-kde/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, lib, fetchurl
+{ mkDerivation, lib, fetchurl
, extra-cmake-modules, ki18n
, kconfig, kconfigwidgets, kcoreaddons, kdbusaddons, kiconthemes, kcmutils
, kio, knotifications, plasma-framework, kwidgetsaddons, kwindowsystem
, kitemviews, lcms2, libXrandr, qtx11extras
}:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "colord-kde";
version = "0.5.0";
diff --git a/pkgs/tools/networking/openvpn/default.nix b/pkgs/tools/networking/openvpn/default.nix
index c8aa2c1f5c57..a8cd7c7693bb 100644
--- a/pkgs/tools/networking/openvpn/default.nix
+++ b/pkgs/tools/networking/openvpn/default.nix
@@ -19,11 +19,11 @@ let
in stdenv.mkDerivation rec {
pname = "openvpn";
- version = "2.4.7";
+ version = "2.4.9";
src = fetchurl {
url = "https://swupdate.openvpn.net/community/releases/${pname}-${version}.tar.xz";
- sha256 = "0j7na936isk9j8nsdrrbw7wmy09inmjqvsb8mw8az7k61xbm6bx4";
+ sha256 = "1qpbllwlha7cffsd5dlddb8rl22g9rar5zflkz1wrcllhvfkl7v4";
};
nativeBuildInputs = [ pkgconfig ];
@@ -33,13 +33,6 @@ in stdenv.mkDerivation rec {
++ optional useSystemd systemd
++ optional pkcs11Support pkcs11helper;
- patches = [
- ( fetchpatch {
- url = "https://sources.debian.org/data/main/o/openvpn/2.4.7-1/debian/patches/fix-pkcs11-helper-hang.patch";
- sha256 = "0c8jzbfsmb0mm9f7kkjxac1hk8q6igm267s687vx3mdqs1wys6bm";
- })
- ];
-
configureFlags = optionals stdenv.isLinux [
"--enable-iproute2"
"IPROUTE=${iproute}/sbin/ip" ]
diff --git a/pkgs/tools/networking/slimrat/default.nix b/pkgs/tools/networking/slimrat/default.nix
deleted file mode 100644
index 8632a33e3498..000000000000
--- a/pkgs/tools/networking/slimrat/default.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{stdenv, fetchurl, perlPackages, makeWrapper}:
-
-stdenv.mkDerivation {
- name = "slimrat-1.0";
- src = fetchurl {
- url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/slimrat/slimrat-1.0.tar.bz2";
- sha256 = "139b71d45k4b1y47iq62a9732cnaqqbh8s4knkrgq2hx0jxpsk5a";
- };
-
- buildInputs = [ makeWrapper ] ++ (with perlPackages; [ perl WWWMechanize LWP ]);
-
- patchPhase = ''
- sed -e 's,#!.*,#!${perlPackages.perl}/bin/perl,' -i src/{slimrat,slimrat-gui}
- '';
-
- installPhase = ''
- mkdir -p $out/share/slimrat $out/bin
- cp -R src/* $out/share/slimrat
- # slimrat-gui does not work (it needs the Gtk2 perl package)
- for i in slimrat; do
- makeWrapper $out/share/slimrat/$i $out/bin/$i \
- --prefix PERL5LIB : $PERL5LIB
- done
- '';
-
- meta = {
- homepage = https://code.google.com/archive/p/slimrat/;
- description = "Linux Rapidshare downloader";
- license = stdenv.lib.licenses.mit;
- platforms = stdenv.lib.platforms.unix;
- broken = true; # officially abandonned upstream
- };
-}
diff --git a/pkgs/tools/package-management/nixpkgs-review/default.nix b/pkgs/tools/package-management/nixpkgs-review/default.nix
index 9f54d82d3cd2..ee7ba5f5ea76 100644
--- a/pkgs/tools/package-management/nixpkgs-review/default.nix
+++ b/pkgs/tools/package-management/nixpkgs-review/default.nix
@@ -8,13 +8,13 @@
python3.pkgs.buildPythonApplication rec {
pname = "nixpkgs-review";
- version = "2.2.0";
+ version = "2.3.0";
src = fetchFromGitHub {
owner = "Mic92";
repo = "nixpkgs-review";
rev = version;
- sha256 = "0qsvrcxl97nih1yprydzlqc6n1ppg726664d6harx5kjzp5776mr";
+ sha256 = "0qkvjl4f8a1905yj3ml32rfdr5q76igz21gn3dcya0pfqhrnb28i";
};
makeWrapperArgs = [
diff --git a/pkgs/tools/text/glogg/default.nix b/pkgs/tools/text/glogg/default.nix
index 6e9ff5170f2b..ba75adf88b8e 100644
--- a/pkgs/tools/text/glogg/default.nix
+++ b/pkgs/tools/text/glogg/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, qmake, boost }:
+{ mkDerivation, stdenv, fetchurl, qmake, boost }:
-stdenv.mkDerivation rec {
+mkDerivation rec {
pname = "glogg";
version = "1.1.4";
diff --git a/pkgs/tools/typesetting/tex/texlive/bin.nix b/pkgs/tools/typesetting/tex/texlive/bin.nix
index 6054ea5c6e92..6ec2e9afa6b0 100644
--- a/pkgs/tools/typesetting/tex/texlive/bin.nix
+++ b/pkgs/tools/typesetting/tex/texlive/bin.nix
@@ -26,10 +26,7 @@ let
sha256 = "1dfps39q6bdr1zsbp9p74mvalmy3bycihv19sb9c6kg30kprz8nj";
};
- patches = [
- ];
-
- postPatch = let
+ prePatch = let
# The source compatible with Poppler ${popplerVersion} not yet available in TeXLive ${year}
# so we need to use files introduced in https://www.tug.org/svn/texlive?view=revision&revision=52959
popplerVersion = "0.83.0";
@@ -68,11 +65,21 @@ let
done
cp -pv ${pdftoepdf} texk/web2c/pdftexdir/pdftoepdf.cc
cp -pv ${pdftosrc} texk/web2c/pdftexdir/pdftosrc.cc
-
- # poppler 0.84 compat fixups, use 0.83 files otherwise
- patch -p1 -i ${./poppler84.patch}
'';
+ patches = [
+ # poppler 0.84 compat fixups, use 0.83 files otherwise
+ ./poppler84.patch
+
+ # Needed for ghostscript>=9.50
+ (fetchpatch {
+ name = "xdvipdfm-fix.patch";
+ url = "https://www.tug.org/svn/texlive/trunk/Build/source/texk/dvipdfm-x/spc_dvips.c?view=patch&r1=52765&r2=52764&pathrev=52765";
+ sha256 = "0qvrc7yxhbl5f4g340z8aql388bwib0m2gxd473skbmviy5bjr3f";
+ stripLen = 2;
+ })
+ ];
+
# remove when removing synctex-missing-header.patch
preAutoreconf = "pushd texk/web2c";
postAutoreconf = "popd";
@@ -108,7 +115,7 @@ core = stdenv.mkDerivation rec {
pname = "texlive-bin";
inherit version;
- inherit (common) src patches postPatch preAutoreconf postAutoreconf;
+ inherit (common) src patches prePatch preAutoreconf postAutoreconf;
outputs = [ "out" "doc" ];
@@ -201,7 +208,7 @@ core-big = stdenv.mkDerivation { #TODO: upmendex
pname = "texlive-core-big.bin";
inherit version;
- inherit (common) src patches postPatch preAutoreconf postAutoreconf;
+ inherit (common) src patches prePatch preAutoreconf postAutoreconf;
hardeningDisable = [ "format" ];
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index d4e517bbd7d6..d08455db4bec 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -6457,8 +6457,6 @@ in
sleepyhead = callPackage ../applications/misc/sleepyhead {};
- slimrat = callPackage ../tools/networking/slimrat { };
-
slirp4netns = callPackage ../tools/networking/slirp4netns/default.nix { };
slsnif = callPackage ../tools/misc/slsnif { };
@@ -16497,7 +16495,7 @@ in
];
};
- linux_5_5 = callPackage ../os-specific/linux/kernel/linux-5.5.nix {
+ linux_5_6 = callPackage ../os-specific/linux/kernel/linux-5.6.nix {
kernelPatches = [
kernelPatches.bridge_stp_helper
kernelPatches.request_key_helper
@@ -16712,7 +16710,7 @@ in
linux = linuxPackages.kernel;
# Update this when adding the newest kernel major version!
- linuxPackages_latest = linuxPackages_5_5;
+ linuxPackages_latest = linuxPackages_5_6;
linux_latest = linuxPackages_latest.kernel;
# Build the kernel modules for the some of the kernels.
@@ -16726,7 +16724,7 @@ in
linuxPackages_4_14 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_14);
linuxPackages_4_19 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_19);
linuxPackages_5_4 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_5_4);
- linuxPackages_5_5 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_5_5);
+ linuxPackages_5_6 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_5_6);
# When adding to this list:
# - Update linuxPackages_latest to the latest version