Merge master into staging-next

gstqt5
Frederik Rietdijk 2020-05-02 09:39:00 +02:00
commit afb1041148
148 changed files with 5000 additions and 2598 deletions

View File

@ -1480,6 +1480,12 @@
githubId = 848609;
name = "Michael Bishop";
};
cmacrae = {
email = "hi@cmacr.ae";
github = "cmacrae";
githubId = 3392199;
name = "Calum MacRae";
};
cmcdragonkai = {
email = "roger.qiu@matrix.ai";
github = "cmcdragonkai";
@ -8263,6 +8269,12 @@
githubId = 483465;
name = "Mateusz Wykurz";
};
wulfsta = {
email = "wulfstawulfsta@gmail.com";
github = "Wulfsta";
githubId = 13378502;
name = "Wulfsta";
};
wyvie = {
email = "elijahrum@gmail.com";
github = "wyvie";

View File

@ -31,6 +31,7 @@
<xref linkend="opt-services.xserver.windowManager.twm.enable"/> = true;
<xref linkend="opt-services.xserver.windowManager.icewm.enable"/> = true;
<xref linkend="opt-services.xserver.windowManager.i3.enable"/> = true;
<xref linkend="opt-services.xserver.windowManager.herbstluftwm.enable"/> = true;
</programlisting>
</para>
<para>

View File

@ -290,6 +290,27 @@ php.override {
has been set to <literal>true</literal>.
</para>
</listitem>
<listitem>
<para>
The <literal>systemd-networkd</literal> option
<literal>systemd.network.networks.&lt;name&gt;.dhcp.CriticalConnection</literal>
has been removed following upstream systemd's deprecation of the same. It is recommended to use
<literal>systemd.network.networks.&lt;name&gt;.networkConfig.KeepConfiguration</literal> instead.
See <citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
</para>
</listitem>
<listitem>
<para>
The <literal>systemd-networkd</literal> option
<literal>systemd.network.networks._name_.dhcpConfig</literal>
has been renamed to
<xref linkend="opt-systemd.network.networks._name_.dhcpV4Config"/>
following upstream systemd's documentation change.
See <citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
</para>
</listitem>
</itemizedlist>
</section>

View File

@ -9,9 +9,7 @@ let
HomepageLocation = cfg.homepageLocation;
DefaultSearchProviderSearchURL = cfg.defaultSearchProviderSearchURL;
DefaultSearchProviderSuggestURL = cfg.defaultSearchProviderSuggestURL;
ExtensionInstallForcelist = map (extension:
"${extension};https://clients2.google.com/service/update2/crx"
) cfg.extensions;
ExtensionInstallForcelist = cfg.extensions;
};
in
@ -28,7 +26,11 @@ in
List of chromium extensions to install.
For list of plugins ids see id in url of extensions on
<link xlink:href="https://chrome.google.com/webstore/category/extensions">chrome web store</link>
page.
page. To install a chromium extension not included in the chrome web
store, append to the extension id a semicolon ";" followed by a URL
pointing to an Update Manifest XML file. See
<link xlink:href="https://www.chromium.org/administrators/policy-list-3#ExtensionInstallForcelist">ExtensionInstallForcelist</link>
for additional details.
'';
default = [];
example = literalExample ''

View File

@ -45,7 +45,32 @@ in
config = mkIf cfg.enable {
environment.etc.xonshrc.text = cfg.config;
environment.etc.xonshrc.text = ''
# /etc/xonshrc: DO NOT EDIT -- this file has been generated automatically.
if not ''${...}.get('__NIXOS_SET_ENVIRONMENT_DONE'):
# The NixOS environment and thereby also $PATH
# haven't been fully set up at this point. But
# `source-bash` below requires `bash` to be on $PATH,
# so add an entry with bash's location:
$PATH.add('${pkgs.bash}/bin')
# Stash xonsh's ls alias, so that we don't get a collision
# with Bash's ls alias from environment.shellAliases:
_ls_alias = aliases.pop('ls', None)
# Source the NixOS environment config.
source-bash "${config.system.build.setEnvironment}"
# Restore xonsh's ls alias, overriding that from Bash (if any).
if _ls_alias is not None:
aliases['ls'] = _ls_alias
del _ls_alias
${cfg.config}
'';
environment.systemPackages = [ cfg.package ];

View File

@ -1,9 +1,7 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.prosody;
sslOpts = { ... }: {
@ -30,8 +28,21 @@ let
};
};
discoOpts = {
options = {
url = mkOption {
type = types.str;
description = "URL of the endpoint you want to make discoverable";
};
description = mkOption {
type = types.str;
description = "A short description of the endpoint you want to advertise";
};
};
};
moduleOpts = {
# Generally required
# Required for compliance with https://compliance.conversations.im/about/
roster = mkOption {
type = types.bool;
default = true;
@ -69,6 +80,18 @@ let
description = "Keep multiple clients in sync";
};
csi = mkOption {
type = types.bool;
default = true;
description = "Implements the CSI protocol that allows clients to report their active/inactive state to the server";
};
cloud_notify = mkOption {
type = types.bool;
default = true;
description = "Push notifications to inform users of new messages or other pertinent information even when they have no XMPP clients online";
};
pep = mkOption {
type = types.bool;
default = true;
@ -89,10 +112,22 @@ let
vcard = mkOption {
type = types.bool;
default = true;
default = false;
description = "Allow users to set vCards";
};
vcard_legacy = mkOption {
type = types.bool;
default = true;
description = "Converts users profiles and Avatars between old and new formats";
};
bookmarks = mkOption {
type = types.bool;
default = true;
description = "Allows interop between older clients that use XEP-0048: Bookmarks in its 1.0 version and recent clients which use it in PEP";
};
# Nice to have
version = mkOption {
type = types.bool;
@ -126,10 +161,16 @@ let
mam = mkOption {
type = types.bool;
default = false;
default = true;
description = "Store messages in an archive and allow users to access it";
};
smacks = mkOption {
type = types.bool;
default = true;
description = "Allow a client to resume a disconnected session, and prevent message loss";
};
# Admin interfaces
admin_adhoc = mkOption {
type = types.bool;
@ -137,6 +178,18 @@ let
description = "Allows administration via an XMPP client that supports ad-hoc commands";
};
http_files = mkOption {
type = types.bool;
default = true;
description = "Serve static files from a directory over HTTP";
};
proxy65 = mkOption {
type = types.bool;
default = true;
description = "Enables a file transfer proxy service which clients behind NAT can use";
};
admin_telnet = mkOption {
type = types.bool;
default = false;
@ -156,12 +209,6 @@ let
description = "Enable WebSocket support";
};
http_files = mkOption {
type = types.bool;
default = false;
description = "Serve static files from a directory over HTTP";
};
# Other specific functionality
limits = mkOption {
type = types.bool;
@ -210,13 +257,6 @@ let
default = false;
description = "Legacy authentication. Only used by some old clients and bots";
};
proxy65 = mkOption {
type = types.bool;
default = false;
description = "Enables a file transfer proxy service which clients behind NAT can use";
};
};
toLua = x:
@ -235,6 +275,153 @@ let
};
'';
mucOpts = { ... }: {
options = {
domain = mkOption {
type = types.str;
description = "Domain name of the MUC";
};
name = mkOption {
type = types.str;
description = "The name to return in service discovery responses for the MUC service itself";
default = "Prosody Chatrooms";
};
restrictRoomCreation = mkOption {
type = types.enum [ true false "admin" "local" ];
default = false;
description = "Restrict room creation to server admins";
};
maxHistoryMessages = mkOption {
type = types.int;
default = 20;
description = "Specifies a limit on what each room can be configured to keep";
};
roomLocking = mkOption {
type = types.bool;
default = true;
description = ''
Enables room locking, which means that a room must be
configured before it can be used. Locked rooms are invisible
and cannot be entered by anyone but the creator
'';
};
roomLockTimeout = mkOption {
type = types.int;
default = 300;
description = ''
Timout after which the room is destroyed or unlocked if not
configured, in seconds
'';
};
tombstones = mkOption {
type = types.bool;
default = true;
description = ''
When a room is destroyed, it leaves behind a tombstone which
prevents the room being entered or recreated. It also allows
anyone who was not in the room at the time it was destroyed
to learn about it, and to update their bookmarks. Tombstones
prevents the case where someone could recreate a previously
semi-anonymous room in order to learn the real JIDs of those
who often join there.
'';
};
tombstoneExpiry = mkOption {
type = types.int;
default = 2678400;
description = ''
This settings controls how long a tombstone is considered
valid. It defaults to 31 days. After this time, the room in
question can be created again.
'';
};
vcard_muc = mkOption {
type = types.bool;
default = true;
description = "Adds the ability to set vCard for Multi User Chat rooms";
};
# Extra parameters. Defaulting to prosody default values.
# Adding them explicitly to make them visible from the options
# documentation.
#
# See https://prosody.im/doc/modules/mod_muc for more details.
roomDefaultPublic = mkOption {
type = types.bool;
default = true;
description = "If set, the MUC rooms will be public by default.";
};
roomDefaultMembersOnly = mkOption {
type = types.bool;
default = false;
description = "If set, the MUC rooms will only be accessible to the members by default.";
};
roomDefaultModerated = mkOption {
type = types.bool;
default = false;
description = "If set, the MUC rooms will be moderated by default.";
};
roomDefaultPublicJids = mkOption {
type = types.bool;
default = false;
description = "If set, the MUC rooms will display the public JIDs by default.";
};
roomDefaultChangeSubject = mkOption {
type = types.bool;
default = false;
description = "If set, the rooms will display the public JIDs by default.";
};
roomDefaultHistoryLength = mkOption {
type = types.int;
default = 20;
description = "Number of history message sent to participants by default.";
};
roomDefaultLanguage = mkOption {
type = types.str;
default = "en";
description = "Default room language.";
};
};
};
uploadHttpOpts = { ... }: {
options = {
domain = mkOption {
type = types.nullOr types.str;
description = "Domain name for the http-upload service";
};
uploadFileSizeLimit = mkOption {
type = types.str;
default = "50 * 1024 * 1024";
description = "Maximum file size, in bytes. Defaults to 50MB.";
};
uploadExpireAfter = mkOption {
type = types.str;
default = "60 * 60 * 24 * 7";
description = "Max age of a file before it gets deleted, in seconds.";
};
userQuota = mkOption {
type = types.nullOr types.int;
default = null;
example = 1234;
description = ''
Maximum size of all uploaded files per user, in bytes. There
will be no quota if this option is set to null.
'';
};
httpUploadPath = mkOption {
type = types.str;
description = ''
Directory where the uploaded files will be stored. By
default, uploaded files are put in a sub-directory of the
default Prosody storage path (usually /var/lib/prosody).
'';
default = "/var/lib/prosody";
};
};
};
vHostOpts = { ... }: {
options = {
@ -283,6 +470,27 @@ in
description = "Whether to enable the prosody server";
};
xmppComplianceSuite = mkOption {
type = types.bool;
default = true;
description = ''
The XEP-0423 defines a set of recommended XEPs to implement
for a server. It's generally a good idea to implement this
set of extensions if you want to provide your users with a
good XMPP experience.
This NixOS module aims to provide a "advanced server"
experience as per defined in the XEP-0423[1] specification.
Setting this option to true will prevent you from building a
NixOS configuration which won't comply with this standard.
You can explicitely decide to ignore this standard if you
know what you are doing by setting this option to false.
[1] https://xmpp.org/extensions/xep-0423.html
'';
};
package = mkOption {
type = types.package;
description = "Prosody package to use";
@ -302,6 +510,12 @@ in
default = "/var/lib/prosody";
};
disco_items = mkOption {
type = types.listOf (types.submodule discoOpts);
default = [];
description = "List of discoverable items you want to advertise.";
};
user = mkOption {
type = types.str;
default = "prosody";
@ -320,6 +534,31 @@ in
description = "Allow account creation";
};
# HTTP server-related options
httpPorts = mkOption {
type = types.listOf types.int;
description = "Listening HTTP ports list for this service.";
default = [ 5280 ];
};
httpInterfaces = mkOption {
type = types.listOf types.str;
default = [ "*" "::" ];
description = "Interfaces on which the HTTP server will listen on.";
};
httpsPorts = mkOption {
type = types.listOf types.int;
description = "Listening HTTPS ports list for this service.";
default = [ 5281 ];
};
httpsInterfaces = mkOption {
type = types.listOf types.str;
default = [ "*" "::" ];
description = "Interfaces on which the HTTPS server will listen on.";
};
c2sRequireEncryption = mkOption {
type = types.bool;
default = true;
@ -387,6 +626,26 @@ in
description = "Addtional path in which to look find plugins/modules";
};
uploadHttp = mkOption {
description = ''
Configures the Prosody builtin HTTP server to handle user uploads.
'';
type = types.nullOr (types.submodule uploadHttpOpts);
default = null;
example = {
domain = "uploads.my-xmpp-example-host.org";
};
};
muc = mkOption {
type = types.listOf (types.submodule mucOpts);
default = [ ];
example = [ {
domain = "conference.my-xmpp-example-host.org";
} ];
description = "Multi User Chat (MUC) configuration";
};
virtualHosts = mkOption {
description = "Define the virtual hosts";
@ -443,9 +702,44 @@ in
config = mkIf cfg.enable {
assertions = let
genericErrMsg = ''
Having a server not XEP-0423-compliant might make your XMPP
experience terrible. See the NixOS manual for further
informations.
If you know what you're doing, you can disable this warning by
setting config.services.prosody.xmppComplianceSuite to false.
'';
errors = [
{ assertion = (builtins.length cfg.muc > 0) || !cfg.xmppComplianceSuite;
message = ''
You need to setup at least a MUC domain to comply with
XEP-0423.
'' + genericErrMsg;}
{ assertion = cfg.uploadHttp != null || !cfg.xmppComplianceSuite;
message = ''
You need to setup the uploadHttp module through
config.services.prosody.uploadHttp to comply with
XEP-0423.
'' + genericErrMsg;}
];
in errors;
environment.systemPackages = [ cfg.package ];
environment.etc."prosody/prosody.cfg.lua".text = ''
environment.etc."prosody/prosody.cfg.lua".text =
let
httpDiscoItems = if (cfg.uploadHttp != null)
then [{ url = cfg.uploadHttp.domain; description = "HTTP upload endpoint";}]
else [];
mucDiscoItems = builtins.foldl'
(acc: muc: [{ url = muc.domain; description = "${muc.domain} MUC endpoint";}] ++ acc)
[]
cfg.muc;
discoItems = cfg.disco_items ++ httpDiscoItems ++ mucDiscoItems;
in ''
pidfile = "/run/prosody/prosody.pid"
@ -472,6 +766,10 @@ in
${ lib.concatStringsSep "\n" (map (x: "${toLua x};") cfg.extraModules)}
};
disco_items = {
${ lib.concatStringsSep "\n" (builtins.map (x: ''{ "${x.url}", "${x.description}"};'') discoItems)}
};
allow_registration = ${toLua cfg.allowRegistration}
c2s_require_encryption = ${toLua cfg.c2sRequireEncryption}
@ -486,6 +784,42 @@ in
authentication = ${toLua cfg.authentication}
http_interfaces = ${toLua cfg.httpInterfaces}
https_interfaces = ${toLua cfg.httpsInterfaces}
http_ports = ${toLua cfg.httpPorts}
https_ports = ${toLua cfg.httpsPorts}
${lib.concatMapStrings (muc: ''
Component ${toLua muc.domain} "muc"
modules_enabled = { "muc_mam"; ${optionalString muc.vcard_muc ''"vcard_muc";'' } }
name = ${toLua muc.name}
restrict_room_creation = ${toLua muc.restrictRoomCreation}
max_history_messages = ${toLua muc.maxHistoryMessages}
muc_room_locking = ${toLua muc.roomLocking}
muc_room_lock_timeout = ${toLua muc.roomLockTimeout}
muc_tombstones = ${toLua muc.tombstones}
muc_tombstone_expiry = ${toLua muc.tombstoneExpiry}
muc_room_default_public = ${toLua muc.roomDefaultPublic}
muc_room_default_members_only = ${toLua muc.roomDefaultMembersOnly}
muc_room_default_moderated = ${toLua muc.roomDefaultModerated}
muc_room_default_public_jids = ${toLua muc.roomDefaultPublicJids}
muc_room_default_change_subject = ${toLua muc.roomDefaultChangeSubject}
muc_room_default_history_length = ${toLua muc.roomDefaultHistoryLength}
muc_room_default_language = ${toLua muc.roomDefaultLanguage}
'') cfg.muc}
${ lib.optionalString (cfg.uploadHttp != null) ''
Component ${toLua cfg.uploadHttp.domain} "http_upload"
http_upload_file_size_limit = ${cfg.uploadHttp.uploadFileSizeLimit}
http_upload_expire_after = ${cfg.uploadHttp.uploadExpireAfter}
${lib.optionalString (cfg.uploadHttp.userQuota != null) "http_upload_quota = ${toLua cfg.uploadHttp.userQuota}"}
http_upload_path = ${toLua cfg.uploadHttp.httpUploadPath}
''}
${ cfg.extraConfig }
${ lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: ''
@ -522,9 +856,22 @@ in
PIDFile = "/run/prosody/prosody.pid";
ExecStart = "${cfg.package}/bin/prosodyctl start";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
MemoryDenyWriteExecute = true;
PrivateDevices = true;
PrivateMounts = true;
PrivateTmp = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
};
};
};
meta.doc = ./prosody.xml;
}

View File

@ -0,0 +1,88 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
version="5.0"
xml:id="module-services-prosody">
<title>Prosody</title>
<para>
<link xlink:href="https://prosody.im/">Prosody</link> is an open-source, modern XMPP server.
</para>
<section xml:id="module-services-prosody-basic-usage">
<title>Basic usage</title>
<para>
A common struggle for most XMPP newcomers is to find the right set
of XMPP Extensions (XEPs) to setup. Forget to activate a few of
those and your XMPP experience might turn into a nightmare!
</para>
<para>
The XMPP community tackles this problem by creating a meta-XEP
listing a decent set of XEPs you should implement. This meta-XEP
is issued every year, the 2020 edition being
<link xlink:href="https://xmpp.org/extensions/xep-0423.html">XEP-0423</link>.
</para>
<para>
The NixOS Prosody module will implement most of these recommendend XEPs out of
the box. That being said, two components still require some
manual configuration: the
<link xlink:href="https://xmpp.org/extensions/xep-0045.html">Multi User Chat (MUC)</link>
and the <link xlink:href="https://xmpp.org/extensions/xep-0363.html">HTTP File Upload</link> ones.
You'll need to create a DNS subdomain for each of those. The current convention is to name your
MUC endpoint <literal>conference.example.org</literal> and your HTTP upload domain <literal>upload.example.org</literal>.
</para>
<para>
A good configuration to start with, including a
<link xlink:href="https://xmpp.org/extensions/xep-0045.html">Multi User Chat (MUC)</link>
endpoint as well as a <link xlink:href="https://xmpp.org/extensions/xep-0363.html">HTTP File Upload</link>
endpoint will look like this:
<programlisting>
services.prosody = {
<link linkend="opt-services.prosody.enable">enable</link> = true;
<link linkend="opt-services.prosody.admins">admins</link> = [ "root@example.org" ];
<link linkend="opt-services.prosody.ssl.cert">ssl.cert</link> = "/var/lib/acme/example.org/fullchain.pem";
<link linkend="opt-services.prosody.ssl.key">ssl.key</link> = "/var/lib/acme/example.org/key.pem";
<link linkend="opt-services.prosody.virtualHosts">virtualHosts</link>."example.org" = {
<link linkend="opt-services.prosody.virtualHosts._name__.enabled">enabled</link> = true;
<link linkend="opt-services.prosody.virtualHosts._name__.domain">domain</link> = "example.org";
<link linkend="opt-services.prosody.virtualHosts._name__.ssl.cert">ssl.cert</link> = "/var/lib/acme/example.org/fullchain.pem";
<link linkend="opt-services.prosody.virtualHosts._name__.ssl.key">ssl.key</link> = "/var/lib/acme/example.org/key.pem";
};
<link linkend="opt-services.prosody.muc">muc</link> = [ {
<link linkend="opt-services.prosody.muc">domain</link> = "conference.example.org";
} ];
<link linkend="opt-services.prosody.uploadHttp">uploadHttp</link> = {
<link linkend="opt-services.prosody.uploadHttp.domain">domain</link> = "upload.example.org";
};
};</programlisting>
</para>
</section>
<section xml:id="module-services-prosody-letsencrypt">
<title>Let's Encrypt Configuration</title>
<para>
As you can see in the code snippet from the
<link linkend="module-services-prosody-basic-usage">previous section</link>,
you'll need a single TLS certificate covering your main endpoint,
the MUC one as well as the HTTP Upload one. We can generate such a
certificate by leveraging the ACME
<link linkend="opt-security.acme.certs._name_.extraDomains">extraDomains</link> module option.
</para>
<para>
Provided the setup detailed in the previous section, you'll need the following acme configuration to generate
a TLS certificate for the three endponits:
<programlisting>
security.acme = {
<link linkend="opt-security.acme.email">email</link> = "root@example.org";
<link linkend="opt-security.acme.acceptTerms">acceptTerms</link> = true;
<link linkend="opt-security.acme.certs">certs</link> = {
"example.org" = {
<link linkend="opt-security.acme.certs._name_.webroot">webroot</link> = "/var/www/example.org";
<link linkend="opt-security.acme.certs._name_.email">email</link> = "root@example.org";
<link linkend="opt-security.acme.certs._name_.extraDomains">extraDomains."conference.example.org"</link> = null;
<link linkend="opt-security.acme.certs._name_.extraDomains">extraDomains."upload.example.org"</link> = null;
};
};
};</programlisting>
</para>
</section>
</chapter>

View File

@ -62,7 +62,6 @@ in {
systemd.services.thelounge = {
description = "The Lounge web IRC client";
wantedBy = [ "multi-user.target" ];
environment = { THELOUNGE_HOME = dataDir; };
preStart = "ln -sf ${pkgs.writeText "config.js" configJsData} ${dataDir}/config.js";
serviceConfig = {
User = "thelounge";

View File

@ -83,6 +83,14 @@ in {
'';
};
group = mkOption {
type = types.str;
default = "root";
example = "wheel";
description =
"Group to grant acces to the Yggdrasil control socket.";
};
openMulticastPort = mkOption {
type = bool;
default = false;
@ -144,8 +152,9 @@ in {
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
Restart = "always";
Group = cfg.group;
RuntimeDirectory = "yggdrasil";
RuntimeDirectoryMode = "0700";
RuntimeDirectoryMode = "0750";
BindReadOnlyPaths = mkIf configFileProvided
[ "${cfg.configFile}" ];

View File

@ -205,7 +205,7 @@ let
"IPv6HopLimit" "IPv4ProxyARP" "IPv6ProxyNDP" "IPv6ProxyNDPAddress"
"IPv6PrefixDelegation" "IPv6MTUBytes" "Bridge" "Bond" "VRF" "VLAN"
"IPVLAN" "MACVLAN" "VXLAN" "Tunnel" "ActiveSlave" "PrimarySlave"
"ConfigureWithoutCarrier" "Xfrm"
"ConfigureWithoutCarrier" "Xfrm" "KeepConfiguration"
])
# Note: For DHCP the values both, none, v4, v6 are deprecated
(assertValueOneOf "DHCP" ["yes" "no" "ipv4" "ipv6" "both" "none" "v4" "v6"])
@ -228,6 +228,7 @@ let
(assertValueOneOf "ActiveSlave" boolValues)
(assertValueOneOf "PrimarySlave" boolValues)
(assertValueOneOf "ConfigureWithoutCarrier" boolValues)
(assertValueOneOf "KeepConfiguration" (boolValues ++ ["static" "dhcp-on-stop" "dhcp"]))
];
checkAddress = checkUnitConfig "Address" [
@ -274,15 +275,16 @@ let
])
];
checkDhcp = checkUnitConfig "DHCP" [
checkDhcpV4 = checkUnitConfig "DHCPv4" [
(assertOnlyFields [
"UseDNS" "UseNTP" "UseMTU" "Anonymize" "SendHostname" "UseHostname"
"Hostname" "UseDomains" "UseRoutes" "UseTimezone" "CriticalConnection"
"ClientIdentifier" "VendorClassIdentifier" "UserClass" "DUIDType"
"DUIDRawData" "IAID" "RequestBroadcast" "RouteMetric" "RouteTable"
"ListenPort" "RapidCommit"
"UseDNS" "RoutesToDNS" "UseNTP" "UseMTU" "Anonymize" "SendHostname" "UseHostname"
"Hostname" "UseDomains" "UseRoutes" "UseTimezone"
"ClientIdentifier" "VendorClassIdentifier" "UserClass" "MaxAttempts"
"DUIDType" "DUIDRawData" "IAID" "RequestBroadcast" "RouteMetric" "RouteTable"
"ListenPort" "SendRelease"
])
(assertValueOneOf "UseDNS" boolValues)
(assertValueOneOf "RoutesToDNS" boolValues)
(assertValueOneOf "UseNTP" boolValues)
(assertValueOneOf "UseMTU" boolValues)
(assertValueOneOf "Anonymize" boolValues)
@ -291,13 +293,50 @@ let
(assertValueOneOf "UseDomains" ["yes" "no" "route"])
(assertValueOneOf "UseRoutes" boolValues)
(assertValueOneOf "UseTimezone" boolValues)
(assertValueOneOf "CriticalConnection" boolValues)
(assertMinimum "MaxAttempts" 0)
(assertValueOneOf "RequestBroadcast" boolValues)
(assertInt "RouteTable")
(assertMinimum "RouteTable" 0)
(assertValueOneOf "RapidCommit" boolValues)
(assertValueOneOf "SendRelease" boolValues)
];
checkDhcpV6 = checkUnitConfig "DHCPv6" [
(assertOnlyFields [
"UseDns" "UseNTP" "RapidCommit" "ForceDHCPv6PDOtherInformation"
"PrefixDelegationHint"
])
(assertValueOneOf "UseDNS" boolValues)
(assertValueOneOf "UseNTP" boolValues)
(assertValueOneOf "RapidCommit" boolValues)
(assertValueOneOf "ForceDHCPv6PDOtherInformation" boolValues)
];
checkIpv6PrefixDelegation = checkUnitConfig "IPv6PrefixDelegation" [
(assertOnlyFields [
"Managed" "OtherInformation" "RouterLifetimeSec"
"RouterPreference" "EmitDNS" "DNS" "EmitDomains" "Domains"
"DNSLifetimeSec"
])
(assertValueOneOf "Managed" boolValues)
(assertValueOneOf "OtherInformation" boolValues)
(assertValueOneOf "RouterPreference" ["high" "medium" "low" "normal" "default"])
(assertValueOneOf "EmitDNS" boolValues)
(assertValueOneOf "EmitDomains" boolValues)
(assertMinimum "DNSLifetimeSec" 0)
];
checkIpv6Prefix = checkUnitConfig "IPv6Prefix" [
(assertOnlyFields [
"AddressAutoconfiguration" "OnLink" "Prefix"
"PreferredLifetimeSec" "ValidLifetimeSec"
])
(assertValueOneOf "AddressAutoconfiguration" boolValues)
(assertValueOneOf "OnLink" boolValues)
(assertMinimum "PreferredLifetimeSec" 0)
(assertMinimum "ValidLifetimeSec" 0)
];
checkDhcpServer = checkUnitConfig "DHCPServer" [
(assertOnlyFields [
"PoolOffset" "PoolSize" "DefaultLeaseTimeSec" "MaxLeaseTimeSec"
@ -621,6 +660,22 @@ let
};
};
ipv6PrefixOptions = {
options = {
ipv6PrefixConfig = mkOption {
default = {};
example = { Prefix = "fd00::/64"; };
type = types.addCheck (types.attrsOf unitOption) checkIpv6Prefix;
description = ''
Each attribute in this set specifies an option in the
<literal>[IPv6Prefix]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
'';
};
};
};
networkOptions = commonNetworkOptions // {
@ -636,13 +691,55 @@ let
'';
};
# systemd.network.networks.*.dhcpConfig has been deprecated in favor of ….dhcpV4Config
# Produce a nice warning message so users know it is gone.
dhcpConfig = mkOption {
visible = false;
apply = _: throw "The option `systemd.network.networks.*.dhcpConfig` can no longer be used since it's been removed. Please use `systemd.network.networks.*.dhcpV4Config` instead.";
};
dhcpV4Config = mkOption {
default = {};
example = { UseDNS = true; UseRoutes = true; };
type = types.addCheck (types.attrsOf unitOption) checkDhcp;
type = types.addCheck (types.attrsOf unitOption) checkDhcpV4;
description = ''
Each attribute in this set specifies an option in the
<literal>[DHCP]</literal> section of the unit. See
<literal>[DHCPv4]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
'';
};
dhcpV6Config = mkOption {
default = {};
example = { UseDNS = true; UseRoutes = true; };
type = types.addCheck (types.attrsOf unitOption) checkDhcpV6;
description = ''
Each attribute in this set specifies an option in the
<literal>[DHCPv6]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
'';
};
ipv6PrefixDelegationConfig = mkOption {
default = {};
example = { EmitDNS = true; Managed = true; OtherInformation = true; };
type = types.addCheck (types.attrsOf unitOption) checkIpv6PrefixDelegation;
description = ''
Each attribute in this set specifies an option in the
<literal>[IPv6PrefixDelegation]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
'';
};
ipv6Prefixes = mkOption {
default = [];
example = { AddressAutoconfiguration = true; OnLink = true; };
type = with types; listOf (submodule ipv6PrefixOptions);
description = ''
A list of ipv6Prefix sections to be added to the unit. See
<citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
'';
@ -973,11 +1070,26 @@ let
${concatStringsSep "\n" (map (s: "Tunnel=${s}") def.tunnel)}
${concatStringsSep "\n" (map (s: "Xfrm=${s}") def.xfrm)}
${optionalString (def.dhcpConfig != { }) ''
[DHCP]
${attrsToSection def.dhcpConfig}
${optionalString (def.dhcpV4Config != { }) ''
[DHCPv4]
${attrsToSection def.dhcpV4Config}
''}
${optionalString (def.dhcpV6Config != {}) ''
[DHCPv6]
${attrsToSection def.dhcpV6Config}
''}
${optionalString (def.ipv6PrefixDelegationConfig != {}) ''
[IPv6PrefixDelegation]
${attrsToSection def.ipv6PrefixDelegationConfig}
''}
${flip concatMapStrings def.ipv6Prefixes (x: ''
[IPv6Prefix]
${attrsToSection x.ipv6PrefixConfig}
'')}
${optionalString (def.dhcpServerConfig != { }) ''
[DHCPServer]
${attrsToSection def.dhcpServerConfig}
@ -1054,6 +1166,7 @@ in
};
config = mkMerge [
# .link units are honored by udev, no matter if systemd-networkd is enabled or not.
{
systemd.network.units = mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.links;

View File

@ -1033,6 +1033,7 @@ in
systemd.services.systemd-journald.stopIfChanged = false;
systemd.targets.local-fs.unitConfig.X-StopOnReconfiguration = true;
systemd.targets.remote-fs.unitConfig.X-StopOnReconfiguration = true;
systemd.targets.network-online.wantedBy = [ "multi-user.target" ];
systemd.services.systemd-binfmt.wants = [ "proc-sys-fs-binfmt_misc.mount" ];
# Don't bother with certain units in containers.

View File

@ -546,7 +546,7 @@ in
Note that this option might require to do some adjustments to the container configuration,
e.g. you might want to set
<varname>systemd.network.networks.$interface.dhcpConfig.ClientIdentifier</varname> to "mac"
<varname>systemd.network.networks.$interface.dhcpV4Config.ClientIdentifier</varname> to "mac"
if you use <varname>macvlans</varname> option.
This way dhcp client identifier will be stable between the container restarts.

View File

@ -111,6 +111,7 @@ in rec {
(onFullSupported "nixos.tests.networking.scripted.sit")
(onFullSupported "nixos.tests.networking.scripted.static")
(onFullSupported "nixos.tests.networking.scripted.vlan")
(onFullSupported "nixos.tests.systemd-networkd-ipv6-prefix-delegation")
(onFullSupported "nixos.tests.nfs3.simple")
(onFullSupported "nixos.tests.nfs4.simple")
(onFullSupported "nixos.tests.openssh")

View File

@ -314,9 +314,9 @@ in rec {
lapp = makeClosure ({ pkgs, ... }:
{ services.httpd.enable = true;
services.httpd.adminAddr = "foo@example.org";
services.httpd.enablePHP = true;
services.postgresql.enable = true;
services.postgresql.package = pkgs.postgresql;
environment.systemPackages = [ pkgs.php ];
});
};
}

View File

@ -302,6 +302,7 @@ in
systemd-networkd-vrf = handleTest ./systemd-networkd-vrf.nix {};
systemd-networkd = handleTest ./systemd-networkd.nix {};
systemd-networkd-dhcpserver = handleTest ./systemd-networkd-dhcpserver.nix {};
systemd-networkd-ipv6-prefix-delegation = handleTest ./systemd-networkd-ipv6-prefix-delegation.nix {};
systemd-nspawn = handleTest ./systemd-nspawn.nix {};
pdns-recursor = handleTest ./pdns-recursor.nix {};
taskserver = handleTest ./taskserver.nix {};

View File

@ -0,0 +1,295 @@
# This test verifies that we can request and assign IPv6 prefixes from upstream
# (e.g. ISP) routers.
# The setup consits of three VMs. One for the ISP, as your residential router
# and the third as a client machine in the residential network.
#
# There are two VLANs in this test:
# - VLAN 1 is the connection between the ISP and the router
# - VLAN 2 is the connection between the router and the client
import ./make-test-python.nix ({pkgs, ...}: {
name = "systemd-networkd-ipv6-prefix-delegation";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ andir ];
};
nodes = {
# The ISP's routers job is to delegate IPv6 prefixes via DHCPv6. Like with
# regular IPv6 auto-configuration it will also emit IPv6 router
# advertisements (RAs). Those RA's will not carry a prefix but in contrast
# just set the "Other" flag to indicate to the receiving nodes that they
# should attempt DHCPv6.
#
# Note: On the ISPs device we don't really care if we are using networkd in
# this example. That being said we can't use it (yet) as networkd doesn't
# implement the serving side of DHCPv6. We will use ISC's well aged dhcpd6
# for that task.
isp = { lib, pkgs, ... }: {
virtualisation.vlans = [ 1 ];
networking = {
useDHCP = false;
firewall.enable = false;
interfaces.eth1.ipv4.addresses = lib.mkForce []; # no need for legacy IP
interfaces.eth1.ipv6.addresses = lib.mkForce [
{ address = "2001:DB8::"; prefixLength = 64; }
];
};
# Since we want to program the routes that we delegate to the "customer"
# into our routing table we must have a way to gain the required privs.
# This security wrapper will do in our test setup.
#
# DO NOT COPY THIS TO PRODUCTION AS IS. Think about it at least twice.
# Everyone on the "isp" machine will be able to add routes to the kernel.
security.wrappers.add-dhcpd-lease = {
source = pkgs.writeShellScript "add-dhcpd-lease" ''
exec ${pkgs.iproute}/bin/ip -6 route replace "$1" via "$2"
'';
capabilities = "cap_net_admin+ep";
};
services = {
# Configure the DHCPv6 server
#
# We will hand out /48 prefixes from the subnet 2001:DB8:F000::/36.
# That gives us ~8k prefixes. That should be enough for this test.
#
# Since (usually) you will not receive a prefix with the router
# advertisements we also hand out /128 leases from the range
# 2001:DB8:0000:0000:FFFF::/112.
dhcpd6 = {
enable = true;
interfaces = [ "eth1" ];
extraConfig = ''
subnet6 2001:DB8::/36 {
range6 2001:DB8:0000:0000:FFFF:: 2001:DB8:0000:0000:FFFF::FFFF;
prefix6 2001:DB8:F000:: 2001:DB8:FFFF:: /48;
}
# This is the secret sauce. We have to extract the prefix and the
# next hop when commiting the lease to the database. dhcpd6
# (rightfully) has not concept of adding routes to the systems
# routing table. It really depends on the setup.
#
# In a production environment your DHCPv6 server is likely not the
# router. You might want to consider BGP, custom NetConf calls, …
# in those cases.
on commit {
set IP = pick-first-value(binary-to-ascii(16, 16, ":", substring(option dhcp6.ia-na, 16, 16)), "n/a");
set Prefix = pick-first-value(binary-to-ascii(16, 16, ":", suffix(option dhcp6.ia-pd, 16)), "n/a");
set PrefixLength = pick-first-value(binary-to-ascii(10, 8, ":", substring(suffix(option dhcp6.ia-pd, 17), 0, 1)), "n/a");
log(concat(IP, " ", Prefix, " ", PrefixLength));
execute("/run/wrappers/bin/add-dhcpd-lease", concat(Prefix,"/",PrefixLength), IP);
}
'';
};
# Finally we have to set up the router advertisements. While we could be
# using networkd or bird for this task `radvd` is probably the most
# venerable of them all. It was made explicitly for this purpose and
# the configuration is much more straightforward than what networkd
# requires.
# As outlined above we will have to set the `Managed` flag as otherwise
# the clients will not know if they should do DHCPv6. (Some do
# anyway/always)
radvd = {
enable = true;
config = ''
interface eth1 {
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag off; # we don't really have DNS or NTP or anything like that to distribute
prefix ::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};
'';
};
};
};
# This will be our (residential) router that receives the IPv6 prefix (IA_PD)
# and /128 (IA_NA) allocation.
#
# Here we will actually start using networkd.
router = {
virtualisation.vlans = [ 1 2 ];
systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug";
boot.kernel.sysctl = {
# we want to forward packets from the ISP to the client and back.
"net.ipv6.conf.all.forwarding" = 1;
};
networking = {
useNetworkd = true;
useDHCP = false;
# Consider enabling this in production and generating firewall rules
# for fowarding/input from the configured interfaces so you do not have
# to manage multiple places
firewall.enable = false;
};
systemd.network = {
networks = {
# systemd-networkd will load the first network unit file
# that matches, ordered lexiographically by filename.
# /etc/systemd/network/{40-eth1,99-main}.network already
# exists. This network unit must be loaded for the test,
# however, hence why this network is named such.
# Configuration of the interface to the ISP.
# We must request accept RAs and request the PD prefix.
"01-eth1" = {
name = "eth1";
networkConfig = {
Description = "ISP interface";
IPv6AcceptRA = true;
#DHCP = false; # no need for legacy IP
};
linkConfig = {
# We care about this interface when talking about being "online".
# If this interface is in the `routable` state we can reach
# others and they should be able to reach us.
RequiredForOnline = "routable";
};
# This configures the DHCPv6 client part towards the ISPs DHCPv6 server.
dhcpV6Config = {
# We have to include a request for a prefix in our DHCPv6 client
# request packets.
# Otherwise the upstream DHCPv6 server wouldn't know if we want a
# prefix or not. Note: On some installation it makes sense to
# always force that option on the DHPCv6 server since there are
# certain CPEs that are just not setting this field but happily
# accept the delegated prefix.
PrefixDelegationHint = "::/48";
};
ipv6PrefixDelegationConfig = {
# Let networkd know that we would very much like to use DHCPv6
# to obtain the "managed" information. Not sure why they can't
# just take that from the upstream RAs.
Managed = true;
};
};
# Interface to the client. Here we should redistribute a /64 from
# the prefix we received from the ISP.
"01-eth2" = {
name = "eth2";
networkConfig = {
Description = "Client interface";
# the client shouldn't be allowed to send us RAs, that would be weird.
IPv6AcceptRA = false;
# Just delegate prefixes from the DHCPv6 PD pool.
# If you also want to distribute a local ULA prefix you want to
# set this to `yes` as that includes both static prefixes as well
# as PD prefixes.
IPv6PrefixDelegation = "dhcpv6";
};
# finally "act as router" (according to systemd.network(5))
ipv6PrefixDelegationConfig = {
RouterLifetimeSec = 300; # required as otherwise no RA's are being emitted
# In a production environment you should consider setting these as well:
#EmitDNS = true;
#EmitDomains = true;
#DNS= = "fe80::1"; # or whatever "well known" IP your router will have on the inside.
};
# This adds a "random" ULA prefix to the interface that is being
# advertised to the clients.
# Not used in this test.
# ipv6Prefixes = [
# {
# ipv6PrefixConfig = {
# AddressAutoconfiguration = true;
# PreferredLifetimeSec = 1800;
# ValidLifetimeSec = 1800;
# };
# }
# ];
};
# finally we are going to add a static IPv6 unique local address to
# the "lo" interface. This will serve as ICMPv6 echo target to
# verify connectivity from the client to the router.
"01-lo" = {
name = "lo";
addresses = [
{ addressConfig.Address = "FD42::1/128"; }
];
};
};
};
# make the network-online target a requirement, we wait for it in our test script
systemd.targets.network-online.wantedBy = [ "multi-user.target" ];
};
# This is the client behind the router. We should be receving router
# advertisements for both the ULA and the delegated prefix.
# All we have to do is boot with the default (networkd) configuration.
client = {
virtualisation.vlans = [ 2 ];
systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug";
networking = {
useNetworkd = true;
useDHCP = false;
};
# make the network-online target a requirement, we wait for it in our test script
systemd.targets.network-online.wantedBy = [ "multi-user.target" ];
};
};
testScript = ''
# First start the router and wait for it it reach a state where we are
# certain networkd is up and it is able to send out RAs
router.start()
router.wait_for_unit("systemd-networkd.service")
# After that we can boot the client and wait for the network online target.
# Since we only care about IPv6 that should not involve waiting for legacy
# IP leases.
client.start()
client.wait_for_unit("network-online.target")
# the static address on the router should not be reachable
client.wait_until_succeeds("ping -6 -c 1 FD42::1")
# the global IP of the ISP router should still not be a reachable
router.fail("ping -6 -c 1 2001:DB8::")
# Once we have internal connectivity boot up the ISP
isp.start()
# Since for the ISP "being online" should have no real meaning we just
# wait for the target where all the units have been started.
# It probably still takes a few more seconds for all the RA timers to be
# fired etc..
isp.wait_for_unit("multi-user.target")
# wait until the uplink interface has a good status
router.wait_for_unit("network-online.target")
router.wait_until_succeeds("ping -6 -c1 2001:DB8::")
# shortly after that the client should have received it's global IPv6
# address and thus be able to ping the ISP
client.wait_until_succeeds("ping -6 -c1 2001:DB8::")
# verify that we got a globally scoped address in eth1 from the
# documentation prefix
ip_output = client.succeed("ip --json -6 address show dev eth1")
import json
ip_json = json.loads(ip_output)[0]
assert any(
addr["local"].upper().startswith("2001:DB8:")
for addr in ip_json["addr_info"]
if addr["scope"] == "global"
)
'';
})

View File

@ -1,27 +1,80 @@
import ../make-test-python.nix {
name = "prosody";
let
cert = pkgs: pkgs.runCommandNoCC "selfSignedCerts" { buildInputs = [ pkgs.openssl ]; } ''
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -subj '/CN=example.com/CN=uploads.example.com/CN=conference.example.com'
mkdir -p $out
cp key.pem cert.pem $out
'';
createUsers = pkgs: pkgs.writeScriptBin "create-prosody-users" ''
#!${pkgs.bash}/bin/bash
set -e
# Creates and set password for the 2 xmpp test users.
#
# Doing that in a bash script instead of doing that in the test
# script allow us to easily provision the users when running that
# test interactively.
prosodyctl register cthon98 example.com nothunter2
prosodyctl register azurediamond example.com hunter2
'';
delUsers = pkgs: pkgs.writeScriptBin "delete-prosody-users" ''
#!${pkgs.bash}/bin/bash
set -e
# Deletes the test users.
#
# Doing that in a bash script instead of doing that in the test
# script allow us to easily provision the users when running that
# test interactively.
prosodyctl deluser cthon98@example.com
prosodyctl deluser azurediamond@example.com
'';
in import ../make-test-python.nix {
name = "prosody";
nodes = {
client = { nodes, pkgs, ... }: {
client = { nodes, pkgs, config, ... }: {
security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
console.keyMap = "fr-bepo";
networking.extraHosts = ''
${nodes.server.config.networking.primaryIPAddress} example.com
${nodes.server.config.networking.primaryIPAddress} conference.example.com
${nodes.server.config.networking.primaryIPAddress} uploads.example.com
'';
environment.systemPackages = [
(pkgs.callPackage ./xmpp-sendmessage.nix { connectTo = nodes.server.config.networking.primaryIPAddress; })
];
};
server = { config, pkgs, ... }: {
security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
console.keyMap = "fr-bepo";
networking.extraHosts = ''
${config.networking.primaryIPAddress} example.com
${config.networking.primaryIPAddress} conference.example.com
${config.networking.primaryIPAddress} uploads.example.com
'';
networking.firewall.enable = false;
environment.systemPackages = [
(createUsers pkgs)
(delUsers pkgs)
];
services.prosody = {
enable = true;
# TODO: use a self-signed certificate
c2sRequireEncryption = false;
extraConfig = ''
storage = "sql"
'';
virtualHosts.test = {
ssl.cert = "${cert pkgs}/cert.pem";
ssl.key = "${cert pkgs}/key.pem";
virtualHosts.example = {
domain = "example.com";
enabled = true;
ssl.cert = "${cert pkgs}/cert.pem";
ssl.key = "${cert pkgs}/key.pem";
};
muc = [
{
domain = "conference.example.com";
}
];
uploadHttp = {
domain = "uploads.example.com";
};
};
};
@ -31,16 +84,8 @@ import ../make-test-python.nix {
server.wait_for_unit("prosody.service")
server.succeed('prosodyctl status | grep "Prosody is running"')
# set password to 'nothunter2' (it's asked twice)
server.succeed("yes nothunter2 | prosodyctl adduser cthon98@example.com")
# set password to 'y'
server.succeed("yes | prosodyctl adduser azurediamond@example.com")
# correct password to "hunter2"
server.succeed("yes hunter2 | prosodyctl passwd azurediamond@example.com")
client.succeed("send-message")
server.succeed("prosodyctl deluser cthon98@example.com")
server.succeed("prosodyctl deluser azurediamond@example.com")
server.succeed("create-prosody-users")
client.succeed('send-message 2>&1 | grep "XMPP SCRIPT TEST SUCCESS"')
server.succeed("delete-prosody-users")
'';
}

View File

@ -1,46 +1,61 @@
{ writeScriptBin, python3, connectTo ? "localhost" }:
writeScriptBin "send-message" ''
#!${(python3.withPackages (ps: [ ps.sleekxmpp ])).interpreter}
# Based on the sleekxmpp send_client example, look there for more details:
# https://github.com/fritzy/SleekXMPP/blob/develop/examples/send_client.py
import sleekxmpp
{ writeScriptBin, writeText, python3, connectTo ? "localhost" }:
let
dummyFile = writeText "dummy-file" ''
Dear dog,
class SendMsgBot(sleekxmpp.ClientXMPP):
"""
A basic SleekXMPP bot that will log in, send a message,
and then log out.
"""
def __init__(self, jid, password, recipient, message):
sleekxmpp.ClientXMPP.__init__(self, jid, password)
Please find this *really* important attachment.
self.recipient = recipient
self.msg = message
Yours truly,
John
'';
in writeScriptBin "send-message" ''
#!${(python3.withPackages (ps: [ ps.slixmpp ])).interpreter}
import logging
import sys
from types import MethodType
self.add_event_handler("session_start", self.start, threaded=True)
def start(self, event):
self.send_presence()
self.get_roster()
self.send_message(mto=self.recipient,
mbody=self.msg,
mtype='chat')
self.disconnect(wait=True)
from slixmpp import ClientXMPP
from slixmpp.exceptions import IqError, IqTimeout
if __name__ == '__main__':
xmpp = SendMsgBot("cthon98@example.com", "nothunter2", "azurediamond@example.com", "hey, if you type in your pw, it will show as stars")
xmpp.register_plugin('xep_0030') # Service Discovery
xmpp.register_plugin('xep_0199') # XMPP Ping
class CthonTest(ClientXMPP):
# TODO: verify certificate
# If you want to verify the SSL certificates offered by a server:
# xmpp.ca_certs = "path/to/ca/cert"
def __init__(self, jid, password):
ClientXMPP.__init__(self, jid, password)
self.add_event_handler("session_start", self.session_start)
if xmpp.connect(('${connectTo}', 5222)):
xmpp.process(block=True)
else:
print("Unable to connect.")
sys.exit(1)
async def session_start(self, event):
log = logging.getLogger(__name__)
self.send_presence()
self.get_roster()
# Sending a test message
self.send_message(mto="azurediamond@example.com", mbody="Hello, this is dog.", mtype="chat")
log.info('Message sent')
# Test http upload (XEP_0363)
def timeout_callback(arg):
log.error("ERROR: Cannot upload file. XEP_0363 seems broken")
sys.exit(1)
url = await self['xep_0363'].upload_file("${dummyFile}",timeout=10, timeout_callback=timeout_callback)
log.info('Upload success!')
# Test MUC
self.plugin['xep_0045'].join_muc('testMucRoom', 'cthon98', wait=True)
log.info('MUC join success!')
log.info('XMPP SCRIPT TEST SUCCESS')
self.disconnect(wait=True)
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)-8s %(message)s')
ct = CthonTest('cthon98@example.com', 'nothunter2')
ct.register_plugin('xep_0071')
ct.register_plugin('xep_0128')
# HTTP Upload
ct.register_plugin('xep_0363')
# MUC
ct.register_plugin('xep_0045')
ct.connect(("server", 5222))
ct.process(forever=False)
''

View File

@ -1,4 +1,4 @@
{ lib, mkDerivation, fetchurl, fetchFromGitHub, makeDesktopItem, cmake, boost, zlib
{ lib, mkDerivation, fetchurl, fetchpatch, fetchFromGitHub, makeDesktopItem, cmake, boost, zlib
, openssl, R, qtbase, qtxmlpatterns, qtsensors, qtwebengine, qtwebchannel
, libuuid, hunspellDicts, unzip, ant, jdk, gnumake, makeWrapper, pandoc
, llvmPackages
@ -8,7 +8,7 @@ with lib;
let
verMajor = "1";
verMinor = "2";
verPatch = "5033";
verPatch = "5042";
version = "${verMajor}.${verMinor}.${verPatch}";
ginVer = "2.1.2";
gwtVer = "2.8.1";
@ -26,11 +26,19 @@ mkDerivation rec {
owner = "rstudio";
repo = "rstudio";
rev = "v${version}";
sha256 = "0f3p2anz9xay2859bxj3bvyj582igsp628qxsccpkgn0jifvi4np";
sha256 = "1n67fa357v51j3z1ma8v2ydfsx3y8n10k2svmfcf4mdzsi8w0kc5";
};
# Hack RStudio to only use the input R and provided libclang.
patches = [ ./r-location.patch ./clang-location.patch ];
patches = [ ./r-location.patch ./clang-location.patch
(fetchpatch {
# Fetch a patch to ensure Rstudio compiles against R
# 4.0.0, should be removed next 1.2.X Rstudio update
# or possibly 1.3.X
url = "https://github.com/rstudio/rstudio/commit/3fb2397c2f208bb8ace0bbaf269481ccb96b5b20.patch";
sha256 = "0qpgjy6aash0fc0xbns42cwpj3nsw49nkbzwyq8az01xwg81g0f3";
})
];
postPatch = ''
substituteInPlace src/cpp/core/r_util/REnvironmentPosix.cpp --replace '@R@' ${R}
substituteInPlace src/cpp/core/libclang/LibClang.cpp \

View File

@ -1,28 +1,64 @@
{ stdenv, fetchurl, python2, keybinder3, intltool, file, gtk3, gobject-introspection
, libnotify, wrapGAppsHook, vte
{ stdenv
, fetchFromGitHub
, python3
, keybinder3
, intltool
, file
, gtk3
, gobject-introspection
, libnotify
, wrapGAppsHook
, vte
}:
python2.pkgs.buildPythonApplication rec {
name = "terminator-${version}";
version = "1.91";
python3.pkgs.buildPythonApplication rec {
pname = "terminator";
version = "1.92";
src = fetchurl {
url = "https://launchpad.net/terminator/gtk3/${version}/+download/${name}.tar.gz";
sha256 = "95f76e3c0253956d19ceab2f8da709a496f1b9cf9b1c5b8d3cd0b6da3cc7be69";
src = fetchFromGitHub {
owner = "gnome-terminator";
repo = "terminator";
rev = "v${version}";
sha256 = "105f660wzf9cpn24xzwaaa09igg5h3qhchafv190v5nqck6g1ssh";
};
nativeBuildInputs = [ file intltool wrapGAppsHook gobject-introspection ];
buildInputs = [ gtk3 vte libnotify keybinder3
gobject-introspection # Temporary fix, see https://github.com/NixOS/nixpkgs/issues/56943
nativeBuildInputs = [
file
intltool
gobject-introspection
wrapGAppsHook
];
buildInputs = [
gtk3
gobject-introspection # Temporary fix, see https://github.com/NixOS/nixpkgs/issues/56943
keybinder3
libnotify
python3
vte
];
propagatedBuildInputs = with python3.pkgs; [
configobj
dbus-python
pygobject3
psutil
pycairo
];
propagatedBuildInputs = with python2.pkgs; [ pygobject3 psutil pycairo ];
postPatch = ''
patchShebangs .
patchShebangs run_tests tests po
# dbus-python is correctly passed in propagatedBuildInputs, but for some reason setup.py complains.
# The wrapped terminator has the correct path added, so ignore this.
substituteInPlace setup.py --replace "'dbus-python'," ""
'';
checkPhase = ''
runHook preCheck
./run_tests
runHook postCheck
'';
meta = with stdenv.lib; {
@ -33,7 +69,7 @@ python2.pkgs.buildPythonApplication rec {
quadkonsole, etc. in that the main focus is arranging terminals in grids
(tabs is the most common default method, which Terminator also supports).
'';
homepage = "https://gnometerminator.blogspot.no/p/introduction.html";
homepage = "https://github.com/gnome-terminator/terminator";
license = licenses.gpl2;
maintainers = with maintainers; [ bjornfor ];
platforms = platforms.linux;

View File

@ -21,12 +21,12 @@ let
in mkDerivationWith python3Packages.buildPythonApplication rec {
pname = "qutebrowser";
version = "1.10.1";
version = "1.11.0";
# the release tarballs are different from the git checkout!
src = fetchurl {
url = "https://github.com/qutebrowser/qutebrowser/releases/download/v${version}/${pname}-${version}.tar.gz";
sha256 = "06bcnsfb4kz92bh8xjxwaghhy9x2mmcb76wk3fv868jb1ga75vd8";
sha256 = "0b0qlki9bp9mm41lrh6rc6qqvm4nsz8da63sby3a1f2xm9b9vvg2";
};
# Needs tox

View File

@ -58,6 +58,6 @@ in rec {
kops_1_16 = mkKops {
version = "1.16.1";
sha256 = "08vy57ln0qar961sf9vbrh29f04qj5siqsfim1kqwvj5xrvwa39i";
sha256 = "04ji1703z6b3rd4wmccah68api0jj2bndzkgdzqi855gccqbmi5g";
};
}

View File

@ -1,79 +1,82 @@
{ lib, stdenv, fetchFromGitHub
, cmake, cmark, lmdb, mkDerivation, qtbase, qtmacextras
, qtmultimedia, qttools, mtxclient, boost, spdlog, olm, pkgconfig
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, cmake
, cmark
, lmdb
, lmdbxx
, tweeny
, mkDerivation
, qtbase
, qtmacextras
, qtmultimedia
, qttools
, qtquickcontrols2
, qtgraphicaleffects
, mtxclient
, boost17x
, spdlog
, olm
, pkgconfig
, nlohmann_json
}:
# These hashes and revisions are based on those from here:
# https://github.com/Nheko-Reborn/nheko/blob/v0.6.4/deps/CMakeLists.txt#L52
let
tweeny = fetchFromGitHub {
owner = "mobius3";
repo = "tweeny";
rev = "b94ce07cfb02a0eb8ac8aaf66137dabdaea857cf";
sha256 = "1wyyq0j7dhjd6qgvnh3knr70li47hmf5394yznkv9b1indqjx4mi";
};
lmdbxx = fetchFromGitHub {
owner = "bendiken";
repo = "lmdbxx";
rev = "0b43ca87d8cfabba392dfe884eb1edb83874de02";
sha256 = "1whsc5cybf9rmgyaj6qjji03fv5jbgcgygp956s3835b9f9cjg1n";
};
in
mkDerivation rec {
pname = "nheko";
version = "0.6.4";
version = "0.7.1";
src = fetchFromGitHub {
owner = "Nheko-Reborn";
repo = "nheko";
rev = "v${version}";
sha256 = "19dkc98l1q4070v6mli4ybqn0ip0za607w39hjf0x8rqdxq45iwm";
sha256 = "12sxibbrn79sxkf9jrm7jrlj7l5vz15claxrrll7pkv9mv44wady";
};
# If, on Darwin, you encounter the error
# error: must specify at least one argument for '...' parameter of variadic
# macro [-Werror,-Wgnu-zero-variadic-macro-arguments]
# Then adding this parameter is likely the fix you want.
#
# However, it looks like either cmake doesn't honor this CFLAGS variable, or
# darwin's compiler doesn't have the same syntax as gcc for turning off
# -Werror selectively.
#
# Anyway, this is something that will have to be debugged with access to a
# darwin-based OS. Sorry about that!
#
#preConfigure = lib.optionalString stdenv.isDarwin ''
# export CFLAGS=-Wno-error=gnu-zero-variadic-macro-arguments
#'';
postPatch = ''
mkdir -p .deps/include/
ln -s ${tweeny}/include .deps/include/tweeny
ln -s ${spdlog} .deps/spdlog
'';
nativeBuildInputs = [
lmdbxx
cmake
pkgconfig
];
cmakeFlags = [
"-DTWEENY_INCLUDE_DIR=.deps/include"
"-DLMDBXX_INCLUDE_DIR=${lmdbxx}"
"-Dnlohmann_json_DIR=${nlohmann_json}/lib/cmake/nlohmann_json"
# Can be removed once either https://github.com/NixOS/nixpkgs/pull/85254 or
# https://github.com/NixOS/nixpkgs/pull/73940 are merged
"-DBoost_NO_BOOST_CMAKE=TRUE"
];
# commit missing from latest release and recommended by upstream:
# https://github.com/NixOS/nixpkgs/pull/85922#issuecomment-619263903
patches = [
(fetchpatch {
name = "room-ids-escape-patch";
url = "https://github.com/Nheko-Reborn/nheko/commit/d94ac86816f9f325cba11f71344a3ca99591130d.patch";
sha256 = "1p0kj4a60l3jf0rfakc88adld7ccg3vfjhzia5rf2i03h35cxw8c";
})
];
nativeBuildInputs = [ cmake pkgconfig ];
buildInputs = [
mtxclient olm boost lmdb spdlog cmark
qtbase qtmultimedia qttools
nlohmann_json
tweeny
mtxclient
olm
boost17x
lmdb
spdlog
cmark
qtbase
qtmultimedia
qttools
qtquickcontrols2
qtgraphicaleffects
] ++ lib.optional stdenv.isDarwin qtmacextras;
enableParallelBuilding = true;
meta = with stdenv.lib; {
description = "Desktop client for the Matrix protocol";
homepage = "https://github.com/Nheko-Reborn/nheko";
maintainers = with maintainers; [ ekleog fpletz ];
platforms = platforms.unix;
platforms = platforms.all;
# Should be fixable if a higher clang version is used, see:
# https://github.com/NixOS/nixpkgs/pull/85922#issuecomment-619287177
broken = stdenv.targetPlatform.isDarwin;
license = licenses.gpl3Plus;
};
}

View File

@ -1,26 +0,0 @@
From 85ede2cf452800710de136f4f864921d3bb9773c Mon Sep 17 00:00:00 2001
From: Tom Hall <tahall256@protonmail.ch>
Date: Fri, 21 Feb 2020 22:56:06 +0000
Subject: [PATCH] Disable test pending upstream fix
See https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17718
---
tests/reg-tests-1d.R | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/reg-tests-1d.R b/tests/reg-tests-1d.R
index 9b551a1fc8..18ce6027ed 100644
--- a/tests/reg-tests-1d.R
+++ b/tests/reg-tests-1d.R
@@ -3079,7 +3079,7 @@ stopifnot(exprs = {
x[1:52] %% 3 == 2:1
-x[1:52] %% 3 == 1:2
}) # larger x suffer from cancellation (well, warning too early now):
-tools::assertWarning(x[60:68] %% 3)
+#tools::assertWarning(x[60:68] %% 3)
## Hilmar Berger's on R-devel list: 'data.frame() == NULL' etc
--
2.24.1

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, bzip2, gfortran, libX11, libXmu, libXt, libjpeg, libpng
, libtiff, ncurses, pango, pcre, perl, readline, tcl, texLive, tk, xz, zlib
, libtiff, ncurses, pango, pcre2, perl, readline, tcl, texLive, tk, xz, zlib
, less, texinfo, graphviz, icu, pkgconfig, bison, imake, which, jdk, blas, lapack
, curl, Cocoa, Foundation, libobjc, libcxx, tzdata, fetchpatch
, withRecommendedPackages ? true
@ -12,27 +12,24 @@
assert (!blas.isILP64) && (!lapack.isILP64);
stdenv.mkDerivation rec {
name = "R-3.6.3";
name = "R-4.0.0";
src = fetchurl {
url = "https://cran.r-project.org/src/base/R-3/${name}.tar.gz";
sha256 = "13xaxwfbzj0bd6rn2n27z0n04lb93mcyq991w4vdbbg8v282jc49";
url = "https://cran.r-project.org/src/base/R-4/${name}.tar.gz";
sha256 = "0h1995smlyiyhx7gpg9paxsfqrcn6g9bbp5h9r47i6an3clv1gh6";
};
dontUseImakeConfigure = true;
buildInputs = [
bzip2 gfortran libX11 libXmu libXt libXt libjpeg libpng libtiff ncurses
pango pcre perl readline texLive xz zlib less texinfo graphviz icu
pango pcre2 perl readline texLive xz zlib less texinfo graphviz icu
pkgconfig bison imake which blas lapack curl tcl tk jdk
] ++ stdenv.lib.optionals stdenv.isDarwin [ Cocoa Foundation libobjc libcxx ];
patches = [
./no-usr-local-search-paths.patch
] ++ stdenv.lib.optionals stdenv.hostPlatform.isAarch64 [
# Remove a test which fails on aarch64.
# See https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17718
./0001-Disable-test-pending-upstream-fix.patch
./fix-failing-test.patch
];
prePatch = stdenv.lib.optionalString stdenv.isDarwin ''

View File

@ -0,0 +1,25 @@
From e8f54bc562eb301d204b5f880614be58a2b39a2b Mon Sep 17 00:00:00 2001
From: maechler <maechler@00db46b3-68df-0310-9c12-caf00c1e9a41>
Date: Mon, 30 Mar 2020 19:15:59 +0000
Subject: [PATCH] no longer fail in norm() check for broken OpenBLAS Lapack
3.9.0
git-svn-id: https://svn.r-project.org/R/trunk@78112 00db46b3-68df-0310-9c12-caf00c1e9a41
---
tests/reg-tests-1d.R | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/reg-tests-1d.R b/tests/reg-tests-1d.R
index 6b7de765a95..fafd6911e7a 100644
--- a/tests/reg-tests-1d.R
+++ b/tests/reg-tests-1d.R
@@ -3836,7 +3836,8 @@ stopifnot(is.na( norm(diag(c(1, NA)), "2") ))
## norm(<matrix-w-NA>, "F")
(m <- cbind(0, c(NA, 0), 0:-1))
nTypes <- eval(formals(base::norm)$type) # "O" "I" "F" "M" "2"
-stopifnot(is.na( print(vapply(nTypes, norm, 0., x = m)) )) # print(): show NA *or* NaN
+print( # stopifnot( -- for now, as Lapack is still broken in some OpenBLAS -- FIXME
+ is.na( print(vapply(nTypes, norm, 0., x = m)) )) # print(): show NA *or* NaN
## "F" gave non-NA with LAPACK 3.9.0, before our patch in R-devel and R-patched

View File

@ -29,6 +29,14 @@ stdenv.mkDerivation rec {
url = "https://git.sagemath.org/sage.git/patch?id2=8bdc326ba57d1bb9664f63cf165a9e9920cc1afc&id=dc673c17555efca611f68398d5013b66e9825463";
sha256 = "1hhannz7xzprijakn2w2d0rhd5zv2zikik9p51i87bas3nc658f7";
})
# `is_unitary` test in `matrix_double_dense.pyx` fails with some BLAS implementations
# https://trac.sagemath.org/ticket/29297 should be included in 9.1
(fetchpatch {
name = "is_unitary-special-case.patch";
url = "https://git.sagemath.org/sage.git/patch?id=cc3eb9ffa991e328b09028d32aab7e7cc2ddbb6a";
sha256 = "0jq4w8hnp5c9q99011ldr4n3knvm1rx2g85z0hidv3i9x868p0ay";
})
# Unfortunately inclusion in upstream sage was rejected. Instead the bug was
# fixed in python, but of course not backported to 2.7. So we'll probably

View File

@ -0,0 +1,49 @@
{ stdenv, fetchFromGitHub, cmake, git, gfortran, openmpi, blas, liblapack, qt4, qwt6_qt4, pkg-config }:
stdenv.mkDerivation rec {
pname = "elmerfem";
version = "8.4";
src = fetchFromGitHub {
owner = "elmercsc";
repo = "elmerfem";
rev = "release-${version}";
sha256 = "0vk31lplxlng173q8jjcpbyj1gaf98jvkqjvi9077d1nslya7vpm";
};
hardeningDisable = [ "format" ];
nativeBuildInputs = [ cmake pkg-config git ];
buildInputs = [ gfortran openmpi blas liblapack qt4 qwt6_qt4 ];
preConfigure = ''
patchShebangs ./
'';
storepath = placeholder "out";
cmakeFlags = [
"-DELMER_INSTALL_LIB_DIR=${storepath}/lib"
"-DWITH_OpenMP:BOOLEAN=TRUE"
"-DWITH_MPI:BOOLEAN=TRUE"
"-DWITH_ELMERGUI:BOOLEAN=TRUE"
"-DCMAKE_INSTALL_LIBDIR=lib"
"-DCMAKE_INSTALL_INCLUDEDIR=include"
"-DCMAKE_OpenGL_GL_PREFERENCE=GLVND"
];
patches = [
./fix-cmake.patch
];
enableParallelBuilding = true;
meta = with stdenv.lib; {
homepage = http://www.elmerfem.org/;
description = "A finite element software for multiphysical problems.";
platforms = platforms.unix;
maintainers = [ maintainers.wulfsta ];
license = licenses.lgpl21;
};
}

View File

@ -0,0 +1,13 @@
diff --exclude '*~' -ruN A/torch/CMakeLists.txt B/torch/CMakeLists.txt
--- A/fem/tests/CMakeLists.txt 2020-04-23 02:35:03.243388917 -0400
+++ B/fem/tests/CMakeLists.txt 2018-12-19 20:18:40.671857320 -0400
@@ -14,7 +14,7 @@
SET(MESH2D_BIN "${CMAKE_BINARY_DIR}/meshgen2d/src/Mesh2D")
MACRO(SUBDIRLIST result curdir depth)
set(glob_pattern "*")
- FOREACH(D RANGE 1 depth)
+ FOREACH(D RANGE 1 ${depth})
FILE(GLOB children RELATIVE ${curdir} ${glob_pattern})
FOREACH(child ${children})
IF(IS_DIRECTORY ${curdir}/${child})

View File

@ -1,11 +1,11 @@
{
"version": "12.8.9",
"repo_hash": "07vayjy3020hapbdx2wiv91g9xrfmvngbyj05hs2p0p3gwj6g2a4",
"version": "12.8.10",
"repo_hash": "1njkihj66d8fnk1l0r5pys38akf5srqlrgj2hzc68l5m8d51dk15",
"owner": "gitlab-org",
"repo": "gitlab",
"rev": "v12.8.9-ee",
"rev": "v12.8.10-ee",
"passthru": {
"GITALY_SERVER_VERSION": "12.8.9",
"GITALY_SERVER_VERSION": "12.8.10",
"GITLAB_PAGES_VERSION": "1.16.0",
"GITLAB_SHELL_VERSION": "11.0.0",
"GITLAB_WORKHORSE_VERSION": "8.21.2"

View File

@ -114,7 +114,7 @@ GEM
minitest (5.14.0)
msgpack (1.3.1)
multipart-post (2.0.0)
nokogiri (1.10.7)
nokogiri (1.10.9)
mini_portile2 (~> 2.4.0)
nokogumbo (1.5.0)
nokogiri
@ -242,4 +242,4 @@ DEPENDENCIES
webmock (~> 3.4.0)
BUNDLED WITH
1.17.3
2.1.4

View File

@ -28,14 +28,14 @@ let
};
});
in buildGoPackage rec {
version = "12.8.9";
version = "12.8.10";
pname = "gitaly";
src = fetchFromGitLab {
owner = "gitlab-org";
repo = "gitaly";
rev = "v${version}";
sha256 = "06q1km2pigpl4yxl8pkzdy2yxzvsfm6n5r3kmd8h19j3sc6imbmh";
sha256 = "1vhnpyggh2ch93i75np11rjzvq8d6pwv2kzvwh7ak3fa02w9qdfs";
};
# Fix a check which assumes that hook files are writeable by their

View File

@ -515,10 +515,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0r0qpgf80h764k176yr63gqbs2z0xbsp8vlvs2a79d5r9vs83kln";
sha256 = "12j76d0bp608932xkzmfi638c7aqah57l437q8494znzbj610qnm";
type = "gem";
};
version = "1.10.7";
version = "1.10.9";
};
nokogumbo = {
dependencies = ["nokogiri"];

View File

@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell
#! nix-shell -i python3 -p bundix bundler common-updater-scripts nix nix-prefetch-git python3 python3Packages.requests python3Packages.lxml python3Packages.click python3Packages.click-log vgo2nix yarn2nix
#! nix-shell -i python3 -p bundix bundler common-updater-scripts nix nix-prefetch-git python3 python3Packages.requests python3Packages.click python3Packages.click-log vgo2nix yarn2nix
import click
import click_log
@ -13,7 +13,6 @@ from distutils.version import LooseVersion
from typing import Iterable
import requests
from xml.etree import ElementTree
logger = logging.getLogger(__name__)
@ -30,12 +29,11 @@ class GitLabRepo:
@property
def tags(self) -> Iterable[str]:
r = requests.get(self.url + "/tags?format=atom", stream=True)
r = requests.get(self.url + "/refs?sort=updated_desc&ref=master").json()
tags = r.get("Tags", [])
tree = ElementTree.fromstring(r.content)
versions = [e.text for e in tree.findall('{http://www.w3.org/2005/Atom}entry/{http://www.w3.org/2005/Atom}title')]
# filter out versions not matching version_regex
versions = list(filter(self.version_regex.match, versions))
versions = list(filter(self.version_regex.match, tags))
# sort, but ignore v and -ee for sorting comparisons
versions.sort(key=lambda x: LooseVersion(x.replace("v", "").replace("-ee", "")), reverse=True)

View File

@ -1,27 +1,46 @@
{ stdenv, fetchurl, pkgconfig, glib, libX11, libXext, libXinerama }:
{ stdenv, fetchurl, cmake, pkgconfig, glib, libX11, libXext, libXinerama, libXrandr
, withDoc ? stdenv.buildPlatform == stdenv.targetPlatform, asciidoc ? null }:
# Doc generation is disabled by default when cross compiling because asciidoc
# does not cross compile for now
assert withDoc -> asciidoc != null;
stdenv.mkDerivation rec {
name = "herbstluftwm-0.7.2";
pname = "herbstluftwm";
version = "0.8.1";
src = fetchurl {
url = "https://herbstluftwm.org/tarballs/${name}.tar.gz";
sha256 = "1kc18aj9j3nfz6fj4qxg9s3gg4jvn6kzi3ii24hfm0vqdpy17xnz";
url = "https://herbstluftwm.org/tarballs/herbstluftwm-${version}.tar.gz";
sha256 = "0c1lf82z6a56g8asin91cmqhzk3anw0xwc44b31bpjixadmns57y";
};
patchPhase = ''
substituteInPlace config.mk \
--replace "/usr/local" "$out" \
--replace "/etc" "$out/etc" \
--replace "/zsh/functions/Completion/X" "/zsh/site-functions" \
--replace "/usr/share" "\$(PREFIX)/share"
'';
outputs = [
"out"
] ++ stdenv.lib.optionals withDoc [
"doc"
"man"
];
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ glib libX11 libXext libXinerama ];
cmakeFlags = [
"-DCMAKE_INSTALL_SYSCONF_PREFIX=${placeholder "out"}/etc"
] ++ stdenv.lib.optional (!withDoc) "-DWITH_DOCUMENTATION=OFF";
nativeBuildInputs = [
cmake
pkgconfig
] ++ stdenv.lib.optional withDoc asciidoc;
buildInputs = [
libX11
libXext
libXinerama
libXrandr
];
meta = {
description = "A manual tiling window manager for X";
homepage = "http://herbstluftwm.org/";
homepage = "https://herbstluftwm.org/";
license = stdenv.lib.licenses.bsd2;
platforms = stdenv.lib.platforms.linux;
maintainers = with stdenv.lib.maintainers; [ the-kenny ];

View File

@ -17,7 +17,7 @@ unpack() {
local appimageType=0
# https://github.com/AppImage/libappimage/blob/ca8d4b53bed5cbc0f3d0398e30806e0d3adeaaab/src/libappimage/utils/MagicBytesChecker.cpp#L45-L63
eval "$(r2 "$src" -nn -Nqc "p8j 3 @ 8" |
eval "$(r2 -nn -Nqc "p8j 3 @ 8" "$src"|
jq -r '{appimageSignature: (.[:-1]|implode), appimageType: .[-1]}|
@sh "appimageSignature=\(.appimageSignature) appimageType=\(.appimageType)"')"
@ -38,7 +38,7 @@ unpack() {
# multiarch offset one-liner using same method as AppImage
# see https://gist.github.com/probonopd/a490ba3401b5ef7b881d5e603fa20c93
offset=$(r2 "$src" -nn -Nqc "pfj.elf_header @ 0" |\
offset=$(r2 -nn -Nqc "pfj.elf_header @ 0" "$src"|\
jq 'map({(.name): .value}) | add | .shoff + (.shnum * .shentsize)')
echo "Uncompress $(basename "$src") of type $appimageType @ offset $offset."

View File

@ -1,6 +1,6 @@
{ fetchurl }:
fetchurl {
url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/3e87a900a11faa97a8a068874c932f3172d0aa76.tar.gz";
sha256 = "0cf35vics1211pr1g8a804zm3w4lsdacqkgw3hqk7wdrrbasb8ip";
url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/9d50cd974714cdcfdaabd089923b571a66bae55a.tar.gz";
sha256 = "1hv4pxp47850l36ci2ywmc75c95fvdqr3swz9qymy25gd6rbfs9f";
}

View File

@ -3,11 +3,11 @@
stdenv.mkDerivation rec {
pname = "gnome-shell-extensions";
version = "3.36.1";
version = "3.36.2";
src = fetchurl {
url = "mirror://gnome/sources/gnome-shell-extensions/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "0fah7cc22g55w6w7ia3kr2wpdrc45h83xw4pimi54mhggmx9466y";
sha256 = "0gq0z0k02b5cfaqrikk2hzbqzjkb6qwcanaqi2jh7nswa7g050lp";
};
passthru = {

View File

@ -17,11 +17,11 @@ let
in stdenv.mkDerivation rec {
pname = "gnome-shell";
version = "3.36.1";
version = "3.36.2";
src = fetchurl {
url = "mirror://gnome/sources/gnome-shell/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "0696qw6bmbga30qlvh1k6bkiajl7877j8yis4bwmi1wxkcmkh854";
sha256 = "0lqpxhvn073bshnzarnisym3da3k3awsi3h906hm85hz3wm9n4iv";
};
LANG = "en_US.UTF-8";

View File

@ -44,13 +44,13 @@
stdenv.mkDerivation rec {
pname = "mutter";
version = "3.36.1";
version = "3.36.2";
outputs = [ "out" "dev" "man" ];
src = fetchurl {
url = "mirror://gnome/sources/mutter/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "09fqs9805d07c60a2ibskqffsb5wn72l8grwzb9fic5sl574b0im";
sha256 = "1x6svmd1k6w6a2m6ssq4hi997nxyq6z64fjjaid97z2rn177dcvm";
};
mesonFlags = [

View File

@ -1,15 +1,23 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qtbase, qttools, lxqt,
libconfig }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, qtbase
, qttools
, lxqt
, libconfig
}:
mkDerivation rec {
pname = "compton-conf";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "0bx21r83ahmsqf7bm1h17pi4y9js1iqsv7nwnlq58rc0ddkkhcdb";
sha256 = "1wqnajarkrpmc60jr1zw5w39lvlf9ii4ri9wgyn55hh1rkbzi7py";
};
nativeBuildInputs = [
@ -27,7 +35,9 @@ mkDerivation rec {
preConfigure = ''
substituteInPlace autostart/CMakeLists.txt \
--replace "DESTINATION \"\''${LXQT_ETC_XDG_DIR}" "DESTINATION \"etc/xdg" \
'';
'';
passthru.updateScript = lxqt.lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "GUI configuration tool for compton X composite manager";

View File

@ -1,48 +1,55 @@
{ pkgs, makeScope, libsForQt5 }:
let
packages = self: with self; {
# Update script tailored to LXQt packages from git repository
lxqtUpdateScript = { pname, version, src }:
pkgs.genericUpdater {
inherit pname version;
attrPath = "lxqt.${pname}";
versionLister = "${pkgs.common-updater-scripts}/bin/list-git-tags ${src.meta.homepage}";
};
# For compiling information, see:
# - https://github.com/lxqt/lxqt/wiki/Building-from-source
### BASE
libqtxdg = callPackage ./libqtxdg { };
lxqt-build-tools = callPackage ./lxqt-build-tools { };
libsysstat = callPackage ./libsysstat { };
liblxqt = callPackage ./liblxqt { };
libqtxdg = callPackage ./libqtxdg {};
lxqt-build-tools = callPackage ./lxqt-build-tools {};
libsysstat = callPackage ./libsysstat {};
liblxqt = callPackage ./liblxqt {};
### CORE 1
libfm-qt = callPackage ./libfm-qt { };
lxqt-about = callPackage ./lxqt-about { };
lxqt-admin = callPackage ./lxqt-admin { };
lxqt-config = callPackage ./lxqt-config { };
lxqt-globalkeys = callPackage ./lxqt-globalkeys { };
lxqt-notificationd = callPackage ./lxqt-notificationd { };
lxqt-openssh-askpass = callPackage ./lxqt-openssh-askpass { };
lxqt-policykit = callPackage ./lxqt-policykit { };
lxqt-powermanagement = callPackage ./lxqt-powermanagement { };
lxqt-qtplugin = callPackage ./lxqt-qtplugin { };
lxqt-session = callPackage ./lxqt-session { };
lxqt-sudo = callPackage ./lxqt-sudo { };
lxqt-themes = callPackage ./lxqt-themes { };
pavucontrol-qt = libsForQt5.callPackage ./pavucontrol-qt { };
qtermwidget = callPackage ./qtermwidget { };
libfm-qt = callPackage ./libfm-qt {};
lxqt-about = callPackage ./lxqt-about {};
lxqt-admin = callPackage ./lxqt-admin {};
lxqt-config = callPackage ./lxqt-config {};
lxqt-globalkeys = callPackage ./lxqt-globalkeys {};
lxqt-notificationd = callPackage ./lxqt-notificationd {};
lxqt-openssh-askpass = callPackage ./lxqt-openssh-askpass {};
lxqt-policykit = callPackage ./lxqt-policykit {};
lxqt-powermanagement = callPackage ./lxqt-powermanagement {};
lxqt-qtplugin = callPackage ./lxqt-qtplugin {};
lxqt-session = callPackage ./lxqt-session {};
lxqt-sudo = callPackage ./lxqt-sudo {};
lxqt-themes = callPackage ./lxqt-themes {};
pavucontrol-qt = libsForQt5.callPackage ./pavucontrol-qt {};
qtermwidget = callPackage ./qtermwidget {};
### CORE 2
lxqt-panel = callPackage ./lxqt-panel { };
lxqt-runner = callPackage ./lxqt-runner { };
pcmanfm-qt = callPackage ./pcmanfm-qt { };
lxqt-panel = callPackage ./lxqt-panel {};
lxqt-runner = callPackage ./lxqt-runner {};
pcmanfm-qt = callPackage ./pcmanfm-qt {};
### OPTIONAL
qterminal = callPackage ./qterminal { };
compton-conf = pkgs.qt5.callPackage ./compton-conf { };
obconf-qt = callPackage ./obconf-qt { };
lximage-qt = callPackage ./lximage-qt { };
qps = callPackage ./qps { };
screengrab = callPackage ./screengrab { };
qlipper = callPackage ./qlipper { };
lxqt-archiver = callPackage ./lxqt-archiver { };
qterminal = callPackage ./qterminal {};
compton-conf = pkgs.qt5.callPackage ./compton-conf {};
obconf-qt = callPackage ./obconf-qt {};
lximage-qt = callPackage ./lximage-qt {};
qps = callPackage ./qps {};
screengrab = callPackage ./screengrab {};
qlipper = callPackage ./qlipper {};
lxqt-archiver = callPackage ./lxqt-archiver {};
preRequisitePackages = [
pkgs.gvfs # virtual file systems support for PCManFM-QT
@ -107,5 +114,5 @@ let
];
};
in makeScope libsForQt5.newScope packages
in
makeScope libsForQt5.newScope packages

View File

@ -1,18 +1,28 @@
{
lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools,
pcre, libexif, xorg, libfm, menu-cache,
qtx11extras, qttools
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt-build-tools
, pcre
, libexif
, xorg
, libfm
, menu-cache
, qtx11extras
, qttools
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "libfm-qt-unstable";
version = "2019-09-22";
pname = "libfm-qt";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = "libfm-qt";
rev = "7c94e9efb996df0602f1f2b34b0216ba9b6df498";
sha256 = "1fnli2kh7n4hxmqwcb1n06lyk67d9a2fx6z70gas5jzym7r2h5vw";
rev = version;
sha256 = "0isshh627zr69kdmjxsy75i1nh95ky2wfhgy90g8j4zijpkdrd3l";
};
nativeBuildInputs = [
@ -33,6 +43,8 @@ mkDerivation rec {
menu-cache
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Core library of PCManFM-Qt (Qt binding for libfm)";
homepage = "https://github.com/lxqt/libfm-qt";

View File

@ -1,15 +1,27 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtx11extras,
qttools, qtsvg, libqtxdg, polkit-qt, kwindowsystem, xorg }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtx11extras
, qttools
, qtsvg
, libqtxdg
, polkit-qt
, kwindowsystem
, xorg
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "liblxqt";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "0g2502lcws5j74p82qhfryz9n51cvi85hb50r5s227xhkv91q65k";
sha256 = "1dqxsz8fy6xyzbkxhsymmr71yw4d5dwjgqd4rdjn0r9gk8ajrfzp";
};
nativeBuildInputs = [
@ -31,6 +43,8 @@ mkDerivation rec {
sed -i "s|\''${POLKITQT-1_POLICY_FILES_INSTALL_DIR}|''${out}/share/polkit-1/actions|" CMakeLists.txt
'';
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Core utility library for all LXQt components";
homepage = "https://github.com/lxqt/liblxqt";

View File

@ -1,28 +1,42 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, qtsvg, lxqt-build-tools }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, qtbase
, qtsvg
, lxqt-build-tools
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "libqtxdg";
version = "3.4.0";
version = "3.5.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "16jqnpc740a6phq7vcgy85hl7253yzyw4m5h71r0vijk79ir73b5";
sha256 = "00dzs6zc8prc0mxmvq0pmpy1qi8rysg97as7jfd0ndk5jii0nd85";
};
nativeBuildInputs = [ cmake lxqt-build-tools ];
nativeBuildInputs = [
cmake
lxqt-build-tools
];
buildInputs = [ qtbase qtsvg ];
buildInputs = [
qtbase
qtsvg
];
preConfigure = ''
cmakeFlagsArray+=(
"-DQTXDGX_ICONENGINEPLUGIN_INSTALL_PATH=$out/$qtPluginPrefix"
"-DCMAKE_INSTALL_INCLUDEDIR=include"
"-DCMAKE_INSTALL_LIBDIR=lib"
"-DQTXDGX_ICONENGINEPLUGIN_INSTALL_PATH=$out/$qtPluginPrefix/iconengines"
)
'';
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Qt implementation of freedesktop.org xdg specs";
homepage = "https://github.com/lxqt/libqtxdg";

View File

@ -1,19 +1,33 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, lxqt-build-tools }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, qtbase
, lxqt-build-tools
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "libsysstat";
version = "0.4.2";
version = "0.4.3";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "10h9n7km7yx8bnmzxi4nn1yqq03hizjkrx4745j0mczy7niiffsz";
sha256 = "1dlshyv7pd7gwl55rd3msppjdpz2pwp5f4da9a9wapg7kiskqahf";
};
nativeBuildInputs = [ cmake lxqt-build-tools ];
nativeBuildInputs = [
cmake
lxqt-build-tools
];
buildInputs = [ qtbase ];
buildInputs = [
qtbase
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Library used to query system info and statistics";

View File

@ -1,15 +1,28 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qtbase, qttools,
qtx11extras, qtsvg, xorg, lxqt-build-tools, libfm-qt, libexif }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, qtbase
, qttools
, qtx11extras
, qtsvg
, xorg
, lxqt-build-tools
, libfm-qt
, libexif
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lximage-qt";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "175l2w5w6iag01v05jq90pxx0al24wpw3mgsbcgqhl4z6h860r32";
sha256 = "1pz0ird5vyrz1xycfn2vqh628f2mzwrx0psnp4hqdmj1xk9bjkbp";
};
nativeBuildInputs = [
@ -29,6 +42,8 @@ mkDerivation rec {
libexif
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "The image viewer and screenshot tool for lxqt";
homepage = "https://github.com/lxqt/lximage-qt";

View File

@ -1,14 +1,26 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtx11extras, qttools, qtsvg, kwindowsystem, liblxqt, libqtxdg }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtx11extras
, qttools
, qtsvg
, kwindowsystem
, liblxqt
, libqtxdg
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-about";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "0dj2rhbhnkzmv1iqqyq0bcp03imwnvxdr7rnpqnrs9kkjacm8zvr";
sha256 = "0bgwh9jbvpnsdcij0bfkgzg0pb0ljjalv65q4q0hlha430pmpv3x";
};
nativeBuildInputs = [
@ -25,6 +37,8 @@ mkDerivation rec {
libqtxdg
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Dialogue window providing information about LXQt and the system it's running on";
homepage = "https://github.com/lxqt/lxqt-about";

View File

@ -1,14 +1,27 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtx11extras, qttools, qtsvg, kwindowsystem, liblxqt, libqtxdg, polkit-qt }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtx11extras
, qttools
, qtsvg
, kwindowsystem
, liblxqt
, libqtxdg
, polkit-qt
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-admin";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "121qj46app2bqdr24g5sz2mdjfd9w86wpgkwap46s0zgxm4li44i";
sha256 = "16fbnlvla8lq6rkv5gpmkw2jj9h1wzd3jcf8sjrbns6ygyfdxx3a";
};
nativeBuildInputs = [
@ -31,6 +44,8 @@ mkDerivation rec {
-i lxqt-admin-user/CMakeLists.txt
'';
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "LXQt system administration tool";
homepage = "https://github.com/lxqt/lxqt-admin";

View File

@ -1,15 +1,26 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools, json-glib, libfm-qt, qtbase, qttools, qtx11extras }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt-build-tools
, json-glib
, libfm-qt
, qtbase
, qttools
, qtx11extras
, lxqtUpdateScript
}:
mkDerivation rec {
# pname = "lxqt-archiver";
pname = "lxqt-archiver-unstable";
version = "2019-09-25";
pname = "lxqt-archiver";
version = "0.1.1";
src = fetchFromGitHub {
owner = "lxqt";
repo = "lxqt-archiver";
rev = "62501255434b2ba6a8fd043a5af13dc0df038a5b";
sha256 = "1af58k68karmnay7xgngzlmcgkmvx6hay5m1xbl5id9hh16n20in";
rev = version;
sha256 = "0c0y8sy12laqyanvy6mmnpjvy1yb8k3241pbxhc3nyl5zrq3hzdh";
};
nativeBuildInputs = [
@ -26,10 +37,10 @@ mkDerivation rec {
qtx11extras
];
cmakeFlags = [ "-DPULL_TRANSLATIONS=NO" ];
hardeningDisable = [ "format" ];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Archive tool for the LXQt desktop environment";
homepage = "https://github.com/lxqt/lxqt-archiver/";

View File

@ -1,19 +1,36 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, pcre, qtbase, glib }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, pcre
, qtbase
, glib
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-build-tools";
version = "0.6.0";
version = "0.7.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "0i7m9s4g5rsw28vclc9nh0zcapx85cqfwxkx7rrw7wa12svy7pm2";
sha256 = "18l1w9lyf3nyj05wjhaj4lclak6qydlhw9bqi6kxgr1bv8k709lf";
};
nativeBuildInputs = [ cmake pkgconfig setupHook ];
nativeBuildInputs = [
cmake
pkgconfig
setupHook
];
buildInputs = [ qtbase glib pcre ];
buildInputs = [
qtbase
glib
pcre
];
setupHook = ./setup-hook.sh;
@ -24,6 +41,8 @@ mkDerivation rec {
cp ${./LXQtConfigVars.cmake} $out/share/cmake/lxqt-build-tools/modules/LXQtConfigVars.cmake
'';
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Various packaging tools and scripts for LXQt applications";
homepage = "https://github.com/lxqt/lxqt-build-tools";

View File

@ -1,16 +1,30 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools, qtbase,
qtx11extras, qttools, qtsvg, kwindowsystem, libkscreen, liblxqt,
libqtxdg, xorg }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt-build-tools
, qtbase
, qtx11extras
, qttools
, qtsvg
, kwindowsystem
, libkscreen
, liblxqt
, libqtxdg
, xorg
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-config";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "0x1k08587i2pakxlrj2n0l82r179sfywnzn2cphxiy89r5zpn7vi";
sha256 = "1nqkc716rl4c0rad4vqlqadm6lljrhwpdflaa5k9lrdiingr0s7s";
};
nativeBuildInputs = [
@ -41,6 +55,8 @@ mkDerivation rec {
sed -i "/\''${XORG_LIBINPUT_INCLUDE_DIRS}/a ${xorg.xf86inputlibinput.dev}/include/xorg" lxqt-config-input/CMakeLists.txt
'';
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Tools to configure LXQt and the underlying operating system";
homepage = "https://github.com/lxqt/lxqt-config";

View File

@ -1,14 +1,27 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtx11extras, qtsvg, kwindowsystem, liblxqt, libqtxdg }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtbase
, qttools
, qtx11extras
, qtsvg
, kwindowsystem
, liblxqt
, libqtxdg
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-globalkeys";
version = "0.14.3";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "1ij9abjnqbnkcb7qqk3x7y4amr6l7kkmwhdpc0x2qk4yikn5ijdg";
sha256 = "09vib713zbmnwicijycl3n9q35l45lrcw129lf9z95s3ch81x1hm";
};
nativeBuildInputs = [
@ -26,6 +39,8 @@ mkDerivation rec {
libqtxdg
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "LXQt service for global keyboard shortcuts registration";
homepage = "https://github.com/lxqt/lxqt-globalkeys";

View File

@ -1,14 +1,27 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtsvg, kwindowsystem, liblxqt, libqtxdg, qtx11extras }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtbase
, qttools
, qtsvg
, kwindowsystem
, liblxqt
, libqtxdg
, qtx11extras
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-notificationd";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "1ihaf2i361j2snyy6kg8ccpfnc8hppvacmxjqzb1lpyaf1ajd139";
sha256 = "0vqk1rc4fn2s0ls6sl03vzsb16xczrxab4rzjim3azm4pwsxjd1k";
};
nativeBuildInputs = [
@ -26,6 +39,8 @@ mkDerivation rec {
qtx11extras
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "The LXQt notification daemon";
homepage = "https://github.com/lxqt/lxqt-notificationd";

View File

@ -1,14 +1,27 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtsvg, qtx11extras, kwindowsystem, liblxqt, libqtxdg }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtbase
, qttools
, qtsvg
, qtx11extras
, kwindowsystem
, liblxqt
, libqtxdg
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-openssh-askpass";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "04jmvhhlhhspwzj4hfq7fnaa3h7h02z3rlq8p55hzlzkvshqqh1q";
sha256 = "056bj3ssp4vqapzqg3da3m95vi92043j7mv70lmpznxdwyjwgxc3";
};
nativeBuildInputs = [
@ -26,6 +39,8 @@ mkDerivation rec {
libqtxdg
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "GUI to query passwords on behalf of SSH agents";
homepage = "https://github.com/lxqt/lxqt-openssh-askpass";

View File

@ -1,21 +1,42 @@
{
lib, mkDerivation, fetchFromGitHub,
cmake, pkgconfig, lxqt-build-tools,
qtbase, qttools, qtx11extras, qtsvg, libdbusmenu, kwindowsystem, solid,
kguiaddons, liblxqt, libqtxdg, lxqt-globalkeys, libsysstat,
xorg, libstatgrab, lm_sensors, libpulseaudio, alsaLib, menu-cache,
lxmenu-data, pcre, libXdamage
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt-build-tools
, qtbase
, qttools
, qtx11extras
, qtsvg
, libdbusmenu
, kwindowsystem
, solid
, kguiaddons
, liblxqt
, libqtxdg
, lxqt-globalkeys
, libsysstat
, xorg
, libstatgrab
, lm_sensors
, libpulseaudio
, alsaLib
, menu-cache
, lxmenu-data
, pcre
, libXdamage
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-panel";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "1py3i7qgm6h2iwjwqfjml1rp06s7ls1d7z5i9iizsmfshdzkaq86";
sha256 = "0k2gqf9f4g8fpny8p5m1anzk7mdxm9dgh6xlngz25nj4mshnq3xs";
};
nativeBuildInputs = [
@ -49,6 +70,8 @@ mkDerivation rec {
libXdamage
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "The LXQt desktop panel";
homepage = "https://github.com/lxqt/lxqt-panel";

View File

@ -1,18 +1,30 @@
{
lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools,
qtbase, qttools, qtx11extras, qtsvg, polkit-qt, kwindowsystem, liblxqt,
libqtxdg, pcre
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt-build-tools
, qtbase
, qttools
, qtx11extras
, qtsvg
, polkit-qt
, kwindowsystem
, liblxqt
, libqtxdg
, pcre
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-policykit";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "0mh9jw09r0mk8xmgvmzk3yyfix0pzqya28rcx71fqjpbdv1sc44l";
sha256 = "001zgjxgvzp7clfqr46sx8m3a7v38xxgxjqrpz01lxx18zik3d9h";
};
nativeBuildInputs = [
@ -33,6 +45,8 @@ mkDerivation rec {
pcre
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "The LXQt PolicyKit agent";
homepage = "https://github.com/lxqt/lxqt-policykit";

View File

@ -1,14 +1,29 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtx11extras, qtsvg, kwindowsystem, solid, kidletime, liblxqt, libqtxdg }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtbase
, qttools
, qtx11extras
, qtsvg
, kwindowsystem
, solid
, kidletime
, liblxqt
, libqtxdg
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-powermanagement";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "1nhp4a28bpczhwz8b8da355zsxr1qwmkrm3bwllwp39liw947clx";
sha256 = "0gqxy4d05gibsvq27qdfwp5v19310l0ln4bvwaan6ailbyyya90f";
};
nativeBuildInputs = [
@ -28,6 +43,8 @@ mkDerivation rec {
libqtxdg
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Power management module for LXQt";
homepage = "https://github.com/lxqt/lxqt-powermanagement";

View File

@ -1,18 +1,27 @@
{
lib, mkDerivation, fetchFromGitHub,
cmake, lxqt-build-tools,
qtbase, qtx11extras, qttools, qtsvg, libdbusmenu, libqtxdg, libfm-qt
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtbase
, qtx11extras
, qttools
, qtsvg
, libdbusmenu
, libqtxdg
, libfm-qt
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-qtplugin";
version = "0.14.0";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "16n50lxnya03zcviw65sy5dyg9dsrn64k91mrqfvraf6d90md4al";
sha256 = "17x5jr78rbsf4pbvc4y3wwkpvsmynzkxy2ifvwhqyc2gmjspp8il";
};
nativeBuildInputs = [
@ -35,6 +44,8 @@ mkDerivation rec {
--replace "DESTINATION \"\''${QT_PLUGINS_DIR}" "DESTINATION \"$qtPluginPrefix"
'';
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "LXQt Qt platform integration plugin";
homepage = "https://github.com/lxqt/lxqt-qtplugin";

View File

@ -1,15 +1,32 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools, qtbase, qttools, qtsvg, kwindowsystem, liblxqt, libqtxdg, lxqt-globalkeys, qtx11extras,
menu-cache, muparser, pcre }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt-build-tools
, qtbase
, qttools
, qtsvg
, kwindowsystem
, liblxqt
, libqtxdg
, lxqt-globalkeys
, qtx11extras
, menu-cache
, muparser
, pcre
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-runner";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "01a8ycpkzcbh85y4025pd3nbpnzxh98ll1xwz4ykz13yvm0l2n1w";
sha256 = "1x6s4k27cvj2k51hwpcp3l686c2am504ckry4fm76h0mlnkffjm5";
};
nativeBuildInputs = [
@ -32,6 +49,8 @@ mkDerivation rec {
pcre
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Tool used to launch programs quickly by typing their names";
homepage = "https://github.com/lxqt/lxqt-runner";

View File

@ -1,14 +1,30 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt-build-tools, qtbase, qttools, qtsvg, qtx11extras, kwindowsystem, liblxqt, libqtxdg, xorg, xdg-user-dirs }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt-build-tools
, qtbase
, qttools
, qtsvg
, qtx11extras
, kwindowsystem
, liblxqt
, libqtxdg
, xorg
, xdg-user-dirs
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-session";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "0s6b0lblb795zz1p7sy677c1iznhmdzc4vw3jkc2agmsrhm7if7s";
sha256 = "0kbk13dpmr75yd905n30k51cl7srrxz31ma4kacx450qgr5rwawn";
};
nativeBuildInputs = [
@ -30,6 +46,8 @@ mkDerivation rec {
xdg-user-dirs
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "An alternative session manager ported from the original razor-session";
homepage = "https://github.com/lxqt/lxqt-session";

View File

@ -1,14 +1,28 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtbase, qttools, qtx11extras, qtsvg, kwindowsystem, liblxqt, libqtxdg, sudo }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtbase
, qttools
, qtx11extras
, qtsvg
, kwindowsystem
, liblxqt
, libqtxdg
, sudo
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-sudo";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "1my0wpic20493rdlabp9ghag1g3nhwafk2yklkgczlajmarakgpc";
sha256 = "1j8pxqxb2c10hrfq34nfx75pc0cz6044j4w458nnxbgvl5b8cdcb";
};
nativeBuildInputs = [
@ -27,6 +41,8 @@ mkDerivation rec {
sudo
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "GUI frontend for sudo/su";
homepage = "https://github.com/lxqt/lxqt-sudo";

View File

@ -1,14 +1,20 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "lxqt-themes";
version = "0.14.0";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "09dkcgnf3lmfly8v90p6wjlj5rin83pbailvvpx2jr8a48a8zb9f";
sha256 = "1magzckhgrac2b5jm83hj3s8x4hyfnbh2v86lfa4c36whnfvsz29";
};
nativeBuildInputs = [
@ -16,6 +22,8 @@ mkDerivation rec {
lxqt-build-tools
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Themes, graphics and icons for LXQt";
homepage = "https://github.com/lxqt/lxqt-themes";

View File

@ -1,15 +1,27 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, pcre, qtbase, qttools,
qtx11extras, xorg, lxqt-build-tools, openbox }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, pcre
, qtbase
, qttools
, qtx11extras
, xorg
, lxqt-build-tools
, openbox
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "obconf-qt";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "15dizs072ylmld1lxwgqkvybqy8ms8zki5586xm305jnlmrkb4lq";
sha256 = "13bah70k78kscrr01z7dwdzwhay8mz0f7gfsg2a6w113mgqkn7ib";
};
nativeBuildInputs = [
@ -29,6 +41,8 @@ mkDerivation rec {
openbox
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "The Qt port of obconf, the Openbox configuration tool";
homepage = "https://github.com/lxqt/obconf-qt";

View File

@ -1,15 +1,25 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt, libpulseaudio,
pcre, qtbase, qttools, qtx11extras }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt
, libpulseaudio
, pcre
, qtbase
, qttools
, qtx11extras
}:
mkDerivation rec {
pname = "pavucontrol-qt";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "124dk41v8l5pv7afi1h7fgbhm8zj605yfd8b769sn7id2bqj7bis";
sha256 = "0ppm79c6pkz2hvs1rri55d3s46j6r0vhiv634wzap9qshjb1j367";
};
nativeBuildInputs = [
@ -26,6 +36,8 @@ mkDerivation rec {
pcre
];
passthru.updateScript = lxqt.lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "A Pulseaudio mixer in Qt (port of pavucontrol)";
homepage = "https://github.com/lxqt/pavucontrol-qt";

View File

@ -1,15 +1,27 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, lxqt, qtbase, qttools,
qtx11extras, libfm-qt, menu-cache, lxmenu-data }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, lxqt
, qtbase
, qttools
, qtx11extras
, libfm-qt
, menu-cache
, lxmenu-data
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "pcmanfm-qt";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "1zchxlbyiifing94mqwh45pp7z3ihldknqiaz0kanq1cnma1jj6k";
sha256 = "16zwd2jfrmsnzfpywirkrpyilq1jj99liwvg77l20b1dbql9dc0q";
};
nativeBuildInputs = [
@ -28,6 +40,8 @@ mkDerivation rec {
lxmenu-data
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "File manager and desktop icon manager (Qt port of PCManFM and libfm)";
homepage = "https://github.com/lxqt/pcmanfm-qt";

View File

@ -1,19 +1,33 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, qttools }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, qtbase
, qttools
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "qlipper";
version = "5.1.1";
version = "5.1.2";
src = fetchFromGitHub {
owner = "pvanek";
repo = pname;
rev = version;
sha256 = "0vlm4ab9isi7i2bimnyrk6083j2dfdrs14qj59vjcjri7mcwmf76";
sha256 = "0zpkcqfylcfwvadp1bidcrr64d8ls5c7bdnkfqwjjd32sd35ly60";
};
nativeBuildInputs = [ cmake ];
nativeBuildInputs = [
cmake
];
buildInputs = [ qtbase qttools ];
buildInputs = [
qtbase
qttools
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Cross-platform clipboard history applet";

View File

@ -1,26 +1,49 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, qtx11extras, qttools,
lxqt-build-tools }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, kwindowsystem
, liblxqt
, libqtxdg
, lxqt-build-tools
, lxqtUpdateScript
, qtbase
, qttools
, qtx11extras
}:
mkDerivation rec {
pname = "qps";
version = "2.0.0";
version = "2.1.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "03rl59yk3b24j0y0k8dpdpb3yi4f1l642zn5pp5br3s2vwx1vzkg";
sha256 = "0jg7sfhdm5xsahzcw8hc2vpp5p3sqzdqwp4my65nj85i7wzgxmva";
};
nativeBuildInputs = [ cmake lxqt-build-tools ];
nativeBuildInputs = [
cmake
lxqt-build-tools
];
buildInputs = [ qtbase qtx11extras qttools ];
buildInputs = [
kwindowsystem
liblxqt
libqtxdg
qtbase
qttools
qtx11extras
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Qt based process manager";
homepage = "https://github.com/lxqt/qps";
license = licenses.gpl2;
platforms = with platforms; linux; # does not build on darwin
platforms = with platforms; linux; # does not build on darwin
maintainers = with maintainers; [ romildo ];
};
}

View File

@ -1,15 +1,24 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, lxqt-build-tools, qtermwidget,
qtbase, qttools, qtx11extras }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, lxqt-build-tools
, qtermwidget
, qtbase
, qttools
, qtx11extras
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "qterminal";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "0bq6lvns56caijdmjm05nsj9vg69v9x5vid24bfxasck6q8nw24w";
sha256 = "1vna0fvdasrdx7l5zxaaxi1v9fy34g2qblgkdhpczxivnmmxm5a3";
};
nativeBuildInputs = [
@ -24,6 +33,8 @@ mkDerivation rec {
qtermwidget
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "A lightweight Qt-based terminal emulator";
homepage = "https://github.com/lxqt/qterminal";

View File

@ -1,19 +1,35 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, qtbase, qttools, lxqt-build-tools }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, qtbase
, qttools
, lxqt-build-tools
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "qtermwidget";
version = "0.14.1";
version = "0.15.0";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "1pz8dwb86jpga4vfyn5v9n2s6dx3zh74yfp1kjsmsmhf878zs6lv";
sha256 = "07wvcc650998yav9hr4hpm842j0iqdvls3mn9n2n4v8xvm7cii2m";
};
nativeBuildInputs = [ cmake lxqt-build-tools ];
nativeBuildInputs = [
cmake
lxqt-build-tools
];
buildInputs = [ qtbase qttools ];
buildInputs = [
qtbase
qttools
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "A terminal emulator widget for Qt 5";

View File

@ -1,14 +1,28 @@
{ lib, mkDerivation, fetchFromGitHub, cmake, pkgconfig, qtbase, qttools, qtx11extras, qtsvg, kwindowsystem, libqtxdg, xorg, autoPatchelfHook }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkgconfig
, qtbase
, qttools
, qtx11extras
, qtsvg
, kwindowsystem
, libqtxdg
, xorg
, autoPatchelfHook
, lxqtUpdateScript
}:
mkDerivation rec {
pname = "screengrab";
version = "2.0.0";
version = "2.0.1";
src = fetchFromGitHub {
owner = "lxqt";
repo = pname;
rev = version;
sha256 = "1syvdqq45dr8hwigl9ax1wxr33m8z23nh6xzzlqbflyyd93xzjmn";
sha256 = "07wm9q0nkrvmyb12kvh0709qrwizlxgy6i5j2czhb4giljrpr4x6";
};
nativeBuildInputs = [
@ -28,6 +42,8 @@ mkDerivation rec {
xorg.libXdmcp
];
passthru.updateScript = lxqtUpdateScript { inherit pname version src; };
meta = with lib; {
description = "Crossplatform tool for fast making screenshots";
homepage = "https://github.com/lxqt/screengrab";

View File

@ -1,39 +0,0 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p libarchive curl common-updater-scripts
set -eu -o pipefail
cd "$(dirname "${BASH_SOURCE[0]}")"
root=../../..
export NIXPKGS_ALLOW_UNFREE=1
lxqt_version=0.14.1
lxqtrepo=https://downloads.lxqt.org/${lxqt_version}.html
version() {
(cd "$root" && nix-instantiate --eval --strict -A "$1.version" 2>/dev/null | tr -d '"')
}
update_lxqt() {
local pname
local pversion
curl -sS ${lxqtrepo} | sed -rne 's|.*<a href=.*>(.+) (.+)</a><br>|\1 \2|p' |
while read pname pversion; do
local pversionold=$(version lxqt.$pname)
if [[ "$pversion" = "$pversionold" ]]; then
echo "nothing to do, $pname $pversion is current"
else
echo "$pname: $pversionold -> $pversion"
(cd "$root"
local pfile=$(EDITOR=echo nix edit -f. lxqt.$pname 2>/dev/null)
update-source-version lxqt.$pname "$pversion"
git add $pfile
git commit -m "lxqt.$pname: $pversionold -> $pversion"
)
fi
echo
done
echo DONE
}
update_lxqt

View File

@ -45,12 +45,6 @@ self: super: {
# Needs older QuickCheck version
attoparsec-varword = dontCheck super.attoparsec-varword;
# http://bugs.darcs.net/issue2642
darcs = doJailbreak (appendPatches super.darcs [
./patches/darcs-setup.patch
./patches/darcs-2.14.2-Compile-against-GHC-8.8.patch
]);
# Tests are failing
# https://github.com/bos/statistics/issues/123
statistics = dontCheck super.statistics;
@ -1073,35 +1067,8 @@ self: super: {
# Generate shell completion.
cabal2nix = generateOptparseApplicativeCompletion "cabal2nix" super.cabal2nix;
stack =
let
stackWithOverrides =
super.stack.override {
# stack-2.1.3.1 requires pantry-0.2.0.0.
pantry = self.pantry_0_2_0_0;
};
in
generateOptparseApplicativeCompletion
"stack"
(appendPatches stackWithOverrides [
# This PR fixes stack up to be able to build with Cabal-3. This patch
# can probably be dropped when the next stack release is made after
# 2.1.3.1.
(pkgs.fetchpatch {
url = "https://github.com/commercialhaskell/stack/pull/5156.diff";
sha256 = "0knk6f9fh1b4fxkhvx5gfrwclal4vi2va4zy34gpmwnjr7knf42y";
excludes = [
"snapshot-lts-12.yaml"
"snapshot-nightly.yaml"
"snapshot.yaml"
];
})
# This patch fixes stack up to be able to build various GHC-8.8 changes.
# This can hopefully be dropped when the next stack release is made
# after 2.1.3.1 (assuming the next stack release uses GHC-8.8).
./patches/stack-ghc882-support.patch
]);
stack = generateOptparseApplicativeCompletion "stack" (super.stack.overrideScope (self: super: { http-download = self.http-download_0_2_0_0; }));
http-download_0_2_0_0 = dontCheck super.http-download_0_2_0_0;
# musl fixes
# dontCheck: use of non-standard strptime "%s" which musl doesn't support; only used in test
@ -1516,4 +1483,9 @@ self: super: {
sha256 = "sha256:0xbfhzhzg94b4r5qy5dg1c40liswwpqarrc2chcwgfbfnrmwkfc2";
});
# Depends on selective >= 0.4, but the default of selective is 0.3
headed-megaparsec = super.headed-megaparsec.override {
selective = self.selective_0_4_1;
};
} // import ./configuration-tensorflow.nix {inherit pkgs haskellLib;} self super

View File

@ -42,12 +42,30 @@ self: super: {
unix = null;
xhtml = null;
# The proper 3.2.0.0 release does not compile with ghc-8.10.1, so we take the
# hitherto unreleased next version from the '3.2' branch of the upstream git
# repository for the time being.
cabal-install = assert super.cabal-install.version == "3.2.0.0";
overrideCabal super.cabal-install (drv: {
postUnpack = "sourceRoot+=/cabal-install; echo source root reset to $sourceRoot";
version = "3.2.0.0-git";
editedCabalFile = null;
src = pkgs.fetchgit {
url = "git://github.com/haskell/cabal.git";
rev = "9bd4cc0591616aeae78e17167338371a2542a475";
sha256 = "005q1shh7vqgykkp72hhmswmrfpz761x0q0jqfnl3wqim4xd9dg0";
};
});
# Deviate from Stackage LTS-15.x to fix the build.
haddock-library = self.haddock-library_1_9_0;
# Jailbreak to fix the build.
async = doJailbreak super.async;
ChasingBottoms = doJailbreak super.ChasingBottoms;
ed25519 = doJailbreak super.ed25519;
email-validate = doJailbreak super.email-validate; # https://github.com/Porges/email-validate-hs/issues/51
feed = doJailbreak super.feed; # https://github.com/bergmark/feed/issues/48
hashable = doJailbreak super.hashable;
pandoc = doJailbreak super.pandoc;
parallel = doJailbreak super.parallel;
@ -60,6 +78,7 @@ self: super: {
system-fileio = doJailbreak super.system-fileio;
tar = doJailbreak super.tar;
tasty-expected-failure = doJailbreak super.tasty-expected-failure;
tasty-rerun = doJailbreak super.tasty-rerun; # https://github.com/ocharles/tasty-rerun/issues/18
unliftio-core = doJailbreak super.unliftio-core;
vector = doJailbreak super.vector;
zlib = doJailbreak super.zlib;

View File

@ -72,7 +72,7 @@ default-package-overrides:
# gi-gdkx11-4.x requires gtk-4.x, which is still under development and
# not yet available in Nixpkgs
- gi-gdkx11 < 4
# LTS Haskell 15.9
# LTS Haskell 15.10
- abstract-deque ==0.3
- abstract-par ==0.3.3
- AC-Angle ==1.0
@ -319,7 +319,7 @@ default-package-overrides:
- blaze-bootstrap ==0.1.0.1
- blaze-builder ==0.4.1.0
- blaze-html ==0.9.1.2
- blaze-markup ==0.8.2.4
- blaze-markup ==0.8.2.5
- blaze-svg ==0.3.6.1
- blaze-textual ==0.2.1.0
- bmp ==1.2.6.3
@ -437,9 +437,9 @@ default-package-overrides:
- codec-rpm ==0.2.2
- code-page ==0.2
- coercible-utils ==0.1.0
- co-log ==0.4.0.0
- co-log-core ==0.2.1.0
- co-log-polysemy ==0.0.1.1
- co-log ==0.4.0.1
- co-log-core ==0.2.1.1
- co-log-polysemy ==0.0.1.2
- Color ==0.1.4
- colorful-monoids ==0.2.1.2
- colorize-haskell ==1.0.1
@ -859,7 +859,7 @@ default-package-overrides:
- gi-glib ==2.0.23
- gi-gobject ==2.0.22
- gi-graphene ==1.0.1
- gi-gtk ==3.0.32
- gi-gtk ==3.0.33
- gi-gtk-hs ==0.3.8.1
- gingersnap ==0.3.1.0
- gi-pango ==1.0.22
@ -889,7 +889,7 @@ default-package-overrides:
- graphviz ==2999.20.0.4
- graph-wrapper ==0.2.6.0
- gravatar ==0.8.0
- greskell ==1.0.0.1
- greskell ==1.0.1.0
- greskell-core ==0.1.3.2
- greskell-websocket ==0.1.2.1
- groom ==0.1.2.1
@ -932,6 +932,8 @@ default-package-overrides:
- HaXml ==1.25.5
- haxr ==3000.11.4
- hdaemonize ==0.5.6
- HDBC ==2.4.0.3
- HDBC-session ==0.1.2.0
- headroom ==0.1.3.0
- heap ==1.0.4
- heaps ==0.3.6.1
@ -958,7 +960,7 @@ default-package-overrides:
- highlighting-kate ==0.6.4
- hinfo ==0.0.3.0
- hinotify ==0.4
- hint ==0.9.0.2
- hint ==0.9.0.3
- hjsmin ==0.2.0.4
- hkgr ==0.2.5.2
- hlibcpuid ==0.2.0
@ -1471,7 +1473,7 @@ default-package-overrides:
- OneTuple ==0.2.2.1
- Only ==0.1
- oo-prototypes ==0.1.0.0
- opaleye ==0.6.7004.1
- opaleye ==0.6.7004.2
- OpenAL ==1.7.0.5
- open-browser ==0.2.1.0
- openexr-write ==0.1.0.2
@ -1541,6 +1543,7 @@ default-package-overrides:
- perfect-vector-shuffle ==0.1.1.1
- persist ==0.1.1.4
- persistable-record ==0.6.0.4
- persistable-types-HDBC-pg ==0.0.3.5
- persistent ==2.10.5.2
- persistent-mysql ==2.10.2.3
- persistent-pagination ==0.1.1.1
@ -1625,7 +1628,7 @@ default-package-overrides:
- print-console-colors ==0.1.0.0
- process-extras ==0.7.4
- product-isomorphic ==0.0.3.3
- product-profunctors ==0.10.0.0
- product-profunctors ==0.10.0.1
- profiterole ==0.1
- profunctors ==5.5.2
- projectroot ==0.2.0.1
@ -1727,6 +1730,8 @@ default-package-overrides:
- reinterpret-cast ==0.1.0
- relapse ==1.0.0.0
- relational-query ==0.12.2.2
- relational-query-HDBC ==0.7.2.0
- relational-record ==0.2.2.0
- relational-schemas ==0.1.8.0
- relude ==0.6.0.0
- renderable ==0.2.0.1
@ -1738,10 +1743,10 @@ default-package-overrides:
- rerebase ==1.4.1
- resolv ==0.1.2.0
- resource-pool ==0.2.3.2
- resourcet ==1.2.3
- resourcet ==1.2.4
- result ==0.2.6.0
- rethinkdb-client-driver ==0.0.25
- retry ==0.8.1.1
- retry ==0.8.1.2
- rev-state ==0.1.2
- rfc1751 ==0.1.2
- rfc5051 ==0.1.0.4
@ -1779,8 +1784,8 @@ default-package-overrides:
- sampling ==0.3.3
- say ==0.1.0.1
- sbp ==2.6.3
- scalpel ==0.6.1
- scalpel-core ==0.6.1
- scalpel ==0.6.2
- scalpel-core ==0.6.2
- scanf ==0.1.0.0
- scanner ==0.3.1
- scheduler ==1.4.2.2
@ -1844,7 +1849,7 @@ default-package-overrides:
- servant-swagger-ui-redoc ==0.3.3.1.22.3
- servant-websockets ==2.0.0
- servant-yaml ==0.1.0.1
- serverless-haskell ==0.10.2
- serverless-haskell ==0.10.5
- serversession ==1.0.1
- serversession-frontend-wai ==1.0
- ses-html ==0.4.0.0
@ -1889,7 +1894,7 @@ default-package-overrides:
- skip-var ==0.1.1.0
- skylighting ==0.8.3.4
- skylighting-core ==0.8.3.4
- slist ==0.1.0.0
- slist ==0.1.1.0
- small-bytearray-builder ==0.3.4.0
- smallcheck ==1.1.5
- smoothie ==0.4.2.10
@ -1946,7 +1951,7 @@ default-package-overrides:
- streaming ==0.2.3.0
- streaming-bytestring ==0.1.6
- streaming-commons ==0.2.1.2
- streamly ==0.7.1
- streamly ==0.7.2
- streams ==3.3
- strict ==0.3.2
- strict-base-types ==0.6.1
@ -1960,8 +1965,8 @@ default-package-overrides:
- string-qq ==0.0.4
- stringsearch ==0.3.6.6
- string-transform ==1.1.1
- stripe-concepts ==1.0.2.0
- stripe-signature ==1.0.0.1
- stripe-concepts ==1.0.2.2
- stripe-signature ==1.0.0.2
- strive ==5.0.10
- structs ==0.1.3
- structured-cli ==2.5.2.0
@ -2035,7 +2040,7 @@ default-package-overrides:
- test-framework-th ==0.2.4
- testing-feat ==1.1.0.0
- testing-type-modifiers ==0.1.0.1
- texmath ==0.12.0.1
- texmath ==0.12.0.2
- text-binary ==0.2.1.1
- text-builder ==0.6.6.1
- text-conversions ==0.3.0
@ -2131,7 +2136,7 @@ default-package-overrides:
- typed-uuid ==0.0.0.2
- type-equality ==1
- type-errors ==0.2.0.0
- type-errors-pretty ==0.0.1.0
- type-errors-pretty ==0.0.1.1
- type-fun ==0.1.1
- type-hint ==0.1
- type-level-integers ==0.0.1
@ -2143,7 +2148,7 @@ default-package-overrides:
- type-of-html ==1.5.1.0
- type-of-html-static ==0.1.0.2
- type-operators ==0.2.0.0
- typerep-map ==0.3.2
- typerep-map ==0.3.3.0
- type-spec ==0.4.0.0
- tzdata ==0.1.20190911.0
- ua-parser ==0.7.5.1
@ -2201,7 +2206,7 @@ default-package-overrides:
- validity ==0.9.0.3
- validity-aeson ==0.2.0.3
- validity-bytestring ==0.4.1.1
- validity-containers ==0.5.0.1
- validity-containers ==0.5.0.3
- validity-path ==0.4.0.1
- validity-primitive ==0.0.0.1
- validity-scientific ==0.2.0.3
@ -4419,6 +4424,8 @@ broken-packages:
- elision
- elm-street
- elm-websocket
- elynx
- elynx-markov
- elynx-seq
- elynx-tools
- elynx-tree
@ -5333,7 +5340,6 @@ broken-packages:
- haddock-leksah
- haddock-test
- haddocset
- hadolint
- hadoop-formats
- hadoop-rpc
- hadoop-tools
@ -5626,7 +5632,6 @@ broken-packages:
- hasql-postgres
- hasql-postgres-options
- hasql-simple
- hasql-th
- hastache
- hastache-aeson
- haste
@ -5708,7 +5713,6 @@ broken-packages:
- hdph-closure
- hdr-histogram
- HDRUtils
- headed-megaparsec
- headergen
- heapsort
- heart-app
@ -8658,6 +8662,7 @@ broken-packages:
- reflex-basic-host
- reflex-dom-retractable
- reflex-dom-svg
- reflex-dynamic-containers
- reflex-fsnotify
- reflex-ghci
- reflex-gloss
@ -8666,6 +8671,7 @@ broken-packages:
- reflex-orphans
- reflex-process
- reflex-sdl2
- reflex-test-host
- reflex-transformers
- reflex-vty
- reformat
@ -9151,6 +9157,7 @@ broken-packages:
- shake-pack
- shake-path
- shake-persist
- shakebook
- shaker
- shakespeare-babel
- shakespeare-sass

View File

@ -628,11 +628,6 @@ self: super: builtins.intersectAttrs super {
http-download = dontCheck super.http-download;
pantry = dontCheck super.pantry;
# Hadolint wants to build a statically linked binary by default.
hadolint = overrideCabal super.hadolint (drv: {
preConfigure = "sed -i -e /ld-options:/d hadolint.cabal";
});
# gtk2hs-buildtools is listed in setupHaskellDepends, but we
# need it during the build itself, too.
cairo = addBuildTool super.cairo self.buildHaskellPackages.gtk2hs-buildtools;

File diff suppressed because it is too large Load Diff

View File

@ -1,104 +0,0 @@
diff --git a/src/Stack/Coverage.hs b/src/Stack/Coverage.hs
index d95fa332..f80e121a 100644
--- a/src/Stack/Coverage.hs
+++ b/src/Stack/Coverage.hs
@@ -235,7 +235,7 @@ generateHpcReportForTargets opts tixFiles targetNames = do
case nc of
CTest testName ->
liftM (pkgPath </>) $ parseRelFile (T.unpack testName ++ "/" ++ T.unpack testName ++ ".tix")
- _ -> fail $
+ _ -> liftIO $ fail $
"Can't specify anything except test-suites as hpc report targets (" ++
packageNameString name ++
" is used with a non test-suite target)"
diff --git a/src/Stack/Package.hs b/src/Stack/Package.hs
index b69337ce..08eb9b9f 100644
--- a/src/Stack/Package.hs
+++ b/src/Stack/Package.hs
@@ -463,7 +463,7 @@ makeObjectFilePathFromC
makeObjectFilePathFromC cabalDir namedComponent distDir cFilePath = do
relCFilePath <- stripProperPrefix cabalDir cFilePath
relOFilePath <-
- parseRelFile (replaceExtension (toFilePath relCFilePath) "o")
+ parseRelFile (System.FilePath.replaceExtension (toFilePath relCFilePath) "o")
return (componentOutputDir namedComponent distDir </> relOFilePath)
-- | Make the global autogen dir if Cabal version is new enough.
diff --git a/src/Stack/Script.hs b/src/Stack/Script.hs
index c63c9f62..70257be1 100644
--- a/src/Stack/Script.hs
+++ b/src/Stack/Script.hs
@@ -172,8 +172,8 @@ scriptCmd opts = do
toExeName fp =
if osIsWindows
- then replaceExtension fp "exe"
- else dropExtension fp
+ then System.FilePath.replaceExtension fp "exe"
+ else System.FilePath.dropExtension fp
getPackagesFromImports
:: FilePath -- ^ script filename
diff --git a/src/Stack/Setup.hs b/src/Stack/Setup.hs
index 8bbfc45c..5c5b028c 100644
--- a/src/Stack/Setup.hs
+++ b/src/Stack/Setup.hs
@@ -876,7 +876,7 @@ buildGhcFromSource getSetupInfo' installed (CompilerRepository url) commitId fla
(_,files) <- listDir (cwd </> bindistPath)
let
isBindist p = "ghc-" `isPrefixOf` (toFilePath (filename p))
- && fileExtension (filename p) == ".xz"
+ && (maybe "" id (fileExtension (filename p))) == ".xz"
mbindist = filter isBindist files
case mbindist of
[bindist] -> do
diff --git a/src/Stack/Storage/Project.hs b/src/Stack/Storage/Project.hs
index dc5318d8..984e6259 100644
--- a/src/Stack/Storage/Project.hs
+++ b/src/Stack/Storage/Project.hs
@@ -12,6 +12,9 @@
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-identities #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE StandaloneDeriving #-}
+
-- | Work with SQLite database used for caches across a single project.
module Stack.Storage.Project
( initProjectStorage
diff --git a/src/Stack/Storage/User.hs b/src/Stack/Storage/User.hs
index 3845b094..09695344 100644
--- a/src/Stack/Storage/User.hs
+++ b/src/Stack/Storage/User.hs
@@ -12,6 +12,9 @@
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-unused-top-binds -Wno-identities #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE StandaloneDeriving #-}
+
-- | Work with SQLite database used for caches across an entire user account.
module Stack.Storage.User
( initUserStorage
diff --git a/src/Stack/Types/Config.hs b/src/Stack/Types/Config.hs
index a5cc22b5..a329d353 100644
--- a/src/Stack/Types/Config.hs
+++ b/src/Stack/Types/Config.hs
@@ -406,7 +406,7 @@ instance FromJSON CabalConfigKey where
instance FromJSONKey CabalConfigKey where
fromJSONKey = FromJSONKeyTextParser parseCabalConfigKey
-parseCabalConfigKey :: Monad m => Text -> m CabalConfigKey
+parseCabalConfigKey :: MonadFail m => Text -> m CabalConfigKey
parseCabalConfigKey "$targets" = pure CCKTargets
parseCabalConfigKey "$locals" = pure CCKLocals
parseCabalConfigKey "$everything" = pure CCKEverything
@@ -974,7 +974,7 @@ parseConfigMonoidObject rootDir obj = do
return ConfigMonoid {..}
where
- handleExplicitSetupDep :: Monad m => (Text, Bool) -> m (Maybe PackageName, Bool)
+ handleExplicitSetupDep :: MonadFail m => (Text, Bool) -> m (Maybe PackageName, Bool)
handleExplicitSetupDep (name', b) = do
name <-
if name' == "*"

View File

@ -6,7 +6,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "mirror://sourceforge/tcllib/bwidget-${version}.tar.gz";
sha256 = "0knlnpmwam74v0qa1h9gg4f32vzzz7ays2wbslflf51ilg7nw6jk";
sha256 = "0wm6hk3rnqhnn2cyw24drqwbfnysp6jyfi8lc1vih5k704a955lf";
};
dontBuild = true;

View File

@ -1,4 +1,5 @@
{ stdenv, lib, fetchFromGitHub, autoreconfHook, perl, pkgconfig, flux, zlib
{ stdenv, lib, fetchFromGitHub, fetchpatch
, autoreconfHook, perl, pkgconfig, flux, zlib
, libjpeg, freetype, libpng, giflib
, enableX11 ? true, xorg
, enableSDL ? true, SDL }:
@ -14,6 +15,16 @@ stdenv.mkDerivation rec {
sha256 = "0bs3yzb7hy3mgydrj8ycg7pllrd2b6j0gxj596inyr7ihssr3i0y";
};
patches = [
# Fixes build in "davinci" with glibc >= 2.28
# The "davinci" module is only enabled on 32-bit arm.
# https://github.com/deniskropp/DirectFB/pull/17
(fetchpatch {
url = "https://github.com/deniskropp/DirectFB/commit/3a236241bbec3f15b012b6f0dbe94353d8094557.patch";
sha256 = "0rj3gv0zlb225sqjz04p4yagy4xacf3210aa8vra8i1f0fv0w4kw";
})
];
nativeBuildInputs = [ autoreconfHook perl pkgconfig flux ];
buildInputs = [ zlib libjpeg freetype giflib libpng ]

View File

@ -4,6 +4,8 @@ stdenv.mkDerivation rec {
pname = "fmt";
version = "6.2.0";
outputs = [ "out" "dev" ];
src = fetchFromGitHub {
owner = "fmtlib";
repo = "fmt";
@ -19,9 +21,14 @@ stdenv.mkDerivation rec {
url = "https://github.com/fmtlib/fmt/commit/7d01859ef16e6b65bc023ad8bebfedecb088bf81.patch";
sha256 = "vdttRGgdltabeRAs4/z0BNtW2dLOhCxtXQFGVFKpEG0=";
})
];
outputs = [ "out" "dev" ];
# Fix paths in pkg-config file
# https://github.com/fmtlib/fmt/pull/1657
(fetchpatch {
url = "https://github.com/fmtlib/fmt/commit/78f041ab5b40a1145ba686aeb8013e8788b08cd2.patch";
sha256 = "hjE6Q/ubA4UhvuJXgcsA3wiGoDK031P19njQRL9JF8M=";
})
];
nativeBuildInputs = [ cmake ];

View File

@ -1,35 +1,60 @@
{ stdenv, fetchFromGitHub, fetchpatch, cmake, pkgconfig
, boost, openssl, zlib, libsodium, olm, nlohmann_json }:
{ stdenv
, fetchFromGitHub
, fetchpatch
, cmake
, pkgconfig
, boost17x
, openssl
, zlib
, libsodium
, olm
, spdlog
, nlohmann_json
}:
stdenv.mkDerivation rec {
pname = "mtxclient";
version = "0.2.1";
version = "0.3.0";
src = fetchFromGitHub {
owner = "Nheko-Reborn";
repo = "mtxclient";
rev = "v${version}";
sha256 = "0pycznrvj57ff6gbwfn1xj943d2dr4vadl79hii1z16gn0nzxpmj";
sha256 = "0vf5xmn6yfi5lvskfgrdmnalvclzrapcrml92bj9qaa8vq8mfsf2";
};
cmakeFlags = [
# Network requiring tests can't be disabled individually:
# https://github.com/Nheko-Reborn/mtxclient/issues/22
"-DBUILD_LIB_TESTS=OFF"
"-DBUILD_LIB_EXAMPLES=OFF"
"-Dnlohmann_json_DIR=${nlohmann_json}/lib/cmake/nlohmann_json"
# Can be removed once either https://github.com/NixOS/nixpkgs/pull/85254 or
# https://github.com/NixOS/nixpkgs/pull/73940 are merged
"-DBoost_NO_BOOST_CMAKE=TRUE"
];
nativeBuildInputs = [ cmake pkgconfig ];
buildInputs = [ boost openssl zlib libsodium olm ];
nativeBuildInputs = [
cmake
pkgconfig
];
buildInputs = [
spdlog
boost17x
openssl
zlib
libsodium
olm
];
meta = with stdenv.lib; {
description = "Client API library for Matrix, built on top of Boost.Asio";
homepage = "https://github.com/Nheko-Reborn/mtxclient";
license = licenses.mit;
maintainers = with maintainers; [ fpletz ];
platforms = platforms.unix;
# As of 2019-06-30, all of the dependencies are available on macOS but the
# package itself does not build.
broken = stdenv.isDarwin;
platforms = platforms.all;
# Should be fixable if a higher clang version is used, see:
# https://github.com/NixOS/nixpkgs/pull/85922#issuecomment-619287177
broken = stdenv.targetPlatform.isDarwin;
};
}

View File

@ -0,0 +1,30 @@
{ stdenv
, fetchFromGitHub
, cmake
}:
stdenv.mkDerivation rec {
pname = "tweeny";
version = "3.1.0";
src = fetchFromGitHub {
owner = "mobius3";
repo = "tweeny";
rev = "v${version}";
sha256 = "0qvby57g9a2m4afd1mgard3k7nm4ynbvali7nzm1qn3ygdmqid7n";
};
nativeBuildInputs = [
cmake
];
doCheck = true;
meta = with stdenv.lib; {
description = "A modern C++ tweening library";
license = licenses.mit;
homepage = "http://mobius3.github.io/tweeny";
maintainers = [ maintainers.doronbehar ];
platforms = with platforms; darwin ++ linux;
};
}

View File

@ -1,19 +1,30 @@
{ lib, stdenv, fetchurl, gtest, pkgconfig, doxygen, graphviz }:
{ lib, stdenv, fetchurl, fetchpatch, cmake, gtest }:
stdenv.mkDerivation rec {
pname = "uriparser";
version = "0.9.1";
version = "0.9.3";
# Release tarball differs from source tarball
src = fetchurl {
url = "https://github.com/uriparser/uriparser/releases/download/${pname}-${version}/${pname}-${version}.tar.bz2";
sha256 = "1gisi7h8hd6mswbiaaa3s25bnb77xf37pzrmjy63rcdpwcyqy93m";
sha256 = "13z234jdaqs9jj7i66gcv4q1rgsypjz6cighnlm1j4g80pdlmbr8";
};
nativeBuildInputs = [ pkgconfig doxygen graphviz ];
buildInputs = lib.optional doCheck gtest;
configureFlags = lib.optional (!doCheck) "--disable-tests";
patches = [
# fixes tests
(fetchpatch {
url = "https://github.com/uriparser/uriparser/commit/f870e6c68696a6018702caa5c8a2feba9b0f99fa.diff";
sha256 = "1nd6bhys9hwy6ippa42vm95zhw6hldm1s4xbdzmdjswc96as1ff5";
})
];
nativeBuildInputs = [ cmake ];
cmakeFlags = [
"-DURIPARSER_BUILD_DOCS=OFF"
];
checkInputs = [ gtest ];
doCheck = stdenv.targetPlatform.system == stdenv.hostPlatform.system;
meta = with stdenv.lib; {

View File

@ -125,5 +125,8 @@ nodePackages // {
thelounge = nodePackages.thelounge.override {
buildInputs = [ nodePackages.node-pre-gyp ];
postInstall = ''
echo /var/lib/thelounge > $out/lib/node_modules/thelounge/.thelounge_home
'';
};
}

View File

@ -1,33 +0,0 @@
{stdenv, buildOcaml, fetchurl, bin_prot_p4, comparelib, core_p4, custom_printf,
fieldslib_p4, pa_bench, pa_ounit, pipebang, pa_test, textutils_p4, re2_p4, sexplib_p4}:
buildOcaml rec {
name = "core_extended";
version = "112.24.00";
minimumSupportedOcamlVersion = "4.02";
src = fetchurl {
url = "https://github.com/janestreet/core_extended/archive/${version}.tar.gz";
sha256 = "f87b0661b6c2cfb545ec61d1cb2ab1b9c4967b6ac14e651de41d3a6fb7f0f1e3";
};
preConfigure = stdenv.lib.optionalString stdenv.isLinux ''
patch lib/extended_unix_stubs.c <<EOF
0a1
> #define _LINUX_QUOTA_VERSION 2
EOF
'';
hasSharedObjects = true;
buildInputs = [ pa_bench pa_test pa_ounit ];
propagatedBuildInputs = [bin_prot_p4 comparelib core_p4 custom_printf fieldslib_p4
pipebang textutils_p4 re2_p4 sexplib_p4 ];
meta = with stdenv.lib; {
homepage = "https://github.com/janestreet/core_extended";
description = "Jane Street Capital's standard library overlay";
license = licenses.asl20;
maintainers = [ maintainers.ericbmerritt ];
};
}

View File

@ -1,28 +0,0 @@
{stdenv, buildOcamlJane,
core,
bin_prot, fieldslib, sexplib, typerep, variantslib,
ppx_assert, ppx_bench, ppx_driver, ppx_expect, ppx_inline_test, ppx_jane,
re2, textutils}:
buildOcamlJane {
name = "core_extended";
hash = "1j4ipcn741j8w3h4gpv5sygjzg6b5g6gc2jcrr4n0jyn5dq8b0p5";
propagatedBuildInputs =
[ core bin_prot fieldslib sexplib typerep variantslib
ppx_assert ppx_bench ppx_driver ppx_expect ppx_inline_test ppx_jane
re2 textutils ];
patchPhase = stdenv.lib.optionalString stdenv.isLinux ''
patch src/extended_unix_stubs.c <<EOF
0a1
> #define _LINUX_QUOTA_VERSION 2
EOF
'';
meta = with stdenv.lib; {
homepage = "https://github.com/janestreet/core_extended";
description = "Jane Street Capital's standard library overlay";
license = licenses.asl20;
maintainers = [ maintainers.maurer maintainers.ericbmerritt ];
};
}

View File

@ -3,6 +3,7 @@
}:
buildDunePackage rec {
minimumOCamlVersion = "4.03";
pname = "uri";
version = "3.1.0";

View File

@ -1,51 +0,0 @@
{ stdenv, fetchzip, ocaml, findlib, ocamlbuild, re, stringext, ounit
, sexplib, ppx_sexp_conv
, legacyVersion ? false
, sexplib_p4
}:
if !stdenv.lib.versionAtLeast ocaml.version "4"
|| legacyVersion && stdenv.lib.versionAtLeast ocaml.version "4.03"
then throw "uri${stdenv.lib.optionalString legacyVersion "_p4"} is not available for OCaml ${ocaml.version}" else
with
if legacyVersion
then {
version = "1.9.1";
sha256 = "0v3jxqgyi4kj92r3x83rszfpnvvzy9lyb913basch4q64yka3w85";
} else {
version = "1.9.2";
sha256 = "137pg8j654x7r0d1664iy2zp3l82nki1kkh921lwdrwc5qqdl6jx";
};
stdenv.mkDerivation {
name = "ocaml${ocaml.version}-uri-${version}";
src = fetchzip {
url = "https://github.com/mirage/ocaml-uri/archive/v${version}.tar.gz";
inherit sha256;
};
buildInputs = [ ocaml findlib ocamlbuild ounit ]
++ stdenv.lib.optional (!legacyVersion) ppx_sexp_conv;
propagatedBuildInputs = [ re (if legacyVersion then sexplib_p4 else sexplib) stringext ];
configurePhase = "ocaml setup.ml -configure --prefix $out --enable-tests";
buildPhase = ''
ocaml setup.ml -build
ocaml setup.ml -doc
'';
doCheck = true;
checkPhase = "ocaml setup.ml -test";
installPhase = "ocaml setup.ml -install";
createFindlibDestdir = true;
meta = {
homepage = "https://github.com/mirage/ocaml-uri";
platforms = ocaml.meta.platforms or [];
description = "RFC3986 URI parsing library for OCaml";
license = stdenv.lib.licenses.isc;
maintainers = with stdenv.lib.maintainers; [ vbgl ];
};
}

View File

@ -17,13 +17,13 @@
buildPythonPackage rec {
pname = "azure-identity";
version = "1.3.0";
version = "1.3.1";
disabled = isPy38;
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "17fa904e0447fd2a2dc19909379edb769b05656dbaf4863b8c4fdfb2bb54350c";
sha256 = "5a59c36b4b05bdaec455c390feda71b6495fc828246593404351b9a41c2e877a";
};
propagatedBuildInputs = [

View File

@ -0,0 +1,39 @@
{ lib
, buildPythonPackage
, fetchPypi
, python
, isPy3k
, azure-core
, msrest
, msrestazure
}:
buildPythonPackage rec {
pname = "azure-keyvault-certificates";
version = "4.1.0";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "069l6m80rq4smyqbrmjb2w18wxxg49xi2yrf1wsxpq8r0r45cksl";
};
propagatedBuildInputs = [
azure-core
msrest
msrestazure
];
pythonNamespaces = [ "azure.keyvault" ];
# has no tests
doCheck = false;
pythonImportsCheck = [ "azure.keyvault.certificates" ];
meta = with lib; {
description = "Microsoft Azure Key Vault Certificates Client Library for Python";
homepage = "https://github.com/Azure/azure-sdk-for-python";
license = licenses.mit;
maintainers = with maintainers; [ jonringer ];
};
}

View File

@ -1,20 +1,22 @@
{ lib, buildPythonPackage, isPy27, fetchPypi
, azure-keyvault-certificates
, azure-keyvault-keys
, azure-keyvault-secrets
}:
buildPythonPackage rec {
pname = "azure-keyvault";
version = "4.0.0";
version = "4.1.0";
disabled = isPy27;
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "e85f5bd6cb4f10b3248b99bbf02e3acc6371d366846897027d4153f18025a2d7";
sha256 = "69002a546921a8290eb54d9a3805cfc515c321bc1d4c0bfcfb463620245eca40";
};
propagatedBuildInputs = [
azure-keyvault-certificates
azure-keyvault-keys
azure-keyvault-secrets
];

View File

@ -10,12 +10,12 @@
buildPythonPackage rec {
pname = "azure-mgmt-advisor";
version = "3.0.0";
version = "4.0.0";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "c52a4cf91d736c0ecdcb4d555e3b7713ff892343f610e7d65c63549edb98c221";
sha256 = "1ecea7a9dc48c099c06aab68aace7fdbded91a5522932882b1707c29fa055054";
};
propagatedBuildInputs = [

View File

@ -5,13 +5,13 @@
}:
buildPythonPackage rec {
version = "0.1.0";
version = "0.2.0";
pname = "azure-mgmt-apimanagement";
disabled = isPy27;
src = fetchPypi {
inherit pname version;
sha256 = "06bqqkn5mx127x1z7ycm6rl8ajxlrmrm2kcdpgkbl4baii1x6iax";
sha256 = "790f01c0b32583706b8b8c59667c0f5a51cd70444eee76474e23a598911e1d72";
extension = "zip";
};

View File

@ -11,12 +11,12 @@
buildPythonPackage rec {
pname = "azure-mgmt-applicationinsights";
version = "0.2.0";
version = "0.3.0";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "1hm6s7vym1y072jqypjgbhps8lza1d5kb8qcpyxnw4zsmsvshdp5";
sha256 = "3c788a54db4fbca1a8850151462ec1471ff59c86b3a10d6082952bbdaa7e6651";
};
propagatedBuildInputs = [

View File

@ -8,12 +8,12 @@
buildPythonPackage rec {
pname = "azure-mgmt-cognitiveservices";
version = "6.0.0";
version = "6.1.0";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "d03641336f4b2ec561112655c93ee80bc28d8e8daa45a57abc36169bd19c07a0";
sha256 = "e0c4bbe656ababb942d708ee04f3f3305a2023e322a8b3fb1d8503aa682f59c4";
};
propagatedBuildInputs = [

View File

@ -10,12 +10,12 @@
buildPythonPackage rec {
pname = "azure-mgmt-containerservice";
version = "9.0.0";
version = "9.0.1";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "6f05948bbd19ceb894f46f037b77c54116183364a671e180c007b5737c8d4590";
sha256 = "7e4459679bdba4aa67a4b5848e63d94e965a304a7418ef7607eb7a9ce295d886";
};
propagatedBuildInputs = [

View File

@ -0,0 +1,36 @@
{ pkgs
, buildPythonPackage
, fetchPypi
, python
, azure-core
, isPy3k
}:
buildPythonPackage rec {
version = "1.0.0";
pname = "azure-mgmt-core";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "0pm565v05480f672l0n8z2sg6zk6iqyi91n0dhscibhdl54sy3si";
};
propagatedBuildInputs = [
azure-core
];
pythonNamespaces = "azure.mgmt";
# not included
doCheck = false;
pythonImportsCheck = [ "azure.mgmt.core" "azure.core" ];
meta = with pkgs.lib; {
description = "Microsoft Azure Management Core Library for Python";
homepage = "https://github.com/Azure/azure-sdk-for-python";
license = licenses.mit;
maintainers = with maintainers; [ jonringer ];
};
}

View File

@ -10,12 +10,12 @@
buildPythonPackage rec {
pname = "azure-mgmt-cosmosdb";
version = "0.12.0";
version = "0.13.0";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "07c0hr7nha9789x1wz0ndca0sr0zscq63m9vd8pm1c6y0ss4iyn5";
sha256 = "e83d21462f9d5b02e90f5590c4247ab73e0ff85fc4ac1fba32be119a15b10c98";
};
propagatedBuildInputs = [

View File

@ -11,12 +11,12 @@
buildPythonPackage rec {
pname = "azure-mgmt-loganalytics";
version = "0.2.0";
version = "0.5.0";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "c7315ff0ee4d618fb38dca68548ef4023a7a20ce00efe27eb2105a5426237d86";
sha256 = "16f4c4f676ea718b7e1c59bd9a516fcfc796f1aff844b183a7ce9afe69fb214d";
};
propagatedBuildInputs = [

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