Merge branch 'master' into atlas-remove
This commit is contained in:
commit
45a4adb1b3
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
@ -47,6 +47,9 @@
|
||||
/nixos/doc/manual/man-nixos-option.xml @nbp
|
||||
/nixos/modules/installer/tools/nixos-option.sh @nbp
|
||||
|
||||
# NixOS modules
|
||||
/nixos/modules @Infinisil
|
||||
|
||||
# Python-related code and docs
|
||||
/maintainers/scripts/update-python-libraries @FRidh
|
||||
/pkgs/top-level/python-packages.nix @FRidh
|
||||
|
@ -19,6 +19,7 @@
|
||||
<xi:include href="java.xml" />
|
||||
<xi:include href="lua.xml" />
|
||||
<xi:include href="node.section.xml" />
|
||||
<xi:include href="ocaml.xml" />
|
||||
<xi:include href="perl.xml" />
|
||||
<xi:include href="python.section.xml" />
|
||||
<xi:include href="qt.xml" />
|
||||
|
101
doc/languages-frameworks/ocaml.xml
Normal file
101
doc/languages-frameworks/ocaml.xml
Normal file
@ -0,0 +1,101 @@
|
||||
<section xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xml:id="sec-language-ocaml">
|
||||
<title>OCaml</title>
|
||||
|
||||
<para>
|
||||
OCaml libraries should be installed in
|
||||
<literal>$(out)/lib/ocaml/${ocaml.version}/site-lib/</literal>. Such
|
||||
directories are automatically added to the <literal>$OCAMLPATH</literal>
|
||||
environment variable when building another package that depends on them
|
||||
or when opening a <literal>nix-shell</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Given that most of the OCaml ecosystem is now built with dune,
|
||||
nixpkgs includes a convenience build support function called
|
||||
<literal>buildDunePackage</literal> that will build an OCaml package
|
||||
using dune, OCaml and findlib and any additional dependencies provided
|
||||
as <literal>buildInputs</literal> or <literal>propagatedBuildInputs</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Here is a simple package example. It defines an (optional) attribute
|
||||
<literal>minimumOCamlVersion</literal> that will be used to throw a
|
||||
descriptive evaluation error if building with an older OCaml is attempted.
|
||||
It uses the <literal>fetchFromGitHub</literal> fetcher to get its source.
|
||||
It sets the <literal>doCheck</literal> (optional) attribute to
|
||||
<literal>true</literal> which means that tests will be run with
|
||||
<literal>dune runtest -p angstrom</literal> after the build
|
||||
(<literal>dune build -p angstrom</literal>) is complete.
|
||||
It uses <literal>alcotest</literal> as a build input (because it is needed
|
||||
to run the tests) and <literal>bigstringaf</literal> and
|
||||
<literal>result</literal> as propagated build inputs (thus they will also
|
||||
be available to libraries depending on this library).
|
||||
The library will be installed using the <literal>angstrom.install</literal>
|
||||
file that dune generates.
|
||||
</para>
|
||||
|
||||
<programlisting>
|
||||
{ stdenv, fetchFromGitHub, buildDunePackage, alcotest, result, bigstringaf }:
|
||||
|
||||
buildDunePackage rec {
|
||||
pname = "angstrom";
|
||||
version = "0.10.0";
|
||||
|
||||
minimumOCamlVersion = "4.03";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "inhabitedtype";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "0lh6024yf9ds0nh9i93r9m6p5psi8nvrqxl5x7jwl13zb0r9xfpw";
|
||||
};
|
||||
|
||||
buildInputs = [ alcotest ];
|
||||
propagatedBuildInputs = [ bigstringaf result ];
|
||||
doCheck = true;
|
||||
|
||||
meta = {
|
||||
homepage = https://github.com/inhabitedtype/angstrom;
|
||||
description = "OCaml parser combinators built for speed and memory efficiency";
|
||||
license = stdenv.lib.licenses.bsd3;
|
||||
maintainers = with stdenv.lib.maintainers; [ sternenseemann ];
|
||||
};
|
||||
}
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
Here is a second example, this time using a source archive generated with
|
||||
<literal>dune-release</literal>. The <literal>unpackCmd</literal>
|
||||
redefinition is necessary to be able to unpack the kind of tarball that
|
||||
<literal>dune-release</literal> generates. This library does not depend
|
||||
on any other OCaml library and no tests are run after building it.
|
||||
</para>
|
||||
|
||||
<programlisting>
|
||||
{ stdenv, fetchurl, buildDunePackage }:
|
||||
|
||||
buildDunePackage rec {
|
||||
pname = "wtf8";
|
||||
version = "1.0.1";
|
||||
|
||||
minimumOCamlVersion = "4.01";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/flowtype/ocaml-${pname}/releases/download/v${version}/${pname}-${version}.tbz";
|
||||
sha256 = "1msg3vycd3k8qqj61sc23qks541cxpb97vrnrvrhjnqxsqnh6ygq";
|
||||
};
|
||||
|
||||
unpackCmd = "tar xjf $src";
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = https://github.com/flowtype/ocaml-wtf8;
|
||||
description = "WTF-8 is a superset of UTF-8 that allows unpaired surrogates.";
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.eqyiel ];
|
||||
};
|
||||
}
|
||||
</programlisting>
|
||||
|
||||
</section>
|
@ -484,11 +484,11 @@ and in this case the `python35` interpreter is automatically used.
|
||||
### Interpreters
|
||||
|
||||
Versions 2.7, 3.5, 3.6 and 3.7 of the CPython interpreter are available as
|
||||
respectively `python27`, `python35` and `python36`. The PyPy interpreter
|
||||
is available as `pypy`. The aliases `python2` and `python3` correspond to respectively `python27` and
|
||||
`python35`. The default interpreter, `python`, maps to `python2`.
|
||||
The Nix expressions for the interpreters can be found in
|
||||
`pkgs/development/interpreters/python`.
|
||||
respectively `python27`, `python35`, `python36`, and `python37`. The PyPy
|
||||
interpreter is available as `pypy`. The aliases `python2` and `python3`
|
||||
correspond to respectively `python27` and `python36`. The default interpreter,
|
||||
`python`, maps to `python2`. The Nix expressions for the interpreters can be
|
||||
found in `pkgs/development/interpreters/python`.
|
||||
|
||||
All packages depending on any Python interpreter get appended
|
||||
`out/{python.sitePackages}` to `$PYTHONPATH` if such directory
|
||||
|
55
doc/meta.xml
55
doc/meta.xml
@ -250,6 +250,61 @@ meta.platforms = stdenv.lib.platforms.linux;
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>tests</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
An attribute set with as values tests. A test is a derivation, which
|
||||
builds successfully when the test passes, and fails to build otherwise. A
|
||||
derivation that is a test requires some <literal>meta</literal> elements
|
||||
to be defined: <literal>needsVMSupport</literal> (automatically filled-in
|
||||
for NixOS tests) and <literal>timeout</literal>.
|
||||
</para>
|
||||
<para>
|
||||
The NixOS tests are available as <literal>nixosTests</literal> in
|
||||
parameters of derivations. For instance, the OpenSMTPD derivation
|
||||
includes lines similar to:
|
||||
<programlisting>
|
||||
{ /* ... */, nixosTests }:
|
||||
{
|
||||
# ...
|
||||
meta.tests = {
|
||||
basic-functionality-and-dovecot-integration = nixosTests.opensmtpd;
|
||||
};
|
||||
}
|
||||
</programlisting>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>timeout</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A timeout (in seconds) for building the derivation. If the derivation
|
||||
takes longer than this time to build, it can fail due to breaking the
|
||||
timeout. However, all computers do not have the same computing power,
|
||||
hence some builders may decide to apply a multiplicative factor to this
|
||||
value. When filling this value in, try to keep it approximately
|
||||
consistent with other values already present in
|
||||
<literal>nixpkgs</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>needsVMSupport</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A boolan that states whether the derivation requires build-time support
|
||||
for Virtual Machine to build successfully.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>hydraPlatforms</varname>
|
||||
|
@ -147,8 +147,8 @@ $ git add pkgs/development/libraries/libfoo/default.nix</screen>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
You can use <command>nix-prefetch-url</command> (or similar
|
||||
nix-prefetch-git, etc) <replaceable>url</replaceable> to get the
|
||||
You can use <command>nix-prefetch-url</command>
|
||||
<replaceable>url</replaceable> to get the
|
||||
SHA-256 hash of source distributions. There are similar commands as
|
||||
<command>nix-prefetch-git</command> and
|
||||
<command>nix-prefetch-hg</command> available in
|
||||
|
@ -618,7 +618,7 @@ let f(h, h + 1, i) = i + h
|
||||
</variablelist>
|
||||
|
||||
<variablelist>
|
||||
<title>Variables affecting build properties</title>
|
||||
<title>Attributes affecting build properties</title>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>enableParallelBuilding</varname>
|
||||
@ -637,21 +637,6 @@ let f(h, h + 1, i) = i + h
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>preferLocalBuild</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
If set, specifies that the package is so lightweight in terms of build
|
||||
operations (e.g. write a text file from a Nix string to the store) that
|
||||
there's no need to look for it in binary caches -- it's faster to just
|
||||
build it locally. It also tells Hydra and other facilities that this
|
||||
package doesn't need to be exported in binary caches (noone would use it,
|
||||
after all).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<variablelist>
|
||||
|
@ -13,6 +13,11 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
|
||||
* add it to this list. The URL mentioned above is a good source for inspiration.
|
||||
*/
|
||||
|
||||
abstyles = spdx {
|
||||
spdxId = "Abstyles";
|
||||
fullName = "Abstyles License";
|
||||
};
|
||||
|
||||
afl21 = spdx {
|
||||
spdxId = "AFL-2.1";
|
||||
fullName = "Academic Free License v2.1";
|
||||
|
@ -73,7 +73,7 @@ rec {
|
||||
# Get the commit id of a git repo
|
||||
# Example: commitIdFromGitRepo <nixpkgs/.git>
|
||||
commitIdFromGitRepo =
|
||||
let readCommitFromFile = path: file:
|
||||
let readCommitFromFile = file: path:
|
||||
with builtins;
|
||||
let fileName = toString path + "/" + file;
|
||||
packedRefsName = toString path + "/packed-refs";
|
||||
@ -85,7 +85,7 @@ rec {
|
||||
matchRef = match "^ref: (.*)$" fileContent;
|
||||
in if isNull matchRef
|
||||
then fileContent
|
||||
else readCommitFromFile path (lib.head matchRef)
|
||||
else readCommitFromFile (lib.head matchRef) path
|
||||
# Sometimes, the file isn't there at all and has been packed away in the
|
||||
# packed-refs file, so we have to grep through it:
|
||||
else if lib.pathExists packedRefsName
|
||||
@ -96,7 +96,7 @@ rec {
|
||||
then throw ("Could not find " + file + " in " + packedRefsName)
|
||||
else lib.head matchRef
|
||||
else throw ("Not a .git directory: " + path);
|
||||
in lib.flip readCommitFromFile "HEAD";
|
||||
in readCommitFromFile "HEAD";
|
||||
|
||||
pathHasContext = builtins.hasContext or (lib.hasPrefix builtins.storeDir);
|
||||
|
||||
|
@ -169,6 +169,9 @@ rec {
|
||||
# s32 = sign 32 4294967296;
|
||||
};
|
||||
|
||||
# Alias of u16 for a port number
|
||||
port = ints.u16;
|
||||
|
||||
float = mkOptionType rec {
|
||||
name = "float";
|
||||
description = "floating point number";
|
||||
|
@ -624,6 +624,11 @@
|
||||
github = "bramd";
|
||||
name = "Bram Duvigneau";
|
||||
};
|
||||
braydenjw = {
|
||||
email = "nixpkgs@willenborg.ca";
|
||||
github = "braydenjw";
|
||||
name = "Brayden Willenborg";
|
||||
};
|
||||
brian-dawn = {
|
||||
email = "brian.t.dawn@gmail.com";
|
||||
github = "brian-dawn";
|
||||
@ -962,6 +967,11 @@
|
||||
github = "danielfullmer";
|
||||
name = "Daniel Fullmer";
|
||||
};
|
||||
das-g = {
|
||||
email = "nixpkgs@raphael.dasgupta.ch";
|
||||
github = "das-g";
|
||||
name = "Raphael Das Gupta";
|
||||
};
|
||||
das_j = {
|
||||
email = "janne@hess.ooo";
|
||||
github = "dasJ";
|
||||
@ -1744,6 +1754,11 @@
|
||||
email = "t@larkery.com";
|
||||
name = "Tom Hinton";
|
||||
};
|
||||
hlolli = {
|
||||
email = "hlolli@gmail.com";
|
||||
github = "hlolli";
|
||||
name = "Hlodver Sigurdsson";
|
||||
};
|
||||
hodapp = {
|
||||
email = "hodapp87@gmail.com";
|
||||
github = "Hodapp87";
|
||||
@ -2224,6 +2239,11 @@
|
||||
github = "knedlsepp";
|
||||
name = "Josef Kemetmüller";
|
||||
};
|
||||
knl = {
|
||||
email = "nikola@knezevic.co";
|
||||
github = "knl";
|
||||
name = "Nikola Knežević";
|
||||
};
|
||||
konimex = {
|
||||
email = "herdiansyah@netc.eu";
|
||||
github = "konimex";
|
||||
@ -2680,6 +2700,11 @@
|
||||
github = "mgdelacroix";
|
||||
name = "Miguel de la Cruz";
|
||||
};
|
||||
mgregoire = {
|
||||
email = "gregoire@martinache.net";
|
||||
github = "M-Gregoire";
|
||||
name = "Gregoire Martinache";
|
||||
};
|
||||
mgttlinger = {
|
||||
email = "megoettlinger@gmail.com";
|
||||
github = "mgttlinger";
|
||||
@ -3805,6 +3830,11 @@
|
||||
github = "scolobb";
|
||||
name = "Sergiu Ivanov";
|
||||
};
|
||||
screendriver = {
|
||||
email = "nix@echooff.de";
|
||||
github = "screendriver";
|
||||
name = "Christian Rackerseder";
|
||||
};
|
||||
Scriptkiddi = {
|
||||
email = "nixos@scriptkiddi.de";
|
||||
github = "scriptkiddi";
|
||||
@ -3988,6 +4018,11 @@
|
||||
github = "spacefrogg";
|
||||
name = "Michael Raitza";
|
||||
};
|
||||
spacekookie = {
|
||||
email = "kookie@spacekookie.de";
|
||||
github = "spacekookie";
|
||||
name = "Katharina Fey";
|
||||
};
|
||||
spencerjanssen = {
|
||||
email = "spencerjanssen@gmail.com";
|
||||
github = "spencerjanssen";
|
||||
|
@ -106,7 +106,7 @@
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<varlistentry xml:id='types.ints.ux'>
|
||||
<term>
|
||||
<varname>types.ints.{u8, u16, u32}</varname>
|
||||
</term>
|
||||
@ -131,6 +131,17 @@
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>types.port</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A port number. This type is an alias to
|
||||
<link linkend='types.ints.ux'><varname>types.ints.u16</varname></link>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>
|
||||
|
@ -97,18 +97,18 @@
|
||||
start org.nixos.nix-daemon</command>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The Syncthing state and configuration data has been moved from
|
||||
<varname>services.syncthing.dataDir</varname> to the newly defined
|
||||
<varname>services.syncthing.configDir</varname>, which default to
|
||||
<literal>/var/lib/syncthing/.config/syncthing</literal>.
|
||||
This change makes possible to share synced directories using ACLs
|
||||
without Syncthing resetting the permission on every start.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The Syncthing state and configuration data has been moved from
|
||||
<varname>services.syncthing.dataDir</varname> to the newly defined
|
||||
<varname>services.syncthing.configDir</varname>, which default to
|
||||
<literal>/var/lib/syncthing/.config/syncthing</literal>.
|
||||
This change makes possible to share synced directories using ACLs
|
||||
without Syncthing resetting the permission on every start.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Package <varname>rabbitmq_server</varname> is renamed to
|
||||
@ -197,6 +197,13 @@
|
||||
these changes. Please review http://lucene.apache.org/solr/ carefully before upgrading.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Package <literal>ckb</literal> is renamed to <literal>ckb-next</literal>,
|
||||
and options <literal>hardware.ckb.*</literal> are renamed to
|
||||
<literal>hardware.ckb-next.*</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
@ -224,6 +231,19 @@
|
||||
supports loading TrueCrypt volumes.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The Kubernetes DNS addons, kube-dns, has been replaced with CoreDNS.
|
||||
This change is made in accordance with Kubernetes making CoreDNS the official default
|
||||
starting from
|
||||
<link xlink:href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md#sig-cluster-lifecycle">Kubernetes v1.11</link>.
|
||||
Please beware that upgrading DNS-addon on existing clusters might induce
|
||||
minor downtime while the DNS-addon terminates and re-initializes.
|
||||
Also note that the DNS-service now runs with 2 pod replicas by default.
|
||||
The desired number of replicas can be configured using:
|
||||
<option>services.kubernetes.addons.dns.replicas</option>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
</section>
|
||||
|
@ -250,8 +250,7 @@ sub connect {
|
||||
$self->start;
|
||||
|
||||
local $SIG{ALRM} = sub { die "timed out waiting for the VM to connect\n"; };
|
||||
# 50 minutes -- increased as a test, see #49441
|
||||
alarm 3000;
|
||||
alarm 300;
|
||||
readline $self->{socket} or die "the VM quit before connecting\n";
|
||||
alarm 0;
|
||||
|
||||
|
@ -69,7 +69,9 @@ in rec {
|
||||
mkdir -p $out/coverage-data
|
||||
mv $i $out/coverage-data/$(dirname $(dirname $i))
|
||||
done
|
||||
''; # */
|
||||
'';
|
||||
|
||||
meta.needsVMSupport = true;
|
||||
};
|
||||
|
||||
|
||||
|
@ -3,17 +3,17 @@
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.hardware.ckb;
|
||||
cfg = config.hardware.ckb-next;
|
||||
|
||||
in
|
||||
{
|
||||
options.hardware.ckb = {
|
||||
options.hardware.ckb-next = {
|
||||
enable = mkEnableOption "the Corsair keyboard/mouse driver";
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.ckb;
|
||||
defaultText = "pkgs.ckb";
|
||||
default = pkgs.ckb-next;
|
||||
defaultText = "pkgs.ckb-next";
|
||||
description = ''
|
||||
The package implementing the Corsair keyboard/mouse driver.
|
||||
'';
|
||||
@ -23,12 +23,12 @@ in
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
systemd.services.ckb = {
|
||||
description = "Corsair Keyboard Daemon";
|
||||
systemd.services.ckb-next = {
|
||||
description = "Corsair Keyboards and Mice Daemon";
|
||||
wantedBy = ["multi-user.target"];
|
||||
script = "${cfg.package}/bin/ckb-daemon";
|
||||
script = "exec ${cfg.package}/bin/ckb-next-daemon";
|
||||
serviceConfig = {
|
||||
Restart = "always";
|
||||
Restart = "on-failure";
|
||||
StandardOutput = "syslog";
|
||||
};
|
||||
};
|
@ -334,6 +334,7 @@
|
||||
slurm = 307;
|
||||
kapacitor = 308;
|
||||
solr = 309;
|
||||
alerta = 310;
|
||||
|
||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||
|
||||
@ -628,6 +629,7 @@
|
||||
slurm = 307;
|
||||
kapacitor = 308;
|
||||
solr = 309;
|
||||
alerta = 310;
|
||||
|
||||
# When adding a gid, make sure it doesn't match an existing
|
||||
# uid. Users and groups with the same name should have equal
|
||||
|
@ -34,7 +34,7 @@
|
||||
./config/zram.nix
|
||||
./hardware/all-firmware.nix
|
||||
./hardware/brightnessctl.nix
|
||||
./hardware/ckb.nix
|
||||
./hardware/ckb-next.nix
|
||||
./hardware/cpu/amd-microcode.nix
|
||||
./hardware/cpu/intel-microcode.nix
|
||||
./hardware/digitalbitbox.nix
|
||||
@ -90,6 +90,7 @@
|
||||
./programs/criu.nix
|
||||
./programs/dconf.nix
|
||||
./programs/digitalbitbox/default.nix
|
||||
./programs/dmrconfig.nix
|
||||
./programs/environment.nix
|
||||
./programs/firejail.nix
|
||||
./programs/fish.nix
|
||||
@ -419,6 +420,7 @@
|
||||
./services/misc/weechat.nix
|
||||
./services/misc/xmr-stak.nix
|
||||
./services/misc/zookeeper.nix
|
||||
./services/monitoring/alerta.nix
|
||||
./services/monitoring/apcupsd.nix
|
||||
./services/monitoring/arbtt.nix
|
||||
./services/monitoring/bosun.nix
|
||||
@ -429,6 +431,7 @@
|
||||
./services/monitoring/dd-agent/dd-agent.nix
|
||||
./services/monitoring/fusion-inventory.nix
|
||||
./services/monitoring/grafana.nix
|
||||
./services/monitoring/grafana-reporter.nix
|
||||
./services/monitoring/graphite.nix
|
||||
./services/monitoring/hdaps.nix
|
||||
./services/monitoring/heapster.nix
|
||||
|
38
nixos/modules/programs/dmrconfig.nix
Normal file
38
nixos/modules/programs/dmrconfig.nix
Normal file
@ -0,0 +1,38 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.dmrconfig;
|
||||
|
||||
in {
|
||||
meta.maintainers = [ maintainers.etu ];
|
||||
|
||||
###### interface
|
||||
options = {
|
||||
programs.dmrconfig = {
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
type = types.bool;
|
||||
description = ''
|
||||
Whether to configure system to enable use of dmrconfig. This
|
||||
enables the required udev rules and installs the program.
|
||||
'';
|
||||
relatedPackages = [ "dmrconfig" ];
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
default = pkgs.dmrconfig;
|
||||
type = types.package;
|
||||
defaultText = "pkgs.dmrconfig";
|
||||
description = "dmrconfig derivation to use";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
###### implementation
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
services.udev.packages = [ cfg.package ];
|
||||
};
|
||||
}
|
@ -282,6 +282,10 @@ with lib;
|
||||
(mkRenamedOptionModule [ "programs" "man" "enable" ] [ "documentation" "man" "enable" ])
|
||||
(mkRenamedOptionModule [ "services" "nixosManual" "enable" ] [ "documentation" "nixos" "enable" ])
|
||||
|
||||
# ckb
|
||||
(mkRenamedOptionModule [ "hardware" "ckb" "enable" ] [ "hardware" "ckb-next" "enable" ])
|
||||
(mkRenamedOptionModule [ "hardware" "ckb" "package" ] [ "hardware" "ckb-next" "package" ])
|
||||
|
||||
] ++ (flip map [ "blackboxExporter" "collectdExporter" "fritzboxExporter"
|
||||
"jsonExporter" "minioExporter" "nginxExporter" "nodeExporter"
|
||||
"snmpExporter" "unifiExporter" "varnishExporter" ]
|
||||
|
@ -29,7 +29,7 @@ with lib;
|
||||
|
||||
description = "Hardware RNG Entropy Gatherer Daemon";
|
||||
|
||||
serviceConfig.ExecStart = "${pkgs.rng-tools}/sbin/rngd -f -v";
|
||||
serviceConfig.ExecStart = "${pkgs.rng-tools}/sbin/rngd -f";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -346,8 +346,12 @@ in {
|
||||
description = "Bacula File Daemon";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ pkgs.bacula ];
|
||||
serviceConfig.ExecStart = "${pkgs.bacula}/sbin/bacula-fd -f -u root -g bacula -c ${fd_conf}";
|
||||
serviceConfig.ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.bacula}/sbin/bacula-fd -f -u root -g bacula -c ${fd_conf}";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
LogsDirectory = "bacula";
|
||||
StateDirectory = "bacula";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.bacula-sd = mkIf sd_cfg.enable {
|
||||
@ -355,8 +359,12 @@ in {
|
||||
description = "Bacula Storage Daemon";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ pkgs.bacula ];
|
||||
serviceConfig.ExecStart = "${pkgs.bacula}/sbin/bacula-sd -f -u bacula -g bacula -c ${sd_conf}";
|
||||
serviceConfig.ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.bacula}/sbin/bacula-sd -f -u bacula -g bacula -c ${sd_conf}";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
LogsDirectory = "bacula";
|
||||
StateDirectory = "bacula";
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql.enable = dir_cfg.enable == true;
|
||||
@ -366,8 +374,12 @@ in {
|
||||
description = "Bacula Director Daemon";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ pkgs.bacula ];
|
||||
serviceConfig.ExecStart = "${pkgs.bacula}/sbin/bacula-dir -f -u bacula -g bacula -c ${dir_conf}";
|
||||
serviceConfig.ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.bacula}/sbin/bacula-dir -f -u bacula -g bacula -c ${dir_conf}";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
LogsDirectory = "bacula";
|
||||
StateDirectory = "bacula";
|
||||
};
|
||||
preStart = ''
|
||||
if ! test -e "${libDir}/db-created"; then
|
||||
${pkgs.postgresql}/bin/createuser --no-superuser --no-createdb --no-createrole bacula
|
||||
|
@ -3,8 +3,13 @@
|
||||
with lib;
|
||||
|
||||
let
|
||||
version = "1.14.10";
|
||||
version = "1.2.5";
|
||||
cfg = config.services.kubernetes.addons.dns;
|
||||
ports = {
|
||||
dns = 10053;
|
||||
health = 10054;
|
||||
metrics = 10055;
|
||||
};
|
||||
in {
|
||||
options.services.kubernetes.addons.dns = {
|
||||
enable = mkEnableOption "kubernetes dns addon";
|
||||
@ -27,49 +32,130 @@ in {
|
||||
type = types.str;
|
||||
};
|
||||
|
||||
kube-dns = mkOption {
|
||||
description = "Docker image to seed for the kube-dns main container.";
|
||||
type = types.attrs;
|
||||
default = {
|
||||
imageName = "k8s.gcr.io/k8s-dns-kube-dns-amd64";
|
||||
imageDigest = "sha256:b99fc3eee2a9f052f7eb4cc00f15eb12fc405fa41019baa2d6b79847ae7284a8";
|
||||
finalImageTag = version;
|
||||
sha256 = "0x583znk9smqn0fix7ld8sm5jgaxhqhx3fq97b1wkqm7iwhvl3pj";
|
||||
};
|
||||
replicas = mkOption {
|
||||
description = "Number of DNS pod replicas to deploy in the cluster.";
|
||||
default = 2;
|
||||
type = types.int;
|
||||
};
|
||||
|
||||
dnsmasq-nanny = mkOption {
|
||||
description = "Docker image to seed for the kube-dns dnsmasq container.";
|
||||
coredns = mkOption {
|
||||
description = "Docker image to seed for the CoreDNS container.";
|
||||
type = types.attrs;
|
||||
default = {
|
||||
imageName = "k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64";
|
||||
imageDigest = "sha256:bbb2a290a568125b3b996028958eb773f33b5b87a6b37bf38a28f8b62dddb3c8";
|
||||
imageName = "coredns/coredns";
|
||||
imageDigest = "sha256:33c8da20b887ae12433ec5c40bfddefbbfa233d5ce11fb067122e68af30291d6";
|
||||
finalImageTag = version;
|
||||
sha256 = "1fihml7s2mfwgac51cbqpylkwbivc8nyhgi4vb820s83zvl8a6y1";
|
||||
};
|
||||
};
|
||||
|
||||
sidecar = mkOption {
|
||||
description = "Docker image to seed for the kube-dns sidecar container.";
|
||||
type = types.attrs;
|
||||
default = {
|
||||
imageName = "k8s.gcr.io/k8s-dns-sidecar-amd64";
|
||||
imageDigest = "sha256:4f1ab957f87b94a5ec1edc26fae50da2175461f00afecf68940c4aa079bd08a4";
|
||||
finalImageTag = version;
|
||||
sha256 = "08l1bv5jgrhvjzpqpbinrkgvv52snc4fzyd8ya9v18ns2klyz7m0";
|
||||
sha256 = "13q19rgwapv27xcs664dw502254yw4zw63insf6g2danidv2mg6i";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
services.kubernetes.kubelet.seedDockerImages = with pkgs.dockerTools; [
|
||||
(pullImage cfg.kube-dns)
|
||||
(pullImage cfg.dnsmasq-nanny)
|
||||
(pullImage cfg.sidecar)
|
||||
];
|
||||
services.kubernetes.kubelet.seedDockerImages =
|
||||
singleton (pkgs.dockerTools.pullImage cfg.coredns);
|
||||
|
||||
services.kubernetes.addonManager.addons = {
|
||||
kubedns-deployment = {
|
||||
coredns-sa = {
|
||||
apiVersion = "v1";
|
||||
kind = "ServiceAccount";
|
||||
metadata = {
|
||||
labels = {
|
||||
"addonmanager.kubernetes.io/mode" = "Reconcile";
|
||||
"k8s-app" = "kube-dns";
|
||||
"kubernetes.io/cluster-service" = "true";
|
||||
};
|
||||
name = "coredns";
|
||||
namespace = "kube-system";
|
||||
};
|
||||
};
|
||||
|
||||
coredns-cr = {
|
||||
apiVersion = "rbac.authorization.k8s.io/v1beta1";
|
||||
kind = "ClusterRole";
|
||||
metadata = {
|
||||
labels = {
|
||||
"addonmanager.kubernetes.io/mode" = "Reconcile";
|
||||
"k8s-app" = "kube-dns";
|
||||
"kubernetes.io/cluster-service" = "true";
|
||||
"kubernetes.io/bootstrapping" = "rbac-defaults";
|
||||
};
|
||||
name = "system:coredns";
|
||||
};
|
||||
rules = [
|
||||
{
|
||||
apiGroups = [ "" ];
|
||||
resources = [ "endpoints" "services" "pods" "namespaces" ];
|
||||
verbs = [ "list" "watch" ];
|
||||
}
|
||||
{
|
||||
apiGroups = [ "" ];
|
||||
resources = [ "nodes" ];
|
||||
verbs = [ "get" ];
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
coredns-crb = {
|
||||
apiVersion = "rbac.authorization.k8s.io/v1beta1";
|
||||
kind = "ClusterRoleBinding";
|
||||
metadata = {
|
||||
annotations = {
|
||||
"rbac.authorization.kubernetes.io/autoupdate" = "true";
|
||||
};
|
||||
labels = {
|
||||
"addonmanager.kubernetes.io/mode" = "Reconcile";
|
||||
"k8s-app" = "kube-dns";
|
||||
"kubernetes.io/cluster-service" = "true";
|
||||
"kubernetes.io/bootstrapping" = "rbac-defaults";
|
||||
};
|
||||
name = "system:coredns";
|
||||
};
|
||||
roleRef = {
|
||||
apiGroup = "rbac.authorization.k8s.io";
|
||||
kind = "ClusterRole";
|
||||
name = "system:coredns";
|
||||
};
|
||||
subjects = [
|
||||
{
|
||||
kind = "ServiceAccount";
|
||||
name = "coredns";
|
||||
namespace = "kube-system";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
coredns-cm = {
|
||||
apiVersion = "v1";
|
||||
kind = "ConfigMap";
|
||||
metadata = {
|
||||
labels = {
|
||||
"addonmanager.kubernetes.io/mode" = "Reconcile";
|
||||
"k8s-app" = "kube-dns";
|
||||
"kubernetes.io/cluster-service" = "true";
|
||||
};
|
||||
name = "coredns";
|
||||
namespace = "kube-system";
|
||||
};
|
||||
data = {
|
||||
Corefile = ".:${toString ports.dns} {
|
||||
errors
|
||||
health :${toString ports.health}
|
||||
kubernetes ${cfg.clusterDomain} in-addr.arpa ip6.arpa {
|
||||
pods insecure
|
||||
upstream
|
||||
fallthrough in-addr.arpa ip6.arpa
|
||||
}
|
||||
prometheus :${toString ports.metrics}
|
||||
proxy . /etc/resolv.conf
|
||||
cache 30
|
||||
loop
|
||||
reload
|
||||
loadbalance
|
||||
}";
|
||||
};
|
||||
};
|
||||
|
||||
coredns-deploy = {
|
||||
apiVersion = "extensions/v1beta1";
|
||||
kind = "Deployment";
|
||||
metadata = {
|
||||
@ -77,182 +163,96 @@ in {
|
||||
"addonmanager.kubernetes.io/mode" = "Reconcile";
|
||||
"k8s-app" = "kube-dns";
|
||||
"kubernetes.io/cluster-service" = "true";
|
||||
"kubernetes.io/name" = "CoreDNS";
|
||||
};
|
||||
name = "kube-dns";
|
||||
name = "coredns";
|
||||
namespace = "kube-system";
|
||||
};
|
||||
spec = {
|
||||
selector.matchLabels."k8s-app" = "kube-dns";
|
||||
replicas = cfg.replicas;
|
||||
selector = {
|
||||
matchLabels = { k8s-app = "kube-dns"; };
|
||||
};
|
||||
strategy = {
|
||||
rollingUpdate = {
|
||||
maxSurge = "10%";
|
||||
maxUnavailable = 0;
|
||||
};
|
||||
rollingUpdate = { maxUnavailable = 1; };
|
||||
type = "RollingUpdate";
|
||||
};
|
||||
template = {
|
||||
metadata = {
|
||||
annotations."scheduler.alpha.kubernetes.io/critical-pod" = "";
|
||||
labels.k8s-app = "kube-dns";
|
||||
labels = {
|
||||
k8s-app = "kube-dns";
|
||||
};
|
||||
};
|
||||
spec = {
|
||||
priorityClassName = "system-cluster-critical";
|
||||
containers = [
|
||||
{
|
||||
name = "kubedns";
|
||||
image = with cfg.kube-dns; "${imageName}:${finalImageTag}";
|
||||
args = [ "-conf" "/etc/coredns/Corefile" ];
|
||||
image = with cfg.coredns; "${imageName}:${finalImageTag}";
|
||||
imagePullPolicy = "Never";
|
||||
livenessProbe = {
|
||||
failureThreshold = 5;
|
||||
httpGet = {
|
||||
path = "/health";
|
||||
port = ports.health;
|
||||
scheme = "HTTP";
|
||||
};
|
||||
initialDelaySeconds = 60;
|
||||
successThreshold = 1;
|
||||
timeoutSeconds = 5;
|
||||
};
|
||||
name = "coredns";
|
||||
ports = [
|
||||
{
|
||||
containerPort = ports.dns;
|
||||
name = "dns";
|
||||
protocol = "UDP";
|
||||
}
|
||||
{
|
||||
containerPort = ports.dns;
|
||||
name = "dns-tcp";
|
||||
protocol = "TCP";
|
||||
}
|
||||
{
|
||||
containerPort = ports.metrics;
|
||||
name = "metrics";
|
||||
protocol = "TCP";
|
||||
}
|
||||
];
|
||||
resources = {
|
||||
limits.memory = "170Mi";
|
||||
limits = {
|
||||
memory = "170Mi";
|
||||
};
|
||||
requests = {
|
||||
cpu = "100m";
|
||||
memory = "70Mi";
|
||||
};
|
||||
};
|
||||
livenessProbe = {
|
||||
failureThreshold = 5;
|
||||
httpGet = {
|
||||
path = "/healthcheck/kubedns";
|
||||
port = 10054;
|
||||
scheme = "HTTP";
|
||||
};
|
||||
initialDelaySeconds = 60;
|
||||
successThreshold = 1;
|
||||
timeoutSeconds = 5;
|
||||
};
|
||||
readinessProbe = {
|
||||
httpGet = {
|
||||
path = "/readiness";
|
||||
port = 8081;
|
||||
scheme = "HTTP";
|
||||
};
|
||||
initialDelaySeconds = 3;
|
||||
timeoutSeconds = 5;
|
||||
};
|
||||
args = [
|
||||
"--domain=${cfg.clusterDomain}"
|
||||
"--dns-port=10053"
|
||||
"--config-dir=/kube-dns-config"
|
||||
"--v=2"
|
||||
];
|
||||
env = [
|
||||
{
|
||||
name = "PROMETHEUS_PORT";
|
||||
value = "10055";
|
||||
}
|
||||
];
|
||||
ports = [
|
||||
{
|
||||
containerPort = 10053;
|
||||
name = "dns-local";
|
||||
protocol = "UDP";
|
||||
}
|
||||
{
|
||||
containerPort = 10053;
|
||||
name = "dns-tcp-local";
|
||||
protocol = "TCP";
|
||||
}
|
||||
{
|
||||
containerPort = 10055;
|
||||
name = "metrics";
|
||||
protocol = "TCP";
|
||||
}
|
||||
];
|
||||
volumeMounts = [
|
||||
{
|
||||
mountPath = "/kube-dns-config";
|
||||
name = "kube-dns-config";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "dnsmasq";
|
||||
image = with cfg.dnsmasq-nanny; "${imageName}:${finalImageTag}";
|
||||
livenessProbe = {
|
||||
httpGet = {
|
||||
path = "/healthcheck/dnsmasq";
|
||||
port = 10054;
|
||||
scheme = "HTTP";
|
||||
};
|
||||
initialDelaySeconds = 60;
|
||||
timeoutSeconds = 5;
|
||||
successThreshold = 1;
|
||||
failureThreshold = 5;
|
||||
};
|
||||
args = [
|
||||
"-v=2"
|
||||
"-logtostderr"
|
||||
"-configDir=/etc/k8s/dns/dnsmasq-nanny"
|
||||
"-restartDnsmasq=true"
|
||||
"--"
|
||||
"-k"
|
||||
"--cache-size=1000"
|
||||
"--log-facility=-"
|
||||
"--server=/${cfg.clusterDomain}/127.0.0.1#10053"
|
||||
"--server=/in-addr.arpa/127.0.0.1#10053"
|
||||
"--server=/ip6.arpa/127.0.0.1#10053"
|
||||
];
|
||||
ports = [
|
||||
{
|
||||
containerPort = 53;
|
||||
name = "dns";
|
||||
protocol = "UDP";
|
||||
}
|
||||
{
|
||||
containerPort = 53;
|
||||
name = "dns-tcp";
|
||||
protocol = "TCP";
|
||||
}
|
||||
];
|
||||
resources = {
|
||||
requests = {
|
||||
cpu = "150m";
|
||||
memory = "20Mi";
|
||||
securityContext = {
|
||||
allowPrivilegeEscalation = false;
|
||||
capabilities = {
|
||||
drop = [ "all" ];
|
||||
};
|
||||
readOnlyRootFilesystem = true;
|
||||
};
|
||||
volumeMounts = [
|
||||
{
|
||||
mountPath = "/etc/k8s/dns/dnsmasq-nanny";
|
||||
name = "kube-dns-config";
|
||||
mountPath = "/etc/coredns";
|
||||
name = "config-volume";
|
||||
readOnly = true;
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "sidecar";
|
||||
image = with cfg.sidecar; "${imageName}:${finalImageTag}";
|
||||
livenessProbe = {
|
||||
httpGet = {
|
||||
path = "/metrics";
|
||||
port = 10054;
|
||||
scheme = "HTTP";
|
||||
};
|
||||
initialDelaySeconds = 60;
|
||||
timeoutSeconds = 5;
|
||||
successThreshold = 1;
|
||||
failureThreshold = 5;
|
||||
};
|
||||
args = [
|
||||
"--v=2"
|
||||
"--logtostderr"
|
||||
"--probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.${cfg.clusterDomain},5,A"
|
||||
"--probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.${cfg.clusterDomain},5,A"
|
||||
];
|
||||
ports = [
|
||||
{
|
||||
containerPort = 10054;
|
||||
name = "metrics";
|
||||
protocol = "TCP";
|
||||
}
|
||||
];
|
||||
resources = {
|
||||
requests = {
|
||||
cpu = "10m";
|
||||
memory = "20Mi";
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
dnsPolicy = "Default";
|
||||
serviceAccountName = "kube-dns";
|
||||
nodeSelector = {
|
||||
"beta.kubernetes.io/os" = "linux";
|
||||
};
|
||||
serviceAccountName = "coredns";
|
||||
tolerations = [
|
||||
{
|
||||
effect = "NoSchedule";
|
||||
key = "node-role.kubernetes.io/master";
|
||||
}
|
||||
{
|
||||
key = "CriticalAddonsOnly";
|
||||
operator = "Exists";
|
||||
@ -261,10 +261,15 @@ in {
|
||||
volumes = [
|
||||
{
|
||||
configMap = {
|
||||
name = "kube-dns";
|
||||
optional = true;
|
||||
items = [
|
||||
{
|
||||
key = "Corefile";
|
||||
path = "Corefile";
|
||||
}
|
||||
];
|
||||
name = "coredns";
|
||||
};
|
||||
name = "kube-dns-config";
|
||||
name = "config-volume";
|
||||
}
|
||||
];
|
||||
};
|
||||
@ -272,51 +277,40 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
kubedns-svc = {
|
||||
coredns-svc = {
|
||||
apiVersion = "v1";
|
||||
kind = "Service";
|
||||
metadata = {
|
||||
annotations = {
|
||||
"prometheus.io/port" = toString ports.metrics;
|
||||
"prometheus.io/scrape" = "true";
|
||||
};
|
||||
labels = {
|
||||
"addonmanager.kubernetes.io/mode" = "Reconcile";
|
||||
"k8s-app" = "kube-dns";
|
||||
"kubernetes.io/cluster-service" = "true";
|
||||
"kubernetes.io/name" = "KubeDNS";
|
||||
"kubernetes.io/name" = "CoreDNS";
|
||||
};
|
||||
name = "kube-dns";
|
||||
namespace = "kube-system";
|
||||
namespace = "kube-system";
|
||||
};
|
||||
spec = {
|
||||
clusterIP = cfg.clusterIp;
|
||||
ports = [
|
||||
{name = "dns"; port = 53; protocol = "UDP";}
|
||||
{name = "dns-tcp"; port = 53; protocol = "TCP";}
|
||||
{
|
||||
name = "dns";
|
||||
port = 53;
|
||||
targetPort = ports.dns;
|
||||
protocol = "UDP";
|
||||
}
|
||||
{
|
||||
name = "dns-tcp";
|
||||
port = 53;
|
||||
targetPort = ports.dns;
|
||||
protocol = "TCP";
|
||||
}
|
||||
];
|
||||
selector.k8s-app = "kube-dns";
|
||||
};
|
||||
};
|
||||
|
||||
kubedns-sa = {
|
||||
apiVersion = "v1";
|
||||
kind = "ServiceAccount";
|
||||
metadata = {
|
||||
name = "kube-dns";
|
||||
namespace = "kube-system";
|
||||
labels = {
|
||||
"kubernetes.io/cluster-service" = "true";
|
||||
"addonmanager.kubernetes.io/mode" = "Reconcile";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
kubedns-cm = {
|
||||
apiVersion = "v1";
|
||||
kind = "ConfigMap";
|
||||
metadata = {
|
||||
name = "kube-dns";
|
||||
namespace = "kube-system";
|
||||
labels = {
|
||||
"addonmanager.kubernetes.io/mode" = "EnsureExists";
|
||||
};
|
||||
selector = { k8s-app = "kube-dns"; };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -145,6 +145,7 @@ in {
|
||||
systemd.services.jupyter = {
|
||||
description = "Jupyter development server";
|
||||
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
# TODO: Patch notebook so we can explicitly pass in a shell
|
||||
|
@ -6,6 +6,7 @@ let
|
||||
|
||||
cfg = config.services.rspamd;
|
||||
opts = options.services.rspamd;
|
||||
postfixCfg = config.services.postfix;
|
||||
|
||||
bindSocketOpts = {options, config, ... }: {
|
||||
options = {
|
||||
@ -58,7 +59,7 @@ let
|
||||
};
|
||||
type = mkOption {
|
||||
type = types.nullOr (types.enum [
|
||||
"normal" "controller" "fuzzy_storage" "proxy" "lua"
|
||||
"normal" "controller" "fuzzy_storage" "rspamd_proxy" "lua"
|
||||
]);
|
||||
description = "The type of this worker";
|
||||
};
|
||||
@ -99,19 +100,21 @@ let
|
||||
description = "Additional entries to put verbatim into worker section of rspamd config file.";
|
||||
};
|
||||
};
|
||||
config = mkIf (name == "normal" || name == "controller" || name == "fuzzy") {
|
||||
config = mkIf (name == "normal" || name == "controller" || name == "fuzzy" || name == "rspamd_proxy") {
|
||||
type = mkDefault name;
|
||||
includes = mkDefault [ "$CONFDIR/worker-${name}.inc" ];
|
||||
bindSockets = mkDefault (if name == "normal"
|
||||
then [{
|
||||
socket = "/run/rspamd/rspamd.sock";
|
||||
mode = "0660";
|
||||
owner = cfg.user;
|
||||
group = cfg.group;
|
||||
}]
|
||||
else if name == "controller"
|
||||
then [ "localhost:11334" ]
|
||||
else [] );
|
||||
includes = mkDefault [ "$CONFDIR/worker-${if name == "rspamd_proxy" then "proxy" else name}.inc" ];
|
||||
bindSockets =
|
||||
let
|
||||
unixSocket = name: {
|
||||
mode = "0660";
|
||||
socket = "/run/rspamd/${name}.sock";
|
||||
owner = cfg.user;
|
||||
group = cfg.group;
|
||||
};
|
||||
in mkDefault (if name == "normal" then [(unixSocket "rspamd")]
|
||||
else if name == "controller" then [ "localhost:11334" ]
|
||||
else if name == "rspamd_proxy" then [ (unixSocket "proxy") ]
|
||||
else [] );
|
||||
};
|
||||
};
|
||||
|
||||
@ -138,24 +141,31 @@ let
|
||||
.include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/logging.inc"
|
||||
}
|
||||
|
||||
${concatStringsSep "\n" (mapAttrsToList (name: value: ''
|
||||
worker ${optionalString (value.name != "normal" && value.name != "controller") "${value.name}"} {
|
||||
${concatStringsSep "\n" (mapAttrsToList (name: value: let
|
||||
includeName = if name == "rspamd_proxy" then "proxy" else name;
|
||||
tryOverride = if value.extraConfig == "" then "true" else "false";
|
||||
in ''
|
||||
worker "${value.type}" {
|
||||
type = "${value.type}";
|
||||
${optionalString (value.enable != null)
|
||||
"enabled = ${if value.enable != false then "yes" else "no"};"}
|
||||
${mkBindSockets value.enable value.bindSockets}
|
||||
${optionalString (value.count != null) "count = ${toString value.count};"}
|
||||
${concatStringsSep "\n " (map (each: ".include \"${each}\"") value.includes)}
|
||||
${value.extraConfig}
|
||||
.include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/worker-${includeName}.inc"
|
||||
.include(try=${tryOverride}; priority=10) "$LOCAL_CONFDIR/override.d/worker-${includeName}.inc"
|
||||
}
|
||||
'') cfg.workers)}
|
||||
|
||||
${cfg.extraConfig}
|
||||
${optionalString (cfg.extraConfig != "") ''
|
||||
.include(priority=10) "$LOCAL_CONFDIR/override.d/extra-config.inc"
|
||||
''}
|
||||
'';
|
||||
|
||||
filterFiles = files: filterAttrs (n: v: v.enable) files;
|
||||
rspamdDir = pkgs.linkFarm "etc-rspamd-dir" (
|
||||
(mapAttrsToList (name: file: { name = "local.d/${name}"; path = file.source; }) cfg.locals) ++
|
||||
(mapAttrsToList (name: file: { name = "override.d/${name}"; path = file.source; }) cfg.overrides) ++
|
||||
(mapAttrsToList (name: file: { name = "local.d/${name}"; path = file.source; }) (filterFiles cfg.locals)) ++
|
||||
(mapAttrsToList (name: file: { name = "override.d/${name}"; path = file.source; }) (filterFiles cfg.overrides)) ++
|
||||
(optional (cfg.localLuaRules != null) { name = "rspamd.local.lua"; path = cfg.localLuaRules; }) ++
|
||||
[ { name = "rspamd.conf"; path = rspamdConfFile; } ]
|
||||
);
|
||||
@ -188,6 +198,15 @@ let
|
||||
in mkDefault (pkgs.writeText name' config.text));
|
||||
};
|
||||
};
|
||||
|
||||
configOverrides =
|
||||
(mapAttrs' (n: v: nameValuePair "worker-${if n == "rspamd_proxy" then "proxy" else n}.inc" {
|
||||
text = v.extraConfig;
|
||||
})
|
||||
(filterAttrs (n: v: v.extraConfig != "") cfg.workers))
|
||||
// (if cfg.extraConfig == "" then {} else {
|
||||
"extra-config.inc".text = cfg.extraConfig;
|
||||
});
|
||||
in
|
||||
|
||||
{
|
||||
@ -207,7 +226,7 @@ in
|
||||
};
|
||||
|
||||
locals = mkOption {
|
||||
type = with types; loaOf (submodule (configFileModule "locals"));
|
||||
type = with types; attrsOf (submodule (configFileModule "locals"));
|
||||
default = {};
|
||||
description = ''
|
||||
Local configuration files, written into <filename>/etc/rspamd/local.d/{name}</filename>.
|
||||
@ -220,7 +239,7 @@ in
|
||||
};
|
||||
|
||||
overrides = mkOption {
|
||||
type = with types; loaOf (submodule (configFileModule "overrides"));
|
||||
type = with types; attrsOf (submodule (configFileModule "overrides"));
|
||||
default = {};
|
||||
description = ''
|
||||
Overridden configuration files, written into <filename>/etc/rspamd/override.d/{name}</filename>.
|
||||
@ -284,7 +303,7 @@ in
|
||||
description = ''
|
||||
User to use when no root privileges are required.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.string;
|
||||
@ -292,7 +311,30 @@ in
|
||||
description = ''
|
||||
Group to use when no root privileges are required.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
postfix = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Add rspamd milter to postfix main.conf";
|
||||
};
|
||||
|
||||
config = mkOption {
|
||||
type = with types; attrsOf (either bool (either str (listOf str)));
|
||||
description = ''
|
||||
Addon to postfix configuration
|
||||
'';
|
||||
default = {
|
||||
smtpd_milters = ["unix:/run/rspamd/rspamd-milter.sock"];
|
||||
non_smtpd_milters = ["unix:/run/rspamd/rspamd-milter.sock"];
|
||||
};
|
||||
example = {
|
||||
smtpd_milters = ["unix:/run/rspamd/rspamd-milter.sock"];
|
||||
non_smtpd_milters = ["unix:/run/rspamd/rspamd-milter.sock"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -300,6 +342,25 @@ in
|
||||
###### implementation
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
services.rspamd.overrides = configOverrides;
|
||||
services.rspamd.workers = mkIf cfg.postfix.enable {
|
||||
controller = {};
|
||||
rspamd_proxy = {
|
||||
bindSockets = [ {
|
||||
mode = "0660";
|
||||
socket = "/run/rspamd/rspamd-milter.sock";
|
||||
owner = cfg.user;
|
||||
group = postfixCfg.group;
|
||||
} ];
|
||||
extraConfig = ''
|
||||
upstream "local" {
|
||||
default = yes; # Self-scan upstreams are always default
|
||||
self_scan = yes; # Enable self-scan
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
services.postfix.config = mkIf cfg.postfix.enable cfg.postfix.config;
|
||||
|
||||
# Allow users to run 'rspamc' and 'rspamadm'.
|
||||
environment.systemPackages = [ pkgs.rspamd ];
|
||||
|
@ -6,6 +6,7 @@ let
|
||||
cfg = config.services.gitea;
|
||||
gitea = cfg.package;
|
||||
pg = config.services.postgresql;
|
||||
useMysql = cfg.database.type == "mysql";
|
||||
usePostgresql = cfg.database.type == "postgres";
|
||||
configFile = pkgs.writeText "app.ini" ''
|
||||
APP_NAME = ${cfg.appName}
|
||||
@ -14,7 +15,7 @@ let
|
||||
|
||||
[database]
|
||||
DB_TYPE = ${cfg.database.type}
|
||||
HOST = ${cfg.database.host}:${toString cfg.database.port}
|
||||
HOST = ${if cfg.database.socket != null then cfg.database.socket else cfg.database.host + ":" + toString cfg.database.port}
|
||||
NAME = ${cfg.database.name}
|
||||
USER = ${cfg.database.user}
|
||||
PASSWD = #dbpass#
|
||||
@ -148,6 +149,13 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
socket = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
example = "/run/mysqld/mysqld.sock";
|
||||
description = "Path to the unix socket file to use for authentication.";
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
type = types.str;
|
||||
default = "${cfg.stateDir}/data/gitea.db";
|
||||
@ -253,7 +261,7 @@ in
|
||||
|
||||
systemd.services.gitea = {
|
||||
description = "gitea";
|
||||
after = [ "network.target" "postgresql.service" ];
|
||||
after = [ "network.target" ] ++ lib.optional usePostgresql "postgresql.service" ++ lib.optional useMysql "mysql.service";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ gitea.bin ];
|
||||
|
||||
|
@ -62,11 +62,15 @@ let
|
||||
''}
|
||||
$extraOptions
|
||||
END
|
||||
'' + optionalString cfg.checkConfig ''
|
||||
echo "Checking that Nix can read nix.conf..."
|
||||
ln -s $out ./nix.conf
|
||||
NIX_CONF_DIR=$PWD ${cfg.package}/bin/nix show-config >/dev/null
|
||||
'');
|
||||
'' + optionalString cfg.checkConfig (
|
||||
if pkgs.stdenv.hostPlatform != pkgs.stdenv.buildPlatform then ''
|
||||
echo "Ignore nix.checkConfig when cross-compiling"
|
||||
'' else ''
|
||||
echo "Checking that Nix can read nix.conf..."
|
||||
ln -s $out ./nix.conf
|
||||
NIX_CONF_DIR=$PWD ${cfg.package}/bin/nix show-config >/dev/null
|
||||
'')
|
||||
);
|
||||
|
||||
in
|
||||
|
||||
|
@ -6,11 +6,8 @@ let
|
||||
|
||||
cfg = config.services.packagekit;
|
||||
|
||||
backend = "nix";
|
||||
|
||||
packagekitConf = ''
|
||||
[Daemon]
|
||||
DefaultBackend=${backend}
|
||||
KeepCache=false
|
||||
'';
|
||||
|
||||
|
116
nixos/modules/services/monitoring/alerta.nix
Normal file
116
nixos/modules/services/monitoring/alerta.nix
Normal file
@ -0,0 +1,116 @@
|
||||
{ options, config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.alerta;
|
||||
|
||||
alertaConf = pkgs.writeTextFile {
|
||||
name = "alertad.conf";
|
||||
text = ''
|
||||
DATABASE_URL = '${cfg.databaseUrl}'
|
||||
DATABASE_NAME = '${cfg.databaseName}'
|
||||
LOG_FILE = '${cfg.logDir}/alertad.log'
|
||||
LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||||
CORS_ORIGINS = [ ${concatMapStringsSep ", " (s: "\"" + s + "\"") cfg.corsOrigins} ];
|
||||
AUTH_REQUIRED = ${if cfg.authenticationRequired then "True" else "False"}
|
||||
SIGNUP_ENABLED = ${if cfg.signupEnabled then "True" else "False"}
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
options.services.alerta = {
|
||||
enable = mkEnableOption "alerta";
|
||||
|
||||
port = mkOption {
|
||||
type = types.int;
|
||||
default = 5000;
|
||||
description = "Port of Alerta";
|
||||
};
|
||||
|
||||
bind = mkOption {
|
||||
type = types.str;
|
||||
default = "0.0.0.0";
|
||||
example = literalExample "0.0.0.0";
|
||||
description = "Address to bind to. The default is to bind to all addresses";
|
||||
};
|
||||
|
||||
logDir = mkOption {
|
||||
type = types.path;
|
||||
description = "Location where the logfiles are stored";
|
||||
default = "/var/log/alerta";
|
||||
};
|
||||
|
||||
databaseUrl = mkOption {
|
||||
type = types.str;
|
||||
description = "URL of the MongoDB or PostgreSQL database to connect to";
|
||||
default = "mongodb://localhost";
|
||||
example = "mongodb://localhost";
|
||||
};
|
||||
|
||||
databaseName = mkOption {
|
||||
type = types.str;
|
||||
description = "Name of the database instance to connect to";
|
||||
default = "monitoring";
|
||||
example = "monitoring";
|
||||
};
|
||||
|
||||
corsOrigins = mkOption {
|
||||
type = types.listOf types.str;
|
||||
description = "List of URLs that can access the API for Cross-Origin Resource Sharing (CORS)";
|
||||
example = [ "http://localhost" "http://localhost:5000" ];
|
||||
default = [ "http://localhost" "http://localhost:5000" ];
|
||||
};
|
||||
|
||||
authenticationRequired = mkOption {
|
||||
type = types.bool;
|
||||
description = "Whether users must authenticate when using the web UI or command-line tool";
|
||||
default = false;
|
||||
};
|
||||
|
||||
signupEnabled = mkOption {
|
||||
type = types.bool;
|
||||
description = "Whether to prevent sign-up of new users via the web UI";
|
||||
default = true;
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
description = "These lines go into alertad.conf verbatim.";
|
||||
default = "";
|
||||
type = types.lines;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.alerta = {
|
||||
description = "Alerta Monitoring System";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "networking.target" ];
|
||||
environment = {
|
||||
ALERTA_SVR_CONF_FILE = alertaConf;
|
||||
};
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.python36Packages.alerta-server}/bin/alertad run --port ${toString cfg.port} --host ${cfg.bind}";
|
||||
User = "alerta";
|
||||
Group = "alerta";
|
||||
PermissionsStartOnly = true;
|
||||
};
|
||||
preStart = ''
|
||||
mkdir -p ${cfg.logDir}
|
||||
chown alerta:alerta ${cfg.logDir}
|
||||
'';
|
||||
};
|
||||
|
||||
environment.systemPackages = [ pkgs.python36Packages.alerta ];
|
||||
|
||||
users.users.alerta = {
|
||||
uid = config.ids.uids.alerta;
|
||||
description = "Alerta user";
|
||||
};
|
||||
|
||||
users.groups.alerta = {
|
||||
gid = config.ids.gids.alerta;
|
||||
};
|
||||
};
|
||||
}
|
66
nixos/modules/services/monitoring/grafana-reporter.nix
Normal file
66
nixos/modules/services/monitoring/grafana-reporter.nix
Normal file
@ -0,0 +1,66 @@
|
||||
{ options, config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.grafana_reporter;
|
||||
|
||||
in {
|
||||
options.services.grafana_reporter = {
|
||||
enable = mkEnableOption "grafana_reporter";
|
||||
|
||||
grafana = {
|
||||
protocol = mkOption {
|
||||
description = "Grafana protocol.";
|
||||
default = "http";
|
||||
type = types.enum ["http" "https"];
|
||||
};
|
||||
addr = mkOption {
|
||||
description = "Grafana address.";
|
||||
default = "127.0.0.1";
|
||||
type = types.str;
|
||||
};
|
||||
port = mkOption {
|
||||
description = "Grafana port.";
|
||||
default = 3000;
|
||||
type = types.int;
|
||||
};
|
||||
|
||||
};
|
||||
addr = mkOption {
|
||||
description = "Listening address.";
|
||||
default = "127.0.0.1";
|
||||
type = types.str;
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
description = "Listening port.";
|
||||
default = 8686;
|
||||
type = types.int;
|
||||
};
|
||||
|
||||
templateDir = mkOption {
|
||||
description = "Optional template directory to use custom tex templates";
|
||||
default = "${pkgs.grafana_reporter}";
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.grafana_reporter = {
|
||||
description = "Grafana Reporter Service Daemon";
|
||||
wantedBy = ["multi-user.target"];
|
||||
after = ["network.target"];
|
||||
serviceConfig = let
|
||||
args = lib.concatSepString " " [
|
||||
"-proto ${cfg.grafana.protocol}://"
|
||||
"-ip ${cfg.grafana.addr}:${toString cfg.grafana.port}"
|
||||
"-port :${toString cfg.port}"
|
||||
"-templates ${cfg.templateDir}"
|
||||
];
|
||||
in {
|
||||
ExecStart = "${pkgs.grafana_reporter.bin}/bin/grafana-reporter ${args}";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
@ -42,6 +42,15 @@ let
|
||||
password = "${cfg.defaultDatabase.password}"
|
||||
''}
|
||||
|
||||
${optionalString (cfg.alerta.enable) ''
|
||||
[alerta]
|
||||
enabled = true
|
||||
url = "${cfg.alerta.url}"
|
||||
token = "${cfg.alerta.token}"
|
||||
environment = "${cfg.alerta.environment}"
|
||||
origin = "${cfg.alerta.origin}"
|
||||
''}
|
||||
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
};
|
||||
@ -120,6 +129,35 @@ in
|
||||
type = types.string;
|
||||
};
|
||||
};
|
||||
|
||||
alerta = {
|
||||
enable = mkEnableOption "kapacitor alerta integration";
|
||||
|
||||
url = mkOption {
|
||||
description = "The URL to the Alerta REST API";
|
||||
default = "http://localhost:5000";
|
||||
example = "http://localhost:5000";
|
||||
type = types.string;
|
||||
};
|
||||
|
||||
token = mkOption {
|
||||
description = "Default Alerta authentication token";
|
||||
type = types.str;
|
||||
default = "";
|
||||
};
|
||||
|
||||
environment = mkOption {
|
||||
description = "Default Alerta environment";
|
||||
type = types.str;
|
||||
default = "Production";
|
||||
};
|
||||
|
||||
origin = mkOption {
|
||||
description = "Default origin of alert";
|
||||
type = types.str;
|
||||
default = "kapacitor";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
@ -1,33 +1,30 @@
|
||||
# Monit system watcher
|
||||
# http://mmonit.org/monit/
|
||||
|
||||
{config, pkgs, lib, ...}:
|
||||
|
||||
let inherit (lib) mkOption mkIf;
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.monit;
|
||||
in
|
||||
|
||||
{
|
||||
options = {
|
||||
services.monit = {
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to run Monit system watcher.
|
||||
'';
|
||||
};
|
||||
config = mkOption {
|
||||
default = "";
|
||||
description = "monitrc content";
|
||||
};
|
||||
options.services.monit = {
|
||||
|
||||
enable = mkEnableOption "Monit";
|
||||
|
||||
config = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = "monitrc content";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = mkIf config.services.monit.enable {
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
environment.systemPackages = [ pkgs.monit ];
|
||||
|
||||
environment.etc."monitrc" = {
|
||||
text = config.services.monit.config;
|
||||
text = cfg.config;
|
||||
mode = "0400";
|
||||
};
|
||||
|
||||
|
@ -198,6 +198,9 @@ in
|
||||
install -m 0755 -d /var/log/glusterfs
|
||||
'';
|
||||
|
||||
# glustereventsd uses the `gluster` executable
|
||||
path = [ glusterfs ];
|
||||
|
||||
serviceConfig = {
|
||||
Type="simple";
|
||||
Environment="PYTHONPATH=${glusterfs}/usr/lib/python2.7/site-packages";
|
||||
|
@ -130,7 +130,7 @@ in
|
||||
};
|
||||
|
||||
ports = mkOption {
|
||||
type = types.listOf types.int;
|
||||
type = types.listOf types.port;
|
||||
default = [22];
|
||||
description = ''
|
||||
Specifies on which ports the SSH daemon listens.
|
||||
|
@ -171,7 +171,12 @@ in {
|
||||
dbhost = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "localhost";
|
||||
description = "Database host.";
|
||||
description = ''
|
||||
Database host.
|
||||
|
||||
Note: for using Unix authentication with PostgreSQL, this should be
|
||||
set to <literal>/tmp</literal>.
|
||||
'';
|
||||
};
|
||||
dbport = mkOption {
|
||||
type = with types; nullOr (either int str);
|
||||
|
@ -246,10 +246,7 @@ checkFS() {
|
||||
if [ "$fsType" = iso9660 -o "$fsType" = udf ]; then return 0; fi
|
||||
|
||||
# Don't check resilient COWs as they validate the fs structures at mount time
|
||||
if [ "$fsType" = btrfs -o "$fsType" = zfs ]; then return 0; fi
|
||||
|
||||
# Skip fsck for bcachefs - not implemented yet.
|
||||
if [ "$fsType" = bcachefs ]; then return 0; fi
|
||||
if [ "$fsType" = btrfs -o "$fsType" = zfs -o "$fsType" = bcachefs ]; then return 0; fi
|
||||
|
||||
# Skip fsck for nilfs2 - not needed by design and no fsck tool for this filesystem.
|
||||
if [ "$fsType" = nilfs2 ]; then return 0; fi
|
||||
|
@ -230,6 +230,8 @@ in
|
||||
let
|
||||
fsToSkipCheck = [ "none" "bindfs" "btrfs" "zfs" "tmpfs" "nfs" "vboxsf" "glusterfs" ];
|
||||
skipCheck = fs: fs.noCheck || fs.device == "none" || builtins.elem fs.fsType fsToSkipCheck;
|
||||
# https://wiki.archlinux.org/index.php/fstab#Filepath_spaces
|
||||
escape = string: builtins.replaceStrings [ " " ] [ "\\040" ] string;
|
||||
in ''
|
||||
# This is a generated file. Do not edit!
|
||||
#
|
||||
@ -238,10 +240,10 @@ in
|
||||
|
||||
# Filesystems.
|
||||
${concatMapStrings (fs:
|
||||
(if fs.device != null then fs.device
|
||||
else if fs.label != null then "/dev/disk/by-label/${fs.label}"
|
||||
(if fs.device != null then escape fs.device
|
||||
else if fs.label != null then "/dev/disk/by-label/${escape fs.label}"
|
||||
else throw "No device specified for mount point ‘${fs.mountPoint}’.")
|
||||
+ " " + fs.mountPoint
|
||||
+ " " + escape fs.mountPoint
|
||||
+ " " + fs.fsType
|
||||
+ " " + builtins.concatStringsSep "," fs.options
|
||||
+ " 0"
|
||||
|
@ -1,26 +1,65 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{ config, lib, pkgs, utils, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
inInitrd = any (fs: fs == "bcachefs") config.boot.initrd.supportedFilesystems;
|
||||
bootFs = filterAttrs (n: fs: (fs.fsType == "bcachefs") && (utils.fsNeededForBoot fs)) config.fileSystems;
|
||||
|
||||
commonFunctions = ''
|
||||
prompt() {
|
||||
local name="$1"
|
||||
printf "enter passphrase for $name: "
|
||||
}
|
||||
tryUnlock() {
|
||||
local name="$1"
|
||||
local path="$2"
|
||||
if bcachefs unlock -c $path > /dev/null 2> /dev/null; then # test for encryption
|
||||
prompt $name
|
||||
until bcachefs unlock $path 2> /dev/null; do # repeat until sucessfully unlocked
|
||||
printf "unlocking failed!\n"
|
||||
prompt $name
|
||||
done
|
||||
printf "unlocking successful.\n"
|
||||
fi
|
||||
}
|
||||
'';
|
||||
|
||||
openCommand = name: fs:
|
||||
let
|
||||
# we need only unlock one device manually, and cannot pass multiple at once
|
||||
# remove this adaptation when bcachefs implements mounting by filesystem uuid
|
||||
# also, implement automatic waiting for the constituent devices when that happens
|
||||
# bcachefs does not support mounting devices with colons in the path, ergo we don't (see #49671)
|
||||
firstDevice = head (splitString ":" fs.device);
|
||||
in
|
||||
''
|
||||
tryUnlock ${name} ${firstDevice}
|
||||
'';
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
config = mkIf (any (fs: fs == "bcachefs") config.boot.supportedFilesystems) {
|
||||
config = mkIf (elem "bcachefs" config.boot.supportedFilesystems) (mkMerge [
|
||||
{
|
||||
system.fsPackages = [ pkgs.bcachefs-tools ];
|
||||
|
||||
system.fsPackages = [ pkgs.bcachefs-tools ];
|
||||
# use kernel package with bcachefs support until it's in mainline
|
||||
boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
|
||||
}
|
||||
|
||||
# use kernel package with bcachefs support until it's in mainline
|
||||
boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
|
||||
boot.initrd.availableKernelModules = mkIf inInitrd [ "bcachefs" ];
|
||||
(mkIf ((elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
|
||||
# the cryptographic modules are required only for decryption attempts
|
||||
boot.initrd.availableKernelModules = [ "bcachefs" "chacha20" "poly1305" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = mkIf inInitrd
|
||||
''
|
||||
copy_bin_and_libs ${pkgs.bcachefs-tools}/bin/fsck.bcachefs
|
||||
boot.initrd.extraUtilsCommands = ''
|
||||
copy_bin_and_libs ${pkgs.bcachefs-tools}/bin/bcachefs
|
||||
'';
|
||||
boot.initrd.extraUtilsCommandsTest = ''
|
||||
$out/bin/bcachefs version
|
||||
'';
|
||||
|
||||
};
|
||||
boot.initrd.postDeviceCommands = commonFunctions + concatStrings (mapAttrsToList openCommand bootFs);
|
||||
})
|
||||
]);
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ let
|
||||
system.nixos.revision = nixpkgs.rev or nixpkgs.shortRev;
|
||||
};
|
||||
|
||||
makeModules = module: rest: [ configuration versionModule module rest ];
|
||||
|
||||
makeIso =
|
||||
{ module, type, system, ... }:
|
||||
@ -53,7 +54,9 @@ let
|
||||
|
||||
hydraJob ((import lib/eval-config.nix {
|
||||
inherit system;
|
||||
modules = [ configuration module versionModule { isoImage.isoBaseName = "nixos-${type}"; } ];
|
||||
modules = makeModules module {
|
||||
isoImage.isoBaseName = "nixos-${type}";
|
||||
};
|
||||
}).config.system.build.isoImage);
|
||||
|
||||
|
||||
@ -64,7 +67,7 @@ let
|
||||
|
||||
hydraJob ((import lib/eval-config.nix {
|
||||
inherit system;
|
||||
modules = [ configuration module versionModule ];
|
||||
modules = makeModules module {};
|
||||
}).config.system.build.sdImage);
|
||||
|
||||
|
||||
@ -77,7 +80,7 @@ let
|
||||
|
||||
config = (import lib/eval-config.nix {
|
||||
inherit system;
|
||||
modules = [ configuration module versionModule ];
|
||||
modules = makeModules module {};
|
||||
}).config;
|
||||
|
||||
tarball = config.system.build.tarball;
|
||||
@ -97,7 +100,7 @@ let
|
||||
|
||||
buildFromConfig = module: sel: forAllSystems (system: hydraJob (sel (import ./lib/eval-config.nix {
|
||||
inherit system;
|
||||
modules = [ configuration module versionModule ] ++ singleton
|
||||
modules = makeModules module
|
||||
({ ... }:
|
||||
{ fileSystems."/".device = mkDefault "/dev/sda1";
|
||||
boot.loader.grub.device = mkDefault "/dev/sda";
|
||||
@ -108,7 +111,7 @@ let
|
||||
let
|
||||
configEvaled = import lib/eval-config.nix {
|
||||
inherit system;
|
||||
modules = [ module versionModule ];
|
||||
modules = makeModules module {};
|
||||
};
|
||||
build = configEvaled.config.system.build;
|
||||
kernelTarget = configEvaled.pkgs.stdenv.hostPlatform.platform.kernelTarget;
|
||||
@ -301,6 +304,7 @@ in rec {
|
||||
tests.fsck = callTest tests/fsck.nix {};
|
||||
tests.fwupd = callTest tests/fwupd.nix {};
|
||||
tests.gdk-pixbuf = callTest tests/gdk-pixbuf.nix {};
|
||||
tests.gitea = callSubTests tests/gitea.nix {};
|
||||
tests.gitlab = callTest tests/gitlab.nix {};
|
||||
tests.gitolite = callTest tests/gitolite.nix {};
|
||||
tests.gjs = callTest tests/gjs.nix {};
|
||||
|
74
nixos/tests/gitea.nix
Normal file
74
nixos/tests/gitea.nix
Normal file
@ -0,0 +1,74 @@
|
||||
{ system ? builtins.currentSystem }:
|
||||
|
||||
with import ../lib/testing.nix { inherit system; };
|
||||
with pkgs.lib;
|
||||
|
||||
{
|
||||
mysql = makeTest {
|
||||
name = "gitea-mysql";
|
||||
meta.maintainers = [ maintainers.aanderse ];
|
||||
|
||||
machine =
|
||||
{ config, pkgs, ... }:
|
||||
{ services.mysql.enable = true;
|
||||
services.mysql.package = pkgs.mariadb;
|
||||
services.mysql.ensureDatabases = [ "gitea" ];
|
||||
services.mysql.ensureUsers = [
|
||||
{ name = "gitea";
|
||||
ensurePermissions = { "gitea.*" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
|
||||
services.gitea.enable = true;
|
||||
services.gitea.database.type = "mysql";
|
||||
services.gitea.database.socket = "/run/mysqld/mysqld.sock";
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
|
||||
$machine->waitForUnit('gitea.service');
|
||||
$machine->waitForOpenPort('3000');
|
||||
$machine->succeed("curl --fail http://localhost:3000/");
|
||||
'';
|
||||
};
|
||||
|
||||
postgres = makeTest {
|
||||
name = "gitea-postgres";
|
||||
meta.maintainers = [ maintainers.aanderse ];
|
||||
|
||||
machine =
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
services.gitea.enable = true;
|
||||
services.gitea.database.type = "postgres";
|
||||
services.gitea.database.password = "secret";
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
|
||||
$machine->waitForUnit('gitea.service');
|
||||
$machine->waitForOpenPort('3000');
|
||||
$machine->succeed("curl --fail http://localhost:3000/");
|
||||
'';
|
||||
};
|
||||
|
||||
sqlite = makeTest {
|
||||
name = "gitea-sqlite";
|
||||
meta.maintainers = [ maintainers.aanderse ];
|
||||
|
||||
machine =
|
||||
{ config, pkgs, ... }:
|
||||
{ services.gitea.enable = true;
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
|
||||
$machine->waitForUnit('gitea.service');
|
||||
$machine->waitForOpenPort('3000');
|
||||
$machine->succeed("curl --fail http://localhost:3000/");
|
||||
'';
|
||||
};
|
||||
}
|
@ -31,7 +31,8 @@ mycurl -X POST -d '@data.json' $URL/login -c hydra-cookie.txt
|
||||
cat >data.json <<EOF
|
||||
{
|
||||
"displayname":"Trivial",
|
||||
"enabled":"1"
|
||||
"enabled":"1",
|
||||
"visible":"1"
|
||||
}
|
||||
EOF
|
||||
mycurl --silent -X PUT $URL/project/$PROJECT_NAME -d @data.json -b hydra-cookie.txt
|
||||
|
@ -87,7 +87,7 @@ let
|
||||
# check if pods are running
|
||||
$machine1->waitUntilSucceeds("kubectl get pod redis | grep Running");
|
||||
$machine1->waitUntilSucceeds("kubectl get pod probe | grep Running");
|
||||
$machine1->waitUntilSucceeds("kubectl get pods -n kube-system | grep 'kube-dns.*3/3'");
|
||||
$machine1->waitUntilSucceeds("kubectl get pods -n kube-system | grep 'coredns.*1/1'");
|
||||
|
||||
# check dns on host (dnsmasq)
|
||||
$machine1->succeed("host redis.default.svc.cluster.local");
|
||||
@ -111,7 +111,7 @@ let
|
||||
# check if pods are running
|
||||
$machine1->waitUntilSucceeds("kubectl get pod redis | grep Running");
|
||||
$machine1->waitUntilSucceeds("kubectl get pod probe | grep Running");
|
||||
$machine1->waitUntilSucceeds("kubectl get pods -n kube-system | grep 'kube-dns.*3/3'");
|
||||
$machine1->waitUntilSucceeds("kubectl get pods -n kube-system | grep 'coredns.*1/1'");
|
||||
|
||||
# check dns on hosts (dnsmasq)
|
||||
$machine1->succeed("host redis.default.svc.cluster.local");
|
||||
|
@ -120,4 +120,6 @@ import ./make-test.nix {
|
||||
$smtp2->waitUntilFails('smtpctl show queue | egrep .');
|
||||
$client->succeed('check-mail-landed >&2');
|
||||
'';
|
||||
|
||||
meta.timeout = 30;
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ let
|
||||
${checkSocket "/run/rspamd/rspamd.sock" "rspamd" "rspamd" "660" }
|
||||
sleep 10;
|
||||
$machine->log($machine->succeed("cat /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("grep 'CONFDIR/worker-controller.inc' /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("grep 'CONFDIR/worker-normal.inc' /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("systemctl cat rspamd.service"));
|
||||
$machine->log($machine->succeed("curl http://localhost:11334/auth"));
|
||||
$machine->log($machine->succeed("curl http://127.0.0.1:11334/auth"));
|
||||
@ -56,6 +58,8 @@ in
|
||||
${checkSocket "/run/rspamd.sock" "root" "root" "600" }
|
||||
${checkSocket "/run/rspamd-worker.sock" "root" "root" "666" }
|
||||
$machine->log($machine->succeed("cat /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("grep 'CONFDIR/worker-controller.inc' /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("grep 'CONFDIR/worker-normal.inc' /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("rspamc -h /run/rspamd-worker.sock stat"));
|
||||
$machine->log($machine->succeed("curl --unix-socket /run/rspamd-worker.sock http://localhost/ping"));
|
||||
'';
|
||||
@ -78,6 +82,15 @@ in
|
||||
owner = "root";
|
||||
group = "root";
|
||||
}];
|
||||
workers.controller2 = {
|
||||
type = "controller";
|
||||
bindSockets = [ "0.0.0.0:11335" ];
|
||||
extraConfig = ''
|
||||
static_dir = "''${WWWDIR}";
|
||||
secure_ip = null;
|
||||
password = "verysecretpassword";
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -87,8 +100,14 @@ in
|
||||
${checkSocket "/run/rspamd.sock" "root" "root" "600" }
|
||||
${checkSocket "/run/rspamd-worker.sock" "root" "root" "666" }
|
||||
$machine->log($machine->succeed("cat /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("grep 'CONFDIR/worker-controller.inc' /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("grep 'CONFDIR/worker-normal.inc' /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("grep 'LOCAL_CONFDIR/override.d/worker-controller2.inc' /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("grep 'verysecretpassword' /etc/rspamd/override.d/worker-controller2.inc"));
|
||||
$machine->waitUntilSucceeds("journalctl -u rspamd | grep -i 'starting controller process' >&2");
|
||||
$machine->log($machine->succeed("rspamc -h /run/rspamd-worker.sock stat"));
|
||||
$machine->log($machine->succeed("curl --unix-socket /run/rspamd-worker.sock http://localhost/ping"));
|
||||
$machine->log($machine->succeed("curl http://localhost:11335/ping"));
|
||||
'';
|
||||
};
|
||||
customLuaRules = makeTest {
|
||||
@ -110,16 +129,33 @@ in
|
||||
'';
|
||||
services.rspamd = {
|
||||
enable = true;
|
||||
locals."groups.conf".text = ''
|
||||
group "cows" {
|
||||
symbol {
|
||||
NO_MUH = {
|
||||
weight = 1.0;
|
||||
description = "Mails should not muh";
|
||||
locals = {
|
||||
"antivirus.conf" = mkIf false { text = ''
|
||||
clamav {
|
||||
action = "reject";
|
||||
symbol = "CLAM_VIRUS";
|
||||
type = "clamav";
|
||||
log_clean = true;
|
||||
servers = "/run/clamav/clamd.ctl";
|
||||
}
|
||||
'';};
|
||||
"redis.conf" = {
|
||||
enable = false;
|
||||
text = ''
|
||||
servers = "127.0.0.1";
|
||||
'';
|
||||
};
|
||||
"groups.conf".text = ''
|
||||
group "cows" {
|
||||
symbol {
|
||||
NO_MUH = {
|
||||
weight = 1.0;
|
||||
description = "Mails should not muh";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
'';
|
||||
'';
|
||||
};
|
||||
localLuaRules = pkgs.writeText "rspamd.local.lua" ''
|
||||
local rspamd_logger = require "rspamd_logger"
|
||||
rspamd_config.NO_MUH = {
|
||||
@ -152,6 +188,10 @@ in
|
||||
$machine->log($machine->succeed("cat /etc/rspamd/rspamd.conf"));
|
||||
$machine->log($machine->succeed("cat /etc/rspamd/rspamd.local.lua"));
|
||||
$machine->log($machine->succeed("cat /etc/rspamd/local.d/groups.conf"));
|
||||
# Verify that redis.conf was not written
|
||||
$machine->fail("cat /etc/rspamd/local.d/redis.conf >&2");
|
||||
# Verify that antivirus.conf was not written
|
||||
$machine->fail("cat /etc/rspamd/local.d/antivirus.conf >&2");
|
||||
${checkSocket "/run/rspamd/rspamd.sock" "rspamd" "rspamd" "660" }
|
||||
$machine->log($machine->succeed("curl --unix-socket /run/rspamd/rspamd.sock http://localhost/ping"));
|
||||
$machine->log($machine->succeed("rspamc -h 127.0.0.1:11334 stat"));
|
||||
@ -162,4 +202,48 @@ in
|
||||
$machine->log($machine->succeed("cat /etc/tests/muh.eml | rspamc -h 127.0.0.1:11334 symbols | grep NO_MUH"));
|
||||
'';
|
||||
};
|
||||
postfixIntegration = makeTest {
|
||||
name = "rspamd-postfix-integration";
|
||||
machine = {
|
||||
environment.systemPackages = with pkgs; [ msmtp ];
|
||||
environment.etc."tests/gtube.eml".text = ''
|
||||
From: Sheep1<bah@example.com>
|
||||
To: Sheep2<tester@example.com>
|
||||
Subject: Evil cows
|
||||
|
||||
I find cows to be evil don't you?
|
||||
|
||||
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
|
||||
'';
|
||||
environment.etc."tests/example.eml".text = ''
|
||||
From: Sheep1<bah@example.com>
|
||||
To: Sheep2<tester@example.com>
|
||||
Subject: Evil cows
|
||||
|
||||
I find cows to be evil don't you?
|
||||
'';
|
||||
users.users.tester.password = "test";
|
||||
services.postfix = {
|
||||
enable = true;
|
||||
destination = ["example.com"];
|
||||
};
|
||||
services.rspamd = {
|
||||
enable = true;
|
||||
postfix.enable = true;
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
${initMachine}
|
||||
$machine->waitForOpenPort(11334);
|
||||
$machine->waitForOpenPort(25);
|
||||
${checkSocket "/run/rspamd/rspamd-milter.sock" "rspamd" "postfix" "660" }
|
||||
$machine->log($machine->succeed("rspamc -h 127.0.0.1:11334 stat"));
|
||||
$machine->log($machine->succeed("msmtp --host=localhost -t --read-envelope-from < /etc/tests/example.eml"));
|
||||
$machine->log($machine->fail("msmtp --host=localhost -t --read-envelope-from < /etc/tests/gtube.eml"));
|
||||
|
||||
$machine->waitUntilFails('[ "$(postqueue -p)" != "Mail queue is empty" ]');
|
||||
$machine->fail("journalctl -u postfix | grep -i error >&2");
|
||||
$machine->fail("journalctl -u postfix | grep -i warning >&2");
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "bs1770gain-${version}";
|
||||
version = "0.5.0";
|
||||
version = "0.5.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/bs1770gain/${name}.tar.gz";
|
||||
sha256 = "0vd7320k7s2zcn2vganclxbr1vav18ghld27rcwskvcc3dm8prii";
|
||||
sha256 = "0r4fbajgfmnwgl63hcm56f1j8m5f135q6j5jkzdvrrhpcj39yx06";
|
||||
};
|
||||
|
||||
buildInputs = [ ffmpeg sox ];
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "csound-${version}";
|
||||
version = "6.11.0";
|
||||
version = "6.12.0";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
|
||||
owner = "csound";
|
||||
repo = "csound";
|
||||
rev = version;
|
||||
sha256 = "1nnfl8dqvc5b3f94zbvdg6bxr2wlp7as78hb31awxmvfwwihpv18";
|
||||
sha256 = "0pv4s54cayvavdp6y30n3r1l5x83x9whyyd2v24y0dh224v3hbxi";
|
||||
};
|
||||
|
||||
cmakeFlags = [ "-DBUILD_CSOUND_AC=0" ] # fails to find Score.hpp
|
||||
|
@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Open source speech synthesizer that supports over 70 languages, based on eSpeak";
|
||||
homepage = https://github.com/espeak-ng/espeak-ng;
|
||||
homepage = src.meta.homepage;
|
||||
license = licenses.gpl3;
|
||||
maintainers = with maintainers; [ aske ];
|
||||
platforms = platforms.linux;
|
||||
|
@ -5,13 +5,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "flacon-${version}";
|
||||
version = "4.1.0";
|
||||
version = "5.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "flacon";
|
||||
repo = "flacon";
|
||||
rev = "v${version}";
|
||||
sha256 = "1sw2v2w3s79lbzhkf96m8lwvag824am7rwfzzsi8bz6sa6krmj0m";
|
||||
sha256 = "0pglqm2z7mp5igqmfnmvrgjhfbfrj8q5jvd0a0g2dzv3rqwfw4vc";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkgconfig makeWrapper ];
|
||||
|
@ -16,7 +16,7 @@
|
||||
, gst_plugins ? with gst_all_1; [ gst-plugins-good gst-plugins-ugly ]
|
||||
}:
|
||||
let
|
||||
version = "7.1";
|
||||
version = "7.2";
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
name = "gradio-${version}";
|
||||
@ -25,7 +25,7 @@ in stdenv.mkDerivation rec {
|
||||
owner = "haecker-felix";
|
||||
repo = "gradio";
|
||||
rev = "v${version}";
|
||||
sha256 = "0x0hmcjvpgvsm64ywcc71srlwqybfhadn5nkwycq0lh7r49d89kx";
|
||||
sha256 = "0c4vlrfl0ljkiwarpwa8wcfmmihh6a5j4pi4yr0qshyl9xxvxiv3";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -4,7 +4,7 @@
|
||||
, gobjectIntrospection, wrapGAppsHook }:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
version = "0.9.610";
|
||||
version = "0.9.611";
|
||||
name = "lollypop-${version}";
|
||||
|
||||
format = "other";
|
||||
@ -14,7 +14,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
url = "https://gitlab.gnome.org/World/lollypop";
|
||||
rev = "refs/tags/${version}";
|
||||
fetchSubmodules = true;
|
||||
sha256 = "0nn4cjw0c2ysd3y2a7l08ybcd21v993wsz99f7w0881jhws3q5p4";
|
||||
sha256 = "1k78a26sld0xd14c9hr4qv8c7qaq1m8zqk1mzrh4pl7ysqqg9p20";
|
||||
};
|
||||
|
||||
nativeBuildInputs = with python3.pkgs; [
|
||||
|
@ -8,13 +8,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mixxx-${version}";
|
||||
version = "2.1.4";
|
||||
version = "2.1.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mixxxdj";
|
||||
repo = "mixxx";
|
||||
rev = "release-${version}";
|
||||
sha256 = "1q1px4033marraprvgr5yq9jlz943kcc10fdkn7py2ma8cfgnipq";
|
||||
sha256 = "0h14pwglz03sdmgzviypv1qa1xfjclrnhyqaq5nd60j47h4z39dr";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Iris";
|
||||
version = "3.28.1";
|
||||
version = "3.29.2";
|
||||
|
||||
src = pythonPackages.fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "0yph01z8lw0r5bw3aa14w0l7z1ymxvpmb131gbaw3ib0srssgz64";
|
||||
sha256 = "1v767a2j6lzp5yppfjna0ifv8psj60pphzd7njcdkx71dvpswpi2";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
@ -1,21 +1,22 @@
|
||||
{ stdenv, python2Packages, fetchurl, gettext }:
|
||||
{ stdenv, python3Packages, fetchurl, gettext, chromaprint }:
|
||||
|
||||
let
|
||||
pythonPackages = python2Packages;
|
||||
pythonPackages = python3Packages;
|
||||
in pythonPackages.buildPythonApplication rec {
|
||||
pname = "picard";
|
||||
version = "1.4.2";
|
||||
version = "2.0.4";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://ftp.musicbrainz.org/pub/musicbrainz/picard/picard-${version}.tar.gz";
|
||||
sha256 = "0d12k40d9fbcn801gp5zdsgvjdrh4g97vda3ga16rmmvfwwfxbgh";
|
||||
sha256 = "0ds3ylpqn717fnzcjrfn05v5xram01bj6n3hwn9igmkd1jgf8vhc";
|
||||
};
|
||||
|
||||
buildInputs = [ gettext ];
|
||||
|
||||
propagatedBuildInputs = with pythonPackages; [
|
||||
pyqt4
|
||||
pyqt5
|
||||
mutagen
|
||||
chromaprint
|
||||
discid
|
||||
];
|
||||
|
||||
@ -23,6 +24,11 @@ in pythonPackages.buildPythonApplication rec {
|
||||
python setup.py install --prefix="$out"
|
||||
'';
|
||||
|
||||
prePatch = ''
|
||||
# Pesky unicode punctuation.
|
||||
substituteInPlace setup.cfg --replace "‘" "'"
|
||||
'';
|
||||
|
||||
doCheck = false;
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
@ -9,7 +9,7 @@
|
||||
let optionals = stdenv.lib.optionals; in
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "quodlibet${tag}";
|
||||
version = "4.1.0";
|
||||
version = "4.2.0";
|
||||
|
||||
# XXX, tests fail
|
||||
# https://github.com/quodlibet/quodlibet/issues/2820
|
||||
@ -17,7 +17,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/quodlibet/quodlibet/releases/download/release-${version}/quodlibet-${version}.tar.gz";
|
||||
sha256 = "1vcxx4sz5i4ag74pjpdfw7jkwxfb8jhvn8igcjwd5cccw4gscm2z";
|
||||
sha256 = "0w64i999ipzgjb4c4lzw7jp792amd6km46wahx7m3bpzly55r3f6";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ wrapGAppsHook gettext intltool ];
|
||||
|
@ -1,9 +1,9 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, ninja, pkgconfig, vala, gtk3, libxml2, granite, webkitgtk, clutter-gtk
|
||||
{ stdenv, fetchFromGitHub, cmake, ninja, pkgconfig, vala_0_40, gtk3, libxml2, granite, webkitgtk, clutter-gtk
|
||||
, clutter-gst, libunity, libnotify, sqlite, gst_all_1, libsoup, json-glib, gnome3, gobjectIntrospection, wrapGAppsHook }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "vocal";
|
||||
version = "2.2.0";
|
||||
version = "2.3.0";
|
||||
|
||||
name = "${pname}-${version}";
|
||||
|
||||
@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
|
||||
owner = "needle-and-thread";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "09cm4azyaa9fmfymygf25gf0klpm5p04k6bc1i90jhw0f1im8sgl";
|
||||
sha256 = "1wkkyai14in4yk3q4qq23wk3l49px2xi8z819y3glna236qsq6qp";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@ -20,13 +20,14 @@ stdenv.mkDerivation rec {
|
||||
libxml2
|
||||
ninja
|
||||
pkgconfig
|
||||
vala
|
||||
vala_0_40 # should be `elementary.vala` when elementary attribute set is merged
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
buildInputs = with gst_all_1; [
|
||||
clutter-gst
|
||||
clutter-gtk
|
||||
gnome3.defaultIconTheme # should be `elementary.defaultIconTheme`when elementary attribute set is merged
|
||||
gnome3.libgee
|
||||
granite
|
||||
gst-plugins-base
|
||||
|
29
pkgs/applications/display-managers/ly/default.nix
Normal file
29
pkgs/applications/display-managers/ly/default.nix
Normal file
@ -0,0 +1,29 @@
|
||||
{ stdenv, lib, fetchFromGitHub, linux-pam }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "ly-${version}";
|
||||
version = "0.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cylgom";
|
||||
repo = "ly";
|
||||
rev = version;
|
||||
sha256 = "16gjcrd4a6i4x8q8iwlgdildm7cpdsja8z22pf2izdm6rwfki97d";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
buildInputs = [ linux-pam ];
|
||||
makeFlags = [ "FLAGS=-Wno-error" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp bin/ly $out/bin
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "TUI display manager";
|
||||
license = licenses.wtfpl;
|
||||
homepage = https://github.com/cylgom/ly;
|
||||
maintainers = [ maintainers.spacekookie ];
|
||||
};
|
||||
}
|
@ -13,14 +13,14 @@ let
|
||||
sha256Hash = "117skqjax1xz9plarhdnrw2rwprjpybdc7mx7wggxapyy920vv5r";
|
||||
};
|
||||
betaVersion = {
|
||||
version = "3.3.0.14"; # "Android Studio 3.3 Beta 2"
|
||||
build = "182.5078385";
|
||||
sha256Hash = "10jw508fzxbknfl1l058ksnnli2nav91wmh2x2p0mz96lkf5bvhn";
|
||||
version = "3.3.0.15"; # "Android Studio 3.3 Beta 3"
|
||||
build = "182.5105271";
|
||||
sha256Hash = "03j3g39v1g4jf5q37bd50zfqsgjfnwnyhjgx8vkfwlg263vhhvdq";
|
||||
};
|
||||
latestVersion = { # canary & dev
|
||||
version = "3.4.0.1"; # "Android Studio 3.4 Canary 2"
|
||||
build = "183.5081642";
|
||||
sha256Hash = "0ck6habkgnwbr10pr3bfy8ywm3dsm21k9jdj7g685v22sw0zy3yk";
|
||||
version = "3.4.0.2"; # "Android Studio 3.4 Canary 3"
|
||||
build = "183.5112304";
|
||||
sha256Hash = "0dzk4ag1dirfq8l2q91j6hsfyi07wx52qcsmbjb9a2710rlwpdhp";
|
||||
};
|
||||
in rec {
|
||||
# Old alias
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ stdenv, lib, fetchurl, ncurses, xlibsWrapper, libXaw, libXpm, Xaw3d
|
||||
, pkgconfig, gettext, libXft, dbus, libpng, libjpeg, libungif
|
||||
, libtiff, librsvg, gconf, libxml2, imagemagick, gnutls, libselinux
|
||||
, alsaLib, cairo, acl, gpm, AppKit, GSS, ImageIO
|
||||
, alsaLib, cairo, acl, gpm, cf-private, AppKit, GSS, ImageIO
|
||||
, withX ? !stdenv.isDarwin
|
||||
, withGTK2 ? false, gtk2 ? null
|
||||
, withGTK3 ? true, gtk3 ? null, gsettings-desktop-schemas ? null
|
||||
@ -61,9 +61,12 @@ stdenv.mkDerivation rec {
|
||||
++ lib.optional (withX && withGTK2) gtk2
|
||||
++ lib.optionals (withX && withGTK3) [ gtk3 gsettings-desktop-schemas ]
|
||||
++ lib.optional (stdenv.isDarwin && withX) cairo
|
||||
++ lib.optionals (withX && withXwidgets) [ webkitgtk24x-gtk3 glib-networking ];
|
||||
|
||||
propagatedBuildInputs = lib.optionals stdenv.isDarwin [ AppKit GSS ImageIO ];
|
||||
++ lib.optionals (withX && withXwidgets) [ webkitgtk24x-gtk3 glib-networking ]
|
||||
++ lib.optionals stdenv.isDarwin [
|
||||
AppKit GSS ImageIO
|
||||
# Needed for CFNotificationCenterAddObserver symbols.
|
||||
cf-private
|
||||
];
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ stdenv, lib, fetchurl, ncurses, xlibsWrapper, libXaw, libXpm, Xaw3d
|
||||
, pkgconfig, gettext, libXft, dbus, libpng, libjpeg, libungif
|
||||
, libtiff, librsvg, gconf, libxml2, imagemagick, gnutls, libselinux
|
||||
, alsaLib, cairo, acl, gpm, AppKit, GSS, ImageIO, m17n_lib, libotf
|
||||
, alsaLib, cairo, acl, gpm, cf-private, AppKit, GSS, ImageIO, m17n_lib, libotf
|
||||
, systemd ? null
|
||||
, withX ? !stdenv.isDarwin
|
||||
, withNS ? stdenv.isDarwin
|
||||
@ -64,9 +64,12 @@ stdenv.mkDerivation rec {
|
||||
++ lib.optional (withX && withGTK2) gtk2-x11
|
||||
++ lib.optionals (withX && withGTK3) [ gtk3-x11 gsettings-desktop-schemas ]
|
||||
++ lib.optional (stdenv.isDarwin && withX) cairo
|
||||
++ lib.optionals (withX && withXwidgets) [ webkitgtk ];
|
||||
|
||||
propagatedBuildInputs = lib.optionals withNS [ AppKit GSS ImageIO ];
|
||||
++ lib.optionals (withX && withXwidgets) [ webkitgtk ]
|
||||
++ lib.optionals withNS [
|
||||
AppKit GSS ImageIO
|
||||
# Needed for CFNotificationCenterAddObserver symbols.
|
||||
cf-private
|
||||
];
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
{ stdenv, fetchurl, ncurses, pkgconfig, texinfo, libxml2, gnutls, gettext, autoconf, automake
|
||||
, AppKit, Carbon, Cocoa, IOKit, OSAKit, Quartz, QuartzCore, WebKit
|
||||
, cf-private, AppKit, Carbon, Cocoa, IOKit, OSAKit, Quartz, QuartzCore, WebKit
|
||||
, ImageCaptureCore, GSS, ImageIO # These may be optional
|
||||
}:
|
||||
|
||||
@ -33,6 +33,8 @@ stdenv.mkDerivation rec {
|
||||
buildInputs = [ ncurses libxml2 gnutls texinfo gettext
|
||||
AppKit Carbon Cocoa IOKit OSAKit Quartz QuartzCore WebKit
|
||||
ImageCaptureCore GSS ImageIO # may be optional
|
||||
# Needed for CFNotificationCenterAddObserver symbols.
|
||||
cf-private
|
||||
];
|
||||
|
||||
postUnpack = ''
|
||||
|
48
pkgs/applications/editors/standardnotes/default.nix
Normal file
48
pkgs/applications/editors/standardnotes/default.nix
Normal file
@ -0,0 +1,48 @@
|
||||
{ stdenv, appimage-run, fetchurl }:
|
||||
|
||||
let
|
||||
version = "2.3.12";
|
||||
|
||||
plat = {
|
||||
"i386-linux" = "i386";
|
||||
"x86_64-linux" = "x86_64";
|
||||
}.${stdenv.hostPlatform.system};
|
||||
|
||||
sha256 = {
|
||||
"i386-linux" = "0q7izk20r14kxn3n4pn92jgnynfnlnylg55brz8n1lqxc0dc3v24";
|
||||
"x86_64-linux" = "0myg4qv0vrwh8s9sckb12ld9f86ymx4yypvpy0w5qn1bxk5hbafc";
|
||||
}.${stdenv.hostPlatform.system};
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "standardnotes-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/standardnotes/desktop/releases/download/v${version}/standard-notes-${version}-${plat}.AppImage";
|
||||
inherit sha256;
|
||||
};
|
||||
|
||||
buildInputs = [ appimage-run ];
|
||||
|
||||
unpackPhase = ":";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/{bin,share}
|
||||
cp $src $out/share/standardNotes.AppImage
|
||||
echo "#!/bin/sh" > $out/bin/standardnotes
|
||||
echo "${appimage-run}/bin/appimage-run $out/share/standardNotes.AppImage" >> $out/bin/standardnotes
|
||||
chmod +x $out/bin/standardnotes $out/share/standardNotes.AppImage
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "A simple and private notes app";
|
||||
longDescription = ''
|
||||
Standard Notes is a private notes app that features unmatched simplicity,
|
||||
end-to-end encryption, powerful extensions, and open-source applications.
|
||||
'';
|
||||
homepage = https://standardnotes.org;
|
||||
license = licenses.agpl3;
|
||||
maintainers = with maintainers; [ mgregoire ];
|
||||
platforms = [ "i386-linux" "x86_64-linux" ];
|
||||
};
|
||||
}
|
@ -2,12 +2,12 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "texmaker";
|
||||
version = "5.0.2";
|
||||
version = "5.0.3";
|
||||
name = "${pname}-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.xm1math.net/texmaker/${name}.tar.bz2";
|
||||
sha256 = "0y81mjm89b99pr9svcwpaf4iz2q9pc9hjas5kiwd1pbgl5vqskm9";
|
||||
sha256 = "0vrj9w5lk3vf6138n5bz8phmy3xp5kv4dq1rgirghcf4hbxdyx30";
|
||||
};
|
||||
|
||||
buildInputs = [ qtbase qtscript poppler zlib ];
|
||||
|
@ -6,7 +6,7 @@
|
||||
sha256 = "18ifhv5q9prd175q3vxbqf6qyvkk6bc7d2lhqdk0q78i68kv9y0c";
|
||||
}
|
||||
# apple frameworks
|
||||
, Carbon, Cocoa
|
||||
, cf-private, Carbon, Cocoa
|
||||
}:
|
||||
|
||||
let
|
||||
@ -19,7 +19,11 @@ stdenv.mkDerivation rec {
|
||||
|
||||
nativeBuildInputs = [ gettext pkgconfig ];
|
||||
buildInputs = [ ncurses ]
|
||||
++ stdenv.lib.optionals stdenv.hostPlatform.isDarwin [ Carbon Cocoa ];
|
||||
++ stdenv.lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
Carbon Cocoa
|
||||
# Needed for OBJC_CLASS_$_NSArray symbols.
|
||||
cf-private
|
||||
];
|
||||
|
||||
configureFlags = [
|
||||
"--enable-multibyte"
|
||||
|
@ -6,11 +6,11 @@ with stdenv.lib;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "feh-${version}";
|
||||
version = "2.28";
|
||||
version = "2.28.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://feh.finalrewind.org/${name}.tar.bz2";
|
||||
sha256 = "1nfka7w6pzj2bbwx8vydr2wwm7z8mrbqiy1xrq97c1g5bxy2vlhk";
|
||||
sha256 = "0wian0gnx0yfxf8x9b8wr57fjd6rnmi3y3xj83ni6x0xqrjnf1lp";
|
||||
};
|
||||
|
||||
outputs = [ "out" "man" "doc" ];
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, fetchurl, pkgconfig, intltool, babl, gegl, gtk2, glib, gdk_pixbuf, isocodes
|
||||
{ stdenv, fetchurl, substituteAll, pkgconfig, intltool, babl, gegl, gtk2, glib, gdk_pixbuf, isocodes
|
||||
, pango, cairo, freetype, fontconfig, lcms, libpng, libjpeg, poppler, poppler_data, libtiff
|
||||
, libmng, librsvg, libwmf, zlib, libzip, ghostscript, aalib, shared-mime-info
|
||||
, python2Packages, libexif, gettext, xorg, glib-networking, libmypaint, gexiv2
|
||||
@ -9,11 +9,11 @@ let
|
||||
inherit (python2Packages) pygtk wrapPython python;
|
||||
in stdenv.mkDerivation rec {
|
||||
name = "gimp-${version}";
|
||||
version = "2.10.6";
|
||||
version = "2.10.8";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://download.gimp.org/pub/gimp/v${stdenv.lib.versions.majorMinor version}/${name}.tar.bz2";
|
||||
sha256 = "07qh2ljbza2mph1gh8sicn27qihhj8hx3ivvry2874cfh8ghgj2f";
|
||||
sha256 = "16sb4kslwin2jbgdb4nhks78pd0af8mvj8g5hap3hj946p7w2jfq";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig intltool gettext wrapPython ];
|
||||
@ -36,6 +36,15 @@ in stdenv.mkDerivation rec {
|
||||
export GIO_EXTRA_MODULES="${glib-networking}/lib/gio/modules:$GIO_EXTRA_MODULES"
|
||||
'';
|
||||
|
||||
patches = [
|
||||
# to remove compiler from the runtime closure, reference was retained via
|
||||
# gimp --version --verbose output
|
||||
(substituteAll {
|
||||
src = ./remove-cc-reference.patch;
|
||||
cc_version = stdenv.cc.cc.name;
|
||||
})
|
||||
];
|
||||
|
||||
postFixup = ''
|
||||
wrapPythonProgramsIn $out/lib/gimp/${passthru.majorVersion}/plug-ins/
|
||||
wrapProgram $out/bin/gimp-${stdenv.lib.versions.majorMinor version} \
|
||||
|
13
pkgs/applications/graphics/gimp/remove-cc-reference.patch
Normal file
13
pkgs/applications/graphics/gimp/remove-cc-reference.patch
Normal file
@ -0,0 +1,13 @@
|
||||
diff --git a/app/gimp-version.c b/app/gimp-version.c
|
||||
index 12605c6..a9083da 100644
|
||||
--- a/app/gimp-version.c
|
||||
+++ b/app/gimp-version.c
|
||||
@@ -203,7 +203,7 @@ gimp_version (gboolean be_verbose,
|
||||
lib_versions = gimp_library_versions (localized);
|
||||
verbose_info = g_strdup_printf ("git-describe: %s\n"
|
||||
"C compiler:\n%s\n%s",
|
||||
- GIMP_GIT_VERSION, CC_VERSION,
|
||||
+ GIMP_GIT_VERSION, "@cc_version@",
|
||||
lib_versions);
|
||||
g_free (lib_versions);
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "krop";
|
||||
version = "0.5.0";
|
||||
version = "0.5.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "arminstraub";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "0y8z9xr10wbzmi1dg1zpcsf3ihnxrnvlaf72821x3390s3qsnydf";
|
||||
sha256 = "0b1zqpks4vzq7sfhf7r9qrshr77f1ncj18x7d0fa3g29rxa42dcr";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = with python3Packages; [
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "openimageio-${version}";
|
||||
version = "1.8.15";
|
||||
version = "1.8.16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "OpenImageIO";
|
||||
repo = "oiio";
|
||||
rev = "Release-${version}";
|
||||
sha256 = "0fbl5rzmip5q155lfsr07n65dnhww1kw97masps1i1x40gq15czx";
|
||||
sha256 = "0isx137c6anvs1xfxi0z35v1cw855xvnq2ca0pakqqpdh0yivrps";
|
||||
};
|
||||
|
||||
outputs = [ "bin" "out" "dev" "doc" ];
|
||||
|
@ -2,15 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "phototonic-${version}";
|
||||
version = "1.7.1";
|
||||
version = "2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
repo = "phototonic";
|
||||
owner = "oferkv";
|
||||
# There is currently no tag for 1.7.1 see
|
||||
# https://github.com/oferkv/phototonic/issues/214
|
||||
rev = "c37070e4a068570d34ece8de1e48aa0882c80c5b";
|
||||
sha256 = "1agd3bsrpljd019qrjvlbim5l0bhpx53dhpc0gvyn0wmcdzn92gj";
|
||||
rev = "v${version}";
|
||||
sha256 = "0csidmxl1sfmn6gq81vn9f9jckb4swz3sgngnwqa4f75lr6604h7";
|
||||
};
|
||||
|
||||
buildInputs = [ qtbase exiv2 ];
|
||||
|
@ -6,11 +6,11 @@
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "rapid-photo-downloader";
|
||||
version = "0.9.12";
|
||||
version = "0.9.13";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://launchpad.net/rapid/pyqt/${version}/+download/${pname}-${version}.tar.gz";
|
||||
sha256 = "0nzahps7hs120xv2r55k293kialf83nx44x3jg85yh349rpqrii8";
|
||||
sha256 = "1517w18sxil1gwd78jjbbixcd1b0sp05imnnd5h5lr8wl3f0szj0";
|
||||
};
|
||||
|
||||
# Disable version check and fix install tests
|
||||
|
25
pkgs/applications/graphics/yacreader/default.nix
Normal file
25
pkgs/applications/graphics/yacreader/default.nix
Normal file
@ -0,0 +1,25 @@
|
||||
{ stdenv, fetchurl, qmake, poppler, pkgconfig, libunarr, libGLU
|
||||
, qtdeclarative, qtgraphicaleffects, qtmultimedia, qtquickcontrols, qtscript
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "yacreader-${version}";
|
||||
version = "9.5.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/YACReader/yacreader/releases/download/${version}/${name}-src.tar.xz";
|
||||
sha256 = "0cv5y76kjvsqsv4fp99j8np5pm4m76868i1nn40q6hy573dmxwm6";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake pkgconfig ];
|
||||
buildInputs = [ poppler libunarr libGLU qtmultimedia qtscript ];
|
||||
propagatedBuildInputs = [ qtquickcontrols qtgraphicaleffects qtdeclarative ];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = {
|
||||
description = "A comic reader for cross-platform reading and managing your digital comic collection";
|
||||
homepage = http://www.yacreader.com;
|
||||
license = stdenv.lib.licenses.gpl3;
|
||||
};
|
||||
}
|
@ -18,6 +18,7 @@
|
||||
libGL,
|
||||
xclip,
|
||||
# Darwin Frameworks
|
||||
cf-private,
|
||||
AppKit,
|
||||
CoreFoundation,
|
||||
CoreGraphics,
|
||||
@ -40,15 +41,6 @@ let
|
||||
libGL
|
||||
libXi
|
||||
];
|
||||
darwinFrameworks = [
|
||||
AppKit
|
||||
CoreFoundation
|
||||
CoreGraphics
|
||||
CoreServices
|
||||
CoreText
|
||||
Foundation
|
||||
OpenGL
|
||||
];
|
||||
in buildRustPackage rec {
|
||||
name = "alacritty-unstable-${version}";
|
||||
version = "0.2.1";
|
||||
@ -71,7 +63,11 @@ in buildRustPackage rec {
|
||||
];
|
||||
|
||||
buildInputs = rpathLibs
|
||||
++ lib.optionals stdenv.isDarwin darwinFrameworks;
|
||||
++ lib.optionals stdenv.isDarwin [
|
||||
AppKit CoreFoundation CoreGraphics CoreServices CoreText Foundation OpenGL
|
||||
# Needed for CFURLResourceIsReachable symbols.
|
||||
cf-private
|
||||
];
|
||||
|
||||
outputs = [ "out" "terminfo" ];
|
||||
|
||||
|
28
pkgs/applications/misc/archiver/default.nix
Normal file
28
pkgs/applications/misc/archiver/default.nix
Normal file
@ -0,0 +1,28 @@
|
||||
{ buildGoPackage
|
||||
, fetchFromGitHub
|
||||
, lib
|
||||
}:
|
||||
|
||||
buildGoPackage rec {
|
||||
name = "archiver-${version}";
|
||||
version = "3.0.0";
|
||||
|
||||
goPackagePath = "github.com/mholt/archiver";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mholt";
|
||||
repo = "archiver";
|
||||
rev = "v${version}";
|
||||
sha256 = "1wngv51333h907mp6nbzd9dq6r0x06mag2cij92912jcbzy0q8bk";
|
||||
};
|
||||
|
||||
goDeps = ./deps.nix;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Easily create and extract .zip, .tar, .tar.gz, .tar.bz2, .tar.xz, .tar.lz4, .tar.sz, and .rar (extract-only) files with Go";
|
||||
homepage = https://github.com/mholt/archiver;
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ kalbasit ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
56
pkgs/applications/misc/archiver/deps.nix
generated
Normal file
56
pkgs/applications/misc/archiver/deps.nix
generated
Normal file
@ -0,0 +1,56 @@
|
||||
[
|
||||
{
|
||||
goPackagePath = "github.com/dsnet/compress";
|
||||
fetch = {
|
||||
type = "git";
|
||||
url = "https://github.com/dsnet/compress";
|
||||
rev = "cc9eb1d7ad760af14e8f918698f745e80377af4f";
|
||||
sha256 = "159liclywmyb6zx88ga5gn42hfl4cpk1660zss87fkx31hdq9fgx";
|
||||
};
|
||||
}
|
||||
{
|
||||
goPackagePath = "github.com/golang/snappy";
|
||||
fetch = {
|
||||
type = "git";
|
||||
url = "https://github.com/golang/snappy";
|
||||
rev = "2e65f85255dbc3072edf28d6b5b8efc472979f5a";
|
||||
sha256 = "05w6mpc4qcy0pv8a2bzng8nf4s5rf5phfang4jwy9rgf808q0nxf";
|
||||
};
|
||||
}
|
||||
{
|
||||
goPackagePath = "github.com/nwaples/rardecode";
|
||||
fetch = {
|
||||
type = "git";
|
||||
url = "https://github.com/nwaples/rardecode";
|
||||
rev = "197ef08ef68c4454ae5970a9c2692d6056ceb8d7";
|
||||
sha256 = "0vvijw7va283dbdvnf4bgkn7bjngxqzk1rzdpy8sl343r62bmh4g";
|
||||
};
|
||||
}
|
||||
{
|
||||
goPackagePath = "github.com/pierrec/lz4";
|
||||
fetch = {
|
||||
type = "git";
|
||||
url = "https://github.com/pierrec/lz4";
|
||||
rev = "623b5a2f4d2a41e411730dcdfbfdaeb5c0c4564e";
|
||||
sha256 = "1hhf7vyz5irrqs7ixdmvsvzmy9izv3ha8jbyy0cs486h61nzqkki";
|
||||
};
|
||||
}
|
||||
{
|
||||
goPackagePath = "github.com/ulikunitz/xz";
|
||||
fetch = {
|
||||
type = "git";
|
||||
url = "https://github.com/ulikunitz/xz";
|
||||
rev = "590df8077fbcb06ad62d7714da06c00e5dd2316d";
|
||||
sha256 = "07mivr4aiw3b8qzwajsxyjlpbkf3my4xx23lv0yryc4pciam5lhy";
|
||||
};
|
||||
}
|
||||
{
|
||||
goPackagePath = "github.com/xi2/xz";
|
||||
fetch = {
|
||||
type = "git";
|
||||
url = "https://github.com/xi2/xz";
|
||||
rev = "48954b6210f8d154cb5f8484d3a3e1f83489309e";
|
||||
sha256 = "178r0fa2dpzxf0sabs7dn0c8fa7vs87zlxk6spkn374ls9pir7nq";
|
||||
};
|
||||
}
|
||||
]
|
@ -1,7 +1,7 @@
|
||||
{ stdenv, fetchurl, poppler_utils, pkgconfig, libpng
|
||||
, imagemagick, libjpeg, fontconfig, podofo, qtbase, qmake, icu, sqlite
|
||||
, makeWrapper, unrarSupport ? false, chmlib, python2Packages, libusb1, libmtp
|
||||
, xdg_utils, makeDesktopItem, wrapGAppsHook
|
||||
, xdg_utils, makeDesktopItem, wrapGAppsHook, removeReferencesTo
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
nativeBuildInputs = [ makeWrapper pkgconfig qmake ];
|
||||
nativeBuildInputs = [ makeWrapper pkgconfig qmake removeReferencesTo ];
|
||||
|
||||
buildInputs = [
|
||||
poppler_utils libpng imagemagick libjpeg
|
||||
@ -58,8 +58,8 @@ stdenv.mkDerivation rec {
|
||||
export MAGICK_LIB=${imagemagick.out}/lib
|
||||
export FC_INC_DIR=${fontconfig.dev}/include/fontconfig
|
||||
export FC_LIB_DIR=${fontconfig.lib}/lib
|
||||
export PODOFO_INC_DIR=${podofo}/include/podofo
|
||||
export PODOFO_LIB_DIR=${podofo}/lib
|
||||
export PODOFO_INC_DIR=${podofo.dev}/include/podofo
|
||||
export PODOFO_LIB_DIR=${podofo.lib}/lib
|
||||
export SIP_BIN=${python2Packages.sip}/bin/sip
|
||||
${python2Packages.python.interpreter} setup.py install --prefix=$out
|
||||
|
||||
@ -88,6 +88,15 @@ stdenv.mkDerivation rec {
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# Remove some references to shrink the closure size. This reference (as of
|
||||
# 2018-11-06) was a single string like the following:
|
||||
# /nix/store/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-podofo-0.9.6-dev/include/podofo/base/PdfVariant.h
|
||||
preFixup = ''
|
||||
remove-references-to -t ${podofo.dev} $out/lib/calibre/calibre/plugins/podofo.so
|
||||
'';
|
||||
|
||||
disallowedReferences = [ podofo.dev ];
|
||||
|
||||
calibreDesktopItem = makeDesktopItem {
|
||||
name = "calibre";
|
||||
desktopName = "calibre";
|
||||
|
@ -4,7 +4,7 @@ with python3Packages;
|
||||
buildPythonApplication rec {
|
||||
name = "${pname}-${version}";
|
||||
pname = "cheat";
|
||||
version = "2.2.3";
|
||||
version = "2.3.1";
|
||||
|
||||
propagatedBuildInputs = [ docopt pygments ];
|
||||
|
||||
@ -12,7 +12,7 @@ buildPythonApplication rec {
|
||||
owner = "chrisallenlane";
|
||||
repo = "cheat";
|
||||
rev = version;
|
||||
sha256 = "1p9a54fax3b1ilqcwdlccy08ww3igwsyzcyikqivaxj5p6mqq6wl";
|
||||
sha256 = "1dcpjvbv648r8325qjf30m8b4cyrrjbzc2kvh40zy2mbjsa755zr";
|
||||
};
|
||||
# no tests available
|
||||
doCheck = false;
|
||||
|
@ -3,11 +3,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "chirp-daily-${version}";
|
||||
version = "20181009";
|
||||
version = "20181018";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://trac.chirp.danplanet.com/chirp_daily/daily-${version}/${name}.tar.gz";
|
||||
sha256 = "1h7i8skdjkz7n6dz3q9pzg1k31nh1ivy2mx3864bjvpkc7m6yyd9";
|
||||
sha256 = "0jd7xi6q09b3djn1k7pj1sbqvw24kn7dcp9r6abvxily4pc1xhdr";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
@ -5,13 +5,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "CopyQ-${version}";
|
||||
version = "3.6.1";
|
||||
version = "3.7.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hluk";
|
||||
repo = "CopyQ";
|
||||
rev = "v${version}";
|
||||
sha256 = "0drhafnr1d595wa8zwvmgmrrqb86navdk4iw6ly6gmh0i800wz0z";
|
||||
sha256 = "1dm02l1ry7ndn283774nzmg89wy1933f4iyf6n02p152zgx4llyf";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dbeaver-ce-${version}";
|
||||
version = "5.2.2";
|
||||
version = "5.2.4";
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
name = "dbeaver";
|
||||
@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dbeaver.io/files/${version}/dbeaver-ce-${version}-linux.gtk.x86_64.tar.gz";
|
||||
sha256 = "1rrj0c7ksvv9irsz9hb4ip30qgmzps4dy1nj4vl8mzzf389xa43n";
|
||||
sha256 = "1zwbqr5s76r77x7klydpqbaqakzzilzv92ddyck1sj5jiy5prwpp";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
|
@ -3,13 +3,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dmrconfig-${version}";
|
||||
version = "2018-10-29";
|
||||
version = "2018-11-07";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sergev";
|
||||
repo = "dmrconfig";
|
||||
rev = "4924d00283c3c81a4b8251669e42aecd96b6145a";
|
||||
sha256 = "00a4hmbr71g0d4faskb8q96y6z212g2r4n533yvp88z8rq8vbxxn";
|
||||
rev = "b58985d3c848b927e91699d97f96d9de014c3fc7";
|
||||
sha256 = "083f21hz6vqjpndkn27nsjnhnc5a4bw0cr26ryfqcvz275rj4k18";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
@ -20,8 +20,10 @@ stdenv.mkDerivation rec {
|
||||
substituteInPlace Makefile --replace /usr/local/bin/dmrconfig $out/bin/dmrconfig
|
||||
'';
|
||||
|
||||
preInstall = ''
|
||||
mkdir -p $out/bin
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/lib/udev/rules.d
|
||||
make install
|
||||
install 99-dmr.rules $out/lib/udev/rules.d/99-dmr.rules
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, fetchgit, fetchurl, writeScript
|
||||
{ stdenv, writeScript, fetchFromGitHub
|
||||
, libGL, libX11, libXext, python3, libXrandr, libXrender, libpulseaudio, libXcomposite
|
||||
, enableGlfw ? false, glfw }:
|
||||
|
||||
@ -22,12 +22,13 @@ let
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "glava-${version}";
|
||||
version = "1.5.5";
|
||||
version = "1.5.8";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://github.com/wacossusca34/glava.git";
|
||||
src = fetchFromGitHub {
|
||||
owner = "wacossusca34";
|
||||
repo = "glava";
|
||||
rev = "v${version}";
|
||||
sha256 = "0mpbgllwz45wkax6pgvnh1pz2q4yvbzq2l8z8kff13wrsdvl8lh0";
|
||||
sha256 = "0mps82qw2mhxx8069jvqz1v8n4x7ybrrjv92ij6cms8xi1y8v0fm";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
@ -47,6 +47,7 @@ stdenv.mkDerivation rec {
|
||||
cmakeFlags = [
|
||||
"-DGFlags_ROOT_DIR=${google-gflags}/lib"
|
||||
"-DGLOG_INCLUDE_DIR=${glog}/include"
|
||||
"-DENABLE_UNIT_TESTING=OFF"
|
||||
|
||||
# gnss-sdr doesn't truly depend on BLAS or LAPACK, as long as
|
||||
# armadillo is built using both, so skip checking for them.
|
||||
|
@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
|
||||
src = fetchFromGitHub {
|
||||
owner = "bastibl";
|
||||
repo = "gr-rds";
|
||||
rev = "$v{version}";
|
||||
rev = "v${version}";
|
||||
sha256 = "008284ya464q4h4fd0zvcn6g7bym231p8fl3kdxncz9ks4zsbsxs";
|
||||
};
|
||||
|
||||
|
@ -39,7 +39,7 @@ GEM
|
||||
nokogiri (1.8.4)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
posix-spawn (0.3.13)
|
||||
rack (1.6.10)
|
||||
rack (1.6.11)
|
||||
rack-protection (1.5.5)
|
||||
rack
|
||||
rouge (2.2.1)
|
||||
@ -65,4 +65,4 @@ DEPENDENCIES
|
||||
gollum
|
||||
|
||||
BUNDLED WITH
|
||||
1.16.3
|
||||
1.16.4
|
||||
|
@ -137,10 +137,10 @@
|
||||
rack = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0in0amn0kwvzmi8h5zg6ijrx5wpsf8h96zrfmnk1kwh2ql4sxs2q";
|
||||
sha256 = "1g9926ln2lw12lfxm4ylq1h6nl0rafl10za3xvjzc87qvnqic87f";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.6.10";
|
||||
version = "1.6.11";
|
||||
};
|
||||
rack-protection = {
|
||||
dependencies = ["rack"];
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "gpxsee-${version}";
|
||||
version = "6.2";
|
||||
version = "6.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tumic0";
|
||||
repo = "GPXSee";
|
||||
rev = version;
|
||||
sha256 = "13hd6n5mzkk4nx9v9dwg8vvixr73zjba72h6vmxvz9fmywc4rs5p";
|
||||
sha256 = "0kbnmcis04kjqkd0msfjd8rdmdf23c71dpzx9wcpf2yadc9rv4c9";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake ];
|
||||
|
35
pkgs/applications/misc/hovercraft/default.nix
Normal file
35
pkgs/applications/misc/hovercraft/default.nix
Normal file
@ -0,0 +1,35 @@
|
||||
{ lib
|
||||
, buildPythonApplication
|
||||
, isPy3k
|
||||
, fetchFromGitHub
|
||||
, manuel
|
||||
, setuptools
|
||||
, docutils
|
||||
, lxml
|
||||
, svg-path
|
||||
, pygments
|
||||
, watchdog
|
||||
}:
|
||||
|
||||
buildPythonApplication rec {
|
||||
pname = "hovercraft";
|
||||
version = "2.6";
|
||||
disabled = ! isPy3k;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "regebro";
|
||||
repo = "hovercraft";
|
||||
rev = version;
|
||||
sha256 = "150sn6kvqi2s89di1akl5i0g81fasji2ipr12zq5s4dcnhw4r5wp";
|
||||
};
|
||||
|
||||
checkInputs = [ manuel ];
|
||||
propagatedBuildInputs = [ setuptools docutils lxml svg-path pygments watchdog ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Makes impress.js presentations from reStructuredText";
|
||||
homepage = https://github.com/regebro/hovercraft;
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ goibhniu makefu ];
|
||||
};
|
||||
}
|
@ -9,7 +9,7 @@ GEM
|
||||
addressable (2.5.2)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.0.5)
|
||||
concurrent-ruby (1.1.1)
|
||||
em-websocket (0.5.1)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
@ -23,7 +23,7 @@ GEM
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.8.4)
|
||||
jekyll (3.8.5)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
@ -47,14 +47,14 @@ GEM
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (1.2.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-watch (2.0.0)
|
||||
jekyll-watch (2.1.2)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.10.1)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (~> 3.0)
|
||||
kramdown (1.17.0)
|
||||
liquid (4.0.0)
|
||||
liquid (4.0.1)
|
||||
listen (3.1.5)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
@ -62,18 +62,18 @@ GEM
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.3.0)
|
||||
minitest (5.11.3)
|
||||
nokogiri (1.8.4)
|
||||
nokogiri (1.8.5)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
pathutil (0.16.1)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (3.0.3)
|
||||
rb-fsevent (0.10.3)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
rouge (3.2.1)
|
||||
rouge (3.3.0)
|
||||
ruby_dep (1.5.0)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.5.7)
|
||||
sass (3.6.0)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
@ -96,4 +96,4 @@ DEPENDENCIES
|
||||
rouge
|
||||
|
||||
BUNDLED WITH
|
||||
1.16.3
|
||||
1.16.4
|
||||
|
@ -28,10 +28,10 @@
|
||||
concurrent-ruby = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
|
||||
sha256 = "1bnr2dlj2a11qy3rwh6m1mv5419vy32j2axk3ln7bphyvwn7pli0";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.5";
|
||||
version = "1.1.1";
|
||||
};
|
||||
em-websocket = {
|
||||
dependencies = ["eventmachine" "http_parser.rb"];
|
||||
@ -104,10 +104,10 @@
|
||||
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "01rnf0y7wx4rzh2ag74bg37vkxbg8m4nf450lypgh4khrarr3bhw";
|
||||
sha256 = "1nn2sc308l2mz0yiall4r90l6vy67qp4sy9zapi73a948nd4a5k3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.8.4";
|
||||
version = "3.8.5";
|
||||
};
|
||||
jekyll-avatar = {
|
||||
dependencies = ["jekyll"];
|
||||
@ -158,10 +158,10 @@
|
||||
dependencies = ["listen"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp";
|
||||
sha256 = "1s9ly83sp8albvgdff12xy2h4xd8lm6z2fah4lzmk2yvp85jzdzv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.0";
|
||||
version = "2.1.2";
|
||||
};
|
||||
jemoji = {
|
||||
dependencies = ["gemoji" "html-pipeline" "jekyll"];
|
||||
@ -183,10 +183,10 @@
|
||||
liquid = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y";
|
||||
sha256 = "0bs9smxgj29s4k76zfj09f7mhd35qwm9zki1yqa4jfwiki8v97nw";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.0.0";
|
||||
version = "4.0.1";
|
||||
};
|
||||
listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
|
||||
@ -225,19 +225,19 @@
|
||||
dependencies = ["mini_portile2"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1h9nml9h3m0mpvmh8jfnqvblnz5n5y3mmhgfc38avfmfzdrq9bgc";
|
||||
sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.8.4";
|
||||
version = "1.8.5";
|
||||
};
|
||||
pathutil = {
|
||||
dependencies = ["forwardable-extended"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0wc18ms1rzi44lpjychyw2a96jcmgxqdvy2949r4vvb5f4p0lgvz";
|
||||
sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.16.1";
|
||||
version = "0.16.2";
|
||||
};
|
||||
public_suffix = {
|
||||
source = {
|
||||
@ -267,10 +267,10 @@
|
||||
rouge = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0h79gn2wmn1wix2d27lgiaimccyj8gvizrllyym500pir408x62f";
|
||||
sha256 = "1digsi2s8wyzx8vsqcxasw205lg6s7izx8jypl8rrpjwshmv83ql";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2.1";
|
||||
version = "3.3.0";
|
||||
};
|
||||
ruby_dep = {
|
||||
source = {
|
||||
@ -292,10 +292,10 @@
|
||||
dependencies = ["sass-listen"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1sy7xsbgpcy90j5ynbq967yplffp74pvph3r8ivn2sv2b44q6i61";
|
||||
sha256 = "18c6prbw9wl8bqhb2435pd9s0lzarl3g7xf8pmyla28zblvwxmyh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.5.7";
|
||||
version = "3.6.0";
|
||||
};
|
||||
sass-listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify"];
|
||||
|
@ -16,7 +16,7 @@ GEM
|
||||
execjs
|
||||
coffee-script-source (1.11.1)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.0.5)
|
||||
concurrent-ruby (1.1.1)
|
||||
em-websocket (0.5.1)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
@ -34,7 +34,7 @@ GEM
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.8.4)
|
||||
jekyll (3.8.5)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
@ -68,14 +68,14 @@ GEM
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (1.2.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-watch (2.0.0)
|
||||
jekyll-watch (2.1.2)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.10.1)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (~> 3.0)
|
||||
kramdown (1.17.0)
|
||||
liquid (4.0.0)
|
||||
liquid (4.0.1)
|
||||
liquid-c (3.0.0)
|
||||
liquid (>= 3.0.0)
|
||||
listen (3.1.5)
|
||||
@ -90,11 +90,11 @@ GEM
|
||||
minitest (5.11.3)
|
||||
multi_json (1.13.1)
|
||||
multipart-post (2.0.0)
|
||||
nokogiri (1.8.4)
|
||||
nokogiri (1.8.5)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
octokit (4.12.0)
|
||||
octokit (4.13.0)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
pathutil (0.16.1)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (3.0.3)
|
||||
pygments.rb (1.2.1)
|
||||
@ -105,10 +105,10 @@ GEM
|
||||
rdiscount (2.2.0.1)
|
||||
rdoc (6.0.4)
|
||||
redcarpet (3.4.0)
|
||||
rouge (3.2.1)
|
||||
rouge (3.3.0)
|
||||
ruby_dep (1.5.0)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.5.7)
|
||||
sass (3.6.0)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
@ -152,4 +152,4 @@ DEPENDENCIES
|
||||
yajl-ruby (~> 1.3.1)
|
||||
|
||||
BUNDLED WITH
|
||||
1.16.3
|
||||
1.16.4
|
||||
|
@ -62,10 +62,10 @@
|
||||
concurrent-ruby = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
|
||||
sha256 = "1bnr2dlj2a11qy3rwh6m1mv5419vy32j2axk3ln7bphyvwn7pli0";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.5";
|
||||
version = "1.1.1";
|
||||
};
|
||||
em-websocket = {
|
||||
dependencies = ["eventmachine" "http_parser.rb"];
|
||||
@ -163,10 +163,10 @@
|
||||
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "01rnf0y7wx4rzh2ag74bg37vkxbg8m4nf450lypgh4khrarr3bhw";
|
||||
sha256 = "1nn2sc308l2mz0yiall4r90l6vy67qp4sy9zapi73a948nd4a5k3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.8.4";
|
||||
version = "3.8.5";
|
||||
};
|
||||
jekyll-avatar = {
|
||||
dependencies = ["jekyll"];
|
||||
@ -261,10 +261,10 @@
|
||||
dependencies = ["listen"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp";
|
||||
sha256 = "1s9ly83sp8albvgdff12xy2h4xd8lm6z2fah4lzmk2yvp85jzdzv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.0";
|
||||
version = "2.1.2";
|
||||
};
|
||||
jemoji = {
|
||||
dependencies = ["gemoji" "html-pipeline" "jekyll"];
|
||||
@ -286,10 +286,10 @@
|
||||
liquid = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y";
|
||||
sha256 = "0bs9smxgj29s4k76zfj09f7mhd35qwm9zki1yqa4jfwiki8v97nw";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.0.0";
|
||||
version = "4.0.1";
|
||||
};
|
||||
liquid-c = {
|
||||
dependencies = ["liquid"];
|
||||
@ -370,28 +370,28 @@
|
||||
dependencies = ["mini_portile2"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1h9nml9h3m0mpvmh8jfnqvblnz5n5y3mmhgfc38avfmfzdrq9bgc";
|
||||
sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.8.4";
|
||||
version = "1.8.5";
|
||||
};
|
||||
octokit = {
|
||||
dependencies = ["sawyer"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1lki5vlsiijdmhaqdvr29zmcyvrlmkgi0x92hgan2194l2ikfjlh";
|
||||
sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.12.0";
|
||||
version = "4.13.0";
|
||||
};
|
||||
pathutil = {
|
||||
dependencies = ["forwardable-extended"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0wc18ms1rzi44lpjychyw2a96jcmgxqdvy2949r4vvb5f4p0lgvz";
|
||||
sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.16.1";
|
||||
version = "0.16.2";
|
||||
};
|
||||
public_suffix = {
|
||||
source = {
|
||||
@ -454,10 +454,10 @@
|
||||
rouge = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0h79gn2wmn1wix2d27lgiaimccyj8gvizrllyym500pir408x62f";
|
||||
sha256 = "1digsi2s8wyzx8vsqcxasw205lg6s7izx8jypl8rrpjwshmv83ql";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2.1";
|
||||
version = "3.3.0";
|
||||
};
|
||||
ruby_dep = {
|
||||
source = {
|
||||
@ -479,10 +479,10 @@
|
||||
dependencies = ["sass-listen"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1sy7xsbgpcy90j5ynbq967yplffp74pvph3r8ivn2sv2b44q6i61";
|
||||
sha256 = "18c6prbw9wl8bqhb2435pd9s0lzarl3g7xf8pmyla28zblvwxmyh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.5.7";
|
||||
version = "3.6.0";
|
||||
};
|
||||
sass-listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify"];
|
||||
|
@ -20,12 +20,12 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "kdeconnect";
|
||||
version = "1.3.1";
|
||||
version = "1.3.3";
|
||||
name = "${pname}-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://kde/stable/${pname}/${version}/src/${pname}-kde-${version}.tar.xz";
|
||||
sha256 = "0rzjbn4d2lh81n19dd3a5ilm8qml3zs3g3ahg75avcw8770rr344";
|
||||
sha256 = "1vac0mw1myrswr61adv7lgif0c4wzw5wnsj0sqxj6msp4l4pfgsg";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
@ -1,12 +1,12 @@
|
||||
{ stdenv, buildEnv, fetchurl, mono }:
|
||||
|
||||
let
|
||||
version = "1.7.3.1";
|
||||
version = "1.8.0";
|
||||
drv = stdenv.mkDerivation {
|
||||
name = "keepassrpc-${version}";
|
||||
src = fetchurl {
|
||||
url = "https://github.com/kee-org/keepassrpc/releases/download/v${version}/KeePassRPC.plgx";
|
||||
sha256 = "1y9b35qg27caj3pbaqqzrqpk61hbbd8617ziwdc9vl799i786m9k";
|
||||
sha256 = "1dclfpia559cqf78qw29zz235h1df5md4kgjv3bbi8y41wwmx7cd";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
@ -14,7 +14,7 @@ let
|
||||
homepage = https://github.com/kee-org/keepassrpc;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
license = licenses.gpl2;
|
||||
maintainers = with maintainers; [ mjanczyk svsdep ];
|
||||
maintainers = with maintainers; [ mjanczyk svsdep mgregoire ];
|
||||
};
|
||||
|
||||
pluginFilename = "KeePassRPC.plgx";
|
||||
|
@ -3,12 +3,12 @@
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "latte-dock";
|
||||
version = "0.8.1";
|
||||
version = "0.8.2";
|
||||
name = "${pname}-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://download.kde.org/stable/${pname}/${name}.tar.xz";
|
||||
sha256 = "1f480ahrsxrksiiyspg7kb1hnz4vcjbs3w039cjkq2vp4wvjd74q";
|
||||
sha256 = "1acwgxg9swmazi9bg5a0iyyin07h2gvp3mhbn6cfqqhpmndqxfdx";
|
||||
name = "${name}.tar.xz";
|
||||
};
|
||||
|
||||
|
@ -7,11 +7,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mlterm-${version}";
|
||||
version = "3.8.6";
|
||||
version = "3.8.7";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/project/mlterm/01release/${name}/${name}.tar.gz";
|
||||
sha256 = "06zylbinh84s9v79hrlvv44rd57z7kvgz9afbps3rjcbncxcmivd";
|
||||
sha256 = "10j7q7rk6ck86xl1898maxhgkp1h7vy7nliv9sk5bqgs7rdwn4kl";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig autoconf ];
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ stdenv, fetchFromGitHub, qt4, qmake4Hook, libpulseaudio }:
|
||||
let
|
||||
version = "1.1.5";
|
||||
version = "1.1.6";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "multimon-ng-${version}";
|
||||
@ -9,7 +9,7 @@ stdenv.mkDerivation {
|
||||
owner = "EliasOenal";
|
||||
repo = "multimon-ng";
|
||||
rev = "${version}";
|
||||
sha256 = "00h884hn5afrx5i52xmngpsv3204hgb7xpw9my3lm8sajmfrjj1g";
|
||||
sha256 = "1a166mh73x77yrrnhhhzk44qrkgwav26vpidv1547zj3x3m8p0bm";
|
||||
};
|
||||
|
||||
buildInputs = [ qt4 libpulseaudio ];
|
||||
|
@ -3,13 +3,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "opencpn-${version}";
|
||||
version = "4.8.4";
|
||||
version = "4.8.8";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "OpenCPN";
|
||||
repo = "OpenCPN";
|
||||
rev = "v${version}";
|
||||
sha256 = "0v4klprzddmpq7w8h2pm69sgbshirdmjrlzhz62b606gbr58fazf";
|
||||
sha256 = "1z9xfc5fgbdslzak3iqg9nx6wggxwv8qwfxfhvfblkyg6kjw30dg";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
|
||||
meta = {
|
||||
description = "A concise ChartPlotter/Navigator";
|
||||
maintainers = [ stdenv.lib.maintainers.kragniz ];
|
||||
platforms = stdenv.lib.platforms.all;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
license = stdenv.lib.licenses.gpl2;
|
||||
homepage = https://opencpn.org/;
|
||||
};
|
||||
|
23
pkgs/applications/misc/osmium-tool/default.nix
Normal file
23
pkgs/applications/misc/osmium-tool/default.nix
Normal file
@ -0,0 +1,23 @@
|
||||
{ stdenv, fetchFromGitHub, cmake, libosmium, protozero, boost, bzip2, zlib, expat }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "osmium-tool-${version}";
|
||||
version = "1.9.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "osmcode";
|
||||
repo = "osmium-tool";
|
||||
rev = "v${version}";
|
||||
sha256 = "1cwabjbrdpqbi2gl7448sgniiwwa73avi9l6pnvh4r0jia2wi5wk";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
buildInputs = [ libosmium protozero boost bzip2 zlib expat ];
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Multipurpose command line tool for working with OpenStreetMap data based on the Osmium library";
|
||||
homepage = "https://osmcode.org/osmium-tool/";
|
||||
license = with licenses; [ gpl3 mit bsd3 ];
|
||||
maintainers = with maintainers; [ das-g ];
|
||||
};
|
||||
}
|
87
pkgs/applications/misc/polar-bookshelf/default.nix
Normal file
87
pkgs/applications/misc/polar-bookshelf/default.nix
Normal file
@ -0,0 +1,87 @@
|
||||
{ stdenv, lib, makeWrapper, fetchurl
|
||||
, dpkg, wrapGAppsHook, autoPatchelfHook
|
||||
, gtk3, cairo, gnome2, atk, gdk_pixbuf, glib
|
||||
, at-spi2-atk, dbus, libX11, libxcb, libXi
|
||||
, libXcursor, libXdamage, libXrandr, libXcomposite
|
||||
, libXext, libXfixes, libXrender, libXtst, libXScrnSaver
|
||||
, nss, nspr, alsaLib, cups, fontconfig, expat
|
||||
, libudev0-shim, glibc, curl, openssl, libnghttp2, gnome3 }:
|
||||
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "polar-bookshelf-${version}";
|
||||
version = "1.0.11";
|
||||
|
||||
# fetching a .deb because there's no easy way to package this Electron app
|
||||
src = fetchurl {
|
||||
url = "https://github.com/burtonator/polar-bookshelf/releases/download/v${version}/polar-bookshelf-${version}-amd64.deb";
|
||||
sha256 = "11rrwd5cr984nhgrib12hx6k74hzgmb3cfk6qnr1l604dk9pqfqx";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
gnome3.gsettings_desktop_schemas
|
||||
glib
|
||||
gtk3
|
||||
cairo
|
||||
gnome2.pango
|
||||
atk
|
||||
gdk_pixbuf
|
||||
at-spi2-atk
|
||||
dbus
|
||||
libX11
|
||||
libxcb
|
||||
libXi
|
||||
libXcursor
|
||||
libXdamage
|
||||
libXrandr
|
||||
libXcomposite
|
||||
libXext
|
||||
libXfixes
|
||||
libXrender
|
||||
libXtst
|
||||
libXScrnSaver
|
||||
nss
|
||||
nspr
|
||||
alsaLib
|
||||
cups
|
||||
fontconfig
|
||||
expat
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
wrapGAppsHook
|
||||
autoPatchelfHook
|
||||
makeWrapper
|
||||
dpkg
|
||||
];
|
||||
|
||||
runtimeLibs = lib.makeLibraryPath [ libudev0-shim glibc curl openssl libnghttp2 ];
|
||||
|
||||
unpackPhase = "dpkg-deb -x $src .";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/polar-bookshelf
|
||||
mkdir -p $out/bin
|
||||
mkdir -p $out/lib
|
||||
|
||||
mv opt/Polar\ Bookshelf/* $out/share/polar-bookshelf
|
||||
mv $out/share/polar-bookshelf/*.so $out/lib
|
||||
|
||||
mv usr/share/* $out/share/
|
||||
|
||||
ln -s $out/share/polar-bookshelf/polar-bookshelf $out/bin/polar-bookshelf
|
||||
'';
|
||||
|
||||
preFixup = ''
|
||||
gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${runtimeLibs}" )
|
||||
'';
|
||||
|
||||
meta = {
|
||||
homepage = https://getpolarized.io/;
|
||||
description = "Personal knowledge repository for PDF and web content supporting incremental reading and document annotation";
|
||||
license = stdenv.lib.licenses.gpl3;
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
maintainers = [ stdenv.lib.maintainers.noneucat ];
|
||||
};
|
||||
|
||||
}
|
@ -1,14 +1,14 @@
|
||||
{ stdenv, fetchurl, qt5 }:
|
||||
|
||||
let
|
||||
version = "1.40.13";
|
||||
version = "1.40.23";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "qtbitcointrader-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/JulyIGHOR/QtBitcoinTrader/archive/v${version}.tar.gz";
|
||||
sha256 = "0d6b9ls742nghzg5y97dx7myvv8i88f0s27lhr52yy4833hdxdwn";
|
||||
sha256 = "11r2jzb09a62hf9fkg6aw8pg2js8c87k6lba9xz2q8n6d6jv44r1";
|
||||
};
|
||||
|
||||
buildInputs = [ qt5.qtbase qt5.qtmultimedia qt5.qtscript ];
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user