Merge master into staging

Taken the version from recent channel bump, as it's well-tested.
Close #11460.
This commit is contained in:
Vladimír Čunát 2015-12-05 10:24:58 +01:00
commit 476c96b5c6
617 changed files with 47428 additions and 13841 deletions

View File

@ -88,6 +88,13 @@ in ...</programlisting>
<section xml:id="sec-pkg-overrideDerivation">
<title>&lt;pkg&gt;.overrideDerivation</title>
<warning>
<para>Do not use this function in Nixpkgs. Because it breaks
package abstraction and doesnt provide error checking for
function arguments, it is only intended for ad-hoc customisation
(such as in <filename>~/.nixpkgs/config.nix</filename>).</para>
</warning>
<para>
The function <varname>overrideDerivation</varname> is usually available for all the
derivations in the nixpkgs expression (<varname>pkgs</varname>).

View File

@ -196,12 +196,12 @@ you need it.</para>
<para>
Currently supported interpreters are <varname>python26</varname>, <varname>python27</varname>,
<varname>python32</varname>, <varname>python33</varname>, <varname>python34</varname>
<varname>python33</varname>, <varname>python34</varname>, <varname>python35</varname>
and <varname>pypy</varname>.
</para>
<para>
<varname>python</varname> is an alias of <varname>python27</varname> and <varname>python3</varname> is an alias of <varname>python34</varname>.
<varname>python</varname> is an alias to <varname>python27</varname> and <varname>python3</varname> is an alias to <varname>python34</varname>.
</para>
<para>
@ -231,7 +231,7 @@ are provided with all modules included.</para>
</para>
<para>
All packages depending on any Python interpreter get appended <varname>$out/${python.libPrefix}/site-packages</varname>
All packages depending on any Python interpreter get appended <varname>$out/${python.sitePackages}</varname>
to <literal>$PYTHONPATH</literal> if such directory exists.
</para>
@ -306,7 +306,7 @@ twisted = buildPythonPackage {
Most of Python packages that use <varname>buildPythonPackage</varname> are defined
in <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/python-packages.nix"><filename>pkgs/top-level/python-packages.nix</filename></link>
and generated for each python interpreter separately into attribute sets <varname>python26Packages</varname>,
<varname>python27Packages</varname>, <varname>python32Packages</varname>, <varname>python33Packages</varname>,
<varname>python27Packages</varname>, <varname>python35Packages</varname>, <varname>python33Packages</varname>,
<varname>python34Packages</varname> and <varname>pypyPackages</varname>.
</para>
@ -314,20 +314,14 @@ twisted = buildPythonPackage {
<function>buildPythonPackage</function> mainly does four things:
<orderedlist>
<listitem><para>
In the <varname>configurePhase</varname>, it patches
<literal>setup.py</literal> to always include setuptools before
distutils for monkeypatching machinery to take place.
</para></listitem>
<listitem><para>
In the <varname>buildPhase</varname>, it calls
<literal>${python.interpreter} setup.py build ...</literal>
<literal>${python.interpreter} setup.py bdist_wheel</literal> to build a wheel binary zipfile.
</para></listitem>
<listitem><para>
In the <varname>installPhase</varname>, it calls
<literal>${python.interpreter} setup.py install ...</literal>
In the <varname>installPhase</varname>, it installs the wheel file using
<literal>pip install *.whl</literal>.
</para></listitem>
<listitem><para>
@ -336,11 +330,15 @@ twisted = buildPythonPackage {
directory to include <literal>$PYTHONPATH</literal> and <literal>$PATH</literal>
environment variables.
</para></listitem>
<listitem><para>
In the <varname>installCheck</varname> phase, <literal>${python.interpreter} setup.py test</literal>
is ran.
</para></listitem>
</orderedlist>
</para>
<para>By default <varname>doCheck = true</varname> is set and tests are run with
<literal>${python.interpreter} setup.py test</literal> command in <varname>checkPhase</varname>.</para>
<para>By default <varname>doCheck = true</varname> is set</para>
<para>
As in Perl, dependencies on other Python packages can be specified in the
@ -382,17 +380,10 @@ twisted = buildPythonPackage {
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>setupPyInstallFlags</varname></term>
<listitem><para>
List of flags passed to <command>setup.py install</command> command.
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>setupPyBuildFlags</varname></term>
<listitem><para>
List of flags passed to <command>setup.py build</command> command.
List of flags passed to <command>setup.py build_ext</command> command.
</para></listitem>
</varlistentry>
@ -400,7 +391,7 @@ twisted = buildPythonPackage {
<term><varname>pythonPath</varname></term>
<listitem><para>
List of packages to be added into <literal>$PYTHONPATH</literal>.
Packages in <varname>pythonPath</varname> are not propagated into user environment
Packages in <varname>pythonPath</varname> are not propagated
(contrary to <varname>propagatedBuildInputs</varname>).
</para></listitem>
</varlistentry>
@ -419,15 +410,6 @@ twisted = buildPythonPackage {
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>distutilsExtraCfg</varname></term>
<listitem><para>
Extra lines passed to <varname>[easy_install]</varname> section of
<filename>distutils.cfg</filename> (acts as global setup.cfg
configuration).
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>makeWrapperArgs</varname></term>
<listitem><para>
@ -545,7 +527,7 @@ exist in community to help save time. No tool is preferred at the moment.
<para>
To develop Python packages <function>buildPythonPackage</function> has
additional logic inside <varname>shellPhase</varname> to run
<command>${python.interpreter} setup.py develop</command> for the package.
<command>pip install -e . --prefix $TMPDIR/</command> for the package.
</para>
<warning><para><varname>shellPhase</varname> is executed only if <filename>setup.py</filename>

View File

@ -33,7 +33,7 @@ the package. The value of a meta-attribute must be a string.</para>
command-line using <command>nix-env</command>:
<screen>
$ nix-env -qa hello --meta --json
$ nix-env -qa hello --json
{
"hello": {
"meta": {

View File

@ -96,6 +96,7 @@
enolan = "Echo Nolan <echo@echonolan.net>";
epitrochoid = "Mabry Cervin <mpcervin@uncg.edu>";
ericbmerritt = "Eric Merritt <eric@afiniate.com>";
ericsagnes = "Eric Sagnes <eric.sagnes@gmail.com>";
erikryb = "Erik Rybakken <erik.rybakken@math.ntnu.no>";
ertes = "Ertugrul Söylemez <ertesx@gmx.de>";
exlevan = "Alexey Levan <exlevan@gmail.com>";
@ -181,12 +182,14 @@
malyn = "Michael Alyn Miller <malyn@strangeGizmo.com>";
manveru = "Michael Fellinger <m.fellinger@gmail.com>";
marcweber = "Marc Weber <marco-oweber@gmx.de>";
markWot = "Markus Wotringer <markus@wotringer.de";
maurer = "Matthew Maurer <matthew.r.maurer+nix@gmail.com>";
matejc = "Matej Cotman <cotman.matej@gmail.com>";
mathnerd314 = "Mathnerd314 <mathnerd314.gph+hs@gmail.com>";
matthiasbeyer = "Matthias Beyer <mail@beyermatthias.de>";
mbakke = "Marius Bakke <ymse@tuta.io>";
mbe = "Brandon Edens <brandonedens@gmail.com>";
mcmtroffaes = "Matthias C. M. Troffaes <matthias.troffaes@gmail.com>";
meditans = "Carlo Nucera <meditans@gmail.com>";
meisternu = "Matt Miemiec <meister@krutt.org>";
michelk = "Michel Kuhlmann <michel@kuhlmanns.info>";
@ -218,6 +221,7 @@
page = "Carles Pagès <page@cubata.homelinux.net>";
paholg = "Paho Lurie-Gregg <paho@paholg.com>";
pakhfn = "Fedor Pakhomov <pakhfn@gmail.com>";
palo = "Ingolf Wanger <palipalo9@googlemail.com>";
pashev = "Igor Pashev <pashev.igor@gmail.com>";
pesterhazy = "Paulus Esterhazy <pesterhazy@gmail.com>";
phausmann = "Philipp Hausmann <nix@314.ch>";
@ -229,6 +233,7 @@
pjones = "Peter Jones <pjones@devalot.com>";
pkmx = "Chih-Mao Chen <pkmx.tw@gmail.com>";
plcplc = "Philip Lykke Carlsen <plcplc@gmail.com>";
Phlogistique = "Noé Rubinstein <noe.rubinstein@gmail.com>";
pmahoney = "Patrick Mahoney <pat@polycrystal.org>";
pmiddend = "Philipp Middendorf <pmidden@secure.mailbox.org>";
prikhi = "Pavan Rikhi <pavan.rikhi@gmail.com>";
@ -254,6 +259,7 @@
romildo = "José Romildo Malaquias <malaquias@gmail.com>";
rszibele = "Richard Szibele <richard_szibele@hotmail.com>";
rushmorem = "Rushmore Mushambi <rushmore@webenchanter.com>";
rvl = "Rodney Lorrimar <dev+nix@rodney.id.au>";
rycee = "Robert Helgesson <robert@rycee.net>";
samuelrivas = "Samuel Rivas <samuelrivas@gmail.com>";
sander = "Sander van der Burg <s.vanderburg@tudelft.nl>";
@ -286,6 +292,7 @@
theuni = "Christian Theune <ct@flyingcircus.io>";
thoughtpolice = "Austin Seipp <aseipp@pobox.com>";
titanous = "Jonathan Rudenberg <jonathan@titanous.com>";
tohl = "Tomas Hlavaty <tom@logand.com>";
tokudan = "Daniel Frank <git@danielfrank.net>";
tomberek = "Thomas Bereknyei <tomberek@gmail.com>";
travisbhartwell = "Travis B. Hartwell <nafai@travishartwell.net>";

View File

@ -223,4 +223,12 @@ rec {
# Check whether a value is a store path.
isStorePath = x: builtins.substring 0 1 (toString x) == "/" && dirOf (builtins.toPath x) == builtins.storeDir;
# Convert string to int
# Obviously, it is a bit hacky to use fromJSON that way.
toInt = str:
let may_be_int = builtins.fromJSON str; in
if builtins.isInt may_be_int
then may_be_int
else throw "Could not convert ${str} to int.";
}

View File

@ -7,7 +7,7 @@ runTests {
expr = id 1;
expected = 1;
};
testConst = {
expr = const 2 3;
expected = 2;
@ -19,12 +19,12 @@ runTests {
expected = true;
};
*/
testAnd = {
expr = and true false;
expected = false;
};
testFix = {
expr = fix (x: {a = if x ? a then "a" else "b";});
expected = {a = "a";};
@ -67,7 +67,7 @@ runTests {
};
testOverridableDelayableArgsTest = {
expr =
expr =
let res1 = defaultOverridableDelayableArgs id {};
res2 = defaultOverridableDelayableArgs id { a = 7; };
res3 = let x = defaultOverridableDelayableArgs id { a = 7; };
@ -87,7 +87,7 @@ runTests {
in (x2.replace) { a = 10; }; # and override the value by 10
# fixed tests (delayed args): (when using them add some comments, please)
resFixed1 =
resFixed1 =
let x = defaultOverridableDelayableArgs id ( x : { a = 7; c = x.fixed.b; });
y = x.merge (x : { name = "name-${builtins.toString x.fixed.c}"; });
in (y.merge) { b = 10; };
@ -109,5 +109,15 @@ runTests {
expr = sort builtins.lessThan [ 40 2 30 42 ];
expected = [2 30 40 42];
};
testToIntShouldConvertStringToInt = {
expr = toInt "27";
expected = 27;
};
testToIntShouldThrowErrorIfItCouldNotConvertToInt = {
expr = builtins.tryEval (toInt "\"foo\"");
expected = { success = false; value = false; };
};
}

View File

@ -12,8 +12,46 @@ rec {
and = x: y: x && y;
mergeAttrs = x: y: x // y;
# Take a function and evaluate it with its own returned value.
fix = f: let result = f result; in result;
# Compute the fixed point of the given function `f`, which is usually an
# attribute set that expects its final, non-recursive representation as an
# argument:
#
# f = self: { foo = "foo"; bar = "bar"; foobar = self.foo + self.bar; }
#
# Nix evaluates this recursion until all references to `self` have been
# resolved. At that point, the final result is returned and `f x = x` holds:
#
# nix-repl> fix f
# { bar = "bar"; foo = "foo"; foobar = "foobar"; }
#
# See https://en.wikipedia.org/wiki/Fixed-point_combinator for further
# details.
fix = f: let x = f x; in x;
# A variant of `fix` that records the original recursive attribute set in the
# result. This is useful in combination with the `extends` function to
# implement deep overriding. See pkgs/development/haskell-modules/default.nix
# for a concrete example.
fix' = f: let x = f x // { __unfix__ = f; }; in x;
# Modify the contents of an explicitly recursive attribute set in a way that
# honors `self`-references. This is accomplished with a function
#
# g = self: super: { foo = super.foo + " + "; }
#
# that has access to the unmodified input (`super`) as well as the final
# non-recursive representation of the attribute set (`self`). `extends`
# differs from the native `//` operator insofar as that it's applied *before*
# references to `self` are resolved:
#
# nix-repl> fix (extends g f)
# { bar = "bar"; foo = "foo + "; foobar = "foo + bar"; }
#
# The name of the function is inspired by object-oriented inheritance, i.e.
# think of it as an infix operator `g extends f` that mimics the syntax from
# Java. It may seem counter-intuitive to have the "base class" as the second
# argument, but it's nice this way if several uses of `extends` are cascaded.
extends = f: rattrs: self: let super = rattrs self; in super // f self super;
# Flip the order of the arguments of a binary function.
flip = f: a: b: f b a;

View File

@ -26,6 +26,13 @@ nixos.path = ./nixpkgs-unstable-2015-12-06/nixos;
</itemizedlist>
<para>The following new services were added since the last release:
<itemizedlist>
<listitem><para><literal>services/monitoring/longview.nix</literal></para></listitem>
</itemizedlist>
</para>
<para>When upgrading from a previous release, please be aware of the
following incompatible changes:</para>
@ -74,6 +81,29 @@ nginx.override {
</para>
</listitem>
<listitem>
<para><command>s3sync</command> is removed, as it hasn't been
developed by upstream for 4 years and only runs with ruby 1.8.
For an actively-developer alternative look at
<command>tarsnap</command> and others.
</para>
</listitem>
<listitem>
<para><command>ruby_1_8</command> has been removed as it's not
supported from upstream anymore and probably contains security
issues.
</para>
</listitem>
<listitem>
<para><literal>tidy-html5</literal> package is removed.
Upstream only provided <literal>(lib)tidy5</literal> during development,
and now they went back to <literal>(lib)tidy</literal> to work as a drop-in
replacement of the original package that has been unmaintained for years.
You can (still) use the <literal>html-tidy</literal> package, which got updated
to a stable release from this new upstream.</para>
</listitem>
</itemizedlist>
</section>

View File

@ -119,7 +119,11 @@ $xorriso -output $out/iso/$isoName
if test -n "$usbBootable"; then
echo "Making image hybrid..."
isohybrid --uefi $out/iso/$isoName
if test -n "$efiBootable"; then
isohybrid --uefi $out/iso/$isoName
else
isohybrid $out/iso/$isoName
fi
fi
if test -n "$compressImage"; then

View File

@ -236,6 +236,7 @@
xtreemfs = 212;
calibre-server = 213;
heapster = 214;
bepasty = 215;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -304,7 +305,7 @@
nslcd = 58;
scanner = 59;
nginx = 60;
#chrony = 61; # unused
chrony = 61;
systemd-journal = 62;
smtpd = 63;
smtpq = 64;
@ -449,6 +450,7 @@
#kibana = 211;
xtreemfs = 212;
calibre-server = 213;
bepasty = 215;
# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal

View File

@ -190,6 +190,7 @@
./services/mail/spamassassin.nix
./services/misc/apache-kafka.nix
./services/misc/autofs.nix
./services/misc/bepasty.nix
./services/misc/canto-daemon.nix
./services/misc/calibre-server.nix
./services/misc/cpuminer-cryptonight.nix
@ -240,6 +241,7 @@
./services/monitoring/grafana.nix
./services/monitoring/graphite.nix
./services/monitoring/heapster.nix
./services/monitoring/longview.nix
./services/monitoring/monit.nix
./services/monitoring/munin.nix
./services/monitoring/nagios.nix

View File

@ -1,7 +1,7 @@
# This module defines the software packages included in the "minimal"
# installation CD. It might be useful elsewhere.
{ config, pkgs, ... }:
{ config, lib, pkgs, ... }:
{
# Include some utilities that are useful for installing or repairing
@ -50,5 +50,5 @@
boot.supportedFilesystems = [ "btrfs" "reiserfs" "vfat" "f2fs" "xfs" "zfs" "ntfs" "cifs" ];
# Configure host id for ZFS to work
networking.hostId = "8425e349";
networking.hostId = lib.mkDefault "8425e349";
}

View File

@ -27,7 +27,7 @@ in
};
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.ibus ];
environment.systemPackages = [ pkgs.ibus pkgs.gnome3.dconf ];
gtkPlugins = [ pkgs.ibus ];
qtPlugins = [ pkgs.ibus-qt ];

View File

@ -25,7 +25,7 @@ in
enable = mkOption {
default = false;
description = ''
Whenever to configure Zsh as an interactive shell.
Whether to configure zsh as an interactive shell.
'';
type = types.bool;
};
@ -73,6 +73,14 @@ in
type = types.lines;
};
enableCompletion = mkOption {
default = true;
description = ''
Enable zsh completion for all interactive zsh shells.
'';
type = types.bool;
};
};
};
@ -101,6 +109,13 @@ in
export HISTFILE=$HOME/.zsh_history
setopt HIST_IGNORE_DUPS SHARE_HISTORY HIST_FCNTL_LOCK
# Tell zsh how to find installed completions
for p in ''${(z)NIX_PROFILES}; do
fpath+=($p/share/zsh/site-functions $p/share/zsh/$ZSH_VERSION/functions)
done
${if cfg.enableCompletion then "autoload -U compinit && compinit" else ""}
'';
};
@ -161,7 +176,10 @@ in
environment.etc."zinputrc".source = ./zinputrc;
environment.systemPackages = [ pkgs.zsh ];
environment.systemPackages = [ pkgs.zsh ]
++ optional cfg.enableCompletion pkgs.nix-zsh-completions;
environment.pathsToLink = optional cfg.enableCompletion "/share/zsh";
#users.defaultUserShell = mkDefault "/run/current-system/sw/bin/zsh";

View File

@ -218,7 +218,7 @@ let
# Samba stuff to the Samba module. This requires that the PAM
# module provides the right hooks.
text = mkDefault
''
(''
# Account management.
account sufficient pam_unix.so
${optionalString config.users.ldap.enable
@ -241,12 +241,22 @@ let
"auth sufficient ${pkgs.pam_u2f}/lib/security/pam_u2f.so"}
${optionalString cfg.usbAuth
"auth sufficient ${pkgs.pam_usb}/lib/security/pam_usb.so"}
'' +
# Modules in this block require having the password set in PAM_AUTHTOK.
# pam_unix is marked as 'sufficient' on NixOS which means nothing will run
# after it succeeds. Certain modules need to run after pam_unix
# prompts the user for password so we run it once with 'required' at an
# earlier point and it will run again with 'sufficient' further down.
# We use try_first_pass the second time to avoid prompting password twice
(optionalString (cfg.unixAuth && (config.security.pam.enableEcryptfs || cfg.pamMount)) ''
auth required pam_unix.so ${optionalString cfg.allowNullPassword "nullok"} likeauth
${optionalString config.security.pam.enableEcryptfs
"auth optional ${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so unwrap"}
${optionalString cfg.pamMount
"auth optional ${pkgs.pam_mount}/lib/security/pam_mount.so"}
'') + ''
${optionalString cfg.unixAuth
"auth ${if (config.security.pam.enableEcryptfs || cfg.pamMount) then "required" else "sufficient"} pam_unix.so ${optionalString cfg.allowNullPassword "nullok"} likeauth"}
${optionalString cfg.pamMount
"auth optional ${pkgs.pam_mount}/lib/security/pam_mount.so"}
${optionalString config.security.pam.enableEcryptfs
"auth required ${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so unwrap"}
"auth sufficient pam_unix.so ${optionalString cfg.allowNullPassword "nullok"} likeauth try_first_pass"}
${optionalString cfg.otpwAuth
"auth sufficient ${pkgs.otpw}/lib/security/pam_otpw.so"}
${optionalString cfg.oathAuth
@ -258,7 +268,7 @@ let
auth [default=die success=done] ${pam_ccreds}/lib/security/pam_ccreds.so action=validate use_first_pass
auth sufficient ${pam_ccreds}/lib/security/pam_ccreds.so action=store use_first_pass
''}
${optionalString (!(config.security.pam.enableEcryptfs || cfg.pamMount)) "auth required pam_deny.so"}
auth required pam_deny.so
# Password management.
password requisite pam_unix.so nullok sha512
@ -306,7 +316,7 @@ let
"session optional ${pkgs.pam_mount}/lib/security/pam_mount.so"}
${optionalString (cfg.enableAppArmor && config.security.apparmor.enable)
"session optional ${pkgs.apparmor-pam}/lib/security/pam_apparmor.so order=user,group,default debug"}
'';
'');
};
};

View File

@ -0,0 +1,151 @@
{ config, lib, pkgs, ... }:
with lib;
let
gunicorn = pkgs.pythonPackages.gunicorn;
bepasty = pkgs.pythonPackages.bepasty-server;
gevent = pkgs.pythonPackages.gevent;
python = pkgs.pythonPackages.python;
cfg = config.services.bepasty;
user = "bepasty";
group = "bepasty";
default_home = "/var/lib/bepasty";
in
{
options.services.bepasty = {
enable = mkEnableOption "Bepasty servers";
servers = mkOption {
default = {};
description = ''
configure a number of bepasty servers which will be started with
gunicorn.
'';
type = with types ; attrsOf (submodule ({
options = {
bind = mkOption {
type = types.str;
description = ''
Bind address to be used for this server.
'';
example = "0.0.0.0:8000";
default = "127.0.0.1:8000";
};
dataDir = mkOption {
type = types.str;
description = ''
Path to the directory where the pastes will be saved to
'';
default = default_home+"/data";
};
defaultPermissions = mkOption {
type = types.str;
description = ''
default permissions for all unauthenticated accesses.
'';
example = "read,create,delete";
default = "read";
};
extraConfig = mkOption {
type = types.str;
description = ''
Extra configuration for bepasty server to be appended on the
configuration.
see https://bepasty-server.readthedocs.org/en/latest/quickstart.html#configuring-bepasty
for all options.
'';
default = "";
example = ''
PERMISSIONS = {
'myadminsecret': 'admin,list,create,read,delete',
}
MAX_ALLOWED_FILE_SIZE = 5 * 1000 * 1000
'';
};
secretKey = mkOption {
type = types.str;
description = ''
server secret for safe session cookies, must be set.
'';
default = "";
};
workDir = mkOption {
type = types.str;
description = ''
Path to the working directory (used for config and pidfile).
Defaults to the users home directory.
'';
default = default_home;
};
};
}));
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ bepasty ];
# creates gunicorn systemd service for each configured server
systemd.services = mapAttrs' (name: server:
nameValuePair ("bepasty-server-${name}-gunicorn")
({
description = "Bepasty Server ${name}";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
restartIfChanged = true;
environment = {
BEPASTY_CONFIG = "${server.workDir}/bepasty-${name}.conf";
PYTHONPATH= "${bepasty}/lib/${python.libPrefix}/site-packages:${gevent}/lib/${python.libPrefix}/site-packages";
};
serviceConfig = {
Type = "simple";
PrivateTmp = true;
ExecStartPre = assert server.secretKey != ""; pkgs.writeScript "bepasty-server.${name}-init" ''
#!/bin/sh
mkdir -p "${server.workDir}"
mkdir -p "${server.dataDir}"
chown ${user}:${group} "${server.workDir}" "${server.dataDir}"
cat > ${server.workDir}/bepasty-${name}.conf <<EOF
SITENAME="${name}"
STORAGE_FILESYSTEM_DIRECTORY="${server.dataDir}"
SECRET_KEY="${server.secretKey}"
DEFAULT_PERMISSIONS="${server.defaultPermissions}"
${server.extraConfig}
EOF
'';
ExecStart = ''${gunicorn}/bin/gunicorn bepasty.wsgi --name ${name} \
-u ${user} \
-g ${group} \
--workers 3 --log-level=info \
--bind=${server.bind} \
--pid ${server.workDir}/gunicorn-${name}.pid \
-k gevent
'';
};
})
) cfg.servers;
users.extraUsers = [{
uid = config.ids.uids.bepasty;
name = user;
group = group;
home = default_home;
}];
users.extraGroups = [{
name = group;
gid = config.ids.gids.bepasty;
}];
};
}

View File

@ -121,6 +121,7 @@ in
disnix =
{ description = "Disnix server";
wants = [ "dysnomia.target" ];
wantedBy = [ "multi-user.target" ];
after = [ "dbus.service" ]
++ optional config.services.httpd.enable "httpd.service"
@ -137,6 +138,17 @@ in
environment = {
HOME = "/root";
};
preStart = ''
mkdir -p /etc/systemd-mutable/system
if [ ! -f /etc/systemd-mutable/system/dysnomia.target ]
then
( echo "[Unit]"
echo "Description=Services that are activated and deactivated by Dysnomia"
echo "After=final.target"
) > /etc/systemd-mutable/system/dysnomia.target
fi
'';
exec = "disnix-service";
};

View File

@ -41,8 +41,15 @@ let
};
carbonOpts = name: with config.ids; ''
--nodaemon --syslog --prefix=${name} --pidfile ${dataDir}/${name}.pid ${name}
--nodaemon --syslog --prefix=${name} --pidfile /run/${name}/${name}.pid ${name}
'';
mkPidFileDir = name: ''
mkdir -p /run/${name}
chmod 0700 /run/${name}
chown -R graphite:graphite /run/${name}
'';
carbonEnv = {
PYTHONPATH = "${pkgs.python27Packages.carbon}/lib/python2.7/site-packages";
GRAPHITE_ROOT = dataDir;
@ -370,18 +377,20 @@ in {
config = mkMerge [
(mkIf cfg.carbon.enableCache {
systemd.services.carbonCache = {
systemd.services.carbonCache = let name = "carbon-cache"; in {
description = "Graphite Data Storage Backend";
wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ];
environment = carbonEnv;
serviceConfig = {
ExecStart = "${pkgs.twisted}/bin/twistd ${carbonOpts "carbon-cache"}";
ExecStart = "${pkgs.twisted}/bin/twistd ${carbonOpts name}";
User = "graphite";
Group = "graphite";
PermissionsStartOnly = true;
PIDFile="/run/${name}/${name}.pid";
};
preStart = ''
preStart = mkPidFileDir name + ''
mkdir -p ${cfg.dataDir}/whisper
chmod 0700 ${cfg.dataDir}/whisper
chown -R graphite:graphite ${cfg.dataDir}
@ -390,31 +399,35 @@ in {
})
(mkIf cfg.carbon.enableAggregator {
systemd.services.carbonAggregator = {
systemd.services.carbonAggregator = let name = "carbon-aggregator"; in {
enable = cfg.carbon.enableAggregator;
description = "Carbon Data Aggregator";
wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ];
environment = carbonEnv;
serviceConfig = {
ExecStart = "${pkgs.twisted}/bin/twistd ${carbonOpts "carbon-aggregator"}";
ExecStart = "${pkgs.twisted}/bin/twistd ${carbonOpts name}";
User = "graphite";
Group = "graphite";
PIDFile="/run/${name}/${name}.pid";
};
preStart = mkPidFileDir name;
};
})
(mkIf cfg.carbon.enableRelay {
systemd.services.carbonRelay = {
systemd.services.carbonRelay = let name = "carbon-relay"; in {
description = "Carbon Data Relay";
wantedBy = [ "multi-user.target" ];
after = [ "network-interfaces.target" ];
environment = carbonEnv;
serviceConfig = {
ExecStart = "${pkgs.twisted}/bin/twistd ${carbonOpts "carbon-relay"}";
ExecStart = "${pkgs.twisted}/bin/twistd ${carbonOpts name}";
User = "graphite";
Group = "graphite";
PIDFile="/run/${name}/${name}.pid";
};
preStart = mkPidFileDir name;
};
})

View File

@ -0,0 +1,118 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.longview;
pidFile = "/run/longview.pid";
apacheConf = optionalString (cfg.apacheStatusUrl != "") ''
location ${cfg.apacheStatusUrl}?auto
'';
mysqlConf = optionalString (cfg.mysqlUser != "") ''
username ${cfg.mysqlUser}
password ${cfg.mysqlPassword}
'';
nginxConf = optionalString (cfg.nginxStatusUrl != "") ''
location ${cfg.nginxStatusUrl}
'';
in
{
options = {
services.longview = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
If enabled, system metrics will be sent to Linode LongView.
'';
};
apiKey = mkOption {
type = types.str;
example = "01234567-89AB-CDEF-0123456789ABCDEF";
description = ''
Longview API key. To get this, look in Longview settings which
are found at https://manager.linode.com/longview/.
'';
};
apacheStatusUrl = mkOption {
type = types.str;
default = "";
example = "http://127.0.0.1/server-status";
description = ''
The Apache status page URL. If provided, Longview will
gather statistics from this location. This requires Apache
mod_status to be loaded and enabled.
'';
};
nginxStatusUrl = mkOption {
type = types.str;
default = "";
example = "http://127.0.0.1/nginx_status";
description = ''
The Nginx status page URL. Longview will gather statistics
from this URL. This requires the Nginx stub_status module to
be enabled and configured at the given location.
'';
};
mysqlUser = mkOption {
type = types.str;
default = "";
description = ''
The user for connecting to the MySQL database. If provided,
Longview will connect to MySQL and collect statistics about
queries, etc. This user does not need to have been granted
any extra privileges.
'';
};
mysqlPassword = mkOption {
type = types.str;
description = ''
The password corresponding to mysqlUser. Warning: this is
stored in cleartext in the Nix store!
'';
};
};
};
config = mkIf cfg.enable {
systemd.services.longview =
{ description = "Longview Metrics Collection";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig.Type = "forking";
serviceConfig.ExecStop = "-${pkgs.coreutils}/bin/kill -TERM $MAINPID";
serviceConfig.ExecReload = "-${pkgs.coreutils}/bin/kill -HUP $MAINPID";
serviceConfig.PIDFile = pidFile;
serviceConfig.ExecStart = "${pkgs.longview}/bin/longview";
};
environment.etc."linode/longview.key" = {
mode = "0400";
text = cfg.apiKey;
};
environment.etc."linode/longview.d/Apache.conf" = {
mode = "0400";
text = apacheConf;
};
environment.etc."linode/longview.d/MySQL.conf" = {
mode = "0400";
text = mysqlConf;
};
environment.etc."linode/longview.d/Nginx.conf" = {
mode = "0400";
text = nginxConf;
};
};
}

View File

@ -6,13 +6,21 @@ let
cfg = config.services.statsd;
isBuiltinBackend = name:
builtins.elem name [ "graphite" "console" "repeater" ];
configFile = pkgs.writeText "statsd.conf" ''
{
address: "${cfg.host}",
port: "${toString cfg.port}",
mgmt_address: "${cfg.mgmt_address}",
mgmt_port: "${toString cfg.mgmt_port}",
backends: [${concatMapStringsSep "," (el: if (nixType el) == "string" then ''"./backends/${el}"'' else ''"${head el.names}"'') cfg.backends}],
backends: [${
concatMapStringsSep "," (name:
if (isBuiltinBackend name)
then ''"./backends/${name}"''
else ''"${name}"''
) cfg.backends}],
${optionalString (cfg.graphiteHost!=null) ''graphiteHost: "${cfg.graphiteHost}",''}
${optionalString (cfg.graphitePort!=null) ''graphitePort: "${toString cfg.graphitePort}",''}
console: {
@ -66,9 +74,16 @@ in
backends = mkOption {
description = "List of backends statsd will use for data persistence";
default = ["graphite"];
example = ["graphite" pkgs.nodePackages."statsd-influxdb-backend"];
type = types.listOf (types.either types.str types.package);
default = [];
example = [
"graphite"
"console"
"repeater"
"statsd-librato-backend"
"stackdriver-statsd-backend"
"statsd-influxdb-backend"
];
type = types.listOf types.str;
};
graphiteHost = mkOption {
@ -105,15 +120,17 @@ in
description = "Statsd Server";
wantedBy = [ "multi-user.target" ];
environment = {
NODE_PATH=concatMapStringsSep ":" (el: "${el}/lib/node_modules") (filter (el: (nixType el) != "string") cfg.backends);
NODE_PATH=concatMapStringsSep ":"
(pkg: "${builtins.getAttr pkg pkgs.statsd.nodePackages}/lib/node_modules")
(filter (name: !isBuiltinBackend name) cfg.backends);
};
serviceConfig = {
ExecStart = "${pkgs.nodePackages.statsd}/bin/statsd ${configFile}";
ExecStart = "${pkgs.statsd}/bin/statsd ${configFile}";
User = "statsd";
};
};
environment.systemPackages = [pkgs.nodePackages.statsd];
environment.systemPackages = [ pkgs.statsd ];
};

View File

@ -8,26 +8,10 @@ let
stateDir = "/var/lib/chrony";
chronyUser = "chrony";
keyFile = "/etc/chrony.keys";
cfg = config.services.chrony;
configFile = pkgs.writeText "chrony.conf" ''
${toString (map (server: "server " + server + "\n") cfg.servers)}
${optionalString cfg.initstepslew.enabled ''
initstepslew ${toString cfg.initstepslew.threshold} ${toString (map (server: server + " ") cfg.initstepslew.servers)}
''}
driftfile ${stateDir}/chrony.drift
${optionalString (!config.time.hardwareClockInLocalTime) "rtconutc"}
${cfg.extraConfig}
'';
chronyFlags = "-m -f ${configFile} -u ${chronyUser}";
in
{
@ -47,12 +31,7 @@ in
};
servers = mkOption {
default = [
"0.nixos.pool.ntp.org"
"1.nixos.pool.ntp.org"
"2.nixos.pool.ntp.org"
"3.nixos.pool.ntp.org"
];
default = config.services.ntp.servers;
description = ''
The set of NTP servers from which to synchronise.
'';
@ -90,28 +69,60 @@ in
# Make chronyc available in the system path
environment.systemPackages = [ pkgs.chrony ];
environment.etc."chrony.conf".text =
''
${concatMapStringsSep "\n" (server: "server " + server) cfg.servers}
${optionalString
cfg.initstepslew.enabled
"initstepslew ${toString cfg.initstepslew.threshold} ${concatStringsSep " " cfg.initstepslew.servers}"
}
driftfile ${stateDir}/chrony.drift
keyfile ${keyFile}
generatecommandkey
${optionalString (!config.time.hardwareClockInLocalTime) "rtconutc"}
${cfg.extraConfig}
'';
users.extraGroups = singleton
{ name = "chrony";
gid = config.ids.gids.chrony;
};
users.extraUsers = singleton
{ name = chronyUser;
{ name = "chrony";
uid = config.ids.uids.chrony;
group = "chrony";
description = "chrony daemon user";
home = stateDir;
};
jobs.chronyd =
{ description = "chrony daemon";
systemd.services.ntpd.enable = false;
systemd.services.chronyd =
{ description = "chrony NTP daemon";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
conflicts = [ "ntpd.service" "systemd-timesyncd.service" ];
path = [ chrony ];
path = [ pkgs.chrony ];
preStart =
''
mkdir -m 0755 -p ${stateDir}
chown ${chronyUser} ${stateDir}
touch ${keyFile}
chmod 0640 ${keyFile}
chown chrony:chrony ${stateDir} ${keyFile}
'';
exec = "chronyd -n ${chronyFlags}";
serviceConfig =
{ ExecStart = "${pkgs.chrony}/bin/chronyd -n -m -u chrony";
};
};
};

View File

@ -10,23 +10,59 @@ let
extip = "EXTIP=\$(${pkgs.curl}/bin/curl -sf \"http://jsonip.com\" | ${pkgs.gawk}/bin/awk -F'\"' '{print $4}')";
i2pSh = pkgs.writeScriptBin "i2pd" ''
toOneZero = b: if b then "1" else "0";
i2pdConf = pkgs.writeText "i2pd.conf" ''
v6 = ${toOneZero cfg.enableIPv6}
unreachable = ${toOneZero cfg.unreachable}
floodfill = ${toOneZero cfg.floodfill}
${if isNull cfg.port then "" else "port = ${toString cfg.port}"}
httpproxyport = ${toString cfg.proxy.httpPort}
socksproxyport = ${toString cfg.proxy.socksPort}
ircaddress = ${cfg.irc.host}
ircport = ${toString cfg.irc.port}
ircdest = ${cfg.irc.dest}
irckeys = ${cfg.irc.keyFile}
eepport = ${toString cfg.eep.port}
${if isNull cfg.sam.port then "" else "--samport=${toString cfg.sam.port}"}
eephost = ${cfg.eep.host}
eepkeys = ${cfg.eep.keyFile}
'';
i2pdTunnelConf = pkgs.writeText "i2pd-tunnels.conf" ''
${flip concatMapStrings
(collect (tun: tun ? port && tun ? destination) cfg.outTunnels)
(tun: let portStr = toString tun.port; in ''
[${tun.name}]
type = client
destination = ${tun.destination}
keys = ${tun.keys}
address = ${tun.address}
port = ${toString tun.port}
'')
}
${flip concatMapStrings
(collect (tun: tun ? port && tun ? host) cfg.outTunnels)
(tun: let portStr = toString tun.port; in ''
[${tun.name}]
type = server
destination = ${tun.destination}
keys = ${tun.keys}
host = ${tun.address}
port = ${tun.port}
inport = ${tun.inPort}
accesslist = ${concatStringSep "," tun.accessList}
'')
}
'';
i2pdSh = pkgs.writeScriptBin "i2pd" ''
#!/bin/sh
${if isNull cfg.extIp then extip else ""}
${pkgs.i2pd}/bin/i2p --log=1 --daemon=0 --service=0 \
--v6=${if cfg.enableIPv6 then "1" else "0"} \
--unreachable=${if cfg.unreachable then "1" else "0"} \
${pkgs.i2pd}/bin/i2pd --log=1 --daemon=0 --service=0 \
--host=${if isNull cfg.extIp then "$EXTIP" else cfg.extIp} \
${if isNull cfg.port then "" else "--port=${toString cfg.port}"} \
--httpproxyport=${toString cfg.proxy.httpPort} \
--socksproxyport=${toString cfg.proxy.socksPort} \
--ircport=${toString cfg.irc.port} \
--ircdest=${cfg.irc.dest} \
--irckeys=${cfg.irc.keyFile} \
--eepport=${toString cfg.eep.port} \
${if isNull cfg.sam.port then "" else "--samport=${toString cfg.sam.port}"} \
--eephost=${cfg.eep.host} \
--eepkeys=${cfg.eep.keyFile}
--conf=${i2pdConf} \
--tunnelscfg=${i2pdTunnelConf}
'';
in
@ -63,11 +99,19 @@ in
'';
};
floodfill = mkOption {
type = types.bool;
default = false;
description = ''
If the router is declared to be unreachable and needs introduction nodes.
'';
};
port = mkOption {
type = with types; nullOr int;
default = null;
description = ''
I2P listen port. If no one is given the router will pick between 9111 and 30777.
I2P listen port. If no one is given the router will pick between 9111 and 30777.
'';
};
@ -107,6 +151,13 @@ in
};
irc = {
host = mkOption {
type = types.str;
default = "127.0.0.1";
description = ''
Address to forward incoming traffic to. 127.0.0.1 by default.
'';
};
dest = mkOption {
type = types.str;
default = "irc.postman.i2p";
@ -163,6 +214,94 @@ in
'';
};
};
outTunnels = mkOption {
default = {};
type = with types; loaOf optionSet;
description = ''
'';
options = [ ({ name, config, ... }: {
options = {
name = mkOption {
type = types.str;
description = "The name of the tunnel.";
};
destination = mkOption {
type = types.str;
description = "Remote endpoint, I2P hostname or b32.i2p address.";
};
keys = mkOption {
type = types.str;
default = name + "-keys.dat";
description = "Keyset used for tunnel identity.";
};
address = mkOption {
type = types.str;
default = "127.0.0.1";
description = "Local bind address for tunnel.";
};
port = mkOption {
type = types.int;
default = 0;
description = "Local tunnel listen port.";
};
};
config = {
name = mkDefault name;
};
}) ];
};
inTunnels = mkOption {
default = {};
type = with types; loaOf optionSet;
description = ''
'';
options = [ ({ name, config, ... }: {
options = {
name = mkOption {
type = types.str;
description = "The name of the tunnel.";
};
keys = mkOption {
type = types.path;
default = name + "-keys.dat";
description = "Keyset used for tunnel identity.";
};
address = mkOption {
type = types.str;
default = "127.0.0.1";
description = "Local service IP address.";
};
port = mkOption {
type = types.int;
default = 0;
description = "Local tunnel listen port.";
};
inPort = mkOption {
type = types.int;
default = 0;
description = "I2P service port. Default to the tunnel's listen port.";
};
accessList = mkOption {
type = with types; listOf str;
default = [];
description = "I2P nodes that are allowed to connect to this service.";
};
};
config = {
name = mkDefault name;
};
}) ];
};
};
};
@ -190,9 +329,8 @@ in
User = "i2pd";
WorkingDirectory = homeDir;
Restart = "on-abort";
ExecStart = "${i2pSh}/bin/i2pd";
ExecStart = "${i2pdSh}/bin/i2pd";
};
};
};
}
#

View File

@ -118,7 +118,7 @@ in
systemd.services.strongswan = {
description = "strongSwan IPSec Service";
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ kmod iproute iptables utillinux ]; # XXX Linux
path = with pkgs; [ config.system.sbin.modprobe iproute iptables utillinux ]; # XXX Linux
wants = [ "keys.target" ];
after = [ "network.target" "keys.target" ];
environment = {

View File

@ -21,7 +21,7 @@ in
description = ''
Whether to enable the Syncthing, self-hosted open-source alternative
to Dropbox and BittorrentSync. Initial interface will be
available on http://127.0.0.1:8080/.
available on http://127.0.0.1:8384/.
'';
};
@ -40,6 +40,17 @@ in
'';
};
package = mkOption {
type = types.package;
default = pkgs.syncthing;
example = literalExample "pkgs.syncthing";
description = ''
Syncthing package to use.
'';
};
};
};
@ -66,7 +77,7 @@ in
};
};
environment.systemPackages = [ pkgs.syncthing ];
environment.systemPackages = [ cfg.package ];
};

