Merge recent master into x-updates

Hydra: ?compare=1142825

Conflicts (easy):
	pkgs/applications/audio/lmms/default.nix
	pkgs/desktops/e18/enlightenment.nix
	pkgs/games/exult/default.nix
	pkgs/os-specific/linux/alsa-plugins/default.nix
This commit is contained in:
Vladimír Čunát 2014-08-02 05:08:07 +02:00
commit 6295a3ca36
1391 changed files with 6647 additions and 5597 deletions

21
doc/contributing.xml Normal file
View File

@ -0,0 +1,21 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="chap-contributing">
<title>Contributing</title>
<para>If you make modifications to the manual, it's important to build the manual before contributing:</para>
<orderedlist>
<listitem><para><command>$ git clone git://github.com/NixOS/nixpkgs.git</command></para></listitem>
<listitem><para><command>$ cd nixpkgs/pkgs/top-level</command></para></listitem>
<listitem><para><command>$ nix-build -A tarball release.nix</command></para></listitem>
<listitem><para>Inside the built derivation you shall see <literal>manual/index.html</literal> file.</para></listitem>
</orderedlist>
</chapter>

View File

@ -32,6 +32,7 @@
<xi:include href="language-support.xml" /> <xi:include href="language-support.xml" />
<xi:include href="package-notes.xml" /> <xi:include href="package-notes.xml" />
<xi:include href="coding-conventions.xml" /> <xi:include href="coding-conventions.xml" />
<xi:include href="contributing.xml" />
</book> </book>

View File

@ -17,7 +17,9 @@ meta = {
It is fully customizable. It is fully customizable.
''; '';
homepage = http://www.gnu.org/software/hello/manual/; homepage = http://www.gnu.org/software/hello/manual/;
license = "GPLv3+"; license = stdenv.lib.licenses.gpl3Plus;
maintainers = [ stdenv.lib.maintainers.eelco ];
platforms = stdenv.lib.platforms.all;
}; };
</programlisting> </programlisting>
@ -31,16 +33,42 @@ the package. The value of a meta-attribute must a string.</para>
command-line using <command>nix-env</command>: command-line using <command>nix-env</command>:
<screen> <screen>
$ nix-env -qa hello --meta --xml $ nix-env -qa hello --meta --json
&lt;?xml version='1.0' encoding='utf-8'?> {
&lt;items> "hello": {
&lt;item attrPath="hello" name="hello-2.3" system="i686-linux"> "meta": {
&lt;meta name="description" value="A program that produces a familiar, friendly greeting" /> "description": "A program that produces a familiar, friendly greeting",
&lt;meta name="homepage" value="http://www.gnu.org/software/hello/manual/" /> "homepage": "http://www.gnu.org/software/hello/manual/",
&lt;meta name="license" value="GPLv3+" /> "license": {
&lt;meta name="longDescription" value="GNU Hello is a program that prints &amp;quot;Hello, world!&amp;quot; when you run it.&amp;#xA;It is fully customizable.&amp;#xA;" /> "fullName": "GNU General Public License version 3 or later",
&lt;/item> "shortName": "GPLv3+",
&lt;/items> "url": "http://www.fsf.org/licensing/licenses/gpl.html"
},
"longDescription": "GNU Hello is a program that prints \"Hello, world!\" when you run it.\nIt is fully customizable.\n",
"maintainers": [
"Ludovic Court\u00e8s &lt;ludo@gnu.org>"
],
"platforms": [
"i686-linux",
"x86_64-linux",
"armv5tel-linux",
"armv7l-linux",
"mips64el-linux",
"x86_64-darwin",
"i686-cygwin",
"i686-freebsd",
"x86_64-freebsd",
"i686-openbsd",
"x86_64-openbsd"
],
"position": "/home/user/dev/nixpkgs/pkgs/applications/misc/hello/ex-2/default.nix:14"
},
"name": "hello-2.9",
"system": "x86_64-linux"
}
}
</screen> </screen>
<command>nix-env</command> knows about the <command>nix-env</command> knows about the
@ -92,20 +120,22 @@ interpretation:</para>
<varlistentry> <varlistentry>
<term><varname>license</varname></term> <term><varname>license</varname></term>
<listitem><para>The license for the package. See below for the <listitem><para>The license for the package. One from attribute set defined in
allowed values.</para></listitem> <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/lib/licenses.nix">
<filename>nixpkgs/lib/licenses.nix</filename></link>.
Example:
<literal>stdenv.lib.licenses.gpl3</literal>.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><varname>maintainers</varname></term> <term><varname>maintainers</varname></term>
<listitem><para>A list of names and e-mail addresses of the <listitem><para>A list of names and e-mail addresses of the
maintainers of this Nix expression, e.g. <literal>["Alice maintainers of this Nix expression. If
&lt;alice@example.org>" "Bob &lt;bob@example.com>"]</literal>. If you would like to be a maintainer of a package, you may want to add
you are the maintainer of multiple packages, you may want to add
yourself to <link yourself to <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/lib/maintainers.nix"><filename>pkgs/lib/maintainers.nix</filename></link> xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/lib/maintainers.nix"><filename>nixpkgs/lib/maintainers.nix</filename></link>
and write something like <literal>[stdenv.lib.maintainers.alice and write something like <literal>[ stdenv.lib.maintainers.alice
stdenv.lib.maintainers.bob]</literal>.</para></listitem> stdenv.lib.maintainers.bob ]</literal>.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -121,29 +151,25 @@ interpretation:</para>
<varlistentry> <varlistentry>
<term><varname>platforms</varname></term> <term><varname>platforms</varname></term>
<listitem><para>The list of Nix platform types on which the <listitem><para>The list of Nix platform types on which the
package is supported. If this attribute is set, the package will package is supported. Hydra builds packages according to the
refuse to build, and wont show up in <literal>nix-env platform specified. If no platform is specified, the package does
-qa</literal> output, on any platform not listed not have prebuilt binaries. An example is:
here. An example is:
<programlisting> <programlisting>
meta.platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ]; meta.platforms = stdenv.lib.platforms.linux;
</programlisting>
The set <varname>lib.platforms</varname> defines various common
lists of platforms types, so its more typical to write:
<programlisting>
meta.platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
</programlisting> </programlisting>
Attribute Set <varname>stdenv.lib.platforms</varname> in
<link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/lib/platforms.nix">
<filename>nixpkgs/lib/platforms.nix</filename></link> defines various common
lists of platforms types.
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><varname>hydraPlatforms</varname></term> <term><varname>hydraPlatforms</varname></term>
<listitem><para>The list of Nix platform types for which the Hydra <listitem><para>The list of Nix platform types for which the Hydra
instance at <literal>hydra.nixos.org</literal> should build the instance at <literal>hydra.nixos.org</literal> will build the
package. (Hydra is the Nix-based continuous build system.) It package. (Hydra is the Nix-based continuous build system.) It
defaults to the value of <varname>meta.platforms</varname>. Thus, defaults to the value of <varname>meta.platforms</varname>. Thus,
the only reason to set <varname>meta.hydraPlatforms</varname> is the only reason to set <varname>meta.hydraPlatforms</varname> is
@ -176,80 +202,17 @@ meta.hydraPlatforms = [];
<section xml:id="sec-meta-license"><title>Licenses</title> <section xml:id="sec-meta-license"><title>Licenses</title>
<note><para>This is just a first attempt at standardising the license <para>The <varname>meta.license</varname> attribute could be one of the
attribute.</para></note>
<para>The <varname>meta.license</varname> attribute must be one of the
following: following:
<variablelist> <variablelist>
<varlistentry>
<term><varname>GPL</varname></term>
<listitem><para>GNU General Public License; version not
specified.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>GPLv2</varname></term>
<listitem><para>GNU General Public License, version
2.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>GPLv2+</varname></term>
<listitem><para>GNU General Public License, version
2 or higher.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>GPLv3</varname></term>
<listitem><para>GNU General Public License, version
3.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>GPLv3+</varname></term>
<listitem><para>GNU General Public License, version
3 or higher.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>bsd</varname></term>
<listitem><para>Catch-all for licenses that are essentially
similar to <link
xlink:href="http://www.gnu.org/licenses/license-list.html#ModifiedBSD">the
original BSD license with the advertising clause removed</link>,
i.e. permissive non-copyleft free software licenses. This
includes the <link
xlink:href="http://www.gnu.org/licenses/license-list.html#X11License">X11
(“MIT”) License</link>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>perl5</varname></term>
<listitem><para>The Perl 5 license (Artistic License, version 1
and GPL, version 1 or later).</para></listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><varname>free</varname></term> <term><varname>free</varname></term>
<listitem><para>Catch-all for free software licenses not listed <listitem><para>Catch-all for free software licenses not listed
above.</para></listitem> above.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><varname>free-copyleft</varname></term>
<listitem><para>Catch-all for free, copyleft software licenses not
listed above.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>free-non-copyleft</varname></term>
<listitem><para>Catch-all for free, non-copyleft software licenses
not listed above.</para></listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><varname>unfree-redistributable</varname></term> <term><varname>unfree-redistributable</varname></term>
<listitem><para>Unfree package that can be redistributed in binary <listitem><para>Unfree package that can be redistributed in binary

View File

@ -155,9 +155,10 @@ $ git add pkgs/development/libraries/libfoo/default.nix</screen>
</listitem> </listitem>
<listitem> <listitem>
<para>You can use <command>nix-prefetch-url</command> <para>You can use <command>nix-prefetch-url</command> (or similar nix-prefetch-git, etc)
<replaceable>url</replaceable> to get the SHA-256 hash of <replaceable>url</replaceable> to get the SHA-256 hash of
source distributions.</para> source distributions. There are similar commands as <command>nix-prefetch-git</command> and
<command>nix-prefetch-hg</command> available in <literal>nix-prefetch-scripts</literal> package.</para>
</listitem> </listitem>
<listitem> <listitem>
@ -221,17 +222,10 @@ $ nix-env -f . -iA libfoo</screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Optionally commit the new package, or send a patch to <para>Optionally commit the new package and open a pull request, or send a patch to
<literal>nix-dev@cs.uu.nl</literal>.</para> <literal>nix-dev@cs.uu.nl</literal>.</para>
</listitem> </listitem>
<listitem>
<para>If you want the TU Delft build farm to build binaries of the
package and make them available in the <link
xlink:href="http://nixos.org/releases/nixpkgs/channels/nixpkgs-unstable/"><literal>nixpkgs</literal>
channel</link>, add it to <link
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/release.nix"><filename>pkgs/top-level/release.nix</filename></link>.</para>
</listitem>
</orderedlist> </orderedlist>

View File

@ -89,8 +89,10 @@
sander = "Sander van der Burg <s.vanderburg@tudelft.nl>"; sander = "Sander van der Burg <s.vanderburg@tudelft.nl>";
shlevy = "Shea Levy <shea@shealevy.com>"; shlevy = "Shea Levy <shea@shealevy.com>";
simons = "Peter Simons <simons@cryp.to>"; simons = "Peter Simons <simons@cryp.to>";
skeidel = "Sven Keidel <svenkeidel@gmail.com>";
smironov = "Sergey Mironov <ierton@gmail.com>"; smironov = "Sergey Mironov <ierton@gmail.com>";
sprock = "Roger Mason <rmason@mun.ca>"; sprock = "Roger Mason <rmason@mun.ca>";
tailhook = "Paul Colomiets <paul@colomiets.name>";
thammers = "Tobias Hammerschmidt <jawr@gmx.de>"; thammers = "Tobias Hammerschmidt <jawr@gmx.de>";
the-kenny = "Moritz Ulrich <moritz@tarn-vedra.de>"; the-kenny = "Moritz Ulrich <moritz@tarn-vedra.de>";
thoughtpolice = "Austin Seipp <aseipp@pobox.com>"; thoughtpolice = "Austin Seipp <aseipp@pobox.com>";

View File

