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:
commit
6295a3ca36
21
doc/contributing.xml
Normal file
21
doc/contributing.xml
Normal 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>
|
@ -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>
|
||||||
|
155
doc/meta.xml
155
doc/meta.xml
@ -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
|
||||||
<?xml version='1.0' encoding='utf-8'?>
|
{
|
||||||
<items>
|
"hello": {
|
||||||
<item attrPath="hello" name="hello-2.3" system="i686-linux">
|
"meta": {
|
||||||
<meta name="description" value="A program that produces a familiar, friendly greeting" />
|
"description": "A program that produces a familiar, friendly greeting",
|
||||||
<meta name="homepage" value="http://www.gnu.org/software/hello/manual/" />
|
"homepage": "http://www.gnu.org/software/hello/manual/",
|
||||||
<meta name="license" value="GPLv3+" />
|
"license": {
|
||||||
<meta name="longDescription" value="GNU Hello is a program that prints &quot;Hello, world!&quot; when you run it.&#xA;It is fully customizable.&#xA;" />
|
"fullName": "GNU General Public License version 3 or later",
|
||||||
</item>
|
"shortName": "GPLv3+",
|
||||||
</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 <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
|
||||||
<alice@example.org>" "Bob <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 won’t 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 it’s 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
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
@ -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>";
|
||||||
|
@ -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
12
nixos/doc/manual/README
Normal 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.
|
@ -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:
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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 =
|
||||||
|
@ -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" ];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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!
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
107
nixos/modules/services/audio/mopidy.nix
Normal file
107
nixos/modules/services/audio/mopidy.nix
Normal 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;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -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}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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 = [
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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"; }
|
||||||
];
|
];
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
'';
|
'';
|
||||||
|
@ -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" ];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
37
nixos/modules/system/boot/emergency-mode.nix
Normal file
37
nixos/modules/system/boot/emergency-mode.nix
Normal 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"
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -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 ];
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -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.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
39
nixos/modules/system/boot/tmp.nix
Normal file
39
nixos/modules/system/boot/tmp.nix
Normal 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";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -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
|
||||||
'';
|
'';
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
25
nixos/modules/tasks/filesystems/cifs.nix
Normal file
25
nixos/modules/tasks/filesystems/cifs.nix
Normal 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
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
@ -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 ];
|
||||||
})
|
})
|
||||||
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
109
nixos/modules/virtualisation/docker.nix
Normal file
109
nixos/modules/virtualisation/docker.nix
Normal 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;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 [];
|
||||||
|
@ -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.
|
||||||
|
@ -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";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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 = ''
|
||||||
|
@ -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; {
|
||||||
|
@ -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 ];
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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 = ''
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
@ -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";
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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;
|
@ -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;
|
26
pkgs/applications/audio/espeak/espeakedit-fix-makefile.patch
Normal file
26
pkgs/applications/audio/espeak/espeakedit-fix-makefile.patch
Normal 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` \
|
@ -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";
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
45
pkgs/applications/audio/gpodder/default.nix
Normal file
45
pkgs/applications/audio/gpodder/default.nix
Normal 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 ];
|
||||||
|
};
|
||||||
|
}
|
@ -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 ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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'';
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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";
|
||||||
|
@ -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 = ''
|
||||||
|
@ -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];
|
||||||
};
|
};
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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.";
|
||||||
|
@ -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.";
|
||||||
|
24
pkgs/applications/audio/mopidy-moped/default.nix
Normal file
24
pkgs/applications/audio/mopidy-moped/default.nix
Normal 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 = [];
|
||||||
|
};
|
||||||
|
}
|
@ -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 ];
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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 ]
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
@ -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
|
||||||
];
|
];
|
||||||
|
@ -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; {
|
||||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user