mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-10-03 13:30:36 +00:00
Merge branch 'release-18.09' into staging-18.09
This commit is contained in:
@@ -966,5 +966,766 @@ lib.attrsets.mapAttrsToList (name: value: "${name}=${value}")
|
||||
itself to attribute sets. Also, the first argument of the argument function
|
||||
is a <emphasis>list</emphasis> of the names of the containing attributes.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>f</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>[ String ] -> Any -> Any</literal>
|
||||
</para>
|
||||
<para>
|
||||
Given a list of attribute names and value, return a new value.
|
||||
</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>name_path</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The list of attribute names to this value.
|
||||
</para>
|
||||
<para>
|
||||
For example, the <varname>name_path</varname> for the
|
||||
<literal>example</literal> string in the attribute set <literal>{ foo
|
||||
= { bar = "example"; }; }</literal> is <literal>[ "foo" "bar"
|
||||
]</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>value</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The attribute's value.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>set</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The attribute set to recursively map over.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.mapAttrsRecursive-example">
|
||||
<title>A contrived example of using <function>lib.attrsets.mapAttrsRecursive</function></title>
|
||||
<programlisting><![CDATA[
|
||||
mapAttrsRecursive
|
||||
(path: value: concatStringsSep "-" (path ++ [value]))
|
||||
{
|
||||
n = {
|
||||
a = "A";
|
||||
m = {
|
||||
b = "B";
|
||||
c = "C";
|
||||
};
|
||||
};
|
||||
d = "D";
|
||||
}
|
||||
=> {
|
||||
n = {
|
||||
a = "n-a-A";
|
||||
m = {
|
||||
b = "n-m-b-B";
|
||||
c = "n-m-c-C";
|
||||
};
|
||||
};
|
||||
d = "d-D";
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.mapAttrsRecursiveCond">
|
||||
<title><function>lib.attrsets.mapAttrsRecursiveCond</function></title>
|
||||
|
||||
<subtitle><literal>mapAttrsRecursiveCond :: (AttrSet -> Bool) -> ([ String ] -> Any -> Any) -> AttrSet -> AttrSet</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.mapAttrsRecursiveCond" />
|
||||
|
||||
<para>
|
||||
Like <function>mapAttrsRecursive</function>, but it takes an additional
|
||||
predicate function that tells it whether to recursive into an attribute set.
|
||||
If it returns false, <function>mapAttrsRecursiveCond</function> does not
|
||||
recurse, but does apply the map function. It is returns true, it does
|
||||
recurse, and does not apply the map function.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>cond</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>(AttrSet -> Bool)</literal>
|
||||
</para>
|
||||
<para>
|
||||
Determine if <function>mapAttrsRecursive</function> should recurse deeper
|
||||
in to the attribute set.
|
||||
</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>attributeset</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
An attribute set.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>f</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>[ String ] -> Any -> Any</literal>
|
||||
</para>
|
||||
<para>
|
||||
Given a list of attribute names and value, return a new value.
|
||||
</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>name_path</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The list of attribute names to this value.
|
||||
</para>
|
||||
<para>
|
||||
For example, the <varname>name_path</varname> for the
|
||||
<literal>example</literal> string in the attribute set <literal>{ foo
|
||||
= { bar = "example"; }; }</literal> is <literal>[ "foo" "bar"
|
||||
]</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>value</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The attribute's value.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>set</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The attribute set to recursively map over.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.mapAttrsRecursiveCond-example">
|
||||
<title>Only convert attribute values to JSON if the containing attribute set is marked for recursion</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.mapAttrsRecursiveCond
|
||||
({ recurse ? false, ... }: recurse)
|
||||
(name: value: builtins.toJSON value)
|
||||
{
|
||||
dorecur = {
|
||||
recurse = true;
|
||||
hello = "there";
|
||||
};
|
||||
dontrecur = {
|
||||
converted-to- = "json";
|
||||
};
|
||||
}
|
||||
=> {
|
||||
dorecur = {
|
||||
hello = "\"there\"";
|
||||
recurse = "true";
|
||||
};
|
||||
dontrecur = "{\"converted-to\":\"json\"}";
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.genAttrs">
|
||||
<title><function>lib.attrsets.genAttrs</function></title>
|
||||
|
||||
<subtitle><literal>genAttrs :: [ String ] -> (String -> Any) -> AttrSet</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.genAttrs" />
|
||||
|
||||
<para>
|
||||
Generate an attribute set by mapping a function over a list of attribute
|
||||
names.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>names</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Names of values in the resulting attribute set.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>f</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>String -> Any</literal>
|
||||
</para>
|
||||
<para>
|
||||
Takes the name of the attribute and return the attribute's value.
|
||||
</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>name</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The name of the attribute to generate a value for.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.genAttrs-example">
|
||||
<title>Generate an attrset based on names only</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.genAttrs [ "foo" "bar" ] (name: "x_${name}")
|
||||
=> { foo = "x_foo"; bar = "x_bar"; }
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.isDerivation">
|
||||
<title><function>lib.attrsets.isDerivation</function></title>
|
||||
|
||||
<subtitle><literal>isDerivation :: Any -> Bool</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.isDerivation" />
|
||||
|
||||
<para>
|
||||
Check whether the argument is a derivation. Any set with <code>{ type =
|
||||
"derivation"; }</code> counts as a derivation.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>value</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The value which is possibly a derivation.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.isDerivation-example-true">
|
||||
<title>A package is a derivation</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.isDerivation (import <nixpkgs> {}).ruby
|
||||
=> true
|
||||
]]></programlisting>
|
||||
</example>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.isDerivation-example-false">
|
||||
<title>Anything else is not a derivation</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.isDerivation "foobar"
|
||||
=> false
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.toDerivation">
|
||||
<title><function>lib.attrsets.toDerivation</function></title>
|
||||
|
||||
<subtitle><literal>toDerivation :: Path -> Derivation</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.toDerivation" />
|
||||
|
||||
<para>
|
||||
Converts a store path to a fake derivation.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>path</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A store path to convert to a derivation.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.optionalAttrs">
|
||||
<title><function>lib.attrsets.optionalAttrs</function></title>
|
||||
|
||||
<subtitle><literal>optionalAttrs :: Bool -> AttrSet</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.optionalAttrs" />
|
||||
|
||||
<para>
|
||||
Conditionally return an attribute set or an empty attribute set.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>cond</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Condition under which the <varname>as</varname> attribute set is
|
||||
returned.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>as</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The attribute set to return if <varname>cond</varname> is true.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.optionalAttrs-example-true">
|
||||
<title>Return the provided attribute set when <varname>cond</varname> is true</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.optionalAttrs true { my = "set"; }
|
||||
=> { my = "set"; }
|
||||
]]></programlisting>
|
||||
</example>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.optionalAttrs-example-false">
|
||||
<title>Return an empty attribute set when <varname>cond</varname> is false</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.optionalAttrs false { my = "set"; }
|
||||
=> { }
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.zipAttrsWithNames">
|
||||
<title><function>lib.attrsets.zipAttrsWithNames</function></title>
|
||||
|
||||
<subtitle><literal>zipAttrsWithNames :: [ String ] -> (String -> [ Any ] -> Any) -> [ AttrSet ] -> AttrSet</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.zipAttrsWithNames" />
|
||||
|
||||
<para>
|
||||
Merge sets of attributes and use the function <varname>f</varname> to merge
|
||||
attribute values where the attribute name is in <varname>names</varname>.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>names</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A list of attribute names to zip.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>f</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>(String -> [ Any ] -> Any</literal>
|
||||
</para>
|
||||
<para>
|
||||
Accepts an attribute name, all the values, and returns a combined value.
|
||||
</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>name</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The name of the attribute each value came from.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>vs</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A list of values collected from the list of attribute sets.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>sets</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A list of attribute sets to zip together.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.zipAttrsWithNames-example">
|
||||
<title>Summing a list of attribute sets of numbers</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.zipAttrsWithNames
|
||||
[ "a" "b" ]
|
||||
(name: vals: "${name} ${toString (builtins.foldl' (a: b: a + b) 0 vals)}")
|
||||
[
|
||||
{ a = 1; b = 1; c = 1; }
|
||||
{ a = 10; }
|
||||
{ b = 100; }
|
||||
{ c = 1000; }
|
||||
]
|
||||
=> { a = "a 11"; b = "b 101"; }
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.zipAttrsWith">
|
||||
<title><function>lib.attrsets.zipAttrsWith</function></title>
|
||||
|
||||
<subtitle><literal>zipAttrsWith :: (String -> [ Any ] -> Any) -> [ AttrSet ] -> AttrSet</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.zipAttrsWith" />
|
||||
|
||||
<para>
|
||||
Merge sets of attributes and use the function <varname>f</varname> to merge
|
||||
attribute values. Similar to
|
||||
<xref
|
||||
linkend="function-library-lib.attrsets.zipAttrsWithNames" /> where
|
||||
all key names are passed for <varname>names</varname>.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>f</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>(String -> [ Any ] -> Any</literal>
|
||||
</para>
|
||||
<para>
|
||||
Accepts an attribute name, all the values, and returns a combined value.
|
||||
</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>name</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The name of the attribute each value came from.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>vs</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A list of values collected from the list of attribute sets.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>sets</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A list of attribute sets to zip together.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.zipAttrsWith-example">
|
||||
<title>Summing a list of attribute sets of numbers</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.zipAttrsWith
|
||||
(name: vals: "${name} ${toString (builtins.foldl' (a: b: a + b) 0 vals)}")
|
||||
[
|
||||
{ a = 1; b = 1; c = 1; }
|
||||
{ a = 10; }
|
||||
{ b = 100; }
|
||||
{ c = 1000; }
|
||||
]
|
||||
=> { a = "a 11"; b = "b 101"; c = "c 1001"; }
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.zipAttrs">
|
||||
<title><function>lib.attrsets.zipAttrs</function></title>
|
||||
|
||||
<subtitle><literal>zipAttrsWith :: [ AttrSet ] -> AttrSet</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.zipAttrs" />
|
||||
|
||||
<para>
|
||||
Merge sets of attributes and combine each attribute value in to a list.
|
||||
Similar to <xref linkend="function-library-lib.attrsets.zipAttrsWith" />
|
||||
where the merge function returns a list of all values.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>sets</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A list of attribute sets to zip together.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.zipAttrs-example">
|
||||
<title>Combining a list of attribute sets</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.zipAttrs
|
||||
[
|
||||
{ a = 1; b = 1; c = 1; }
|
||||
{ a = 10; }
|
||||
{ b = 100; }
|
||||
{ c = 1000; }
|
||||
]
|
||||
=> { a = [ 1 10 ]; b = [ 1 100 ]; c = [ 1 1000 ]; }
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.recursiveUpdateUntil">
|
||||
<title><function>lib.attrsets.recursiveUpdateUntil</function></title>
|
||||
|
||||
<subtitle><literal>recursiveUpdateUntil :: ( [ String ] -> AttrSet -> AttrSet -> Bool ) -> AttrSet -> AttrSet -> AttrSet</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.recursiveUpdateUntil" />
|
||||
|
||||
<para>
|
||||
Does the same as the update operator <literal>//</literal> except that
|
||||
attributes are merged until the given predicate is verified. The predicate
|
||||
should accept 3 arguments which are the path to reach the attribute, a part
|
||||
of the first attribute set and a part of the second attribute set. When the
|
||||
predicate is verified, the value of the first attribute set is replaced by
|
||||
the value of the second attribute set.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>pred</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>[ String ] -> AttrSet -> AttrSet -> Bool</literal>
|
||||
</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>path</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The path to the values in the left and right hand sides.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>l</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The left hand side value.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>r</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The right hand side value.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>lhs</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The left hand attribute set of the merge.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>rhs</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The right hand attribute set of the merge.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.recursiveUpdateUntil-example">
|
||||
<title>Recursively merging two attribute sets</title>
|
||||
<programlisting><![CDATA[
|
||||
lib.attrsets.recursiveUpdateUntil (path: l: r: path == ["foo"])
|
||||
{
|
||||
# first attribute set
|
||||
foo.bar = 1;
|
||||
foo.baz = 2;
|
||||
bar = 3;
|
||||
}
|
||||
{
|
||||
#second attribute set
|
||||
foo.bar = 1;
|
||||
foo.quz = 2;
|
||||
baz = 4;
|
||||
}
|
||||
=> {
|
||||
foo.bar = 1; # 'foo.*' from the second set
|
||||
foo.quz = 2; #
|
||||
bar = 3; # 'bar' from the first set
|
||||
baz = 4; # 'baz' from the second set
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
|
||||
<section xml:id="function-library-lib.attrsets.recursiveUpdate">
|
||||
<title><function>lib.attrsets.recursiveUpdate</function></title>
|
||||
|
||||
<subtitle><literal>recursiveUpdate :: AttrSet -> AttrSet -> AttrSet</literal>
|
||||
</subtitle>
|
||||
|
||||
<xi:include href="./locations.xml" xpointer="lib.attrsets.recursiveUpdate" />
|
||||
|
||||
<para>
|
||||
A recursive variant of the update operator <literal>//</literal>. The
|
||||
recursion stops when one of the attribute values is not an attribute set, in
|
||||
which case the right hand side value takes precedence over the left hand
|
||||
side value.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>lhs</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The left hand attribute set of the merge.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>rhs</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The right hand attribute set of the merge.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<example xml:id="function-library-lib.attrsets.recursiveUpdate-example">
|
||||
<title>Recursively merging two attribute sets</title>
|
||||
<programlisting><![CDATA[
|
||||
recursiveUpdate
|
||||
{
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "/dev/hda";
|
||||
}
|
||||
{
|
||||
boot.loader.grub.device = "";
|
||||
}
|
||||
=> {
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "";
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
@@ -196,7 +196,7 @@ rec {
|
||||
newScope = scope: newScope (self // scope);
|
||||
callPackage = self.newScope {};
|
||||
overrideScope = g: lib.warn
|
||||
"`overrideScope` (from `lib.makeScope`) is deprecated. Do `overrideScope' (self: self: { … })` instead of `overrideScope (super: self: { … })`. All other overrides have the parameters in that order, including other definitions of `overrideScope`. This was the only definition violating the pattern."
|
||||
"`overrideScope` (from `lib.makeScope`) is deprecated. Do `overrideScope' (self: super: { … })` instead of `overrideScope (super: self: { … })`. All other overrides have the parameters in that order, including other definitions of `overrideScope`. This was the only definition violating the pattern."
|
||||
(makeScope newScope (lib.fixedPoints.extends (lib.flip g) f));
|
||||
overrideScope' = g: makeScope newScope (lib.fixedPoints.extends g f);
|
||||
packages = f;
|
||||
|
||||
@@ -192,7 +192,10 @@ rec {
|
||||
# separator between the values).
|
||||
separatedString = sep: mkOptionType rec {
|
||||
name = "separatedString";
|
||||
description = "string";
|
||||
description = if sep == ""
|
||||
then "Concatenated string" # for types.string.
|
||||
else "strings concatenated with ${builtins.toJSON sep}"
|
||||
;
|
||||
check = isString;
|
||||
merge = loc: defs: concatStringsSep sep (getValues defs);
|
||||
functor = (defaultFunctor name) // {
|
||||
|
||||
@@ -73,7 +73,8 @@ Linux foo 3.4.82 #1-NixOS SMP Thu Mar 20 14:44:05 UTC 2014 x86_64 GNU/Linux
|
||||
</para>
|
||||
|
||||
<para>
|
||||
To change the configuration of the container, you can edit
|
||||
There are several ways to change the configuration of the container. First,
|
||||
on the host, you can edit
|
||||
<literal>/var/lib/container/<replaceable>name</replaceable>/etc/nixos/configuration.nix</literal>,
|
||||
and run
|
||||
<screen>
|
||||
@@ -86,7 +87,8 @@ Linux foo 3.4.82 #1-NixOS SMP Thu Mar 20 14:44:05 UTC 2014 x86_64 GNU/Linux
|
||||
<xref linkend="opt-services.httpd.enable"/> = true;
|
||||
<xref linkend="opt-services.httpd.adminAddr"/> = "foo@example.org";
|
||||
<xref linkend="opt-networking.firewall.allowedTCPPorts"/> = [ 80 ];
|
||||
'
|
||||
'
|
||||
|
||||
# curl http://$(nixos-container show-ip foo)/
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">…
|
||||
</screen>
|
||||
@@ -95,13 +97,11 @@ Linux foo 3.4.82 #1-NixOS SMP Thu Mar 20 14:44:05 UTC 2014 x86_64 GNU/Linux
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Note that in previous versions of NixOS (17.09 and earlier) one could also
|
||||
use all nix-related commands (like <command>nixos-rebuild switch</command>)
|
||||
from inside the container. However, since the release of Nix 2.0 this is not
|
||||
supported anymore. Supporting Nix commands inside the container might be
|
||||
possible again in future versions. See
|
||||
<link xlink:href="https://github.com/NixOS/nixpkgs/issues/40355">the github
|
||||
issue</link> for tracking progress on this issue.
|
||||
Alternatively, you can change the configuration from within the container
|
||||
itself by running <command>nixos-rebuild switch</command> inside the
|
||||
container. Note that the container by default does not have a copy of the
|
||||
NixOS channel, so you should run <command>nix-channel --update</command>
|
||||
first.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
||||
@@ -115,10 +115,17 @@
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Add a <emphasis>swap</emphasis> partition. The size required will vary
|
||||
according to needs, here a 8GiB one is created. The space left in front
|
||||
(512MiB) will be used by the boot partition.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart primary linux-swap 512MiB 8.5GiB</screen>
|
||||
Add the <emphasis>root</emphasis> partition. This will fill the disk
|
||||
except for the end part, where the swap will live, and the space left in
|
||||
front (512MiB) which will be used by the boot partition.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart primary 512MiB -8GiB</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Next, add a <emphasis>swap</emphasis> partition. The size required will
|
||||
vary according to needs, here a 8GiB one is created.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
||||
<note>
|
||||
<para>
|
||||
The swap partition size rules are no different than for other Linux
|
||||
@@ -127,20 +134,13 @@
|
||||
</note>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Next, add the <emphasis>root</emphasis> partition. This will fill the
|
||||
remainder ending part of the disk.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart primary 8.5GiB -1MiB</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Finally, the <emphasis>boot</emphasis> partition. NixOS by default uses
|
||||
the ESP (EFI system partition) as its <emphasis>/boot</emphasis>
|
||||
partition. It uses the initially reserved 512MiB at the start of the
|
||||
disk.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart ESP fat32 1M 512MiB
|
||||
<screen language="commands"># parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
|
||||
# parted /dev/sda -- set 3 boot on</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
@@ -177,9 +177,16 @@
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Add a <emphasis>swap</emphasis> partition. The size required will vary
|
||||
according to needs, here a 8GiB one is created.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart primary linux-swap 1M 8GiB</screen>
|
||||
Add the <emphasis>root</emphasis> partition. This will fill the the disk
|
||||
except for the end part, where the swap will live.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart primary 1MiB -8GiB</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Finally, add a <emphasis>swap</emphasis> partition. The size required
|
||||
will vary according to needs, here a 8GiB one is created.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
||||
<note>
|
||||
<para>
|
||||
The swap partition size rules are no different than for other Linux
|
||||
@@ -188,13 +195,6 @@
|
||||
</note>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Finally, add the <emphasis>root</emphasis> partition. This will fill the
|
||||
remainder of the disk.
|
||||
<screen language="commands"># parted /dev/sda -- mkpart primary 8GiB -1s</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</para>
|
||||
|
||||
@@ -486,17 +486,17 @@ $ nix-env -i w3m</screen>
|
||||
<title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (MBR)</title>
|
||||
<screen language="commands">
|
||||
# parted /dev/sda -- mklabel msdos
|
||||
# parted /dev/sda -- mkpart primary linux-swap 1M 8GiB
|
||||
# parted /dev/sda -- mkpart primary 8GiB -1s</screen>
|
||||
# parted /dev/sda -- mkpart primary 1MiB -8GiB
|
||||
# parted /dev/sda -- mkpart primary linux-swap -8GiB 100%</screen>
|
||||
</example>
|
||||
|
||||
<example xml:id="ex-partition-scheme-UEFI">
|
||||
<title>Example partition schemes for NixOS on <filename>/dev/sda</filename> (UEFI)</title>
|
||||
<screen language="commands">
|
||||
# parted /dev/sda -- mklabel gpt
|
||||
# parted /dev/sda -- mkpart primary linux-swap 512MiB 8.5GiB
|
||||
# parted /dev/sda -- mkpart primary 8.5GiB -1MiB
|
||||
# parted /dev/sda -- mkpart ESP fat32 1M 512MiB
|
||||
# parted /dev/sda -- mkpart primary 512MiB -8GiB
|
||||
# parted /dev/sda -- mkpart primary linux-swap -8GiB 100%
|
||||
# parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
|
||||
# parted /dev/sda -- set 3 boot on</screen>
|
||||
</example>
|
||||
|
||||
|
||||
@@ -475,6 +475,48 @@ $ nix-instantiate -E '(import <nixpkgsunstable> {}).gitFull'
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Some licenses that were incorrectly not marked as unfree now are. This is
|
||||
the case for:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
cc-by-nc-sa-20: Creative Commons Attribution Non Commercial Share Alike
|
||||
2.0
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
cc-by-nc-sa-25: Creative Commons Attribution Non Commercial Share Alike
|
||||
2.5
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
cc-by-nc-sa-30: Creative Commons Attribution Non Commercial Share Alike
|
||||
3.0
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
cc-by-nc-sa-40: Creative Commons Attribution Non Commercial Share Alike
|
||||
4.0
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
cc-by-nd-30: Creative Commons Attribution-No Derivative Works v3.00
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
msrla: Microsoft Research License Agreement
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The deprecated <varname>services.cassandra</varname> module has seen a
|
||||
|
||||
@@ -26,9 +26,73 @@ let
|
||||
nvidia_libs32 = (nvidiaForKernel pkgs_i686.linuxPackages).override { libsOnly = true; kernel = null; };
|
||||
|
||||
enabled = nvidia_x11 != null;
|
||||
|
||||
cfg = config.hardware.nvidia;
|
||||
optimusCfg = cfg.optimus_prime;
|
||||
in
|
||||
|
||||
{
|
||||
options = {
|
||||
hardware.nvidia.modesetting.enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable kernel modesetting when using the NVIDIA proprietary driver.
|
||||
|
||||
Enabling this fixes screen tearing when using Optimus via PRIME (see
|
||||
<option>hardware.nvidia.optimus_prime.enable</option>. This is not enabled
|
||||
by default because it is not officially supported by NVIDIA and would not
|
||||
work with SLI.
|
||||
'';
|
||||
};
|
||||
|
||||
hardware.nvidia.optimus_prime.enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable NVIDIA Optimus support using the NVIDIA proprietary driver via PRIME.
|
||||
If enabled, the NVIDIA GPU will be always on and used for all rendering,
|
||||
while enabling output to displays attached only to the integrated Intel GPU
|
||||
without a multiplexer.
|
||||
|
||||
Note that this option only has any effect if the "nvidia" driver is specified
|
||||
in <option>services.xserver.videoDrivers</option>, and it should preferably
|
||||
be the only driver there.
|
||||
|
||||
If this is enabled, then the bus IDs of the NVIDIA and Intel GPUs have to be
|
||||
specified (<option>hardware.nvidia.optimus_prime.nvidiaBusId</option> and
|
||||
<option>hardware.nvidia.optimus_prime.intelBusId</option>).
|
||||
|
||||
If you enable this, you may want to also enable kernel modesetting for the
|
||||
NVIDIA driver (<option>hardware.nvidia.modesetting.enable</option>) in order
|
||||
to prevent tearing.
|
||||
|
||||
Note that this configuration will only be successful when a display manager
|
||||
for which the <option>services.xserver.displayManager.setupCommands</option>
|
||||
option is supported is used; notably, SLiM is not supported.
|
||||
'';
|
||||
};
|
||||
|
||||
hardware.nvidia.optimus_prime.nvidiaBusId = lib.mkOption {
|
||||
type = lib.types.string;
|
||||
default = "";
|
||||
example = "PCI:1:0:0";
|
||||
description = ''
|
||||
Bus ID of the NVIDIA GPU. You can find it using lspci; for example if lspci
|
||||
shows the NVIDIA GPU at "01:00.0", set this option to "PCI:1:0:0".
|
||||
'';
|
||||
};
|
||||
|
||||
hardware.nvidia.optimus_prime.intelBusId = lib.mkOption {
|
||||
type = lib.types.string;
|
||||
default = "";
|
||||
example = "PCI:0:2:0";
|
||||
description = ''
|
||||
Bus ID of the Intel GPU. You can find it using lspci; for example if lspci
|
||||
shows the Intel GPU at "00:02.0", set this option to "PCI:0:2:0".
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf enabled {
|
||||
assertions = [
|
||||
@@ -36,15 +100,61 @@ in
|
||||
assertion = config.services.xserver.displayManager.gdm.wayland;
|
||||
message = "NVidia drivers don't support wayland";
|
||||
}
|
||||
{
|
||||
assertion = !optimusCfg.enable ||
|
||||
(optimusCfg.nvidiaBusId != "" && optimusCfg.intelBusId != "");
|
||||
message = ''
|
||||
When NVIDIA Optimus via PRIME is enabled, the GPU bus IDs must configured.
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
services.xserver.drivers = singleton
|
||||
{ name = "nvidia"; modules = [ nvidia_x11.bin ]; libPath = [ nvidia_x11 ]; };
|
||||
# If Optimus/PRIME is enabled, we:
|
||||
# - Specify the configured NVIDIA GPU bus ID in the Device section for the
|
||||
# "nvidia" driver.
|
||||
# - Add the AllowEmptyInitialConfiguration option to the Screen section for the
|
||||
# "nvidia" driver, in order to allow the X server to start without any outputs.
|
||||
# - Add a separate Device section for the Intel GPU, using the "modesetting"
|
||||
# driver and with the configured BusID.
|
||||
# - Reference that Device section from the ServerLayout section as an inactive
|
||||
# device.
|
||||
# - Configure the display manager to run specific `xrandr` commands which will
|
||||
# configure/enable displays connected to the Intel GPU.
|
||||
|
||||
services.xserver.screenSection =
|
||||
services.xserver.drivers = singleton {
|
||||
name = "nvidia";
|
||||
modules = [ nvidia_x11.bin ];
|
||||
libPath = [ nvidia_x11 ];
|
||||
deviceSection = optionalString optimusCfg.enable
|
||||
''
|
||||
BusID "${optimusCfg.nvidiaBusId}"
|
||||
'';
|
||||
screenSection =
|
||||
''
|
||||
Option "RandRRotation" "on"
|
||||
${optionalString optimusCfg.enable "Option \"AllowEmptyInitialConfiguration\""}
|
||||
'';
|
||||
};
|
||||
|
||||
services.xserver.extraConfig = optionalString optimusCfg.enable
|
||||
''
|
||||
Option "RandRRotation" "on"
|
||||
Section "Device"
|
||||
Identifier "nvidia-optimus-intel"
|
||||
Driver "modesetting"
|
||||
BusID "${optimusCfg.intelBusId}"
|
||||
Option "AccelMethod" "none"
|
||||
EndSection
|
||||
'';
|
||||
services.xserver.serverLayoutSection = optionalString optimusCfg.enable
|
||||
''
|
||||
Inactive "nvidia-optimus-intel"
|
||||
'';
|
||||
|
||||
services.xserver.displayManager.setupCommands = optionalString optimusCfg.enable ''
|
||||
# Added by nvidia configuration module for Optimus/PRIME.
|
||||
${pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource modesetting NVIDIA-0
|
||||
${pkgs.xorg.xrandr}/bin/xrandr --auto
|
||||
'';
|
||||
|
||||
environment.etc."nvidia/nvidia-application-profiles-rc" = mkIf nvidia_x11.useProfiles {
|
||||
source = "${nvidia_x11.bin}/share/nvidia/nvidia-application-profiles-rc";
|
||||
@@ -62,6 +172,8 @@ in
|
||||
boot.kernelModules = [ "nvidia-uvm" ] ++
|
||||
lib.optionals config.services.xserver.enable [ "nvidia" "nvidia_modeset" "nvidia_drm" ];
|
||||
|
||||
# If requested enable modesetting via kernel parameter.
|
||||
boot.kernelParams = optional cfg.modesetting.enable "nvidia-drm.modeset=1";
|
||||
|
||||
# Create /dev/nvidia-uvm when the nvidia-uvm module is loaded.
|
||||
services.udev.extraRules =
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
# to be set.
|
||||
#
|
||||
# For further information please consult the documentation in the
|
||||
# upstream repository at: https://github.com/aprilabank/journaldriver/
|
||||
# upstream repository at: https://github.com/tazjin/journaldriver/
|
||||
|
||||
{ config, lib, pkgs, ...}:
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ in
|
||||
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = cfg.rspamd.enable;
|
||||
default = false;
|
||||
description = "Whether to run the rmilter daemon.";
|
||||
};
|
||||
|
||||
|
||||
@@ -399,8 +399,8 @@ in
|
||||
systemd.sockets.nix-daemon.wantedBy = [ "sockets.target" ];
|
||||
|
||||
systemd.services.nix-daemon =
|
||||
{ path = [ nix pkgs.utillinux ]
|
||||
++ optionals cfg.distributedBuilds [ config.programs.ssh.package pkgs.gzip ]
|
||||
{ path = [ nix pkgs.utillinux config.programs.ssh.package ]
|
||||
++ optionals cfg.distributedBuilds [ pkgs.gzip ]
|
||||
++ optionals (!isNix20) [ pkgs.openssl.bin ];
|
||||
|
||||
environment = cfg.envVars
|
||||
|
||||
@@ -5,7 +5,7 @@ with lib;
|
||||
let
|
||||
cfg = config.services.redmine;
|
||||
|
||||
bundle = "${pkgs.redmine}/share/redmine/bin/bundle";
|
||||
bundle = "${cfg.package}/share/redmine/bin/bundle";
|
||||
|
||||
databaseYml = pkgs.writeText "database.yml" ''
|
||||
production:
|
||||
@@ -15,6 +15,7 @@ let
|
||||
port: ${toString cfg.database.port}
|
||||
username: ${cfg.database.user}
|
||||
password: #dbpass#
|
||||
${optionalString (cfg.database.socket != null) "socket: ${cfg.database.socket}"}
|
||||
'';
|
||||
|
||||
configurationYml = pkgs.writeText "configuration.yml" ''
|
||||
@@ -29,6 +30,19 @@ let
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
|
||||
unpackTheme = unpack "theme";
|
||||
unpackPlugin = unpack "plugin";
|
||||
unpack = id: (name: source:
|
||||
pkgs.stdenv.mkDerivation {
|
||||
name = "redmine-${id}-${name}";
|
||||
buildInputs = [ pkgs.unzip ];
|
||||
buildCommand = ''
|
||||
mkdir -p $out
|
||||
cd $out
|
||||
unpackFile ${source}
|
||||
'';
|
||||
});
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
@@ -40,6 +54,14 @@ in
|
||||
description = "Enable the Redmine service.";
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.redmine;
|
||||
defaultText = "pkgs.redmine";
|
||||
description = "Which Redmine package to use.";
|
||||
example = "pkgs.redmine.override { ruby = pkgs.ruby_2_3; }";
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "redmine";
|
||||
@@ -52,6 +74,12 @@ in
|
||||
description = "Group under which Redmine is ran.";
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.int;
|
||||
default = 3000;
|
||||
description = "Port on which Redmine is ran.";
|
||||
};
|
||||
|
||||
stateDir = mkOption {
|
||||
type = types.str;
|
||||
default = "/var/lib/redmine";
|
||||
@@ -66,6 +94,41 @@ in
|
||||
|
||||
See https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration
|
||||
'';
|
||||
example = literalExample ''
|
||||
email_delivery:
|
||||
delivery_method: smtp
|
||||
smtp_settings:
|
||||
address: mail.example.com
|
||||
port: 25
|
||||
'';
|
||||
};
|
||||
|
||||
themes = mkOption {
|
||||
type = types.attrsOf types.path;
|
||||
default = {};
|
||||
description = "Set of themes.";
|
||||
example = literalExample ''
|
||||
{
|
||||
dkuk-redmine_alex_skin = builtins.fetchurl {
|
||||
url = https://bitbucket.org/dkuk/redmine_alex_skin/get/1842ef675ef3.zip;
|
||||
sha256 = "0hrin9lzyi50k4w2bd2b30vrf1i4fi1c0gyas5801wn8i7kpm9yl";
|
||||
};
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
plugins = mkOption {
|
||||
type = types.attrsOf types.path;
|
||||
default = {};
|
||||
description = "Set of plugins.";
|
||||
example = literalExample ''
|
||||
{
|
||||
redmine_env_auth = builtins.fetchurl {
|
||||
url = https://github.com/Intera/redmine_env_auth/archive/0.6.zip;
|
||||
sha256 = "0yyr1yjd8gvvh832wdc8m3xfnhhxzk2pk3gm2psg5w9jdvd6skak";
|
||||
};
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
database = {
|
||||
@@ -78,7 +141,7 @@ in
|
||||
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
default = "127.0.0.1";
|
||||
default = (if cfg.database.socket != null then "localhost" else "127.0.0.1");
|
||||
description = "Database host address.";
|
||||
};
|
||||
|
||||
@@ -119,6 +182,13 @@ in
|
||||
<option>database.user</option>.
|
||||
'';
|
||||
};
|
||||
|
||||
socket = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
example = "/run/mysqld/mysqld.sock";
|
||||
description = "Path to the unix socket file to use for authentication.";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -126,17 +196,20 @@ in
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
assertions = [
|
||||
{ assertion = cfg.database.passwordFile != null || cfg.database.password != "";
|
||||
message = "either services.redmine.database.passwordFile or services.redmine.database.password must be set";
|
||||
{ assertion = cfg.database.passwordFile != null || cfg.database.password != "" || cfg.database.socket != null;
|
||||
message = "one of services.redmine.database.socket, services.redmine.database.passwordFile, or services.redmine.database.password must be set";
|
||||
}
|
||||
{ assertion = cfg.database.socket != null -> (cfg.database.type == "mysql2");
|
||||
message = "Socket authentication is only available for the mysql2 database type";
|
||||
}
|
||||
];
|
||||
|
||||
environment.systemPackages = [ pkgs.redmine ];
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
systemd.services.redmine = {
|
||||
after = [ "network.target" (if cfg.database.type == "mysql2" then "mysql.service" else "postgresql.service") ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment.HOME = "${pkgs.redmine}/share/redmine";
|
||||
environment.HOME = "${cfg.package}/share/redmine";
|
||||
environment.RAILS_ENV = "production";
|
||||
environment.RAILS_CACHE = "${cfg.stateDir}/cache";
|
||||
environment.REDMINE_LANG = "en";
|
||||
@@ -151,43 +224,80 @@ in
|
||||
subversion
|
||||
];
|
||||
preStart = ''
|
||||
# start with a fresh config directory every time
|
||||
rm -rf ${cfg.stateDir}/config
|
||||
cp -r ${pkgs.redmine}/share/redmine/config.dist ${cfg.stateDir}/config
|
||||
# ensure cache directory exists for db:migrate command
|
||||
mkdir -p "${cfg.stateDir}/cache"
|
||||
|
||||
# create the basic state directory layout pkgs.redmine expects
|
||||
mkdir -p /run/redmine
|
||||
# create the basic directory layout the redmine package expects
|
||||
mkdir -p /run/redmine/public
|
||||
|
||||
for i in config files log plugins tmp; do
|
||||
mkdir -p ${cfg.stateDir}/$i
|
||||
ln -fs ${cfg.stateDir}/$i /run/redmine/$i
|
||||
mkdir -p "${cfg.stateDir}/$i"
|
||||
ln -fs "${cfg.stateDir}/$i" /run/redmine/
|
||||
done
|
||||
|
||||
# ensure cache directory exists for db:migrate command
|
||||
mkdir -p ${cfg.stateDir}/cache
|
||||
for i in plugin_assets themes; do
|
||||
mkdir -p "${cfg.stateDir}/public/$i"
|
||||
ln -fs "${cfg.stateDir}/public/$i" /run/redmine/public/
|
||||
done
|
||||
|
||||
|
||||
# start with a fresh config directory
|
||||
# the config directory is copied instead of linked as some mutable data is stored in there
|
||||
rm -rf "${cfg.stateDir}/config/"*
|
||||
cp -r ${cfg.package}/share/redmine/config.dist/* "${cfg.stateDir}/config/"
|
||||
|
||||
# link in the application configuration
|
||||
ln -fs ${configurationYml} ${cfg.stateDir}/config/configuration.yml
|
||||
ln -fs ${configurationYml} "${cfg.stateDir}/config/configuration.yml"
|
||||
|
||||
chmod -R ug+rwX,o-rwx+x ${cfg.stateDir}/
|
||||
|
||||
# handle database.passwordFile
|
||||
# link in all user specified themes
|
||||
rm -rf "${cfg.stateDir}/public/themes/"*
|
||||
for theme in ${concatStringsSep " " (mapAttrsToList unpackTheme cfg.themes)}; do
|
||||
ln -fs $theme/* "${cfg.stateDir}/public/themes"
|
||||
done
|
||||
|
||||
# link in redmine provided themes
|
||||
ln -sf ${cfg.package}/share/redmine/public/themes.dist/* "${cfg.stateDir}/public/themes/"
|
||||
|
||||
|
||||
# link in all user specified plugins
|
||||
rm -rf "${cfg.stateDir}/plugins/"*
|
||||
for plugin in ${concatStringsSep " " (mapAttrsToList unpackPlugin cfg.plugins)}; do
|
||||
ln -fs $plugin/* "${cfg.stateDir}/plugins/''${plugin##*-redmine-plugin-}"
|
||||
done
|
||||
|
||||
|
||||
# ensure correct permissions for most files
|
||||
chmod -R ug+rwX,o-rwx+x "${cfg.stateDir}/"
|
||||
|
||||
|
||||
# handle database.passwordFile & permissions
|
||||
DBPASS=$(head -n1 ${cfg.database.passwordFile})
|
||||
cp -f ${databaseYml} ${cfg.stateDir}/config/database.yml
|
||||
sed -e "s,#dbpass#,$DBPASS,g" -i ${cfg.stateDir}/config/database.yml
|
||||
chmod 440 ${cfg.stateDir}/config/database.yml
|
||||
cp -f ${databaseYml} "${cfg.stateDir}/config/database.yml"
|
||||
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
|
||||
chmod 440 "${cfg.stateDir}/config/database.yml"
|
||||
|
||||
|
||||
# generate a secret token if required
|
||||
if ! test -e "${cfg.stateDir}/config/initializers/secret_token.rb"; then
|
||||
${bundle} exec rake generate_secret_token
|
||||
chmod 440 ${cfg.stateDir}/config/initializers/secret_token.rb
|
||||
chmod 440 "${cfg.stateDir}/config/initializers/secret_token.rb"
|
||||
fi
|
||||
|
||||
# ensure everything is owned by ${cfg.user}
|
||||
chown -R ${cfg.user}:${cfg.group} ${cfg.stateDir}
|
||||
|
||||
${bundle} exec rake db:migrate
|
||||
${bundle} exec rake redmine:load_default_data
|
||||
# ensure everything is owned by ${cfg.user}
|
||||
chown -R ${cfg.user}:${cfg.group} "${cfg.stateDir}"
|
||||
|
||||
|
||||
# execute redmine required commands prior to starting the application
|
||||
# NOTE: su required in case using mysql socket authentication
|
||||
/run/wrappers/bin/su -s ${pkgs.bash}/bin/bash -m -l redmine -c '${bundle} exec rake db:migrate'
|
||||
/run/wrappers/bin/su -s ${pkgs.bash}/bin/bash -m -l redmine -c '${bundle} exec rake redmine:load_default_data'
|
||||
|
||||
|
||||
# log files don't exist until after first command has been executed
|
||||
# correct ownership of files generated by calling exec rake ...
|
||||
chown -R ${cfg.user}:${cfg.group} "${cfg.stateDir}/log"
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
@@ -196,13 +306,13 @@ in
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
TimeoutSec = "300";
|
||||
WorkingDirectory = "${pkgs.redmine}/share/redmine";
|
||||
ExecStart="${bundle} exec rails server webrick -e production -P ${cfg.stateDir}/redmine.pid";
|
||||
WorkingDirectory = "${cfg.package}/share/redmine";
|
||||
ExecStart="${bundle} exec rails server webrick -e production -p ${toString cfg.port} -P '${cfg.stateDir}/redmine.pid'";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
users.extraUsers = optionalAttrs (cfg.user == "redmine") (singleton
|
||||
users.users = optionalAttrs (cfg.user == "redmine") (singleton
|
||||
{ name = "redmine";
|
||||
group = cfg.group;
|
||||
home = cfg.stateDir;
|
||||
@@ -210,7 +320,7 @@ in
|
||||
uid = config.ids.uids.redmine;
|
||||
});
|
||||
|
||||
users.extraGroups = optionalAttrs (cfg.group == "redmine") (singleton
|
||||
users.groups = optionalAttrs (cfg.group == "redmine") (singleton
|
||||
{ name = "redmine";
|
||||
gid = config.ids.gids.redmine;
|
||||
});
|
||||
|
||||
@@ -123,15 +123,13 @@ let
|
||||
systemd.services."prometheus-${name}-exporter" = mkMerge ([{
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
serviceConfig = {
|
||||
Restart = mkDefault "always";
|
||||
PrivateTmp = mkDefault true;
|
||||
WorkingDirectory = mkDefault /tmp;
|
||||
} // mkIf (!(serviceOpts.serviceConfig.DynamicUser or false)) {
|
||||
User = conf.user;
|
||||
Group = conf.group;
|
||||
};
|
||||
} serviceOpts ]);
|
||||
serviceConfig.Restart = mkDefault "always";
|
||||
serviceConfig.PrivateTmp = mkDefault true;
|
||||
serviceConfig.WorkingDirectory = mkDefault /tmp;
|
||||
} serviceOpts ] ++ optional (serviceOpts.serviceConfig.DynamicUser or false) {
|
||||
serviceConfig.User = conf.user;
|
||||
serviceConfig.Group = conf.group;
|
||||
});
|
||||
};
|
||||
in
|
||||
{
|
||||
@@ -172,5 +170,8 @@ in
|
||||
}) exporterOpts)
|
||||
);
|
||||
|
||||
meta.doc = ./exporters.xml;
|
||||
meta = {
|
||||
doc = ./exporters.xml;
|
||||
maintainers = [ maintainers.willibutz ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -69,6 +69,7 @@ in
|
||||
path = [ pkgs.varnish ];
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
RestartSec = mkDefault 1;
|
||||
ExecStart = ''
|
||||
${pkgs.prometheus-varnish-exporter}/bin/prometheus_varnish_exporter \
|
||||
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
|
||||
|
||||
@@ -132,7 +132,6 @@ in {
|
||||
|
||||
fonts.fonts = [ pkgs.dejavu_fonts pkgs.cantarell-fonts ];
|
||||
|
||||
services.xserver.displayManager.gdm.enable = mkDefault true;
|
||||
services.xserver.displayManager.extraSessionFilePackages = [ pkgs.gnome3.gnome-session ];
|
||||
|
||||
services.xserver.displayManager.sessionCommands = ''
|
||||
|
||||
@@ -222,6 +222,17 @@ in
|
||||
description = "List of arguments for the X server.";
|
||||
};
|
||||
|
||||
setupCommands = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = ''
|
||||
Shell commands executed just after the X server has started.
|
||||
|
||||
This option is only effective for display managers for which this feature
|
||||
is supported; currently these are LightDM, GDM and SDDM.
|
||||
'';
|
||||
};
|
||||
|
||||
sessionCommands = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
|
||||
@@ -7,6 +7,13 @@ let
|
||||
cfg = config.services.xserver.displayManager;
|
||||
gdm = pkgs.gnome3.gdm;
|
||||
|
||||
xSessionWrapper = if (cfg.setupCommands == "") then null else
|
||||
pkgs.writeScript "gdm-x-session-wrapper" ''
|
||||
#!${pkgs.bash}/bin/bash
|
||||
${cfg.setupCommands}
|
||||
exec "$@"
|
||||
'';
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
@@ -112,6 +119,11 @@ in
|
||||
GDM_SESSIONS_DIR = "${cfg.session.desktops}/share/xsessions";
|
||||
# Find the mouse
|
||||
XCURSOR_PATH = "~/.icons:${pkgs.gnome3.adwaita-icon-theme}/share/icons";
|
||||
} // optionalAttrs (xSessionWrapper != null) {
|
||||
# Make GDM use this wrapper before running the session, which runs the
|
||||
# configured setupCommands. This relies on a patched GDM which supports
|
||||
# this environment variable.
|
||||
GDM_X_SESSION_WRAPPER = "${xSessionWrapper}";
|
||||
};
|
||||
execCmd = "exec ${gdm}/bin/gdm";
|
||||
};
|
||||
|
||||
@@ -61,6 +61,12 @@ let
|
||||
${optionalString hasDefaultUserSession ''
|
||||
user-session=${defaultSessionName}
|
||||
''}
|
||||
${optionalString (dmcfg.setupCommands != "") ''
|
||||
display-setup-script=${pkgs.writeScript "lightdm-display-setup" ''
|
||||
#!${pkgs.bash}/bin/bash
|
||||
${dmcfg.setupCommands}
|
||||
''}
|
||||
''}
|
||||
${cfg.extraSeatDefaults}
|
||||
'';
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ let
|
||||
Xsetup = pkgs.writeScript "Xsetup" ''
|
||||
#!/bin/sh
|
||||
${cfg.setupScript}
|
||||
${dmcfg.setupCommands}
|
||||
'';
|
||||
|
||||
Xstop = pkgs.writeScript "Xstop" ''
|
||||
@@ -137,7 +138,8 @@ in
|
||||
xrandr --auto
|
||||
'';
|
||||
description = ''
|
||||
A script to execute when starting the display server.
|
||||
A script to execute when starting the display server. DEPRECATED, please
|
||||
use <option>services.xserver.displayManager.setupCommands</option>.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -374,6 +374,12 @@ in
|
||||
description = "Contents of the first Monitor section of the X server configuration file.";
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = "Additional contents (sections) included in the X server configuration file";
|
||||
};
|
||||
|
||||
xrandrHeads = mkOption {
|
||||
default = [];
|
||||
example = [
|
||||
@@ -754,6 +760,7 @@ in
|
||||
Driver "${driver.driverName or driver.name}"
|
||||
${if cfg.useGlamor then ''Option "AccelMethod" "glamor"'' else ""}
|
||||
${cfg.deviceSection}
|
||||
${driver.deviceSection or ""}
|
||||
${xrandrDeviceSection}
|
||||
EndSection
|
||||
|
||||
@@ -765,6 +772,7 @@ in
|
||||
''}
|
||||
|
||||
${cfg.screenSection}
|
||||
${driver.screenSection or ""}
|
||||
|
||||
${optionalString (cfg.defaultDepth != 0) ''
|
||||
DefaultDepth ${toString cfg.defaultDepth}
|
||||
@@ -794,6 +802,8 @@ in
|
||||
'')}
|
||||
|
||||
${xrandrMonitorSections}
|
||||
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
|
||||
fonts.enableDefaultFonts = mkDefault true;
|
||||
|
||||
@@ -251,9 +251,9 @@ let
|
||||
postInstall = ''
|
||||
echo checking syntax
|
||||
# check both with bash
|
||||
${pkgs.bash}/bin/sh -n $target
|
||||
${pkgs.buildPackages.bash}/bin/sh -n $target
|
||||
# and with ash shell, just in case
|
||||
${extraUtils}/bin/ash -n $target
|
||||
${pkgs.buildPackages.busybox}/bin/ash -n $target
|
||||
'';
|
||||
|
||||
inherit udevRules extraUtils modulesClosure;
|
||||
|
||||
@@ -85,7 +85,8 @@ let
|
||||
after = [ "network-pre.target" "systemd-udevd.service" "systemd-sysctl.service" ];
|
||||
before = [ "network.target" "shutdown.target" ];
|
||||
wants = [ "network.target" ];
|
||||
partOf = map (i: "network-addresses-${i.name}.service") interfaces;
|
||||
# exclude bridges from the partOf relationship to fix container networking bug #47210
|
||||
partOf = map (i: "network-addresses-${i.name}.service") (filter (i: !(hasAttr i.name cfg.bridges)) interfaces);
|
||||
conflicts = [ "shutdown.target" ];
|
||||
wantedBy = [ "multi-user.target" ] ++ optional hasDefaultGatewaySet "network-online.target";
|
||||
|
||||
|
||||
@@ -22,6 +22,13 @@ with lib;
|
||||
# Not supported in systemd-nspawn containers.
|
||||
security.audit.enable = false;
|
||||
|
||||
# Make sure that root user in container will talk to host nix-daemon
|
||||
environment.etc."profile".text = ''
|
||||
export NIX_REMOTE=daemon
|
||||
'';
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -257,5 +257,22 @@ let self = {
|
||||
"18.03".sa-east-1.hvm-ebs = "ami-163e1f7a";
|
||||
"18.03".ap-south-1.hvm-ebs = "ami-6a390b05";
|
||||
|
||||
latest = self."18.03";
|
||||
# 18.09.910.c15e342304a
|
||||
"18.09".eu-west-1.hvm-ebs = "ami-0f412186fb8a0ec97";
|
||||
"18.09".eu-west-2.hvm-ebs = "ami-0dada3805ce43c55e";
|
||||
"18.09".eu-west-3.hvm-ebs = "ami-074df85565f2e02e2";
|
||||
"18.09".eu-central-1.hvm-ebs = "ami-07c9b884e679df4f8";
|
||||
"18.09".us-east-1.hvm-ebs = "ami-009c9c3f1af480ff3";
|
||||
"18.09".us-east-2.hvm-ebs = "ami-08199961085ea8bc6";
|
||||
"18.09".us-west-1.hvm-ebs = "ami-07aa7f56d612ddd38";
|
||||
"18.09".us-west-2.hvm-ebs = "ami-01c84b7c368ac24d1";
|
||||
"18.09".ca-central-1.hvm-ebs = "ami-04f66113f76198f6c";
|
||||
"18.09".ap-southeast-1.hvm-ebs = "ami-0892c7e24ebf2194f";
|
||||
"18.09".ap-southeast-2.hvm-ebs = "ami-010730f36424b0a2c";
|
||||
"18.09".ap-northeast-1.hvm-ebs = "ami-0cdba8e998f076547";
|
||||
"18.09".ap-northeast-2.hvm-ebs = "ami-0400a698e6a9f4a15";
|
||||
"18.09".sa-east-1.hvm-ebs = "ami-0e4a8a47fd6db6112";
|
||||
"18.09".ap-south-1.hvm-ebs = "ami-0880a678d3f555313";
|
||||
|
||||
latest = self."18.09";
|
||||
}; in self
|
||||
|
||||
@@ -385,12 +385,14 @@ in rec {
|
||||
tests.predictable-interface-names = callSubTests tests/predictable-interface-names.nix {};
|
||||
tests.printing = callTest tests/printing.nix {};
|
||||
tests.prometheus = callTest tests/prometheus.nix {};
|
||||
tests.prometheus-exporters = callTest tests/prometheus-exporters.nix {};
|
||||
tests.prosody = callTest tests/prosody.nix {};
|
||||
tests.proxy = callTest tests/proxy.nix {};
|
||||
tests.quagga = callTest tests/quagga.nix {};
|
||||
tests.quake3 = callTest tests/quake3.nix {};
|
||||
tests.rabbitmq = callTest tests/rabbitmq.nix {};
|
||||
tests.radicale = callTest tests/radicale.nix {};
|
||||
tests.redmine = callTest tests/redmine.nix {};
|
||||
tests.rspamd = callSubTests tests/rspamd.nix {};
|
||||
tests.runInMachine = callTest tests/run-in-machine.nix {};
|
||||
tests.rxe = callTest tests/rxe.nix {};
|
||||
|
||||
@@ -86,6 +86,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
# Execute commands via the root shell.
|
||||
$machine->succeed("nixos-container run $id1 -- uname") =~ /Linux/ or die;
|
||||
|
||||
# Execute a nix command via the root shell. (regression test for #40355)
|
||||
$machine->succeed("nixos-container run $id1 -- nix-instantiate -E 'derivation { name = \"empty\"; builder = \"false\"; system = \"false\"; }'");
|
||||
|
||||
# Stop and start (regression test for #4989)
|
||||
$machine->succeed("nixos-container stop $id1");
|
||||
$machine->succeed("nixos-container start $id1");
|
||||
|
||||
297
nixos/tests/prometheus-exporters.nix
Normal file
297
nixos/tests/prometheus-exporters.nix
Normal file
@@ -0,0 +1,297 @@
|
||||
import ./make-test.nix ({ lib, pkgs, ... }:
|
||||
let
|
||||
escape' = str: lib.replaceChars [''"'' "$" "\n"] [''\\\"'' "\\$" ""] str;
|
||||
|
||||
/*
|
||||
* The attrset `exporterTests` contains one attribute
|
||||
* for each exporter test. Each of these attributes
|
||||
* is expected to be an attrset containing:
|
||||
*
|
||||
* `exporterConfig`:
|
||||
* this attribute set contains config for the exporter itself
|
||||
*
|
||||
* `exporterTest`
|
||||
* this attribute set contains test instructions
|
||||
*
|
||||
* `metricProvider` (optional)
|
||||
* this attribute contains additional machine config
|
||||
*
|
||||
* Example:
|
||||
* exporterTests.<exporterName> = {
|
||||
* exporterConfig = {
|
||||
* enable = true;
|
||||
* };
|
||||
* metricProvider = {
|
||||
* services.<metricProvider>.enable = true;
|
||||
* };
|
||||
* exporterTest = ''
|
||||
* waitForUnit("prometheus-<exporterName>-exporter.service");
|
||||
* waitForOpenPort("1234");
|
||||
* succeed("curl -sSf 'localhost:1234/metrics'");
|
||||
* '';
|
||||
* };
|
||||
*
|
||||
* # this would generate the following test config:
|
||||
*
|
||||
* nodes.<exporterName> = {
|
||||
* services.prometheus.<exporterName> = {
|
||||
* enable = true;
|
||||
* };
|
||||
* services.<metricProvider>.enable = true;
|
||||
* };
|
||||
*
|
||||
* testScript = ''
|
||||
* $<exporterName>->start();
|
||||
* $<exporterName>->waitForUnit("prometheus-<exporterName>-exporter.service");
|
||||
* $<exporterName>->waitForOpenPort("1234");
|
||||
* $<exporterName>->succeed("curl -sSf 'localhost:1234/metrics'");
|
||||
* $<exporterName>->shutdown();
|
||||
* '';
|
||||
*/
|
||||
|
||||
exporterTests = {
|
||||
|
||||
blackbox = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
configFile = pkgs.writeText "config.yml" (builtins.toJSON {
|
||||
modules.icmp_v6 = {
|
||||
prober = "icmp";
|
||||
icmp.preferred_ip_protocol = "ip6";
|
||||
};
|
||||
});
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("prometheus-blackbox-exporter.service");
|
||||
waitForOpenPort(9115);
|
||||
succeed("curl -sSf 'http://localhost:9115/probe?target=localhost&module=icmp_v6' | grep -q 'probe_success 1'");
|
||||
'';
|
||||
};
|
||||
|
||||
collectd = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
extraFlags = [ "--web.collectd-push-path /collectd" ];
|
||||
};
|
||||
exporterTest =let postData = escape' ''
|
||||
[{
|
||||
"values":[23],
|
||||
"dstypes":["gauge"],
|
||||
"type":"gauge",
|
||||
"interval":1000,
|
||||
"host":"testhost",
|
||||
"plugin":"testplugin",
|
||||
"time":$(date +%s)
|
||||
}]
|
||||
''; in ''
|
||||
waitForUnit("prometheus-collectd-exporter.service");
|
||||
waitForOpenPort(9103);
|
||||
succeed("curl -sSfH 'Content-Type: application/json' -X POST --data \"${postData}\" localhost:9103/collectd");
|
||||
succeed("curl -sSf localhost:9103/metrics | grep -q 'collectd_testplugin_gauge{instance=\"testhost\"} 23'");
|
||||
'';
|
||||
};
|
||||
|
||||
dnsmasq = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
leasesPath = "/var/lib/dnsmasq/dnsmasq.leases";
|
||||
};
|
||||
metricProvider = {
|
||||
services.dnsmasq.enable = true;
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("prometheus-dnsmasq-exporter.service");
|
||||
waitForOpenPort(9153);
|
||||
succeed("curl -sSf http://localhost:9153/metrics | grep -q 'dnsmasq_leases 0'");
|
||||
'';
|
||||
};
|
||||
|
||||
dovecot = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
scopes = [ "global" ];
|
||||
socketPath = "/var/run/dovecot2/old-stats";
|
||||
user = "root"; # <- don't use user root in production
|
||||
};
|
||||
metricProvider = {
|
||||
services.dovecot2.enable = true;
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("prometheus-dovecot-exporter.service");
|
||||
waitForOpenPort(9166);
|
||||
succeed("curl -sSf http://localhost:9166/metrics | grep -q 'dovecot_up{scope=\"global\"} 1'");
|
||||
'';
|
||||
};
|
||||
|
||||
fritzbox = { # TODO add proper test case
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("prometheus-fritzbox-exporter.service");
|
||||
waitForOpenPort(9133);
|
||||
succeed("curl -sSf http://localhost:9133/metrics | grep -q 'fritzbox_exporter_collect_errors 0'");
|
||||
'';
|
||||
};
|
||||
|
||||
json = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
url = "http://localhost";
|
||||
configFile = pkgs.writeText "json-exporter-conf.json" (builtins.toJSON [{
|
||||
name = "json_test_metric";
|
||||
path = "$.test";
|
||||
}]);
|
||||
};
|
||||
metricProvider = {
|
||||
systemd.services.prometheus-json-exporter.after = [ "nginx.service" ];
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
virtualHosts.localhost.locations."/".extraConfig = ''
|
||||
return 200 "{\"test\":1}";
|
||||
'';
|
||||
};
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("nginx.service");
|
||||
waitForOpenPort(80);
|
||||
waitForUnit("prometheus-json-exporter.service");
|
||||
waitForOpenPort(7979);
|
||||
succeed("curl -sSf localhost:7979/metrics | grep -q 'json_test_metric 1'");
|
||||
'';
|
||||
};
|
||||
|
||||
nginx = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
};
|
||||
metricProvider = {
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
statusPage = true;
|
||||
virtualHosts."/".extraConfig = "return 204;";
|
||||
};
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("nginx.service")
|
||||
waitForUnit("prometheus-nginx-exporter.service")
|
||||
waitForOpenPort(9113)
|
||||
succeed("curl -sSf http://localhost:9113/metrics | grep -q 'nginx_up 1'")
|
||||
'';
|
||||
};
|
||||
|
||||
node = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("prometheus-node-exporter.service");
|
||||
waitForOpenPort(9100);
|
||||
succeed("curl -sSf http://localhost:9100/metrics | grep -q 'node_exporter_build_info{.\\+} 1'");
|
||||
'';
|
||||
};
|
||||
|
||||
postfix = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
};
|
||||
metricProvider = {
|
||||
services.postfix.enable = true;
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("prometheus-postfix-exporter.service");
|
||||
waitForOpenPort(9154);
|
||||
succeed("curl -sSf http://localhost:9154/metrics | grep -q 'postfix_smtpd_connects_total 0'");
|
||||
'';
|
||||
};
|
||||
|
||||
snmp = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
configuration.default = {
|
||||
version = 2;
|
||||
auth.community = "public";
|
||||
};
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("prometheus-snmp-exporter.service");
|
||||
waitForOpenPort(9116);
|
||||
succeed("curl -sSf localhost:9116/metrics | grep -q 'snmp_request_errors_total 0'");
|
||||
'';
|
||||
};
|
||||
|
||||
surfboard = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
modemAddress = "localhost";
|
||||
};
|
||||
metricProvider = {
|
||||
systemd.services.prometheus-surfboard-exporter.after = [ "nginx.service" ];
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
virtualHosts.localhost.locations."/cgi-bin/status".extraConfig = ''
|
||||
return 204;
|
||||
'';
|
||||
};
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("nginx.service");
|
||||
waitForOpenPort(80);
|
||||
waitForUnit("prometheus-surfboard-exporter.service");
|
||||
waitForOpenPort(9239);
|
||||
succeed("curl -sSf localhost:9239/metrics | grep -q 'surfboard_up 1'");
|
||||
'';
|
||||
};
|
||||
|
||||
varnish = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
instance = "/var/spool/varnish/varnish";
|
||||
group = "varnish";
|
||||
};
|
||||
metricProvider = {
|
||||
systemd.services.prometheus-varnish-exporter.after = [
|
||||
"varnish.service"
|
||||
];
|
||||
services.varnish = {
|
||||
enable = true;
|
||||
config = ''
|
||||
vcl 4.0;
|
||||
backend default {
|
||||
.host = "127.0.0.1";
|
||||
.port = "80";
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
exporterTest = ''
|
||||
waitForUnit("prometheus-varnish-exporter.service");
|
||||
waitForOpenPort(9131);
|
||||
succeed("curl -sSf http://localhost:9131/metrics | grep -q 'varnish_up 1'");
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
nodes = lib.mapAttrs (exporter: testConfig: lib.mkMerge [{
|
||||
services.prometheus.exporters.${exporter} = testConfig.exporterConfig;
|
||||
} testConfig.metricProvider or {}]) exporterTests;
|
||||
|
||||
testScript = lib.concatStrings (lib.mapAttrsToList (exporter: testConfig: (''
|
||||
subtest "${exporter}", sub {
|
||||
${"$"+exporter}->start();
|
||||
${lib.concatStringsSep " " (map (line: ''
|
||||
${"$"+exporter}->${line};
|
||||
'') (lib.splitString "\n" (lib.removeSuffix "\n" testConfig.exporterTest)))}
|
||||
${"$"+exporter}->shutdown();
|
||||
};
|
||||
'')) exporterTests);
|
||||
in
|
||||
{
|
||||
name = "prometheus-exporters";
|
||||
|
||||
inherit nodes testScript;
|
||||
|
||||
meta = with lib.maintainers; {
|
||||
maintainers = [ willibutz ];
|
||||
};
|
||||
})
|
||||
40
nixos/tests/redmine.nix
Normal file
40
nixos/tests/redmine.nix
Normal file
@@ -0,0 +1,40 @@
|
||||
import ./make-test.nix ({ pkgs, lib, ... }:
|
||||
{
|
||||
name = "redmine";
|
||||
meta.maintainers = [ lib.maintainers.aanderse ];
|
||||
|
||||
machine =
|
||||
{ config, pkgs, ... }:
|
||||
{ services.mysql.enable = true;
|
||||
services.mysql.package = pkgs.mariadb;
|
||||
services.mysql.ensureDatabases = [ "redmine" ];
|
||||
services.mysql.ensureUsers = [
|
||||
{ name = "redmine";
|
||||
ensurePermissions = { "redmine.*" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
|
||||
services.redmine.enable = true;
|
||||
services.redmine.database.socket = "/run/mysqld/mysqld.sock";
|
||||
services.redmine.plugins = {
|
||||
redmine_env_auth = pkgs.fetchurl {
|
||||
url = https://github.com/Intera/redmine_env_auth/archive/0.6.zip;
|
||||
sha256 = "0yyr1yjd8gvvh832wdc8m3xfnhhxzk2pk3gm2psg5w9jdvd6skak";
|
||||
};
|
||||
};
|
||||
services.redmine.themes = {
|
||||
dkuk-redmine_alex_skin = pkgs.fetchurl {
|
||||
url = https://bitbucket.org/dkuk/redmine_alex_skin/get/1842ef675ef3.zip;
|
||||
sha256 = "0hrin9lzyi50k4w2bd2b30vrf1i4fi1c0gyas5801wn8i7kpm9yl";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
|
||||
$machine->waitForUnit('redmine.service');
|
||||
$machine->waitForOpenPort('3000');
|
||||
$machine->succeed("curl --fail http://localhost:3000/");
|
||||
'';
|
||||
})
|
||||
@@ -126,6 +126,9 @@ stdenv.mkDerivation {
|
||||
--prefix LD_LIBRARY_PATH : "$librarypath" \
|
||||
--prefix PATH : "${gnome3.zenity}/bin"
|
||||
|
||||
# fix Icon line in the desktop file (#48062)
|
||||
sed -i "s:^Icon=.*:Icon=spotify-client:" "$out/share/spotify/spotify.desktop"
|
||||
|
||||
# Desktop file
|
||||
mkdir -p "$out/share/applications/"
|
||||
cp "$out/share/spotify/spotify.desktop" "$out/share/applications/"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ stdenv, fetchgit, autoconf, automake, libtool, gtk2, pkgconfig, perl,
|
||||
perlXMLParser, libxml2, gettext, python, libxml2Python, docbook5, docbook_xsl,
|
||||
libxslt, intltool, libart_lgpl, withGNOME ? false, libgnomeui, hicolor-icon-theme,
|
||||
gtk-mac-integration }:
|
||||
gtk-mac-integration-gtk2 }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dia-${version}";
|
||||
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
|
||||
[ gtk2 perlXMLParser libxml2 gettext python libxml2Python docbook5
|
||||
libxslt docbook_xsl libart_lgpl hicolor-icon-theme ]
|
||||
++ stdenv.lib.optional withGNOME libgnomeui
|
||||
++ stdenv.lib.optional stdenv.isDarwin gtk-mac-integration;
|
||||
++ stdenv.lib.optional stdenv.isDarwin gtk-mac-integration-gtk2;
|
||||
|
||||
nativeBuildInputs = [ autoconf automake libtool pkgconfig intltool perl ];
|
||||
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
, libqtav
|
||||
, libusb1
|
||||
, marble
|
||||
, libGLU_combined
|
||||
, libGL
|
||||
, libGLU
|
||||
, opencv3
|
||||
, pcre
|
||||
, threadweaver
|
||||
@@ -75,7 +76,8 @@ mkDerivation rec {
|
||||
liblqr1
|
||||
libqtav
|
||||
libusb1
|
||||
libGLU_combined
|
||||
libGL
|
||||
libGLU
|
||||
opencv3
|
||||
pcre
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
mkDerivation {
|
||||
name = "marble";
|
||||
meta.license = with lib.licenses; [ lgpl21 gpl3 ];
|
||||
outputs = [ "out" "dev" ];
|
||||
nativeBuildInputs = [ extra-cmake-modules kdoctools perl ];
|
||||
propagatedBuildInputs = [
|
||||
qtscript qtsvg qtquickcontrols qtwebkit shared-mime-info krunner kparts
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ stdenv,
|
||||
lib,
|
||||
fetchgit,
|
||||
fetchFromGitHub,
|
||||
rustPlatform,
|
||||
cmake,
|
||||
makeWrapper,
|
||||
@@ -51,18 +51,16 @@ let
|
||||
];
|
||||
in buildRustPackage rec {
|
||||
name = "alacritty-unstable-${version}";
|
||||
version = "0.2.0";
|
||||
version = "0.2.1";
|
||||
|
||||
# At the moment we cannot handle git dependencies in buildRustPackage.
|
||||
# This fork only replaces rust-fontconfig/libfontconfig with a git submodules.
|
||||
src = fetchgit {
|
||||
url = https://github.com/Mic92/alacritty.git;
|
||||
rev = "rev-${version}";
|
||||
sha256 = "1c9izflacm693rwkxwakxgnpkvxwc8mqasr5p7x0ys6xg91h9sxn";
|
||||
fetchSubmodules = true;
|
||||
src = fetchFromGitHub {
|
||||
owner = "jwilm";
|
||||
repo = "alacritty";
|
||||
rev = "v${version}";
|
||||
sha256 = "1402axwjz70gg6ylhhm82f1rl6xvxkr1qy0jx3r4r32vzfap1l67";
|
||||
};
|
||||
|
||||
cargoSha256 = "1ijgkwv9ij4haig1h6n2b9xbhp5vahy9vp1sx72wxaaj9476msjx";
|
||||
cargoSha256 = "0slcyn77svj0686g1vk7kgndzirpkba9jwwybgsdl755r53dswk0";
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dbeaver-ce-${version}";
|
||||
version = "5.2.1";
|
||||
version = "5.2.2";
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
name = "dbeaver";
|
||||
@@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dbeaver.io/files/${version}/dbeaver-ce-${version}-linux.gtk.x86_64.tar.gz";
|
||||
sha256 = "0zm320cdpypv2s58gcg89mdkir9xpz1824dscfqkmahx89g1ma81";
|
||||
sha256 = "1rrj0c7ksvv9irsz9hb4ip30qgmzps4dy1nj4vl8mzzf389xa43n";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
|
||||
@@ -98,11 +98,11 @@ let
|
||||
|
||||
flash = stdenv.mkDerivation rec {
|
||||
name = "flashplayer-ppapi-${version}";
|
||||
version = "31.0.0.108";
|
||||
version = "31.0.0.122";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/${version}/flash_player_ppapi_linux.x86_64.tar.gz";
|
||||
sha256 = "0dcwyx0fp7wbsx0cyi7xpwq0nnvcvkzfgi6zyy75487820ssc4h1";
|
||||
sha256 = "16cx92lq7zx8k22mfnsfjj09kyh3fi266qc5vvjz5b2rj53rmkdg";
|
||||
stripRoot = false;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
# This file is autogenerated from update.sh in the same directory.
|
||||
{
|
||||
beta = {
|
||||
sha256 = "0i3iz6c05ykqxbq58sx954nky0gd0schl7ik2r56p3jqsk8cfnhn";
|
||||
sha256bin64 = "03k5y1nyzx26mxwxmdijkl2kj49vm5vhbxhakfxxjg3r1v0rsqrs";
|
||||
version = "69.0.3497.81";
|
||||
sha256 = "16biicw86mnjrmjazfbml2pf4rykhbvsz854cyfnpjhcvmlh24jp";
|
||||
sha256bin64 = "07jr1sqsxfdy3rymylkbpbgi79j9b2pax4igdzj943d0nbka84y5";
|
||||
version = "70.0.3538.35";
|
||||
};
|
||||
dev = {
|
||||
sha256 = "1lx6dfd6w675b4kyrci8ikc8rfmjc1aqmm7bimxp3h4p97j5wml1";
|
||||
sha256bin64 = "0fsxj9h25glp3akw0x2rc488w5zr5v5yvl6ry7fy8w70fqgynffj";
|
||||
version = "70.0.3538.9";
|
||||
sha256 = "0fmkhvvydinv5f543n7rrmsv99rf0skwwhlpmszvspx6y4wz9smv";
|
||||
sha256bin64 = "0plr8ph78kfg2dpyacjy3aw3msfif95fqpb8xx0n8whkkpbl9968";
|
||||
version = "71.0.3559.6";
|
||||
};
|
||||
stable = {
|
||||
sha256 = "0i3iz6c05ykqxbq58sx954nky0gd0schl7ik2r56p3jqsk8cfnhn";
|
||||
sha256bin64 = "1f3shb85jynxq37vjxxkkxrjayqgvpss1zws5i28x6i9nygfzay7";
|
||||
version = "69.0.3497.81";
|
||||
sha256 = "0dcyzsb70ssx5hd2b25ab3ydpqh7crhxab9zzi5gn99ywxh1afg3";
|
||||
sha256bin64 = "0w56k7hmdi9knjaw67kdmyz0fdkjmk2ldh2n4l1c6szkr66vq30q";
|
||||
version = "69.0.3497.100";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ let
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "flashplayer-${version}";
|
||||
version = "31.0.0.108";
|
||||
version = "31.0.0.122";
|
||||
|
||||
src = fetchurl {
|
||||
url =
|
||||
@@ -84,14 +84,14 @@ stdenv.mkDerivation rec {
|
||||
sha256 =
|
||||
if debug then
|
||||
if arch == "x86_64" then
|
||||
"1mn29ahxjf6pdy2zp2na14cz46jrl88f54kp3bs3cz75syyizyb6"
|
||||
"0mjyb8mk4av8cia34gmqi0n4nq0spiblgn18z6f4nkx12wgdka2c"
|
||||
else
|
||||
"0inpj6bcsn5lh8gdv1wxpgipzrmpc553nhr68a55b2wff9fkv1ci"
|
||||
"07qgawd4xgy9690gbx0c6k97cp7lp04l70ccp4jd81y4xjsc9bq3"
|
||||
else
|
||||
if arch == "x86_64" then
|
||||
"1dfgsl5jf8ja9f7wwkzj5bfz1v5rdsyf4qhg1shqqldadmyyha7p"
|
||||
"0264kcn0frgcl7zfd60ybs4r7x1p3f8nj496z264ax6qc390qr02"
|
||||
else
|
||||
"0yiqwwqs3z9zzkfgqzjwqqdr2vaj1ia5xychs9fgxix3y4j934da";
|
||||
"0w170wz920imca8wc7kggl2vldn9k7cqm2xwvx8yqqi1p42a1941";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "flashplayer-standalone-${version}";
|
||||
version = "31.0.0.108";
|
||||
version = "31.0.0.122";
|
||||
|
||||
src = fetchurl {
|
||||
url =
|
||||
@@ -59,9 +59,9 @@ stdenv.mkDerivation rec {
|
||||
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/31/flash_player_sa_linux.x86_64.tar.gz";
|
||||
sha256 =
|
||||
if debug then
|
||||
"0i047fvj3x9lx7x8bf7jl1ybf9xpmr6g77q0h7n2s8qvscsw0pmm"
|
||||
"1psd49bxn6w6kgcjhml44g5wb4za18m8apas8qyly4xcapdylias"
|
||||
else
|
||||
"19wfs452ix57yfi4cy2din6mi5jky9hjzbdjny1bl8w32fy8xmm3";
|
||||
"0g3h31pdxw91r3067zrkgyziwl18i5kidwx83y13ff4d17v999ss";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
||||
@@ -14,7 +14,9 @@ let
|
||||
in buildGoPackage rec {
|
||||
pname = "minikube";
|
||||
name = "${pname}-${version}";
|
||||
version = "0.28.1";
|
||||
version = "0.30.0";
|
||||
|
||||
kubernetesVersion = "1.11.2";
|
||||
|
||||
goPackagePath = "k8s.io/minikube";
|
||||
|
||||
@@ -22,7 +24,7 @@ in buildGoPackage rec {
|
||||
owner = "kubernetes";
|
||||
repo = "minikube";
|
||||
rev = "v${version}";
|
||||
sha256 = "0c36rzsdzxf9q6l4hl506bsd4qwmw033i0k1xhqszv9agg7qjlmm";
|
||||
sha256 = "02jxwh8qrvjn31rzjwx23908nd1i592drfdykxbc5b6a62fwp02z";
|
||||
};
|
||||
|
||||
buildInputs = [ go-bindata makeWrapper gpgme ] ++ stdenv.lib.optional stdenv.hostPlatform.isDarwin vmnet;
|
||||
@@ -35,7 +37,7 @@ in buildGoPackage rec {
|
||||
|
||||
ISO_VERSION=$(grep "^ISO_VERSION" Makefile | sed "s/^.*\s//")
|
||||
ISO_BUCKET=$(grep "^ISO_BUCKET" Makefile | sed "s/^.*\s//")
|
||||
KUBERNETES_VERSION=$(${python}/bin/python hack/get_k8s_version.py --k8s-version-only 2>&1) || true
|
||||
KUBERNETES_VERSION=${kubernetesVersion}
|
||||
|
||||
export buildFlagsArray="-ldflags=\
|
||||
-X k8s.io/minikube/pkg/version.version=v${version} \
|
||||
|
||||
@@ -70,5 +70,6 @@ stdenv.mkDerivation rec {
|
||||
maintainers = with maintainers; [ ekleog fpletz ];
|
||||
platforms = platforms.unix;
|
||||
license = licenses.gpl3Plus;
|
||||
knownVulnerabilities = [ "No longer maintained" ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "rambox-bare-${version}";
|
||||
version = "0.5.17";
|
||||
version = "0.6.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "saenzramiro";
|
||||
repo = "rambox";
|
||||
rev = version;
|
||||
sha256 = "18adga0symhb825db80l4c7kjl3lzzh54p1qibqsfa087rjxx9ay";
|
||||
sha256 = "1cyxxgcv0qvm1la8yl5ag3j11spw7zvnj75zpf9c1y33pqmp44yc";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ nodejs-8_x ruby sencha ];
|
||||
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
|
||||
inherit src;
|
||||
|
||||
nodejs = nodejs-8_x;
|
||||
sha256 = "1v7zwp8vs2pgy04qi92lvnxgfwkyxbid04lab8925wg1pvm2pk3k";
|
||||
sha256 = "0mg1ilz65qyxgh5zg1f8fhx7ygz10w8ifamflpwbk8mrvqpkjlvr";
|
||||
};
|
||||
|
||||
patches = [ ./isDev.patch ];
|
||||
|
||||
@@ -6,7 +6,7 @@ let
|
||||
|
||||
# Please keep the version x.y.0.z and do not update to x.y.76.z because the
|
||||
# source of the latter disappears much faster.
|
||||
version = "8.28.0.41";
|
||||
version = "8.32.0.44";
|
||||
|
||||
rpath = stdenv.lib.makeLibraryPath [
|
||||
alsaLib
|
||||
@@ -56,7 +56,7 @@ let
|
||||
if stdenv.hostPlatform.system == "x86_64-linux" then
|
||||
fetchurl {
|
||||
url = "https://repo.skype.com/deb/pool/main/s/skypeforlinux/skypeforlinux_${version}_amd64.deb";
|
||||
sha256 = "1kydf71qbz35dx4674h3nxfx8a88k620217906i54ic4qq2mgy2x";
|
||||
sha256 = "0yzh4bmv8mrfp0ml9nhcpcy0lhi8jp1fnmnxy0krvnphkp8750c7";
|
||||
}
|
||||
else
|
||||
throw "Skype for linux is not supported on ${stdenv.hostPlatform.system}";
|
||||
|
||||
@@ -47,14 +47,17 @@ in stdenv.mkDerivation rec {
|
||||
# from firefox + m4 + wrapperTool
|
||||
nativeBuildInputs = [ m4 autoconf213 which gnused pkgconfig perl python wrapperTool cargo rustc ];
|
||||
|
||||
# https://bugzilla.mozilla.org/show_bug.cgi?format=default&id=1479540
|
||||
# https://hg.mozilla.org/releases/mozilla-release/rev/bc651d3d910c
|
||||
patches = [
|
||||
# https://bugzilla.mozilla.org/show_bug.cgi?format=default&id=1479540
|
||||
# https://hg.mozilla.org/releases/mozilla-release/rev/bc651d3d910c
|
||||
(fetchpatch {
|
||||
name = "bc651d3d910c.patch";
|
||||
url = "https://hg.mozilla.org/releases/mozilla-release/raw-rev/bc651d3d910c";
|
||||
sha256 = "0iybkadsgsf6a3pq3jh8z1p110vmpkih8i35jfj8micdkhxzi89g";
|
||||
})
|
||||
|
||||
# Remove buildconfig.html to prevent a dependency on clang etc.
|
||||
../../browsers/firefox/no-buildconfig.patch
|
||||
];
|
||||
|
||||
configureFlags =
|
||||
@@ -191,6 +194,8 @@ in stdenv.mkDerivation rec {
|
||||
"$out/bin/thunderbird" --version
|
||||
'';
|
||||
|
||||
disallowedRequisites = [ stdenv.cc ];
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "A full-featured e-mail client";
|
||||
homepage = http://www.mozilla.org/thunderbird/;
|
||||
|
||||
@@ -9,13 +9,13 @@ let
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
name = "resilio-sync-${version}";
|
||||
version = "2.6.0";
|
||||
version = "2.6.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://download-cdn.resilio.com/${version}/linux-${arch}/resilio-sync_${arch}.tar.gz";
|
||||
sha256 = {
|
||||
"x86_64-linux" = "0041axi9carspkfaxvyirfvsa29zz55al01x90nh93nzxvpvywsz";
|
||||
"i686-linux" = "1ar36lp4f6a1z9i82g3gpak4q4ny09faqxdd59q1pvfzq25ypdhs";
|
||||
"x86_64-linux" = "02wbllrj80kqpyywfr05fsqpgwrv2i8smr3gfdpn7ni9b8hkj0ji";
|
||||
"i686-linux" = "02zhh6gfds6miznbx30ghzihhm330mh5xnm42mxj8j29aqlzgd95";
|
||||
}.${stdenv.hostPlatform.system};
|
||||
};
|
||||
|
||||
|
||||
@@ -300,6 +300,8 @@ EOF
|
||||
disable_test t0028-working-tree-encoding
|
||||
'';
|
||||
|
||||
stripDebugList = [ "lib" "libexec" "bin" "share/git/contrib/credential/libsecret" ];
|
||||
|
||||
|
||||
meta = {
|
||||
homepage = https://git-scm.com/;
|
||||
|
||||
@@ -7,14 +7,14 @@ let
|
||||
gemdir = ./.;
|
||||
};
|
||||
in buildGoPackage rec {
|
||||
version = "0.120.0";
|
||||
version = "0.125.0";
|
||||
name = "gitaly-${version}";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "gitlab-org";
|
||||
repo = "gitaly";
|
||||
rev = "v${version}";
|
||||
sha256 = "0jsk6n1vmddpnnccr8mjvcsfjzaagqy1600q5yss6lbz896w2bx4";
|
||||
sha256 = "14a4qgpnspzw9cjqh6gbw3771bxfm789ibvmvb8jc4pklvbyl4mi";
|
||||
};
|
||||
|
||||
goPackagePath = "gitlab.com/gitlab-org/gitaly";
|
||||
@@ -27,7 +27,7 @@ in buildGoPackage rec {
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $ruby
|
||||
cp -rv $src/ruby/{bin,lib,vendor} $ruby
|
||||
cp -rv $src/ruby/{bin,lib} $ruby
|
||||
'';
|
||||
|
||||
outputs = [ "bin" "out" "ruby" ];
|
||||
|
||||
@@ -7,13 +7,21 @@ with stdenv.lib;
|
||||
|
||||
buildGoPackage rec {
|
||||
name = "gitea-${version}";
|
||||
version = "1.5.1";
|
||||
version = "1.5.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "go-gitea";
|
||||
repo = "gitea";
|
||||
rev = "v${version}";
|
||||
sha256 = "06h6v9py35mm0xk9l8xrq02vvr5vzl15gfbw9qqvpn8kiamkn53r";
|
||||
sha256 = "168pbndlh7c148p8wzkd39kd7idiba9zw7v0alp9zqcqzzayaydj";
|
||||
# Required to generate the same checksum on MacOS due to unicode encoding differences
|
||||
# More information: https://github.com/NixOS/nixpkgs/pull/48128
|
||||
extraPostFetch = ''
|
||||
rm -rf $out/integrations
|
||||
rm -rf $out/vendor/github.com/Unknown/cae/tz/testdata
|
||||
rm -rf $out/vendor/github.com/Unknown/cae/zip/testdata
|
||||
rm -rf $out/vendor/gopkg.in/macaron.v1/fixtures
|
||||
'';
|
||||
};
|
||||
|
||||
patches = [ ./static-root-path.patch ];
|
||||
|
||||
@@ -2,18 +2,18 @@
|
||||
stdenv.mkDerivation rec {
|
||||
name = "gitlab-workhorse-${version}";
|
||||
|
||||
version = "6.1.0";
|
||||
version = "6.1.1";
|
||||
|
||||
srcs = fetchFromGitLab {
|
||||
owner = "gitlab-org";
|
||||
repo = "gitlab-workhorse";
|
||||
rev = "v${version}";
|
||||
sha256 = "0h0mqalia4ldb2icr2h6x75pnr5jb5y23pi4kv4ri3w3ddnl74bq";
|
||||
sha256 = "1dwvk86bfsqgkp0mwz71yis3i7aypjf96r3hsjkgpd27hwbjgxbr";
|
||||
};
|
||||
|
||||
buildInputs = [ git go ];
|
||||
|
||||
patches = [ ./remove-hardcoded-paths.patch ];
|
||||
patches = [ ./remove-hardcoded-paths.patch ./deterministic-build.patch ];
|
||||
|
||||
makeFlags = [ "PREFIX=$(out)" "VERSION=${version}" ];
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
--- a/Makefile 2018-10-08 12:45:15.206269937 +0200
|
||||
+++ b/Makefile 2018-10-08 12:45:24.435366307 +0200
|
||||
@@ -6,7 +6,7 @@
|
||||
BIN_BUILD_DIR := $(TARGET_DIR)/bin
|
||||
PKG_BUILD_DIR := $(TARGET_DIR)/src/$(PKG)
|
||||
COVERAGE_DIR := $(TARGET_DIR)/cover
|
||||
-VERSION := $(shell git describe)-$(shell date -u +%Y%m%d.%H%M%S)
|
||||
+VERSION := 6.1.1
|
||||
GOBUILD := go build -ldflags "-X main.Version=$(VERSION)"
|
||||
EXE_ALL := gitlab-zip-cat gitlab-zip-metadata gitlab-workhorse
|
||||
INSTALL := install
|
||||
@@ -7,33 +7,33 @@ let
|
||||
rubyEnv = bundlerEnv {
|
||||
name = "gitlab-env-${version}";
|
||||
inherit ruby;
|
||||
gemdir = ./.;
|
||||
gemdir = ./rubyEnv- + "${if gitlabEnterprise then "ee" else "ce"}";
|
||||
groups = [ "default" "unicorn" "ed25519" "metrics" ];
|
||||
};
|
||||
|
||||
version = "11.3.0";
|
||||
version = "11.3.4";
|
||||
|
||||
sources = if gitlabEnterprise then {
|
||||
gitlabDeb = fetchurl {
|
||||
url = "https://packages.gitlab.com/gitlab/gitlab-ee/packages/debian/stretch/gitlab-ee_${version}-ee.0_amd64.deb/download.deb";
|
||||
sha256 = "1l5cfbc45xa3gq90wyly3szn93szh162g9szc6dnkqx0db70j9l3";
|
||||
sha256 = "1cgwm6g1mij1958mdyds8f76qjw39nllsr23dvsqgf60h4vbsdfd";
|
||||
};
|
||||
gitlab = fetchFromGitLab {
|
||||
owner = "gitlab-org";
|
||||
repo = "gitlab-ee";
|
||||
rev = "v${version}-ee";
|
||||
sha256 = "0gmainjhs21hipbvshga5dzkjrpmlkk9vxxnxgwjaqbg9wrhw47m";
|
||||
sha256 = "1ifaa879l85d4yfzrgszrgj04bfjxjh3n7v31zfb6lsqmh87xbm4";
|
||||
};
|
||||
} else {
|
||||
gitlabDeb = fetchurl {
|
||||
url = "https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/stretch/gitlab-ce_${version}-ce.0_amd64.deb/download.deb";
|
||||
sha256 = "162xy8xpa2qhz10nh2dw0vbd0665pz9984vnim9i30xcafr5picq";
|
||||
sha256 = "0hls81ns9n10xrzw0b9pn1916445irqrysbicsdl8kdn83ds35p7";
|
||||
};
|
||||
gitlab = fetchFromGitLab {
|
||||
owner = "gitlab-org";
|
||||
repo = "gitlab-ce";
|
||||
rev = "v${version}";
|
||||
sha256 = "158n2qnp1zsj5kk2w3v9xyakgdb739n955hlq3i9sl80q8f4xda3";
|
||||
sha256 = "0dymr706yn917niybg2gj1pkgrzgiirbv4ib9pkgs140kbf3hn0c";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
461
pkgs/applications/version-management/gitlab/rubyEnv-ee/Gemfile
Normal file
461
pkgs/applications/version-management/gitlab/rubyEnv-ee/Gemfile
Normal file
@@ -0,0 +1,461 @@
|
||||
# --- Special code for migrating to Rails 5.0 ---
|
||||
def rails5?
|
||||
%w[1 true].include?(ENV["RAILS5"])
|
||||
end
|
||||
|
||||
gem_versions = {}
|
||||
gem_versions['activerecord_sane_schema_dumper'] = rails5? ? '1.0' : '0.2'
|
||||
gem_versions['default_value_for'] = rails5? ? '~> 3.0.5' : '~> 3.0.0'
|
||||
gem_versions['rails'] = rails5? ? '5.0.7' : '4.2.10'
|
||||
gem_versions['rails-i18n'] = rails5? ? '~> 5.1' : '~> 4.0.9'
|
||||
# --- The end of special code for migrating to Rails 5.0 ---
|
||||
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'rails', gem_versions['rails']
|
||||
gem 'rails-deprecated_sanitizer', '~> 1.0.3'
|
||||
|
||||
# Responders respond_to and respond_with
|
||||
gem 'responders', '~> 2.0'
|
||||
|
||||
gem 'sprockets', '~> 3.7.0'
|
||||
|
||||
# Default values for AR models
|
||||
gem 'default_value_for', gem_versions['default_value_for']
|
||||
|
||||
# Supported DBs
|
||||
gem 'mysql2', '~> 0.4.10', group: :mysql
|
||||
gem 'pg', '~> 0.18.2', group: :postgres
|
||||
|
||||
gem 'rugged', '~> 0.27'
|
||||
gem 'grape-path-helpers', '~> 1.0'
|
||||
|
||||
gem 'faraday', '~> 0.12'
|
||||
|
||||
# Authentication libraries
|
||||
gem 'devise', '~> 4.4'
|
||||
gem 'doorkeeper', '~> 4.3'
|
||||
gem 'doorkeeper-openid_connect', '~> 1.5'
|
||||
gem 'omniauth', '~> 1.8'
|
||||
gem 'omniauth-auth0', '~> 2.0.0'
|
||||
gem 'omniauth-azure-oauth2', '~> 0.0.9'
|
||||
gem 'omniauth-cas3', '~> 1.1.4'
|
||||
gem 'omniauth-facebook', '~> 4.0.0'
|
||||
gem 'omniauth-github', '~> 1.3'
|
||||
gem 'omniauth-gitlab', '~> 1.0.2'
|
||||
gem 'omniauth-google-oauth2', '~> 0.5.3'
|
||||
gem 'omniauth-kerberos', '~> 0.3.0', group: :kerberos
|
||||
gem 'omniauth-oauth2-generic', '~> 0.2.2'
|
||||
gem 'omniauth-saml', '~> 1.10'
|
||||
gem 'omniauth-shibboleth', '~> 1.3.0'
|
||||
gem 'omniauth-twitter', '~> 1.4'
|
||||
gem 'omniauth_crowd', '~> 2.2.0'
|
||||
gem 'omniauth-authentiq', '~> 0.3.3'
|
||||
gem 'rack-oauth2', '~> 1.2.1'
|
||||
gem 'jwt', '~> 1.5.6'
|
||||
|
||||
# Kerberos authentication. EE-only
|
||||
gem 'gssapi', group: :kerberos
|
||||
|
||||
# Spam and anti-bot protection
|
||||
gem 'recaptcha', '~> 3.0', require: 'recaptcha/rails'
|
||||
gem 'akismet', '~> 2.0'
|
||||
|
||||
# Two-factor authentication
|
||||
gem 'devise-two-factor', '~> 3.0.0'
|
||||
gem 'rqrcode-rails3', '~> 0.1.7'
|
||||
gem 'attr_encrypted', '~> 3.1.0'
|
||||
gem 'u2f', '~> 0.2.1'
|
||||
|
||||
# GitLab Pages
|
||||
gem 'validates_hostname', '~> 1.0.6'
|
||||
|
||||
# Browser detection
|
||||
gem 'browser', '~> 2.5'
|
||||
|
||||
# GPG
|
||||
gem 'gpgme'
|
||||
|
||||
# LDAP Auth
|
||||
# GitLab fork with several improvements to original library. For full list of changes
|
||||
# see https://github.com/intridea/omniauth-ldap/compare/master...gitlabhq:master
|
||||
gem 'gitlab_omniauth-ldap', '~> 2.0.4', require: 'omniauth-ldap'
|
||||
gem 'net-ldap'
|
||||
|
||||
# Git Wiki
|
||||
# Required manually in config/initializers/gollum.rb to control load order
|
||||
gem 'gitlab-gollum-lib', '~> 4.2', require: false
|
||||
|
||||
gem 'gitlab-gollum-rugged_adapter', '~> 0.4.4', require: false
|
||||
|
||||
# Language detection
|
||||
gem 'github-linguist', '~> 5.3.3', require: 'linguist'
|
||||
|
||||
# API
|
||||
gem 'grape', '~> 1.0'
|
||||
gem 'grape-entity', '~> 0.7.1'
|
||||
gem 'rack-cors', '~> 1.0.0', require: 'rack/cors'
|
||||
|
||||
# GraphQL API
|
||||
gem 'graphql', '~> 1.8.0'
|
||||
gem 'graphiql-rails', '~> 1.4.10'
|
||||
|
||||
# Disable strong_params so that Mash does not respond to :permitted?
|
||||
gem 'hashie-forbidden_attributes'
|
||||
|
||||
# Pagination
|
||||
gem 'kaminari', '~> 1.0'
|
||||
|
||||
# HAML
|
||||
gem 'hamlit', '~> 2.8.8'
|
||||
|
||||
# Files attachments
|
||||
# Locked until https://github.com/carrierwaveuploader/carrierwave/pull/2332/files is merged.
|
||||
# config/initializers/carrierwave_patch.rb can be removed once that change is released.
|
||||
gem 'carrierwave', '= 1.2.3'
|
||||
gem 'mini_magick'
|
||||
|
||||
# Drag and Drop UI
|
||||
gem 'dropzonejs-rails', '~> 0.7.1'
|
||||
|
||||
# for backups
|
||||
gem 'fog-aws', '~> 2.0.1'
|
||||
gem 'fog-core', '~> 1.44'
|
||||
gem 'fog-google', '~> 1.7.1'
|
||||
gem 'fog-local', '~> 0.3'
|
||||
gem 'fog-openstack', '~> 0.1'
|
||||
gem 'fog-rackspace', '~> 0.1.1'
|
||||
gem 'fog-aliyun', '~> 0.2.0'
|
||||
|
||||
# for Google storage
|
||||
gem 'google-api-client', '~> 0.23'
|
||||
|
||||
# for aws storage
|
||||
gem 'unf', '~> 0.1.4'
|
||||
|
||||
# Seed data
|
||||
gem 'seed-fu', '~> 2.3.7'
|
||||
|
||||
# Search
|
||||
gem 'elasticsearch-model', '~> 0.1.9'
|
||||
gem 'elasticsearch-rails', '~> 0.1.9'
|
||||
gem 'elasticsearch-api', '5.0.3'
|
||||
gem 'aws-sdk'
|
||||
gem 'faraday_middleware-aws-signers-v4'
|
||||
|
||||
# Markdown and HTML processing
|
||||
gem 'html-pipeline', '~> 2.8'
|
||||
gem 'deckar01-task_list', '2.0.0'
|
||||
gem 'gitlab-markup', '~> 1.6.4'
|
||||
gem 'redcarpet', '~> 3.4'
|
||||
gem 'commonmarker', '~> 0.17'
|
||||
gem 'RedCloth', '~> 4.3.2'
|
||||
gem 'rdoc', '~> 6.0'
|
||||
gem 'org-ruby', '~> 0.9.12'
|
||||
gem 'creole', '~> 0.5.0'
|
||||
gem 'wikicloth', '0.8.1'
|
||||
gem 'asciidoctor', '~> 1.5.6'
|
||||
gem 'asciidoctor-plantuml', '0.0.8'
|
||||
gem 'rouge', '~> 3.1'
|
||||
gem 'truncato', '~> 0.7.9'
|
||||
gem 'bootstrap_form', '~> 2.7.0'
|
||||
gem 'nokogiri', '~> 1.8.2'
|
||||
|
||||
# Calendar rendering
|
||||
gem 'icalendar'
|
||||
|
||||
# Diffs
|
||||
gem 'diffy', '~> 3.1.0'
|
||||
|
||||
# Application server
|
||||
group :unicorn do
|
||||
gem 'unicorn', '~> 5.1.0'
|
||||
gem 'unicorn-worker-killer', '~> 0.4.4'
|
||||
end
|
||||
|
||||
# State machine
|
||||
gem 'state_machines-activerecord', '~> 0.5.1'
|
||||
|
||||
# Issue tags
|
||||
gem 'acts-as-taggable-on', '~> 5.0'
|
||||
|
||||
# Background jobs
|
||||
gem 'sidekiq', '~> 5.1'
|
||||
gem 'sidekiq-cron', '~> 0.6.0'
|
||||
gem 'redis-namespace', '~> 1.6.0'
|
||||
gem 'sidekiq-limit_fetch', '~> 3.4', require: false
|
||||
|
||||
# Cron Parser
|
||||
gem 'rufus-scheduler', '~> 3.4'
|
||||
|
||||
# HTTP requests
|
||||
gem 'httparty', '~> 0.13.3'
|
||||
|
||||
# Colored output to console
|
||||
gem 'rainbow', '~> 3.0'
|
||||
|
||||
# Progress bar
|
||||
gem 'ruby-progressbar'
|
||||
|
||||
# GitLab settings
|
||||
gem 'settingslogic', '~> 2.0.9'
|
||||
|
||||
# Linear-time regex library for untrusted regular expressions
|
||||
gem 're2', '~> 1.1.1'
|
||||
|
||||
# Misc
|
||||
|
||||
gem 'version_sorter', '~> 2.1.0'
|
||||
|
||||
# Export Ruby Regex to Javascript
|
||||
gem 'js_regex', '~> 2.2.1'
|
||||
|
||||
# User agent parsing
|
||||
gem 'device_detector'
|
||||
|
||||
# Cache
|
||||
gem 'redis-rails', '~> 5.0.2'
|
||||
|
||||
# Redis
|
||||
gem 'redis', '~> 3.2'
|
||||
gem 'connection_pool', '~> 2.0'
|
||||
|
||||
# HipChat integration
|
||||
gem 'hipchat', '~> 1.5.0'
|
||||
|
||||
# JIRA integration
|
||||
gem 'jira-ruby', '~> 1.4'
|
||||
|
||||
# Flowdock integration
|
||||
gem 'gitlab-flowdock-git-hook', '~> 1.0.1'
|
||||
|
||||
# Slack integration
|
||||
gem 'slack-notifier', '~> 1.5.1'
|
||||
|
||||
# Hangouts Chat integration
|
||||
gem 'hangouts-chat', '~> 0.0.5'
|
||||
|
||||
# Asana integration
|
||||
gem 'asana', '~> 0.6.0'
|
||||
|
||||
# FogBugz integration
|
||||
gem 'ruby-fogbugz', '~> 0.2.1'
|
||||
|
||||
# Kubernetes integration
|
||||
gem 'kubeclient', '~> 3.1.0'
|
||||
|
||||
# Sanitize user input
|
||||
gem 'sanitize', '~> 4.6'
|
||||
gem 'babosa', '~> 1.0.2'
|
||||
|
||||
# Sanitizes SVG input
|
||||
gem 'loofah', '~> 2.2'
|
||||
|
||||
# Working with license
|
||||
gem 'licensee', '~> 8.9'
|
||||
|
||||
# Protect against bruteforcing
|
||||
gem 'rack-attack', '~> 4.4.1'
|
||||
|
||||
# Ace editor
|
||||
gem 'ace-rails-ap', '~> 4.1.0'
|
||||
|
||||
# Keyboard shortcuts
|
||||
gem 'mousetrap-rails', '~> 1.4.6'
|
||||
|
||||
# Detect and convert string character encoding
|
||||
gem 'charlock_holmes', '~> 0.7.5'
|
||||
|
||||
# Faster blank
|
||||
gem 'fast_blank'
|
||||
|
||||
# Parse time & duration
|
||||
gem 'chronic', '~> 0.10.2'
|
||||
gem 'chronic_duration', '~> 0.10.6'
|
||||
|
||||
gem 'webpack-rails', '~> 0.9.10'
|
||||
gem 'rack-proxy', '~> 0.6.0'
|
||||
|
||||
gem 'sass-rails', '~> 5.0.6'
|
||||
gem 'uglifier', '~> 2.7.2'
|
||||
|
||||
gem 'addressable', '~> 2.5.2'
|
||||
gem 'font-awesome-rails', '~> 4.7'
|
||||
gem 'gemojione', '~> 3.3'
|
||||
gem 'gon', '~> 6.2'
|
||||
gem 'jquery-atwho-rails', '~> 1.3.2'
|
||||
gem 'request_store', '~> 1.3'
|
||||
gem 'select2-rails', '~> 3.5.9'
|
||||
gem 'virtus', '~> 1.0.1'
|
||||
gem 'base32', '~> 0.3.0'
|
||||
|
||||
gem "gitlab-license", "~> 1.0"
|
||||
|
||||
# Sentry integration
|
||||
gem 'sentry-raven', '~> 2.7'
|
||||
|
||||
gem 'premailer-rails', '~> 1.9.7'
|
||||
|
||||
# I18n
|
||||
gem 'ruby_parser', '~> 3.8', require: false
|
||||
gem 'rails-i18n', gem_versions['rails-i18n']
|
||||
gem 'gettext_i18n_rails', '~> 1.8.0'
|
||||
gem 'gettext_i18n_rails_js', '~> 1.3'
|
||||
gem 'gettext', '~> 3.2.2', require: false, group: :development
|
||||
|
||||
gem 'batch-loader', '~> 1.2.1'
|
||||
|
||||
# Perf bar
|
||||
gem 'peek', '~> 1.0.1'
|
||||
gem 'peek-gc', '~> 0.0.2'
|
||||
gem 'peek-mysql2', '~> 1.1.0', group: :mysql
|
||||
gem 'peek-pg', '~> 1.3.0', group: :postgres
|
||||
gem 'peek-rblineprof', '~> 0.2.0'
|
||||
gem 'peek-redis', '~> 1.2.0'
|
||||
gem 'peek-sidekiq', '~> 1.0.3'
|
||||
|
||||
# Metrics
|
||||
group :metrics do
|
||||
gem 'method_source', '~> 0.8', require: false
|
||||
gem 'influxdb', '~> 0.2', require: false
|
||||
|
||||
# Prometheus
|
||||
gem 'prometheus-client-mmap', '~> 0.9.4'
|
||||
gem 'raindrops', '~> 0.18'
|
||||
end
|
||||
|
||||
group :development do
|
||||
gem 'foreman', '~> 0.84.0'
|
||||
gem 'brakeman', '~> 4.2', require: false
|
||||
|
||||
gem 'letter_opener_web', '~> 1.3.0'
|
||||
gem 'rblineprof', '~> 0.3.6', platform: :mri, require: false
|
||||
|
||||
# Better errors handler
|
||||
gem 'better_errors', '~> 2.1.0'
|
||||
gem 'binding_of_caller', '~> 0.7.2'
|
||||
|
||||
# thin instead webrick
|
||||
gem 'thin', '~> 1.7.0'
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
gem 'bootsnap', '~> 1.3'
|
||||
gem 'bullet', '~> 5.5.0', require: !!ENV['ENABLE_BULLET']
|
||||
gem 'pry-byebug', '~> 3.4.1', platform: :mri
|
||||
gem 'pry-rails', '~> 0.3.4'
|
||||
|
||||
gem 'awesome_print', require: false
|
||||
gem 'fuubar', '~> 2.2.0'
|
||||
|
||||
gem 'database_cleaner', '~> 1.5.0'
|
||||
gem 'factory_bot_rails', '~> 4.8.2'
|
||||
gem 'rspec-rails', '~> 3.7.0'
|
||||
gem 'rspec-retry', '~> 0.4.5'
|
||||
gem 'rspec_profiling', '~> 0.0.5'
|
||||
gem 'rspec-set', '~> 0.1.3'
|
||||
gem 'rspec-parameterized', require: false
|
||||
|
||||
# Prevent occasions where minitest is not bundled in packaged versions of ruby (see #3826)
|
||||
gem 'minitest', '~> 5.7.0'
|
||||
|
||||
# Generate Fake data
|
||||
gem 'ffaker', '~> 2.4'
|
||||
|
||||
gem 'capybara', '~> 2.15'
|
||||
gem 'capybara-screenshot', '~> 1.0.0'
|
||||
gem 'selenium-webdriver', '~> 3.12'
|
||||
|
||||
gem 'spring', '~> 2.0.0'
|
||||
gem 'spring-commands-rspec', '~> 1.0.4'
|
||||
|
||||
gem 'gitlab-styles', '~> 2.4', require: false
|
||||
# Pin these dependencies, otherwise a new rule could break the CI pipelines
|
||||
gem 'rubocop', '~> 0.54.0'
|
||||
gem 'rubocop-rspec', '~> 1.22.1'
|
||||
|
||||
gem 'scss_lint', '~> 0.56.0', require: false
|
||||
gem 'haml_lint', '~> 0.26.0', require: false
|
||||
gem 'simplecov', '~> 0.14.0', require: false
|
||||
gem 'bundler-audit', '~> 0.5.0', require: false
|
||||
|
||||
gem 'benchmark-ips', '~> 2.3.0', require: false
|
||||
|
||||
gem 'license_finder', '~> 5.4', require: false
|
||||
gem 'knapsack', '~> 1.16'
|
||||
|
||||
gem 'activerecord_sane_schema_dumper', gem_versions['activerecord_sane_schema_dumper']
|
||||
|
||||
gem 'stackprof', '~> 0.2.10', require: false
|
||||
|
||||
gem 'simple_po_parser', '~> 1.1.2', require: false
|
||||
|
||||
gem 'timecop', '~> 0.8.0'
|
||||
end
|
||||
|
||||
group :test do
|
||||
gem 'shoulda-matchers', '~> 3.1.2', require: false
|
||||
gem 'email_spec', '~> 2.2.0'
|
||||
gem 'json-schema', '~> 2.8.0'
|
||||
gem 'webmock', '~> 2.3.2'
|
||||
gem 'rails-controller-testing' if rails5? # Rails5 only gem.
|
||||
gem 'test_after_commit', '~> 1.1' unless rails5? # Remove this gem when migrated to rails 5.0. It's been integrated to rails 5.0.
|
||||
gem 'sham_rack', '~> 1.3.6'
|
||||
gem 'concurrent-ruby', '~> 1.0.5'
|
||||
gem 'test-prof', '~> 0.2.5'
|
||||
gem 'rspec_junit_formatter'
|
||||
end
|
||||
|
||||
gem 'octokit', '~> 4.9'
|
||||
|
||||
gem 'mail_room', '~> 0.9.1'
|
||||
|
||||
gem 'email_reply_trimmer', '~> 0.1'
|
||||
gem 'html2text'
|
||||
|
||||
gem 'ruby-prof', '~> 0.17.0'
|
||||
gem 'rbtrace', '~> 0.4', require: false
|
||||
|
||||
# OAuth
|
||||
gem 'oauth2', '~> 1.4'
|
||||
|
||||
# Health check
|
||||
gem 'health_check', '~> 2.6.0'
|
||||
|
||||
# System information
|
||||
gem 'vmstat', '~> 2.3.0'
|
||||
gem 'sys-filesystem', '~> 1.1.6'
|
||||
|
||||
# NTP client
|
||||
gem 'net-ntp'
|
||||
|
||||
# SSH host key support
|
||||
gem 'net-ssh', '~> 5.0'
|
||||
gem 'sshkey', '~> 1.9.0'
|
||||
|
||||
# Required for ED25519 SSH host key support
|
||||
group :ed25519 do
|
||||
gem 'ed25519', '~> 1.2'
|
||||
gem 'bcrypt_pbkdf', '~> 1.0'
|
||||
end
|
||||
|
||||
# Gitaly GRPC client
|
||||
gem 'gitaly-proto', '~> 0.117.0', require: 'gitaly'
|
||||
gem 'grpc', '~> 1.11.0'
|
||||
|
||||
# Locked until https://github.com/google/protobuf/issues/4210 is closed
|
||||
gem 'google-protobuf', '= 3.5.1'
|
||||
|
||||
gem 'toml-rb', '~> 1.0.0', require: false
|
||||
|
||||
# Feature toggles
|
||||
gem 'flipper', '~> 0.13.0'
|
||||
gem 'flipper-active_record', '~> 0.13.0'
|
||||
gem 'flipper-active_support_cache_store', '~> 0.13.0'
|
||||
|
||||
# Structured logging
|
||||
gem 'lograge', '~> 0.5'
|
||||
gem 'grape_logging', '~> 1.7'
|
||||
|
||||
# Asset synchronization
|
||||
gem 'asset_sync', '~> 2.4'
|
||||
1239
pkgs/applications/version-management/gitlab/rubyEnv-ee/Gemfile.lock
Normal file
1239
pkgs/applications/version-management/gitlab/rubyEnv-ee/Gemfile.lock
Normal file
File diff suppressed because it is too large
Load Diff
3681
pkgs/applications/version-management/gitlab/rubyEnv-ee/gemset.nix
Normal file
3681
pkgs/applications/version-management/gitlab/rubyEnv-ee/gemset.nix
Normal file
File diff suppressed because it is too large
Load Diff
@@ -54,60 +54,26 @@ platforms :mri, :mingw, :x64_mingw do
|
||||
end
|
||||
end
|
||||
|
||||
# Include database gems for the adapters found in the database
|
||||
# configuration file
|
||||
require 'erb'
|
||||
require 'yaml'
|
||||
|
||||
# NixOS - manually added to ensure mysql and postgres will always be include
|
||||
# Include database gems for the database adapters NixOS supports
|
||||
gem "mysql2", "~> 0.4.6", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
gem "pg", "~> 0.18.1", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
|
||||
database_file = File.join(File.dirname(__FILE__), "config/database.yml")
|
||||
if File.exist?(database_file)
|
||||
database_config = YAML::load(ERB.new(IO.read(database_file)).result)
|
||||
adapters = database_config.values.map {|c| c['adapter']}.compact.uniq
|
||||
if adapters.any?
|
||||
adapters.each do |adapter|
|
||||
case adapter
|
||||
when 'mysql2'
|
||||
gem "mysql2", "~> 0.4.6", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
when /postgresql/
|
||||
gem "pg", "~> 0.18.1", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
when /sqlite3/
|
||||
gem "sqlite3", (RUBY_VERSION < "2.0" && RUBY_PLATFORM =~ /mingw/ ? "1.3.12" : "~>1.3.12"),
|
||||
:platforms => [:mri, :mingw, :x64_mingw]
|
||||
when /sqlserver/
|
||||
gem "tiny_tds", (RUBY_VERSION >= "2.0" ? "~> 1.0.5" : "~> 0.7.0"), :platforms => [:mri, :mingw, :x64_mingw]
|
||||
gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
else
|
||||
warn("Unknown database adapter `#{adapter}` found in config/database.yml, use Gemfile.local to load your own database gems")
|
||||
end
|
||||
end
|
||||
else
|
||||
warn("No adapter found in config/database.yml, please configure it first")
|
||||
end
|
||||
else
|
||||
warn("Please configure your config/database.yml first")
|
||||
group :development do
|
||||
gem "rdoc", "~> 4.3"
|
||||
gem "yard"
|
||||
end
|
||||
|
||||
# NixOS - manually removed because I couldn't figure out how to get "bundle exec rails server webrick -e production" to ignore these groups
|
||||
#group :development do
|
||||
# gem "rdoc", "~> 4.3"
|
||||
# gem "yard"
|
||||
#end
|
||||
|
||||
#group :test do
|
||||
# gem "minitest"
|
||||
# gem "rails-dom-testing"
|
||||
# gem "mocha"
|
||||
# gem "simplecov", "~> 0.9.1", :require => false
|
||||
# # TODO: remove this after upgrading to Rails 5
|
||||
# gem "test_after_commit", "~> 0.4.2"
|
||||
# # For running UI tests
|
||||
# gem "capybara"
|
||||
# gem "selenium-webdriver", "~> 2.53.4"
|
||||
#end
|
||||
group :test do
|
||||
gem "minitest"
|
||||
gem "rails-dom-testing"
|
||||
gem "mocha"
|
||||
gem "simplecov", "~> 0.9.1", :require => false
|
||||
# TODO: remove this after upgrading to Rails 5
|
||||
gem "test_after_commit", "~> 0.4.2"
|
||||
# For running UI tests
|
||||
gem "capybara"
|
||||
gem "selenium-webdriver", "~> 2.53.4"
|
||||
end
|
||||
|
||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
||||
if File.exists?(local_gemfile)
|
||||
|
||||
@@ -41,12 +41,23 @@ GEM
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
arel (6.0.4)
|
||||
builder (3.2.3)
|
||||
capybara (3.9.0)
|
||||
addressable
|
||||
mini_mime (>= 0.1.3)
|
||||
nokogiri (~> 1.8)
|
||||
rack (>= 1.6.0)
|
||||
rack-test (>= 0.6.3)
|
||||
xpath (~> 3.1)
|
||||
childprocess (0.9.0)
|
||||
ffi (~> 1.0, >= 1.0.11)
|
||||
coderay (1.1.2)
|
||||
concurrent-ruby (1.0.5)
|
||||
crass (1.0.4)
|
||||
css_parser (1.6.0)
|
||||
addressable
|
||||
docile (1.1.5)
|
||||
erubis (2.7.0)
|
||||
ffi (1.9.25)
|
||||
globalid (0.4.1)
|
||||
activesupport (>= 4.2.0)
|
||||
htmlentities (4.3.4)
|
||||
@@ -59,15 +70,20 @@ GEM
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.6.6)
|
||||
mime-types (>= 1.16, < 4)
|
||||
metaclass (0.0.4)
|
||||
mime-types (3.2.2)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2018.0812)
|
||||
mimemagic (0.3.2)
|
||||
mini_mime (1.0.1)
|
||||
mini_portile2 (2.3.0)
|
||||
minitest (5.11.3)
|
||||
mocha (1.7.0)
|
||||
metaclass (~> 0.0.1)
|
||||
multi_json (1.13.1)
|
||||
mysql2 (0.4.10)
|
||||
net-ldap (0.12.1)
|
||||
nokogiri (1.8.4)
|
||||
nokogiri (1.8.5)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
pg (0.18.4)
|
||||
protected_attributes (1.1.4)
|
||||
@@ -104,10 +120,11 @@ GEM
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rake (12.3.1)
|
||||
rbpdf (1.19.5)
|
||||
rbpdf (1.19.6)
|
||||
htmlentities
|
||||
rbpdf-font (~> 1.19.0)
|
||||
rbpdf-font (1.19.1)
|
||||
rdoc (4.3.0)
|
||||
redcarpet (3.4.0)
|
||||
request_store (1.0.5)
|
||||
rmagick (2.16.0)
|
||||
@@ -118,6 +135,16 @@ GEM
|
||||
railties (>= 3.0, < 5.1)
|
||||
roadie (~> 3.1)
|
||||
ruby-openid (2.3.0)
|
||||
rubyzip (1.2.2)
|
||||
selenium-webdriver (2.53.4)
|
||||
childprocess (~> 0.5)
|
||||
rubyzip (~> 1.0)
|
||||
websocket (~> 1.0)
|
||||
simplecov (0.9.2)
|
||||
docile (~> 1.1.0)
|
||||
multi_json (~> 1.0)
|
||||
simplecov-html (~> 0.9.0)
|
||||
simplecov-html (0.9.0)
|
||||
sprockets (3.7.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
@@ -125,22 +152,31 @@ GEM
|
||||
actionpack (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
test_after_commit (0.4.2)
|
||||
activerecord (>= 3.2)
|
||||
thor (0.20.0)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.5)
|
||||
thread_safe (~> 0.1)
|
||||
websocket (1.2.8)
|
||||
xpath (3.1.0)
|
||||
nokogiri (~> 1.8)
|
||||
yard (0.9.16)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
actionpack-xml_parser
|
||||
capybara
|
||||
coderay (~> 1.1.1)
|
||||
i18n (~> 0.7.0)
|
||||
jquery-rails (~> 3.1.4)
|
||||
mail (~> 2.6.4)
|
||||
mime-types (~> 3.0)
|
||||
mimemagic
|
||||
minitest
|
||||
mocha
|
||||
mysql2 (~> 0.4.6)
|
||||
net-ldap (~> 0.12.0)
|
||||
nokogiri (~> 1.8.1)
|
||||
@@ -148,15 +184,21 @@ DEPENDENCIES
|
||||
protected_attributes
|
||||
rack-openid
|
||||
rails (= 4.2.8)
|
||||
rails-dom-testing
|
||||
rails-html-sanitizer (>= 1.0.3)
|
||||
rbpdf (~> 1.19.3)
|
||||
rdoc (~> 4.3)
|
||||
redcarpet (~> 3.4.0)
|
||||
request_store (= 1.0.5)
|
||||
rmagick (>= 2.14.0)
|
||||
roadie (~> 3.2.1)
|
||||
roadie-rails (~> 1.1.1)
|
||||
ruby-openid (~> 2.3.0)
|
||||
selenium-webdriver (~> 2.53.4)
|
||||
simplecov (~> 0.9.1)
|
||||
test_after_commit (~> 0.4.2)
|
||||
tzinfo-data
|
||||
yard
|
||||
|
||||
BUNDLED WITH
|
||||
1.16.1
|
||||
1.16.3
|
||||
|
||||
@@ -7,6 +7,7 @@ let
|
||||
|
||||
inherit ruby;
|
||||
gemdir = ./.;
|
||||
groups = [ "ldap" "openid" ];
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
@@ -21,15 +22,15 @@ in
|
||||
|
||||
buildPhase = ''
|
||||
mv config config.dist
|
||||
mv public/themes public/themes.dist
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share
|
||||
cp -r . $out/share/redmine
|
||||
|
||||
for i in config files log plugins tmp; do
|
||||
for i in config files log plugins public/plugin_assets public/themes tmp; do
|
||||
rm -rf $out/share/redmine/$i
|
||||
ln -fs /run/redmine/$i $out/share/redmine/
|
||||
ln -fs /run/redmine/$i $out/share/redmine/$i
|
||||
done
|
||||
'';
|
||||
|
||||
@@ -39,4 +40,4 @@ in
|
||||
maintainers = [ maintainers.garbas ];
|
||||
license = licenses.gpl2;
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -96,6 +96,24 @@
|
||||
};
|
||||
version = "3.2.3";
|
||||
};
|
||||
capybara = {
|
||||
dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "xpath"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1sz6ick0pn7886jh9fd4571wyplshnpb95pr22ds4hd51zcrnfi4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.9.0";
|
||||
};
|
||||
childprocess = {
|
||||
dependencies = ["ffi"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0a61922kmvcxyj5l70fycapr87gz1dzzlkfpq85rfqk5vdh3d28p";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.0";
|
||||
};
|
||||
coderay = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
@@ -129,6 +147,14 @@
|
||||
};
|
||||
version = "1.6.0";
|
||||
};
|
||||
docile = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.5";
|
||||
};
|
||||
erubis = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
@@ -137,6 +163,14 @@
|
||||
};
|
||||
version = "2.7.0";
|
||||
};
|
||||
ffi = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.9.25";
|
||||
};
|
||||
globalid = {
|
||||
dependencies = ["activesupport"];
|
||||
source = {
|
||||
@@ -189,6 +223,14 @@
|
||||
};
|
||||
version = "2.6.6";
|
||||
};
|
||||
metaclass = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0hp99y2b1nh0nr8pc398n3f8lakgci6pkrg4bf2b2211j1f6hsc5";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.0.4";
|
||||
};
|
||||
mime-types = {
|
||||
dependencies = ["mime-types-data"];
|
||||
source = {
|
||||
@@ -214,6 +256,14 @@
|
||||
};
|
||||
version = "0.3.2";
|
||||
};
|
||||
mini_mime = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.1";
|
||||
};
|
||||
mini_portile2 = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
@@ -230,6 +280,23 @@
|
||||
};
|
||||
version = "5.11.3";
|
||||
};
|
||||
mocha = {
|
||||
dependencies = ["metaclass"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "13whjmrm4n48rwx7h7a2jwa5grar3m0fxspbm2pm4lyp7hi119c1";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.7.0";
|
||||
};
|
||||
multi_json = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.13.1";
|
||||
};
|
||||
mysql2 = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
@@ -250,10 +317,10 @@
|
||||
dependencies = ["mini_portile2"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1h9nml9h3m0mpvmh8jfnqvblnz5n5y3mmhgfc38avfmfzdrq9bgc";
|
||||
sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.8.4";
|
||||
version = "1.8.5";
|
||||
};
|
||||
pg = {
|
||||
source = {
|
||||
@@ -363,10 +430,10 @@
|
||||
dependencies = ["htmlentities" "rbpdf-font"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "021fda3gcz9pyydxnn40vs1nrkycwslb9ip4q0yg3hlip41k1b49";
|
||||
sha256 = "159vg56bzy09f6zrh9h3rxm2r0vkvsfn9qczqmv1vi5xkd918s0d";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.19.5";
|
||||
version = "1.19.6";
|
||||
};
|
||||
rbpdf-font = {
|
||||
source = {
|
||||
@@ -376,6 +443,14 @@
|
||||
};
|
||||
version = "1.19.1";
|
||||
};
|
||||
rdoc = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "13ba2mhqqcsp3k97x3iz9x29xk26rv4561lfzzzibcy41vvj1n4c";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.3.0";
|
||||
};
|
||||
redcarpet = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
@@ -426,6 +501,40 @@
|
||||
};
|
||||
version = "2.3.0";
|
||||
};
|
||||
rubyzip = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.2";
|
||||
};
|
||||
selenium-webdriver = {
|
||||
dependencies = ["childprocess" "rubyzip" "websocket"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15qyf7b9fa2nxhhwp551b9fjj82kb3wmy65559yrrcwpdadqvcs4";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.53.4";
|
||||
};
|
||||
simplecov = {
|
||||
dependencies = ["docile" "multi_json" "simplecov-html"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1a3wy9zlmfwl3f47cibnxyxrgfz16y6fmy0dj1vyidzyys4mvy12";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.2";
|
||||
};
|
||||
simplecov-html = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0jv9pmpaxihrcsgcf6mgl3qg7rhf9scl5l2k67d768w9cz63xgvc";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.0";
|
||||
};
|
||||
sprockets = {
|
||||
dependencies = ["concurrent-ruby" "rack"];
|
||||
source = {
|
||||
@@ -444,6 +553,15 @@
|
||||
};
|
||||
version = "3.2.1";
|
||||
};
|
||||
test_after_commit = {
|
||||
dependencies = ["activerecord"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1fzg8qan6f0n0ynr594bld2k0rwwxj99yzhiga2f3pkj9ina1abb";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.4.2";
|
||||
};
|
||||
thor = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
@@ -469,4 +587,29 @@
|
||||
};
|
||||
version = "1.2.5";
|
||||
};
|
||||
websocket = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0f11rcn4qgffb1rq4kjfwi7di79w8840x9l74pkyif5arp0mb08x";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.8";
|
||||
};
|
||||
xpath = {
|
||||
dependencies = ["nokogiri"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1y61ijvv04bwga802s8py5xd7fcxci6478wgr9wkd35p45x20jzi";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.0";
|
||||
};
|
||||
yard = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.16";
|
||||
};
|
||||
}
|
||||
@@ -990,8 +990,8 @@ rec {
|
||||
name = "debian-9.4-stretch-i386";
|
||||
fullName = "Debian 9.4 Stretch (i386)";
|
||||
packagesList = fetchurl {
|
||||
url = mirror://debian/dists/stretch/main/binary-i386/Packages.xz;
|
||||
sha256 = "05z5ccg4ysbrgallhai53sh83i0364w7a3fdq84dpv1li059jf10";
|
||||
url = http://snapshot.debian.org/archive/debian/20180912T154744Z/dists/stretch/main/binary-i386/Packages.xz;
|
||||
sha256 = "0flvn8zn7vk04p10ndf3aq0mdr8k2ic01g51aq4lsllkv8lmwzyh";
|
||||
};
|
||||
urlPrefix = mirror://debian;
|
||||
packages = commonDebianPackages;
|
||||
@@ -1001,8 +1001,8 @@ rec {
|
||||
name = "debian-9.4-stretch-amd64";
|
||||
fullName = "Debian 9.4 Stretch (amd64)";
|
||||
packagesList = fetchurl {
|
||||
url = mirror://debian/dists/stretch/main/binary-amd64/Packages.xz;
|
||||
sha256 = "19j0c54b1b9lbk9fv2c2aswdh0s2c3klf97zrlmsz4hs8wm9jylq";
|
||||
url = http://snapshot.debian.org/archive/debian/20180912T154744Z/dists/stretch/main/binary-amd64/Packages.xz;
|
||||
sha256 = "11vnn9bba2jabixvabfbw9zparl326c88xn99di7pbr5xsnl15jm";
|
||||
};
|
||||
urlPrefix = mirror://debian;
|
||||
packages = commonDebianPackages;
|
||||
|
||||
@@ -37,13 +37,27 @@ stdenv.mkDerivation rec {
|
||||
|
||||
# Disable Access Control because our X does not support FamilyServerInterpreted yet
|
||||
patches = [
|
||||
# Change hardcoded paths to nix store paths.
|
||||
(substituteAll {
|
||||
src = ./fix-paths.patch;
|
||||
inherit coreutils plymouth xwayland;
|
||||
})
|
||||
|
||||
# The following patches implement certain environment variables in GDM which are set by
|
||||
# the gdm configuration module (nixos/modules/services/x11/display-managers/gdm.nix).
|
||||
|
||||
# Look for session definition files in the directory specified by GDM_SESSIONS_DIR.
|
||||
./sessions_dir.patch
|
||||
|
||||
# Allow specifying X server arguments with GDM_X_SERVER_EXTRA_ARGS.
|
||||
./gdm-x-session_extra_args.patch
|
||||
./gdm-session-worker_xserver-path.patch
|
||||
|
||||
# Allow specifying a wrapper for running the session command.
|
||||
./gdm-x-session_session-wrapper.patch
|
||||
|
||||
# Forwards certain environment variables to the gdm-x-session child process
|
||||
# to ensure that the above two patches actually work.
|
||||
./gdm-session-worker_forward-vars.patch
|
||||
];
|
||||
|
||||
installFlags = [
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
|
||||
index 9ef4c5b..94da834 100644
|
||||
--- a/daemon/gdm-session-worker.c
|
||||
+++ b/daemon/gdm-session-worker.c
|
||||
@@ -1515,6 +1515,16 @@ gdm_session_worker_load_env_d (GdmSessionWorker *worker)
|
||||
g_object_unref (dir);
|
||||
}
|
||||
|
||||
+static void
|
||||
+gdm_session_worker_forward_var (GdmSessionWorker *worker, char const *var)
|
||||
+{
|
||||
+ char const *value = g_getenv(var);
|
||||
+ if (value != NULL) {
|
||||
+ g_debug ("forwarding %s= %s", var, value);
|
||||
+ gdm_session_worker_set_environment_variable(worker, var, value);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
gdm_session_worker_accredit_user (GdmSessionWorker *worker,
|
||||
GError **error)
|
||||
@@ -1559,6 +1569,9 @@ gdm_session_worker_accredit_user (GdmSessionWorker *worker,
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ gdm_session_worker_forward_var(worker, "GDM_X_SERVER_EXTRA_ARGS");
|
||||
+ gdm_session_worker_forward_var(worker, "GDM_X_SESSION_WRAPPER");
|
||||
+
|
||||
gdm_session_worker_update_environment_from_passwd_info (worker,
|
||||
uid,
|
||||
gid,
|
||||
@@ -1,17 +0,0 @@
|
||||
diff --git a/daemon/gdm-session-worker.c.orig b/daemon/gdm-session-worker.c
|
||||
index 7bbda49..592691d 100644
|
||||
--- a/daemon/gdm-session-worker.c.orig
|
||||
+++ b/daemon/gdm-session-worker.c
|
||||
@@ -1557,6 +1557,12 @@ gdm_session_worker_accredit_user (GdmSessionWorker *worker,
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ if (g_getenv ("GDM_X_SERVER_EXTRA_ARGS") != NULL) {
|
||||
+ g_debug ("forwarding GDM_X_SERVER_EXTRA_ARGS= %s", g_getenv("GDM_X_SERVER_EXTRA_ARGS"));
|
||||
+ gdm_session_worker_set_environment_variable (worker, "GDM_X_SERVER_EXTRA_ARGS",
|
||||
+ g_getenv("GDM_X_SERVER_EXTRA_ARGS"));
|
||||
+ }
|
||||
+
|
||||
gdm_session_worker_update_environment_from_passwd_info (worker,
|
||||
uid,
|
||||
gid,
|
||||
@@ -0,0 +1,40 @@
|
||||
diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c
|
||||
index 88fe96f..b1b140a 100644
|
||||
--- a/daemon/gdm-x-session.c
|
||||
+++ b/daemon/gdm-x-session.c
|
||||
@@ -664,18 +664,34 @@ spawn_session (State *state,
|
||||
state->session_command,
|
||||
NULL);
|
||||
} else {
|
||||
+ char const *session_wrapper;
|
||||
+ char *eff_session_command;
|
||||
int ret;
|
||||
char **argv;
|
||||
|
||||
- ret = g_shell_parse_argv (state->session_command,
|
||||
+ session_wrapper = g_getenv("GDM_X_SESSION_WRAPPER");
|
||||
+ if (session_wrapper != NULL) {
|
||||
+ char *quoted_wrapper = g_shell_quote(session_wrapper);
|
||||
+ eff_session_command = g_strjoin(" ", quoted_wrapper, state->session_command, NULL);
|
||||
+ g_free(quoted_wrapper);
|
||||
+ } else {
|
||||
+ eff_session_command = state->session_command;
|
||||
+ }
|
||||
+
|
||||
+ ret = g_shell_parse_argv (eff_session_command,
|
||||
NULL,
|
||||
&argv,
|
||||
&error);
|
||||
|
||||
+ if (session_wrapper != NULL) {
|
||||
+ g_free(eff_session_command);
|
||||
+ }
|
||||
+
|
||||
if (!ret) {
|
||||
g_debug ("could not parse session arguments: %s", error->message);
|
||||
goto out;
|
||||
}
|
||||
+
|
||||
subprocess = g_subprocess_launcher_spawnv (launcher,
|
||||
(const char * const *) argv,
|
||||
&error);
|
||||
@@ -107,26 +107,10 @@ let
|
||||
|
||||
|
||||
/*
|
||||
This is not a core Elm package, and it's hosted on GitHub.
|
||||
To update, run:
|
||||
|
||||
cabal2nix --jailbreak --revision refs/tags/foo http://github.com/avh4/elm-format > packages/elm-format.nix
|
||||
|
||||
where foo is a tag for a new version, for example "0.8.0".
|
||||
The elm-format expression is updated via a script in the https://github.com/avh4/elm-format repo:
|
||||
`pacakge/nix/build.sh`
|
||||
*/
|
||||
elm-format = overrideCabal (self.callPackage ./packages/elm-format.nix { }) (drv: {
|
||||
# https://github.com/avh4/elm-format/issues/529
|
||||
patchPhase = ''
|
||||
cat >Setup.hs <<EOF
|
||||
import Distribution.Simple
|
||||
main = defaultMain
|
||||
EOF
|
||||
|
||||
sed -i '/Build_elm_format/d' elm-format.cabal
|
||||
sed -i 's/Build_elm_format.gitDescribe/""/' src/ElmFormat/Version.hs
|
||||
sed -i '/Build_elm_format/d' src/ElmFormat/Version.hs
|
||||
'';
|
||||
});
|
||||
elm-format = self.callPackage ./packages/elm-format.nix {};
|
||||
};
|
||||
in elmPkgs // {
|
||||
inherit elmPkgs;
|
||||
@@ -134,6 +118,7 @@ let
|
||||
|
||||
# Needed for elm-format
|
||||
indents = self.callPackage ./packages/indents.nix {};
|
||||
tasty-quickcheck = self.callPackage ./packages/tasty-quickcheck.nix {};
|
||||
};
|
||||
};
|
||||
in hsPkgs.elmPkgs
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
{ mkDerivation, ansi-terminal, ansi-wl-pprint, base, binary
|
||||
, bytestring, Cabal, cmark, containers, directory, fetchgit
|
||||
, filepath, free, HUnit, indents, json, mtl, optparse-applicative
|
||||
, parsec, process, QuickCheck, quickcheck-io, split, stdenv, tasty
|
||||
, tasty-golden, tasty-hunit, tasty-quickcheck, text
|
||||
{ mkDerivation, fetchgit, ansi-terminal, ansi-wl-pprint, base, binary
|
||||
, bytestring, Cabal, cmark, containers, directory, filepath, free
|
||||
, HUnit, indents, json, mtl, optparse-applicative, parsec, process
|
||||
, QuickCheck, quickcheck-io, split, stdenv, tasty, tasty-golden
|
||||
, tasty-hunit, tasty-quickcheck, text
|
||||
}:
|
||||
mkDerivation {
|
||||
pname = "elm-format";
|
||||
version = "0.8.0";
|
||||
version = "0.8.1";
|
||||
src = fetchgit {
|
||||
url = "http://github.com/avh4/elm-format";
|
||||
sha256 = "1w79xvsyq98vfz3jb4sv8433vdh6pcg8s7yh54lcxzr1p08yhsb6";
|
||||
rev = "f19ac28046d7e83ff95f845849c033cc616f1bd6";
|
||||
sha256 = "0p1dy1m6illsl7i04zsv5jqw7i4znv7pfpdfm53zy0k7mq0fk09j";
|
||||
rev = "89694e858664329e3cbdaeb71b15c4456fd739ff";
|
||||
};
|
||||
postPatch = ''
|
||||
sed -i "s|desc <-.*||" ./Setup.hs
|
||||
sed -i "s|gitDescribe = .*|gitDescribe = \\\\\"0.8.1\\\\\"\"|" ./Setup.hs
|
||||
'';
|
||||
isLibrary = true;
|
||||
isExecutable = true;
|
||||
setupHaskellDepends = [ base Cabal directory filepath process ];
|
||||
@@ -26,8 +30,6 @@ mkDerivation {
|
||||
split tasty tasty-golden tasty-hunit tasty-quickcheck text
|
||||
];
|
||||
doHaddock = false;
|
||||
jailbreak = true;
|
||||
doCheck = false;
|
||||
homepage = "http://elm-lang.org";
|
||||
description = "A source code formatter for Elm";
|
||||
license = stdenv.lib.licenses.bsd3;
|
||||
|
||||
14
pkgs/development/compilers/elm/packages/tasty-quickcheck.nix
Normal file
14
pkgs/development/compilers/elm/packages/tasty-quickcheck.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{ mkDerivation, base, pcre-light, QuickCheck, random, stdenv
|
||||
, tagged, tasty, tasty-hunit
|
||||
}:
|
||||
mkDerivation {
|
||||
pname = "tasty-quickcheck";
|
||||
version = "0.9.2";
|
||||
sha256 = "c5920adeab6e283d5e3ab45f3c80a1b011bedfbe4a3246a52606da2e1da95873";
|
||||
libraryHaskellDepends = [ base QuickCheck random tagged tasty ];
|
||||
testHaskellDepends = [ base pcre-light tasty tasty-hunit ];
|
||||
doCheck = false;
|
||||
homepage = "https://github.com/feuerbach/tasty";
|
||||
description = "QuickCheck support for the Tasty test framework";
|
||||
license = stdenv.lib.licenses.mit;
|
||||
}
|
||||
@@ -1,3 +1 @@
|
||||
cabal2nix https://github.com/elm/compiler --revision 32059a289d27e303fa1665e9ada0a52eb688f302 > packages/elm.nix
|
||||
cabal2nix --no-check cabal://indents-0.3.3 > packages/indents.nix
|
||||
cabal2nix --no-haddock --no-check --jailbreak --revision refs/tags/0.8.0 http://github.com/avh4/elm-format > packages/elm-format.nix
|
||||
|
||||
@@ -150,6 +150,7 @@ let result = stdenv.mkDerivation rec {
|
||||
meta = with stdenv.lib; {
|
||||
license = licenses.unfree;
|
||||
platforms = [ "x86_64-linux" ]; # some inherit jre.meta.platforms
|
||||
knownVulnerabilities = [ "Support ended in September 2018. Use OpenJDK or JDK 8." ];
|
||||
};
|
||||
|
||||
}; in result
|
||||
|
||||
@@ -103,18 +103,12 @@ self: super: {
|
||||
};
|
||||
|
||||
# Fix test trying to access /home directory
|
||||
shell-conduit = (overrideCabal super.shell-conduit (drv: {
|
||||
shell-conduit = overrideCabal super.shell-conduit (drv: {
|
||||
postPatch = "sed -i s/home/tmp/ test/Spec.hs";
|
||||
|
||||
# the tests for shell-conduit on Darwin illegitimatey assume non-GNU echo
|
||||
# see: https://github.com/psibi/shell-conduit/issues/12
|
||||
doCheck = !pkgs.stdenv.isDarwin;
|
||||
})).overrideScope (self: super: {
|
||||
# shell-conduit doesn't build with conduit 1.3
|
||||
# see https://github.com/psibi/shell-conduit/issues/15
|
||||
conduit = self.conduit_1_2_13_1;
|
||||
conduit-extra = self.conduit-extra_1_2_3_2;
|
||||
resourcet = self.resourcet_1_1_11;
|
||||
});
|
||||
|
||||
# https://github.com/froozen/kademlia/issues/2
|
||||
@@ -681,8 +675,13 @@ self: super: {
|
||||
# https://github.com/goldfirere/singletons/issues/122
|
||||
singletons = dontCheck super.singletons;
|
||||
|
||||
# https://github.com/fpco/stackage/issues/838
|
||||
cryptonite = dontCheck super.cryptonite;
|
||||
# Fix an aarch64 issue with cryptonite-0.25:
|
||||
# https://github.com/haskell-crypto/cryptonite/issues/234
|
||||
# This has been committed upstream, but there is, as of yet, no new release.
|
||||
cryptonite = appendPatch super.cryptonite (pkgs.fetchpatch {
|
||||
url = https://github.com/haskell-crypto/cryptonite/commit/4622e5fc8ece82f4cf31358e31cd02cf020e558e.patch;
|
||||
sha256 = "1m2d47ni4jbrpvxry50imj91qahr3r7zkqm157clrzlmw6gzpgnq";
|
||||
});
|
||||
|
||||
# We cannot build this package w/o the C library from <http://www.phash.org/>.
|
||||
phash = markBroken super.phash;
|
||||
@@ -1160,4 +1159,5 @@ self: super: {
|
||||
};
|
||||
};
|
||||
|
||||
arbtt = doJailbreak super.arbtt;
|
||||
} // import ./configuration-tensorflow.nix {inherit pkgs haskellLib;} self super
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ mkDerivation, lib, fetchFromGitHub, extra-cmake-modules
|
||||
, qtbase, qtmultimedia, qtquick1, qttools
|
||||
, libGLU_combined, libX11
|
||||
, libGL, libX11
|
||||
, libass, openal, ffmpeg, libuchardet
|
||||
, alsaLib, libpulseaudio, libva
|
||||
}:
|
||||
@@ -14,7 +14,7 @@ mkDerivation rec {
|
||||
nativeBuildInputs = [ extra-cmake-modules qttools ];
|
||||
buildInputs = [
|
||||
qtbase qtmultimedia qtquick1
|
||||
libGLU_combined libX11
|
||||
libGL libX11
|
||||
libass openal ffmpeg libuchardet
|
||||
alsaLib libpulseaudio libva
|
||||
];
|
||||
@@ -27,18 +27,20 @@ mkDerivation rec {
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
# Make sure libqtav finds its libGL dependancy at both link and run time
|
||||
# by adding libGLU_combined to rpath. Not sure why it wasn't done automatically like
|
||||
# the other libraries as `libGLU_combined` is part of our `buildInputs`.
|
||||
NIX_CFLAGS_LINK = [ "-Wl,-rpath,${libGLU_combined}/lib"];
|
||||
# Make sure libqtav finds its libGL dependency at both link and run time
|
||||
# by adding libGL to rpath. Not sure why it wasn't done automatically like
|
||||
# the other libraries as `libGL` is part of our `buildInputs`.
|
||||
NIX_CFLAGS_LINK = [ "-Wl,-rpath,${libGL}/lib"];
|
||||
|
||||
preFixup = ''
|
||||
mkdir -p "$out/bin"
|
||||
cp -a "./bin/"* "$out/bin"
|
||||
'';
|
||||
|
||||
stripDebugList = [ "lib" "libexec" "bin" "qml" ];
|
||||
|
||||
meta = {
|
||||
description = "A multimedia playback framework based on Qt + FFmpeg.";
|
||||
description = "A multimedia playback framework based on Qt + FFmpeg";
|
||||
#license = licenses.lgpl21; # For the libraries / headers only.
|
||||
license = licenses.gpl3; # With the examples (under bin) and most likely some of the optional dependencies used.
|
||||
homepage = http://www.qtav.org/;
|
||||
|
||||
@@ -165,6 +165,11 @@ stdenv.mkDerivation rec {
|
||||
${installExtraFiles face}
|
||||
'');
|
||||
|
||||
postConfigure = ''
|
||||
[ -e modules/core/version_string.inc ]
|
||||
echo '"(build info elided)"' > modules/core/version_string.inc
|
||||
'';
|
||||
|
||||
buildInputs =
|
||||
[ zlib pcre hdf5 glog boost google-gflags protobuf ]
|
||||
++ lib.optional enablePython pythonPackages.python
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
qtModule {
|
||||
name = "qtgraphicaleffects";
|
||||
qtInputs = [ qtdeclarative ];
|
||||
outputs = [ "out" ];
|
||||
outputs = [ "out" "dev" ];
|
||||
}
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "Django";
|
||||
version = "1.11.15";
|
||||
version = "1.11.16";
|
||||
|
||||
disabled = pythonOlder "2.7";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.djangoproject.com/m/releases/1.11/${pname}-${version}.tar.gz";
|
||||
sha256 = "0h2sl02x2mxr3rl3dy750pzm5kvmx77116fys8rrgw164kc3b0mi";
|
||||
sha256 = "14apywfi8mfy50xh07cagp24kx9mlqfzfq4f60klz90ng328q9i9";
|
||||
};
|
||||
|
||||
patches = stdenv.lib.optionals withGdal [
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "Django";
|
||||
version = "2.0.8";
|
||||
version = "2.0.9";
|
||||
|
||||
disabled = !isPy3k;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "12z3b9v0zl7w9bm5sl7dpkk5w35ypalizfmnaj9jac41k8vfmbk8";
|
||||
sha256 = "0sgx548zp5xf8dajiamdskbrphssiyajhgbw8iza6b68mda4bnfn";
|
||||
};
|
||||
|
||||
patches = stdenv.lib.optionals withGdal [
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "Django";
|
||||
version = "2.1";
|
||||
version = "2.1.2";
|
||||
|
||||
disabled = !isPy3k;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "0dv184lgp7scq8cr4422rrvkd8npyiqww0zw50ygcim5smw6093z";
|
||||
sha256 = "0ibbs76pzy8zd47yviljrp1s66fmbf5b62fixayaznj7pdzavg7g";
|
||||
};
|
||||
|
||||
patches = stdenv.lib.optionals withGdal [
|
||||
|
||||
@@ -367,6 +367,7 @@ let
|
||||
tkrplot = [ pkgs.xorg.libX11 pkgs.tk.dev ];
|
||||
topicmodels = [ pkgs.gsl_1 ];
|
||||
udunits2 = [ pkgs.udunits pkgs.expat ];
|
||||
units = [ pkgs.udunits ];
|
||||
V8 = [ pkgs.v8_3_14 ];
|
||||
VBLPCM = [ pkgs.gsl_1 ];
|
||||
WhopGenome = [ pkgs.zlib.dev ];
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "sbt-${version}";
|
||||
version = "1.2.3";
|
||||
version = "1.2.4";
|
||||
|
||||
src = fetchurl {
|
||||
urls = [
|
||||
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
|
||||
"https://github.com/sbt/sbt/releases/download/v${version}/sbt-${version}.tgz"
|
||||
"https://cocl.us/sbt-${version}.tgz"
|
||||
];
|
||||
sha256 = "1szyp9hgrvr3r5rhr98cn5mkhca1mr0qfs6cd8fiihm6hzjzn0nm";
|
||||
sha256 = "06zv1mm4rhl0h6qa7m4w5lbwjcyqp43r183q36q9zlyip965mnrn";
|
||||
};
|
||||
|
||||
patchPhase = ''
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "jenkins-${version}";
|
||||
version = "2.138.1";
|
||||
version = "2.138.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://mirrors.jenkins.io/war-stable/${version}/jenkins.war";
|
||||
sha256 = "09svkqii9lv1br0al6wjn1l0fsqf6s7fdrfc0awmfsg8fmjlpf7c";
|
||||
sha256 = "10qyr8izngnhlr1b03a9vdnbmwprbqsjnd55hjdalmxy6dq5mvfq";
|
||||
};
|
||||
|
||||
buildCommand = ''
|
||||
|
||||
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
unpackPhase = "tar xvjf $src; cd lsof_*; tar xvf lsof_*.tar; sourceRoot=$( echo lsof_*/); ";
|
||||
|
||||
patches = stdenv.lib.optional stdenv.isDarwin ./darwin-dfile.patch;
|
||||
patches = [ ./no-build-info.patch ] ++ stdenv.lib.optional stdenv.isDarwin ./darwin-dfile.patch;
|
||||
|
||||
postPatch = stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
substituteInPlace dialects/linux/dlsof.h --replace "defined(__UCLIBC__)" 1
|
||||
|
||||
43
pkgs/development/tools/misc/lsof/no-build-info.patch
Normal file
43
pkgs/development/tools/misc/lsof/no-build-info.patch
Normal file
@@ -0,0 +1,43 @@
|
||||
diff -ru -x '*~' lsof_4.91_src-orig/usage.c lsof_4.91_src/usage.c
|
||||
--- lsof_4.91_src-orig/usage.c 2018-02-14 15:20:32.000000000 +0100
|
||||
+++ lsof_4.91_src/usage.c 2018-10-08 21:57:45.718560869 +0200
|
||||
@@ -930,26 +930,6 @@
|
||||
(void) fprintf(stderr, " configuration info: %s\n", cp);
|
||||
#endif /* defined(LSOF_CINFO) */
|
||||
|
||||
- if ((cp = isnullstr(LSOF_CCDATE)))
|
||||
- (void) fprintf(stderr, " constructed: %s\n", cp);
|
||||
- cp = isnullstr(LSOF_HOST);
|
||||
- if (!(cp1 = isnullstr(LSOF_LOGNAME)))
|
||||
- cp1 = isnullstr(LSOF_USER);
|
||||
- if (cp || cp1) {
|
||||
- if (cp && cp1)
|
||||
- cp2 = "by and on";
|
||||
- else if (cp)
|
||||
- cp2 = "on";
|
||||
- else
|
||||
- cp2 = "by";
|
||||
- (void) fprintf(stderr, " constructed %s: %s%s%s\n",
|
||||
- cp2,
|
||||
- cp1 ? cp1 : "",
|
||||
- (cp && cp1) ? "@" : "",
|
||||
- cp ? cp : ""
|
||||
- );
|
||||
- }
|
||||
-
|
||||
#if defined(LSOF_BLDCMT)
|
||||
if ((cp = isnullstr(LSOF_BLDCMT)))
|
||||
(void) fprintf(stderr, " builder's comment: %s\n", cp);
|
||||
@@ -959,12 +939,8 @@
|
||||
(void) fprintf(stderr, " compiler: %s\n", cp);
|
||||
if ((cp = isnullstr(LSOF_CCV)))
|
||||
(void) fprintf(stderr, " compiler version: %s\n", cp);
|
||||
- if ((cp = isnullstr(LSOF_CCFLAGS)))
|
||||
- (void) fprintf(stderr, " compiler flags: %s\n", cp);
|
||||
if ((cp = isnullstr(LSOF_LDFLAGS)))
|
||||
(void) fprintf(stderr, " loader flags: %s\n", cp);
|
||||
- if ((cp = isnullstr(LSOF_SYSINFO)))
|
||||
- (void) fprintf(stderr, " system info: %s\n", cp);
|
||||
(void) report_SECURITY(" ", ".\n");
|
||||
(void) report_WARNDEVACCESS(" ", "are", ".\n");
|
||||
(void) report_HASKERNIDCK(" K", "is");
|
||||
@@ -5,67 +5,112 @@
|
||||
# This directory menaces with spikes of Nix code. It is terrifying.
|
||||
#
|
||||
# If this is your first time here, you should probably install the dwarf-fortress-full package,
|
||||
# for instance with `environment.systempackages = [ pkgs.dwarf-fortress.dwarf-fortress-full ];`.
|
||||
# for instance with:
|
||||
#
|
||||
# environment.systemPackages = [ pkgs.dwarf-fortress-packages.dwarf-fortress-full ];
|
||||
#
|
||||
# You can adjust its settings by using override, or compile your own package by
|
||||
# using the other packages here. Take a look at lazy-pack.nix to get an idea of
|
||||
# how.
|
||||
# using the other packages here.
|
||||
#
|
||||
# For example, you can enable the FPS indicator, disable the intro, pick a
|
||||
# theme other than phoebus (the default for dwarf-fortress-full), _and_ use
|
||||
# an older version with something like:
|
||||
#
|
||||
# environment.systemPackages = [
|
||||
# (pkgs.dwarf-fortress-packages.dwarf-fortress-full.override {
|
||||
# dfVersion = "0.44.11";
|
||||
# theme = "cla";
|
||||
# enableIntro = false;
|
||||
# enableFPS = true;
|
||||
# })
|
||||
# ]
|
||||
#
|
||||
# Take a look at lazy-pack.nix to see all the other options.
|
||||
#
|
||||
# You will find the configuration files in ~/.local/share/df_linux/data/init. If
|
||||
# you un-symlink them and edit, then the scripts will avoid overwriting your
|
||||
# changes on later launches, but consider extending the wrapper with your
|
||||
# desired options instead.
|
||||
#
|
||||
# Although both dfhack and dwarf therapist are included in the lazy pack, you
|
||||
# can only use one at a time. DFHack does have therapist-like features, so this
|
||||
# may or may not be a problem.
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
callPackage = pkgs.newScope self;
|
||||
|
||||
# The latest Dwarf Fortress version. Maintainers: when a new version comes
|
||||
# out, ensure that (unfuck|dfhack|twbt) are all up to date before changing
|
||||
# this.
|
||||
latestVersion = "0.44.12";
|
||||
|
||||
# Converts a version to a package name.
|
||||
versionToName = version: "dwarf-fortress_${lib.replaceStrings ["."] ["_"] version}";
|
||||
|
||||
# A map of names to each Dwarf Fortress package we know about.
|
||||
df-games = lib.listToAttrs (map (dfVersion: {
|
||||
name = "dwarf-fortress_${lib.replaceStrings ["."] ["_"] dfVersion}";
|
||||
value = callPackage ./wrapper {
|
||||
inherit (self) themes;
|
||||
dwarf-fortress = callPackage ./game.nix { inherit dfVersion; };
|
||||
};
|
||||
name = versionToName dfVersion;
|
||||
value =
|
||||
let
|
||||
# I can't believe this syntax works. Spikes of Nix code indeed...
|
||||
dwarf-fortress = callPackage ./game.nix {
|
||||
inherit dfVersion;
|
||||
inherit dwarf-fortress-unfuck;
|
||||
};
|
||||
|
||||
# unfuck is linux-only right now, we will only use it there.
|
||||
dwarf-fortress-unfuck = if stdenv.isLinux then callPackage ./unfuck.nix { inherit dfVersion; }
|
||||
else null;
|
||||
|
||||
twbt = callPackage ./twbt { inherit dfVersion; };
|
||||
|
||||
dfhack = callPackage ./dfhack {
|
||||
inherit (pkgs.perlPackages) XMLLibXML XMLLibXSLT;
|
||||
inherit dfVersion twbt;
|
||||
stdenv = gccStdenv;
|
||||
};
|
||||
|
||||
dwarf-therapist = callPackage ./dwarf-therapist/wrapper.nix {
|
||||
inherit dwarf-fortress;
|
||||
dwarf-therapist = pkgs.qt5.callPackage ./dwarf-therapist {
|
||||
texlive = pkgs.texlive.combine {
|
||||
inherit (pkgs.texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem;
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
callPackage ./wrapper {
|
||||
inherit (self) themes;
|
||||
|
||||
dwarf-fortress = dwarf-fortress;
|
||||
dwarf-fortress-unfuck = dwarf-fortress-unfuck;
|
||||
twbt = twbt;
|
||||
dfhack = dfhack;
|
||||
dwarf-therapist = dwarf-therapist;
|
||||
};
|
||||
}) (lib.attrNames self.df-hashes));
|
||||
|
||||
self = rec {
|
||||
df-hashes = builtins.fromJSON (builtins.readFile ./game.json);
|
||||
dwarf-fortress = df-games.dwarf-fortress_0_44_12;
|
||||
|
||||
dwarf-fortress-full = callPackage ./lazy-pack.nix { };
|
||||
# Aliases for the latest Dwarf Fortress and the selected Therapist install
|
||||
dwarf-fortress = getAttr (versionToName latestVersion) df-games;
|
||||
dwarf-therapist = dwarf-fortress.dwarf-therapist;
|
||||
dwarf-fortress-original = dwarf-fortress.dwarf-fortress;
|
||||
|
||||
dfhack = callPackage ./dfhack {
|
||||
inherit (pkgs.perlPackages) XMLLibXML XMLLibXSLT;
|
||||
stdenv = gccStdenv;
|
||||
dwarf-fortress-full = callPackage ./lazy-pack.nix {
|
||||
inherit df-games versionToName latestVersion;
|
||||
};
|
||||
|
||||
|
||||
soundSense = callPackage ./soundsense.nix { };
|
||||
|
||||
# unfuck is linux-only right now, we will only use it there.
|
||||
dwarf-fortress-unfuck = if stdenv.isLinux then callPackage ./unfuck.nix { }
|
||||
else null;
|
||||
|
||||
dwarf-therapist = callPackage ./dwarf-therapist/wrapper.nix {
|
||||
inherit (dwarf-fortress) dwarf-fortress;
|
||||
dwarf-therapist = pkgs.qt5.callPackage ./dwarf-therapist {
|
||||
texlive = pkgs.texlive.combine {
|
||||
inherit (pkgs.texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
legends-browser = callPackage ./legends-browser {};
|
||||
|
||||
twbt = callPackage ./twbt {};
|
||||
themes = recurseIntoAttrs (callPackage ./themes { });
|
||||
themes = recurseIntoAttrs (callPackage ./themes {
|
||||
stdenv = stdenvNoCC;
|
||||
});
|
||||
|
||||
# aliases
|
||||
# Theme aliases
|
||||
phoebus-theme = themes.phoebus;
|
||||
cla-theme = themes.cla;
|
||||
dwarf-fortress-original = dwarf-fortress.dwarf-fortress;
|
||||
};
|
||||
|
||||
in self // df-games
|
||||
|
||||
@@ -3,14 +3,62 @@
|
||||
, enableStoneSense ? false, allegro5, libGLU_combined
|
||||
, enableTWBT ? true, twbt
|
||||
, SDL
|
||||
, dfVersion
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
dfVersion = "0.44.12";
|
||||
version = "${dfVersion}-r1";
|
||||
dfhack-releases = {
|
||||
"0.43.05" = {
|
||||
dfHackRelease = "0.43.05-r3.1";
|
||||
sha256 = "1ds366i0qcfbn62w9qv98lsqcrm38npzgvcr35hf6ihqa6nc6xrl";
|
||||
xmlRev = "860a9041a75305609643d465123a4b598140dd7f";
|
||||
prerelease = false;
|
||||
};
|
||||
"0.44.05" = {
|
||||
dfHackRelease = "0.44.05-r2";
|
||||
sha256 = "1cwifdhi48a976xc472nf6q2k0ibwqffil5a4llcymcxdbgxdcc9";
|
||||
xmlRev = "2794f8a6d7405d4858bac486a0bb17b94740c142";
|
||||
prerelease = false;
|
||||
};
|
||||
"0.44.09" = {
|
||||
dfHackRelease = "0.44.09-r1";
|
||||
sha256 = "1nkfaa43pisbyik5inj5q2hja2vza5lwidg5z02jyh136jm64hwk";
|
||||
xmlRev = "3c0bf63674d5430deadaf7befaec42f0ec1e8bc5";
|
||||
prerelease = false;
|
||||
};
|
||||
"0.44.10" = {
|
||||
dfHackRelease = "0.44.10-r2";
|
||||
sha256 = "19bxsghxzw3bilhr8sm4axz7p7z8lrvbdsd1vdjf5zbg04rs866i";
|
||||
xmlRev = "321bd48b10c4c3f694cc801a7dee6be392c09b7b";
|
||||
prerelease = false;
|
||||
};
|
||||
"0.44.11" = {
|
||||
dfHackRelease = "0.44.11-beta2.1";
|
||||
sha256 = "1jgwcqg9m1ybv3szgnklp6zfpiw5mswla464dlj2gfi5v82zqbv2";
|
||||
xmlRev = "f27ebae6aa8fb12c46217adec5a812cd49a905c8";
|
||||
prerelease = true;
|
||||
};
|
||||
"0.44.12" = {
|
||||
dfHackRelease = "0.44.12-r1";
|
||||
sha256 = "0j03lq6j6w378z6cvm7jspxc7hhrqm8jaszlq0mzfvap0k13fgyy";
|
||||
xmlRev = "23500e4e9bd1885365d0a2ef1746c321c1dd5094";
|
||||
prerelease = false;
|
||||
};
|
||||
};
|
||||
|
||||
release = if hasAttr dfVersion dfhack-releases
|
||||
then getAttr dfVersion dfhack-releases
|
||||
else throw "[DFHack] Unsupported Dwarf Fortress version: ${dfVersion}";
|
||||
|
||||
version = release.dfHackRelease;
|
||||
|
||||
warning = if release.prerelease then builtins.trace "[DFHack] Version ${version} is a prerelease. Careful!"
|
||||
else null;
|
||||
|
||||
# revision of library/xml submodule
|
||||
xmlRev = "23500e4e9bd1885365d0a2ef1746c321c1dd5094";
|
||||
xmlRev = release.xmlRev;
|
||||
|
||||
arch =
|
||||
if stdenv.hostPlatform.system == "x86_64-linux" then "64"
|
||||
@@ -21,6 +69,10 @@ let
|
||||
#! ${stdenv.shell}
|
||||
if [ "$*" = "describe --tags --long" ]; then
|
||||
echo "${version}-unknown"
|
||||
elif [ "$*" = "describe --tags --abbrev=8 --long" ]; then
|
||||
echo "${version}-unknown"
|
||||
elif [ "$*" = "describe --tags --abbrev=8 --exact-match" ]; then
|
||||
echo "${version}"
|
||||
elif [ "$*" = "rev-parse HEAD" ]; then
|
||||
if [ "$(dirname "$(pwd)")" = "xml" ]; then
|
||||
echo "${xmlRev}"
|
||||
@@ -41,8 +93,8 @@ let
|
||||
src = fetchFromGitHub {
|
||||
owner = "DFHack";
|
||||
repo = "dfhack";
|
||||
sha256 = "0j03lq6j6w378z6cvm7jspxc7hhrqm8jaszlq0mzfvap0k13fgyy";
|
||||
rev = version;
|
||||
rev = release.dfHackRelease;
|
||||
sha256 = release.sha256;
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
||||
26
pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in
Normal file
26
pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in
Normal file
@@ -0,0 +1,26 @@
|
||||
#!@stdenv_shell@ -e
|
||||
|
||||
[ -z "$DT_DIR" ] && DT_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/dwarftherapist"
|
||||
|
||||
install_dir="@install@"
|
||||
therapist_dir="@therapist@"
|
||||
|
||||
cat <<EOF >&2
|
||||
Using $DT_DIR as Dwarf Therapist overlay directory.
|
||||
EOF
|
||||
|
||||
update_path() {
|
||||
local path="$1"
|
||||
|
||||
mkdir -p "$DT_DIR/$(dirname "$path")"
|
||||
if [ ! -e "$DT_DIR/$path" ] || [ -L "$DT_DIR/$path" ]; then
|
||||
rm -f "$DT_DIR/$path"
|
||||
ln -s "$install_dir/share/dwarftherapist/$path" "$DT_DIR/$path"
|
||||
fi
|
||||
}
|
||||
|
||||
cd "$install_dir/share/dwarftherapist"
|
||||
update_path memory_layouts
|
||||
|
||||
QT_QPA_PLATFORM_PLUGIN_PATH="@qt_plugin_path@" \
|
||||
exec "$therapist_dir/bin/dwarftherapist" "$@"
|
||||
@@ -1,12 +1,16 @@
|
||||
{ stdenv, symlinkJoin, dwarf-therapist, dwarf-fortress, makeWrapper }:
|
||||
{ pkgs, stdenv, symlinkJoin, lib, dwarf-therapist, dwarf-fortress, makeWrapper }:
|
||||
|
||||
let
|
||||
platformSlug = if stdenv.targetPlatform.is32bit then
|
||||
"linux32" else "linux64";
|
||||
inifile = "linux/v0.${dwarf-fortress.baseVersion}.${dwarf-fortress.patchVersion}_${platformSlug}.ini";
|
||||
|
||||
in symlinkJoin {
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dwarf-therapist-${dwarf-therapist.version}";
|
||||
|
||||
wrapper = ./dwarf-therapist.in;
|
||||
|
||||
paths = [ dwarf-therapist ];
|
||||
|
||||
@@ -14,20 +18,33 @@ in symlinkJoin {
|
||||
|
||||
passthru = { inherit dwarf-fortress dwarf-therapist; };
|
||||
|
||||
postBuild = ''
|
||||
# DwarfTherapist assumes it's run in $out/share/dwarftherapist and
|
||||
# therefore uses many relative paths.
|
||||
wrapProgram $out/bin/dwarftherapist \
|
||||
--run "cd $out/share/dwarftherapist"
|
||||
buildCommand = ''
|
||||
mkdir -p $out/bin
|
||||
ln -s $out/bin/dwarftherapist $out/bin/DwarfTherapist
|
||||
substitute $wrapper $out/bin/dwarftherapist \
|
||||
--subst-var-by stdenv_shell ${stdenv.shell} \
|
||||
--subst-var-by install $out \
|
||||
--subst-var-by therapist ${dwarf-therapist} \
|
||||
--subst-var-by qt_plugin_path "${pkgs.qt5.qtbase}/lib/qt-${pkgs.qt5.qtbase.qtCompatVersion}/plugins/platforms"
|
||||
|
||||
chmod 755 $out/bin/dwarftherapist
|
||||
|
||||
# Fix up memory layouts
|
||||
rm -rf $out/share/dwarftherapist/memory_layouts/linux
|
||||
mkdir -p $out/share/dwarftherapist/memory_layouts/linux
|
||||
origmd5=$(cat "${dwarf-fortress}/hash.md5.orig" | cut -c1-8)
|
||||
patchedmd5=$(cat "${dwarf-fortress}/hash.md5" | cut -c1-8)
|
||||
substitute \
|
||||
${dwarf-therapist}/share/dwarftherapist/memory_layouts/${inifile} \
|
||||
$out/share/dwarftherapist/memory_layouts/${inifile} \
|
||||
--replace "$origmd5" "$patchedmd5"
|
||||
orig_md5=$(cat "${dwarf-fortress}/hash.md5.orig" | cut -c1-8)
|
||||
patched_md5=$(cat "${dwarf-fortress}/hash.md5" | cut -c1-8)
|
||||
input_file="${dwarf-therapist}/share/dwarftherapist/memory_layouts/${inifile}"
|
||||
output_file="$out/share/dwarftherapist/memory_layouts/${inifile}"
|
||||
|
||||
echo "[Dwarf Therapist Wrapper] Fixing Dwarf Fortress MD5 prefix:"
|
||||
echo " Input: $input_file"
|
||||
echo " Search: $orig_md5"
|
||||
echo " Output: $output_file"
|
||||
echo " Replace: $patched_md5"
|
||||
|
||||
substitute "$input_file" "$output_file" --replace "$orig_md5" "$patched_md5"
|
||||
'';
|
||||
|
||||
preferLocalBuild = true;
|
||||
}
|
||||
|
||||
@@ -42,9 +42,6 @@ let
|
||||
|
||||
in
|
||||
|
||||
assert dwarf-fortress-unfuck != null ->
|
||||
dwarf-fortress-unfuck.dfVersion == dfVersion;
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "dwarf-fortress-${dfVersion}";
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
{ stdenvNoCC, lib, buildEnv
|
||||
, dwarf-fortress, themes
|
||||
{ stdenvNoCC, lib, buildEnv, callPackage
|
||||
, df-games, themes, latestVersion, versionToName
|
||||
, dfVersion ? latestVersion
|
||||
# This package should, at any given time, provide an opinionated "optimal"
|
||||
# DF experience. It's the equivalent of the Lazy Newbie Pack, that is, and
|
||||
# should contain every utility available.
|
||||
# should contain every utility available unless you disable them.
|
||||
, enableDFHack ? stdenvNoCC.isLinux
|
||||
, enableTWBT ? enableDFHack
|
||||
, enableSoundSense ? true
|
||||
, enableStoneSense ? false # StoneSense is currently broken.
|
||||
, enableDwarfTherapist ? true, dwarf-therapist
|
||||
, enableStoneSense ? true
|
||||
, enableDwarfTherapist ? true
|
||||
, enableLegendsBrowser ? true, legends-browser
|
||||
, theme ? themes.phoebus
|
||||
# General config options:
|
||||
@@ -16,6 +17,15 @@
|
||||
, enableFPS ? false
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
dfGame = versionToName dfVersion;
|
||||
dwarf-fortress = if hasAttr dfGame df-games
|
||||
then getAttr dfGame df-games
|
||||
else throw "Unknown Dwarf Fortress version: ${dfVersion}";
|
||||
dwarf-therapist = dwarf-fortress.dwarf-therapist;
|
||||
in
|
||||
buildEnv {
|
||||
name = "dwarf-fortress-full";
|
||||
paths = [
|
||||
@@ -28,7 +38,7 @@ buildEnv {
|
||||
|
||||
meta = with stdenvNoCC.lib; {
|
||||
description = "An opinionated wrapper for Dwarf Fortress";
|
||||
maintainers = with maintainers; [ Baughn ];
|
||||
maintainers = with maintainers; [ Baughn numinit ];
|
||||
license = licenses.mit;
|
||||
platforms = platforms.all;
|
||||
homepage = https://github.com/NixOS/nixpkgs/;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{lib, fetchFromGitHub}:
|
||||
{lib, fetchFromGitHub, ...}:
|
||||
|
||||
with builtins;
|
||||
|
||||
|
||||
@@ -1,14 +1,59 @@
|
||||
{ stdenvNoCC, fetchurl, unzip }:
|
||||
{ stdenvNoCC, lib, fetchurl, unzip
|
||||
, dfVersion
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
twbt-releases = {
|
||||
"0.43.05" = {
|
||||
twbtRelease = "6.22";
|
||||
sha256 = "0di5d38f6jj9smsz0wjcs1zav4zba6hrk8cbn59kwpb1wamsh5c7";
|
||||
prerelease = false;
|
||||
};
|
||||
"0.44.05" = {
|
||||
twbtRelease = "6.35";
|
||||
sha256 = "0qjkgl7dsqzsd7pdq8a5bihhi1wplfkv1id7sj6dp3swjpsfxp8g";
|
||||
prerelease = false;
|
||||
};
|
||||
"0.44.09" = {
|
||||
twbtRelease = "6.41";
|
||||
sha256 = "0nsq15z05pbhqjvw2xqs1a9b1n2ma0aalhc3vh3mi4cd4k7lxh44";
|
||||
prerelease = false;
|
||||
};
|
||||
"0.44.10" = {
|
||||
twbtRelease = "6.49";
|
||||
sha256 = "1qjkc7k33qhxj2g18njzasccjqsis5y8zrw5vl90h4rs3i8ld9xz";
|
||||
prerelease = false;
|
||||
};
|
||||
"0.44.11" = {
|
||||
twbtRelease = "6.51";
|
||||
sha256 = "1yclqmarjd97ch054h425a12r8a5ailmflsd7b39cg4qhdr1nii5";
|
||||
prerelease = true;
|
||||
};
|
||||
"0.44.12" = {
|
||||
twbtRelease = "6.54";
|
||||
sha256 = "10gfd6vv0vk4v1r5hjbz7vf1zqys06dsad695gysc7fbcik2dakh";
|
||||
prerelease = false;
|
||||
};
|
||||
};
|
||||
|
||||
release = if hasAttr dfVersion twbt-releases
|
||||
then getAttr dfVersion twbt-releases
|
||||
else throw "[TWBT] Unsupported Dwarf Fortress version: ${dfVersion}";
|
||||
|
||||
warning = if release.prerelease then builtins.trace "[TWBT] Version ${version} is a prerelease. Careful!"
|
||||
else null;
|
||||
|
||||
in
|
||||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
name = "twbt-${version}";
|
||||
version = "6.54";
|
||||
dfVersion = "0.44.12";
|
||||
version = release.twbtRelease;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/mifki/df-twbt/releases/download/v${version}/twbt-${version}-linux.zip";
|
||||
sha256 = "10gfd6vv0vk4v1r5hjbz7vf1zqys06dsad695gysc7fbcik2dakh";
|
||||
sha256 = release.sha256;
|
||||
};
|
||||
|
||||
sourceRoot = ".";
|
||||
@@ -24,10 +69,9 @@ stdenvNoCC.mkDerivation rec {
|
||||
cp -a *.png $art/data/art/
|
||||
'';
|
||||
|
||||
|
||||
meta = with stdenvNoCC.lib; {
|
||||
description = "A plugin for Dwarf Fortress / DFHack that improves various aspects the game interface.";
|
||||
maintainers = with maintainers; [ Baughn ];
|
||||
maintainers = with maintainers; [ Baughn numinit ];
|
||||
license = licenses.mit;
|
||||
platforms = platforms.linux;
|
||||
homepage = https://github.com/mifki/df-twbt;
|
||||
|
||||
@@ -1,18 +1,52 @@
|
||||
{ stdenv, fetchFromGitHub, cmake
|
||||
{ stdenv, lib, fetchFromGitHub, cmake
|
||||
, libGL, libSM, SDL, SDL_image, SDL_ttf, glew, openalSoft
|
||||
, ncurses, glib, gtk2, libsndfile, zlib
|
||||
, dfVersion
|
||||
}:
|
||||
|
||||
let dfVersion = "0.44.12"; in
|
||||
with lib;
|
||||
|
||||
let
|
||||
unfuck-releases = {
|
||||
"0.43.05" = {
|
||||
unfuckRelease = "0.43.05";
|
||||
sha256 = "173dyrbxlzqvjf1j3n7vpns4gfjkpyvk9z16430xnmd5m6nda8p2";
|
||||
};
|
||||
"0.44.05" = {
|
||||
unfuckRelease = "0.44.05";
|
||||
sha256 = "00yj4l4gazxg4i6fj9rwri6vm17i6bviy2mpkx0z5c0mvsr7s14b";
|
||||
};
|
||||
"0.44.09" = {
|
||||
unfuckRelease = "0.44.09";
|
||||
sha256 = "138p0v8z2x47f0fk9k6g75ikw5wb3vxldwv5ggbkf4hhvlw6lvzm";
|
||||
};
|
||||
"0.44.10" = {
|
||||
unfuckRelease = "0.44.10";
|
||||
sha256 = "0vb19qx2ibc79j4bgbk9lskb883qfb0815zw1dfz9k7rqwal8mzj";
|
||||
};
|
||||
"0.44.11" = {
|
||||
unfuckRelease = "0.44.11.1";
|
||||
sha256 = "1kszkb1d1vll8p04ja41nangsaxb5lv4p3xh2jhmsmipfixw7nvz";
|
||||
};
|
||||
"0.44.12" = {
|
||||
unfuckRelease = "0.44.12";
|
||||
sha256 = "1kszkb1d1vll8p04ja41nangsaxb5lv4p3xh2jhmsmipfixw7nvz";
|
||||
};
|
||||
};
|
||||
|
||||
release = if hasAttr dfVersion unfuck-releases
|
||||
then getAttr dfVersion unfuck-releases
|
||||
else throw "[unfuck] Unknown Dwarf Fortress version: ${dfVersion}";
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "dwarf_fortress_unfuck-${dfVersion}";
|
||||
name = "dwarf_fortress_unfuck-${release.unfuckRelease}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "svenstaro";
|
||||
repo = "dwarf_fortress_unfuck";
|
||||
rev = dfVersion;
|
||||
sha256 = "1kszkb1d1vll8p04ja41nangsaxb5lv4p3xh2jhmsmipfixw7nvz";
|
||||
rev = release.unfuckRelease;
|
||||
sha256 = release.sha256;
|
||||
};
|
||||
|
||||
cmakeFlags = [
|
||||
@@ -20,23 +54,12 @@ stdenv.mkDerivation {
|
||||
"-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2.out}/lib/gtk-2.0/include"
|
||||
];
|
||||
|
||||
makeFlags = [
|
||||
''CFLAGS="-fkeep-inline-functions"''
|
||||
''CXXFLAGS="-fkeep-inline-functions"''
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
buildInputs = [
|
||||
libSM SDL SDL_image SDL_ttf glew openalSoft
|
||||
ncurses gtk2 libsndfile zlib libGL
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace CMakeLists.txt --replace \
|
||||
'set(CMAKE_BUILD_TYPE Release)' \
|
||||
'set(CMAKE_BUILD_TYPE Debug)'
|
||||
'';
|
||||
|
||||
# Don't strip unused symbols; dfhack hooks into some of them.
|
||||
dontStrip = true;
|
||||
|
||||
@@ -56,6 +79,6 @@ stdenv.mkDerivation {
|
||||
homepage = https://github.com/svenstaro/dwarf_fortress_unfuck;
|
||||
license = licenses.free;
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [ abbradar ];
|
||||
maintainers = with maintainers; [ abbradar numinit ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
{ stdenv, lib, buildEnv, dwarf-fortress, substituteAll
|
||||
{ stdenv, lib, buildEnv, substituteAll, runCommand
|
||||
, dwarf-fortress, dwarf-fortress-unfuck
|
||||
, dwarf-therapist
|
||||
, enableDFHack ? false, dfhack
|
||||
, enableSoundSense ? false, soundSense, jdk
|
||||
, enableStoneSense ? false
|
||||
@@ -31,40 +33,48 @@ let
|
||||
++ lib.optional enableTWBT twbt.art
|
||||
++ [ dwarf-fortress ];
|
||||
|
||||
fixup = lib.singleton (runCommand "fixup" {} ''
|
||||
mkdir -p $out/data/init
|
||||
cp ${dwarf-fortress}/data/init/init.txt $out/data/init/init.txt
|
||||
'' + lib.optionalString enableDFHack ''
|
||||
mkdir -p $out/hack
|
||||
|
||||
# Patch the MD5
|
||||
orig_md5=$(cat "${dwarf-fortress}/hash.md5.orig")
|
||||
patched_md5=$(cat "${dwarf-fortress}/hash.md5")
|
||||
input_file="${dfhack_}/hack/symbols.xml"
|
||||
output_file="$out/hack/symbols.xml"
|
||||
|
||||
echo "[DFHack Wrapper] Fixing Dwarf Fortress MD5:"
|
||||
echo " Input: $input_file"
|
||||
echo " Search: $orig_md5"
|
||||
echo " Output: $output_file"
|
||||
echo " Replace: $patched_md5"
|
||||
|
||||
substitute "$input_file" "$output_file" --replace "$orig_md5" "$patched_md5"
|
||||
'' + lib.optionalString enableTWBT ''
|
||||
substituteInPlace $out/data/init/init.txt \
|
||||
--replace '[PRINT_MODE:2D]' '[PRINT_MODE:TWBT]'
|
||||
'' + ''
|
||||
substituteInPlace $out/data/init/init.txt \
|
||||
--replace '[INTRO:YES]' '[INTRO:${unBool enableIntro}]' \
|
||||
--replace '[TRUETYPE:YES]' '[TRUETYPE:${unBool enableTruetype}]' \
|
||||
--replace '[FPS:NO]' '[FPS:${unBool enableFPS}]'
|
||||
'');
|
||||
|
||||
env = buildEnv {
|
||||
name = "dwarf-fortress-env-${dwarf-fortress.dfVersion}";
|
||||
|
||||
paths = themePkg ++ pkgs;
|
||||
paths = fixup ++ themePkg ++ pkgs;
|
||||
pathsToLink = [ "/" "/hack" "/hack/scripts" ];
|
||||
ignoreCollisions = true;
|
||||
|
||||
postBuild = ''
|
||||
# De-symlink init.txt
|
||||
cp $out/data/init/init.txt init.txt
|
||||
rm $out/data/init/init.txt
|
||||
mv init.txt $out/data/init/init.txt
|
||||
'' + lib.optionalString enableDFHack ''
|
||||
rm $out/hack/symbols.xml
|
||||
substitute ${dfhack_}/hack/symbols.xml $out/hack/symbols.xml \
|
||||
--replace $(cat ${dwarf-fortress}/hash.md5.orig) \
|
||||
$(cat ${dwarf-fortress}/hash.md5)
|
||||
'' + lib.optionalString enableTWBT ''
|
||||
substituteInPlace $out/data/init/init.txt \
|
||||
--replace '[PRINT_MODE:2D]' '[PRINT_MODE:TWBT]'
|
||||
'' + ''
|
||||
substituteInPlace $out/data/init/init.txt \
|
||||
--replace '[INTRO:YES]' '[INTRO:${unBool enableIntro}]' \
|
||||
--replace '[TRUETYPE:YES]' '[TRUETYPE:${unBool enableTruetype}]' \
|
||||
--replace '[FPS:NO]' '[FPS:${unBool enableFPS}]'
|
||||
'';
|
||||
ignoreCollisions = true;
|
||||
};
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "dwarf-fortress-${dwarf-fortress.dfVersion}";
|
||||
|
||||
compatible = lib.all (x: assert (x.dfVersion == dwarf-fortress.dfVersion); true) pkgs;
|
||||
|
||||
dfInit = substituteAll {
|
||||
name = "dwarf-fortress-init";
|
||||
src = ./dwarf-fortress-init.in;
|
||||
@@ -77,7 +87,7 @@ stdenv.mkDerivation rec {
|
||||
runDFHack = ./dfhack.in;
|
||||
runSoundSense = ./soundSense.in;
|
||||
|
||||
passthru = { inherit dwarf-fortress; };
|
||||
passthru = { inherit dwarf-fortress dwarf-therapist; };
|
||||
|
||||
buildCommand = ''
|
||||
mkdir -p $out/bin
|
||||
|
||||
@@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
|
||||
./remove-rust-buildstep.patch
|
||||
];
|
||||
preConfigure = ''
|
||||
sed -i -e 's|rust-stracciatella|${libstracciatella}/bin/libstracciatella.so|g' CMakeLists.txt
|
||||
sed -i -e 's|rust-stracciatella|${libstracciatella}/lib/libstracciatella.so|g' CMakeLists.txt
|
||||
cmakeFlagsArray+=("-DEXTRA_DATA_DIR=$out/share/ja2")
|
||||
'';
|
||||
|
||||
|
||||
39
pkgs/misc/themes/equilux-theme/default.nix
Normal file
39
pkgs/misc/themes/equilux-theme/default.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
{ stdenv, fetchFromGitHub, gnome3, libxml2, gtk-engine-murrine, gdk_pixbuf, librsvg, bc }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "equilux-theme-${version}";
|
||||
version = "20180927";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ddnexus";
|
||||
repo = "equilux-theme";
|
||||
rev = "equilux-v${version}";
|
||||
sha256 = "1j7ykygmwv3dmzqdc9byir86sjz6ykhv9bv1pll1bjvvnaalyzgk";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ gnome3.glib libxml2 bc ];
|
||||
|
||||
buildInputs = [ gnome3.gnome-themes-extra gdk_pixbuf librsvg ];
|
||||
|
||||
propagatedUserEnvPkgs = [ gtk-engine-murrine ];
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
patchShebangs install.sh
|
||||
sed -i install.sh \
|
||||
-e "s|if .*which gnome-shell.*;|if true;|" \
|
||||
-e "s|CURRENT_GS_VERSION=.*$|CURRENT_GS_VERSION=${stdenv.lib.versions.majorMinor gnome3.gnome-shell.version}|"
|
||||
mkdir -p $out/share/themes
|
||||
./install.sh --dest $out/share/themes
|
||||
rm $out/share/themes/*/COPYING
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
inherit (src.meta) homepage;
|
||||
description = "A Material Design theme for GNOME/GTK+ based desktop environments";
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.all;
|
||||
maintainers = [ maintainers.fpletz ];
|
||||
};
|
||||
}
|
||||
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
|
||||
meta = {
|
||||
description = "Grey and blue theme (Gtk, Xfce, Emerald, Metacity, Mutter, Unity)";
|
||||
homepage = https://github.com/shimmerproject/Greybird;
|
||||
license = with stdenv.lib.licenses; [ gpl2Plus cc-by-nc-sa-30 ];
|
||||
license = with stdenv.lib.licenses; [ gpl2Plus ]; # or alternatively: cc-by-nc-sa-30
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
maintainers = [ stdenv.lib.maintainers.romildo ];
|
||||
};
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "reattach-to-user-namespace-${version}";
|
||||
version = "2.6";
|
||||
version = "2.7";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/archive/v2.6.tar.gz";
|
||||
sha256 = "1d8ynzkdlxyyky9f88f7z50g9lwdydkpb2n7gkw3jgl2ac569xc0";
|
||||
url = "https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/archive/v${version}.tar.gz";
|
||||
sha256 = "00mjyj8yicrpnlm46rlbkvxgl5381l8xawh7rmjk10p3zrm56jbv";
|
||||
};
|
||||
|
||||
buildFlags = "ARCHES=x86_64";
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
with stdenv.lib;
|
||||
|
||||
buildLinux (args // rec {
|
||||
version = "4.14.74";
|
||||
version = "4.14.76";
|
||||
|
||||
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
|
||||
modDirVersion = if (modDirVersionArg == null) then concatStrings (intersperse "." (take 3 (splitString "." "${version}.0"))) else modDirVersionArg;
|
||||
@@ -13,6 +13,6 @@ buildLinux (args // rec {
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
|
||||
sha256 = "0wjw05brv7l1qpi38drc2z01sa7kpk3kadw36gx9cbvvzn4r3rkh";
|
||||
sha256 = "1gl2wkq4sazvpr0xnn4vrajj3j7w6hfiwdiy34y7jhlazyj1jgzf";
|
||||
};
|
||||
} // (args.argsOverride or {}))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
with stdenv.lib;
|
||||
|
||||
buildLinux (args // rec {
|
||||
version = "4.18.12";
|
||||
version = "4.18.14";
|
||||
|
||||
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
|
||||
modDirVersion = if (modDirVersionArg == null) then concatStrings (intersperse "." (take 3 (splitString "." "${version}.0"))) else modDirVersionArg;
|
||||
@@ -13,6 +13,6 @@ buildLinux (args // rec {
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
|
||||
sha256 = "1icz2nkhkb1xhpmc9gxfhc3ywkni8nywk25ixrmgcxp5rgcmlsl4";
|
||||
sha256 = "1lv2hpxzlk1yzr5dcjb0q0ylvlwx4ln2jvfvf01b9smr1lvd3iin";
|
||||
};
|
||||
} // (args.argsOverride or {}))
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{ stdenv, buildPackages, fetchurl, perl, buildLinux, ... } @ args:
|
||||
|
||||
buildLinux (args // rec {
|
||||
version = "4.4.159";
|
||||
version = "4.4.161";
|
||||
extraMeta.branch = "4.4";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
|
||||
sha256 = "1hivz1pyy4scp4s09ibz36ni4d1pwivizwls5dbh5qjy0pdvn00f";
|
||||
sha256 = "11rz66qvbcb6y3fz9k04jzn547sqdahqknd43imsr9sjgkaq60xy";
|
||||
};
|
||||
} // (args.argsOverride or {}))
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{ stdenv, buildPackages, fetchurl, perl, buildLinux, ... } @ args:
|
||||
|
||||
buildLinux (args // rec {
|
||||
version = "4.9.131";
|
||||
version = "4.9.133";
|
||||
extraMeta.branch = "4.9";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
|
||||
sha256 = "0q2xmbkh42ikw26bdxgk1f9192hygyq9ffkhjfpr0fcx8sak5nsp";
|
||||
sha256 = "0qv5n8vipkqcd0hpf5l41h023n46rgja39h895phlcxs4p00ywsk";
|
||||
};
|
||||
} // (args.argsOverride or {}))
|
||||
|
||||
@@ -90,6 +90,8 @@ in stdenv.mkDerivation rec {
|
||||
"statdpath=$(TMPDIR)"
|
||||
];
|
||||
|
||||
stripDebugList = [ "lib" "libexec" "bin" "etc/systemd/system-generators" ];
|
||||
|
||||
postInstall =
|
||||
''
|
||||
# Not used on NixOS
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user