@ -1,146 +0,0 @@
/* Tool to sort attribute sets. Primarily useful for keeping
all-packages.nix tidy.
To compile:
$ strc -i ../../maintainers/scripts/sort-attrs.str -la stratego-lib
Typical invocation:
$ sglr -m -p ~/Dev/nix/src/libexpr/nix.tbl -i all-packages.nix \
| implode-asfix --lex \
| ../../maintainers/scripts/sort-attrs \
| asfix-yield
*/
module sort-attrs
imports
libstratego-lib
libstratego-sglr
strategies
no-wsp = !appl(prod([], cf(opt(layout())), no-attrs()), [])
rules
list-sep(s): [] -> []
list-sep(s): [x | xs] -> [[x | before] | <list-sep(s)> [split | after]]
where
<split-fetch-keep(s)> xs => (before, split, after)
list-sep(s): [x | xs] -> [[x | xs]]
where
<not(split-fetch-keep(s))> xs
list-sep-end(s): xs -> [<conc> (before, [split]) | <list-sep-end(s)> after]
where
<split-fetch-keep(s)> xs => (before, split, after)
list-sep-end(s): xs -> [xs]
where
<not(split-fetch-keep(s))> xs
sort-attrs:
appl(p@prod(_, _, attrs([term(cons("Attrs"))])),
[ lit("{")
, ws1
, appl(p2@list(cf(iter-star(sort("Bind")))), attrs)
, ws2
, lit("}")
]
) ->
appl(p, [lit("{"), <no-wsp>, appl(p2, <concat> attrs'), ws2, lit("}")])
where
<debug> "found it";
<attach-wsp> [ws1 | attrs] => withWSP;
<list-sep(starts-section)> withWSP => groups;
<length; debug> groups;
<map({x', x'', x''', xs', starts, starts': \[x | xs] -> [x''' | xs']
where
<remove-section-start> x => (x', starts);
<map(regularise-empty-lines); if !starts; debug; sortable-section; debug then qsort(compare-attrs) else id end> [x' | xs] => [x'' | xs'];
<[] <+ \x -> ["\n\n\n" | x]\ > starts => starts';
<prepend-layout> (starts', x'') => x'''
\ })> groups => attrs';
<debug> "did it"
attach-wsp: [a, b | cs] -> [(a, b) | <attach-wsp> cs]
attach-wsp: [] -> []
strategies
starts-section =
?x@(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs), attr);
<implode-string; is-substring(!"###")> cs;
!x
rules
sortable-section = ?[s]; !s; explode-string; not(fetch({x: ?x; !(x, 97); geq}))
remove-section-start:
(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs), attr) ->
((appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs'), attr), starts)
where
!cs;
list-sep-end(?10); // separate into lines, keeping the \n
map(implode-string);
partition(where(is-substring(!"###"))) => (starts, rest);
<map(explode-string); concat> rest => cs'
regularise-empty-lines:
(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs), attr) ->
(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs''), attr)
where
// separate into lines, keeping the \n
// last whitespace is significant, keep
<list-sep-end(?10); split-init-last> cs => (init, last);
<regularise-empty-lines'> init => cs'; // remove whitespace-only lines
<concat> [<explode-string> "\n\n", <concat> cs', last] => cs'' // add one empty line
/* Dirty hack: *do* keep the first empty line following a non-empty line. !!! order matters */
regularise-empty-lines': [] -> []
regularise-empty-lines': [x, y | xs] -> [x, y | <regularise-empty-lines'> xs]
where
<fetch-elem(not(?10 <+ ?32))> x;
<not(fetch-elem(not(?10 <+ ?32)))> y
regularise-empty-lines': [x | xs] -> [x | <regularise-empty-lines'> xs]
where <fetch-elem(not(?10 <+ ?32))> x
regularise-empty-lines': [x | xs] -> <regularise-empty-lines'> xs
where <not(fetch-elem(not(?10 <+ ?32)))> x
prepend-layout:
(text, (appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs), attr)) ->
(appl(prod([cf(layout())], cf(opt(layout())), no-attrs()), cs''), attr)
where
<implode-string> cs => cs';
<conc-strings; explode-string> (<concat-strings> text, cs') => cs''
compare-attrs:
x@
( (_, appl(p1@prod(_, _, attrs([term(cons("Bind"))])), [id1 | xs1]))
, (_, appl(p2@prod(_, _, attrs([term(cons("Bind"))])), [id2 | xs2]))
)
-> x
where
<string-lt> (id1, id2)
strategies
main = io-wrap(
oncetd(sort-attrs)
)

12
nixos/doc/manual/README Normal file
View File

@ -0,0 +1,12 @@
To build the manual, you need Nix installed on your system (no need
for NixOS). To install Nix, follow the instructions at
https://nixos.org/nix/download.html
When you have Nix on your system, in the root directory of the project
(i.e., `nixpkgs`), run:
nix-build nixos/release.nix -A manual.x86_64-linux
When this command successfully finishes, it will tell you where the
manual got generated.

View File

@ -1036,21 +1036,22 @@ users.extraUsers.alice =
{ createHome = true; { createHome = true;
home = "/home/alice"; home = "/home/alice";
description = "Alice Foobar"; description = "Alice Foobar";
extraGroups = [ "wheel" ]; extraGroups = [ "wheel" "networkmanager" ];
useDefaultShell = true; useDefaultShell = true;
openssh.authorizedKeys.keys = [ "ssh-dss AAAAB3Nza... alice@foobar" ]; openssh.authorizedKeys.keys = [ "ssh-dss AAAAB3Nza... alice@foobar" ];
}; };
</programlisting> </programlisting>
Note that <literal>alice</literal> is a member of the Note that <literal>alice</literal> is a member of the
<literal>wheel</literal> group, which allows her to use <literal>wheel</literal> and <literal>networkmanager</literal> groups,
<command>sudo</command> to execute commands as which allows her to use <command>sudo</command> to execute commands as
<literal>root</literal>. Also note the SSH public key that allows <literal>root</literal> and to configure the network, respectively.
remote logins with the corresponding private key. Users created in Also note the SSH public key that allows remote logins with the
this way do not have a password by default, so they cannot log in via corresponding private key. Users created in this way do not have a
mechanisms that require a password. However, you can use the password by default, so they cannot log in via mechanisms that require
<command>passwd</command> program to set a password, which is retained a password. However, you can use the <command>passwd</command> program
across invocations of <command>nixos-rebuild</command>.</para> to set a password, which is retained across invocations of
<command>nixos-rebuild</command>.</para>
<para>A user ID (uid) is assigned automatically. You can also specify <para>A user ID (uid) is assigned automatically. You can also specify
a uid manually by adding a uid manually by adding
@ -1277,6 +1278,28 @@ services.xserver.synaptics.twoFingerScroll = true;
<section xml:id="sec-networking"><title>Networking</title> <section xml:id="sec-networking"><title>Networking</title>
<section xml:id="sec-networkmanager"><title>NetworkManager</title>
<para>To facilitate network configuration, some desktop environments
use NetworkManager. You can enable NetworkManager by setting:
<programlisting>
services.networkmanager.enable = true;
</programlisting>
Some desktop managers (e.g., GNOME) enable NetworkManager
automatically for you.</para>
<para>All users that should have permission to change network settings
must belong to the <code>networkmanager</code> group.</para>
<note><para><code>services.networkmanager</code> and
<code>services.wireless</code> can not be enabled at the same time:
you can still connect to the wireless networks using
NetworkManager.</para></note>
</section>
<section xml:id="sec-ssh"><title>Secure shell access</title> <section xml:id="sec-ssh"><title>Secure shell access</title>
<para>Secure shell (SSH) access to your machine can be enabled by <para>Secure shell (SSH) access to your machine can be enabled by
@ -1399,6 +1422,11 @@ always allowed.)</para>
<section xml:id="sec-wireless"><title>Wireless networks</title> <section xml:id="sec-wireless"><title>Wireless networks</title>
<para>For a desktop installation using NetworkManager (e.g., GNOME),
you just have to make sure the user is in the
<code>networkmanager</code> group and you can skip the rest of this
section on wireless networks.</para>
<para> <para>
NixOS will start wpa_supplicant for you if you enable this setting: NixOS will start wpa_supplicant for you if you enable this setting:

View File

@ -320,7 +320,10 @@ changes:
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para>You should boot the live CD in UEFI mode (consult your <para>You should boot the live CD in UEFI mode (consult your
specific hardware's documentation for instructions).</para> specific hardware's documentation for instructions). You may find
the <link
xlink:href="http://www.rodsbooks.com/refind">rEFInd
boot manager</link> useful.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Instead of <command>fdisk</command>, you should use <para>Instead of <command>fdisk</command>, you should use
@ -335,6 +338,11 @@ changes:
should do this automatically for new configurations when booted in should do this automatically for new configurations when booted in
UEFI mode.</para> UEFI mode.</para>
</listitem> </listitem>
<listitem>
<para>After having mounted your installation partition to
<code>/mnt</code>, you must mount the <code>boot</code> partition
to <code>/mnt/boot</code>.</para>
</listitem>
<listitem> <listitem>
<para>You may want to look at the options starting with <para>You may want to look at the options starting with
<option>boot.loader.efi</option> and <option>boot.loader.gummiboot</option> <option>boot.loader.efi</option> and <option>boot.loader.gummiboot</option>

View File

@ -117,7 +117,7 @@ rec {
report = releaseTools.gcovReport { coverageRuns = [ test ]; }; report = releaseTools.gcovReport { coverageRuns = [ test ]; };
in (if makeCoverageReport then report else test) // { inherit driver test; }; in (if makeCoverageReport then report else test) // { inherit nodes driver test; };
runInMachine = runInMachine =

View File

@ -179,7 +179,6 @@ in
fileSystems."/" = fileSystems."/" =
{ fsType = "tmpfs"; { fsType = "tmpfs";
device = "none";
options = "mode=0755"; options = "mode=0755";
}; };
@ -192,6 +191,8 @@ in
noCheck = true; noCheck = true;
}; };
# In stage 1, mount a tmpfs on top of /nix/store (the squashfs
# image) to make this a live CD.
fileSystems."/nix/.ro-store" = fileSystems."/nix/.ro-store" =
{ fsType = "squashfs"; { fsType = "squashfs";
device = "/iso/nix-store.squashfs"; device = "/iso/nix-store.squashfs";
@ -201,23 +202,20 @@ in
fileSystems."/nix/.rw-store" = fileSystems."/nix/.rw-store" =
{ fsType = "tmpfs"; { fsType = "tmpfs";
device = "none";
options = "mode=0755"; options = "mode=0755";
neededForBoot = true; neededForBoot = true;
}; };
fileSystems."/nix/store" =
{ fsType = "unionfs-fuse";
device = "unionfs";
options = "allow_other,cow,nonempty,chroot=/mnt-root,max_files=32768,hide_meta_files,dirs=/nix/.rw-store=rw:/nix/.ro-store=ro";
};
boot.initrd.availableKernelModules = [ "squashfs" "iso9660" ]; boot.initrd.availableKernelModules = [ "squashfs" "iso9660" ];
boot.initrd.kernelModules = [ "loop" ]; boot.initrd.kernelModules = [ "loop" ];
# In stage 1, mount a tmpfs on top of /nix/store (the squashfs
# image) to make this a live CD.
boot.initrd.postMountCommands =
''
mkdir -p $targetRoot/nix/store
unionfs -o allow_other,cow,nonempty,chroot=$targetRoot,max_files=32768 /nix/.rw-store=RW:/nix/.ro-store=RO $targetRoot/nix/store
'';
# Closures to be copied to the Nix store on the CD, namely the init # Closures to be copied to the Nix store on the CD, namely the init
# script and the top-level system configuration directory. # script and the top-level system configuration directory.
isoImage.storeContents = isoImage.storeContents =
@ -313,8 +311,8 @@ in
''; '';
# Add vfat support to the initrd to enable people to copy the # Add vfat support to the initrd to enable people to copy the
# contents of the CD to a bootable USB stick. Need unionfs-fuse for union mounts # contents of the CD to a bootable USB stick.
boot.initrd.supportedFilesystems = [ "vfat" "unionfs-fuse" ]; boot.initrd.supportedFilesystems = [ "vfat" ];
}; };

View File

@ -137,6 +137,7 @@
gitolite = 127; gitolite = 127;
znc = 128; znc = 128;
polipo = 129; polipo = 129;
mopidy = 130;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399! # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -248,6 +249,8 @@
firebird = 127; firebird = 127;
znc = 128; znc = 128;
polipo = 129; polipo = 129;
mopidy = 130;
docker = 131;
# When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399! # When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399!

View File

@ -79,6 +79,7 @@
./services/audio/alsa.nix ./services/audio/alsa.nix
./services/audio/fuppes.nix ./services/audio/fuppes.nix
./services/audio/mpd.nix ./services/audio/mpd.nix
./services/audio/mopidy.nix
./services/backup/almir.nix ./services/backup/almir.nix
./services/backup/bacula.nix ./services/backup/bacula.nix
./services/backup/mysql-backup.nix ./services/backup/mysql-backup.nix
@ -296,6 +297,7 @@
./services/x11/xserver.nix ./services/x11/xserver.nix
./system/activation/activation-script.nix ./system/activation/activation-script.nix
./system/activation/top-level.nix ./system/activation/top-level.nix
./system/boot/emergency-mode.nix
./system/boot/kernel.nix ./system/boot/kernel.nix
./system/boot/kexec.nix ./system/boot/kexec.nix
./system/boot/loader/efi.nix ./system/boot/loader/efi.nix
@ -311,15 +313,17 @@
./system/boot/stage-1.nix ./system/boot/stage-1.nix
./system/boot/stage-2.nix ./system/boot/stage-2.nix
./system/boot/systemd.nix ./system/boot/systemd.nix
./system/boot/tmp.nix
./system/etc/etc.nix ./system/etc/etc.nix
./system/upstart/upstart.nix ./system/upstart/upstart.nix
./tasks/cpu-freq.nix ./tasks/cpu-freq.nix
./tasks/encrypted-devices.nix ./tasks/encrypted-devices.nix
./tasks/filesystems.nix
./tasks/filesystems/btrfs.nix ./tasks/filesystems/btrfs.nix
./tasks/filesystems/cifs.nix
./tasks/filesystems/ext.nix ./tasks/filesystems/ext.nix
./tasks/filesystems/f2fs.nix ./tasks/filesystems/f2fs.nix
./tasks/filesystems/nfs.nix ./tasks/filesystems/nfs.nix
./tasks/filesystems.nix
./tasks/filesystems/reiserfs.nix ./tasks/filesystems/reiserfs.nix
./tasks/filesystems/unionfs-fuse.nix ./tasks/filesystems/unionfs-fuse.nix
./tasks/filesystems/vfat.nix ./tasks/filesystems/vfat.nix
@ -334,6 +338,7 @@
./testing/service-runner.nix ./testing/service-runner.nix
./virtualisation/container-config.nix ./virtualisation/container-config.nix
./virtualisation/containers.nix ./virtualisation/containers.nix
./virtualisation/docker.nix
./virtualisation/libvirtd.nix ./virtualisation/libvirtd.nix
#./virtualisation/nova.nix #./virtualisation/nova.nix
./virtualisation/virtualbox-guest.nix ./virtualisation/virtualbox-guest.nix

View File

@ -7,7 +7,6 @@
# Include some utilities that are useful for installing or repairing # Include some utilities that are useful for installing or repairing
# the system. # the system.
environment.systemPackages = [ environment.systemPackages = [
pkgs.subversion # for nixos-checkout
pkgs.w3m # needed for the manual anyway pkgs.w3m # needed for the manual anyway
pkgs.testdisk # useful for repairing boot problems pkgs.testdisk # useful for repairing boot problems
pkgs.mssys # for writing Microsoft boot sectors / MBRs pkgs.mssys # for writing Microsoft boot sectors / MBRs

View File

@ -13,8 +13,9 @@ with lib;
]; ];
environment.sessionVariables = environment.sessionVariables =
{ OPENSSL_X509_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt"; { SSL_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt";
CURL_CA_BUNDLE = "/etc/ssl/certs/ca-bundle.crt"; # FIXME: unneeded - remove eventually.
OPENSSL_X509_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt";
GIT_SSL_CAINFO = "/etc/ssl/certs/ca-bundle.crt"; GIT_SSL_CAINFO = "/etc/ssl/certs/ca-bundle.crt";
}; };

View File

