Merge master into staging-next
This commit is contained in:
commit
53d00c3351
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
@ -113,3 +113,7 @@
|
||||
/nixos/modules/services/databases/postgresql.xml @thoughtpolice
|
||||
/nixos/modules/services/databases/postgresql.nix @thoughtpolice
|
||||
/nixos/tests/postgresql.nix @thoughtpolice
|
||||
|
||||
# Dhall
|
||||
/pkgs/development/dhall-modules @Gabriel439 @Profpatsch
|
||||
/pkgs/development/interpreters/dhall @Gabriel439 @Profpatsch
|
||||
|
@ -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>
|
@ -483,12 +483,12 @@ and in this case the `python35` interpreter is automatically used.
|
||||
|
||||
### Interpreters
|
||||
|
||||
Versions 2.7, 3.4, 3.5, 3.6 and 3.7 of the CPython interpreter are available as
|
||||
respectively `python27`, `python34`, `python35`, `python36` and `python37`. The PyPy interpreter
|
||||
is available as `pypy`. The aliases `python2` and `python3` correspond to respectively `python27` and
|
||||
`python37`. The default interpreter, `python`, maps to `python2`.
|
||||
The Nix expressions for the interpreters can be found in
|
||||
`pkgs/development/interpreters/python`.
|
||||
Versions 2.7, 3.5, 3.6 and 3.7 of the CPython interpreter are available as
|
||||
respectively `python27`, `python35`, `python36` and `python37`. The PyPy
|
||||
interpreter is available as `pypy`. The aliases `python2` and `python3`
|
||||
correspond to respectively `python27` and `python37`. 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
|
||||
@ -507,7 +507,7 @@ Each interpreter has the following attributes:
|
||||
- `buildEnv`. Function to build python interpreter environments with extra packages bundled together. See section *python.buildEnv function* for usage and documentation.
|
||||
- `withPackages`. Simpler interface to `buildEnv`. See section *python.withPackages function* for usage and documentation.
|
||||
- `sitePackages`. Alias for `lib/${libPrefix}/site-packages`.
|
||||
- `executable`. Name of the interpreter executable, e.g. `python3.4`.
|
||||
- `executable`. Name of the interpreter executable, e.g. `python3.7`.
|
||||
- `pkgs`. Set of Python packages for that specific interpreter. The package set can be modified by overriding the interpreter and passing `packageOverrides`.
|
||||
|
||||
### Building packages and applications
|
||||
@ -529,7 +529,6 @@ attribute set is created for each available Python interpreter. The available
|
||||
sets are
|
||||
|
||||
* `pkgs.python27Packages`
|
||||
* `pkgs.python34Packages`
|
||||
* `pkgs.python35Packages`
|
||||
* `pkgs.python36Packages`
|
||||
* `pkgs.python37Packages`
|
||||
@ -837,7 +836,7 @@ community to help save time. No tool is preferred at the moment.
|
||||
|
||||
### Deterministic builds
|
||||
|
||||
Python 2.7, 3.5 and 3.6 are now built deterministically and 3.4 mostly.
|
||||
The Python interpreters are now built deterministically.
|
||||
Minor modifications had to be made to the interpreters in order to generate
|
||||
deterministic bytecode. This has security implications and is relevant for
|
||||
those using Python in a `nix-shell`.
|
||||
|
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);
|
||||
|
||||
|
@ -406,6 +406,11 @@
|
||||
github = "AveryLychee";
|
||||
name = "Avery Lychee";
|
||||
};
|
||||
averelld = {
|
||||
email = "averell+nixos@rxd4.com";
|
||||
github = "averelld";
|
||||
name = "averelld";
|
||||
};
|
||||
avnik = {
|
||||
email = "avn@avnik.info";
|
||||
github = "avnik";
|
||||
@ -619,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";
|
||||
@ -957,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";
|
||||
@ -2219,6 +2234,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";
|
||||
@ -2675,6 +2695,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";
|
||||
@ -3800,6 +3825,11 @@
|
||||
github = "scolobb";
|
||||
name = "Sergiu Ivanov";
|
||||
};
|
||||
screendriver = {
|
||||
email = "nix@echooff.de";
|
||||
github = "screendriver";
|
||||
name = "Christian Rackerseder";
|
||||
};
|
||||
Scriptkiddi = {
|
||||
email = "nixos@scriptkiddi.de";
|
||||
github = "scriptkiddi";
|
||||
@ -3983,6 +4013,11 @@
|
||||
github = "spacefrogg";
|
||||
name = "Michael Raitza";
|
||||
};
|
||||
spacekookie = {
|
||||
email = "kookie@spacekookie.de";
|
||||
github = "spacekookie";
|
||||
name = "Katharina Fey";
|
||||
};
|
||||
spencerjanssen = {
|
||||
email = "spencerjanssen@gmail.com";
|
||||
github = "spencerjanssen";
|
||||
|
@ -99,18 +99,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
|
||||
@ -192,6 +192,20 @@
|
||||
options can occour more than once in the configuration.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <literal>solr</literal> package has been upgraded from 4.10.3 to 7.5.0 and has undergone
|
||||
some major changes. The <literal>services.solr</literal> module has been updated to reflect
|
||||
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>
|
||||
|
||||
@ -219,6 +233,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>
|
||||
|
@ -1,3 +1,7 @@
|
||||
/* Build a channel tarball. These contain, in addition to the nixpkgs
|
||||
* expressions themselves, files that indicate the version of nixpkgs
|
||||
* that they represent.
|
||||
*/
|
||||
{ pkgs, nixpkgs, version, versionSuffix }:
|
||||
|
||||
pkgs.releaseTools.makeSourceTarball {
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ config, lib, pkgs, pkgs_i686, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with pkgs;
|
||||
with lib;
|
||||
@ -19,7 +19,7 @@ let
|
||||
|
||||
# Forces 32bit pulseaudio and alsaPlugins to be built/supported for apps
|
||||
# using 32bit alsa on 64bit linux.
|
||||
enable32BitAlsaPlugins = cfg.support32Bit && stdenv.isx86_64 && (pkgs_i686.alsaLib != null && pkgs_i686.libpulseaudio != null);
|
||||
enable32BitAlsaPlugins = cfg.support32Bit && stdenv.isx86_64 && (pkgs.pkgsi686Linux.alsaLib != null && pkgs.pkgsi686Linux.libpulseaudio != null);
|
||||
|
||||
|
||||
myConfigFile =
|
||||
@ -63,7 +63,7 @@ let
|
||||
pcm_type.pulse {
|
||||
libs.native = ${pkgs.alsaPlugins}/lib/alsa-lib/libasound_module_pcm_pulse.so ;
|
||||
${lib.optionalString enable32BitAlsaPlugins
|
||||
"libs.32Bit = ${pkgs_i686.alsaPlugins}/lib/alsa-lib/libasound_module_pcm_pulse.so ;"}
|
||||
"libs.32Bit = ${pkgs.pkgsi686Linux.alsaPlugins}/lib/alsa-lib/libasound_module_pcm_pulse.so ;"}
|
||||
}
|
||||
pcm.!default {
|
||||
type pulse
|
||||
@ -72,7 +72,7 @@ let
|
||||
ctl_type.pulse {
|
||||
libs.native = ${pkgs.alsaPlugins}/lib/alsa-lib/libasound_module_ctl_pulse.so ;
|
||||
${lib.optionalString enable32BitAlsaPlugins
|
||||
"libs.32Bit = ${pkgs_i686.alsaPlugins}/lib/alsa-lib/libasound_module_ctl_pulse.so ;"}
|
||||
"libs.32Bit = ${pkgs.pkgsi686Linux.alsaPlugins}/lib/alsa-lib/libasound_module_ctl_pulse.so ;"}
|
||||
}
|
||||
ctl.!default {
|
||||
type pulse
|
||||
|
@ -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";
|
||||
};
|
||||
};
|
@ -1,4 +1,4 @@
|
||||
{ config, lib, pkgs, pkgs_i686, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
@ -148,7 +148,7 @@ in
|
||||
[ "/run/opengl-driver/share" ] ++ optional cfg.driSupport32Bit "/run/opengl-driver-32/share";
|
||||
|
||||
hardware.opengl.package = mkDefault (makePackage pkgs);
|
||||
hardware.opengl.package32 = mkDefault (makePackage pkgs_i686);
|
||||
hardware.opengl.package32 = mkDefault (makePackage pkgs.pkgsi686Linux);
|
||||
|
||||
boot.extraModulePackages = optional (elem "virtualbox" videoDrivers) kernelPackages.virtualboxGuestAdditions;
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
# This module provides the proprietary AMDGPU-PRO drivers.
|
||||
|
||||
{ config, lib, pkgs, pkgs_i686, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
@ -11,7 +11,7 @@ let
|
||||
enabled = elem "amdgpu-pro" drivers;
|
||||
|
||||
package = config.boot.kernelPackages.amdgpu-pro;
|
||||
package32 = pkgs_i686.linuxPackages.amdgpu-pro.override { libsOnly = true; kernel = null; };
|
||||
package32 = pkgs.pkgsi686Linux.linuxPackages.amdgpu-pro.override { libsOnly = true; kernel = null; };
|
||||
|
||||
opengl = config.hardware.opengl;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# This module provides the proprietary ATI X11 / OpenGL drivers.
|
||||
|
||||
{ config, lib, pkgs_i686, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
@ -24,7 +24,7 @@ in
|
||||
{ name = "fglrx"; modules = [ ati_x11 ]; libPath = [ "${ati_x11}/lib" ]; };
|
||||
|
||||
hardware.opengl.package = ati_x11;
|
||||
hardware.opengl.package32 = pkgs_i686.linuxPackages.ati_drivers_x11.override { libsOnly = true; kernel = null; };
|
||||
hardware.opengl.package32 = pkgs.pkgsi686Linux.linuxPackages.ati_drivers_x11.override { libsOnly = true; kernel = null; };
|
||||
|
||||
environment.systemPackages = [ ati_x11 ];
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# This module provides the proprietary NVIDIA X11 / OpenGL drivers.
|
||||
|
||||
{ stdenv, config, lib, pkgs, pkgs_i686, ... }:
|
||||
{ stdenv, config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
@ -25,7 +25,7 @@ let
|
||||
nvidia_x11 = nvidiaForKernel config.boot.kernelPackages;
|
||||
nvidia_libs32 =
|
||||
if versionOlder nvidia_x11.version "391" then
|
||||
((nvidiaForKernel pkgs_i686.linuxPackages).override { libsOnly = true; kernel = null; }).out
|
||||
((nvidiaForKernel pkgs.pkgsi686Linux.linuxPackages).override { libsOnly = true; kernel = null; }).out
|
||||
else
|
||||
(nvidiaForKernel config.boot.kernelPackages).lib32;
|
||||
|
||||
|
@ -333,6 +333,8 @@
|
||||
lidarr = 306;
|
||||
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!
|
||||
|
||||
@ -626,6 +628,8 @@
|
||||
lidarr = 306;
|
||||
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
|
||||
|
@ -208,7 +208,6 @@ in
|
||||
config = {
|
||||
_module.args = {
|
||||
pkgs = cfg.pkgs;
|
||||
pkgs_i686 = cfg.pkgs.pkgsi686Linux;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -16,7 +16,7 @@ let
|
||||
# programmable completion. If we do, enable all modules installed in
|
||||
# the system and user profile in obsolete /etc/bash_completion.d/
|
||||
# directories. Bash loads completions in all
|
||||
# $XDG_DATA_DIRS/share/bash-completion/completions/
|
||||
# $XDG_DATA_DIRS/bash-completion/completions/
|
||||
# on demand, so they do not need to be sourced here.
|
||||
if shopt -q progcomp &>/dev/null; then
|
||||
. "${pkgs.bash-completion}/etc/profile.d/bash_completion.sh"
|
||||
|
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 ];
|
||||
};
|
||||
}
|
@ -5,6 +5,15 @@ with lib;
|
||||
let
|
||||
cfg = config.programs.sway-beta;
|
||||
swayPackage = cfg.package;
|
||||
|
||||
swayWrapped = pkgs.writeShellScriptBin "sway" ''
|
||||
${cfg.extraSessionCommands}
|
||||
exec ${pkgs.dbus.dbus-launch} --exit-with-session ${swayPackage}/bin/sway
|
||||
'';
|
||||
swayJoined = pkgs.symlinkJoin {
|
||||
name = "sway-joined";
|
||||
paths = [ swayWrapped swayPackage ];
|
||||
};
|
||||
in {
|
||||
options.programs.sway-beta = {
|
||||
enable = mkEnableOption ''
|
||||
@ -20,13 +29,30 @@ in {
|
||||
'';
|
||||
};
|
||||
|
||||
extraSessionCommands = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
example = ''
|
||||
export SDL_VIDEODRIVER=wayland
|
||||
# needs qt5.qtwayland in systemPackages
|
||||
export QT_QPA_PLATFORM=wayland
|
||||
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
|
||||
# Fix for some Java AWT applications (e.g. Android Studio),
|
||||
# use this if they aren't displayed properly:
|
||||
export _JAVA_AWT_WM_NONREPARENTING=1
|
||||
'';
|
||||
description = ''
|
||||
Shell commands executed just before Sway is started.
|
||||
'';
|
||||
};
|
||||
|
||||
extraPackages = mkOption {
|
||||
type = with types; listOf package;
|
||||
default = with pkgs; [
|
||||
xwayland dmenu
|
||||
xwayland rxvt_unicode dmenu
|
||||
];
|
||||
defaultText = literalExample ''
|
||||
with pkgs; [ xwayland dmenu ];
|
||||
with pkgs; [ xwayland rxvt_unicode dmenu ];
|
||||
'';
|
||||
example = literalExample ''
|
||||
with pkgs; [
|
||||
@ -42,7 +68,7 @@ in {
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = [ swayPackage ] ++ cfg.extraPackages;
|
||||
environment.systemPackages = [ swayJoined ] ++ cfg.extraPackages;
|
||||
security.pam.services.swaylock = {};
|
||||
hardware.opengl.enable = mkDefault true;
|
||||
fonts.enableDefaultFonts = mkDefault true;
|
||||
@ -51,4 +77,3 @@ in {
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ gnidorah primeos colemickens ];
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
}
|
@ -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 {
|
||||
|
@ -10,6 +10,13 @@ let
|
||||
# Get a submodule without any embedded metadata:
|
||||
_filter = x: filterAttrs (k: v: k != "_module") x;
|
||||
|
||||
# a wrapper that verifies that the configuration is valid
|
||||
promtoolCheck = what: name: file: pkgs.runCommand "${name}-${what}-checked"
|
||||
{ buildInputs = [ cfg.package ]; } ''
|
||||
ln -s ${file} $out
|
||||
promtool ${what} $out
|
||||
'';
|
||||
|
||||
# Pretty-print JSON to a file
|
||||
writePrettyJSON = name: x:
|
||||
pkgs.runCommand name { } ''
|
||||
@ -19,18 +26,19 @@ let
|
||||
# This becomes the main config file
|
||||
promConfig = {
|
||||
global = cfg.globalConfig;
|
||||
rule_files = cfg.ruleFiles ++ [
|
||||
rule_files = map (promtoolCheck "check-rules" "rules") (cfg.ruleFiles ++ [
|
||||
(pkgs.writeText "prometheus.rules" (concatStringsSep "\n" cfg.rules))
|
||||
];
|
||||
]);
|
||||
scrape_configs = cfg.scrapeConfigs;
|
||||
};
|
||||
|
||||
generatedPrometheusYml = writePrettyJSON "prometheus.yml" promConfig;
|
||||
|
||||
prometheusYml =
|
||||
if cfg.configText != null then
|
||||
prometheusYml = let
|
||||
yml = if cfg.configText != null then
|
||||
pkgs.writeText "prometheus.yml" cfg.configText
|
||||
else generatedPrometheusYml;
|
||||
else generatedPrometheusYml;
|
||||
in promtoolCheck "check-config" "prometheus.yml" yml;
|
||||
|
||||
cmdlineArgs = cfg.extraFlags ++ [
|
||||
"-storage.local.path=${cfg.dataDir}/metrics"
|
||||
@ -376,6 +384,15 @@ in {
|
||||
'';
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.prometheus;
|
||||
defaultText = "pkgs.prometheus";
|
||||
description = ''
|
||||
The prometheus package that should be used.
|
||||
'';
|
||||
};
|
||||
|
||||
listenAddress = mkOption {
|
||||
type = types.str;
|
||||
default = "0.0.0.0:9090";
|
||||
@ -495,7 +512,7 @@ in {
|
||||
after = [ "network.target" ];
|
||||
script = ''
|
||||
#!/bin/sh
|
||||
exec ${pkgs.prometheus}/bin/prometheus \
|
||||
exec ${cfg.package}/bin/prometheus \
|
||||
${concatStringsSep " \\\n " cmdlineArgs}
|
||||
'';
|
||||
serviceConfig = {
|
||||
|
@ -6,142 +6,105 @@ let
|
||||
|
||||
cfg = config.services.solr;
|
||||
|
||||
# Assemble all jars needed for solr
|
||||
solrJars = pkgs.stdenv.mkDerivation {
|
||||
name = "solr-jars";
|
||||
|
||||
src = pkgs.fetchurl {
|
||||
url = http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.36/bin/apache-tomcat-5.5.36.tar.gz;
|
||||
sha256 = "01mzvh53wrs1p2ym765jwd00gl6kn8f9k3nhdrnhdqr8dhimfb2p";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib
|
||||
cp common/lib/*.jar $out/lib/
|
||||
ln -s ${pkgs.ant}/lib/ant/lib/ant.jar $out/lib/
|
||||
ln -s ${cfg.solrPackage}/lib/ext/* $out/lib/
|
||||
ln -s ${pkgs.jdk.home}/lib/tools.jar $out/lib/
|
||||
'' + optionalString (cfg.extraJars != []) ''
|
||||
for f in ${concatStringsSep " " cfg.extraJars}; do
|
||||
cp $f $out/lib
|
||||
done
|
||||
'';
|
||||
};
|
||||
|
||||
in {
|
||||
in
|
||||
|
||||
{
|
||||
options = {
|
||||
services.solr = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enables the solr service.
|
||||
'';
|
||||
};
|
||||
enable = mkEnableOption "Enables the solr service.";
|
||||
|
||||
javaPackage = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.jre;
|
||||
defaultText = "pkgs.jre";
|
||||
description = ''
|
||||
Which Java derivation to use for running solr.
|
||||
'';
|
||||
};
|
||||
|
||||
solrPackage = mkOption {
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.solr;
|
||||
defaultText = "pkgs.solr";
|
||||
description = ''
|
||||
Which solr derivation to use for running solr.
|
||||
'';
|
||||
description = "Which Solr package to use.";
|
||||
};
|
||||
|
||||
extraJars = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [];
|
||||
description = ''
|
||||
List of paths pointing to jars. Jars are copied to commonLibFolder to be available to java/solr.
|
||||
'';
|
||||
port = mkOption {
|
||||
type = types.int;
|
||||
default = 8983;
|
||||
description = "Port on which Solr is ran.";
|
||||
};
|
||||
|
||||
log4jConfiguration = mkOption {
|
||||
type = types.lines;
|
||||
default = ''
|
||||
log4j.rootLogger=INFO, stdout
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.Target=System.out
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
|
||||
'';
|
||||
description = ''
|
||||
Contents of the <literal>log4j.properties</literal> used. By default,
|
||||
everything is logged to stdout (picked up by systemd) with level INFO.
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The user that should run the solr process and.
|
||||
the working directories.
|
||||
'';
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The group that will own the working directory.
|
||||
'';
|
||||
};
|
||||
|
||||
solrHome = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The solr home directory. It is your own responsibility to
|
||||
make sure this directory contains a working solr configuration,
|
||||
and is writeable by the the user running the solr service.
|
||||
Failing to do so, the solr will not start properly.
|
||||
'';
|
||||
stateDir = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/solr";
|
||||
description = "The solr home directory containing config, data, and logging files.";
|
||||
};
|
||||
|
||||
extraJavaOptions = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
description = ''
|
||||
Extra command line options given to the java process running
|
||||
solr.
|
||||
'';
|
||||
description = "Extra command line options given to the java process running Solr.";
|
||||
};
|
||||
|
||||
extraWinstoneOptions = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
description = ''
|
||||
Extra command line options given to the Winstone, which is
|
||||
the servlet container hosting solr.
|
||||
'';
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "solr";
|
||||
description = "User under which Solr is ran.";
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
default = "solr";
|
||||
description = "Group under which Solr is ran.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
services.winstone.solr = {
|
||||
serviceName = "solr";
|
||||
inherit (cfg) user group javaPackage;
|
||||
warFile = "${cfg.solrPackage}/lib/solr.war";
|
||||
extraOptions = [
|
||||
"--commonLibFolder=${solrJars}/lib"
|
||||
"--useJasper"
|
||||
] ++ cfg.extraWinstoneOptions;
|
||||
extraJavaOptions = [
|
||||
"-Dsolr.solr.home=${cfg.solrHome}"
|
||||
"-Dlog4j.configuration=file://${pkgs.writeText "log4j.properties" cfg.log4jConfiguration}"
|
||||
] ++ cfg.extraJavaOptions;
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
systemd.services.solr = {
|
||||
after = [ "network.target" "remote-fs.target" "nss-lookup.target" "systemd-journald-dev-log.socket" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
environment = {
|
||||
SOLR_HOME = "${cfg.stateDir}/data";
|
||||
LOG4J_PROPS = "${cfg.stateDir}/log4j2.xml";
|
||||
SOLR_LOGS_DIR = "${cfg.stateDir}/logs";
|
||||
SOLR_PORT = "${toString cfg.port}";
|
||||
};
|
||||
path = with pkgs; [
|
||||
gawk
|
||||
procps
|
||||
];
|
||||
preStart = ''
|
||||
mkdir -p "${cfg.stateDir}/data";
|
||||
mkdir -p "${cfg.stateDir}/logs";
|
||||
|
||||
if ! test -e "${cfg.stateDir}/data/solr.xml"; then
|
||||
install -D -m0640 ${cfg.package}/server/solr/solr.xml "${cfg.stateDir}/data/solr.xml"
|
||||
install -D -m0640 ${cfg.package}/server/solr/zoo.cfg "${cfg.stateDir}/data/zoo.cfg"
|
||||
fi
|
||||
|
||||
if ! test -e "${cfg.stateDir}/log4j2.xml"; then
|
||||
install -D -m0640 ${cfg.package}/server/resources/log4j2.xml "${cfg.stateDir}/log4j2.xml"
|
||||
fi
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
ExecStart="${cfg.package}/bin/solr start -f -a \"${concatStringsSep " " cfg.extraJavaOptions}\"";
|
||||
ExecStop="${cfg.package}/bin/solr stop";
|
||||
};
|
||||
};
|
||||
|
||||
users.users = optionalAttrs (cfg.user == "solr") (singleton
|
||||
{ name = "solr";
|
||||
group = cfg.group;
|
||||
home = cfg.stateDir;
|
||||
createHome = true;
|
||||
uid = config.ids.uids.solr;
|
||||
});
|
||||
|
||||
users.groups = optionalAttrs (cfg.group == "solr") (singleton
|
||||
{ name = "solr";
|
||||
gid = config.ids.gids.solr;
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -31,10 +31,26 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
purifyOnStart = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
On startup, the `baseDir` directory is populated with various files,
|
||||
subdirectories and symlinks. If this option is enabled, these items
|
||||
(except for the `logs` and `work` subdirectories) are first removed.
|
||||
This prevents interference from remainders of an old configuration
|
||||
(libraries, webapps, etc.), so it's recommended to enable this option.
|
||||
'';
|
||||
};
|
||||
|
||||
baseDir = mkOption {
|
||||
type = lib.types.path;
|
||||
default = "/var/tomcat";
|
||||
description = "Location where Tomcat stores configuration files, webapplications and logfiles";
|
||||
description = ''
|
||||
Location where Tomcat stores configuration files, web applications
|
||||
and logfiles. Note that it is partially cleared on each service startup
|
||||
if `purifyOnStart` is enabled.
|
||||
'';
|
||||
};
|
||||
|
||||
logDirs = mkOption {
|
||||
@ -197,6 +213,15 @@ in
|
||||
after = [ "network.target" ];
|
||||
|
||||
preStart = ''
|
||||
${lib.optionalString cfg.purifyOnStart ''
|
||||
# Delete most directories/symlinks we create from the existing base directory,
|
||||
# to get rid of remainders of an old configuration.
|
||||
# The list of directories to delete is taken from the "mkdir" command below,
|
||||
# excluding "logs" (because logs are valuable) and "work" (because normally
|
||||
# session files are there), and additionally including "bin".
|
||||
rm -rf ${cfg.baseDir}/{conf,virtualhosts,temp,lib,shared/lib,webapps,bin}
|
||||
''}
|
||||
|
||||
# Create the base directory
|
||||
mkdir -p \
|
||||
${cfg.baseDir}/{conf,virtualhosts,logs,temp,lib,shared/lib,webapps,work}
|
||||
|
@ -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);
|
||||
})
|
||||
]);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ config, lib, pkgs, pkgs_i686, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
@ -64,7 +64,7 @@ in
|
||||
};
|
||||
|
||||
hardware.opengl.package = prl-tools;
|
||||
hardware.opengl.package32 = pkgs_i686.linuxPackages.prl-tools.override { libsOnly = true; kernel = null; };
|
||||
hardware.opengl.package32 = pkgs.pkgsi686Linux.linuxPackages.prl-tools.override { libsOnly = true; kernel = null; };
|
||||
|
||||
services.udev.packages = [ prl-tools ];
|
||||
|
||||
|
@ -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 {};
|
||||
@ -410,6 +414,7 @@ in rec {
|
||||
tests.slurm = callTest tests/slurm.nix {};
|
||||
tests.smokeping = callTest tests/smokeping.nix {};
|
||||
tests.snapper = callTest tests/snapper.nix {};
|
||||
tests.solr = callTest tests/solr.nix {};
|
||||
#tests.statsd = callTest tests/statsd.nix {}; # statsd is broken: #45946
|
||||
tests.strongswan-swanctl = callTest tests/strongswan-swanctl.nix {};
|
||||
tests.sudo = callTest tests/sudo.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");
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
47
nixos/tests/solr.nix
Normal file
47
nixos/tests/solr.nix
Normal file
@ -0,0 +1,47 @@
|
||||
import ./make-test.nix ({ pkgs, lib, ... }:
|
||||
{
|
||||
name = "solr";
|
||||
meta.maintainers = [ lib.maintainers.aanderse ];
|
||||
|
||||
machine =
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
# Ensure the virtual machine has enough memory for Solr to avoid the following error:
|
||||
#
|
||||
# OpenJDK 64-Bit Server VM warning:
|
||||
# INFO: os::commit_memory(0x00000000e8000000, 402653184, 0)
|
||||
# failed; error='Cannot allocate memory' (errno=12)
|
||||
#
|
||||
# There is insufficient memory for the Java Runtime Environment to continue.
|
||||
# Native memory allocation (mmap) failed to map 402653184 bytes for committing reserved memory.
|
||||
virtualisation.memorySize = 2000;
|
||||
|
||||
services.solr.enable = true;
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
|
||||
$machine->waitForUnit('solr.service');
|
||||
$machine->waitForOpenPort('8983');
|
||||
$machine->succeed('curl --fail http://localhost:8983/solr/');
|
||||
|
||||
# adapted from pkgs.solr/examples/films/README.txt
|
||||
$machine->succeed('sudo -u solr solr create -c films');
|
||||
$machine->succeed(q(curl http://localhost:8983/solr/films/schema -X POST -H 'Content-type:application/json' --data-binary '{
|
||||
"add-field" : {
|
||||
"name":"name",
|
||||
"type":"text_general",
|
||||
"multiValued":false,
|
||||
"stored":true
|
||||
},
|
||||
"add-field" : {
|
||||
"name":"initial_release_date",
|
||||
"type":"pdate",
|
||||
"stored":true
|
||||
}
|
||||
}')) =~ /"status":0/ or die;
|
||||
$machine->succeed('sudo -u solr post -c films ${pkgs.solr}/example/films/films.json');
|
||||
$machine->succeed('curl http://localhost:8983/solr/films/query?q=name:batman') =~ /"name":"Batman Begins"/ or die;
|
||||
'';
|
||||
})
|
@ -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;
|
||||
|
@ -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; [
|
||||
|
@ -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; {
|
||||
|
@ -5,6 +5,7 @@
|
||||
, pkgconfig
|
||||
, ffmpeg_4
|
||||
, patchelf
|
||||
, fdk_aac
|
||||
, libtool
|
||||
, cmake
|
||||
, bluez
|
||||
@ -22,13 +23,13 @@ let
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
name = "pulseaudio-modules-bt-${version}";
|
||||
version = "unstable-2018-10-16";
|
||||
version = "unstable-2018-11-01";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "EHfive";
|
||||
repo = "pulseaudio-modules-bt";
|
||||
rev = "552c2b48c0cc7dd44d0746b261f7c7d5559e8e30";
|
||||
sha256 = "052jb1hjx1in7bafx4zpn78s7r6f2y7djriwi36dzqy9wmalmyjy";
|
||||
rev = "a2f62fcaa702bb883c07d074ebca8d7135520ab8";
|
||||
sha256 = "1fhg7q9064zikhy0xxldn4fvh49pc47mgikcbd9yhsk66gcn6zj3";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
@ -45,6 +46,7 @@ in stdenv.mkDerivation rec {
|
||||
buildInputs = [
|
||||
pulseaudio
|
||||
ffmpeg_4
|
||||
fdk_aac
|
||||
libtool
|
||||
bluez
|
||||
dbus
|
||||
@ -72,7 +74,7 @@ in stdenv.mkDerivation rec {
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = https://github.com/EHfive/pulseaudio-modules-bt;
|
||||
description = "SBC, Sony LDAC codec (A2DP Audio) support for Pulseaudio";
|
||||
description = "LDAC, aptX, aptX HD, AAC codecs (A2DP Audio) support for Linux PulseAudio";
|
||||
platforms = platforms.linux;
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ adisbladis ];
|
||||
|
@ -1,11 +1,20 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 0f5baa0..1f35cce 100644
|
||||
index d869979..185144d 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -122,5 +121,4 @@ INSTALL(TARGETS
|
||||
@@ -143,13 +143,13 @@ INSTALL(TARGETS
|
||||
module-bluez5-device
|
||||
module-bluetooth-discover
|
||||
module-bluetooth-policy
|
||||
- LIBRARY DESTINATION ${PulseAudio_modlibexecdir})
|
||||
-
|
||||
+ LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pulse-${PulseAudio_VERSION}/modules/)
|
||||
|
||||
if(NOT ${HAVE_SYSTEM_LDAC})
|
||||
|
||||
INSTALL(TARGETS
|
||||
ldacBT_enc
|
||||
ldacBT_abr
|
||||
- LIBRARY DESTINATION ${PulseAudio_modlibexecdir})
|
||||
+ LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pulse-${PulseAudio_VERSION}/modules/)
|
||||
|
||||
endif()
|
||||
|
@ -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 ];
|
||||
|
@ -5,14 +5,14 @@
|
||||
let
|
||||
# TO UPDATE: just execute the ./update.sh script (won't do anything if there is no update)
|
||||
# "rev" decides what is actually being downloaded
|
||||
version = "1.0.83.316.ge96b6e67-5";
|
||||
version = "1.0.93.242.gc2341a27-15";
|
||||
# To get the latest stable revision:
|
||||
# curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=stable' | jq '.download_url,.version,.last_updated'
|
||||
# To get general information:
|
||||
# curl -H 'Snap-Device-Series: 16' 'https://api.snapcraft.io/v2/snaps/info/spotify' | jq '.'
|
||||
# More examples of api usage:
|
||||
# https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py
|
||||
rev = "17";
|
||||
rev = "24";
|
||||
|
||||
|
||||
deps = [
|
||||
@ -65,7 +65,7 @@ stdenv.mkDerivation {
|
||||
# https://community.spotify.com/t5/Desktop-Linux/Redistribute-Spotify-on-Linux-Distributions/td-p/1695334
|
||||
src = fetchurl {
|
||||
url = "https://api.snapcraft.io/api/v1/snaps/download/pOBIoZ2LrCB3rDohMxoYGnbN14EHOgD7_${rev}.snap";
|
||||
sha512 = "19bbr4142shsl4qrikf48vq7kyrd4k4jbsada13qxicxps46a9bx51vjm2hkijqv739c1gdkgzwx7llyk95z26lhrz53shm2n5ij8xi";
|
||||
sha512 = "920d55b3dcad4ac6acd9bc73c8ad8eb1668327a175da465ce3d8bba2430da47aaefa5218659315fab43b5182611eb03047d4e2679c1345c57380b7def7a1212d";
|
||||
};
|
||||
|
||||
buildInputs = [ squashfsTools makeWrapper ];
|
||||
|
@ -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, 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" ];
|
||||
|
||||
|
25
pkgs/applications/editors/rstudio/clang-location.patch
Normal file
25
pkgs/applications/editors/rstudio/clang-location.patch
Normal file
@ -0,0 +1,25 @@
|
||||
diff --git i/src/cpp/core/libclang/LibClang.cpp w/src/cpp/core/libclang/LibClang.cpp
|
||||
index ec12a3a1ff..8c81b633ae 100644
|
||||
--- i/src/cpp/core/libclang/LibClang.cpp
|
||||
+++ w/src/cpp/core/libclang/LibClang.cpp
|
||||
@@ -54,7 +54,7 @@ std::vector<std::string> defaultCompileArgs(LibraryVersion version)
|
||||
|
||||
// we need to add in the associated libclang headers as
|
||||
// they are not discovered / used by default during compilation
|
||||
- FilePath llvmPath = s_libraryPath.parent().parent();
|
||||
+ FilePath llvmPath("@clang@");
|
||||
boost::format fmt("%1%/lib/clang/%2%/include");
|
||||
fmt % llvmPath.absolutePath() % version.asString();
|
||||
std::string includePath = fmt.str();
|
||||
@@ -77,10 +77,7 @@ std::vector<std::string> systemClangVersions()
|
||||
#elif defined(__unix__)
|
||||
// default set of versions
|
||||
clangVersions = {
|
||||
- "/usr/lib/libclang.so",
|
||||
- "/usr/lib/llvm/libclang.so",
|
||||
- "/usr/lib64/libclang.so",
|
||||
- "/usr/lib64/llvm/libclang.so",
|
||||
+ "@libclang.so@"
|
||||
};
|
||||
|
||||
// iterate through the set of available 'llvm' directories
|
15
pkgs/applications/editors/rstudio/fix-cmake.patch
Normal file
15
pkgs/applications/editors/rstudio/fix-cmake.patch
Normal file
@ -0,0 +1,15 @@
|
||||
diff --git a/src/cpp/desktop/CMakeLists.txt b/src/cpp/desktop/CMakeLists.txt
|
||||
index f5701bf735..27af4148ff 100644
|
||||
--- a/src/cpp/desktop/CMakeLists.txt
|
||||
+++ b/src/cpp/desktop/CMakeLists.txt
|
||||
@@ -112,6 +112,7 @@ find_package(Qt5WebEngine REQUIRED)
|
||||
find_package(Qt5WebEngineWidgets REQUIRED)
|
||||
find_package(Qt5PrintSupport REQUIRED)
|
||||
find_package(Qt5Quick REQUIRED)
|
||||
+find_package(Qt5QuickWidgets REQUIRED)
|
||||
find_package(Qt5Positioning REQUIRED)
|
||||
find_package(Qt5Sensors REQUIRED)
|
||||
find_package(Qt5Svg REQUIRED)
|
||||
--
|
||||
2.17.1
|
||||
|
119
pkgs/applications/editors/rstudio/preview.nix
Normal file
119
pkgs/applications/editors/rstudio/preview.nix
Normal file
@ -0,0 +1,119 @@
|
||||
{ stdenv, fetchurl, fetchFromGitHub, makeDesktopItem, cmake, boost, zlib
|
||||
, openssl, R, qtbase, qtdeclarative, qtsensors, qtwebengine, qtwebchannel
|
||||
, libuuid, hunspellDicts, unzip, ant, jdk, gnumake, makeWrapper, pandoc
|
||||
, llvmPackages
|
||||
}:
|
||||
|
||||
let
|
||||
rev = "f33fb2b2f1";
|
||||
ginVer = "2.1.2";
|
||||
gwtVer = "2.8.1";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "RStudio-preview-${rev}";
|
||||
|
||||
nativeBuildInputs = [ cmake unzip ant jdk makeWrapper pandoc ];
|
||||
|
||||
buildInputs = [ boost zlib openssl R qtbase qtdeclarative qtsensors
|
||||
qtwebengine qtwebchannel libuuid ];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rstudio";
|
||||
repo = "rstudio";
|
||||
inherit rev;
|
||||
sha256 = "0v3vzqjp74c3m4h9l6w2lrdnjqaimdjzbf7vhnlxj2qa0lwsnykb";
|
||||
};
|
||||
|
||||
# Hack RStudio to only use the input R and provided libclang.
|
||||
patches = [ ./r-location.patch ./clang-location.patch ];
|
||||
postPatch = ''
|
||||
substituteInPlace src/cpp/core/r_util/REnvironmentPosix.cpp --replace '@R@' ${R}
|
||||
substituteInPlace src/cpp/core/libclang/LibClang.cpp \
|
||||
--replace '@clang@' ${llvmPackages.clang.cc} \
|
||||
--replace '@libclang.so@' ${llvmPackages.clang.cc.lib}/lib/libclang.so
|
||||
'';
|
||||
|
||||
ginSrc = fetchurl {
|
||||
url = "https://s3.amazonaws.com/rstudio-buildtools/gin-${ginVer}.zip";
|
||||
sha256 = "16jzmljravpz6p2rxa87k5f7ir8vs7ya75lnfybfajzmci0p13mr";
|
||||
};
|
||||
|
||||
gwtSrc = fetchurl {
|
||||
url = "https://s3.amazonaws.com/rstudio-buildtools/gwt-${gwtVer}.zip";
|
||||
sha256 = "19x000m3jwnkqgi6ic81lkzyjvvxcfacw2j0vcfcaknvvagzhyhb";
|
||||
};
|
||||
|
||||
hunspellDictionaries = with stdenv.lib; filter isDerivation (attrValues hunspellDicts);
|
||||
|
||||
mathJaxSrc = fetchurl {
|
||||
url = https://s3.amazonaws.com/rstudio-buildtools/mathjax-26.zip;
|
||||
sha256 = "0wbcqb9rbfqqvvhqr1pbqax75wp8ydqdyhp91fbqfqp26xzjv6lk";
|
||||
};
|
||||
|
||||
rsconnectSrc = fetchFromGitHub {
|
||||
owner = "rstudio";
|
||||
repo = "rsconnect";
|
||||
rev = "984745d8";
|
||||
sha256 = "037z0y32k1gdda192y5qn5hi7wp8wyap44mkjlklrgcqkmlcylb9";
|
||||
};
|
||||
|
||||
preConfigure =
|
||||
''
|
||||
GWT_LIB_DIR=src/gwt/lib
|
||||
|
||||
mkdir -p $GWT_LIB_DIR/gin/${ginVer}
|
||||
unzip ${ginSrc} -d $GWT_LIB_DIR/gin/${ginVer}
|
||||
|
||||
unzip ${gwtSrc}
|
||||
mkdir -p $GWT_LIB_DIR/gwt
|
||||
mv gwt-${gwtVer} $GWT_LIB_DIR/gwt/${gwtVer}
|
||||
|
||||
mkdir dependencies/common/dictionaries
|
||||
for dict in ${builtins.concatStringsSep " " hunspellDictionaries}; do
|
||||
for i in "$dict/share/hunspell/"*; do
|
||||
ln -sv $i dependencies/common/dictionaries/
|
||||
done
|
||||
done
|
||||
|
||||
unzip ${mathJaxSrc} -d dependencies/common/mathjax-26
|
||||
|
||||
mkdir -p dependencies/common/pandoc
|
||||
cp ${pandoc}/bin/pandoc dependencies/common/pandoc/
|
||||
|
||||
cp -r ${rsconnectSrc} dependencies/common/rsconnect
|
||||
pushd dependencies/common
|
||||
${R}/bin/R CMD build -d --no-build-vignettes rsconnect
|
||||
popd
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
cmakeFlags = [ "-DRSTUDIO_TARGET=Desktop" "-DQT_QMAKE_EXECUTABLE=$NIX_QT5_TMP/bin/qmake" ];
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
name = name;
|
||||
exec = "rstudio %F";
|
||||
icon = "rstudio";
|
||||
desktopName = "RStudio Preview";
|
||||
genericName = "IDE";
|
||||
comment = meta.description;
|
||||
categories = "Development;";
|
||||
mimeType = "text/x-r-source;text/x-r;text/x-R;text/x-r-doc;text/x-r-sweave;text/x-r-markdown;text/x-r-html;text/x-r-presentation;application/x-r-data;application/x-r-project;text/x-r-history;text/x-r-profile;text/x-tex;text/x-markdown;text/html;text/css;text/javascript;text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;";
|
||||
};
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/rstudio --suffix PATH : ${gnumake}/bin
|
||||
mkdir $out/share
|
||||
cp -r ${desktopItem}/share/applications $out/share
|
||||
mkdir $out/share/icons
|
||||
ln $out/rstudio.png $out/share/icons
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib;
|
||||
{ description = "Set of integrated tools for the R language";
|
||||
homepage = https://www.rstudio.com/;
|
||||
license = licenses.agpl3;
|
||||
maintainers = with maintainers; [ averelld ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
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
|
||||
@ -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,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;
|
||||
};
|
||||
}
|
@ -2,24 +2,24 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "1password-${version}";
|
||||
version = "0.5.3";
|
||||
version = "0.5.4";
|
||||
src =
|
||||
if stdenv.hostPlatform.system == "i686-linux" then
|
||||
fetchzip {
|
||||
url = "https://cache.agilebits.com/dist/1P/op/pkg/v${version}/op_linux_386_v${version}.zip";
|
||||
sha256 = "05s223h1yps4k9kmignl0r5sbh6w7m1hnlmafnf1kiwv7gacvxjc";
|
||||
sha256 = "0wni2hk5b1qfr24vi24jiprpi08k3qgaw9lqp61k41a1sjp3izv0";
|
||||
stripRoot = false;
|
||||
}
|
||||
else if stdenv.hostPlatform.system == "x86_64-linux" then
|
||||
fetchzip {
|
||||
url = "https://cache.agilebits.com/dist/1P/op/pkg/v${version}/op_linux_amd64_v${version}.zip";
|
||||
sha256 = "0p9x1fx0309v8dxxaf88m8x8q15zzqywfmjn6v5wb9v3scp9396v";
|
||||
sha256 = "169d5fl3cfw3xrlpm9nlmwbnp0xgh0la9qybzf8ragp0020nlyih";
|
||||
stripRoot = false;
|
||||
}
|
||||
else if stdenv.hostPlatform.system == "x86_64-darwin" then
|
||||
fetchzip {
|
||||
url = "https://cache.agilebits.com/dist/1P/op/pkg/v${version}/op_darwin_amd64_v${version}.zip";
|
||||
sha256 = "1z2xp9bn93gr4ha6zx65va1fb58a2xlnnmpv583y96gq3vbnqdcj";
|
||||
sha256 = "1scikv7v33kzg9rqsrz97yklxaskvif84br13zg8annm43k5vlma";
|
||||
stripRoot = false;
|
||||
}
|
||||
else throw "Architecture not supported";
|
||||
|
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";
|
||||
|
@ -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 = [
|
||||
|
@ -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 ];
|
||||
|
@ -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 = [
|
||||
|
@ -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 ];
|
||||
|
@ -1,47 +1,30 @@
|
||||
diff --git a/Makerules b/Makerules
|
||||
--- a/Makerules
|
||||
+++ b/Makerules
|
||||
@@ -81,22 +81,10 @@ HAVE_GLUT ?= yes
|
||||
SYS_GLUT_CFLAGS := -Wno-deprecated-declarations
|
||||
SYS_GLUT_LIBS := -framework GLUT -framework OpenGL
|
||||
|
||||
-CC = xcrun cc
|
||||
-AR = xcrun ar
|
||||
-LD = xcrun ld
|
||||
-RANLIB_CMD = xcrun ranlib $@
|
||||
diff -ruN mupdf-1.14.0-source.orig/Makerules mupdf-1.14.0-source/Makerules
|
||||
--- mupdf-1.14.0-source.orig/Makerules 2018-11-02 06:57:12.114012496 +0100
|
||||
+++ mupdf-1.14.0-source/Makerules 2018-11-02 10:11:56.717232992 +0100
|
||||
@@ -80,13 +80,6 @@
|
||||
HAVE_GLUT := yes
|
||||
SYS_GLUT_CFLAGS := -Wno-deprecated-declarations
|
||||
SYS_GLUT_LIBS := -framework GLUT -framework OpenGL
|
||||
- CC = xcrun cc
|
||||
- AR = xcrun ar
|
||||
- LD = xcrun ld
|
||||
- RANLIB = xcrun ranlib
|
||||
-
|
||||
-# Linux uses pkg-config for system libraries.
|
||||
-else ifeq "$(OS)" "Linux"
|
||||
-else ifeq ($(OS),Linux)
|
||||
- HAVE_OBJCOPY := yes
|
||||
|
||||
ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
|
||||
SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
|
||||
@@ -119,12 +112,6 @@
|
||||
SYS_CURL_LIBS := $(shell pkg-config --libs libcurl)
|
||||
endif
|
||||
|
||||
- HAVE_GLUT := yes
|
||||
- ifeq ($(HAVE_GLUT),yes)
|
||||
- SYS_GLUT_CFLAGS :=
|
||||
- SYS_GLUT_LIBS := -lglut -lGL
|
||||
- endif
|
||||
-
|
||||
HAVE_PTHREAD := yes
|
||||
SYS_PTHREAD_CFLAGS :=
|
||||
SYS_PTHREAD_LIBS := -lpthread
|
||||
|
||||
-HAVE_GLUT := yes
|
||||
-SYS_GLUT_CFLAGS :=
|
||||
-SYS_GLUT_LIBS := -lglut -lGL
|
||||
-
|
||||
ifeq "$(shell pkg-config --exists 'libcrypto >= 1.1.0' && echo yes)" "yes"
|
||||
HAVE_LIBCRYPTO := yes
|
||||
SYS_LIBCRYPTO_CFLAGS := -DHAVE_LIBCRYPTO $(shell pkg-config --cflags libcrypto)
|
||||
@@ -113,7 +101,7 @@ SYS_CURL_CFLAGS += $(shell pkg-config --cflags openssl)
|
||||
SYS_CURL_DEPS += $(shell pkg-config --libs openssl)
|
||||
endif
|
||||
endif
|
||||
-SYS_CURL_DEPS += -lpthread -lrt
|
||||
+SYS_CURL_DEPS += -lpthread
|
||||
|
||||
ifeq "$(shell pkg-config --exists x11 xext && echo yes)" "yes"
|
||||
HAVE_X11 := yes
|
||||
diff --git a/platform/gl/gl-main.c b/platform/gl/gl-main.c
|
||||
index d58f7ba..808af18 100644
|
||||
--- a/platform/gl/gl-main.c
|
||||
+++ b/platform/gl/gl-main.c
|
||||
@@ -16,6 +16,7 @@ void glutExit(void) {}
|
||||
void glutMouseWheelFunc(void *fn) {}
|
||||
void glutInitErrorFunc(void *fn) {}
|
||||
void glutInitWarningFunc(void *fn) {}
|
||||
+#define glutSetOption(X,Y)
|
||||
#endif
|
||||
|
||||
enum
|
||||
HAVE_X11 := $(shell pkg-config --exists x11 xext && echo yes)
|
||||
ifeq ($(HAVE_X11),yes)
|
||||
X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, lib, fetchurl, fetchpatch, pkgconfig, freetype, harfbuzz, openjpeg
|
||||
{ stdenv, lib, fetchurl, pkgconfig, freetype, harfbuzz, openjpeg
|
||||
, jbig2dec, libjpeg , darwin
|
||||
, enableX11 ? true, libX11, libXext, libXi, libXrandr
|
||||
, enableCurl ? true, curl, openssl
|
||||
@ -14,23 +14,17 @@ let
|
||||
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
version = "1.13.0";
|
||||
version = "1.14.0";
|
||||
name = "mupdf-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://mupdf.com/downloads/archive/${name}-source.tar.gz";
|
||||
sha256 = "02faww5bnjw76k6igrjzwf0lnw4xd9ckc8d6ilc3c4gfrdi6j707";
|
||||
sha256 = "093p7lv6pgyymagn28n58fs0np928r0i5p2az9cc4gwccwx4hhy4";
|
||||
};
|
||||
|
||||
patches = [
|
||||
(fetchpatch {
|
||||
name = "CVE-2018-10289.patch";
|
||||
url = "https://bugs.ghostscript.com/attachment.cgi?id=15230";
|
||||
sha256 = "0jmpacxd9930g6k57kda9jrcrbk75whdlv8xwmqg5jwn848qvy4q";
|
||||
})
|
||||
]
|
||||
patches =
|
||||
# Use shared libraries to decrease size
|
||||
++ stdenv.lib.optional (!stdenv.isDarwin) ./mupdf-1.13-shared_libs-1.patch
|
||||
stdenv.lib.optional (!stdenv.isDarwin) ./mupdf-1.14-shared_libs.patch
|
||||
++ stdenv.lib.optional stdenv.isDarwin ./darwin.patch
|
||||
;
|
||||
|
||||
@ -38,7 +32,7 @@ in stdenv.mkDerivation rec {
|
||||
sed -i "s/__OPENJPEG__VERSION__/${openJpegVersion}/" source/fitz/load-jpx.c
|
||||
'';
|
||||
|
||||
makeFlags = [ "prefix=$(out)" ];
|
||||
makeFlags = [ "prefix=$(out) USE_SYSTEM_LIBS=yes" ];
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
buildInputs = [ freetype harfbuzz openjpeg jbig2dec libjpeg freeglut libGLU ]
|
||||
++ lib.optionals enableX11 [ libX11 libXext libXi libXrandr ]
|
||||
|
@ -1,45 +0,0 @@
|
||||
--- mupdf-1.12.0-source.orig/Makefile 2017-12-13 15:00:30.000000000 +0100
|
||||
+++ mupdf-1.12.0-source/Makefile 2017-12-31 00:05:23.003277481 +0100
|
||||
@@ -14,7 +14,7 @@
|
||||
# Do not specify CFLAGS or LIBS on the make invocation line - specify
|
||||
# XCFLAGS or XLIBS instead. Make ignores any lines in the makefile that
|
||||
# set a variable that was set on the command line.
|
||||
-CFLAGS += $(XCFLAGS) -Iinclude
|
||||
+CFLAGS += $(XCFLAGS) -Iinclude -fPIC
|
||||
LIBS += $(XLIBS) -lm
|
||||
|
||||
LIBS += $(FREETYPE_LIBS)
|
||||
@@ -312,10 +312,10 @@
|
||||
|
||||
# --- Library ---
|
||||
|
||||
-MUPDF_LIB = $(OUT)/libmupdf.a
|
||||
-THIRD_LIB = $(OUT)/libmupdfthird.a
|
||||
-THREAD_LIB = $(OUT)/libmuthreads.a
|
||||
-PKCS7_LIB = $(OUT)/libmupkcs7.a
|
||||
+MUPDF_LIB = $(OUT)/libmupdf.so
|
||||
+THIRD_LIB = $(OUT)/libmupdfthird.so
|
||||
+THREAD_LIB = $(OUT)/libmuthreads.so
|
||||
+PKCS7_LIB = $(OUT)/libmupkcs7.so
|
||||
|
||||
MUPDF_OBJ := \
|
||||
$(FITZ_OBJ) \
|
||||
@@ -343,13 +343,17 @@
|
||||
$(ZLIB_OBJ) \
|
||||
$(LCMS2_OBJ)
|
||||
|
||||
-$(MUPDF_LIB) : $(MUPDF_OBJ)
|
||||
+$(MUPDF_LIB) : $(MUPDF_OBJ) $(THIRD_LIB) $(THREAD_LIB)
|
||||
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf.so -Wl,--no-undefined
|
||||
$(THIRD_LIB) : $(THIRD_OBJ)
|
||||
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupdfthird.so -Wl,--no-undefined
|
||||
$(THREAD_LIB) : $(THREAD_OBJ)
|
||||
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmuthreads.so -Wl,--no-undefined -lpthread
|
||||
$(PKCS7_LIB) : $(PKCS7_OBJ)
|
||||
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupkcs7.so
|
||||
|
||||
-INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB)
|
||||
+INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB) $(THREAD_LIB) $(PKCS7_LIB)
|
||||
|
||||
# --- Tools and Apps ---
|
||||
|
39
pkgs/applications/misc/mupdf/mupdf-1.14-shared_libs.patch
Normal file
39
pkgs/applications/misc/mupdf/mupdf-1.14-shared_libs.patch
Normal file
@ -0,0 +1,39 @@
|
||||
--- mupdf-1.14.0-source.orig/Makefile 2018-11-02 06:57:12.114012496 +0100
|
||||
+++ mupdf-1.14.0-source/Makefile 2018-11-02 09:57:10.067945307 +0100
|
||||
@@ -20,7 +20,7 @@
|
||||
# Do not specify CFLAGS or LIBS on the make invocation line - specify
|
||||
# XCFLAGS or XLIBS instead. Make ignores any lines in the makefile that
|
||||
# set a variable that was set on the command line.
|
||||
-CFLAGS += $(XCFLAGS) -Iinclude
|
||||
+CFLAGS += $(XCFLAGS) -Iinclude -fPIC
|
||||
LIBS += $(XLIBS) -lm
|
||||
|
||||
ifneq ($(threading),no)
|
||||
@@ -190,17 +190,21 @@
|
||||
|
||||
# --- Library ---
|
||||
|
||||
-MUPDF_LIB = $(OUT)/libmupdf.a
|
||||
-THIRD_LIB = $(OUT)/libmupdf-third.a
|
||||
-THREAD_LIB = $(OUT)/libmupdf-threads.a
|
||||
-PKCS7_LIB = $(OUT)/libmupdf-pkcs7.a
|
||||
+MUPDF_LIB = $(OUT)/libmupdf.so
|
||||
+THIRD_LIB = $(OUT)/libmupdf-third.so
|
||||
+THREAD_LIB = $(OUT)/libmupdf-threads.so
|
||||
+PKCS7_LIB = $(OUT)/libmupdf-pkcs7.so
|
||||
|
||||
-$(MUPDF_LIB) : $(MUPDF_OBJ)
|
||||
+$(MUPDF_LIB) : $(MUPDF_OBJ) $(THIRD_LIB) $(THREAD_LIB)
|
||||
+ $(LINK_CMD) $(THIRD_LIBS) -shared -Wl,-soname -Wl,libmupdf.so -Wl,--no-undefined
|
||||
$(THIRD_LIB) : $(THIRD_OBJ)
|
||||
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-third.so -Wl,--no-undefined
|
||||
$(THREAD_LIB) : $(THREAD_OBJ)
|
||||
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-threads.so -Wl,--no-undefined -lpthread
|
||||
$(PKCS7_LIB) : $(PKCS7_OBJ)
|
||||
+ $(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-pkcs7.so
|
||||
|
||||
-INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB)
|
||||
+INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB) $(THREAD_LIB) $(PKCS7_LIB)
|
||||
|
||||
# --- Main tools and viewers ---
|
||||
|
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