View File

@ -9,7 +9,7 @@ let
homeDir = "/var/lib/transmission";
downloadDir = "${homeDir}/Downloads";
incompleteDir = "${homeDir}/.incomplete";
settingsDir = "${homeDir}/.config/transmission-daemon";
settingsFile = pkgs.writeText "settings.json" (builtins.toJSON fullSettings);
@ -21,7 +21,7 @@ let
else toString ''"${x}"'';
# for users in group "transmission" to have access to torrents
fullSettings = cfg.settings // { umask = 2; };
fullSettings = { download-dir = downloadDir; incomplete-dir = incompleteDir; } // cfg.settings // { umask = 2; };
in
{
options = {
@ -35,7 +35,7 @@ in
Transmission daemon can be controlled via the RPC interface using
transmission-remote or the WebUI (http://localhost:9091/ by default).
Torrents are downloaded to ${homeDir}/Downloads/ by default and are
Torrents are downloaded to ${downloadDir} by default and are
accessible to users in the "transmission" group.
'';
};
@ -83,7 +83,7 @@ in
# 1) Only the "transmission" user and group have access to torrents.
# 2) Optionally update/force specific fields into the configuration file.
serviceConfig.ExecStartPre = ''
${pkgs.stdenv.shell} -c "chmod 770 ${homeDir} && mkdir -p ${settingsDir} ${downloadDir} ${incompleteDir} && rm -f ${settingsDir}/settings.json && cp -f ${settingsFile} ${settingsDir}/settings.json"
${pkgs.stdenv.shell} -c "mkdir -p ${homeDir} ${settingsDir} ${fullSettings.download-dir} ${fullSettings.incomplete-dir} && chmod 770 ${homeDir} ${settingsDir} ${fullSettings.download-dir} ${fullSettings.incomplete-dir} && rm -f ${settingsDir}/settings.json && cp -f ${settingsFile} ${settingsDir}/settings.json"
'';
serviceConfig.ExecStart = "${pkgs.transmission}/bin/transmission-daemon -f --port ${toString config.services.transmission.port}";
serviceConfig.ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";

View File

@ -70,7 +70,7 @@ let
"proxyuserpwd" => "",
/* List of trusted domains, to prevent host header poisoning ownCloud is only using these Host headers */
'trusted_domains' => array('${config.trustedDomain}'),
${if config.trustedDomain != "" then "'trusted_domains' => array('${config.trustedDomain}')," else ""}
/* Theme to use for ownCloud */
"theme" => "",
@ -331,7 +331,7 @@ let
*/
'share_folder' => '/',
'version' => '${pkgs.owncloud.version}',
'version' => '${config.package.version}',
'openssl' => '${pkgs.openssl}/bin/openssl'
@ -345,16 +345,15 @@ rec {
extraConfig =
''
ServerName ${config.siteName}
ServerAdmin ${config.adminAddr}
DocumentRoot ${documentRoot}
${if config.urlPrefix != "" then "Alias ${config.urlPrefix} ${config.package}" else ''
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
''}
<Directory ${pkgs.owncloud}>
${builtins.readFile "${pkgs.owncloud}/.htaccess"}
<Directory ${config.package}>
${builtins.readFile "${config.package}/.htaccess"}
</Directory>
'';
@ -362,12 +361,29 @@ rec {
{ name = "OC_CONFIG_PATH"; value = "${config.dataDir}/config/"; }
];
documentRoot = pkgs.owncloud;
documentRoot = if config.urlPrefix == "" then config.package else null;
enablePHP = true;
options = {
package = mkOption {
type = types.package;
default = pkgs.owncloud70;
example = literalExample "pkgs.owncloud70";
description = ''
PostgreSQL package to use.
'';
};
urlPrefix = mkOption {
default = "";
example = "/owncloud";
description = ''
The URL prefix under which the owncloud service appears.
'';
};
id = mkOption {
default = "main";
description = ''
@ -552,7 +568,7 @@ rec {
cp ${owncloudConfig} ${config.dataDir}/config/config.php
mkdir -p ${config.dataDir}/storage
mkdir -p ${config.dataDir}/apps
cp -r ${pkgs.owncloud}/apps/* ${config.dataDir}/apps/
cp -r ${config.package}/apps/* ${config.dataDir}/apps/
chmod -R ug+rw ${config.dataDir}
chmod -R o-rwx ${config.dataDir}
chown -R wwwrun:wwwrun ${config.dataDir}
@ -566,7 +582,11 @@ rec {
${pkgs.sudo}/bin/sudo -u postgres ${pkgs.postgresql}/bin/psql -h "/tmp" -U postgres -d ${config.dbName} -Atw -c "$QUERY" || true
fi
${php}/bin/php ${pkgs.owncloud}/occ upgrade || true
if [ -e ${config.package}/config/ca-bundle.crt ]; then
cp -f ${config.package}/config/ca-bundle.crt ${config.dataDir}/config/
fi
${php}/bin/php ${config.package}/occ upgrade >> ${config.dataDir}/upgrade.log || true
chown wwwrun:wwwrun ${config.dataDir}/owncloud.log || true

View File

@ -5,7 +5,7 @@ with lib;
let
version = "4.3";
version = "4.3.1";
fullversion = "${version}";
# Our bare-bones wp-config.php file using the above settings
@ -74,7 +74,7 @@ let
owner = "WordPress";
repo = "WordPress";
rev = "${fullversion}";
sha256 = "0sz5jjhjpwqis8336gyq9a77cr4sf8zahd1y4pzmpvpzn9cn503y";
sha256 = "1rk10vcv4z9p04hfzc0wkbilrgx7m9ssyr6c3w6vw3vl1bcgqxza";
};
installPhase = ''
mkdir -p $out
@ -248,7 +248,7 @@ in
if [ ! -d ${serverInfo.fullConfig.services.mysql.dataDir}/${config.dbName} ]; then
echo "Need to create the database '${config.dbName}' and grant permissions to user named '${config.dbUser}'."
# Wait until MySQL is up
while [ ! -e /var/run/mysql/mysqld.pid ]; do
while [ ! -e ${serverInfo.fullConfig.services.mysql.pidDir}/mysqld.pid ]; do
sleep 1
done
${pkgs.mysql}/bin/mysql -e 'CREATE DATABASE ${config.dbName};'

View File

@ -108,7 +108,7 @@ in
kdeApps.okular
kdeApps.print-manager
kdeApps.oxygen-icons
(kdeApps.oxygen-icons or kf5.oxygen-icons5)
pkgs.hicolor_icon_theme
plasma5.kde-gtk-config
@ -155,7 +155,7 @@ in
GST_PLUGIN_SYSTEM_PATH_1_0 = [ "/lib/gstreamer-1.0" ];
};
fonts.fonts = [ plasma5.oxygen-fonts ];
fonts.fonts = [ (plasma5.oxygen-fonts or pkgs.noto-fonts) ];
programs.ssh.askPassword = "${plasma5.ksshaskpass}/bin/ksshaskpass";

View File

@ -18,6 +18,14 @@ in
description = "Enable the Xfce desktop environment.";
};
services.xserver.desktopManager.xfce.thunarPlugins = mkOption {
default = [];
type = types.listOf types.package;
example = literalExample "[ pkgs.xfce.thunar-archive-plugin ]";
description = ''
A list of plugin that should be installed with Thunar.
'';
};
};
@ -49,7 +57,7 @@ in
pkgs.xfce.mousepad
pkgs.xfce.ristretto
pkgs.xfce.terminal
pkgs.xfce.thunar
(pkgs.xfce.thunar.override { thunarPlugins = cfg.thunarPlugins; })
pkgs.xfce.xfce4icontheme
pkgs.xfce.xfce4panel
pkgs.xfce.xfce4session

View File

@ -162,7 +162,7 @@ in
gdm.text = ''
auth requisite pam_nologin.so
auth required pam_env.so
auth required pam_env.so envfile=${config.system.build.pamEnvironment}
auth required pam_succeed_if.so uid >= 1000 quiet
auth optional ${gnome3.gnome_keyring}/lib/security/pam_gnome_keyring.so

View File

@ -0,0 +1,121 @@
{ config, lib, pkgs, ... }:
with lib;
let
dmcfg = config.services.xserver.displayManager;
ldmcfg = dmcfg.lightdm;
cfg = ldmcfg.greeters.gtk;
inherit (pkgs) stdenv lightdm writeScript writeText;
theme = cfg.theme.package;
icons = cfg.iconTheme.package;
# The default greeter provided with this expression is the GTK greeter.
# Again, we need a few things in the environment for the greeter to run with
# fonts/icons.
wrappedGtkGreeter = stdenv.mkDerivation {
name = "lightdm-gtk-greeter";
buildInputs = [ pkgs.makeWrapper ];
buildCommand = ''
# This wrapper ensures that we actually get themes
makeWrapper ${pkgs.lightdm_gtk_greeter}/sbin/lightdm-gtk-greeter \
$out/greeter \
--prefix PATH : "${pkgs.glibc}/bin" \
--set GDK_PIXBUF_MODULE_FILE "${pkgs.gdk_pixbuf}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" \
--set GTK_PATH "${theme}:${pkgs.gtk3}" \
--set GTK_EXE_PREFIX "${theme}" \
--set GTK_DATA_PREFIX "${theme}" \
--set XDG_DATA_DIRS "${theme}/share:${icons}/share" \
--set XDG_CONFIG_HOME "${theme}/share"
cat - > $out/lightdm-gtk-greeter.desktop << EOF
[Desktop Entry]
Name=LightDM Greeter
Comment=This runs the LightDM Greeter
Exec=$out/greeter
Type=Application
EOF
'';
};
gtkGreeterConf = writeText "lightdm-gtk-greeter.conf"
''
[greeter]
theme-name = ${cfg.theme.name}
icon-theme-name = ${cfg.iconTheme.name}
background = ${ldmcfg.background}
'';
in
{
options = {
services.xserver.displayManager.lightdm.greeters.gtk = {
enable = mkOption {
type = types.bool;
default = true;
description = ''
Whether to enable lightdm-gtk-greeter as the lightdm greeter.
'';
};
theme = {
package = mkOption {
type = types.path;
default = pkgs.gnome3.gnome_themes_standard;
description = ''
The package path that contains the theme given in the name option.
'';
};
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the theme to use for the lightdm-gtk-greeter.
'';
};
};
iconTheme = {
package = mkOption {
type = types.path;
default = pkgs.gnome3.defaultIconTheme;
description = ''
The package path that contains the icon theme given in the name option.
'';
};
name = mkOption {
type = types.str;
default = "Adwaita";
description = ''
Name of the icon theme to use for the lightdm-gtk-greeter.
'';
};
};
};
};
config = mkIf (ldmcfg.enable && cfg.enable) {
services.xserver.displayManager.lightdm.greeter = mkDefault {
package = wrappedGtkGreeter;
name = "lightdm-gtk-greeter";
};
environment.etc."lightdm/lightdm-gtk-greeter.conf".source = gtkGreeterConf;
};
}

View File

@ -18,38 +18,6 @@ let
exec ${dmcfg.xserverBin} ${dmcfg.xserverArgs}
'';
theme = pkgs.gnome3.gnome_themes_standard;
icons = pkgs.gnome3.defaultIconTheme;
# The default greeter provided with this expression is the GTK greeter.
# Again, we need a few things in the environment for the greeter to run with
# fonts/icons.
wrappedGtkGreeter = stdenv.mkDerivation {
name = "lightdm-gtk-greeter";
buildInputs = [ pkgs.makeWrapper ];
buildCommand = ''
# This wrapper ensures that we actually get themes
makeWrapper ${pkgs.lightdm_gtk_greeter}/sbin/lightdm-gtk-greeter \
$out/greeter \
--prefix PATH : "${pkgs.glibc}/bin" \
--set GDK_PIXBUF_MODULE_FILE "${pkgs.gdk_pixbuf}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" \
--set GTK_PATH "${theme}:${pkgs.gtk3}" \
--set GTK_EXE_PREFIX "${theme}" \
--set GTK_DATA_PREFIX "${theme}" \
--set XDG_DATA_DIRS "${theme}/share:${icons}/share" \
--set XDG_CONFIG_HOME "${theme}/share"
cat - > $out/lightdm-gtk-greeter.desktop << EOF
[Desktop Entry]
Name=LightDM Greeter
Comment=This runs the LightDM Greeter
Exec=$out/greeter
Type=Application
EOF
'';
};
usersConf = writeText "users.conf"
''
[UserList]
@ -72,34 +40,42 @@ let
${cfg.extraSeatDefaults}
'';
gtkGreeterConf = writeText "lightdm-gtk-greeter.conf"
''
[greeter]
theme-name = Adwaita
icon-theme-name = Adwaita
background = ${cfg.background}
'';
in
{
# Note: the order in which lightdm greeter modules are imported
# here determines the default: later modules (if enable) are
# preferred.
imports = [
./lightdm-greeters/gtk.nix
];
options = {
services.xserver.displayManager.lightdm = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable lightdm as the display manager.
'';
};
greeter = mkOption {
description = ''
The LightDM greeter to login via. The package should be a directory
containing a .desktop file matching the name in the 'name' option.
'';
default = {
name = "lightdm-gtk-greeter";
package = wrappedGtkGreeter;
greeter = {
package = mkOption {
type = types.path;
description = ''
The LightDM greeter to login via. The package should be a directory
containing a .desktop file matching the name in the 'name' option.
'';
};
name = mkOption {
type = types.string;
description = ''
The name of a .desktop file in the directory specified
in the 'package' option.
'';
};
};
@ -135,7 +111,6 @@ in
'';
};
environment.etc."lightdm/lightdm-gtk-greeter.conf".source = gtkGreeterConf;
environment.etc."lightdm/lightdm.conf".source = lightdmConf;
environment.etc."lightdm/users.conf".source = usersConf;
@ -150,7 +125,7 @@ in
allowNullPassword = true;
startSession = true;
text = ''
auth required pam_env.so
auth required pam_env.so envfile=${config.system.build.pamEnvironment}
auth required pam_permit.so
account required pam_permit.so

View File

@ -30,7 +30,7 @@ let
label = mkOption {
default = null;
example = "rootfs";
type = types.uniq (types.nullOr types.str);
type = types.nullOr types.str;
description = "Label of the unlocked encrypted device. Set <literal>fileSystems.&lt;name?&gt;.device</literal> to <literal>/dev/mapper/&lt;label&gt;</literal> to mount the unlocked device.";
};

View File

@ -47,6 +47,41 @@ let
system = config.nixpkgs.system;
bindMountOpts = { name, config, ... }: {
options = {
mountPoint = mkOption {
example = "/mnt/usb";
type = types.str;
description = "Mount point on the container file system.";
};
hostPath = mkOption {
default = null;
example = "/home/alice";
type = types.nullOr types.str;
description = "Location of the host path to be mounted.";
};
isReadOnly = mkOption {
default = true;
example = true;
type = types.bool;
description = "Determine whether the mounted path will be accessed in read-only mode.";
};
};
config = {
mountPoint = mkDefault name;
};
};
mkBindFlag = d:
let flagPrefix = if d.isReadOnly then " --bind-ro=" else " --bind=";
mountstr = if d.hostPath != null then "${d.hostPath}:${d.mountPoint}" else "${d.mountPoint}";
in flagPrefix + mountstr ;
mkBindFlags = bs: concatMapStrings mkBindFlag (lib.attrValues bs);
in
{
@ -142,6 +177,21 @@ in
Wether the container is automatically started at boot-time.
'';
};
bindMounts = mkOption {
type = types.loaOf types.optionSet;
options = [ bindMountOpts ];
default = {};
example = { "/home" = { hostPath = "/home/alice";
isReadOnly = false; };
};
description =
''
An extra list of directories that is bound to the container.
'';
};
};
config = mkMerge
@ -249,12 +299,15 @@ in
fi
''}
# Run systemd-nspawn without startup notification (we'll
# wait for the container systemd to signal readiness).
EXIT_ON_REBOOT=1 NOTIFY_SOCKET= \
exec ${config.systemd.package}/bin/systemd-nspawn \
--keep-unit \
-M "$INSTANCE" -D "$root" $extraFlags \
$EXTRA_NSPAWN_FLAGS \
--bind-ro=/nix/store \
--bind-ro=/nix/var/nix/db \
--bind-ro=/nix/var/nix/daemon-socket \
@ -354,6 +407,7 @@ in
${optionalString cfg.autoStart ''
AUTO_START=1
''}
EXTRA_NSPAWN_FLAGS="${mkBindFlags cfg.bindMounts}"
'';
}) config.containers;

View File

@ -285,6 +285,7 @@ in rec {
tests.proxy = callTest tests/proxy.nix {};
tests.quake3 = callTest tests/quake3.nix {};
tests.runInMachine = callTest tests/run-in-machine.nix {};
tests.sddm = callTest tests/sddm.nix {};
tests.simple = callTest tests/simple.nix {};
tests.tomcat = callTest tests/tomcat.nix {};
tests.udisks2 = callTest tests/udisks2.nix {};

View File

@ -26,8 +26,8 @@ import ./make-test.nix (
</head>
<body onload="javascript:document.title='startup done'">
<img src="file://${pkgs.fetchurl {
url = "http://nixos.org/logo/nixos.svg";
sha256 = "0p2iaqcx2cj24xqycfw1pi4i5461gnn0034lafpi99ph435x6z68";
url = "http://nixos.org/logo/nixos-hex.svg";
sha256 = "0wxpp65npdw2cg8m0cxc9qff1sb3b478cxpg1741d8951g948rg8";
}}" />
</body>
</html>

View File

@ -171,7 +171,7 @@ let
];
virtualisation.diskSize = 8 * 1024;
virtualisation.memorySize = 768;
virtualisation.memorySize = 1024;
virtualisation.writableStore = true;
# Use a small /dev/vdb as the root disk for the

View File

@ -80,6 +80,7 @@ import ./make-test.nix ({ pkgs, ...} : {
};
# Test whether systemd-udevd automatically loads modules for our hardware.
$machine->succeed("systemctl start systemd-udev-settle.service");
subtest "udev-auto-load", sub {
$machine->waitForUnit('systemd-udev-settle.service');
$machine->succeed('lsmod | grep psmouse');

28
nixos/tests/sddm.nix Normal file
View File

@ -0,0 +1,28 @@
import ./make-test.nix ({ pkgs, ...} : {
name = "sddm";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ ttuegel ];
};
machine = { lib, ... }: {
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
services.xserver.displayManager.sddm = {
enable = true;
autoLogin = {
enable = true;
user = "alice";
};
};
services.xserver.windowManager.default = "icewm";
services.xserver.windowManager.icewm.enable = true;
services.xserver.desktopManager.default = "none";
};
enableOCR = true;
testScript = { nodes, ... }: ''
startAll;
$machine->waitForWindow("^IceWM ");
'';
})

View File

@ -0,0 +1,31 @@
{ stdenv, fetchurl, alsaLib, jack2Full, minixml, pkgconfig }:
stdenv.mkDerivation rec {
name = packageName + "-" + version ;
packageName = "aj-snapshot" ;
version = "0.9.6" ;
src = fetchurl {
url = "mirror://sourceforge/${packageName}/${name}.tar.bz2";
sha256 = "12n2h3609fbvsnnwrwma4m55iyv6lcv1v3q5pznz2w6f12wf0c9z";
};
doCheck = false;
buildInputs = [ alsaLib minixml jack2Full pkgconfig ];
meta = with stdenv.lib; {
description = "Tool for storing/restoring JACK and/or ALSA connections to/from cml files";
longDescription = ''
Aj-snapshot is a small program that can be used to make snapshots of the connections made between JACK and/or ALSA clients.
Because JACK can provide both audio and MIDI support to programs, aj-snapshot can store both types of connections for JACK.
ALSA, on the other hand, only provides routing facilities for MIDI clients.
You can also run aj-snapshot in daemon mode if you want to have your connections continually restored.
'';
homepage = http://aj-snapshot.sourceforge.net/;
license = licenses.gpl2;
maintainers = [ maintainers.palo ];
platforms = platforms.all;
};
}

View File

@ -9,6 +9,7 @@
, wavSupport ? true, libsndfile ? null
, cdaSupport ? true, libcdio ? null, libcddb ? null
, aacSupport ? true, faad2 ? null
, midiSupport ? false, wildmidi ? null
, wavpackSupport ? false, wavpack ? null
, ffmpegSupport ? false, ffmpeg ? null
# misc plugins
@ -44,6 +45,7 @@ assert alsaSupport -> alsaLib != null;
assert pulseSupport -> libpulseaudio != null;
assert resamplerSupport -> libsamplerate != null;
assert overloadSupport -> zlib != null;
assert midiSupport -> wildmidi != null;
assert wavpackSupport -> wavpack != null;
assert remoteSupport -> curl != null;
@ -73,6 +75,7 @@ stdenv.mkDerivation rec {
++ optional pulseSupport libpulseaudio
++ optional resamplerSupport libsamplerate
++ optional overloadSupport zlib
++ optional midiSupport wildmidi
++ optional wavpackSupport wavpack
++ optional remoteSupport curl
;

View File

@ -1,20 +1,26 @@
{ stdenv
, coreutils
, fetchgit
, fetchurl
, makeWrapper
, pkgconfig
, clang
, llvm
, emscripten
, openssl
, libsndfile
, libmicrohttpd
, vim
}:
with stdenv.lib.strings;
let
version = "8-1-2015";
version = "2.0-a41";
src = fetchgit {
url = git://git.code.sf.net/p/faudiostream/code;
rev = "4db76fdc02b6aec8d15a5af77fcd5283abe963ce";
sha256 = "f1ac92092ee173e4bcf6b2cb1ac385a7c390fb362a578a403b2b6edd5dc7d5d0";
src = fetchurl {
url = "http://downloads.sourceforge.net/project/faudiostream/faust-2.0.a41.tgz";
sha256 = "1cq4x1cax0lswrcqv0limx5mjdi3187zlmh7cj2pndr0xq6b96cm";
};
meta = with stdenv.lib; {
@ -31,19 +37,22 @@ let
inherit src;
buildInputs = [ makeWrapper ];
buildInputs = [ makeWrapper llvm emscripten openssl libsndfile pkgconfig libmicrohttpd vim ];
passthru = {
inherit wrap wrapWithBuildEnv;
};
preConfigure = ''
makeFlags="$makeFlags prefix=$out"
makeFlags="$makeFlags prefix=$out LLVM_CONFIG='${llvm}/bin/llvm-config' world"
# The faust makefiles use 'system ?= $(shell uname -s)' but nix
# defines 'system' env var, so undefine that so faust detects the
# correct system.
unset system
sed -e "232s/LLVM_STATIC_LIBS/LLVMLIBS/" -i compiler/Makefile.unix
'';
# Remove most faust2appl scripts since they won't run properly

View File

@ -0,0 +1,209 @@
{ stdenv
, coreutils
, fetchgit
, makeWrapper
, pkgconfig
}:
with stdenv.lib.strings;
let
version = "8-1-2015";
src = fetchgit {
url = git://git.code.sf.net/p/faudiostream/code;
rev = "4db76fdc02b6aec8d15a5af77fcd5283abe963ce";
sha256 = "f1ac92092ee173e4bcf6b2cb1ac385a7c390fb362a578a403b2b6edd5dc7d5d0";
};
meta = with stdenv.lib; {
homepage = http://faust.grame.fr/;
downloadPage = http://sourceforge.net/projects/faudiostream/files/;
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = with maintainers; [ magnetophon pmahoney ];
};
faust = stdenv.mkDerivation {
name = "faust-${version}";
inherit src;
buildInputs = [ makeWrapper ];
passthru = {
inherit wrap wrapWithBuildEnv;
};
preConfigure = ''
makeFlags="$makeFlags prefix=$out"
# The faust makefiles use 'system ?= $(shell uname -s)' but nix
# defines 'system' env var, so undefine that so faust detects the
# correct system.
unset system
'';
# Remove most faust2appl scripts since they won't run properly
# without additional paths setup. See faust.wrap,
# faust.wrapWithBuildEnv.
postInstall = ''
# syntax error when eval'd directly
pattern="faust2!(svg)"
(shopt -s extglob; rm "$out"/bin/$pattern)
'';
postFixup = ''
# Set faustpath explicitly.
substituteInPlace "$out"/bin/faustpath \
--replace "/usr/local /usr /opt /opt/local" "$out"
# The 'faustoptflags' is 'source'd into other faust scripts and
# not used as an executable, so patch 'uname' usage directly
# rather than use makeWrapper.
substituteInPlace "$out"/bin/faustoptflags \
--replace uname "${coreutils}/bin/uname"
# wrapper for scripts that don't need faust.wrap*
for script in "$out"/bin/faust2*; do
wrapProgram "$script" \
--prefix PATH : "$out"/bin
done
'';
meta = meta // {
description = "A functional programming language for realtime audio signal processing";
longDescription = ''
FAUST (Functional Audio Stream) is a functional programming
language specifically designed for real-time signal processing
and synthesis. FAUST targets high-performance signal processing
applications and audio plug-ins for a variety of platforms and
standards.
The Faust compiler translates DSP specifications into very
efficient C++ code. Thanks to the notion of architecture,
FAUST programs can be easily deployed on a large variety of
audio platforms and plugin formats (jack, alsa, ladspa, maxmsp,
puredata, csound, supercollider, pure, vst, coreaudio) without
any change to the FAUST code.
This package has just the compiler, libraries, and headers.
Install faust2* for specific faust2appl scripts.
'';
};
};
# Default values for faust2appl.
faust2ApplBase =
{ baseName
, dir ? "tools/faust2appls"
, scripts ? [ baseName ]
, ...
}@args:
args // {
name = "${baseName}-${version}";
inherit src;
configurePhase = ":";
buildPhase = ":";
installPhase = ''
runHook preInstall
mkdir -p "$out/bin"
for script in ${concatStringsSep " " scripts}; do
cp "${dir}/$script" "$out/bin/"
done
runHook postInstall
'';
postInstall = ''
# For the faust2appl script, change 'faustpath' and
# 'faustoptflags' to absolute paths.
for script in "$out"/bin/*; do
substituteInPlace "$script" \
--replace ". faustpath" ". '${faust}/bin/faustpath'" \
--replace ". faustoptflags" ". '${faust}/bin/faustoptflags'"
done
'';
meta = meta // {
description = "The ${baseName} script, part of faust functional programming language for realtime audio signal processing";
};
};
# Some 'faust2appl' scripts, such as faust2alsa, run faust to
# generate cpp code, then invoke the c++ compiler to build the code.
# This builder wraps these scripts in parts of the stdenv such that
# when the scripts are called outside any nix build, they behave as
# if they were running inside a nix build in terms of compilers and
# paths being configured (e.g. rpath is set so that compiled
# binaries link to the libs inside the nix store)
#
# The function takes two main args: the appl name (e.g.
# 'faust2alsa') and an optional list of propagatedBuildInputs. It
# returns a derivation that contains only the bin/${appl} script,
# wrapped up so that it will run as if it was inside a nix build
# with those build inputs.
#
# The build input 'faust' is automatically added to the
# propagatedBuildInputs.
wrapWithBuildEnv =
{ baseName
, propagatedBuildInputs ? [ ]
, ...
}@args:
stdenv.mkDerivation ((faust2ApplBase args) // {
buildInputs = [ makeWrapper pkgconfig ];
propagatedBuildInputs = [ faust ] ++ propagatedBuildInputs;
postFixup = ''
# export parts of the build environment
for script in "$out"/bin/*; do
wrapProgram "$script" \
--set FAUST_LIB_PATH "${faust}/lib/faust" \
--prefix PATH : "$PATH" \
--prefix PKG_CONFIG_PATH : "$PKG_CONFIG_PATH" \
--set NIX_CFLAGS_COMPILE "\"$NIX_CFLAGS_COMPILE\"" \
--set NIX_LDFLAGS "\"$NIX_LDFLAGS\""
done
'';
});
# Builder for 'faust2appl' scripts, such as faust2firefox that
# simply need to be wrapped with some dependencies on PATH.
#
# The build input 'faust' is automatically added to the PATH.
wrap =
{ baseName
, runtimeInputs ? [ ]
, ...
}@args:
let
runtimePath = concatStringsSep ":" (map (p: "${p}/bin") ([ faust ] ++ runtimeInputs));
in stdenv.mkDerivation ((faust2ApplBase args) // {
buildInputs = [ makeWrapper ];
postFixup = ''
for script in "$out"/bin/*; do
wrapProgram "$script" --prefix PATH : "${runtimePath}"
done
'';
});
in faust

View File

@ -15,7 +15,7 @@ in buildPythonPackage rec {
};
buildInputs = [
coverage feedparser minimock sqlite3 mygpoclient intltool
coverage minimock sqlite3 mygpoclient intltool
gnome3.gnome_themes_standard gnome3.defaultIconTheme
gnome3.gsettings_desktop_schemas
];
@ -27,8 +27,6 @@ in buildPythonPackage rec {
postPatch = "sed -ie 's/PYTHONPATH=src/PYTHONPATH=\$(PYTHONPATH):src/' makefile";
checkPhase = "make unittest";
preFixup = ''
wrapProgram $out/bin/gpodder \
--prefix XDG_DATA_DIRS : "${gnome3.gnome_themes_standard}/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH"
@ -40,17 +38,6 @@ in buildPythonPackage rec {
postFixup = ''
wrapPythonPrograms
if test -e $out/nix-support/propagated-build-inputs; then
ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages
fi
createBuildInputsPth build-inputs "$buildInputStrings"
for inputsfile in propagated-build-inputs propagated-native-build-inputs; do
if test -e $out/nix-support/$inputsfile; then
createBuildInputsPth $inputsfile "$(cat $out/nix-support/$inputsfile)"
fi
done
sed -i "$out/bin/..gpodder-wrapped-wrapped" -e '{
/import sys; sys.argv/d
}'

View File

@ -11,8 +11,8 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ groff ];
buildInputs = [ id3lib zlib ];
makeFlags = "PREFIX=$(out)";
buildFlags = "clean all";
makeFlags = [ "PREFIX=$(out)" ];
buildFlags = [ "clean" "all" ];
preInstall = ''
mkdir -p $out/{bin,share/man/man1}

View File

@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
buildInputs = [ libav libkeyfinder ];
makeFlagsArray = "PREFIX=$(out)";
makeFlags = [ "PREFIX=$(out)" ];
enableParallelBuilding = true;

View File

@ -1,5 +1,6 @@
{ stdenv, fetchurl, SDL , alsaLib, gtk, libjack2, ladspaH
, ladspaPlugins, libsamplerate, libsndfile, pkgconfig, libpulseaudio }:
{ stdenv, fetchurl, makeWrapper, SDL , alsaLib, gtk, libjack2, ladspaH
, ladspaPlugins, libsamplerate, libsndfile, pkgconfig, libpulseaudio, lame
, vorbisTools }:
stdenv.mkDerivation rec {
name = "mhwaveedit-${version}";
@ -10,15 +11,19 @@ stdenv.mkDerivation rec {
sha256 = "010rk4mr631s440q9cfgdxx2avgzysr9aq52diwdlbq9cddifli3";
};
buildInputs =
[ SDL alsaLib gtk libjack2 ladspaH libsamplerate libsndfile
pkgconfig libpulseaudio
];
buildInputs = [ SDL alsaLib gtk libjack2 ladspaH libsamplerate libsndfile
pkgconfig libpulseaudio makeWrapper ];
configureFlags = "--with-default-ladspa-path=${ladspaPlugins}/lib/ladspa";
postInstall = ''
wrapProgram $out/bin/mhwaveedit \
--prefix PATH : ${lame}/bin/ \
--prefix PATH : ${vorbisTools}/bin/
'';
meta = with stdenv.lib; {
description = "graphical program for editing, playing and recording sound files";
description = "Graphical program for editing, playing and recording sound files";
homepage = https://gna.org/projects/mhwaveedit;
license = licenses.gpl2Plus;
platforms = platforms.linux;

View File

@ -10,7 +10,7 @@ pythonPackages.buildPythonPackage rec {
sha256 = "0hhdss4i5436dj37pndxk81a4g3g8f6zqjyv04lhpqcww01290as";
};
propagatedBuildInputs = [ mopidy ];
propagatedBuildInputs = with pythonPackages; [ mopidy configobj ];
doCheck = false;

View File

@ -1,22 +1,26 @@
{ stdenv, fetchurl, python, pythonPackages, cdparanoia, cdrdao
{ stdenv, fetchgit, python, pythonPackages, cdparanoia, cdrdao
, pygobject, gst_python, gst_plugins_base, gst_plugins_good
, setuptools, utillinux, makeWrapper, substituteAll }:
, setuptools, utillinux, makeWrapper, substituteAll, autoreconfHook }:
stdenv.mkDerivation rec {
name = "morituri-${version}";
version = "0.2.3";
version = "0.2.3.20151109";
namePrefix = "";
src = fetchurl {
url = "http://thomas.apestaart.org/download/morituri/${name}.tar.bz2";
sha256 = "1b30bs1y8azl04izsrl01gw9ys0lhzkn5afxi4p8qbiri2h4v210";
src = fetchgit {
url = "https://github.com/thomasvs/morituri.git";
fetchSubmodules = true;
rev = "135b2f7bf27721177e3aeb1d26403f1b29116599";
sha256 = "1ccxq1spny6xgd7nqwn13n9nqa00ay0nhflg3vbdkvbirh8fgxwq";
};
pythonPath = [
pygobject gst_python pythonPackages.musicbrainzngs
pythonPackages.pycdio pythonPackages.pyxdg setuptools
pythonPackages.CDDB
];
nativeBuildInputs = [ autoreconfHook ];
buildInputs = [
python cdparanoia cdrdao utillinux makeWrapper
gst_plugins_base gst_plugins_good

View File

@ -1,8 +1,9 @@
diff -Nurp morituri-0.2.3-orig/doc/Makefile.in morituri-0.2.3/doc/Makefile.in
--- morituri-0.2.3-orig/doc/Makefile.in 2014-12-23 12:44:46.222410092 +0100
+++ morituri-0.2.3/doc/Makefile.in 2014-12-23 12:46:49.619756940 +0100
@@ -486,7 +486,7 @@ morituri.ics: $(top_srcdir)/morituri.doa
-moap doap -f $(top_srcdir)/morituri.doap ical > morituri.ics
diff --git a/doc/Makefile.am b/doc/Makefile.am
index c115c2c..78c883e 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -24,7 +24,7 @@ morituri.ics: $(top_srcdir)/morituri.doap
man_MANS = rip.1
rip.1: $(top_srcdir)/morituri/extern/python-command/scripts/help2man $(top_srcdir)/morituri
- PYTHONPATH=$(top_srcdir) $(PYTHON) $(top_srcdir)/morituri/extern/python-command/scripts/help2man morituri.rip.main.Rip rip > rip.1
@ -10,9 +11,10 @@ diff -Nurp morituri-0.2.3-orig/doc/Makefile.in morituri-0.2.3/doc/Makefile.in
clean-local:
@rm -rf reference
diff -Nurp morituri-0.2.3-orig/morituri/common/program.py morituri-0.2.3/morituri/common/program.py
--- morituri-0.2.3-orig/morituri/common/program.py 2014-12-23 12:44:46.218410048 +0100
+++ morituri-0.2.3/morituri/common/program.py 2014-12-23 12:46:49.647757245 +0100
diff --git a/morituri/common/program.py b/morituri/common/program.py
index d340fdd..15cb751 100644
--- a/morituri/common/program.py
+++ b/morituri/common/program.py
@@ -92,13 +92,13 @@ class Program(log.Loggable):
"""
Load the given device.
@ -38,19 +40,12 @@ diff -Nurp morituri-0.2.3-orig/morituri/common/program.py morituri-0.2.3/moritur
def getFastToc(self, runner, toc_pickle, device):
"""
diff -Nurp morituri-0.2.3-orig/morituri/extern/python-command/scripts/help2man morituri-0.2.3/morituri/extern/python-command/scripts/help2man
--- morituri-0.2.3-orig/morituri/extern/python-command/scripts/help2man 2014-12-23 12:44:46.206409916 +0100
+++ morituri-0.2.3/morituri/extern/python-command/scripts/help2man 2014-12-23 12:46:49.631757074 +0100
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!@python@/bin/python
# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4
diff -Nurp morituri-0.2.3-orig/morituri/program/cdparanoia.py morituri-0.2.3/morituri/program/cdparanoia.py
--- morituri-0.2.3-orig/morituri/program/cdparanoia.py 2014-12-23 12:44:46.202409873 +0100
+++ morituri-0.2.3/morituri/program/cdparanoia.py 2014-12-23 12:46:49.659757376 +0100
@@ -278,7 +278,7 @@ class ReadTrackTask(log.Loggable, task.T
Submodule morituri/extern/python-command contains modified content
diff --git a/morituri/program/cdparanoia.py b/morituri/program/cdparanoia.py
index 46176d5..fce14a5 100644
--- a/morituri/program/cdparanoia.py
+++ b/morituri/program/cdparanoia.py
@@ -278,7 +278,7 @@ class ReadTrackTask(log.Loggable, task.Task):
stopTrack, stopOffset)
bufsize = 1024
@ -68,9 +63,10 @@ diff -Nurp morituri-0.2.3-orig/morituri/program/cdparanoia.py morituri-0.2.3/mor
_VERSION_RE,
"%(version)s %(release)s")
diff -Nurp morituri-0.2.3-orig/morituri/program/cdrdao.py morituri-0.2.3/morituri/program/cdrdao.py
--- morituri-0.2.3-orig/morituri/program/cdrdao.py 2014-12-23 12:44:46.202409873 +0100
+++ morituri-0.2.3/morituri/program/cdrdao.py 2014-12-23 12:46:49.667757463 +0100
diff --git a/morituri/program/cdrdao.py b/morituri/program/cdrdao.py
index c6fba64..c4d0306 100644
--- a/morituri/program/cdrdao.py
+++ b/morituri/program/cdrdao.py
@@ -257,7 +257,7 @@ class CDRDAOTask(ctask.PopenTask):
def start(self, runner):

View File

@ -0,0 +1,60 @@
{ stdenv
, fetchFromGitHub
, qscintilla
, supercollider
, ruby
, cmake
, pkgconfig
, qt48Full
, bash
, makeWrapper
}:
stdenv.mkDerivation rec {
version = "2.8.0";
name = "sonic-pi-${version}";
src = fetchFromGitHub {
owner = "samaaron";
repo = "sonic-pi";
rev = "v${version}";
sha256 = "1yyavgazb6ar7xnmjx460s9p8nh70klaja2yb20nci15k8vngq9h";
};
buildInputs = [
qscintilla
supercollider
ruby
qt48Full
cmake
pkgconfig
bash
makeWrapper
];
meta = {
homepage = http://sonic-pi.net/;
description = "Free live coding synth for everyone originally designed to support computing and music lessons within schools";
license = stdenv.lib.licenses.mit;
maintainers = [ stdenv.lib.maintainers.Phlogistique ];
platforms = stdenv.lib.platforms.linux;
};
dontUseCmakeConfigure = true;
buildPhase = ''
pushd app/server/bin
${ruby}/bin/ruby compile-extensions.rb
popd
pushd app/gui/qt
${bash}/bin/bash rp-build-app
popd
'';
installPhase = ''
cp -r . $out
wrapProgram $out/bin/sonic-pi --prefix PATH : \
${ruby}/bin:${bash}/bin
'';
}

View File

@ -1,17 +1,17 @@
{ stdenv, fetchurl, alsaLib, cmake, libjack2, fftw, fltk13, libjpeg
, minixml, pkgconfig, zlib
, minixml, pkgconfig, zlib, liblo
}:
stdenv.mkDerivation rec {
name = "zynaddsubfx-${version}";
version = "2.4.4";
version = "2.5.2";
src = fetchurl {
url = "mirror://sourceforge/zynaddsubfx/zynaddsubfx-${version}.tar.xz";
sha256 = "15byz08p5maf3v8l1zz11xan6s0qcfasjf1b81xc8rffh13x5f53";
url = "mirror://sourceforge/zynaddsubfx/zynaddsubfx-${version}.tar.gz";
sha256 = "11yrady7xwfrzszkk2fvq81ymv99mq474h60qnirk27khdygk24m";
};
buildInputs = [ alsaLib libjack2 fftw fltk13 libjpeg minixml zlib ];
buildInputs = [ alsaLib libjack2 fftw fltk13 libjpeg minixml zlib liblo ];
nativeBuildInputs = [ cmake pkgconfig ];
meta = with stdenv.lib; {
@ -19,6 +19,6 @@ stdenv.mkDerivation rec {
homepage = http://zynaddsubfx.sourceforge.net;
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = [ maintainers.goibhniu ];
maintainers = [ maintainers.goibhniu maintainers.palo ];
};
}

View File

@ -1,8 +1,17 @@
From e9d82bfbc49993a5be2c93f6b72a969630587f26 Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Mon, 23 Nov 2015 06:56:28 -0600
Subject: [PATCH 1/2] ignore config mtime
---
src/common/ConfigReader.cpp | 5 -----
1 file changed, 5 deletions(-)
diff --git a/src/common/ConfigReader.cpp b/src/common/ConfigReader.cpp
index 6618455..5356e76 100644
index cfc9940..5bf5a6a 100644
--- a/src/common/ConfigReader.cpp
+++ b/src/common/ConfigReader.cpp
@@ -136,11 +136,6 @@ namespace SDDM {
@@ -138,11 +138,6 @@ namespace SDDM {
QString currentSection = QStringLiteral(IMPLICIT_SECTION);
QFile in(m_path);
@ -14,3 +23,6 @@ index 6618455..5356e76 100644
in.open(QIODevice::ReadOnly);
while (!in.atEnd()) {
--
2.6.3

View File

@ -0,0 +1,26 @@
From 7a18f4cb77c567dec9ad924fcc76c50092de6ee7 Mon Sep 17 00:00:00 2001
From: Thomas Tuegel <ttuegel@gmail.com>
Date: Mon, 23 Nov 2015 06:57:51 -0600
Subject: [PATCH 2/2] fix ConfigReader QStringList corruption
---
src/common/ConfigReader.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/common/ConfigReader.cpp b/src/common/ConfigReader.cpp
index 5bf5a6a..34182e6 100644
--- a/src/common/ConfigReader.cpp
+++ b/src/common/ConfigReader.cpp
@@ -30,7 +30,8 @@
QTextStream &operator>>(QTextStream &str, QStringList &list) {
list.clear();
- foreach(const QStringRef &s, str.readLine().splitRef(QLatin1Char(',')))
+ QString line = str.readLine();
+ foreach(const QStringRef &s, line.splitRef(QLatin1Char(',')))
{
QStringRef trimmed = s.trimmed();
if (!trimmed.isEmpty())
--
2.6.3

View File

@ -14,7 +14,10 @@ stdenv.mkDerivation rec {
sha256 = "0c3q8lpb123m9k5x3i71mm8lmyzhknw77zxh89yfl8qmn6zd61i1";
};
patches = [ ./sddm-ignore-config-mtime.patch ];
patches = [
./0001-ignore-config-mtime.patch
./0002-fix-ConfigReader-QStringList-corruption.patch
];
nativeBuildInputs = [ cmake makeQtWrapper pkgconfig qttools ];

View File

@ -106,16 +106,16 @@ rec {
anyedittools = buildEclipsePlugin rec {
name = "anyedit-${version}";
version = "2.5.0.201510241327";
version = "2.6.0.201511291145";
srcFeature = fetchurl {
url = "http://andrei.gmxhome.de/eclipse/features/AnyEditTools_${version}.jar";
sha256 = "01qaxg1b4n7y7g1xdkx1bnmpwqydln270mk14l4pl35q3c88s5nc";
sha256 = "1vllci75qcd28b6hn2jz29l6cabxx9ql5i6l9cwq9rxp49dhc96b";
};
srcPlugin = fetchurl {
url = "https://github.com/iloveeclipse/anyedittools/releases/download/2.5.0/de.loskutov.anyedit.AnyEditTools_${version}.jar";
sha256 = "0m4qxkscl5xih8x1znbrih4jh28wky4l62spfif9zw0s7mgl117c";
url = "https://github.com/iloveeclipse/anyedittools/releases/download/2.6.0/de.loskutov.anyedit.AnyEditTools_${version}.jar";
sha256 = "0mgq0ylfa7srjf7azyx0kbahlsjf0sdpazqphzx4f0bfn1l328s4";
};
meta = with stdenv.lib; {
@ -317,11 +317,11 @@ rec {
scala = buildEclipseUpdateSite rec {
name = "scala-${version}";
version = "4.1.1.20150911";
version = "4.1.1.20151201";
src = fetchzip {
url = "http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/update-site.zip";
sha256 = "03g24sjivm7kzy64wwjs4ihf9vrb6703lb7bx3jafxzcwqm0pj1i";
sha256 = "19iqaha9c5n5hkyn83xj8znkvshm4823d65zigbj97fz8gzrr0la";
};
meta = with stdenv.lib; {
@ -335,16 +335,16 @@ rec {
testng = buildEclipsePlugin rec {
name = "testng-${version}";
version = "6.9.8.201510130443";
version = "6.9.10.201511281504";
srcFeature = fetchurl {
url = "http://beust.com/eclipse/features/org.testng.eclipse_${version}.jar";
sha256 = "0g0dva1zpqk0rz0vgr025g2cfc47snr857fsqcrssmp9qmy8x0i0";
sha256 = "1kjaifa1fc16yh82bzp5xa5pn3kgrpgc5jq55lyvgz29vjj6ss97";
};
srcPlugin = fetchurl {
url = "http://beust.com/eclipse/plugins/org.testng.eclipse_${version}.jar";
sha256 = "16mnvqkakixqp3bcnyx6x2iwkhnv3k4q561c97kssz98xsrr8f54";
sha256 = "1njz4ynjwnhjjbsszfgqyjn2ixxzjv8qvnc7dqz8jldrz3jrjf07";
};
meta = with stdenv.lib; {

View File

@ -212,14 +212,14 @@ in
android-studio = buildAndroidStudio rec {
name = "android-studio-${version}";
version = "1.4.0.10";
build = "141.2288178";
version = "1.5.0.4";
build = "141.2422023";
description = "Android development environment based on IntelliJ IDEA";
license = stdenv.lib.licenses.asl20;
src = fetchurl {
url = "https://dl.google.com/dl/android/studio/ide-zips/${version}" +
"/android-studio-ide-${build}-linux.zip";
sha256 = "04zzzk6xlvzip6klxvs4zz2wyfyn3w9b5jwilzbqjidiz2d3va57";
sha256 = "1sjxs9cq7mdalxmzp6v2gwbg1w8p43c2cp5j4v212w66h5rqv11z";
};
};
@ -273,25 +273,25 @@ in
pycharm-community = buildPycharm rec {
name = "pycharm-community-${version}";
version = "5.0";
build = "143.589";
version = "5.0.1";
build = "143.595";
description = "PyCharm Community Edition";
license = stdenv.lib.licenses.asl20;
src = fetchurl {
url = "https://download-cf.jetbrains.com/python/${name}.tar.gz";
sha256 = "01q51m6rpyw296imiglbadzfr0r91wvyrxdid683yl7f5v73wzwh";
url = "https://download.jetbrains.com/python/${name}.tar.gz";
sha256 = "14m3imy64cp2l9pnmknxbjzj3z30rx88r4brz9d5xk5qailjg2wf";
};
};
pycharm-professional = buildPycharm rec {
name = "pycharm-professional-${version}";
version = "5.0";
build = "143.589";
version = "5.0.1";
build = "143.595";
description = "PyCharm Professional Edition";
license = stdenv.lib.licenses.unfree;
src = fetchurl {
url = "https://download-cf.jetbrains.com/python/${name}.tar.gz";
sha256 = "16lwg00dl03gwj4dqihdrn15p1fy8513srw2dslna1w1glfajv06";
url = "https://download.jetbrains.com/python/${name}.tar.gz";
sha256 = "102sfjvchk80911w3qpjsp30wvq73kgpwyqcqdgqxcgm2vqh3183";
};
};

View File

@ -1,9 +1,9 @@
{ stdenv, pythonPackages, fetchgit }:
pythonPackages.buildPythonPackage rec {
name = "leo-editor-${version}";
version = "5.1";
namePrefix = "";
version = "5.1";
src = fetchgit {
url = "https://github.com/leo-editor/leo-editor";
@ -13,6 +13,11 @@ pythonPackages.buildPythonPackage rec {
propagatedBuildInputs = with pythonPackages; [ pyqt4 sqlite3 ];
patchPhase = ''
rm setup.cfg
'';
meta = {
homepage = "http://leoeditor.com";
description = "A powerful folding editor";

View File

@ -4,10 +4,10 @@
}:
stdenv.mkDerivation {
name = "grass-7.0.1";
name = "grass-7.0.2";
src = fetchurl {
url = http://grass.osgeo.org/grass70/source/grass-7.0.1.tar.gz;
sha256 = "0ps0xfsgls1hai8fx8x74ajh3560p1yjql2sg02lpqpx30bdv1q9";
url = http://grass.osgeo.org/grass70/source/grass-7.0.2.tar.gz;
sha256 = "02qrdgn46gxr60amxwax4b8fkkmhmjxi6qh4yfvpbii6ai6diarf";
};
buildInputs = [ flex bison zlib proj gdal libtiff libpng fftw sqlite pkgconfig cairo

View File

@ -2,15 +2,15 @@
libharu, opencv, vigra, postgresql }:
stdenv.mkDerivation rec {
name = "saga-2.2.1";
name = "saga-2.2.2";
buildInputs = [ gdal wxGTK30 proj libharu opencv vigra postgresql libiodbc lzma jasper ];
enableParallelBuilding = true;
src = fetchurl {
url = "http://sourceforge.net/projects/saga-gis/files/SAGA%20-%202.2/SAGA%202.2.1/saga_2.2.1.tar.gz";
sha256 = "325e0890c28dc19c4ec727f58672be67480b2a4dd6604252c0cc4cc08aad34d0";
url = "http://downloads.sourceforge.net/project/saga-gis/SAGA%20-%202.2/SAGA%202.2.2/saga-2.2.2.tar.gz";
sha256 = "031cd70b7ec248f32f955a9316aefc7f7ab283c5129c49aa4bd748717d20357e";
};
meta = {

View File

@ -1,11 +1,11 @@
{ stdenv, fetchFromGitHub, cmake, libX11, procps, python, qt5 }:
let version = "7.0"; in
let version = "7.1"; in
stdenv.mkDerivation {
name = "apitrace-${version}";
src = fetchFromGitHub {
sha256 = "0nn3z7i6cd4zkmms6jpp1v2q194gclbs06v0f5hyiwcsqaxzsg5b";
sha256 = "1n2gmsjnpyam7isg7n1ksggyh6y1l8drvx0a93bnvbcskr7jiz9a";
rev = version;
repo = "apitrace";
owner = "apitrace";

View File

@ -1,36 +1,36 @@
{ stdenv, fetchsvn, buildPythonPackage, python, pyGtkGlade, makeWrapper, pyexiv2, lxml, pil, fbida, which }:
{ stdenv, fetchsvn, buildPythonPackage, python, pyGtkGlade, makeWrapper, pyexiv2, pythonPackages, fbida, which }:
buildPythonPackage {
name = "jbrout-338";
buildPythonPackage rec {
name = "jbrout-${version}";
version = "338";
src = fetchsvn {
url = "http://jbrout.googlecode.com/svn/trunk";
rev = "338";
rev = version;
sha256 = "0257ni4vkxgd0qhs73fw5ppw1qpf11j8fgwsqc03b1k1yv3hk4hf";
};
doCheck = false;
# XXX: preConfigure to avoid this
# File "/nix/store/vnyjxn6h3rbrn49m25yyw7i1chlxglhw-python-2.7.1/lib/python2.7/zipfile.py", line 348, in FileHeader
# len(filename), len(extra))
#struct.error: ushort format requires 0 <= number <= USHRT_MAX
preConfigure = ''
# XXX: patchPhase to avoid this
# File "/nix/store/vnyjxn6h3rbrn49m25yyw7i1chlxglhw-python-2.7.1/lib/python2.7/zipfile.py", line 348, in FileHeader
# len(filename), len(extra))
#struct.error: ushort format requires 0 <= number <= USHRT_MAX
patchPhase = ''
find | xargs touch
substituteInPlace setup.py --replace "version=__version__" "version=baseVersion"
'';
postInstall = ''
mkdir -p $out/bin
echo '#!/bin/sh' > $out/bin/jbrout
echo "python $out/lib/python2.7/site-packages/jbrout-src-py2.7.egg/jbrout/jbrout.py" >> $out/bin/jbrout
mkdir $out/bin
echo "python $out/${python.sitePackages}/jbrout/jbrout.py" > $out/bin/jbrout
chmod +x $out/bin/jbrout
wrapProgram $out/bin/jbrout \
--set PYTHONPATH "$out/lib/python:$(toPythonPath ${pyGtkGlade})/gtk-2.0:$(toPythonPath ${pyexiv2}):$(toPythonPath ${lxml}):$(toPythonPath ${pil}):$PYTHONPATH" \
--set PATH "${fbida}/bin:${which}/bin:$PATH"
'';
buildInputs = [ python pyGtkGlade makeWrapper pyexiv2 lxml pil fbida which ];
buildInputs = [ python makeWrapper which ];
propagatedBuildInputs = with pythonPackages; [ pillow lxml pyGtkGlade pyexiv2 fbida ];
meta = {
homepage = "http://code.google.com/p/jbrout";
description = "Photo manager";

View File

@ -0,0 +1,30 @@
{ stdenv, fetchFromGitHub, qt5, exiv2 }:
stdenv.mkDerivation rec {
name = "phototonic-${version}";
version = "1.7";
src = fetchFromGitHub {
repo = "phototonic";
owner = "oferkv";
rev = "v${version}";
sha256 = "1agd3bsrpljd019qrjvlbim5l0bhpx53dhpc0gvyn0wmcdzn92gj";
};
buildInputs = [ qt5.base exiv2 ];
configurePhase = ''
sed -i 's;/usr;;' phototonic.pro
qmake PREFIX=""
'';
installFlags = [ "INSTALL_ROOT=$(out)" ];
meta = with stdenv.lib; {
description = "An image viewer and organizer";
homepage = http://oferkv.github.io/phototonic/;
license = licenses.gpl3;
platforms = platforms.linux;
maintainers = with maintainers; [ pSub ];
};
}

View File

@ -1,5 +1,5 @@
{ fetchurl, stdenv, m4, glibc, gtk3, libexif, libgphoto2, libsoup, libxml2, vala, sqlite
, webkitgtk24x, pkgconfig, gnome3, gst_all_1, which, udev, libraw, glib, json_glib
, webkitgtk24x, pkgconfig, gnome3, gst_all_1, which, udev, libgudev, libraw, glib, json_glib
, gettext, desktop_file_utils, lcms2, gdk_pixbuf, librsvg, makeWrapper
, gnome_doc_utils, hicolor_icon_theme }:
@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
buildInputs = [ m4 glibc gtk3 libexif libgphoto2 libsoup libxml2 vala sqlite webkitgtk24x
pkgconfig gst_all_1.gstreamer gst_all_1.gst-plugins-base gnome3.libgee
which udev gnome3.gexiv2 hicolor_icon_theme
which udev libgudev gnome3.gexiv2 hicolor_icon_theme
libraw json_glib gettext desktop_file_utils glib lcms2 gdk_pixbuf librsvg
makeWrapper gnome_doc_utils gnome3.rest
gnome3.defaultIconTheme ];

View File

@ -1,12 +1,12 @@
{ stdenv, fetchurl, cairo, colord, glib, gtk3, gusb, intltool, itstool, libusb
, libxml2, makeWrapper, pkgconfig, saneBackends, systemd, vala }:
let version = "3.19.1"; in
let version = "3.19.2"; in
stdenv.mkDerivation rec {
name = "simple-scan-${version}";
src = fetchurl {
sha256 = "1d2a8cncq36ly60jpz0fzdw1lgxynl6lyrlw0q66yijlxqn81ynr";
sha256 = "08454ky855iaiq5wn9rdbfal3i4fjss5fn5mg6cmags50wy9spsg";
url = "https://launchpad.net/simple-scan/3.19/${version}/+download/${name}.tar.xz";
};
@ -14,6 +14,13 @@ stdenv.mkDerivation rec {
systemd vala ];
nativeBuildInputs = [ intltool itstool makeWrapper pkgconfig ];
configureFlags = [ "--disable-packagekit" ];
preBuild = ''
# Clean up stale generated .c files still referencing packagekit headers:
make clean
'';
enableParallelBuilding = true;
doCheck = true;

View File

@ -1,34 +1,28 @@
a @ { libXt, libX11, libXext, xextproto, xproto, gsl, aalib, zlib, intltool, gettext, perl, ... }:
let
fetchurl = a.fetchurl;
{ stdenv, fetchurl, aalib, gsl, libpng, libX11, xproto, libXext
, xextproto, libXt, zlib, gettext, intltool, perl }:
stdenv.mkDerivation rec {
name = "xaos-${version}";
version = "3.6";
version = a.lib.attrByPath ["version"] "3.6" a;
buildInputs = with a; [
aalib gsl libpng libX11 xproto libXext xextproto
libXt zlib gettext intltool perl
];
in
rec {
src = fetchurl {
url = "mirror://sourceforge/xaos/xaos-${version}.tar.gz";
url = "mirror://sourceforge/xaos/${name}.tar.gz";
sha256 = "15cd1cx1dyygw6g2nhjqq3bsfdj8sj8m4va9n75i0f3ryww3x7wq";
};
inherit buildInputs;
configureFlags = [];
buildInputs = [
aalib gsl libpng libX11 xproto libXext xextproto
libXt zlib gettext intltool perl
];
/* doConfigure should be removed if not needed */
phaseNames = ["preConfigure" "doConfigure" "doMakeInstall"];
preConfigure = a.fullDepEntry (''
preConfigure = ''
sed -e s@/usr/@"$out/"@g -i configure $(find . -name 'Makefile*')
mkdir -p $out/share/locale
'') ["doUnpack" "minInit" "defEnsureDir"];
'';
name = "xaos-" + version;
meta = {
homepage = http://xaos.sourceforge.net/;
description = "Fractal viewer";
license = a.stdenv.lib.licenses.gpl2Plus;
license = stdenv.lib.licenses.gpl2Plus;
};
}

View File

@ -0,0 +1,58 @@
{ kdeApp
, lib
, extra-cmake-modules
, kdoctools
, karchive
, kconfig
, kcrash
, kdbusaddons
, ki18n
, kiconthemes
, khtml
, kio
, kservice
, kpty
, kwidgetsaddons
, libarchive
, p7zip
, unrar
, unzipNLS
, zip
}:
let PATH = lib.makeSearchPath "bin" [
p7zip unrar unzipNLS zip
];
in
kdeApp {
name = "ark";
nativeBuildInputs = [
extra-cmake-modules
kdoctools
];
buildInputs = [
karchive
kconfig
kcrash
kdbusaddons
kiconthemes
kservice
kpty
kwidgetsaddons
libarchive
];
propagatedBuildInputs = [
khtml
ki18n
kio
];
postInstall = ''
wrapQtProgram "$out/bin/ark" \
--prefix PATH : "${PATH}"
'';
meta = {
license = with lib.licenses; [ gpl2 lgpl3 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,35 @@
{ kdeApp
, lib
, extra-cmake-modules
, kdoctools
, kconfig
, kio
, ki18n
, kservice
, kfilemetadata
, baloo
, kdelibs4support
}:
kdeApp {
name = "baloo-widgets";
nativeBuildInputs = [
extra-cmake-modules
kdoctools
];
buildInputs = [
kconfig
kservice
];
propagatedBuildInputs = [
baloo
kdelibs4support
kfilemetadata
ki18n
kio
];
meta = {
license = [ lib.licenses.lgpl21 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,54 @@
# Maintainer's Notes:
#
# Minor updates:
# 1. Edit ./manifest.sh to point to the updated URL. Upstream sometimes
# releases updates that include only the changed packages; in this case,
# multiple URLs can be provided and the results will be merged.
# 2. Run ./manifest.sh and ./dependencies.sh.
# 3. Build and enjoy.
#
# Major updates:
# We prefer not to immediately overwrite older versions with major updates, so
# make a copy of this directory first. After copying, be sure to delete ./tmp
# if it exists. Then follow the minor update instructions.
{ pkgs, debug ? false }:
let
inherit (pkgs) lib stdenv;
srcs = import ./srcs.nix { inherit (pkgs) fetchurl; inherit mirror; };
mirror = "mirror://kde";
kdeApp = import ./kde-app.nix {
inherit stdenv lib;
inherit debug srcs;
};
packages = self: with self; {
inherit (pkgs.kdeApps_15_08) kdelibs ksnapshot;
ark = callPackage ./ark.nix {};
baloo-widgets = callPackage ./baloo-widgets.nix {};
dolphin = callPackage ./dolphin.nix {};
dolphin-plugins = callPackage ./dolphin-plugins.nix {};
ffmpegthumbs = callPackage ./ffmpegthumbs.nix {};
gpgmepp = callPackage ./gpgmepp.nix {};
gwenview = callPackage ./gwenview.nix {};
kate = callPackage ./kate.nix {};
kdegraphics-thumbnailers = callPackage ./kdegraphics-thumbnailers.nix {};
kgpg = callPackage ./kgpg.nix { inherit (pkgs.kde4) kdepimlibs; };
konsole = callPackage ./konsole.nix {};
libkdcraw = callPackage ./libkdcraw.nix {};
libkexiv2 = callPackage ./libkexiv2.nix {};
libkipi = callPackage ./libkipi.nix {};
okular = callPackage ./okular.nix {};
print-manager = callPackage ./print-manager.nix {};
l10n = pkgs.recurseIntoAttrs (import ./l10n.nix { inherit callPackage lib pkgs; });
};
newScope = scope: pkgs.kf516.newScope ({ inherit kdeApp; } // scope);
in lib.makeScope newScope packages

View File

@ -0,0 +1,31 @@
{ kdeApp
, lib
, extra-cmake-modules
, kdoctools
, kxmlgui
, ki18n
, kio
, kdelibs4support
, dolphin
}:
kdeApp {
name = "dolphin-plugins";
nativeBuildInputs = [
extra-cmake-modules
kdoctools
];
buildInputs = [
kxmlgui
dolphin
];
propagatedBuildInputs = [
kdelibs4support
ki18n
kio
];
meta = {
license = [ lib.licenses.gpl2 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,70 @@
{ kdeApp
, lib
, extra-cmake-modules
, kdoctools
, makeQtWrapper
, kinit
, kcmutils
, kcoreaddons
, knewstuff
, ki18n
, kdbusaddons
, kbookmarks
, kconfig
, kio
, kparts
, solid
, kiconthemes
, kcompletion
, ktexteditor
, kwindowsystem
, knotifications
, kactivities
, phonon
, baloo
, baloo-widgets
, kfilemetadata
, kdelibs4support
}:
kdeApp {
name = "dolphin";
nativeBuildInputs = [
extra-cmake-modules
kdoctools
makeQtWrapper
];
buildInputs = [
kinit
kcmutils
kcoreaddons
knewstuff
kdbusaddons
kbookmarks
kconfig
kparts
solid
kiconthemes
kcompletion
knotifications
phonon
baloo-widgets
];
propagatedBuildInputs = [
baloo
kactivities
kdelibs4support
kfilemetadata
ki18n
kio
ktexteditor
kwindowsystem
];
postInstall = ''
wrapQtProgram "$out/bin/dolphin"
'';
meta = {
license = with lib.licenses; [ gpl2 fdl12 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,56 @@
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p coreutils findutils gnused nix wget
set -x
# The trailing slash at the end is necessary!
WGET_ARGS='http://download.kde.org/unstable/applications/15.11.80/ -A *.tar.xz'
mkdir tmp; cd tmp
rm -f ../srcs.csv
wget -nH -r -c --no-parent $WGET_ARGS
find . | while read src; do
if [[ -f "${src}" ]]; then
# Sanitize file name
filename=$(basename "$src" | tr '@' '_')
nameVersion="${filename%.tar.*}"
name=$(echo "$nameVersion" | sed -e 's,-[[:digit:]].*,,' | sed -e 's,-opensource-src$,,')
version=$(echo "$nameVersion" | sed -e 's,^\([[:alpha:]][[:alnum:]]*-\)\+,,')
echo "$name,$version,$src,$filename" >>../srcs.csv
fi
done
cat >../srcs.nix <<EOF
# DO NOT EDIT! This file is generated automatically by fetchsrcs.sh
{ fetchurl, mirror }:
{
EOF
gawk -F , "{ print \$1 }" ../srcs.csv | sort | uniq | while read name; do
versions=$(gawk -F , "/^$name,/ { print \$2 }" ../srcs.csv)
latestVersion=$(echo "$versions" | sort -rV | head -n 1)
src=$(gawk -F , "/^$name,$latestVersion,/ { print \$3 }" ../srcs.csv)
filename=$(gawk -F , "/^$name,$latestVersion,/ { print \$4 }" ../srcs.csv)
url="${src:2}"
sha256=$(nix-hash --type sha256 --base32 --flat "$src")
cat >>../srcs.nix <<EOF
$name = {
version = "$latestVersion";
src = fetchurl {
url = "\${mirror}/$url";
sha256 = "$sha256";
name = "$filename";
};
};
EOF
done
echo "}" >>../srcs.nix
rm -f ../srcs.csv
cd ..

View File

@ -0,0 +1,21 @@
{ kdeApp
, lib
, extra-cmake-modules
, ffmpeg
, kio
}:
kdeApp {
name = "ffmpegthumbs";
nativeBuildInputs = [
extra-cmake-modules
];
buildInputs = [
ffmpeg
kio
];
meta = {
license = with lib.licenses; [ gpl2 bsd3 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,21 @@
{ kdeApp
, lib
, extra-cmake-modules
, boost
, gpgme
}:
kdeApp {
name = "gpgmepp";
nativeBuildInputs = [
extra-cmake-modules
];
buildInputs = [
boost
gpgme
];
meta = {
license = with lib.licenses; [ lgpl21 bsd3 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,44 @@
{ kdeApp
, lib
, extra-cmake-modules
, kdoctools
, makeQtWrapper
, baloo
, exiv2
, kactivities
, kdelibs4support
, kio
, lcms2
, phonon
, qtsvg
, qtx11extras
}:
kdeApp {
name = "gwenview";
nativeBuildInputs = [
extra-cmake-modules
kdoctools
makeQtWrapper
];
buildInputs = [
exiv2
lcms2
phonon
qtsvg
];
propagatedBuildInputs = [
baloo
kactivities
kdelibs4support
kio
qtx11extras
];
postInstall = ''
wrapQtProgram "$out/bin/gwenview"
'';
meta = {
license = with lib.licenses; [ gpl2 fdl12 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,69 @@
{ kdeApp
, lib
, extra-cmake-modules
, kdoctools
, qtscript
, kactivities
, kconfig
, kcrash
, kguiaddons
, kiconthemes
, ki18n
, kinit
, kjobwidgets
, kio
, kparts
, ktexteditor
, kwindowsystem
, kxmlgui
, kdbusaddons
, kwallet
, plasma-framework
, kitemmodels
, knotifications
, threadweaver
, knewstuff
, libgit2
}:
kdeApp {
name = "kate";
nativeBuildInputs = [
extra-cmake-modules
kdoctools
];
buildInputs = [
qtscript
kconfig
kcrash
kguiaddons
kiconthemes
kinit
kjobwidgets
kparts
kxmlgui
kdbusaddons
kwallet
kitemmodels
knotifications
threadweaver
knewstuff
libgit2
];
propagatedBuildInputs = [
kactivities
ki18n
kio
ktexteditor
kwindowsystem
plasma-framework
];
postInstall = ''
wrapQtProgram "$out/bin/kate"
wrapQtProgram "$out/bin/kwrite"
'';
meta = {
license = with lib.licenses; [ gpl3 lgpl3 lgpl2 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,23 @@
{ stdenv, lib, debug, srcs }:
args:
let
inherit (args) name;
sname = args.sname or name;
inherit (srcs."${sname}") src version;
in
stdenv.mkDerivation (args // {
name = "${name}-${version}";
inherit src;
cmakeFlags =
(args.cmakeFlags or [])
++ [ "-DBUILD_TESTING=OFF" ]
++ lib.optional debug "-DCMAKE_BUILD_TYPE=Debug";
meta = {
platforms = lib.platforms.linux;
homepage = "http://www.kde.org";
} // (args.meta or {});
})

View File

@ -0,0 +1,20 @@
name: args:
{ kdeApp, automoc4, cmake, gettext, kdelibs, perl }:
kdeApp (args // {
sname = "kde-l10n-${name}";
name = "kde-l10n-${name}-qt4";
nativeBuildInputs =
[ automoc4 cmake gettext perl ]
++ (args.nativeBuildInputs or []);
buildInputs =
[ kdelibs ]
++ (args.buildInputs or []);
preConfigure = ''
sed -e 's/add_subdirectory(5)//' -i CMakeLists.txt
${args.preConfigure or ""}
'';
})

View File

@ -0,0 +1,17 @@
name: args:
{ kdeApp, cmake, extra-cmake-modules, gettext, kdoctools }:
kdeApp (args // {
sname = "kde-l10n-${name}";
name = "kde-l10n-${name}-qt5";
nativeBuildInputs =
[ cmake extra-cmake-modules gettext kdoctools ]
++ (args.nativeBuildInputs or []);
preConfigure = ''
sed -e 's/add_subdirectory(4)//' -i CMakeLists.txt
${args.preConfigure or ""}
'';
})

View File

@ -0,0 +1,23 @@
{ kdeApp
, lib
, extra-cmake-modules
, kio
, libkexiv2
, libkdcraw
}:
kdeApp {
name = "kdegraphics-thumbnailers";
nativeBuildInputs = [
extra-cmake-modules
];
buildInputs = [
kio
libkexiv2
libkdcraw
];
meta = {
license = [ lib.licenses.lgpl21 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,38 @@
{ kdeApp
, lib
, automoc4
, cmake
, makeWrapper
, perl
, pkgconfig
, boost
, gpgme
, kdelibs
, kdepimlibs
, gnupg
}:
kdeApp {
name = "kgpg";
nativeBuildInputs = [
automoc4
cmake
makeWrapper
perl
pkgconfig
];
buildInputs = [
boost
gpgme
kdelibs
kdepimlibs
];
postInstall = ''
wrapProgram "$out/bin/kgpg" \
--prefix PATH : "${gnupg}/bin"
'';
meta = {
license = [ lib.licenses.gpl2 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,68 @@
{ kdeApp
, lib
, extra-cmake-modules
, kdoctools
, makeQtWrapper
, qtscript
, kbookmarks
, kcompletion
, kconfig
, kconfigwidgets
, kcoreaddons
, kguiaddons
, ki18n
, kiconthemes
, kinit
, kdelibs4support
, kio
, knotifications
, knotifyconfig
, kparts
, kpty
, kservice
, ktextwidgets
, kwidgetsaddons
, kwindowsystem
, kxmlgui
}:
kdeApp {
name = "konsole";
nativeBuildInputs = [
extra-cmake-modules
kdoctools
makeQtWrapper
];
buildInputs = [
qtscript
kbookmarks
kcompletion
kconfig
kconfigwidgets
kcoreaddons
kguiaddons
kiconthemes
kinit
kio
knotifications
knotifyconfig
kparts
kpty
kservice
ktextwidgets
kwidgetsaddons
kxmlgui
];
propagatedBuildInputs = [
kdelibs4support
ki18n
kwindowsystem
];
postInstall = ''
wrapQtProgram "$out/bin/konsole"
'';
meta = {
license = with lib.licenses; [ gpl2 lgpl21 fdl12 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,29 @@
{ kdeApp
, lib
, automoc4
, cmake
, perl
, pkgconfig
, kdelibs
, libkipi
, libXfixes
}:
kdeApp {
name = "ksnapshot";
nativeBuildInputs = [
automoc4
cmake
perl
pkgconfig
];
buildInputs = [
kdelibs
libkipi
libXfixes
];
meta = {
license = with lib.licenses; [ gpl2 lgpl21 fdl12 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,237 @@
{ callPackage, pkgs, lib }:
let
kdeLocale4 = import ./kde-locale-4.nix;
kdeLocale5 = import ./kde-locale-5.nix;
in
lib.mapAttrs (name: attr: pkgs.recurseIntoAttrs attr) {
ar = {
qt4 = callPackage (kdeLocale4 "ar" {}) {};
qt5 = callPackage (kdeLocale5 "ar" {}) {};
};
bg = {
qt4 = callPackage (kdeLocale4 "bg" {}) {};
qt5 = callPackage (kdeLocale5 "bg" {}) {};
};
bs = {
qt4 = callPackage (kdeLocale4 "bs" {}) {};
qt5 = callPackage (kdeLocale5 "bs" {}) {};
};
ca = {
qt4 = callPackage (kdeLocale4 "ca" {}) {};
qt5 = callPackage (kdeLocale5 "ca" {}) {};
};
ca_valencia = {
qt4 = callPackage (kdeLocale4 "ca_valencia" {}) {};
qt5 = callPackage (kdeLocale5 "ca_valencia" {}) {};
};
cs = {
qt4 = callPackage (kdeLocale4 "cs" {}) {};
qt5 = callPackage (kdeLocale5 "cs" {}) {};
};
da = {
qt4 = callPackage (kdeLocale4 "da" {}) {};
qt5 = callPackage (kdeLocale5 "da" {}) {};
};
de = {
qt4 = callPackage (kdeLocale4 "de" {}) {};
qt5 = callPackage (kdeLocale5 "de" {}) {};
};
el = {
qt4 = callPackage (kdeLocale4 "el" {}) {};
qt5 = callPackage (kdeLocale5 "el" {}) {};
};
en_GB = {
qt4 = callPackage (kdeLocale4 "en_GB" {}) {};
qt5 = callPackage (kdeLocale5 "en_GB" {}) {};
};
eo = {
qt4 = callPackage (kdeLocale4 "eo" {}) {};
qt5 = callPackage (kdeLocale5 "eo" {}) {};
};
es = {
qt4 = callPackage (kdeLocale4 "es" {}) {};
qt5 = callPackage (kdeLocale5 "es" {}) {};
};
et = {
qt4 = callPackage (kdeLocale4 "et" {}) {};
qt5 = callPackage (kdeLocale5 "et" {}) {};
};
eu = {
qt4 = callPackage (kdeLocale4 "eu" {}) {};
qt5 = callPackage (kdeLocale5 "eu" {}) {};
};
fa = {
qt4 = callPackage (kdeLocale4 "fa" {}) {};
qt5 = callPackage (kdeLocale5 "fa" {}) {};
};
fi = {
qt4 = callPackage (kdeLocale4 "fi" {}) {};
qt5 = callPackage (kdeLocale5 "fi" {}) {};
};
fr = {
qt4 = callPackage (kdeLocale4 "fr" {}) {};
qt5 = callPackage (kdeLocale5 "fr" {}) {};
};
ga = {
qt4 = callPackage (kdeLocale4 "ga" {}) {};
qt5 = callPackage (kdeLocale5 "ga" {}) {};
};
gl = {
qt4 = callPackage (kdeLocale4 "gl" {}) {};
qt5 = callPackage (kdeLocale5 "gl" {}) {};
};
he = {
qt4 = callPackage (kdeLocale4 "he" {}) {};
qt5 = callPackage (kdeLocale5 "he" {}) {};
};
hi = {
qt4 = callPackage (kdeLocale4 "hi" {}) {};
qt5 = callPackage (kdeLocale5 "hi" {}) {};
};
hr = {
qt4 = callPackage (kdeLocale4 "hr" {}) {};
qt5 = callPackage (kdeLocale5 "hr" {}) {};
};
hu = {
qt4 = callPackage (kdeLocale4 "hu" {}) {};
qt5 = callPackage (kdeLocale5 "hu" {}) {};
};
ia = {
qt4 = callPackage (kdeLocale4 "ia" {}) {};
qt5 = callPackage (kdeLocale5 "ia" {}) {};
};
id = {
qt4 = callPackage (kdeLocale4 "id" {}) {};
qt5 = callPackage (kdeLocale5 "id" {}) {};
};
is = {
qt4 = callPackage (kdeLocale4 "is" {}) {};
qt5 = callPackage (kdeLocale5 "is" {}) {};
};
it = {
qt4 = callPackage (kdeLocale4 "it" {}) {};
qt5 = callPackage (kdeLocale5 "it" {}) {};
};
ja = {
qt4 = callPackage (kdeLocale4 "ja" {}) {};
qt5 = callPackage (kdeLocale5 "ja" {}) {};
};
kk = {
qt4 = callPackage (kdeLocale4 "kk" {}) {};
qt5 = callPackage (kdeLocale5 "kk" {}) {};
};
km = {
qt4 = callPackage (kdeLocale4 "km" {}) {};
qt5 = callPackage (kdeLocale5 "km" {}) {};
};
ko = {
qt4 = callPackage (kdeLocale4 "ko" {}) {};
qt5 = callPackage (kdeLocale5 "ko" {}) {};
};
lt = {
qt4 = callPackage (kdeLocale4 "lt" {}) {};
qt5 = callPackage (kdeLocale5 "lt" {}) {};
};
lv = {
qt4 = callPackage (kdeLocale4 "lv" {}) {};
qt5 = callPackage (kdeLocale5 "lv" {}) {};
};
mr = {
qt4 = callPackage (kdeLocale4 "mr" {}) {};
qt5 = callPackage (kdeLocale5 "mr" {}) {};
};
nb = {
qt4 = callPackage (kdeLocale4 "nb" {}) {};
qt5 = callPackage (kdeLocale5 "nb" {}) {};
};
nds = {
qt4 = callPackage (kdeLocale4 "nds" {}) {};
qt5 = callPackage (kdeLocale5 "nds" {}) {};
};
# TODO: build broken in 15.11.80; re-enable in next release
/*
nl = {
qt4 = callPackage (kdeLocale4 "nl" {}) {};
qt5 = callPackage (kdeLocale5 "nl" {}) {};
};
*/
nn = {
qt4 = callPackage (kdeLocale4 "nn" {}) {};
qt5 = callPackage (kdeLocale5 "nn" {}) {};
};
pa = {
qt4 = callPackage (kdeLocale4 "pa" {}) {};
qt5 = callPackage (kdeLocale5 "pa" {}) {};
};
pl = {
qt4 = callPackage (kdeLocale4 "pl" {}) {};
qt5 = callPackage (kdeLocale5 "pl" {}) {};
};
pt = {
qt4 = callPackage (kdeLocale4 "pt" {}) {};
qt5 = callPackage (kdeLocale5 "pt" {}) {};
};
pt_BR = {
qt4 = callPackage (kdeLocale4 "pt_BR" {}) {};
qt5 = callPackage (kdeLocale5 "pt_BR" {}) {};
};
ro = {
qt4 = callPackage (kdeLocale4 "ro" {}) {};
qt5 = callPackage (kdeLocale5 "ro" {}) {};
};
ru = {
qt4 = callPackage (kdeLocale4 "ru" {}) {};
qt5 = callPackage (kdeLocale5 "ru" {}) {};
};
sk = {
qt4 = callPackage (kdeLocale4 "sk" {}) {};
qt5 = callPackage (kdeLocale5 "sk" {}) {};
};
sl = {
qt4 = callPackage (kdeLocale4 "sl" {}) {};
qt5 = callPackage (kdeLocale5 "sl" {}) {};
};
sr = {
qt4 = callPackage (kdeLocale4 "sr" {}) {};
qt5 = callPackage (kdeLocale5 "sr" {
preConfigure = ''
sed -e 's/add_subdirectory(kdesdk)//' -i 5/sr/data/CMakeLists.txt
'';
}) {};
};
sv = {
qt4 = callPackage (kdeLocale4 "sv" {}) {};
qt5 = callPackage (kdeLocale5 "sv" {}) {};
};
tr = {
qt4 = callPackage (kdeLocale4 "tr" {}) {};
qt5 = callPackage (kdeLocale5 "tr" {}) {};
};
ug = {
qt4 = callPackage (kdeLocale4 "ug" {}) {};
qt5 = callPackage (kdeLocale5 "ug" {}) {};
};
# TODO: build broken in 15.11.80; re-enable in next release
/*
uk = {
qt4 = callPackage (kdeLocale4 "uk" {}) {};
qt5 = callPackage (kdeLocale5 "uk" {}) {};
};
*/
wa = {
qt4 = callPackage (kdeLocale4 "wa" {}) {};
qt5 = callPackage (kdeLocale5 "wa" {}) {};
};
zh_CN = {
qt4 = callPackage (kdeLocale4 "zh_CN" {}) {};
qt5 = callPackage (kdeLocale5 "zh_CN" {}) {};
};
zh_TW = {
qt4 = callPackage (kdeLocale4 "zh_TW" {}) {};
qt5 = callPackage (kdeLocale5 "zh_TW" {}) {};
};
}

View File

@ -0,0 +1,19 @@
{ kdeApp
, lib
, extra-cmake-modules
, libraw
}:
kdeApp {
name = "libkdcraw";
nativeBuildInputs = [
extra-cmake-modules
];
buildInputs = [
libraw
];
meta = {
license = with lib.licenses; [ gpl2 lgpl21 bsd3 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,19 @@
{ kdeApp
, lib
, exiv2
, extra-cmake-modules
}:
kdeApp {
name = "libkexiv2";
nativeBuildInputs = [
extra-cmake-modules
];
buildInputs = [
exiv2
];
meta = {
license = with lib.licenses; [ gpl2 lgpl21 bsd3 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,22 @@
{ kdeApp
, lib
, extra-cmake-modules
, kconfig
, ki18n
, kservice
, kxmlgui
}:
kdeApp {
name = "libkipi";
nativeBuildInputs = [
extra-cmake-modules
];
buildInputs = [
kconfig ki18n kservice kxmlgui
];
meta = {
license = with lib.licenses; [ gpl2 lgpl21 bsd3 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,41 @@
{ kdeApp
, lib
, automoc4
, cmake
, perl
, pkgconfig
, kdelibs
, qimageblitz
, poppler_qt4
, libspectre
, libkexiv2
, djvulibre
, libtiff
, freetype
, ebook_tools
}:
kdeApp {
name = "okular";
nativeBuildInputs = [
automoc4
cmake
perl
pkgconfig
];
buildInputs = [
kdelibs
qimageblitz
poppler_qt4
libspectre
libkexiv2
djvulibre
libtiff
freetype
ebook_tools
];
meta = {
license = with lib.licenses; [ gpl2 lgpl21 fdl12 bsd3 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

View File

@ -0,0 +1,47 @@
{ kdeApp
, lib
, extra-cmake-modules
, qtdeclarative
, cups
, kconfig
, kconfigwidgets
, kdbusaddons
, kiconthemes
, ki18n
, kcmutils
, kio
, knotifications
, plasma-framework
, kwidgetsaddons
, kwindowsystem
, kitemviews
}:
kdeApp {
name = "print-manager";
nativeBuildInputs = [
extra-cmake-modules
];
buildInputs = [
cups
kconfig
kconfigwidgets
kdbusaddons
kiconthemes
kcmutils
knotifications
kwidgetsaddons
kitemviews
];
propagatedBuildInputs = [
ki18n
kio
kwindowsystem
plasma-framework
qtdeclarative
];
meta = {
license = [ lib.licenses.gpl2 ];
maintainers = [ lib.maintainers.ttuegel ];
};
}

File diff suppressed because it is too large Load Diff

View File

@ -5,11 +5,12 @@
}:
stdenv.mkDerivation rec {
name = "calibre-${meta.version}";
version = "2.45.0";
name = "calibre-${version}";
src = fetchurl {
url = "https://github.com/kovidgoyal/calibre/releases/download/v${meta.version}/${name}.tar.xz";
sha256 = "1ffqvnjqmplcpa398809gp4d4l7nqc6k8ky255mdkabfcdvf3kk3";
url = "http://download.calibre-ebook.com/${version}/${name}.tar.xz";
sha256 = "1s3wrrvp2d0mczs09g2xkkknvlk3max6ws7awpss5kkdpjvay6ma";
};
inherit python;
@ -58,11 +59,11 @@ stdenv.mkDerivation rec {
'';
meta = with stdenv.lib; {
version = "2.44.1";
description = "Comprehensive e-book software";
homepage = http://calibre-ebook.com;
license = licenses.gpl3;
maintainers = with maintainers; [ viric iElectric pSub AndersonTorres ];
platforms = platforms.linux;
inherit version;
};
}

View File

@ -0,0 +1,42 @@
{ stdenv, fetchurl, jdk }:
stdenv.mkDerivation rec {
pname = "emem";
version = "0.2.11";
name = "${pname}-${version}";
inherit jdk;
src = fetchurl {
url = "https://github.com/ebzzry/${pname}/releases/download/v${version}/${pname}.jar";
sha256 = "0b514nc1s5jff3586jmfx9js57j7hl8zdwi2jxlwiavwv46rl436";
};
buildInputs = [ ];
phases = [ "buildPhase" "installPhase" ];
buildPhase = ''
mkdir -p $out/bin
mkdir -p $out/share/java
'';
installPhase = ''
cp $src $out/share/java
cat > $out/bin/emem <<EOF
#! $SHELL
$jdk/bin/java -jar $out/share/java/$(basename $src) "\$@"
EOF
chmod +x $out/bin/emem
'';
meta = with stdenv.lib; {
homepage = https://github.com/ebzzry/emem;
description = "A trivial Markdown to HTML converter";
license = licenses.epl10;
maintainers = [ maintainers.ebzzry ];
platforms = platforms.unix;
};
}

View File

@ -1,33 +1,22 @@
a @ { libgphoto2, fuse, pkgconfig, glib, libtool, ... } :
let
fetchurl = a.fetchurl;
s = import ./src-info-for-gphotofs.nix;
{ stdenv, fetchurl, libtool, pkgconfig, libgphoto2, fuse, glib }:
version = a.lib.attrByPath ["version"] s.version a;
buildInputs = with a; [
libgphoto2 fuse pkgconfig glib libtool
];
in
rec {
stdenv.mkDerivation rec {
name = "gphoto2fs-${version}";
version = "0.5.0";
src = fetchurl {
url = s.url;
sha256 = s.hash;
url="mirror://sourceforge/gphoto/gphotofs/${version}/gphotofs-0.5.tar.bz2";
sha256 = "1k23ncbsbh64r7kz050bg31jqamchyswgg9izhzij758d7gc8vk7";
};
inherit buildInputs;
configureFlags = [];
buildInputs = [
libgphoto2 fuse pkgconfig glib libtool
];
/* doConfigure should be removed if not needed */
phaseNames = ["doConfigure" "doMakeInstall"];
name = "gphoto2fs-" + version;
meta = {
description = "Fuse FS to mount a digital camera";
maintainers = [
a.lib.maintainers.raskin
];
platforms = [
"i686-linux" "x86_64-linux"
stdenv.lib.maintainers.raskin
];
platforms = stdenv.lib.platforms.linux;
};
}

View File

@ -1,6 +0,0 @@
rec {
advertisedUrl="mirror://sourceforge/gphoto/gphotofs/0.5.0/gphotofs-0.5.tar.bz2";
version = "0.5.0";
url="mirror://sourceforge/gphoto/gphotofs/0.5.0/gphotofs-0.5.tar.bz2";
hash = "1k23ncbsbh64r7kz050bg31jqamchyswgg9izhzij758d7gc8vk7";
}

View File

@ -20,14 +20,25 @@ stdenv.mkDerivation rec {
But FOP isn't packaged yet. */
preConfigure = "cd gpsbabel";
configureFlags = [ "--with-zlib=system" ];
configureFlags = [ "--with-zlib=system" ]
# Floating point behavior on i686 causes test failures. Preventing
# extended precision fixes this problem.
++ stdenv.lib.optionals stdenv.isi686 [
"CFLAGS=-ffloat-store" "CXXFLAGS=-ffloat-store"
];
enableParallelBuilding = true;
doCheck = true;
preCheck = ''
patchShebangs testo
substituteInPlace testo \
--replace "-x /usr/bin/hexdump" ""
'';
'' + (
# The raymarine and gtm tests fail on i686 despite -ffloat-store.
if stdenv.isi686 then "rm -v testo.d/raymarine.test testo.d/gtm.test;"
else ""
);
meta = with stdenv.lib; {
description = "Convert, upload and download data from GPS and Map programs";

View File

@ -2,15 +2,17 @@
, libX11, libXext }:
stdenv.mkDerivation rec {
version = "1.7";
version = "1.8";
name = "mupdf-${version}";
src = fetchurl {
url = "http://mupdf.com/download/archive/${name}-source.tar.gz";
sha256 = "0hjn1ywxhblqgj63qkp8x7qqjnwsgid3viw8az5i2i26dijmrgfh";
sha256 = "01n26cy41lc2fjri63s4js23ixxb4nd37aafry3hz4i4id6wd8x2";
};
buildInputs = [ pkgconfig zlib freetype libjpeg jbig2dec openjpeg libX11 libXext ];
nativeBuildInputs = [ pkgconfig ];
propagatedBuildInputs = [ openjpeg libjpeg jbig2dec ];
buildInputs = [ zlib freetype libX11 libXext ];
enableParallelBuilding = true;
@ -45,7 +47,7 @@ stdenv.mkDerivation rec {
Name: mupdf
Description: Library for rendering PDF documents
Requires: freetype2 libopenjp2 libcrypto
Version: 1.3
Version: ${version}
Libs: -L$out/lib -lmupdf
Cflags: -I$out/include
EOF

View File

@ -32,14 +32,15 @@ pythonPackages.buildPythonPackage {
matplotlib beautifulsoup4 pygtk lxml ];
enableParallelBuilding = true;
preConfigure = with stdenv.lib; ''
${concatStrings (map (x: "ln -s ${x.src} models/`basename ${x.name}`;")
${concatStrings (map (x: "cp -R ${x.src} models/`basename ${x.name}`;")
models)}
substituteInPlace ocrolib/{common,default}.py --replace /usr/local $out
'';
doCheck = false; # fails
checkPhase = ''
patchShebangs .
substituteInPlace ./run-test \

View File

@ -16,10 +16,10 @@ python27Packages.buildPythonPackage rec {
doCheck = false;
setupPyBuildFlags = ["-i"];
postPatch = ''
sed -i -r "s|/usr(/local)?/share/|$out/share/|g" printrun/utils.py
sed -i "s|distutils.core|setuptools|" setup.py
sed -i "s|distutils.command.install |setuptools.command.install |" setup.py
'';
postInstall = ''

View File

@ -27,12 +27,12 @@ pythonPackages.buildPythonPackage rec {
# string, which allows setting an explicit MIME type.
patches = [ ./pytrainer-webkit.patch ];
pythonPath = with pythonPackages; [
propagatedBuildInputs = with pythonPackages; [
dateutil lxml matplotlibGtk pyGtkGlade pywebkitgtk
sqlalchemy sqlalchemy_migrate
sqlalchemy_migrate
];
buildInputs = [gpsbabel sqlite] ++ pythonPath;
buildInputs = [ gpsbabel sqlite ];
# This package contains no binaries to patch or strip.
dontPatchELF = true;

View File

@ -1,4 +1,4 @@
{ stdenv, buildPythonPackage, python, fetchurl }:
{ stdenv, fetchurl, buildPythonPackage, python, w3m }:
buildPythonPackage rec {
name = "ranger-1.7.1";
@ -17,4 +17,14 @@ buildPythonPackage rec {
};
propagatedBuildInputs = with python.modules; [ curses ];
preConfigure = ''
substituteInPlace ranger/ext/img_display.py \
--replace /usr/lib/w3m ${w3m}/libexec/w3m
for i in ranger/config/rc.conf doc/config/rc.conf ; do
substituteInPlace $i --replace /usr/share $out/share
done
'';
}

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