@ -4,6 +4,8 @@ with lib;
let let
cfg = config.services.rabbitmq; cfg = config.services.rabbitmq;
config_file = pkgs.writeText "rabbitmq.config" cfg.config;
config_file_wo_suffix = builtins.substring 0 ((builtins.stringLength config_file) - 7) config_file;
in { in {
###### interface ###### interface
@ -31,7 +33,6 @@ in {
''; '';
}; };
dataDir = mkOption { dataDir = mkOption {
type = types.path; type = types.path;
default = "/var/lib/rabbitmq"; default = "/var/lib/rabbitmq";
@ -40,6 +41,30 @@ in {
''; '';
}; };
cookie = mkOption {
default = "";
type = types.str;
description = ''
Erlang cookie is a string of arbitrary length which must
be the same for several nodes to be allowed to communicate.
Leave empty to generate automatically.
'';
};
config = mkOption {
default = "";
type = types.str;
description = ''
Verbatim configuration file contents.
See http://www.rabbitmq.com/configure.htm
'';
};
plugins = mkOption {
default = [];
type = types.listOf types.str;
description = "The names of plugins to enable";
};
}; };
}; };
@ -69,7 +94,10 @@ in {
RABBITMQ_NODE_IP_ADDRESS = cfg.listenAddress; RABBITMQ_NODE_IP_ADDRESS = cfg.listenAddress;
RABBITMQ_SERVER_START_ARGS = "-rabbit error_logger tty -rabbit sasl_error_logger false"; RABBITMQ_SERVER_START_ARGS = "-rabbit error_logger tty -rabbit sasl_error_logger false";
SYS_PREFIX = ""; SYS_PREFIX = "";
}; RABBITMQ_ENABLED_PLUGINS_FILE = pkgs.writeText "enabled_plugins" ''
[ ${concatStringsSep "," cfg.plugins} ].
'';
} // optionalAttrs (cfg.config != "") { RABBITMQ_CONFIG_FILE = config_file_wo_suffix; };
serviceConfig = { serviceConfig = {
ExecStart = "${pkgs.rabbitmq_server}/sbin/rabbitmq-server"; ExecStart = "${pkgs.rabbitmq_server}/sbin/rabbitmq-server";
@ -81,6 +109,15 @@ in {
preStart = '' preStart = ''
mkdir -p ${cfg.dataDir} && chmod 0700 ${cfg.dataDir} mkdir -p ${cfg.dataDir} && chmod 0700 ${cfg.dataDir}
if [ "$(id -u)" = 0 ]; then chown rabbitmq:rabbitmq ${cfg.dataDir}; fi if [ "$(id -u)" = 0 ]; then chown rabbitmq:rabbitmq ${cfg.dataDir}; fi
${optionalString (cfg.cookie != "") ''
echo -n ${cfg.cookie} > ${cfg.dataDir}/.erlang.cookie
chmod 400 ${cfg.dataDir}/.erlang.cookie
chown rabbitmq:rabbitmq ${cfg.dataDir}/.erlang.cookie
''}
mkdir -p /var/log/rabbitmq && chmod 0700 /var/log/rabbitmq
chown rabbitmq:rabbitmq /var/log/rabbitmq
''; '';
}; };

View File

@ -0,0 +1,107 @@
{ config, lib, pkgs, ... }:
with pkgs;
with lib;
let
uid = config.ids.uids.mopidy;
gid = config.ids.gids.mopidy;
cfg = config.services.mopidy;
mopidyConf = writeText "mopidy.conf" cfg.configuration;
mopidyLauncher = stdenv.mkDerivation {
name = "mopidy-launcher";
phases = [ "installPhase" ];
buildInputs = [ makeWrapper python ];
installPhase = ''
mkdir -p $out/bin
ln -s ${mopidy}/bin/mopidy $out/bin/mopidy
wrapProgram $out/bin/mopidy \
--prefix PYTHONPATH : \
"${concatStringsSep ":" (map (p: "$(toPythonPath ${p})") cfg.extensionPackages)}"
'';
};
in {
options = {
services.mopidy = {
enable = mkOption {
default = false;
type = types.bool;
description = ''
Whether to enable Mopidy, a music player daemon.
'';
};
dataDir = mkOption {
default = "/var/lib/mopidy";
type = types.str;
description = ''
The directory where Mopidy stores its state.
'';
};
extensionPackages = mkOption {
default = [];
type = types.listOf types.package;
example = [ mopidy-spotify ];
description = ''
Mopidy extensions that should be loaded by the service.
'';
};
configuration = mkOption {
type = types.lines;
description = ''
The configuration that Mopidy should use.
'';
};
extraConfigFiles = mkOption {
default = [];
type = types.listOf types.str;
description = ''
Extra config file read by Mopidy when the service starts.
Later files in the list overrides earlier configuration.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
systemd.services.mopidy = {
wantedBy = [ "multi-user.target" ];
after = [ "network.target" "sound.target" ];
description = "mopidy music player daemon";
preStart = "mkdir -p ${cfg.dataDir} && chown -R mopidy:mopidy ${cfg.dataDir}";
serviceConfig = {
ExecStart = "${mopidyLauncher}/bin/mopidy --config ${concatStringsSep ":" ([mopidyConf] ++ cfg.extraConfigFiles)}";
User = "mopidy";
PermissionsStartOnly = true;
};
};
users.extraUsers.mopidy = {
inherit uid;
group = "mopidy";
extraGroups = [ "audio" ];
description = "Mopidy daemon user";
home = "${cfg.dataDir}";
};
users.extraGroups.mopidy.gid = gid;
};
}

View File

@ -69,9 +69,9 @@ in
systemd.services.logstash = with pkgs; { systemd.services.logstash = with pkgs; {
description = "Logstash Daemon"; description = "Logstash Daemon";
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
environment = { JAVA_HOME = jre; };
serviceConfig = { serviceConfig = {
ExecStart = "${jre}/bin/java -jar ${logstash} agent -f ${writeText "logstash.conf" '' ExecStart = "${logstash}/bin/logstash agent -f ${writeText "logstash.conf" ''
input { input {
${cfg.inputConfig} ${cfg.inputConfig}
} }

View File

@ -1,32 +1,35 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let with lib;
serveOnly = pkgs.writeScript "nix-store-serve" ''
#!${pkgs.stdenv.shell}
if [ "$SSH_ORIGINAL_COMMAND" != "nix-store --serve" ]; then
echo 'Error: You are only allowed to run `nix-store --serve'\'''!' >&2
exit 1
fi
exec /run/current-system/sw/bin/nix-store --serve
'';
inherit (lib) mkIf mkOption types; {
in {
options = { options = {
nix.sshServe = { nix.sshServe = {
enable = mkOption { enable = mkOption {
description = "Whether to enable serving the nix store over ssh.";
default = false;
type = types.bool; type = types.bool;
default = false;
description = "Whether to enable serving the Nix store as a binary cache via SSH.";
}; };
keys = mkOption {
type = types.listOf types.str;
default = [];
example = [ "ssh-dss AAAAB3NzaC1k... alice@example.org" ];
description = "A list of SSH public keys allowed to access the binary cache via SSH.";
};
}; };
}; };
config = mkIf config.nix.sshServe.enable { config = mkIf config.nix.sshServe.enable {
users.extraUsers.nix-ssh = { users.extraUsers.nix-ssh = {
description = "User for running nix-store --serve."; description = "Nix SSH substituter user";
uid = config.ids.uids.nix-ssh; uid = config.ids.uids.nix-ssh;
shell = pkgs.stdenv.shell; useDefaultShell = true;
}; };
services.openssh.enable = true; services.openssh.enable = true;
@ -38,8 +41,11 @@ in {
PermitTTY no PermitTTY no
PermitTunnel no PermitTunnel no
X11Forwarding no X11Forwarding no
ForceCommand ${serveOnly} ForceCommand ${config.nix.package}/bin/nix-store --serve
Match All Match All
''; '';
users.extraUsers.nix-ssh.openssh.authorizedKeys.keys = config.nix.sshServe.keys;
}; };
} }

View File

@ -189,19 +189,18 @@ in
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
path = [ pkgs.munin ]; path = [ pkgs.munin ];
environment.MUNIN_PLUGSTATE = "/var/run/munin"; environment.MUNIN_PLUGSTATE = "/var/run/munin";
preStart = ''
echo "updating munin plugins..."
mkdir -p /etc/munin/plugins
rm -rf /etc/munin/plugins/*
PATH="/run/current-system/sw/bin:/run/current-system/sw/sbin" ${pkgs.munin}/sbin/munin-node-configure --shell --families contrib,auto,manual --config ${nodeConf} --libdir=${muninPlugins} --servicedir=/etc/munin/plugins 2>/dev/null | ${pkgs.bash}/bin/bash
'';
serviceConfig = { serviceConfig = {
ExecStart = "${pkgs.munin}/sbin/munin-node --config ${nodeConf} --servicedir /etc/munin/plugins/"; ExecStart = "${pkgs.munin}/sbin/munin-node --config ${nodeConf} --servicedir /etc/munin/plugins/";
}; };
}; };
system.activationScripts.munin-node = ''
echo "updating munin plugins..."
mkdir -p /etc/munin/plugins
rm -rf /etc/munin/plugins/*
PATH="/run/current-system/sw/bin:/run/current-system/sw/sbin" ${pkgs.munin}/sbin/munin-node-configure --shell --families contrib,auto,manual --config ${nodeConf} --libdir=${muninPlugins} --servicedir=/etc/munin/plugins 2>/dev/null | ${pkgs.bash}/bin/bash
'';
}) (mkIf cronCfg.enable { }) (mkIf cronCfg.enable {
services.cron.systemCronJobs = [ services.cron.systemCronJobs = [

View File

@ -23,7 +23,7 @@ let
confOptions = { ... }: { confOptions = { ... }: {
options = { options = {
modules = mkOption { modules = mkOption {
type = types.listOf types.string; type = types.listOf types.str;
default = [ "partyline" "webadmin" "adminlog" "log" ]; default = [ "partyline" "webadmin" "adminlog" "log" ];
example = [ "partyline" "webadmin" "adminlog" "log" ]; example = [ "partyline" "webadmin" "adminlog" "log" ];
description = '' description = ''
@ -34,7 +34,7 @@ let
userName = mkOption { userName = mkOption {
default = defaultUserName; default = defaultUserName;
example = "johntron"; example = "johntron";
type = types.string; type = types.str;
description = '' description = ''
The user name to use when generating the `znc.conf` file. The user name to use when generating the `znc.conf` file.
This is the user name used by the user logging into the ZNC web admin. This is the user name used by the user logging into the ZNC web admin.
@ -44,7 +44,7 @@ let
nick = mkOption { nick = mkOption {
default = "znc-user"; default = "znc-user";
example = "john"; example = "john";
type = types.string; type = types.str;
description = '' description = ''
The IRC nick to use when generating the `znc.conf` file. The IRC nick to use when generating the `znc.conf` file.
''; '';
@ -53,7 +53,7 @@ let
passBlock = mkOption { passBlock = mkOption {
default = defaultPassBlock; default = defaultPassBlock;
example = "Must be the block generated by the `znc --makepass` command."; example = "Must be the block generated by the `znc --makepass` command.";
type = types.string; type = types.str;
description = '' description = ''
The pass block to use when generating the `znc.conf` file. The pass block to use when generating the `znc.conf` file.
This is the password used by the user logging into the ZNC web admin. This is the password used by the user logging into the ZNC web admin.
@ -63,9 +63,9 @@ let
}; };
port = mkOption { port = mkOption {
default = "5000"; default = 5000;
example = "5000"; example = 5000;
type = types.string; type = types.int;
description = '' description = ''
Specifies the port on which to listen. Specifies the port on which to listen.
''; '';
@ -104,7 +104,7 @@ let
AllowWeb = true AllowWeb = true
IPv4 = true IPv4 = true
IPv6 = false IPv6 = false
Port = ${if confOpts.useSSL then "+" else ""}${confOpts.port} Port = ${if confOpts.useSSL then "+" else ""}${toString confOpts.port}
SSL = ${if confOpts.useSSL then "true" else "false"} SSL = ${if confOpts.useSSL then "true" else "false"}
</Listener> </Listener>
@ -160,7 +160,7 @@ in
user = mkOption { user = mkOption {
default = "znc"; default = "znc";
example = "john"; example = "john";
type = types.string; type = types.str;
description = '' description = ''
The name of an existing user account to use to own the ZNC server process. The name of an existing user account to use to own the ZNC server process.
If not specified, a default user will be created to own the process. If not specified, a default user will be created to own the process.
@ -170,7 +170,7 @@ in
dataDir = mkOption { dataDir = mkOption {
default = "/home/${cfg.user}/.znc"; default = "/home/${cfg.user}/.znc";
example = "/home/john/.znc"; example = "/home/john/.znc";
type = types.string; type = types.path;
description = '' description = ''
The data directory. Used for configuration files and modules. The data directory. Used for configuration files and modules.
''; '';
@ -179,7 +179,7 @@ in
zncConf = mkOption { zncConf = mkOption {
default = ""; default = "";
example = "See: http://wiki.znc.in/Configuration"; example = "See: http://wiki.znc.in/Configuration";
type = types.string; type = types.lines;
description = '' description = ''
The contents of the `znc.conf` file to use when creating it. The contents of the `znc.conf` file to use when creating it.
If specified, `confOptions` will be ignored, and this value, as-is, will be used. If specified, `confOptions` will be ignored, and this value, as-is, will be used.
@ -218,9 +218,9 @@ in
}; };
extraFlags = mkOption { extraFlags = mkOption {
default = ""; default = [ ];
example = "--debug"; example = [ "--debug" ];
type = types.string; type = types.listOf types.str;
description = '' description = ''
Extra flags to use when executing znc command. Extra flags to use when executing znc command.
''; '';
@ -272,7 +272,7 @@ in
${pkgs.znc}/bin/znc --makepem ${pkgs.znc}/bin/znc --makepem
fi fi
''; '';
script = "${pkgs.znc}/bin/znc --foreground --datadir ${cfg.dataDir} ${cfg.extraFlags}"; script = "${pkgs.znc}/bin/znc --foreground --datadir ${cfg.dataDir} ${toString cfg.extraFlags}";
}; };
users.extraUsers = optional (cfg.user == defaultUser) users.extraUsers = optional (cfg.user == defaultUser)

View File

@ -21,6 +21,11 @@ let
]; ];
}; };
esPlugins = pkgs.buildEnv {
name = "elasticsearch-plugins";
paths = cfg.plugins;
};
in { in {
###### interface ###### interface
@ -101,6 +106,12 @@ in {
example = [ "-Djava.net.preferIPv4Stack=true" ]; example = [ "-Djava.net.preferIPv4Stack=true" ];
}; };
plugins = mkOption {
description = "Extra elasticsearch plugins";
default = [];
type = types.listOf types.package;
};
}; };
###### implementation ###### implementation
@ -119,6 +130,10 @@ in {
preStart = '' preStart = ''
mkdir -m 0700 -p ${cfg.dataDir} mkdir -m 0700 -p ${cfg.dataDir}
if [ "$(id -u)" = 0 ]; then chown -R elasticsearch ${cfg.dataDir}; fi if [ "$(id -u)" = 0 ]; then chown -R elasticsearch ${cfg.dataDir}; fi
# Install plugins
rm ${cfg.dataDir}/plugins || true
ln -s ${esPlugins}/plugins ${cfg.dataDir}/plugins
''; '';
}; };

View File

@ -29,6 +29,14 @@ ${extraWorkersProperties}
''; '';
in in
{ {
options = {
extraWorkersProperties = lib.mkOption {
default = "";
description = "Additional configuration for the workers.properties file.";
};
};
extraModules = [ extraModules = [
{ name = "jk"; path = "${pkgs.tomcat_connectors}/modules/mod_jk.so"; } { name = "jk"; path = "${pkgs.tomcat_connectors}/modules/mod_jk.so"; }
]; ];

View File

@ -29,7 +29,7 @@ in
cache-size=1000 cache-size=1000
scan-path=/srv/git scan-path=/srv/git
''; '';
type = types.string; type = types.lines;
description = '' description = ''
Verbatim contents of the cgit runtime configuration file. Documentation Verbatim contents of the cgit runtime configuration file. Documentation
(with cgitrc example file) is available in "man cgitrc". Or online: (with cgitrc example file) is available in "man cgitrc". Or online:

View File

@ -102,7 +102,7 @@ in
document-root = mkOption { document-root = mkOption {
default = "/srv/www"; default = "/srv/www";
type = types.str; type = types.path;
description = '' description = ''
Document-root of the web server. Must be readable by the "lighttpd" user. Document-root of the web server. Must be readable by the "lighttpd" user.
''; '';
@ -128,7 +128,7 @@ in
configText = mkOption { configText = mkOption {
default = ""; default = "";
type = types.string; type = types.lines;
example = ''...verbatim config file contents...''; example = ''...verbatim config file contents...'';
description = '' description = ''
Overridable config file contents to use for lighttpd. By default, use Overridable config file contents to use for lighttpd. By default, use
@ -138,7 +138,7 @@ in
extraConfig = mkOption { extraConfig = mkOption {
default = ""; default = "";
type = types.string; type = types.lines;
description = '' description = ''
These configuration lines will be appended to the generated lighttpd These configuration lines will be appended to the generated lighttpd
config file. Note that this mechanism does not work when the manual config file. Note that this mechanism does not work when the manual

View File

@ -25,7 +25,7 @@ in
projectroot = mkOption { projectroot = mkOption {
default = "/srv/git"; default = "/srv/git";
type = types.str; type = types.path;
description = '' description = ''
Path to git projects (bare repositories) that should be served by Path to git projects (bare repositories) that should be served by
gitweb. Must not end with a slash. gitweb. Must not end with a slash.
@ -34,7 +34,7 @@ in
extraConfig = mkOption { extraConfig = mkOption {
default = ""; default = "";
type = types.str; type = types.lines;
description = '' description = ''
Verbatim configuration text appended to the generated gitweb.conf file. Verbatim configuration text appended to the generated gitweb.conf file.
''; '';

View File

@ -1,11 +1,12 @@
{ config, pkgs, ... }: { config, pkgs, lib, ... }:
with pkgs.lib; with lib;
let let
xcfg = config.services.xserver; xcfg = config.services.xserver;
cfg = xcfg.desktopManager.e18; cfg = xcfg.desktopManager.e18;
e18_enlightenment = pkgs.e18.enlightenment.override { set_freqset_setuid = true; };
in in
@ -23,18 +24,20 @@ in
config = mkIf (xcfg.enable && cfg.enable) { config = mkIf (xcfg.enable && cfg.enable) {
environment.systemPackages = [ environment.systemPackages = [
pkgs.e18.efl pkgs.e18.evas pkgs.e18.emotion pkgs.e18.elementary pkgs.e18.enlightenment pkgs.e18.efl pkgs.e18.evas pkgs.e18.emotion pkgs.e18.elementary e18_enlightenment
pkgs.e18.terminology pkgs.e18.econnman pkgs.e18.terminology pkgs.e18.econnman
]; ];
services.xserver.desktopManager.session = [ services.xserver.desktopManager.session = [
{ name = "E18"; { name = "E18";
start = '' start = ''
${pkgs.e18.enlightenment}/bin/enlightenment_start ${e18_enlightenment}/bin/enlightenment_start
waitPID=$! waitPID=$!
''; '';
}]; }];
security.setuidPrograms = [ "e18_freqset" ];
}; };
} }

View File

@ -0,0 +1,37 @@
{ config, lib, ... }:
with lib;
{
###### interface
options = {
systemd.enableEmergencyMode = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable emergency mode, which is an
<command>sulogin</command> shell started on the console if
mounting a filesystem fails. Since some machines (like EC2
instances) have no console of any kind, emergency mode doesn't
make sense, and it's better to continue with the boot insofar
as possible.
'';
};
};
###### implementation
config = {
systemd.additionalUpstreamSystemUnits = optionals
config.systemd.enableEmergencyMode [
"emergency.target" "emergency.service"
];
};
}

View File

@ -68,20 +68,15 @@ with lib;
config = mkIf (!config.boot.isContainer) { config = mkIf (!config.boot.isContainer) {
environment.etc = [ environment.etc."modprobe.d/ubuntu.conf".source = "${pkgs.kmod-blacklist-ubuntu}/modprobe.conf";
{ source = "${pkgs.kmod-blacklist-ubuntu}/modprobe.conf";
target = "modprobe.d/ubuntu.conf"; environment.etc."modprobe.d/nixos.conf".text =
} ''
{ source = pkgs.writeText "modprobe.conf" ${flip concatMapStrings config.boot.blacklistedKernelModules (name: ''
'' blacklist ${name}
${flip concatMapStrings config.boot.blacklistedKernelModules (name: '' '')}
blacklist ${name} ${config.boot.extraModprobeConfig}
'')} '';
${config.boot.extraModprobeConfig}
'';
target = "modprobe.d/nixos.conf";
}
];
environment.systemPackages = [ config.system.sbin.modprobe pkgs.kmod ]; environment.systemPackages = [ config.system.sbin.modprobe pkgs.kmod ];

View File

@ -4,7 +4,8 @@ targetRoot=/mnt-root
console=tty1 console=tty1
export LD_LIBRARY_PATH=@extraUtils@/lib export LD_LIBRARY_PATH=@extraUtils@/lib
export PATH=@extraUtils@/bin:@extraUtils@/sbin export PATH=@extraUtils@/bin
ln -s @extraUtils@/bin /bin
fail() { fail() {
@ -262,6 +263,13 @@ mountFS() {
checkFS "$device" "$fsType" checkFS "$device" "$fsType"
# Create backing directories for unionfs-fuse.
if [ "$fsType" = unionfs-fuse ]; then
for i in $(IFS=:; echo ${options##*,dirs=}); do
mkdir -m 0700 -p /mnt-root"${i%=*}"
done
fi
echo "mounting $device on $mountPoint..." echo "mounting $device on $mountPoint..."
mkdir -p "/mnt-root$mountPoint" || true mkdir -p "/mnt-root$mountPoint" || true

View File

@ -23,22 +23,6 @@ let
}; };
needsCifsUtils = kernelPackages.kernel ? features
&& kernelPackages.kernel.features ? needsCifsUtils
&& kernelPackages.kernel.features.needsCifsUtils
&& any (fs: fs.fsType == "cifs") fileSystems;
busybox =
if needsCifsUtils
then pkgs.busybox.override {
extraConfig = ''
CONFIG_FEATURE_MOUNT_CIFS n
CONFIG_FEATURE_MOUNT_HELPERS y
'';
}
else pkgs.busybox;
# Some additional utilities needed in stage 1, like mount, lvm, fsck # Some additional utilities needed in stage 1, like mount, lvm, fsck
# etc. We don't want to bring in all of those packages, so we just # etc. We don't want to bring in all of those packages, so we just
# copy what we need. Instead of using statically linked binaries, # copy what we need. Instead of using statically linked binaries,
@ -51,6 +35,7 @@ let
} }
'' ''
mkdir -p $out/bin $out/lib mkdir -p $out/bin $out/lib
ln -s $out/bin $out/sbin
# Copy what we need from Glibc. # Copy what we need from Glibc.
cp -pv ${pkgs.glibc}/lib/ld*.so.? $out/lib cp -pv ${pkgs.glibc}/lib/ld*.so.? $out/lib
@ -62,11 +47,10 @@ let
cp -pv ${pkgs.gcc.gcc}/lib*/libgcc_s.so.* $out/lib cp -pv ${pkgs.gcc.gcc}/lib*/libgcc_s.so.* $out/lib
# Copy BusyBox. # Copy BusyBox.
cp -rvd ${busybox}/{bin,sbin} $out/ cp -pvd ${pkgs.busybox}/bin/* ${pkgs.busybox}/sbin/* $out/bin/
chmod -R u+w $out
# Copy some utillinux stuff. # Copy some utillinux stuff.
cp -v ${pkgs.utillinux}/sbin/blkid $out/bin cp -vf ${pkgs.utillinux}/sbin/blkid $out/bin
cp -pdv ${pkgs.utillinux}/lib/libblkid*.so.* $out/lib cp -pdv ${pkgs.utillinux}/lib/libblkid*.so.* $out/lib
cp -pdv ${pkgs.utillinux}/lib/libuuid*.so.* $out/lib cp -pdv ${pkgs.utillinux}/lib/libuuid*.so.* $out/lib
@ -89,12 +73,7 @@ let
# Copy modprobe. # Copy modprobe.
cp -v ${pkgs.kmod}/bin/kmod $out/bin/ cp -v ${pkgs.kmod}/bin/kmod $out/bin/
ln -s kmod $out/bin/modprobe ln -sf kmod $out/bin/modprobe
# Maybe copy cifs utils
${optionalString needsCifsUtils ''
cp -v ${pkgs.cifs_utils}/sbin/mount.cifs $out/bin
''}
${config.boot.initrd.extraUtilsCommands} ${config.boot.initrd.extraUtilsCommands}
@ -313,6 +292,13 @@ in
example = "xz"; example = "xz";
}; };
boot.initrd.supportedFilesystems = mkOption {
default = [ ];
example = [ "btrfs" ];
type = types.listOf types.string;
description = "Names of supported filesystem types in the initial ramdisk.";
};
fileSystems = mkOption { fileSystems = mkOption {
options.neededForBoot = mkOption { options.neededForBoot = mkOption {
default = false; default = false;
@ -347,5 +333,7 @@ in
# Prevent systemd from waiting for the /dev/root symlink. # Prevent systemd from waiting for the /dev/root symlink.
systemd.units."dev-root.device".text = ""; systemd.units."dev-root.device".text = "";
boot.initrd.supportedFilesystems = map (fs: fs.fsType) fileSystems;
}; };
} }

View File

@ -29,7 +29,7 @@ setPath "@path@"
# Normally, stage 1 mounts the root filesystem read/writable. # Normally, stage 1 mounts the root filesystem read/writable.
# However, in some environments, stage 2 is executed directly, and the # However, in some environments, stage 2 is executed directly, and the
# root is read-only. So make it writable here. # root is read-only. So make it writable here.
mount -n -o remount,rw / mount -n -o remount,rw none /
# Likewise, stage 1 mounts /proc, /dev and /sys, so if we don't have a # Likewise, stage 1 mounts /proc, /dev and /sys, so if we don't have a
@ -98,12 +98,6 @@ mkdir -m 0755 -p /etc/nixos
rm -rf /var/run /var/lock rm -rf /var/run /var/lock
rm -f /etc/{group,passwd,shadow}.lock rm -f /etc/{group,passwd,shadow}.lock
if test -n "@cleanTmpDir@"; then
echo -n "cleaning \`/tmp'..."
find /tmp -maxdepth 1 -mindepth 1 -print0 | xargs -0r rm -rf --one-file-system
echo " done"
fi
# Also get rid of temporary GC roots. # Also get rid of temporary GC roots.
rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots rm -rf /nix/var/nix/gcroots/tmp /nix/var/nix/temproots

View File

@ -17,7 +17,7 @@ let
src = ./stage-2-init.sh; src = ./stage-2-init.sh;
shellDebug = "${pkgs.bashInteractive}/bin/bash"; shellDebug = "${pkgs.bashInteractive}/bin/bash";
isExecutable = true; isExecutable = true;
inherit (config.boot) devShmSize runSize cleanTmpDir; inherit (config.boot) devShmSize runSize;
inherit (config.nix) readOnlyStore; inherit (config.nix) readOnlyStore;
inherit (config.networking) useHostResolvConf; inherit (config.networking) useHostResolvConf;
ttyGid = config.ids.gids.tty; ttyGid = config.ids.gids.tty;
@ -26,8 +26,7 @@ let
pkgs.utillinux pkgs.utillinux
pkgs.sysvtools pkgs.sysvtools
pkgs.openresolv pkgs.openresolv
] ++ (optional config.boot.cleanTmpDir pkgs.findutils) ] ++ optional config.nix.readOnlyStore readonlyMountpoint;
++ optional config.nix.readOnlyStore readonlyMountpoint;
postBootCommands = pkgs.writeText "local-cmds" postBootCommands = pkgs.writeText "local-cmds"
'' ''
${config.boot.postBootCommands} ${config.boot.postBootCommands}
@ -81,15 +80,6 @@ in
''; '';
}; };
# FIXME: should replace this with something that uses systemd-tmpfiles.
cleanTmpDir = mkOption {
type = types.bool;
default = false;
description = ''
Whether to delete all files in <filename>/tmp</filename> during boot.
'';
};
}; };
}; };

View File

@ -162,10 +162,7 @@ let
"systemd-sysctl.service" "systemd-sysctl.service"
] ]
++ optionals cfg.enableEmergencyMode [ ++ cfg.additionalUpstreamSystemUnits;
"emergency.target"
"emergency.service"
];
upstreamSystemWants = upstreamSystemWants =
[ #"basic.target.wants" [ #"basic.target.wants"
@ -317,7 +314,9 @@ let
'' ''
[Service] [Service]
${let env = cfg.globalEnvironment // def.environment; ${let env = cfg.globalEnvironment // def.environment;
in concatMapStrings (n: "Environment=\"${n}=${getAttr n env}\"\n") (attrNames env)} in concatMapStrings (n:
let s = "Environment=\"${n}=${getAttr n env}\"\n";
in if stringLength s >= 2048 then throw "The value of the environment variable ${n} in systemd service ${name}.service is too long." else s) (attrNames env)}
${if def.reloadIfChanged then '' ${if def.reloadIfChanged then ''
X-ReloadIfChanged=true X-ReloadIfChanged=true
'' else if !def.restartIfChanged then '' '' else if !def.restartIfChanged then ''
@ -635,19 +634,6 @@ in
''; '';
}; };
systemd.enableEmergencyMode = mkOption {
default = true;
type = types.bool;
description = ''
Whether to enable emergency mode, which is an
<command>sulogin</command> shell started on the console if
mounting a filesystem fails. Since some machines (like EC2
instances) have no console of any kind, emergency mode doesn't
make sense, and it's better to continue with the boot insofar
as possible.
'';
};
systemd.tmpfiles.rules = mkOption { systemd.tmpfiles.rules = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = []; default = [];
@ -690,6 +676,15 @@ in
description = "Definition of systemd per-user socket units."; description = "Definition of systemd per-user socket units.";
}; };
systemd.additionalUpstreamSystemUnits = mkOption {
default = [ ];
type = types.listOf types.str;
example = [ "debug-shell.service" "systemd-quotacheck.service" ];
description = ''
Additional units shipped with systemd that shall be enabled.
'';
};
}; };

View File

@ -0,0 +1,39 @@
{ config, lib, ... }:
with lib;
{
###### interface
options = {
boot.cleanTmpDir = mkOption {
type = types.bool;
default = false;
description = ''
Whether to delete all files in <filename>/tmp</filename> during boot.
'';
};
boot.tmpOnTmpfs = mkOption {
type = types.bool;
default = false;
description = ''
Whether to mount a tmpfs on <filename>/tmp</filename> during boot.
'';
};
};
###### implementation
config = {
systemd.additionalUpstreamSystemUnits = optional config.boot.tmpOnTmpfs "tmp.mount";
systemd.tmpfiles.rules = optional config.boot.cleanTmpDir "D! /tmp 1777 root root";
};
}

View File

@ -132,7 +132,7 @@ in
'' ''
# Set up the statically computed bits of /etc. # Set up the statically computed bits of /etc.
echo "setting up /etc..." echo "setting up /etc..."
${pkgs.perl}/bin/perl ${./setup-etc.pl} ${etc}/etc ${pkgs.perl}/bin/perl -I${pkgs.perlPackages.FileSlurp}/lib/perl5/site_perl ${./setup-etc.pl} ${etc}/etc
''; '';
}; };

View File

@ -3,6 +3,7 @@ use File::Find;
use File::Copy; use File::Copy;
use File::Path; use File::Path;
use File::Basename; use File::Basename;
use File::Slurp;
my $etc = $ARGV[0] or die; my $etc = $ARGV[0] or die;
my $static = "/etc/static"; my $static = "/etc/static";
@ -46,35 +47,55 @@ sub cleanup {
find(\&cleanup, "/etc"); find(\&cleanup, "/etc");
# Use /etc/.clean to keep track of copied files.
my @oldCopied = read_file("/etc/.clean", chomp => 1, err_mode => 'quiet');
open CLEAN, ">>/etc/.clean";
# For every file in the etc tree, create a corresponding symlink in # For every file in the etc tree, create a corresponding symlink in
# /etc to /etc/static. The indirection through /etc/static is to make # /etc to /etc/static. The indirection through /etc/static is to make
# switching to a new configuration somewhat more atomic. # switching to a new configuration somewhat more atomic.
my %created;
my @copied;
sub link { sub link {
my $fn = substr $File::Find::name, length($etc) + 1 or next; my $fn = substr $File::Find::name, length($etc) + 1 or next;
my $target = "/etc/$fn"; my $target = "/etc/$fn";
File::Path::make_path(dirname $target); File::Path::make_path(dirname $target);
$created{$fn} = 1;
if (-e "$_.mode") { if (-e "$_.mode") {
open MODE, "<$_.mode"; my $mode = read_file("$_.mode"); chomp $mode;
my $mode = <MODE>; chomp $mode;
close MODE;
if ($mode eq "direct-symlink") { if ($mode eq "direct-symlink") {
atomicSymlink readlink("$static/$fn"), $target or warn; atomicSymlink readlink("$static/$fn"), $target or warn;
} else { } else {
open UID, "<$_.uid"; my $uid = read_file("$_.uid"); chomp $uid;
my $uid = <UID>; chomp $uid; my $gid = read_file("$_.gid"); chomp $gid;
close UID;
open GID, "<$_.gid";
my $gid = <GID>; chomp $gid;
close GID;
copy "$static/$fn", "$target.tmp" or warn; copy "$static/$fn", "$target.tmp" or warn;
chown int($uid), int($gid), "$target.tmp" or warn; chown int($uid), int($gid), "$target.tmp" or warn;
chmod oct($mode), "$target.tmp" or warn; chmod oct($mode), "$target.tmp" or warn;
rename "$target.tmp", $target or warn; rename "$target.tmp", $target or warn;
} }
push @copied, $fn;
print CLEAN "$fn\n";
} elsif (-l "$_") { } elsif (-l "$_") {
atomicSymlink "$static/$fn", $target or warn; atomicSymlink "$static/$fn", $target or warn;
} }
} }
find(\&link, $etc); find(\&link, $etc);
# Delete files that were copied in a previous version but not in the
# current.
foreach my $fn (@oldCopied) {
if (!defined $created{$fn}) {
$fn = "/etc/$fn";
print STDERR "removing obsolete file $fn...\n";
unlink "$fn";
}
}
# Rewrite /etc/.clean.
close CLEAN;
write_file("/etc/.clean", map { "$_\n" } @copied);

View File

@ -9,7 +9,7 @@ let
prioOption = prio: optionalString (prio !=null) " pri=${toString prio}"; prioOption = prio: optionalString (prio !=null) " pri=${toString prio}";
fileSystemOpts = { name, ... }: { fileSystemOpts = { name, config, ... }: {
options = { options = {
@ -68,6 +68,7 @@ let
config = { config = {
mountPoint = mkDefault name; mountPoint = mkDefault name;
device = mkIf (config.fsType == "tmpfs") (mkDefault config.fsType);
}; };
}; };
@ -124,13 +125,6 @@ in
description = "Names of supported filesystem types."; description = "Names of supported filesystem types.";
}; };
boot.initrd.supportedFilesystems = mkOption {
default = [ ];
example = [ "btrfs" ];
type = types.listOf types.string;
description = "Names of supported filesystem types in the initial ramdisk.";
};
}; };
@ -140,15 +134,11 @@ in
boot.supportedFilesystems = map (fs: fs.fsType) fileSystems; boot.supportedFilesystems = map (fs: fs.fsType) fileSystems;
boot.initrd.supportedFilesystems =
map (fs: fs.fsType)
(filter (fs: fs.mountPoint == "/" || fs.neededForBoot) fileSystems);
# Add the mount helpers to the system path so that `mount' can find them. # Add the mount helpers to the system path so that `mount' can find them.
system.fsPackages = [ pkgs.dosfstools ]; system.fsPackages = [ pkgs.dosfstools ];
environment.systemPackages = environment.systemPackages =
[ pkgs.ntfs3g pkgs.cifs_utils pkgs.fuse ] [ pkgs.ntfs3g pkgs.fuse ]
++ config.system.fsPackages; ++ config.system.fsPackages;
environment.etc.fstab.text = environment.etc.fstab.text =
@ -157,7 +147,9 @@ in
# Filesystems. # Filesystems.
${flip concatMapStrings fileSystems (fs: ${flip concatMapStrings fileSystems (fs:
(if fs.device != null then fs.device else "/dev/disk/by-label/${fs.label}") (if fs.device != null then fs.device
else if fs.label != null then "/dev/disk/by-label/${fs.label}"
else throw "No device specified for mount point ${fs.mountPoint}.")
+ " " + fs.mountPoint + " " + fs.mountPoint
+ " " + fs.fsType + " " + fs.fsType
+ " " + fs.options + " " + fs.options

View File

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
with lib;
let
inInitrd = any (fs: fs == "cifs") config.boot.initrd.supportedFilesystems;
in
{
config = {
system.fsPackages = [ pkgs.cifs_utils ];
boot.initrd.availableKernelModules = mkIf inInitrd
[ "cifs" "nls_utf8" "hmac" "md4" "ecb" "des_generic" "sha256" ];
boot.initrd.extraUtilsCommands = mkIf inInitrd
''
cp -v ${pkgs.cifs_utils}/sbin/mount.cifs $out/bin
'';
};
}

View File

@ -2,14 +2,21 @@
{ {
config = lib.mkMerge [ config = lib.mkMerge [
(lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) { (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.initrd.supportedFilesystems) {
boot.initrd.kernelModules = [ "fuse" ]; boot.initrd.kernelModules = [ "fuse" ];
boot.initrd.extraUtilsCommands = '' boot.initrd.extraUtilsCommands = ''
cp -v ${pkgs.fuse}/lib/libfuse* $out/lib cp -v ${pkgs.fuse}/lib/libfuse* $out/lib
cp -v ${pkgs.fuse}/sbin/mount.fuse $out/bin
cp -v ${pkgs.unionfs-fuse}/bin/unionfs $out/bin cp -v ${pkgs.unionfs-fuse}/bin/unionfs $out/bin
substitute ${pkgs.unionfs-fuse}/sbin/mount.unionfs-fuse $out/bin/mount.unionfs-fuse \
--replace '${pkgs.bash}/bin/bash' /bin/sh \
--replace '${pkgs.fuse}/sbin' /bin \
--replace '${pkgs.unionfs-fuse}/bin' /bin
chmod +x $out/bin/mount.unionfs-fuse
''; '';
boot.initrd.postDeviceCommands = '' boot.initrd.postDeviceCommands = ''
# Hacky!!! fuse hard-codes the path to mount # Hacky!!! fuse hard-codes the path to mount
mkdir -p /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.utillinux.name}/bin mkdir -p /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.utillinux.name}/bin
@ -17,8 +24,10 @@
ln -s $(which umount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.utillinux.name}/bin ln -s $(which umount) /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${pkgs.utillinux.name}/bin
''; '';
}) })
(lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) { (lib.mkIf (lib.any (fs: fs == "unionfs-fuse") config.boot.supportedFilesystems) {
system.fsPackages = [ pkgs.unionfs-fuse ]; system.fsPackages = [ pkgs.unionfs-fuse ];
}) })
]; ];
} }

View File

@ -172,7 +172,7 @@ in
boot.initrd.extraUtilsCommands = boot.initrd.extraUtilsCommands =
'' ''
# We need swapon in the initrd. # We need swapon in the initrd.
cp ${pkgs.utillinux}/sbin/swapon $out/bin cp --remove-destination ${pkgs.utillinux}/sbin/swapon $out/bin
''; '';
# Don't put old configurations in the GRUB menu. The user has no # Don't put old configurations in the GRUB menu. The user has no

View File

@ -0,0 +1,109 @@
# Systemd services for docker.
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.virtualisation.docker;
in
{
###### interface
options.virtualisation.docker = {
enable =
mkOption {
type = types.bool;
default = false;
description =
''
This option enables docker, a daemon that manages
linux containers. Users in the "docker" group can interact with
the daemon (e.g. to start or stop containers) using the
<command>docker</command> command line tool.
'';
};
socketActivation =
mkOption {
type = types.bool;
default = false;
description =
''
This option enables docker with socket activation. I.e. docker will
start when first called by client.
Note: This is false by default because systemd lower than 214 that
nixos uses so far, doesn't support SocketGroup option, so socket
created by docker has root group now. This will likely be changed
in future. So set this option explicitly to false if you wish.
'';
};
extraOptions =
mkOption {
type = types.str;
default = "";
description =
''
The extra command-line options to pass to
<command>docker</command> daemon.
'';
};
};
###### implementation
config = mkIf cfg.enable (mkMerge [
{ environment.systemPackages = [ pkgs.docker ];
}
(mkIf cfg.socketActivation {
systemd.services.docker = {
description = "Docker Application Container Engine";
after = [ "network.target" "docker.socket" ];
requires = [ "docker.socket" ];
serviceConfig = {
ExecStart = "${pkgs.docker}/bin/docker --daemon=true --host=fd:// --group=docker ${cfg.extraOptions}";
# I'm not sure if that limits aren't too high, but it's what
# goes in config bundled with docker itself
LimitNOFILE = 1048576;
LimitNPROC = 1048576;
};
};
systemd.sockets.docker = {
description = "Docker Socket for the API";
wantedBy = [ "sockets.target" ];
socketConfig = {
ListenStream = "/var/run/docker.sock";
SocketMode = "0660";
SocketUser = "root";
SocketGroup = "docker";
};
};
})
(mkIf (!cfg.socketActivation) {
systemd.services.docker = {
description = "Docker Application Container Engine";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
ExecStart = "${pkgs.docker}/bin/docker --daemon=true --group=docker ${cfg.extraOptions}";
# I'm not sure if that limits aren't too high, but it's what
# goes in config bundled with docker itself
LimitNOFILE = 1048576;
LimitNPROC = 1048576;
};
# Presumably some containers are running we don't want to interrupt
restartIfChanged = false;
};
})
]);
}

View File

@ -121,19 +121,6 @@ in
networking.usePredictableInterfaceNames = false; networking.usePredictableInterfaceNames = false;
systemd.services.wait-metadata-online = {
description = "Wait for GCE metadata server to become reachable";
wantedBy = [ "network-online.target" ];
before = [ "network-online.target" ];
path = [ pkgs.netcat ];
script = ''
# wait for the metadata server to become available for up to 60 seconds
for counter in {1..30}; do sleep 2 && nc -vzw 2 metadata 80 && break; done
'';
serviceConfig.Type = "oneshot";
serviceConfig.RemainAfterExit = true;
};
systemd.services.fetch-ssh-keys = systemd.services.fetch-ssh-keys =
{ description = "Fetch host keys and authorized_keys for root user"; { description = "Fetch host keys and authorized_keys for root user";
@ -142,14 +129,15 @@ in
after = [ "network-online.target" ]; after = [ "network-online.target" ];
wants = [ "network-online.target" ]; wants = [ "network-online.target" ];
path = [ pkgs.curl ]; path = [ pkgs.wget ];
script = script =
'' ''
wget="wget --retry-connrefused -t 6 --waitretry=10"
# Don't download the SSH key if it has already been downloaded # Don't download the SSH key if it has already been downloaded
if ! [ -e /root/.ssh/authorized_keys ]; then if ! [ -e /root/.ssh/authorized_keys ]; then
echo "obtaining SSH key..." echo "obtaining SSH key..."
mkdir -p /root/.ssh mkdir -p /root/.ssh
curl -o /root/authorized-keys-metadata http://metadata/0.1/meta-data/authorized-keys $wget -O /root/authorized-keys-metadata http://metadata/0.1/meta-data/authorized-keys
if [ $? -eq 0 -a -e /root/authorized-keys-metadata ]; then if [ $? -eq 0 -a -e /root/authorized-keys-metadata ]; then
cat /root/authorized-keys-metadata | cut -d: -f2- > /root/key.pub cat /root/authorized-keys-metadata | cut -d: -f2- > /root/key.pub
if ! grep -q -f /root/key.pub /root/.ssh/authorized_keys; then if ! grep -q -f /root/key.pub /root/.ssh/authorized_keys; then
@ -162,7 +150,7 @@ in
fi fi
echo "obtaining SSH private host key..." echo "obtaining SSH private host key..."
curl -o /root/ssh_host_ecdsa_key --retry-max-time 60 http://metadata/0.1/meta-data/attributes/ssh_host_ecdsa_key $wget -O /root/ssh_host_ecdsa_key http://metadata/0.1/meta-data/attributes/ssh_host_ecdsa_key
if [ $? -eq 0 -a -e /root/ssh_host_ecdsa_key ]; then if [ $? -eq 0 -a -e /root/ssh_host_ecdsa_key ]; then
mv -f /root/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key mv -f /root/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key
echo "downloaded ssh_host_ecdsa_key" echo "downloaded ssh_host_ecdsa_key"
@ -170,7 +158,7 @@ in
fi fi
echo "obtaining SSH public host key..." echo "obtaining SSH public host key..."
curl -o /root/ssh_host_ecdsa_key.pub --retry-max-time 60 http://metadata/0.1/meta-data/attributes/ssh_host_ecdsa_key_pub $wget -O /root/ssh_host_ecdsa_key.pub http://metadata/0.1/meta-data/attributes/ssh_host_ecdsa_key_pub
if [ $? -eq 0 -a -e /root/ssh_host_ecdsa_key.pub ]; then if [ $? -eq 0 -a -e /root/ssh_host_ecdsa_key.pub ]; then
mv -f /root/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub mv -f /root/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
echo "downloaded ssh_host_ecdsa_key.pub" echo "downloaded ssh_host_ecdsa_key.pub"
@ -179,7 +167,7 @@ in
''; '';
serviceConfig.Type = "oneshot"; serviceConfig.Type = "oneshot";
serviceConfig.RemainAfterExit = true; serviceConfig.RemainAfterExit = true;
serviceConfig.StandardError = "journal+console";
serviceConfig.StandardOutput = "journal+console";
}; };
} }

View File

@ -275,12 +275,10 @@ in
boot.loader.grub.device = mkVMOverride "/dev/vda"; boot.loader.grub.device = mkVMOverride "/dev/vda";
boot.initrd.supportedFilesystems = optional cfg.writableStore "unionfs-fuse";
boot.initrd.extraUtilsCommands = boot.initrd.extraUtilsCommands =
'' ''
# We need mke2fs in the initrd. # We need mke2fs in the initrd.
cp ${pkgs.e2fsprogs}/sbin/mke2fs $out/bin cp -f ${pkgs.e2fsprogs}/sbin/mke2fs $out/bin
''; '';
boot.initrd.postDeviceCommands = boot.initrd.postDeviceCommands =
@ -303,20 +301,6 @@ in
chmod 1777 $targetRoot/tmp chmod 1777 $targetRoot/tmp
mkdir -p $targetRoot/boot mkdir -p $targetRoot/boot
${optionalString cfg.writableStore ''
mkdir -p /unionfs-chroot/ro-store
mount --rbind $targetRoot/nix/store /unionfs-chroot/ro-store
mkdir /unionfs-chroot/rw-store
${if cfg.writableStoreUseTmpfs then ''
mount -t tmpfs -o "mode=755" none /unionfs-chroot/rw-store
'' else ''
mkdir $targetRoot/.nix-rw-store
mount --bind $targetRoot/.nix-rw-store /unionfs-chroot/rw-store
''}
unionfs -o allow_other,cow,nonempty,chroot=/unionfs-chroot,max_files=32768,hide_meta_files /rw-store=RW:/ro-store=RO $targetRoot/nix/store
''}
''; '';
# After booting, register the closure of the paths in # After booting, register the closure of the paths in
@ -343,12 +327,13 @@ in
# configuration, where the regular value for the `fileSystems' # configuration, where the regular value for the `fileSystems'
# attribute should be disregarded for the purpose of building a VM # attribute should be disregarded for the purpose of building a VM
# test image (since those filesystems don't exist in the VM). # test image (since those filesystems don't exist in the VM).
fileSystems = mkVMOverride fileSystems = mkVMOverride (
{ "/".device = "/dev/vda"; { "/".device = "/dev/vda";
"/nix/store" = ${if cfg.writableStore then "/nix/.ro-store" else "/nix/store"} =
{ device = "store"; { device = "store";
fsType = "9p"; fsType = "9p";
options = "trans=virtio,version=9p2000.L,msize=1048576,cache=loose"; options = "trans=virtio,version=9p2000.L,msize=1048576,cache=loose";
neededForBoot = true;
}; };
"/tmp/xchg" = "/tmp/xchg" =
{ device = "xchg"; { device = "xchg";
@ -362,6 +347,18 @@ in
options = "trans=virtio,version=9p2000.L,msize=1048576"; options = "trans=virtio,version=9p2000.L,msize=1048576";
neededForBoot = true; neededForBoot = true;
}; };
} // optionalAttrs cfg.writableStore
{ "/nix/store" =
{ fsType = "unionfs-fuse";
device = "unionfs";
options = "allow_other,cow,nonempty,chroot=/mnt-root,max_files=32768,hide_meta_files,dirs=/nix/.rw-store=rw:/nix/.ro-store=ro";
};
} // optionalAttrs (cfg.writableStore && cfg.writableStoreUseTmpfs)
{ "/nix/.rw-store" =
{ fsType = "tmpfs";
options = "mode=0755";
neededForBoot = true;
};
} // optionalAttrs cfg.useBootLoader } // optionalAttrs cfg.useBootLoader
{ "/boot" = { "/boot" =
{ device = "/dev/disk/by-label/boot"; { device = "/dev/disk/by-label/boot";
@ -369,7 +366,7 @@ in
options = "ro"; options = "ro";
noCheck = true; # fsck fails on a r/o filesystem noCheck = true; # fsck fails on a r/o filesystem
}; };
}; });
swapDevices = mkVMOverride [ ]; swapDevices = mkVMOverride [ ];
boot.initrd.luks.devices = mkVMOverride []; boot.initrd.luks.devices = mkVMOverride [];

View File

@ -35,7 +35,7 @@ import ./make-test.nix {
# multi-user.target, we should now be able to access it. # multi-user.target, we should now be able to access it.
my $ip = $machine->succeed("nixos-container show-ip webserver"); my $ip = $machine->succeed("nixos-container show-ip webserver");
chomp $ip; chomp $ip;
$machine->succeed("ping -c1 $ip"); #$machine->succeed("ping -c1 $ip"); # FIXME
$machine->succeed("curl --fail http://$ip/ > /dev/null"); $machine->succeed("curl --fail http://$ip/ > /dev/null");
# Stop the container. # Stop the container.

View File

@ -12,8 +12,7 @@ import ./make-test.nix {
services.nixosManual.enable = mkOverride 0 true; services.nixosManual.enable = mkOverride 0 true;
systemd.tmpfiles.rules = [ "d /tmp 1777 root root 10d" ]; systemd.tmpfiles.rules = [ "d /tmp 1777 root root 10d" ];
fileSystems = mkVMOverride { "/tmp2" = fileSystems = mkVMOverride { "/tmp2" =
{ device = "none"; { fsType = "tmpfs";
fsType = "tmpfs";
options = "mode=1777,noauto"; options = "mode=1777,noauto";
}; };
}; };

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, alsaLib, dbus, jackaudio, pkgconfig, python }: { stdenv, fetchurl, alsaLib, dbus, jack2, pkgconfig, python }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "a2jmidid-${version}"; name = "a2jmidid-${version}";
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "0pzm0qk5ilqhwz74pydg1jwrds27vm47185dakdrxidb5bv3b5ia"; sha256 = "0pzm0qk5ilqhwz74pydg1jwrds27vm47185dakdrxidb5bv3b5ia";
}; };
buildInputs = [ alsaLib dbus jackaudio pkgconfig python ]; buildInputs = [ alsaLib dbus jack2 pkgconfig python ];
configurePhase = "python waf configure --prefix=$out"; configurePhase = "python waf configure --prefix=$out";

View File

@ -61,7 +61,7 @@ in
meta = { meta = {
homepage = "http://lly.org/~rcw/abcde/page/"; homepage = "http://lly.org/~rcw/abcde/page/";
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
description = "Command-line audio CD ripper"; description = "Command-line audio CD ripper";
longDescription = '' longDescription = ''

View File

@ -1,5 +1,5 @@
{ stdenv, fetchgit, alsaLib, aubio, boost, cairomm, curl, fftw { stdenv, fetchgit, alsaLib, aubio, boost, cairomm, curl, fftw
, fftwSinglePrec, flac, glibc, glibmm, gtk, gtkmm, jackaudio , fftwSinglePrec, flac, glibc, glibmm, gtk, gtkmm, jack2
, libgnomecanvas, libgnomecanvasmm, liblo, libmad, libogg, librdf , libgnomecanvas, libgnomecanvasmm, liblo, libmad, libogg, librdf
, librdf_raptor, librdf_rasqal, libsamplerate, libsigcxx, libsndfile , librdf_raptor, librdf_rasqal, libsamplerate, libsigcxx, libsndfile
, libusb, libuuid, libxml2, libxslt, lilv, lv2, makeWrapper, pango , libusb, libuuid, libxml2, libxslt, lilv, lv2, makeWrapper, pango
@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
buildInputs = buildInputs =
[ alsaLib aubio boost cairomm curl fftw fftwSinglePrec flac glibc [ alsaLib aubio boost cairomm curl fftw fftwSinglePrec flac glibc
glibmm gtk gtkmm jackaudio libgnomecanvas libgnomecanvasmm liblo glibmm gtk gtkmm jack2 libgnomecanvas libgnomecanvasmm liblo
libmad libogg librdf librdf_raptor librdf_rasqal libsamplerate libmad libogg librdf librdf_raptor librdf_rasqal libsamplerate
libsigcxx libsndfile libusb libuuid libxml2 libxslt lilv lv2 libsigcxx libsndfile libusb libuuid libxml2 libxslt lilv lv2
makeWrapper pango perl pkgconfig python serd sord sratom suil makeWrapper pango perl pkgconfig python serd sord sratom suil
@ -47,6 +47,21 @@ stdenv.mkDerivation rec {
mkdir -pv $out/gtk2/engines mkdir -pv $out/gtk2/engines
cp build/libs/clearlooks-newer/libclearlooks.so $out/gtk2/engines/ cp build/libs/clearlooks-newer/libclearlooks.so $out/gtk2/engines/
wrapProgram $out/bin/ardour3 --prefix GTK_PATH : $out/gtk2 wrapProgram $out/bin/ardour3 --prefix GTK_PATH : $out/gtk2
# Install desktop file
mkdir -p "$out/share/applications"
cat > "$out/share/applications/ardour.desktop" << EOF
[Desktop Entry]
Name=Ardour 3
GenericName=Digital Audio Workstation
Comment=Multitrack harddisk recorder
Exec=$out/bin/ardour3
Icon=$out/share/ardour3/icons/ardour_icon_256px.png
Terminal=false
Type=Application
X-MultipleArgs=false
Categories=GTK;Audio;AudioVideoEditing;AudioVideo;Video;
EOF
''; '';
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Sound editor with graphical UI"; description = "Sound editor with graphical UI";
homepage = http://audacity.sourceforge.net; homepage = http://audacity.sourceforge.net;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = with stdenv.lib.platforms; linux; platforms = with stdenv.lib.platforms; linux;
maintainers = with stdenv.lib.maintainers; [ the-kenny ]; maintainers = with stdenv.lib.maintainers; [ the-kenny ];
}; };

View File

@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
the command line or a script. the command line or a script.
''; '';
homepage = http://www.jpj.net/~trevor/aumix.html; homepage = http://www.jpj.net/~trevor/aumix.html;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ stdenv.lib.maintainers.ludo ]; maintainers = [ stdenv.lib.maintainers.ludo ];
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, alsaLib, jackaudio, pkgconfig, pulseaudio, xlibs }: { stdenv, fetchurl, alsaLib, jack2, pkgconfig, pulseaudio, xlibs }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "bristol-${version}"; name = "bristol-${version}";
@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
alsaLib jackaudio pkgconfig pulseaudio xlibs.libX11 xlibs.libXext alsaLib jack2 pkgconfig pulseaudio xlibs.libX11 xlibs.libXext
xlibs.xproto xlibs.xproto
]; ];

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, cairo, expat, fftwSinglePrec, fluidsynth, glib { stdenv, fetchurl, cairo, expat, fftwSinglePrec, fluidsynth, glib
, gtk, jackaudio, ladspaH , libglade, lv2, pkgconfig }: , gtk, jack2, ladspaH , libglade, lv2, pkgconfig }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "calf-${version}"; name = "calf-${version}";
@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
cairo expat fftwSinglePrec fluidsynth glib gtk jackaudio ladspaH cairo expat fftwSinglePrec fluidsynth glib gtk jack2 ladspaH
libglade lv2 pkgconfig libglade lv2 pkgconfig
]; ];

View File

@ -19,7 +19,7 @@ in
meta = { meta = {
homepage = http://lly.org/~rcw/cd-discid/; homepage = http://lly.org/~rcw/cd-discid/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
description = "cd-discid, a command-line utility to retrieve a disc's CDDB ID"; description = "cd-discid, a command-line utility to retrieve a disc's CDDB ID";
longDescription = '' longDescription = ''

View File

@ -1,4 +1,4 @@
{ stdenv, fetchgit, alsaLib, fftwSinglePrec, freetype, jackaudio { stdenv, fetchgit, alsaLib, fftwSinglePrec, freetype, jack2
, libxslt, lv2, pkgconfig, premake3, xlibs }: , libxslt, lv2, pkgconfig, premake3, xlibs }:
let let
@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
''; '';
buildInputs = [ buildInputs = [
alsaLib fftwSinglePrec freetype jackaudio pkgconfig premake3 alsaLib fftwSinglePrec freetype jack2 pkgconfig premake3
xlibs.libX11 xlibs.libXcomposite xlibs.libXcursor xlibs.libXext xlibs.libX11 xlibs.libXcomposite xlibs.libXcursor xlibs.libXext
xlibs.libXinerama xlibs.libXrender xlibs.libXinerama xlibs.libXrender
]; ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, jackaudio, libsndfile, lv2, qt4 }: { stdenv, fetchurl, jack2, libsndfile, lv2, qt4 }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "drumkv1-${version}"; name = "drumkv1-${version}";
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "18rvfgblynlmklk25azmppibn1bdjid97hipa323gnzmxgq0rfjq"; sha256 = "18rvfgblynlmklk25azmppibn1bdjid97hipa323gnzmxgq0rfjq";
}; };
buildInputs = [ jackaudio libsndfile lv2 qt4 ]; buildInputs = [ jack2 libsndfile lv2 qt4 ];
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "An old-school drum-kit sampler synthesizer with stereo fx"; description = "An old-school drum-kit sampler synthesizer with stereo fx";

View File

@ -1,10 +1,11 @@
{stdenv, fetchurl, unzip, portaudio }: { stdenv, fetchurl, unzip, portaudio }:
stdenv.mkDerivation rec {
name = "espeak-1.48.04";
stdenv.mkDerivation {
name = "espeak-1.46.02";
src = fetchurl { src = fetchurl {
url = mirror://sourceforge/espeak/espeak-1.46.02-source.zip; url = "mirror://sourceforge/espeak/${name}-source.zip";
sha256 = "1fjlv5fm0gzvr5wzy1dp4nspw04k0bqv3jymha2p2qfjbfifp2zg"; sha256 = "0n86gwh9pw0jqqpdz7mxggllfr8k0r7pc67ayy7w5z6z79kig6mz";
}; };
buildInputs = [ unzip portaudio ]; buildInputs = [ unzip portaudio ];
@ -21,9 +22,10 @@ stdenv.mkDerivation {
makeFlags="PREFIX=$out DATADIR=$out/share/espeak-data" makeFlags="PREFIX=$out DATADIR=$out/share/espeak-data"
''; '';
meta = { meta = with stdenv.lib; {
description = "Compact open source software speech synthesizer"; description = "Compact open source software speech synthesizer";
homepage = http://espeak.sourceforge.net/; homepage = http://espeak.sourceforge.net/;
license = "GPLv3+"; license = licenses.gpl3Plus;
platforms = platforms.linux;
}; };
} }

View File

@ -1,31 +1,57 @@
{stdenv, fetchurl, unzip, portaudio, wxGTK}: { stdenv, fetchurl, pkgconfig, unzip, portaudio, wxGTK, sox }:
stdenv.mkDerivation rec {
name = "espeakedit-1.48.03";
stdenv.mkDerivation {
name = "espeakedit-1.46.02";
src = fetchurl { src = fetchurl {
url = mirror://sourceforge/espeak/espeakedit-1.46.02.zip; url = "mirror://sourceforge/espeak/${name}.zip";
sha256 = "1cc5r89sn8zz7b8wj4grx9xb7aqyi0ybj0li9hpy7hd67r56kqkl"; sha256 = "0x8s7vpb7rw5x37yjzy1f98m4f2csdg89libb74fm36gn8ly0hli";
}; };
buildInputs = [ unzip portaudio wxGTK ]; buildInputs = [ pkgconfig unzip portaudio wxGTK ];
patchPhase = if portaudio.api_version == 19 then '' # TODO:
# Uhm, seems like espeakedit still wants espeak-data/ in $HOME, even thought
# it should use $espeak/share/espeak-data. Have to contact upstream to get
# this fixed.
#
# Workaround:
# cp -r $(nix-build -A espeak)/share/espeak-data ~
# chmod +w ~/espeak-data
patches = [
./espeakedit-fix-makefile.patch
./espeakedit-configurable-sox-path.patch
./espeakedit-configurable-path-espeak-data.patch
];
postPatch = ''
# Disable -Wall flag because it's noisy
sed -i "s/-Wall//g" src/Makefile
# Fixup paths (file names from above espeak-configurable* patches)
for file in src/compiledata.cpp src/readclause.cpp src/speech.h; do
sed -e "s|@sox@|${sox}/bin/sox|" \
-e "s|@prefix@|$out|" \
-i "$file"
done
'' + stdenv.lib.optionalString (portaudio.api_version == 19) ''
cp src/portaudio19.h src/portaudio.h cp src/portaudio19.h src/portaudio.h
'' else ""; '';
buildPhase = '' buildPhase = ''
cd src make -C src
gcc -o espeakedit *.cpp `wx-config --cxxflags --libs`
''; '';
installPhase = '' installPhase = ''
ensureDir $out/bin mkdir -p "$out/bin"
cp espeakedit $out/bin cp src/espeakedit "$out/bin"
''; '';
meta = { meta = with stdenv.lib; {
description = "Phoneme editor for espeak"; description = "Phoneme editor for espeak";
homepage = http://espeak.sourceforge.net/; homepage = http://espeak.sourceforge.net/;
license = "GPLv3+"; license = licenses.gpl3Plus;
platforms = platforms.linux;
}; };
} }

View File

@ -0,0 +1,15 @@
Don't hardcode /usr, use @prefix@.
Author: Bjørn Forsman
diff -uNr espeakedit-1.48.03.orig/src/speech.h espeakedit-1.48.03/src/speech.h
--- espeakedit-1.48.03.orig/src/speech.h 2014-03-04 17:48:12.000000000 +0100
+++ espeakedit-1.48.03/src/speech.h 2014-07-22 18:21:40.860790719 +0200
@@ -58,7 +58,7 @@
// will look for espeak_data directory here, and also in user's home directory
#ifndef PATH_ESPEAK_DATA
- #define PATH_ESPEAK_DATA "/usr/share/espeak-data"
+ #define PATH_ESPEAK_DATA "@prefix@/share/espeak-data"
#endif
typedef unsigned short USHORT;

View File

@ -0,0 +1,27 @@
Make the path to 'sox' configurable by marking it '@sox@' (easy to match with sed).
Author: Bjørn Forsman
diff -uNr espeakedit-1.48.03.orig/src/compiledata.cpp espeakedit-1.48.03/src/compiledata.cpp
--- espeakedit-1.48.03.orig/src/compiledata.cpp 2014-03-04 17:48:11.000000000 +0100
+++ espeakedit-1.48.03/src/compiledata.cpp 2014-07-22 16:38:50.261388452 +0200
@@ -1884,7 +1884,7 @@
fname2 = msg;
}
- sprintf(command,"sox \"%s%s.wav\" -r %d -c1 -t wav %s\n",path_source,fname2,samplerate_native, fname_temp);
+ sprintf(command,"@sox@ \"%s%s.wav\" -r %d -c1 -t wav %s\n",path_source,fname2,samplerate_native, fname_temp);
if(system(command) != 0)
{
failed = 1;
diff -uNr espeakedit-1.48.03.orig/src/readclause.cpp espeakedit-1.48.03/src/readclause.cpp
--- espeakedit-1.48.03.orig/src/readclause.cpp 2014-03-04 17:48:11.000000000 +0100
+++ espeakedit-1.48.03/src/readclause.cpp 2014-07-22 16:38:37.190440504 +0200
@@ -892,7 +892,7 @@
if((fd_temp = mkstemp(fname_temp)) >= 0)
{
close(fd_temp);
- sprintf(command,"sox \"%s\" -r %d -c1 -t wav %s\n", fname, samplerate, fname_temp);
+ sprintf(command,"@sox@ \"%s\" -r %d -c1 -t wav %s\n", fname, samplerate, fname_temp);
if(system(command) == 0)
{
fname = fname_temp;

View File

@ -0,0 +1,26 @@
Fix broken Makefile:
* fix syntax error (missing '\' to continue line):
Makefile:19: *** recipe commences before first target. Stop.
* Get portaudio library flags from pkg-config (to get -Lpath/to/portaudio/lib etc.)
Author: Bjørn Forsman
diff -uNr espeakedit-1.48.03.orig/src/Makefile espeakedit-1.48.03/src/Makefile
--- espeakedit-1.48.03.orig/src/Makefile 2013-03-13 15:52:02.000000000 +0100
+++ espeakedit-1.48.03/src/Makefile 2014-07-22 15:34:17.524114822 +0200
@@ -12,12 +12,11 @@
WX_LIBS = -pthread `wx-config --libs`
-LIBS=-lstdc++ -lportaudio
+LIBS=-lstdc++ `pkg-config --libs portaudio-2.0`
#LIBS=-lstdc++ /usr/lib/x86_64-linux-gnu/libportaudio.so.2
-CPPFLAGS = -Wall -g -fexceptions `wx-config --cflags`
- -I/usr/include/wx-2.8 \
- -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES
+CPPFLAGS = -Wall -g -fexceptions `wx-config --cflags` \
+ -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES \
-D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT
CXXFLAGS = -O2 -Wall -fexceptions `wx-config --cflags` \

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, alsaLib, glib, jackaudio, libsndfile, pkgconfig { stdenv, fetchurl, alsaLib, glib, jack2, libsndfile, pkgconfig
, pulseaudio }: , pulseaudio }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
"-framework CoreAudio"; "-framework CoreAudio";
buildInputs = [ glib libsndfile pkgconfig ] buildInputs = [ glib libsndfile pkgconfig ]
++ stdenv.lib.optionals (!stdenv.isDarwin) [ alsaLib pulseaudio jackaudio ]; ++ stdenv.lib.optionals (!stdenv.isDarwin) [ alsaLib pulseaudio jack2 ];
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Real-time software synthesizer based on the SoundFont 2 specifications"; description = "Real-time software synthesizer based on the SoundFont 2 specifications";

View File

@ -30,6 +30,6 @@ stdenv.mkDerivation rec {
meta = { meta = {
homepage = http://wejp.k.vu/projects/gmu; homepage = http://wejp.k.vu/projects/gmu;
description = "Open source music player for portable gaming consoles and handhelds"; description = "Open source music player for portable gaming consoles and handhelds";
license = "GPLv2"; license = stdenv.lib.licenses.gpl2;
}; };
} }

View File

@ -0,0 +1,45 @@
{ pkgs, stdenv, fetchurl, python, buildPythonPackage, pythonPackages, mygpoclient, intltool,
ipodSupport ? true, libgpod, gpodderHome ? "", gpodderDownloadDir ? "" }:
with pkgs.lib;
let
inherit (pythonPackages) coverage feedparser minimock sqlite3 dbus pygtk eyeD3;
in buildPythonPackage rec {
name = "gpodder-3.7.0";
src = fetchurl {
url = "http://gpodder.org/src/${name}.tar.gz";
sha256 = "fa90ef4bdd3fd9eef95404f7f43f70912ae3ab4f8d24078484a2f3e11b14dc47";
};
buildInputs = [ coverage feedparser minimock sqlite3 mygpoclient intltool ];
propagatedBuildInputs = [ feedparser dbus mygpoclient sqlite3 pygtk eyeD3 ]
++ stdenv.lib.optional ipodSupport libgpod;
postPatch = "sed -ie 's/PYTHONPATH=src/PYTHONPATH=\$(PYTHONPATH):src/' makefile";
checkPhase = "make unittest";
preFixup = ''
wrapProgram $out/bin/gpodder \
${optionalString (gpodderHome != "") "--set GPODDER_HOME ${gpodderHome}"} \
${optionalString (gpodderDownloadDir != "") "--set GPODDER_DOWNLOAD_DIR ${gpodderDownloadDir}"}
'';
installPhase = "DESTDIR=/ PREFIX=$out make install";
meta = {
description = "A podcatcher written in python";
longDescription = ''
gPodder downloads and manages free audio and video content (podcasts)
for you. Listen directly on your computer or on your mobile devices.
'';
homepage = "http://gpodder.org/";
license = "GPLv3";
platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
maintainers = [ stdenv.lib.maintainers.skeidel ];
};
}

View File

@ -1,25 +1,43 @@
{ stdenv, fetchurl, pkgconfig, libgpod, gtk, glib, gettext, perl, perlXMLParser { stdenv, fetchurl, pkgconfig, makeWrapper, intltool, libgpod, curl, flac,
, libglade, flex, libid3tag, libvorbis, intltool }: gnome3_12, gtk3, glib, gettext, perl, perlXMLParser , libglade, flex, libid3tag,
libvorbis, hicolor_icon_theme, gdk_pixbuf }:
stdenv.mkDerivation { let
name = "gtkpod-1.0.0"; gnome = gnome3_12;
in stdenv.mkDerivation rec {
version = "2.1.4";
name = "gtkpod-${version}";
src = fetchurl { src = fetchurl {
url = mirror://sourceforge/gtkpod/gtkpod-1.0.0.tar.gz; url = "mirror://sourceforge/gtkpod/${name}.tar.gz";
sha256 = "04jzybs55c27kyp7r9c58prcq0q4ssvj5iggva857f49s1ar826q"; sha256 = "ba12b35f3f24a155b68f0ffdaf4d3c5c7d1b8df04843a53306e1c83fc811dfaa";
}; };
buildInputs = [ pkgconfig libgpod gettext perl perlXMLParser gtk libglade flex propagatedUserEnvPkgs = [ gnome.gnome_themes_standard ];
libid3tag libvorbis intltool ];
buildInputs = [ pkgconfig makeWrapper intltool curl gettext perl perlXMLParser
flex libgpod libid3tag flac libvorbis gtk3 gdk_pixbuf libglade gnome.anjuta
gnome.gdl gnome.gnome_icon_theme_symbolic gnome.gnome_icon_theme
hicolor_icon_theme ];
patchPhase = '' patchPhase = ''
sed -i 's/which/type -P/' scripts/*.sh sed -i 's/which/type -P/' scripts/*.sh
''; '';
meta = { preFixup = ''
wrapProgram "$out/bin/gtkpod" \
--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:${gnome.gnome_themes_standard}/share:$out/share:$GSETTINGS_SCHEMAS_PATH"
'';
enableParallelBuilding = true;
meta = with stdenv.lib; {
description = "GTK Manager for an Apple ipod"; description = "GTK Manager for an Apple ipod";
homepage = http://gtkpod.sourceforge.net; homepage = http://gtkpod.sourceforge.net;
license = "GPLv2+"; license = licenses.gpl2Plus;
platforms = with stdenv.lib.platforms; linux; platforms = platforms.linux;
maintainers = [ maintainers.skeidel ];
}; };
} }

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, avahi, boost, fftw, gettext, glib, glibmm, gtk { stdenv, fetchurl, avahi, boost, fftw, gettext, glib, glibmm, gtk
, gtkmm, intltool, jackaudio, ladspaH, librdf, libsndfile, lv2 , gtkmm, intltool, jack2, ladspaH, librdf, libsndfile, lv2
, pkgconfig, python }: , pkgconfig, python }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
avahi boost fftw gettext glib glibmm gtk gtkmm intltool jackaudio avahi boost fftw gettext glib glibmm gtk gtkmm intltool jack2
ladspaH librdf libsndfile lv2 pkgconfig python ladspaH librdf libsndfile lv2 pkgconfig python
]; ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, alsaLib, boost, glib, jackaudio, ladspaPlugins { stdenv, fetchurl, alsaLib, boost, glib, jack2, ladspaPlugins
, libarchive, liblrdf , libsndfile, pkgconfig, qt4, scons, subversion }: , libarchive, liblrdf , libsndfile, pkgconfig, qt4, scons, subversion }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
alsaLib boost glib jackaudio ladspaPlugins libarchive liblrdf alsaLib boost glib jack2 ladspaPlugins libarchive liblrdf
libsndfile pkgconfig qt4 scons subversion libsndfile pkgconfig qt4 scons subversion
]; ];

View File

@ -23,6 +23,6 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "A command line editor for id3v2 tags"; description = "A command line editor for id3v2 tags";
homepage = http://id3v2.sourceforge.net/; homepage = http://id3v2.sourceforge.net/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
}; };
} }

View File

@ -1,4 +1,4 @@
{ stdenv, fetchsvn, boost, ganv, glibmm, gtk, gtkmm, jackaudio, lilv { stdenv, fetchsvn, boost, ganv, glibmm, gtk, gtkmm, jack2, lilv
, lv2, pkgconfig, python, raul, serd, sord, sratom, suil , lv2, pkgconfig, python, raul, serd, sord, sratom, suil
}: }:
@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
boost ganv glibmm gtk gtkmm jackaudio lilv lv2 pkgconfig python boost ganv glibmm gtk gtkmm jack2 lilv lv2 pkgconfig python
raul serd sord sratom suil raul serd sord sratom suil
]; ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, jackaudio, libsndfile, pkgconfig }: { stdenv, fetchurl, jack2, libsndfile, pkgconfig }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "jack_capture-${version}"; name = "jack_capture-${version}";
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "0sk7b92my1v1g7rhkpl1c608rb0rdb28m9zqfll95kflxajd16zv"; sha256 = "0sk7b92my1v1g7rhkpl1c608rb0rdb28m9zqfll95kflxajd16zv";
}; };
buildInputs = [ jackaudio libsndfile pkgconfig ]; buildInputs = [ jack2 libsndfile pkgconfig ];
buildPhase = "PREFIX=$out make jack_capture"; buildPhase = "PREFIX=$out make jack_capture";

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, SDL, jackaudio, mesa, pkgconfig }: { stdenv, fetchurl, SDL, jack2, mesa, pkgconfig }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "jack_oscrolloscope-${version}"; name = "jack_oscrolloscope-${version}";
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "1pl55in0sj7h5r06n1v91im7d18pplvhbjhjm1fdl39zwnyxiash"; sha256 = "1pl55in0sj7h5r06n1v91im7d18pplvhbjhjm1fdl39zwnyxiash";
}; };
buildInputs = [ SDL jackaudio mesa pkgconfig ]; buildInputs = [ SDL jack2 mesa pkgconfig ];
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin

View File

@ -1,11 +1,11 @@
{ stdenv, fetchurl, pkgconfig, jackaudio, ladspaH, gtk, alsaLib, libxml2, librdf }: { stdenv, fetchurl, pkgconfig, jack2, ladspaH, gtk, alsaLib, libxml2, librdf }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "jack-rack-1.4.7"; name = "jack-rack-1.4.7";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/jack-rack/${name}.tar.bz2"; url = "mirror://sourceforge/jack-rack/${name}.tar.bz2";
sha256 = "1lmibx9gicagcpcisacj6qhq6i08lkl5x8szysjqvbgpxl9qg045"; sha256 = "1lmibx9gicagcpcisacj6qhq6i08lkl5x8szysjqvbgpxl9qg045";
}; };
buildInputs = [ pkgconfig jackaudio ladspaH gtk alsaLib libxml2 librdf ]; buildInputs = [ pkgconfig jack2 ladspaH gtk alsaLib libxml2 librdf ];
meta = { meta = {
description = ''An effects "rack" for the JACK low latency audio API''; description = ''An effects "rack" for the JACK low latency audio API'';

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, jackaudio, pkgconfig }: { stdenv, fetchurl, jack2, pkgconfig }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "jackmeter-0.4"; name = "jackmeter-0.4";
@ -8,12 +8,12 @@ stdenv.mkDerivation rec {
sha256 = "1cnvgx3jv0yvxlqy0l9k285zgvazmh5k8m4l7lxckjfm5bn6hm1r"; sha256 = "1cnvgx3jv0yvxlqy0l9k285zgvazmh5k8m4l7lxckjfm5bn6hm1r";
}; };
buildInputs = [ jackaudio pkgconfig ]; buildInputs = [ jack2 pkgconfig ];
meta = { meta = {
description = "Console jack loudness meter"; description = "Console jack loudness meter";
homepage = http://www.aelius.com/njh/jackmeter/; homepage = http://www.aelius.com/njh/jackmeter/;
license = "GPLv2"; license = stdenv.lib.licenses.gpl2;
maintainers = [ stdenv.lib.maintainers.marcweber ]; maintainers = [ stdenv.lib.maintainers.marcweber ];
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;
}; };

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, gtk, jackaudio, lilv, lv2, pkgconfig, python { stdenv, fetchurl, gtk, jack2, lilv, lv2, pkgconfig, python
, serd, sord , sratom, suil }: , serd, sord , sratom, suil }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
gtk jackaudio lilv lv2 pkgconfig python serd sord sratom suil gtk jack2 lilv lv2 pkgconfig python serd sord sratom suil
]; ];
configurePhase = "python waf configure --prefix=$out"; configurePhase = "python waf configure --prefix=$out";

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, alsaLib, gtk, jackaudio, libuuid, libxml2 { stdenv, fetchurl, alsaLib, gtk, jack2, libuuid, libxml2
, makeWrapper, pkgconfig, readline }: , makeWrapper, pkgconfig, readline }:
assert libuuid != null; assert libuuid != null;
@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
# http://permalink.gmane.org/gmane.linux.redhat.fedora.extras.cvs/822346 # http://permalink.gmane.org/gmane.linux.redhat.fedora.extras.cvs/822346
patches = [ ./socket.patch ./gcc-47.patch ]; patches = [ ./socket.patch ./gcc-47.patch ];
buildInputs = [ alsaLib gtk jackaudio libuuid libxml2 makeWrapper buildInputs = [ alsaLib gtk jack2 libuuid libxml2 makeWrapper
pkgconfig readline ]; pkgconfig readline ];
postInstall = '' postInstall = ''

View File

@ -15,7 +15,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "Not a Guitar-Only tuner"; description = "Not a Guitar-Only tuner";
homepage = http://www.nongnu.org/lingot/; homepage = http://www.nongnu.org/lingot/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
platforms = with stdenv.lib.platforms; linux; platforms = with stdenv.lib.platforms; linux;
maintainers = with stdenv.lib.maintainers; [viric]; maintainers = with stdenv.lib.maintainers; [viric];
}; };

View File

@ -1,5 +1,5 @@
{ stdenv, fetchsvn, alsaLib, asio, autoconf, automake, bison { stdenv, fetchsvn, alsaLib, asio, autoconf, automake, bison
, jackaudio, libgig, libsndfile, libtool, lv2, pkgconfig }: , jack2, libgig, libsndfile, libtool, lv2, pkgconfig }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "linuxsampler-svn-${version}"; name = "linuxsampler-svn-${version}";
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
''; '';
buildInputs = [ buildInputs = [
alsaLib asio autoconf automake bison jackaudio libgig libsndfile alsaLib asio autoconf automake bison jack2 libgig libsndfile
libtool lv2 pkgconfig libtool lv2 pkgconfig
]; ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, SDL, alsaLib, cmake, fftwSinglePrec, jackaudio, libogg { stdenv, fetchurl, SDL, alsaLib, cmake, fftwSinglePrec, jack2, libogg
, libsamplerate, libsndfile, pkgconfig, pulseaudio, qt4, freetype , libsamplerate, libsndfile, pkgconfig, pulseaudio, qt4, freetype
}: }:
@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
SDL alsaLib cmake fftwSinglePrec jackaudio libogg libsamplerate SDL alsaLib cmake fftwSinglePrec jack2 libogg libsamplerate
libsndfile pkgconfig pulseaudio qt4 libsndfile pkgconfig pulseaudio qt4
]; ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, SDL , alsaLib, gtk, jackaudio, ladspaH { stdenv, fetchurl, SDL , alsaLib, gtk, jack2, ladspaH
, ladspaPlugins, libsamplerate, libsndfile, pkgconfig, pulseaudio }: , ladspaPlugins, libsamplerate, libsndfile, pkgconfig, pulseaudio }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = buildInputs =
[ SDL alsaLib gtk jackaudio ladspaH libsamplerate libsndfile [ SDL alsaLib gtk jack2 ladspaH libsamplerate libsndfile
pkgconfig pulseaudio pkgconfig pulseaudio
]; ];

View File

@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "Tracker music player for the terminal"; description = "Tracker music player for the terminal";
homepage = http://mikmod.shlomifish.org/; homepage = http://mikmod.shlomifish.org/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = with stdenv.lib.maintainers; [ viric ]; maintainers = with stdenv.lib.maintainers; [ viric ];
platforms = with stdenv.lib.platforms; linux; platforms = with stdenv.lib.platforms; linux;
}; };

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, SDL, alsaLib, autoconf, automake, jackaudio, perl { stdenv, fetchurl, SDL, alsaLib, autoconf, automake, jack2, perl
, zlib, zziplib , zlib, zziplib
}: }:
@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
export CPATH=${zlib}/lib export CPATH=${zlib}/lib
''; '';
buildInputs = [ SDL alsaLib autoconf automake jackaudio perl zlib zziplib ]; buildInputs = [ SDL alsaLib autoconf automake jack2 perl zlib zziplib ];
meta = { meta = {
description = "Music tracker application, similar to Fasttracker II."; description = "Music tracker application, similar to Fasttracker II.";

View File

@ -1,4 +1,7 @@
{ stdenv, fetchurl, ncurses, pkgconfig, alsaLib, flac, libmad, speex, ffmpeg, libvorbis, mpc, libsndfile, jackaudio, db, libmodplug, timidity, libid3tag, libtool }: { stdenv, fetchurl, ncurses, pkgconfig, alsaLib, flac, libmad, speex, ffmpeg
, libvorbis, mpc, libsndfile, jack2, db, libmodplug, timidity, libid3tag
, libtool
}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "moc-${version}"; name = "moc-${version}";
@ -11,7 +14,10 @@ stdenv.mkDerivation rec {
configurePhase = "./configure prefix=$out"; configurePhase = "./configure prefix=$out";
buildInputs = [ ncurses pkgconfig alsaLib flac libmad speex ffmpeg libvorbis mpc libsndfile jackaudio db libmodplug timidity libid3tag libtool ]; buildInputs = [
ncurses pkgconfig alsaLib flac libmad speex ffmpeg libvorbis
mpc libsndfile jack2 db libmodplug timidity libid3tag libtool
];
meta = { meta = {
description = "MOC (music on console) is a console audio player for LINUX/UNIX designed to be powerful and easy to use."; description = "MOC (music on console) is a console audio player for LINUX/UNIX designed to be powerful and easy to use.";

View File

@ -0,0 +1,24 @@
{ stdenv, fetchurl, pythonPackages, mopidy }:
pythonPackages.buildPythonPackage rec {
name = "mopidy-moped-${version}";
version = "0.3.1";
src = fetchurl {
url = "https://github.com/martijnboland/moped/archive/v${version}.tar.gz";
sha256 = "0sjp8vr4yfyjx233gamhg0p67zjnlpc9yq3szbw897igsh23j2yr";
};
propagatedBuildInputs = [ mopidy ];
doCheck = false;
meta = with stdenv.lib; {
homepage = https://github.com/martijnboland/moped;
description = "A web client for Mopidy";
license = licenses.mit;
maintainers = [ maintainers.rickynils ];
hydraPlatforms = [];
};
}

View File

@ -3,11 +3,11 @@
pythonPackages.buildPythonPackage rec { pythonPackages.buildPythonPackage rec {
name = "mopidy-spotify-${version}"; name = "mopidy-spotify-${version}";
version = "1.1.3"; version = "1.2.0";
src = fetchurl { src = fetchurl {
url = "https://github.com/mopidy/mopidy-spotify/archive/v${version}.tar.gz"; url = "https://github.com/mopidy/mopidy-spotify/archive/v${version}.tar.gz";
sha256 = "09s6841qb24nrmlc2izb8vxbgv185ddra6ndskrsw907hfli2kl6"; sha256 = "1fgxakylsx0nggis11v6bxfy8h3dl1n1v86liyfcj0xazb1mx69m";
}; };
propagatedBuildInputs = [ mopidy pythonPackages.pyspotify ]; propagatedBuildInputs = [ mopidy pythonPackages.pyspotify ];

View File

@ -5,15 +5,15 @@
pythonPackages.buildPythonPackage rec { pythonPackages.buildPythonPackage rec {
name = "mopidy-${version}"; name = "mopidy-${version}";
version = "0.18.3"; version = "0.19.0";
src = fetchurl { src = fetchurl {
url = "https://github.com/mopidy/mopidy/archive/v${version}.tar.gz"; url = "https://github.com/mopidy/mopidy/archive/v${version}.tar.gz";
sha256 = "0b8ss6qjzj1pawd8469i5310ily3rad0ashfy87vdyj6xdyfyp0q"; sha256 = "10cnc1bipr0brk7478201cgm71lp5bci3qiaadyxv9hhcn0nmn9b";
}; };
propagatedBuildInputs = with pythonPackages; [ propagatedBuildInputs = with pythonPackages; [
gst_python pygobject pykka cherrypy ws4py gst_plugins_base gst_plugins_good gst_python pygobject pykka tornado gst_plugins_base gst_plugins_good
]; ];
# There are no tests # There are no tests

View File

@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
homepage = http://www.ibiblio.org/mp3info/; homepage = http://www.ibiblio.org/mp3info/;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ stdenv.lib.maintainers.ludo ]; maintainers = [ stdenv.lib.maintainers.ludo ];
platforms = stdenv.lib.platforms.unix; platforms = stdenv.lib.platforms.unix;

View File

@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "A minimalist command line interface to MPD"; description = "A minimalist command line interface to MPD";
homepage = http://www.musicpd.org/clients/mpc/; homepage = http://www.musicpd.org/clients/mpc/;
license = "GPL2"; license = stdenv.lib.licenses.gpl2;
maintainers = [ stdenv.lib.maintainers.algorith ]; maintainers = [ stdenv.lib.maintainers.algorith ];
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;
}; };

View File

@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
description = "mpc123, a Musepack (.mpc) audio player"; description = "mpc123, a Musepack (.mpc) audio player";
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ ]; maintainers = [ ];
platforms = stdenv.lib.platforms.gnu; # arbitrary choice platforms = stdenv.lib.platforms.gnu; # arbitrary choice

View File

@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
meta = { meta = {
description = "mpg321, a command-line MP3 player"; description = "mpg321, a command-line MP3 player";
homepage = http://mpg321.sourceforge.net/; homepage = http://mpg321.sourceforge.net/;
license = "GPLv2"; license = stdenv.lib.licenses.gpl2;
maintainers = [ ]; maintainers = [ ];
platforms = stdenv.lib.platforms.gnu; platforms = stdenv.lib.platforms.gnu;
}; };

View File

@ -1,12 +1,12 @@
{ stdenv, fetchurl, pkgconfig, glib, ncurses, mpd_clientlib, libintlOrEmpty }: { stdenv, fetchurl, pkgconfig, glib, ncurses, mpd_clientlib, libintlOrEmpty }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "0.22"; version = "0.23";
name = "ncmpc-${version}"; name = "ncmpc-${version}";
src = fetchurl { src = fetchurl {
url = "http://www.musicpd.org/download/ncmpc/0/ncmpc-${version}.tar.xz"; url = "http://www.musicpd.org/download/ncmpc/0/ncmpc-${version}.tar.xz";
sha256 = "a8d65f12653d9ce8bc4493aa1c5de09359c25bf3a22498d2ae797e7d41422211"; sha256 = "d7b30cefaf5c74a5d8ab18ab8275e0102ae12e8ee6d6f8144f8e4cc9a97b5de4";
}; };
buildInputs = [ pkgconfig glib ncurses mpd_clientlib ] buildInputs = [ pkgconfig glib ncurses mpd_clientlib ]

View File

@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
homepage = http://freedesktop.org/software/pulseaudio/pavucontrol/ ; homepage = http://freedesktop.org/software/pulseaudio/pavucontrol/ ;
license = "GPLv2+"; license = stdenv.lib.licenses.gpl2Plus;
maintainers = [ ]; maintainers = [ ];
platforms = stdenv.lib.platforms.gnu; # arbitrary choice platforms = stdenv.lib.platforms.gnu; # arbitrary choice

View File

@ -1,4 +1,4 @@
{ stdenv, fetchgit, alsaLib, cmake, gtk, jackaudio, libgnomecanvas { stdenv, fetchgit, alsaLib, cmake, gtk, jack2, libgnomecanvas
, libpthreadstubs, libsamplerate, libsndfile, libtool, libxml2 , libpthreadstubs, libsamplerate, libsndfile, libtool, libxml2
, pkgconfig }: , pkgconfig }:
@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = buildInputs =
[ alsaLib cmake gtk jackaudio libgnomecanvas libpthreadstubs [ alsaLib cmake gtk jack2 libgnomecanvas libpthreadstubs
libsamplerate libsndfile libtool libxml2 pkgconfig libsamplerate libsndfile libtool libxml2 pkgconfig
]; ];

View File

@ -22,7 +22,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "Doing phonetics by computer"; description = "Doing phonetics by computer";
homepage = http://www.fon.hum.uva.nl/praat/; homepage = http://www.fon.hum.uva.nl/praat/;
license = "GPLv2+"; # Has some 3rd-party code in it though license = stdenv.lib.licenses.gpl2Plus; # Has some 3rd-party code in it though
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;
}; };
} }

View File

@ -2,7 +2,7 @@
, glew, ftgl, ttf_bitstream_vera , glew, ftgl, ttf_bitstream_vera
, withQt ? true, qt4 , withQt ? true, qt4
, withLibvisual ? false, libvisual, SDL , withLibvisual ? false, libvisual, SDL
, withJack ? false, jackaudio , withJack ? false, jack2
, withPulseAudio ? true, pulseaudio , withPulseAudio ? true, pulseaudio
}: }:
@ -45,7 +45,7 @@ stdenv.mkDerivation {
[ glew ftgl ] [ glew ftgl ]
++ optional withQt qt4 ++ optional withQt qt4
++ optionals withLibvisual [ libvisual SDL ] ++ optionals withLibvisual [ libvisual SDL ]
++ optional withJack jackaudio ++ optional withJack jack2
++ optional withPulseAudio pulseaudio ++ optional withPulseAudio pulseaudio
; ;
} }

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, autoreconfHook, gettext, makeWrapper { stdenv, fetchurl, autoreconfHook, gettext, makeWrapper
, alsaLib, jackaudio, tk , alsaLib, jack2, tk
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ autoreconfHook gettext makeWrapper ]; nativeBuildInputs = [ autoreconfHook gettext makeWrapper ];
buildInputs = [ alsaLib jackaudio ]; buildInputs = [ alsaLib jack2 ];
configureFlags = '' configureFlags = ''
--enable-alsa --enable-alsa

View File

@ -1,17 +1,17 @@
{ stdenv, fetchurl, qt4, alsaLib, jackaudio, dbus }: { stdenv, fetchurl, qt4, alsaLib, jack2, dbus }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "0.3.10"; version = "0.3.11";
name = "qjackctl-${version}"; name = "qjackctl-${version}";
# some dependencies such as killall have to be installed additionally # some dependencies such as killall have to be installed additionally
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/qjackctl/${name}.tar.gz"; url = "mirror://sourceforge/qjackctl/${name}.tar.gz";
sha256 = "0ch14y3p0x5ss28cpnqcxp42zb2w07d3l1n2sbrkgiz58iy97paw"; sha256 = "1wjzrgx3n2asyxk6cnfcm34msaw84qvsqy08bd4qnghrgpl96hwl";
}; };
buildInputs = [ qt4 alsaLib jackaudio dbus ]; buildInputs = [ qt4 alsaLib jack2 dbus ];
configureFlags = "--enable-jack-version"; configureFlags = "--enable-jack-version";

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, alsaLib, fluidsynth, jackaudio, qt4 }: { stdenv, fetchurl, alsaLib, fluidsynth, jack2, qt4 }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "qsynth-${version}"; name = "qsynth-${version}";
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "0wmq61cq93x2l00xwr871373mj3dwamz1dg6v62x7s8m1612ndrw"; sha256 = "0wmq61cq93x2l00xwr871373mj3dwamz1dg6v62x7s8m1612ndrw";
}; };
buildInputs = [ alsaLib fluidsynth jackaudio qt4 ]; buildInputs = [ alsaLib fluidsynth jack2 qt4 ];
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Fluidsynth GUI"; description = "Fluidsynth GUI";

View File

@ -1,4 +1,4 @@
{ alsaLib, autoconf, automake, dssi, fetchurl, gtk, jackaudio { alsaLib, autoconf, automake, dssi, fetchurl, gtk, jack2
, ladspaH, ladspaPlugins, liblo, libmad, libsamplerate, libsndfile , ladspaH, ladspaPlugins, liblo, libmad, libsamplerate, libsndfile
, libtool, libvorbis, pkgconfig, qt4, rubberband, stdenv }: , libtool, libvorbis, pkgconfig, qt4, rubberband, stdenv }:
@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
}; };
buildInputs = buildInputs =
[ alsaLib autoconf automake dssi gtk jackaudio ladspaH [ alsaLib autoconf automake dssi gtk jack2 ladspaH
ladspaPlugins liblo libmad libsamplerate libsndfile libtool ladspaPlugins liblo libmad libsamplerate libsndfile libtool
libvorbis pkgconfig qt4 rubberband libvorbis pkgconfig qt4 rubberband
]; ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, alsaLib, alsaUtils, fltk, jackaudio, libXft, { stdenv, fetchurl, alsaLib, alsaUtils, fltk, jack2, libXft,
libXpm, libjpeg, libpng, libsamplerate, libsndfile, zlib }: libXpm, libjpeg, libpng, libsamplerate, libsndfile, zlib }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
patches = [ ./fltk-path.patch ]; patches = [ ./fltk-path.patch ];
buildInputs = [ alsaLib alsaUtils fltk jackaudio libXft libXpm libjpeg buildInputs = [ alsaLib alsaUtils fltk jack2 libXft libXpm libjpeg
libpng libsamplerate libsndfile zlib ]; libpng libsamplerate libsndfile zlib ];
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, jackaudio, libsndfile, lv2, qt4 }: { stdenv, fetchurl, jack2, libsndfile, lv2, qt4 }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "samplv1-${version}"; name = "samplv1-${version}";
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
sha256 = "1vr6jbqnsgdq3v2h1ndp4pirnil3119dqwlq0k0kdscmcskvb9j4"; sha256 = "1vr6jbqnsgdq3v2h1ndp4pirnil3119dqwlq0k0kdscmcskvb9j4";
}; };
buildInputs = [ jackaudio libsndfile lv2 qt4 ]; buildInputs = [ jack2 libsndfile lv2 qt4 ];
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "An old-school all-digital polyphonic sampler synthesizer with stereo fx"; description = "An old-school all-digital polyphonic sampler synthesizer with stereo fx";

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