mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-19 03:14:03 +00:00
Merge remote-tracking branch 'origin/master' into hardened-stdenv
This commit is contained in:
commit
0cee9febc5
@ -89,27 +89,27 @@ in ...</programlisting>
|
||||
<title><pkg>.overrideDerivation</title>
|
||||
|
||||
<warning>
|
||||
<para>Do not use this function in Nixpkgs. Because it breaks
|
||||
package abstraction and doesn’t provide error checking for
|
||||
function arguments, it is only intended for ad-hoc customisation
|
||||
(such as in <filename>~/.nixpkgs/config.nix</filename>).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Additionally, <varname>overrideDerivation</varname> forces an evaluation
|
||||
of the Derivation which can be quite a performance penalty if there are many
|
||||
overrides used.
|
||||
<para>Do not use this function in Nixpkgs as it evaluates a Derivation
|
||||
before modifying it, which breaks package abstraction and removes
|
||||
error-checking of function arguments. In addition, this
|
||||
evaluation-per-function application incurs a performance penalty,
|
||||
which can become a problem if many overrides are used.
|
||||
It is only intended for ad-hoc customisation, such as in
|
||||
<filename>~/.nixpkgs/config.nix</filename>.
|
||||
</para>
|
||||
</warning>
|
||||
|
||||
<para>
|
||||
The function <varname>overrideDerivation</varname> is usually available for all the
|
||||
derivations in the nixpkgs expression (<varname>pkgs</varname>).
|
||||
The function <varname>overrideDerivation</varname> creates a new derivation
|
||||
based on an existing one by overriding the original's attributes with
|
||||
the attribute set produced by the specified function.
|
||||
This function is available on all
|
||||
derivations defined using the <varname>makeOverridable</varname> function.
|
||||
Most standard derivation-producing functions, such as
|
||||
<varname>stdenv.mkDerivation</varname>, are defined using this
|
||||
function, which means most packages in the nixpkgs expression,
|
||||
<varname>pkgs</varname>, have this function.
|
||||
</para>
|
||||
<para>
|
||||
It is used to create a new derivation by overriding the attributes of
|
||||
the original derivation according to the given function.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Example usage:
|
||||
@ -125,9 +125,9 @@ in ...</programlisting>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In the above example, the name, src and patches of the derivation
|
||||
will be overridden, while all other attributes will be retained from the
|
||||
original derivation.
|
||||
In the above example, the <varname>name</varname>, <varname>src</varname>,
|
||||
and <varname>patches</varname> of the derivation will be overridden, while
|
||||
all other attributes will be retained from the original derivation.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -135,6 +135,20 @@ in ...</programlisting>
|
||||
the original derivation.
|
||||
</para>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
A package's attributes are evaluated *before* being modified by
|
||||
the <varname>overrideDerivation</varname> function.
|
||||
For example, the <varname>name</varname> attribute reference
|
||||
in <varname>url = "mirror://gnu/hello/${name}.tar.gz";</varname>
|
||||
is filled-in *before* the <varname>overrideDerivation</varname> function
|
||||
modifies the attribute set. This means that overriding the
|
||||
<varname>name</varname> attribute, in this example, *will not* change the
|
||||
value of the <varname>url</varname> attribute. Instead, we need to override
|
||||
both the <varname>name</varname> *and* <varname>url</varname> attributes.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
</section>
|
||||
|
||||
<section xml:id="sec-lib-makeOverridable">
|
||||
|
@ -457,7 +457,6 @@ rec {
|
||||
|
||||
/*** deprecated stuff ***/
|
||||
|
||||
deepSeqAttrs = throw "removed 2016-02-29 because unused and broken";
|
||||
zipWithNames = zipAttrsWithNames;
|
||||
zip = builtins.trace
|
||||
"lib.zip is deprecated, use lib.zipAttrsWith instead" zipAttrsWith;
|
||||
|
@ -374,8 +374,4 @@ rec {
|
||||
*/
|
||||
subtractLists = e: filter (x: !(elem x e));
|
||||
|
||||
/*** deprecated stuff ***/
|
||||
|
||||
deepSeqList = throw "removed 2016-02-29 because unused and broken";
|
||||
|
||||
}
|
||||
|
@ -15,6 +15,7 @@
|
||||
adev = "Adrien Devresse <adev@adev.name>";
|
||||
Adjective-Object = "Maxwell Huang-Hobbs <mhuan13@gmail.com>";
|
||||
adnelson = "Allen Nelson <ithinkican@gmail.com>";
|
||||
adolfogc = "Adolfo E. García Castro <adolfo.garcia.cr@gmail.com>";
|
||||
aespinosa = "Allan Espinosa <allan.espinosa@outlook.com>";
|
||||
aflatter = "Alexander Flatter <flatter@fastmail.fm>";
|
||||
aforemny = "Alexander Foremny <alexanderforemny@googlemail.com>";
|
||||
@ -185,6 +186,7 @@
|
||||
joamaki = "Jussi Maki <joamaki@gmail.com>";
|
||||
joelmo = "Joel Moberg <joel.moberg@gmail.com>";
|
||||
joelteon = "Joel Taylor <me@joelt.io>";
|
||||
joko = "Ioannis Koutras <ioannis.koutras@gmail.com>";
|
||||
jpbernardy = "Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com>";
|
||||
jraygauthier = "Raymond Gauthier <jraygauthier@gmail.com>";
|
||||
juliendehos = "Julien Dehos <dehos@lisic.univ-littoral.fr>";
|
||||
@ -231,6 +233,7 @@
|
||||
markus1189 = "Markus Hauck <markus1189@gmail.com>";
|
||||
markWot = "Markus Wotringer <markus@wotringer.de>";
|
||||
martijnvermaat = "Martijn Vermaat <martijn@vermaat.name>";
|
||||
martingms = "Martin Gammelsæter <martin@mg.am>";
|
||||
matejc = "Matej Cotman <cotman.matej@gmail.com>";
|
||||
mathnerd314 = "Mathnerd314 <mathnerd314.gph+hs@gmail.com>";
|
||||
matthiasbeyer = "Matthias Beyer <mail@beyermatthias.de>";
|
||||
@ -420,6 +423,7 @@
|
||||
wscott = "Wayne Scott <wsc9tt@gmail.com>";
|
||||
wyvie = "Elijah Rum <elijahrum@gmail.com>";
|
||||
yarr = "Dmitry V. <savraz@gmail.com>";
|
||||
yurrriq = "Eric Bailey <eric@ericb.me>";
|
||||
z77z = "Marco Maggesi <maggesi@math.unifi.it>";
|
||||
zagy = "Christian Zagrodnick <cz@flyingcircus.io>";
|
||||
zef = "Zef Hemel <zef@zef.me>";
|
||||
|
@ -1,3 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
./fetch-kde-qt.sh http://download.kde.org/stable/frameworks/5.22/ -A '*.tar.xz'
|
||||
./fetch-kde-qt.sh http://download.kde.org/stable/frameworks/5.24/ -A '*.tar.xz'
|
||||
|
@ -1,3 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
./fetch-kde-qt.sh http://download.kde.org/stable/plasma/5.6.5/ -A '*.tar.xz'
|
||||
./fetch-kde-qt.sh http://download.kde.org/stable/plasma/5.7.0/ -A '*.tar.xz'
|
||||
|
102
nixos/doc/manual/man-nixos-version.xml
Normal file
102
nixos/doc/manual/man-nixos-version.xml
Normal file
@ -0,0 +1,102 @@
|
||||
<refentry xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle><command>nixos-version</command></refentrytitle>
|
||||
<manvolnum>8</manvolnum>
|
||||
<refmiscinfo class="source">NixOS</refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname><command>nixos-version</command></refname>
|
||||
<refpurpose>show the version of nixpkgs NixOS was built from</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>nixos-version</command>
|
||||
<arg><option>--hash</option></arg>
|
||||
<arg><option>--revision</option></arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsection><title>Description</title>
|
||||
|
||||
<para>This command describes the version of nixpkgs used to build
|
||||
NixOS.</para>
|
||||
|
||||
<para>By default the output includes:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem><para>The NixOS release</para></listitem>
|
||||
<listitem><para>Number of commits since the release</para></listitem>
|
||||
<listitem><para>Git SHA of the released commit</para></listitem>
|
||||
<listitem><para>Codename of the NixOS release</para></listitem>
|
||||
</itemizedlist>
|
||||
</refsection>
|
||||
|
||||
<refsection><title>Example</title>
|
||||
|
||||
<para>Here is an example output, and corresponding information:
|
||||
<screen>$ nixos-version
|
||||
16.03.1011.6317da4 (Emu)
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
<informaltable>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Attribute</entry>
|
||||
<entry>Value</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>NixOS Release</entry>
|
||||
<entry><literal>16.03</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Commit Count</entry>
|
||||
<entry><literal>1011</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Commit SHA</entry>
|
||||
<entry><literal>6317da4</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Release Codename</entry>
|
||||
<entry><literal>Emu</literal></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
<para>
|
||||
</para>
|
||||
|
||||
|
||||
</refsection>
|
||||
|
||||
|
||||
<refsection><title>Options</title>
|
||||
|
||||
<para>This command accepts the following options:</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--hash</option></term>
|
||||
<term><option>--revision</option></term>
|
||||
<listitem>
|
||||
<para>The output will be the full hash of the git commit
|
||||
<screen>$ nixos-version --hash
|
||||
6317da40006f6bc2480c6781999c52d88dde2acf
|
||||
</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
</refsection>
|
||||
</refentry>
|
@ -27,5 +27,6 @@
|
||||
<xi:include href="man-nixos-install.xml" />
|
||||
<xi:include href="man-nixos-option.xml" />
|
||||
<xi:include href="man-nixos-rebuild.xml" />
|
||||
<xi:include href="man-nixos-version.xml" />
|
||||
|
||||
</reference>
|
||||
|
@ -13,8 +13,11 @@ echo "NixOS version is $version ($major)"
|
||||
|
||||
rm -f ec2-amis.nix
|
||||
|
||||
types="hvm pv"
|
||||
stores="ebs s3"
|
||||
regions="eu-west-1 eu-central-1 us-east-1 us-west-1 us-west-2 ap-southeast-1 ap-southeast-2 ap-northeast-1 ap-northeast-2 sa-east-1 ap-south-1"
|
||||
|
||||
for type in hvm pv; do
|
||||
for type in $types; do
|
||||
link=$stateDir/$type
|
||||
imageFile=$link/nixos.qcow2
|
||||
system=x86_64-linux
|
||||
@ -31,7 +34,7 @@ for type in hvm pv; do
|
||||
--arg configuration "{ imports = [ <nixpkgs/nixos/maintainers/scripts/ec2/amazon-image.nix> ]; ec2.hvm = $hvmFlag; }"
|
||||
fi
|
||||
|
||||
for store in ebs s3; do
|
||||
for store in $stores; do
|
||||
|
||||
bucket=nixos-amis
|
||||
bucketDir="$version-$type-$store"
|
||||
@ -39,7 +42,7 @@ for type in hvm pv; do
|
||||
prevAmi=
|
||||
prevRegion=
|
||||
|
||||
for region in eu-west-1 eu-central-1 us-east-1 us-west-1 us-west-2 ap-southeast-1 ap-southeast-2 ap-northeast-1 sa-east-1; do
|
||||
for region in $regions; do
|
||||
|
||||
name=nixos-$version-$arch-$type-$store
|
||||
description="NixOS $system $version ($type-$store)"
|
||||
@ -51,10 +54,11 @@ for type in hvm pv; do
|
||||
echo "doing $name in $region..."
|
||||
|
||||
if [ -n "$prevAmi" ]; then
|
||||
ami=$(ec2-copy-image \
|
||||
ami=$(aws ec2 copy-image \
|
||||
--region "$region" \
|
||||
--source-region "$prevRegion" --source-ami-id "$prevAmi" \
|
||||
--name "$name" --description "$description" | cut -f 2)
|
||||
--source-region "$prevRegion" --source-image-id "$prevAmi" \
|
||||
--name "$name" --description "$description" | json -q .ImageId)
|
||||
if [ "$ami" = null ]; then break; fi
|
||||
else
|
||||
|
||||
if [ $store = s3 ]; then
|
||||
@ -85,12 +89,12 @@ for type in hvm pv; do
|
||||
ec2-upload-bundle \
|
||||
-m $imageDir/$type.raw.manifest.xml \
|
||||
-b "$bucket/$bucketDir" \
|
||||
-a "$EC2_ACCESS_KEY" -s "$EC2_SECRET_KEY" \
|
||||
-a "$AWS_ACCESS_KEY_ID" -s "$AWS_SECRET_ACCESS_KEY" \
|
||||
--location EU
|
||||
touch $imageDir/uploaded
|
||||
fi
|
||||
|
||||
extraFlags="$bucket/$bucketDir/$type.raw.manifest.xml"
|
||||
extraFlags="--image-location $bucket/$bucketDir/$type.raw.manifest.xml"
|
||||
|
||||
else
|
||||
|
||||
@ -115,7 +119,8 @@ for type in hvm pv; do
|
||||
if [ -z "$snapId" -a -z "$volId" -a -z "$taskId" ]; then
|
||||
echo "importing $vhdFile..."
|
||||
taskId=$(ec2-import-volume $vhdFile --no-upload -f vhd \
|
||||
-o "$EC2_ACCESS_KEY" -w "$EC2_SECRET_KEY" \
|
||||
-O "$AWS_ACCESS_KEY_ID" -W "$AWS_SECRET_ACCESS_KEY" \
|
||||
-o "$AWS_ACCESS_KEY_ID" -w "$AWS_SECRET_ACCESS_KEY" \
|
||||
--region "$region" -z "${region}a" \
|
||||
--bucket "$bucket" --prefix "$bucketDir/" \
|
||||
| tee /dev/stderr \
|
||||
@ -125,15 +130,16 @@ for type in hvm pv; do
|
||||
|
||||
if [ -z "$snapId" -a -z "$volId" ]; then
|
||||
ec2-resume-import $vhdFile -t "$taskId" --region "$region" \
|
||||
-o "$EC2_ACCESS_KEY" -w "$EC2_SECRET_KEY"
|
||||
-O "$AWS_ACCESS_KEY_ID" -W "$AWS_SECRET_ACCESS_KEY" \
|
||||
-o "$AWS_ACCESS_KEY_ID" -w "$AWS_SECRET_ACCESS_KEY"
|
||||
fi
|
||||
|
||||
# Wait for the volume creation to finish.
|
||||
if [ -z "$snapId" -a -z "$volId" ]; then
|
||||
echo "waiting for import to finish..."
|
||||
while true; do
|
||||
volId=$(ec2-describe-conversion-tasks "$taskId" --region "$region" | sed 's/.*VolumeId.*\(vol-[0-9a-f]\+\).*/\1/ ; t ; d')
|
||||
if [ -n "$volId" ]; then break; fi
|
||||
volId=$(aws ec2 describe-conversion-tasks --conversion-task-ids "$taskId" --region "$region" | jq -r .ConversionTasks[0].ImportVolume.Volume.Id)
|
||||
if [ "$volId" != null ]; then break; fi
|
||||
sleep 10
|
||||
done
|
||||
|
||||
@ -143,22 +149,24 @@ for type in hvm pv; do
|
||||
# Delete the import task.
|
||||
if [ -n "$volId" -a -n "$taskId" ]; then
|
||||
echo "removing import task..."
|
||||
ec2-delete-disk-image -t "$taskId" --region "$region" -o "$EC2_ACCESS_KEY" -w "$EC2_SECRET_KEY" || true
|
||||
ec2-delete-disk-image -t "$taskId" --region "$region" \
|
||||
-O "$AWS_ACCESS_KEY_ID" -W "$AWS_SECRET_ACCESS_KEY" \
|
||||
-o "$AWS_ACCESS_KEY_ID" -w "$AWS_SECRET_ACCESS_KEY" || true
|
||||
rm -f $stateDir/$region.$type.task-id
|
||||
fi
|
||||
|
||||
# Create a snapshot.
|
||||
if [ -z "$snapId" ]; then
|
||||
echo "creating snapshot..."
|
||||
snapId=$(ec2-create-snapshot "$volId" --region "$region" | cut -f 2)
|
||||
snapId=$(aws ec2 create-snapshot --volume-id "$volId" --region "$region" --description "$description" | jq -r .SnapshotId)
|
||||
if [ "$snapId" = null ]; then exit 1; fi
|
||||
echo -n "$snapId" > $stateDir/$region.$type.snap-id
|
||||
ec2-create-tags "$snapId" -t "Name=$description" --region "$region"
|
||||
fi
|
||||
|
||||
# Wait for the snapshot to finish.
|
||||
echo "waiting for snapshot to finish..."
|
||||
while true; do
|
||||
status=$(ec2-describe-snapshots "$snapId" --region "$region" | head -n1 | cut -f 4)
|
||||
status=$(aws ec2 describe-snapshots --snapshot-ids "$snapId" --region "$region" | jq -r .Snapshots[0].State)
|
||||
if [ "$status" = completed ]; then break; fi
|
||||
sleep 10
|
||||
done
|
||||
@ -166,35 +174,50 @@ for type in hvm pv; do
|
||||
# Delete the volume.
|
||||
if [ -n "$volId" ]; then
|
||||
echo "deleting volume..."
|
||||
ec2-delete-volume "$volId" --region "$region" || true
|
||||
aws ec2 delete-volume --volume-id "$volId" --region "$region" || true
|
||||
rm -f $stateDir/$region.$type.vol-id
|
||||
fi
|
||||
|
||||
extraFlags="-b /dev/sda1=$snapId:$vhdFileLogicalGigaBytes:true:gp2"
|
||||
blockDeviceMappings="DeviceName=/dev/sda1,Ebs={SnapshotId=$snapId,VolumeSize=$vhdFileLogicalGigaBytes,DeleteOnTermination=true,VolumeType=gp2}"
|
||||
extraFlags=""
|
||||
|
||||
if [ $type = pv ]; then
|
||||
extraFlags+=" --root-device-name=/dev/sda1"
|
||||
extraFlags+=" --root-device-name /dev/sda1"
|
||||
else
|
||||
extraFlags+=" --root-device-name /dev/sda1"
|
||||
extraFlags+=" --sriov-net-support simple"
|
||||
extraFlags+=" --ena-support"
|
||||
fi
|
||||
|
||||
extraFlags+=" -b /dev/sdb=ephemeral0 -b /dev/sdc=ephemeral1 -b /dev/sdd=ephemeral2 -b /dev/sde=ephemeral3"
|
||||
blockDeviceMappings+=" DeviceName=/dev/sdb,VirtualName=ephemeral0"
|
||||
blockDeviceMappings+=" DeviceName=/dev/sdc,VirtualName=ephemeral1"
|
||||
blockDeviceMappings+=" DeviceName=/dev/sdd,VirtualName=ephemeral2"
|
||||
blockDeviceMappings+=" DeviceName=/dev/sde,VirtualName=ephemeral3"
|
||||
fi
|
||||
|
||||
if [ $type = hvm ]; then
|
||||
extraFlags+=" --sriov-net-support simple"
|
||||
extraFlags+=" --ena-support"
|
||||
fi
|
||||
|
||||
# Register the AMI.
|
||||
if [ $type = pv ]; then
|
||||
kernel=$(ec2-describe-images -o amazon --filter "manifest-location=*pv-grub-hd0_1.04-$arch*" --region "$region" | cut -f 2)
|
||||
[ -n "$kernel" ]
|
||||
kernel=$(aws ec2 describe-images --owner amazon --filters "Name=name,Values=pv-grub-hd0_1.04-$arch.gz" | jq -r .Images[0].ImageId)
|
||||
if [ "$kernel" = null ]; then break; fi
|
||||
echo "using PV-GRUB kernel $kernel"
|
||||
extraFlags+=" --virtualization-type paravirtual --kernel $kernel"
|
||||
else
|
||||
extraFlags+=" --virtualization-type hvm"
|
||||
fi
|
||||
|
||||
ami=$(ec2-register \
|
||||
-n "$name" \
|
||||
-d "$description" \
|
||||
ami=$(aws ec2 register-image \
|
||||
--name "$name" \
|
||||
--description "$description" \
|
||||
--region "$region" \
|
||||
--architecture "$arch" \
|
||||
$extraFlags | cut -f 2)
|
||||
--block-device-mappings $blockDeviceMappings \
|
||||
$extraFlags | jq -r .ImageId)
|
||||
if [ "$ami" = null ]; then break; fi
|
||||
fi
|
||||
|
||||
echo -n "$ami" > $amiFile
|
||||
@ -204,23 +227,45 @@ for type in hvm pv; do
|
||||
ami=$(cat $amiFile)
|
||||
fi
|
||||
|
||||
if [ -z "$NO_WAIT" -o -z "$prevAmi" ]; then
|
||||
echo "waiting for AMI..."
|
||||
while true; do
|
||||
status=$(ec2-describe-images "$ami" --region "$region" | head -n1 | cut -f 5)
|
||||
if [ "$status" = available ]; then break; fi
|
||||
sleep 10
|
||||
done
|
||||
|
||||
ec2-modify-image-attribute \
|
||||
--region "$region" "$ami" -l -a all
|
||||
fi
|
||||
|
||||
echo "region = $region, type = $type, store = $store, ami = $ami"
|
||||
|
||||
if [ -z "$prevAmi" ]; then
|
||||
prevAmi="$ami"
|
||||
prevRegion="$region"
|
||||
fi
|
||||
done
|
||||
|
||||
done
|
||||
|
||||
done
|
||||
|
||||
for type in $types; do
|
||||
link=$stateDir/$type
|
||||
system=x86_64-linux
|
||||
arch=x86_64
|
||||
|
||||
for store in $stores; do
|
||||
|
||||
for region in $regions; do
|
||||
|
||||
name=nixos-$version-$arch-$type-$store
|
||||
amiFile=$stateDir/$region.$type.$store.ami-id
|
||||
ami=$(cat $amiFile)
|
||||
|
||||
echo "region = $region, type = $type, store = $store, ami = $ami"
|
||||
|
||||
echo -n "waiting for AMI..."
|
||||
while true; do
|
||||
status=$(aws ec2 describe-images --image-ids "$ami" --region "$region" | jq -r .Images[0].State)
|
||||
if [ "$status" = available ]; then break; fi
|
||||
sleep 10
|
||||
echo -n '.'
|
||||
done
|
||||
echo
|
||||
|
||||
# Make the image public.
|
||||
aws ec2 modify-image-attribute \
|
||||
--image-id "$ami" --region "$region" --launch-permission 'Add={Group=all}'
|
||||
|
||||
echo " \"$major\".$region.$type-$store = \"$ami\";" >> ec2-amis.nix
|
||||
done
|
||||
|
@ -4,7 +4,7 @@ with lib;
|
||||
|
||||
let
|
||||
cfg = config.i18n.inputMethod.fcitx;
|
||||
fcitxPackage = pkgs.fcitx-with-plugins.override { plugins = cfg.engines; };
|
||||
fcitxPackage = pkgs.fcitx.override { plugins = cfg.engines; };
|
||||
fcitxEngine = types.package // {
|
||||
name = "fcitx-engine";
|
||||
check = x: (lib.types.package.check x) && (attrByPath ["meta" "isFcitxEngine"] false x);
|
||||
|
@ -1,6 +1,10 @@
|
||||
#! @shell@
|
||||
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
exec man nixos-version
|
||||
exit 1
|
||||
;;
|
||||
--hash|--revision)
|
||||
echo "@nixosRevision@"
|
||||
;;
|
||||
|
@ -368,6 +368,7 @@
|
||||
./services/networking/ntopng.nix
|
||||
./services/networking/ntpd.nix
|
||||
./services/networking/nylon.nix
|
||||
./services/networking/offlineimap.nix
|
||||
./services/networking/oidentd.nix
|
||||
./services/networking/openfire.nix
|
||||
./services/networking/openntpd.nix
|
||||
|
@ -6,6 +6,7 @@ set meta-flag on
|
||||
set input-meta on
|
||||
set convert-meta off
|
||||
set output-meta on
|
||||
set colored-stats on
|
||||
|
||||
#set mark-symlinked-directories on
|
||||
|
||||
|
@ -78,7 +78,7 @@ in
|
||||
test -e ${stateDir}/saves/${cfg.saveName}.zip || \
|
||||
${pkgs.factorio-headless}/bin/factorio \
|
||||
--config=${cfg.configFile} \
|
||||
--create=${cfg.saveName}
|
||||
--create=${stateDir}/saves/${cfg.saveName}.zip
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
@ -93,7 +93,7 @@ in
|
||||
"${pkgs.factorio-headless}/bin/factorio"
|
||||
"--config=${cfg.configFile}"
|
||||
"--port=${toString cfg.port}"
|
||||
"--start-server=${cfg.saveName}"
|
||||
"--start-server=${stateDir}/saves/${cfg.saveName}.zip"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
@ -7,22 +7,8 @@ let
|
||||
|
||||
stateDir = "/var/spool/ddclient";
|
||||
ddclientUser = "ddclient";
|
||||
ddclientFlags = "-foreground -verbose -noquiet -file ${ddclientCfg}";
|
||||
ddclientFlags = "-foreground -verbose -noquiet -file /etc/ddclient.conf";
|
||||
ddclientPIDFile = "${stateDir}/ddclient.pid";
|
||||
ddclientCfg = pkgs.writeText "ddclient.conf" ''
|
||||
daemon=600
|
||||
cache=${stateDir}/ddclient.cache
|
||||
pid=${ddclientPIDFile}
|
||||
use=${config.services.ddclient.use}
|
||||
login=${config.services.ddclient.username}
|
||||
password=${config.services.ddclient.password}
|
||||
protocol=${config.services.ddclient.protocol}
|
||||
server=${config.services.ddclient.server}
|
||||
ssl=${if config.services.ddclient.ssl then "yes" else "no"}
|
||||
wildcard=YES
|
||||
${config.services.ddclient.domain}
|
||||
${config.services.ddclient.extraConfig}
|
||||
'';
|
||||
|
||||
in
|
||||
|
||||
@ -122,10 +108,30 @@ in
|
||||
home = stateDir;
|
||||
};
|
||||
|
||||
environment.etc."ddclient.conf" = {
|
||||
uid = config.ids.uids.ddclient;
|
||||
mode = "0600";
|
||||
text = ''
|
||||
daemon=600
|
||||
cache=${stateDir}/ddclient.cache
|
||||
pid=${ddclientPIDFile}
|
||||
use=${config.services.ddclient.use}
|
||||
login=${config.services.ddclient.username}
|
||||
password=${config.services.ddclient.password}
|
||||
protocol=${config.services.ddclient.protocol}
|
||||
server=${config.services.ddclient.server}
|
||||
ssl=${if config.services.ddclient.ssl then "yes" else "no"}
|
||||
wildcard=YES
|
||||
${config.services.ddclient.domain}
|
||||
${config.services.ddclient.extraConfig}
|
||||
'';
|
||||
};
|
||||
|
||||
systemd.services.ddclient = {
|
||||
description = "Dynamic DNS Client";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
restartTriggers = [ config.environment.etc."ddclient.conf".source ];
|
||||
|
||||
serviceConfig = {
|
||||
# Uncomment this if too many problems occur:
|
||||
|
73
nixos/modules/services/networking/offlineimap.nix
Normal file
73
nixos/modules/services/networking/offlineimap.nix
Normal file
@ -0,0 +1,73 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.offlineimap;
|
||||
in {
|
||||
|
||||
options.services.offlineimap = {
|
||||
enable = mkEnableOption "Offlineimap, a software to dispose your mailbox(es) as a local Maildir(s).";
|
||||
|
||||
install = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
description = ''
|
||||
Whether to install a user service for Offlineimap. Once
|
||||
the service is started, emails will be fetched automatically.
|
||||
|
||||
The service must be manually started for each user with
|
||||
"systemctl --user start offlineimap" or globally through
|
||||
<varname>services.offlineimap.enable</varname>.
|
||||
'';
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.offlineimap;
|
||||
defaultText = "pkgs.offlineimap";
|
||||
description = "Offlineimap derivation to use.";
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [];
|
||||
example = literalExample "[ pkgs.pass pkgs.bash pkgs.notmuch ]";
|
||||
description = "List of derivations to put in Offlineimap's path.";
|
||||
};
|
||||
|
||||
onCalendar = mkOption {
|
||||
type = types.str;
|
||||
default = "*:0/3"; # every 3 minutes
|
||||
description = "How often is offlineimap started. Default is '*:0/3' meaning every 3 minutes. See systemd.time(7) for more information about the format.";
|
||||
};
|
||||
|
||||
timeoutStartSec = mkOption {
|
||||
type = types.str;
|
||||
default = "120sec"; # Kill if still alive after 2 minutes
|
||||
description = "How long waiting for offlineimap before killing it. Default is '120sec' meaning every 2 minutes. See systemd.time(7) for more information about the format.";
|
||||
};
|
||||
};
|
||||
config = mkIf (cfg.enable || cfg.install) {
|
||||
systemd.user.services.offlineimap = {
|
||||
description = "Offlineimap: a software to dispose your mailbox(es) as a local Maildir(s)";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${cfg.package}/bin/offlineimap -u basic -o -1";
|
||||
TimeoutStartSec = cfg.timeoutStartSec;
|
||||
};
|
||||
path = cfg.path;
|
||||
};
|
||||
environment.systemPackages = [ "${cfg.package}" ];
|
||||
systemd.user.timers.offlineimap = {
|
||||
description = "offlineimap timer";
|
||||
timerConfig = {
|
||||
Unit = "offlineimap.service";
|
||||
OnCalendar = cfg.onCalendar;
|
||||
# start immediately after computer is started:
|
||||
Persistent = "true";
|
||||
};
|
||||
} // optionalAttrs cfg.enable { wantedBy = [ "default.target" ]; };
|
||||
};
|
||||
}
|
@ -36,6 +36,8 @@ with lib;
|
||||
config = mkMerge [
|
||||
(mkIf config.systemd.coredump.enable {
|
||||
|
||||
systemd.additionalUpstreamSystemUnits = [ "systemd-coredump.socket" "systemd-coredump@.service" ];
|
||||
|
||||
environment.etc."systemd/coredump.conf".text =
|
||||
''
|
||||
[Coredump]
|
||||
@ -45,7 +47,7 @@ with lib;
|
||||
# Have the kernel pass core dumps to systemd's coredump helper binary.
|
||||
# From systemd's 50-coredump.conf file. See:
|
||||
# <https://github.com/systemd/systemd/blob/v218/sysctl.d/50-coredump.conf.in>
|
||||
boot.kernel.sysctl."kernel.core_pattern" = "|${pkgs.systemd}/lib/systemd/systemd-coredump %p %u %g %s %t %e";
|
||||
boot.kernel.sysctl."kernel.core_pattern" = "|${pkgs.systemd}/lib/systemd/systemd-coredump %P %u %g %s %t %c %e";
|
||||
})
|
||||
|
||||
(mkIf (!config.systemd.coredump.enable) {
|
||||
|
@ -5,5 +5,4 @@ pkgs.substituteAll {
|
||||
isExecutable = true;
|
||||
path = [pkgs.coreutils pkgs.gnused pkgs.gnugrep];
|
||||
inherit (pkgs) bash;
|
||||
kernelDTB = pkgs.stdenv.platform.kernelDTB or false;
|
||||
}
|
||||
|
@ -75,9 +75,10 @@ addEntry() {
|
||||
|
||||
copyToKernelsDir "$path/kernel"; kernel=$result
|
||||
copyToKernelsDir "$path/initrd"; initrd=$result
|
||||
if [ -n "@kernelDTB@" ]; then
|
||||
# XXX UGLY: maybe the system config should have a top-level "dtbs" entry?
|
||||
copyToKernelsDir $(readlink -m "$path/kernel/../dtbs"); dtbs=$result
|
||||
# XXX UGLY: maybe the system config should have a top-level "dtbs" entry?
|
||||
dtbDir=$(readlink -m "$path/kernel/../dtbs")
|
||||
if [ -d "$dtbDir" ]; then
|
||||
copyToKernelsDir "$dtbDir"; dtbs=$result
|
||||
fi
|
||||
|
||||
timestampEpoch=$(stat -L -c '%Z' $path)
|
||||
@ -95,7 +96,7 @@ addEntry() {
|
||||
fi
|
||||
echo " LINUX ../nixos/$(basename $kernel)"
|
||||
echo " INITRD ../nixos/$(basename $initrd)"
|
||||
if [ -n "@kernelDTB@" ]; then
|
||||
if [ -d "$dtbDir" ]; then
|
||||
echo " FDTDIR ../nixos/$(basename $dtbs)"
|
||||
fi
|
||||
echo " APPEND systemConfig=$path init=$path/init $extraParams"
|
||||
|
@ -764,7 +764,7 @@ in
|
||||
{ wantedBy = [ "timers.target" ];
|
||||
timerConfig.OnCalendar = service.startAt;
|
||||
})
|
||||
(filterAttrs (name: service: service.startAt != "") cfg.services);
|
||||
(filterAttrs (name: service: service.enable && service.startAt != "") cfg.services);
|
||||
|
||||
# Generate timer units for all services that have a ‘startAt’ value.
|
||||
systemd.user.timers =
|
||||
|
@ -20,8 +20,12 @@ let cfg = config.ec2; in
|
||||
autoResize = true;
|
||||
};
|
||||
|
||||
boot.extraModulePackages = [ config.boot.kernelPackages.ixgbevf ];
|
||||
boot.initrd.kernelModules = [ "xen-blkfront" "xen-netfront" "ixgbevf" ];
|
||||
boot.extraModulePackages =
|
||||
[ config.boot.kernelPackages.ixgbevf
|
||||
config.boot.kernelPackages.ena
|
||||
];
|
||||
boot.initrd.kernelModules = [ "xen-blkfront" "xen-netfront" ];
|
||||
boot.initrd.availableKernelModules = [ "ixgbevf" "ena" ];
|
||||
boot.kernelParams = mkIf cfg.hvm [ "console=ttyS0" ];
|
||||
|
||||
# Prevent the nouveau kernel module from being loaded, as it
|
||||
|
@ -90,40 +90,48 @@
|
||||
"15.09".us-west-2.pv-ebs = "ami-005fb160";
|
||||
"15.09".us-west-2.pv-s3 = "ami-cd55bbad";
|
||||
|
||||
"16.03".ap-northeast-1.hvm-ebs = "ami-b6edf5d8";
|
||||
"16.03".ap-northeast-1.hvm-s3 = "ami-b1e3fbdf";
|
||||
"16.03".ap-northeast-1.pv-ebs = "ami-6190880f";
|
||||
"16.03".ap-northeast-1.pv-s3 = "ami-908d95fe";
|
||||
"16.03".ap-southeast-1.hvm-ebs = "ami-35b16656";
|
||||
"16.03".ap-southeast-1.hvm-s3 = "ami-41be6922";
|
||||
"16.03".ap-southeast-1.pv-ebs = "ami-4cb96e2f";
|
||||
"16.03".ap-southeast-1.pv-s3 = "ami-3bb96e58";
|
||||
"16.03".ap-southeast-2.hvm-ebs = "ami-debc91bd";
|
||||
"16.03".ap-southeast-2.hvm-s3 = "ami-55bc9136";
|
||||
"16.03".ap-southeast-2.pv-ebs = "ami-b38ba6d0";
|
||||
"16.03".ap-southeast-2.pv-s3 = "ami-9e8ba6fd";
|
||||
"16.03".eu-central-1.hvm-ebs = "ami-7c967413";
|
||||
"16.03".eu-central-1.hvm-s3 = "ami-b29072dd";
|
||||
"16.03".eu-central-1.pv-ebs = "ami-7a947615";
|
||||
"16.03".eu-central-1.pv-s3 = "ami-729b791d";
|
||||
"16.03".eu-west-1.hvm-ebs = "ami-ff27a98c";
|
||||
"16.03".eu-west-1.hvm-s3 = "ami-6c21af1f";
|
||||
"16.03".eu-west-1.pv-ebs = "ami-a33cb2d0";
|
||||
"16.03".eu-west-1.pv-s3 = "ami-ec38b69f";
|
||||
"16.03".sa-east-1.hvm-ebs = "ami-5bef6637";
|
||||
"16.03".sa-east-1.hvm-s3 = "ami-55f87139";
|
||||
"16.03".sa-east-1.pv-ebs = "ami-76e56c1a";
|
||||
"16.03".sa-east-1.pv-s3 = "ami-e1f8718d";
|
||||
"16.03".us-east-1.hvm-ebs = "ami-4bfd1926";
|
||||
"16.03".us-east-1.hvm-s3 = "ami-60c5210d";
|
||||
"16.03".us-east-1.pv-ebs = "ami-c0c92dad";
|
||||
"16.03".us-east-1.pv-s3 = "ami-f9d63294";
|
||||
"16.03".us-west-1.hvm-ebs = "ami-13aad473";
|
||||
"16.03".us-west-1.hvm-s3 = "ami-e1a8d681";
|
||||
"16.03".us-west-1.pv-ebs = "ami-c0a6d8a0";
|
||||
"16.03".us-west-1.pv-s3 = "ami-6aa9d70a";
|
||||
"16.03".us-west-2.hvm-ebs = "ami-265dad46";
|
||||
"16.03".us-west-2.hvm-s3 = "ami-cd40b0ad";
|
||||
"16.03".us-west-2.pv-ebs = "ami-7b4aba1b";
|
||||
"16.03".us-west-2.pv-s3 = "ami-0849b968";
|
||||
"16.03".ap-northeast-1.hvm-ebs = "ami-40619d21";
|
||||
"16.03".ap-northeast-1.hvm-s3 = "ami-ce629eaf";
|
||||
"16.03".ap-northeast-1.pv-ebs = "ami-ef639f8e";
|
||||
"16.03".ap-northeast-1.pv-s3 = "ami-a1609cc0";
|
||||
"16.03".ap-northeast-2.hvm-ebs = "ami-deca00b0";
|
||||
"16.03".ap-northeast-2.hvm-s3 = "ami-a3b77dcd";
|
||||
"16.03".ap-northeast-2.pv-ebs = "ami-7bcb0115";
|
||||
"16.03".ap-northeast-2.pv-s3 = "ami-a2b77dcc";
|
||||
"16.03".ap-south-1.hvm-ebs = "ami-0dff9562";
|
||||
"16.03".ap-south-1.hvm-s3 = "ami-13f69c7c";
|
||||
"16.03".ap-south-1.pv-ebs = "ami-0ef39961";
|
||||
"16.03".ap-south-1.pv-s3 = "ami-e0c8a28f";
|
||||
"16.03".ap-southeast-1.hvm-ebs = "ami-5e964a3d";
|
||||
"16.03".ap-southeast-1.hvm-s3 = "ami-4d964a2e";
|
||||
"16.03".ap-southeast-1.pv-ebs = "ami-ec9b478f";
|
||||
"16.03".ap-southeast-1.pv-s3 = "ami-999b47fa";
|
||||
"16.03".ap-southeast-2.hvm-ebs = "ami-9f7359fc";
|
||||
"16.03".ap-southeast-2.hvm-s3 = "ami-987359fb";
|
||||
"16.03".ap-southeast-2.pv-ebs = "ami-a2705ac1";
|
||||
"16.03".ap-southeast-2.pv-s3 = "ami-a3705ac0";
|
||||
"16.03".eu-central-1.hvm-ebs = "ami-17a45178";
|
||||
"16.03".eu-central-1.hvm-s3 = "ami-f9a55096";
|
||||
"16.03".eu-central-1.pv-ebs = "ami-c8a550a7";
|
||||
"16.03".eu-central-1.pv-s3 = "ami-6ea45101";
|
||||
"16.03".eu-west-1.hvm-ebs = "ami-b5b3d5c6";
|
||||
"16.03".eu-west-1.hvm-s3 = "ami-c986e0ba";
|
||||
"16.03".eu-west-1.pv-ebs = "ami-b083e5c3";
|
||||
"16.03".eu-west-1.pv-s3 = "ami-3c83e54f";
|
||||
"16.03".sa-east-1.hvm-ebs = "ami-f6eb7f9a";
|
||||
"16.03".sa-east-1.hvm-s3 = "ami-93e773ff";
|
||||
"16.03".sa-east-1.pv-ebs = "ami-cbb82ca7";
|
||||
"16.03".sa-east-1.pv-s3 = "ami-abb82cc7";
|
||||
"16.03".us-east-1.hvm-ebs = "ami-c123a3d6";
|
||||
"16.03".us-east-1.hvm-s3 = "ami-bc25a5ab";
|
||||
"16.03".us-east-1.pv-ebs = "ami-bd25a5aa";
|
||||
"16.03".us-east-1.pv-s3 = "ami-a325a5b4";
|
||||
"16.03".us-west-1.hvm-ebs = "ami-748bcd14";
|
||||
"16.03".us-west-1.hvm-s3 = "ami-a68dcbc6";
|
||||
"16.03".us-west-1.pv-ebs = "ami-048acc64";
|
||||
"16.03".us-west-1.pv-s3 = "ami-208dcb40";
|
||||
"16.03".us-west-2.hvm-ebs = "ami-8263a0e2";
|
||||
"16.03".us-west-2.hvm-s3 = "ami-925c9ff2";
|
||||
"16.03".us-west-2.pv-ebs = "ami-5e61a23e";
|
||||
"16.03".us-west-2.pv-s3 = "ami-734c8f13";
|
||||
}
|
||||
|
@ -220,6 +220,7 @@ in rec {
|
||||
tests.docker = hydraJob (import tests/docker.nix { system = "x86_64-linux"; });
|
||||
tests.dockerRegistry = hydraJob (import tests/docker-registry.nix { system = "x86_64-linux"; });
|
||||
tests.dnscrypt-proxy = callTest tests/dnscrypt-proxy.nix { system = "x86_64-linux"; };
|
||||
tests.ecryptfs = callTest tests/ecryptfs.nix {};
|
||||
tests.etcd = hydraJob (import tests/etcd.nix { system = "x86_64-linux"; });
|
||||
tests.ec2-nixops = hydraJob (import tests/ec2.nix { system = "x86_64-linux"; }).boot-ec2-nixops;
|
||||
tests.ec2-config = hydraJob (import tests/ec2.nix { system = "x86_64-linux"; }).boot-ec2-config;
|
||||
|
81
nixos/tests/ecryptfs.nix
Normal file
81
nixos/tests/ecryptfs.nix
Normal file
@ -0,0 +1,81 @@
|
||||
import ./make-test.nix ({ pkgs, ... }:
|
||||
{
|
||||
name = "ecryptfs";
|
||||
|
||||
machine = { config, pkgs, ... }: {
|
||||
imports = [ ./common/user-account.nix ];
|
||||
boot.kernelModules = [ "ecryptfs" ];
|
||||
security.pam.enableEcryptfs = true;
|
||||
environment.systemPackages = with pkgs; [ keyutils ];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
$machine->waitForUnit("default.target");
|
||||
|
||||
# Set alice up with a password and a home
|
||||
$machine->succeed("(echo foobar; echo foobar) | passwd alice");
|
||||
$machine->succeed("chown -R alice.users ~alice");
|
||||
|
||||
# Migrate alice's home
|
||||
my $out = $machine->succeed("echo foobar | ecryptfs-migrate-home -u alice");
|
||||
$machine->log("ecryptfs-migrate-home said: $out");
|
||||
|
||||
# Log alice in (ecryptfs passwhrase is wrapped during first login)
|
||||
$machine->sleep(2); # urgh: wait for username prompt
|
||||
$machine->sendChars("alice\n");
|
||||
$machine->sleep(1);
|
||||
$machine->sendChars("foobar\n");
|
||||
$machine->sleep(2);
|
||||
$machine->sendChars("logout\n");
|
||||
$machine->sleep(2);
|
||||
|
||||
# Why do I need to do this??
|
||||
$machine->succeed("su alice -c ecryptfs-umount-private");
|
||||
$machine->sleep(1);
|
||||
$machine->fail("mount | grep ecryptfs"); # check that encrypted home is not mounted
|
||||
|
||||
# Show contents of the user keyring
|
||||
my $out = $machine->succeed("su - alice -c 'keyctl list \@u'");
|
||||
$machine->log("keyctl unlink said: " . $out);
|
||||
|
||||
# Log alice again
|
||||
$machine->sendChars("alice\n");
|
||||
$machine->sleep(1);
|
||||
$machine->sendChars("foobar\n");
|
||||
$machine->sleep(2);
|
||||
|
||||
# Create some files in encrypted home
|
||||
$machine->succeed("su alice -c 'touch ~alice/a'");
|
||||
$machine->succeed("su alice -c 'echo c > ~alice/b'");
|
||||
|
||||
# Logout
|
||||
$machine->sendChars("logout\n");
|
||||
$machine->sleep(2);
|
||||
|
||||
# Why do I need to do this??
|
||||
$machine->succeed("su alice -c ecryptfs-umount-private");
|
||||
$machine->sleep(1);
|
||||
|
||||
# Check that the filesystem is not accessible
|
||||
$machine->fail("mount | grep ecryptfs");
|
||||
$machine->succeed("su alice -c 'test \! -f ~alice/a'");
|
||||
$machine->succeed("su alice -c 'test \! -f ~alice/b'");
|
||||
|
||||
# Log alice once more
|
||||
$machine->sendChars("alice\n");
|
||||
$machine->sleep(1);
|
||||
$machine->sendChars("foobar\n");
|
||||
$machine->sleep(2);
|
||||
|
||||
# Check that the files are there
|
||||
$machine->sleep(1);
|
||||
$machine->succeed("su alice -c 'test -f ~alice/a'");
|
||||
$machine->succeed("su alice -c 'test -f ~alice/b'");
|
||||
$machine->succeed(qq%test "\$(cat ~alice/b)" = "c"%);
|
||||
|
||||
# Catch https://github.com/NixOS/nixpkgs/issues/16766
|
||||
$machine->succeed("su alice -c 'ls -lh ~alice/'");
|
||||
|
||||
$machine->sendChars("logout\n");
|
||||
'';
|
||||
})
|
@ -15,7 +15,7 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
services.xserver.displayManager.auto.user = "alice";
|
||||
services.xserver.desktopManager.gnome3.enable = true;
|
||||
|
||||
environment.gnome3.packageSet = pkgs.gnome3_20;
|
||||
environment.gnome3.packageSet = pkgs.gnome3_18;
|
||||
|
||||
virtualisation.memorySize = 512;
|
||||
};
|
@ -3,7 +3,7 @@
|
||||
cln,
|
||||
cmake,
|
||||
fetchgit,
|
||||
gcc5,
|
||||
gcc,
|
||||
ginac,
|
||||
jamomacore,
|
||||
kde5,
|
||||
@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
|
||||
cln
|
||||
cmake
|
||||
ginac
|
||||
gcc5
|
||||
gcc
|
||||
jamomacore
|
||||
kde5.kdnssd
|
||||
libsndfile
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ stdenv, fetchurl, gtk2, which, pkgconfig, intltool, file }:
|
||||
|
||||
let
|
||||
version = "1.27";
|
||||
version = "1.28";
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@ -9,7 +9,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://download.geany.org/${name}.tar.bz2";
|
||||
sha256 = "846ff699a5944c5c3c068ae0199d4c13946a668bfc6d03f8c79765667c20cadf";
|
||||
sha256 = "0nha21rbdhl10vdpaq8d5v5fszvggl1xar555pvrnvm2y443ffpp";
|
||||
};
|
||||
|
||||
buildInputs = [ gtk2 which pkgconfig intltool file ];
|
||||
|
@ -189,13 +189,13 @@ in
|
||||
|
||||
idea-community = buildIdea rec {
|
||||
name = "idea-community-${version}";
|
||||
version = "2016.1.3";
|
||||
build = "IC-145.1617.8";
|
||||
version = "2016.2";
|
||||
build = "IC-162.1121";
|
||||
description = "Integrated Development Environment (IDE) by Jetbrains, community edition";
|
||||
license = stdenv.lib.licenses.asl20;
|
||||
src = fetchurl {
|
||||
url = "https://download.jetbrains.com/idea/ideaIC-${version}.tar.gz";
|
||||
sha256 = "0yd1jqz4arywyjsiakszrr48w2xqnik6vnl1a6l0ph2hssgkzkfi";
|
||||
sha256 = "164x4l0q31zpc1jh3js1xx9y6afrzsshmnkx1mwhmq8qmvzc4w32";
|
||||
};
|
||||
wmClass = "jetbrains-idea-ce";
|
||||
};
|
||||
@ -228,13 +228,13 @@ in
|
||||
|
||||
idea-ultimate = buildIdea rec {
|
||||
name = "idea-ultimate-${version}";
|
||||
version = "2016.1.3";
|
||||
build = "IU-145.1617.8";
|
||||
version = "2016.2";
|
||||
build = "IU-162.1121";
|
||||
description = "Integrated Development Environment (IDE) by Jetbrains, requires paid license";
|
||||
license = stdenv.lib.licenses.unfree;
|
||||
src = fetchurl {
|
||||
url = "https://download.jetbrains.com/idea/ideaIU-${version}.tar.gz";
|
||||
sha256 = "1zzxwdnw2bbnl86kj7fjk5p8c99d0hdn1ki2alw5xm8wp4k0w7rv";
|
||||
sha256 = "10hiqh6ccmai2cnc5p72vqjcz9kzmmcpn0hy5v514h4mq6vs4zk4";
|
||||
};
|
||||
wmClass = "jetbrains-idea";
|
||||
};
|
||||
|
@ -1,29 +1,25 @@
|
||||
{ stdenv, fetchgit, libpng, python3, boost, mesa, qtbase, qmakeHook, ncurses }:
|
||||
{ stdenv, fetchFromGitHub, libpng, python3, boost, mesa, qtbase, ncurses, cmake, flex, lemon }:
|
||||
|
||||
let
|
||||
gitRev = "745eca3a2d2657c495d5509e9083c884e021d09c";
|
||||
gitRev = "e8480c718e8c49ae3cc2d7af10ea93ea4c2fff9a";
|
||||
gitBranch = "master";
|
||||
gitTag = "0.8.0b";
|
||||
gitTag = "0.9.2";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "antimony-${version}";
|
||||
version = gitTag;
|
||||
|
||||
src = fetchgit {
|
||||
url = "git://github.com/mkeeter/antimony.git";
|
||||
rev = gitRev;
|
||||
sha256 = "0azjdkbixz2pyk2yy7a0ya5xk60xgw3l2pd4pj4ijyqxx5jmh0sy";
|
||||
src = fetchFromGitHub {
|
||||
owner = "mkeeter";
|
||||
repo = "antimony";
|
||||
rev = gitTag;
|
||||
sha256 = "0fpgy5cb4knz2z9q078206k8wzxfs8b9g76mf4bz1ic77931ykjz";
|
||||
};
|
||||
|
||||
patches = [ ./paths-fix.patch ];
|
||||
# fix build with glibc-2.23
|
||||
|
||||
postPatch = ''
|
||||
sed 's/\<isinf(/std::isinf(/g' -i \
|
||||
src/export/export_heightmap.cpp \
|
||||
src/fab/types/bounds.cpp \
|
||||
src/graph/hooks/meta.cpp \
|
||||
src/ui/dialogs/resolution_dialog.cpp \
|
||||
src/render/render_task.cpp
|
||||
sed -i "s,/usr/local,$out,g" app/CMakeLists.txt app/app/app.cpp app/app/main.cpp
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
@ -31,15 +27,13 @@ in
|
||||
mesa qtbase ncurses
|
||||
];
|
||||
|
||||
nativeBuildHooks = [ qmakeHook ];
|
||||
nativeBuildInputs = [ cmake flex lemon ];
|
||||
|
||||
preConfigure = ''
|
||||
export GITREV=${gitRev}
|
||||
export GITBRANCH=${gitBranch}
|
||||
export GITTAG=${gitTag}
|
||||
|
||||
cd qt
|
||||
'';
|
||||
cmakeFlags= [
|
||||
"-DGITREV=${gitRev}"
|
||||
"-DGITTAG=${gitTag}"
|
||||
"-DGITBRANCH=${gitBranch}"
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
@ -48,6 +42,5 @@ in
|
||||
homepage = "https://github.com/mkeeter/antimony";
|
||||
license = licenses.mit;
|
||||
platforms = platforms.linux;
|
||||
broken = true;
|
||||
};
|
||||
}
|
||||
|
@ -1,99 +1,21 @@
|
||||
diff --git a/qt/antimony.pro b/qt/antimony.pro
|
||||
index 9d586f4..b055a6d 100644
|
||||
--- a/qt/antimony.pro
|
||||
+++ b/qt/antimony.pro
|
||||
@@ -12,14 +12,9 @@ QMAKE_CXXFLAGS_RELEASE += -O3
|
||||
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
|
||||
index ddc5c9b..d80728a 100644
|
||||
--- a/app/CMakeLists.txt
|
||||
+++ b/app/CMakeLists.txt
|
||||
@@ -158,16 +158,6 @@ target_link_libraries(${ANTIMONY_APP}
|
||||
|
||||
QMAKE_CXXFLAGS += -Werror=switch
|
||||
################################################################################
|
||||
|
||||
-GITREV = $$system(git log --pretty=format:'%h' -n 1)
|
||||
-GITDIFF = $$system(git diff --quiet --exit-code || echo "+")
|
||||
-GITTAG = $$system(git describe --exact-match --tags 2> /dev/null)
|
||||
-GITBRANCH = $$system(git rev-parse --abbrev-ref HEAD)
|
||||
-execute_process(COMMAND git log --pretty=format:'%h' -n 1
|
||||
- OUTPUT_VARIABLE GITREV)
|
||||
-execute_process(COMMAND bash -c "git diff --quiet --exit-code || echo +"
|
||||
- OUTPUT_VARIABLE GITDIFF)
|
||||
-execute_process(COMMAND git describe --exact-match --tags
|
||||
- OUTPUT_VARIABLE GITTAG
|
||||
- ERROR_QUIET)
|
||||
-execute_process(COMMAND git rev-parse --abbrev-ref HEAD
|
||||
- OUTPUT_VARIABLE GITBRANCH)
|
||||
-
|
||||
-QMAKE_CXXFLAGS += "-D'GITREV=\"$${GITREV}$${GITDIFF}\"'"
|
||||
-QMAKE_CXXFLAGS += "-D'GITTAG=\"$${GITTAG}\"'"
|
||||
-QMAKE_CXXFLAGS += "-D'GITBRANCH=\"$${GITBRANCH}\"'"
|
||||
+QMAKE_CXXFLAGS += "-D'GITREV=\"$$(GITREV)\"'"
|
||||
+QMAKE_CXXFLAGS += "-D'GITTAG=\"$$(GITTAG)\"'"
|
||||
+QMAKE_CXXFLAGS += "-D'GITBRANCH=\"$$(GITBRANCH)\"'"
|
||||
|
||||
OLD_GL_SET = $$(OLD_GL)
|
||||
equals(OLD_GL_SET, "true") {
|
||||
@@ -125,11 +120,11 @@ macx {
|
||||
}
|
||||
|
||||
linux {
|
||||
- executable.path = /usr/local/bin
|
||||
+ executable.path = $$(out)/bin
|
||||
executable.files = antimony
|
||||
- nodes_folder.path = /usr/local/bin/sb/nodes
|
||||
+ nodes_folder.path = $$(out)/bin/sb/nodes
|
||||
nodes_folder.files = ../py/nodes/*
|
||||
- fab_folder.path = /usr/local/bin/sb/fab
|
||||
+ fab_folder.path = $$(out)/bin/sb/fab
|
||||
fab_folder.files = ../py/fab/*
|
||||
INSTALLS += executable nodes_folder fab_folder
|
||||
}
|
||||
diff --git a/qt/fab.pri b/qt/fab.pri
|
||||
index a54813b..b500536 100644
|
||||
--- a/qt/fab.pri
|
||||
+++ b/qt/fab.pri
|
||||
@@ -54,7 +54,7 @@ DEFINES += '_STATIC_= '
|
||||
|
||||
linux {
|
||||
QMAKE_CFLAGS += -std=gnu99
|
||||
- QMAKE_CXXFLAGS += $$system(/usr/bin/python3-config --includes)
|
||||
+ QMAKE_CXXFLAGS += $$system(python3-config --includes)
|
||||
LIBS += -lpng
|
||||
}
|
||||
|
||||
diff --git a/qt/shared.pri b/qt/shared.pri
|
||||
index e7d0e3a..026eae3 100644
|
||||
--- a/qt/shared.pri
|
||||
+++ b/qt/shared.pri
|
||||
@@ -39,41 +39,11 @@ macx {
|
||||
}
|
||||
|
||||
linux {
|
||||
- QMAKE_CXXFLAGS += $$system(/usr/bin/python3-config --includes)
|
||||
- QMAKE_LFLAGS += $$system(/usr/bin/python3-config --ldflags)
|
||||
+ QMAKE_CXXFLAGS += $$system(python3-config --includes)
|
||||
+ QMAKE_LFLAGS += $$system(python3-config --ldflags)
|
||||
|
||||
# Even though this is in QMAKE_LFLAGS, the linker is picky about
|
||||
# library ordering (so it needs to be here too).
|
||||
LIBS += -lpython3.4m
|
||||
-
|
||||
- # ldconfig is being used to find libboost_python, but it's in a different
|
||||
- # place in different distros (and is not in the default $PATH on Debian).
|
||||
- # First, check to see if it's on the default $PATH.
|
||||
- system(which ldconfig > /dev/null) {
|
||||
- LDCONFIG_BIN = "ldconfig"
|
||||
- }
|
||||
- # If that failed, then search for it in its usual places.
|
||||
- isEmpty(LDCONFIG_BIN) {
|
||||
- for(p, $$list(/sbin/ldconfig /usr/bin/ldconfig)) {
|
||||
- exists($$p): LDCONFIG_BIN = $$p
|
||||
- }
|
||||
- }
|
||||
- # If that search failed too, then exit with an error.
|
||||
- isEmpty(LDCONFIG_BIN) {
|
||||
- error("Could not find ldconfig!")
|
||||
- }
|
||||
-
|
||||
- # Check for different boost::python naming schemes
|
||||
- LDCONFIG_OUT = $$system($$LDCONFIG_BIN -p|grep python)
|
||||
- for (b, $$list(boost_python-py34 boost_python3)) {
|
||||
- contains(LDCONFIG_OUT, "lib$${b}.so") {
|
||||
- LIBS += "-l$$b"
|
||||
- GOT_BOOST_PYTHON = True
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- # If we couldn't find boost::python, exit with an error.
|
||||
- isEmpty(GOT_BOOST_PYTHON) {
|
||||
- error("Could not find boost::python3")
|
||||
- }
|
||||
+ LIBS += -lboost_python3
|
||||
}
|
||||
add_definitions(-D'GITREV="${GITREV}${GITDIFF}"'
|
||||
-D'GITTAG="${GITTAG}"'
|
||||
-D'GITBRANCH="${GITBRANCH}"')
|
||||
|
@ -2,11 +2,11 @@
|
||||
, libXinerama, curl, libexif, perlPackages }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "feh-2.15.4";
|
||||
name = "feh-2.16.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://feh.finalrewind.org/${name}.tar.bz2";
|
||||
sha256 = "b8a9c29f37b1349228b19866f712b677e2a150837bc46be8c5d6348dd4850758";
|
||||
sha256 = "1cxnc8dxyl7s4qnkvdjaqx7gdvc6brxpq0qbg91mljg47fd2hmbf";
|
||||
};
|
||||
|
||||
outputs = [ "out" "doc" ];
|
||||
|
@ -2,14 +2,14 @@
|
||||
, libjpeg, libpng, libtiff, libxml2, zlib, libtool, xz
|
||||
, libX11, libwebp, quantumdepth ? 8}:
|
||||
|
||||
let version = "1.3.23"; in
|
||||
let version = "1.3.24"; in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "graphicsmagick-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/graphicsmagick/GraphicsMagick-${version}.tar.xz";
|
||||
sha256 = "03g6l2h8cmf231y1vma0z7x85070jm1ysgs9ppqcd3jj56jka9gx";
|
||||
sha256 = "1q40w5hcl8rcpszm0r7rpr3a9lj390p39zfvavkvlgxyyk7bmgsj";
|
||||
};
|
||||
|
||||
patches = [ ./disable-popen.patch ];
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "iterm2-${version}";
|
||||
version = "3.0.2";
|
||||
version = "3.0.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gnachman";
|
||||
repo = "iTerm2";
|
||||
rev = "v${version}";
|
||||
sha256 = "121g759i814y1g1g1jwhsmxgg4wrzv08vq7a7qwc7b85a17zbd3h";
|
||||
sha256 = "0ffg9l2jvv503h13nd5rjkn5xrahswcqqwmm052qzd6d0lmqjm93";
|
||||
};
|
||||
|
||||
patches = [ ./disable_updates.patch ];
|
||||
|
31
pkgs/applications/misc/lighthouse/Makefile.patch
Normal file
31
pkgs/applications/misc/lighthouse/Makefile.patch
Normal file
@ -0,0 +1,31 @@
|
||||
# Description: Fix lighthouse Makefile
|
||||
Index: Makefile
|
||||
===================================================================
|
||||
--- ./Makefile 1970-01-01 02:00:01.000000000 +0200
|
||||
+++ ./Makefile 1970-01-01 02:00:01.000000000 +0200
|
||||
@@ -19,21 +19,10 @@
|
||||
endif
|
||||
|
||||
# Library specific
|
||||
-HAS_GDK := $(shell pkg-config --exists gdk-2.0 echo $?)
|
||||
-ifdef $(HAS_GDK)
|
||||
- CFLAGS+=`pkg-config --cflags gdk-2.0`
|
||||
- LDFLAGS+=`pkg-config --libs gdk-2.0`
|
||||
-else
|
||||
- CFLAGS+=-DNO_GDK
|
||||
-endif
|
||||
-HAS_PANGO := $(shell pkg-config --exists pango echo $?)
|
||||
-ifdef $(HAS_PANGO)
|
||||
- CFLAGS+=`pkg-config --cflags pango`
|
||||
- LDFLAGS+=`pkg-config --libs pango`
|
||||
-else
|
||||
- CFLAGS+=-DNO_PANGO
|
||||
-endif
|
||||
-
|
||||
+CFLAGS+=$(shell pkg-config --cflags gdk-2.0)
|
||||
+LDFLAGS+=$(shell pkg-config --libs gdk-2.0)
|
||||
+CFLAGS+=$(shell pkg-config --cflags pango)
|
||||
+LDFLAGS+=$(shell pkg-config --libs pango)
|
||||
|
||||
all: lighthouse
|
||||
|
49
pkgs/applications/misc/lighthouse/default.nix
Normal file
49
pkgs/applications/misc/lighthouse/default.nix
Normal file
@ -0,0 +1,49 @@
|
||||
{ stdenv, fetchFromGitHub, pkgconfig
|
||||
, libX11, libxcb, cairo, gtk, pango, python27, python3
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "lighthouse-${date}";
|
||||
date = "2016-01-26";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "emgram769";
|
||||
repo = "lighthouse";
|
||||
rev = "bf11f111572475e855b0329202a14c9e128c7e57";
|
||||
sha256 = "1ppika61vg4sc9mczbkjqy2mhgxqg57xrnsmmq0h2lyvj0yhg3qn";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
pkgconfig libX11 libxcb cairo gtk pango python27 python3
|
||||
];
|
||||
|
||||
patches = [ ./Makefile.patch ];
|
||||
|
||||
lighthouseInstaller = ''
|
||||
#!${stdenv.shell}
|
||||
cp -r $out/share/lighthouse/.config/lighthouse \$HOME/.config
|
||||
chmod -R +w \$HOME/.config/lighthouse
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp lighthouse $out/bin
|
||||
chmod +x config/lighthouse/cmd*
|
||||
chmod +x config/lighthouse/google.py
|
||||
patchShebangs config/lighthouse/
|
||||
patchShebangs config/lighthouse/scripts/
|
||||
mkdir -p $out/share/lighthouse/.config
|
||||
cp -r config/lighthouse $out/share/lighthouse/.config
|
||||
echo "${lighthouseInstaller}" > $out/bin/lighthouse-install
|
||||
chmod +x $out/bin/lighthouse-install
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "A simple flexible popup dialog to run on X";
|
||||
homepage = https://github.com/emgram769/lighthouse;
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ ramkromberg ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
|
||||
}
|
30
pkgs/applications/misc/mop/default.nix
Normal file
30
pkgs/applications/misc/mop/default.nix
Normal file
@ -0,0 +1,30 @@
|
||||
{ stdenv, lib, buildGoPackage, fetchgit }:
|
||||
|
||||
buildGoPackage rec {
|
||||
name = "mop-${version}";
|
||||
version = "0.2.0";
|
||||
rev = "bc666ec165d08b43134f7ec0bf29083ad5466243";
|
||||
|
||||
goPackagePath = "github.com/michaeldv/mop";
|
||||
goDeps = ./deps.json;
|
||||
|
||||
preConfigure = ''
|
||||
for i in $(find . -type f);do
|
||||
substituteInPlace $i --replace michaeldv/termbox-go nsf/termbox-go
|
||||
done
|
||||
substituteInPlace Makefile --replace mop/cmd mop/mop
|
||||
mv cmd mop
|
||||
'';
|
||||
|
||||
src = fetchgit {
|
||||
inherit rev;
|
||||
url = "https://github.com/mop-tracker/mop";
|
||||
sha256 = "0zp51g9i8rw6acs4vnrxclbxa5z1v0a0m1xx27szszp0rphcczkx";
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Simple stock tracker implemented in go";
|
||||
homepage = https://github.com/mop-tracker/mop;
|
||||
platforms = stdenv.lib.platforms.all;
|
||||
};
|
||||
}
|
8
pkgs/applications/misc/mop/deps.json
Normal file
8
pkgs/applications/misc/mop/deps.json
Normal file
@ -0,0 +1,8 @@
|
||||
[
|
||||
{
|
||||
"include": "../../libs.json",
|
||||
"packages": [
|
||||
"github.com/nsf/termbox-go"
|
||||
]
|
||||
}
|
||||
]
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, fetchurl, fetchpatch, pkgconfig, gnome_doc_utils, intltool
|
||||
{ stdenv, fetchurl, fetchpatch, pkgconfig, gnome_doc_utils, intltool, lib
|
||||
, mono, gtk-sharp, gnome-sharp, hyena
|
||||
, which, makeWrapper, glib, gnome3, poppler, wrapGAppsHook
|
||||
}:
|
||||
@ -33,12 +33,7 @@ stdenv.mkDerivation rec {
|
||||
--add-flags "$out/lib/pdfmod/PdfMod.exe" \
|
||||
--prefix MONO_GAC_PREFIX : ${gtk-sharp} \
|
||||
--prefix MONO_GAC_PREFIX : ${gnome-sharp} \
|
||||
--prefix LD_LIBRARY_PATH : ${glib}/lib \
|
||||
--prefix LD_LIBRARY_PATH : ${gtk-sharp}/lib \
|
||||
--prefix LD_LIBRARY_PATH : ${gnome-sharp}/lib \
|
||||
--prefix LD_LIBRARY_PATH : ${gtk-sharp.gtk}/lib \
|
||||
--prefix LD_LIBRARY_PATH : ${gnome3.gconf}/lib \
|
||||
--prefix LD_LIBRARY_PATH : ${poppler.out}/lib
|
||||
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ glib gnome-sharp gnome3.gconf gtk-sharp gtk-sharp.gtk poppler ]}
|
||||
'';
|
||||
|
||||
dontStrip = true;
|
||||
|
@ -42,12 +42,9 @@ assert stdenv.isLinux;
|
||||
|
||||
let
|
||||
|
||||
generated = if channel == "stable" then (import ./sources.nix)
|
||||
else if channel == "beta" then (import ./beta_sources.nix)
|
||||
else if channel == "developer" then { version = "49.0a2"; sources = [
|
||||
{ locale = "en-US"; arch = "linux-i686"; sha512 = "45dad182bf7a4e753c1be6b8f966393a06531e7b5530238d20cb67b26324e8f5d0eeec983a0855418f31187d3ae508c28810ab86269848b4e48ab2ca3b5d21e7"; }
|
||||
{ locale = "en-US"; arch = "linux-x86_64"; sha512 = "cfcbfc633b51612a62267c8a1afc25af212eb832d1fa876a1ffd82421e9378f96b3ac1488446f804518290abd99c21c9f10e4d0e0f699432aeb74b63305d7edc"; }
|
||||
]; }
|
||||
generated = if channel == "stable" then (import ./sources.nix)
|
||||
else if channel == "beta" then (import ./beta_sources.nix)
|
||||
else if channel == "developer" then (import ./dev_sources.nix)
|
||||
else builtins.abort "Wrong channel! Channel must be one of `stable`, `beta` or `developer`";
|
||||
|
||||
inherit (generated) version sources;
|
||||
|
@ -0,0 +1,12 @@
|
||||
# This file is generated from generate_sources_dev.rb. DO NOT EDIT.
|
||||
# Execute the following command to update the file.
|
||||
#
|
||||
# ruby generate_sources_dev.rb 49.0a2 > dev_sources.nix
|
||||
|
||||
{
|
||||
version = "49.0a2";
|
||||
sources = [
|
||||
{ locale = "en-US"; arch = "linux-i686"; sha512 = "85c4289e561d2246f96a05e3b8df011337984b9f176670826a705c2cd68a1284056ba507e4b6e4887595bf37f25386d9f7b28a20bc1f125865b9fd7b8be17eaa"; }
|
||||
{ locale = "en-US"; arch = "linux-x86_64"; sha512 = "2bf9518dbfbb48348f74929c19d03e8daf51020bf9ba6db577a202b6e98ad7ffb9e9a0b4ca92af010cd3f864ae84940b65438f4230e6de3165f72e4e7280086d"; }
|
||||
];
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env ruby
|
||||
require "open-uri"
|
||||
|
||||
version =
|
||||
if ARGV.empty?
|
||||
$stderr.puts("Usage: ruby generate_sources_dev.rb <version> > dev_sources.nix")
|
||||
exit(-1)
|
||||
else
|
||||
ARGV[0]
|
||||
end
|
||||
|
||||
base_url = "http://download-installer.cdn.mozilla.net/pub/firefox/nightly/latest-mozilla-aurora"
|
||||
|
||||
arches = ["linux-i686", "linux-x86_64"]
|
||||
locales = ["en-US"]
|
||||
sources = []
|
||||
|
||||
Source = Struct.new(:hash, :arch, :locale, :filename)
|
||||
|
||||
locales.each do |locale|
|
||||
arches.each do |arch|
|
||||
basename = "firefox-#{version}.#{locale}.#{arch}"
|
||||
filename = basename + ".tar.bz2"
|
||||
sha512 = open("#{base_url}/#{basename}.checksums").each_line
|
||||
.find(filename).first
|
||||
.split(" ").first
|
||||
sources << Source.new(sha512, arch, locale, filename)
|
||||
end
|
||||
end
|
||||
|
||||
sources = sources.sort_by do |source|
|
||||
[source.locale, source.arch]
|
||||
end
|
||||
|
||||
puts(<<"EOH")
|
||||
# This file is generated from generate_sources_dev.rb. DO NOT EDIT.
|
||||
# Execute the following command to update the file.
|
||||
#
|
||||
# ruby generate_sources_dev.rb 49.0a2 > dev_sources.nix
|
||||
|
||||
{
|
||||
version = "#{version}";
|
||||
sources = [
|
||||
EOH
|
||||
|
||||
sources.each do |source|
|
||||
puts(%Q| { locale = "#{source.locale}"; arch = "#{source.arch}"; sha512 = "#{source.hash}"; }|)
|
||||
end
|
||||
|
||||
puts(<<'EOF')
|
||||
];
|
||||
}
|
||||
EOF
|
@ -17,11 +17,11 @@ in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "bluejeans-${version}";
|
||||
|
||||
version = "2.160.49.8";
|
||||
version = "2.160.63.8";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://swdl.bluejeans.com/skinny/bjnplugin_${version}-1_amd64.deb";
|
||||
sha256 = "1hf4jx0d1wiv622rwck0mm8cckm121yszviw47jsw0mjnp91hqch";
|
||||
sha256 = "1sfz9xvvrbw7gg7fxxwg9wmgbxgv3fa14p7i4m85mg10l3qxaqfc";
|
||||
};
|
||||
|
||||
phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
|
||||
|
@ -1,13 +1,13 @@
|
||||
{ stdenv, fetchurl, dbus, gnutls, wxGTK30, libidn, tinyxml, gettext
|
||||
, pkgconfig, xdg_utils, gtk2, sqlite, pugixml, libfilezilla, nettle }:
|
||||
|
||||
let version = "3.18.0"; in
|
||||
let version = "3.19.0"; in
|
||||
stdenv.mkDerivation {
|
||||
name = "filezilla-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/project/filezilla/FileZilla_Client/${version}/FileZilla_${version}_src.tar.bz2";
|
||||
sha256 = "1qnpbx2684r529ldih6fi5anjlcgqn2xfcls0q38iadrk1qnqr1p";
|
||||
sha256 = "0827z1jmn8pkzrcpjgh5yh2r23vgv73yb4rikraxa9i7l118g9l2";
|
||||
};
|
||||
|
||||
configureFlags = [
|
||||
|
@ -0,0 +1,105 @@
|
||||
{ alsaLib
|
||||
, fetchurl
|
||||
, gcc
|
||||
, glib
|
||||
, gst_plugins_base
|
||||
, gstreamer
|
||||
, icu_54_1
|
||||
, libpulseaudio
|
||||
, libuuid
|
||||
, libxml2
|
||||
, libxslt
|
||||
, makeQtWrapper
|
||||
, qt55
|
||||
, sqlite
|
||||
, stdenv
|
||||
, xlibs
|
||||
, xorg
|
||||
, zlib
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "zoom-us";
|
||||
meta = {
|
||||
homepage = http://zoom.us;
|
||||
description = "zoom.us instant messenger";
|
||||
license = stdenv.lib.licenses.unfree;
|
||||
platforms = stdenv.lib.platforms.linux;
|
||||
};
|
||||
|
||||
version = "2.0.52458.0531";
|
||||
src = fetchurl {
|
||||
url = "https://zoom.us/client/latest/zoom_${version}_x86_64.tar.xz";
|
||||
sha256 = "16d64pn9j27v3fnh4c9i32vpkr10q1yr26w14964n0af1mv5jf7a";
|
||||
};
|
||||
|
||||
phases = [ "unpackPhase" "installPhase" ];
|
||||
nativeBuildInputs = [ makeQtWrapper ];
|
||||
libPath = stdenv.lib.makeLibraryPath [
|
||||
alsaLib
|
||||
gcc.cc
|
||||
glib
|
||||
gst_plugins_base
|
||||
gstreamer
|
||||
icu_54_1
|
||||
libpulseaudio
|
||||
libuuid
|
||||
libxml2
|
||||
libxslt
|
||||
qt55.qtbase
|
||||
qt55.qtdeclarative
|
||||
qt55.qtscript
|
||||
qt55.qtwebkit
|
||||
sqlite
|
||||
xlibs.xcbutilkeysyms
|
||||
xorg.libX11
|
||||
xorg.libxcb
|
||||
xorg.libXcomposite
|
||||
xorg.libXext
|
||||
xorg.libXfixes
|
||||
xorg.libXrender
|
||||
xorg.xcbutilimage
|
||||
zlib
|
||||
];
|
||||
installPhase = ''
|
||||
mkdir -p $out/share
|
||||
cp -r \
|
||||
application-x-zoom.png \
|
||||
audio \
|
||||
imageformats \
|
||||
chrome.bmp \
|
||||
config-dump.sh \
|
||||
dingdong1.pcm \
|
||||
dingdong.pcm \
|
||||
doc \
|
||||
Droplet.pcm \
|
||||
Droplet.wav \
|
||||
platforminputcontexts \
|
||||
platforms \
|
||||
platformthemes \
|
||||
Qt \
|
||||
QtMultimedia \
|
||||
QtQml \
|
||||
QtQuick \
|
||||
QtQuick.2 \
|
||||
QtWebKit \
|
||||
QtWebProcess \
|
||||
ring.pcm \
|
||||
ring.wav \
|
||||
version.txt \
|
||||
xcbglintegrations \
|
||||
zcacert.pem \
|
||||
zoom \
|
||||
Zoom.png \
|
||||
ZXMPPROOT.cer \
|
||||
$out/share
|
||||
|
||||
patchelf \
|
||||
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
|
||||
--set-rpath ${libPath} \
|
||||
$out/share/zoom
|
||||
wrapQtProgram "$out/share/zoom"
|
||||
mkdir -p $out/bin
|
||||
ln -s $out/share/zoom $out/bin/zoom-us
|
||||
'';
|
||||
}
|
@ -1,43 +1,51 @@
|
||||
{ stdenv, fetchurl, ncurses, which, perl, autoreconfHook
|
||||
, sslSupport ? true
|
||||
, imapSupport ? true
|
||||
, headerCache ? true
|
||||
, saslSupport ? true
|
||||
, gpgmeSupport ? true
|
||||
, gdbm ? null
|
||||
, openssl ? null
|
||||
, cyrus_sasl ? null
|
||||
, gpgme ? null
|
||||
, withSidebar ? false
|
||||
, aclocal ? null
|
||||
, headerCache ? true
|
||||
, sslSupport ? true
|
||||
, saslSupport ? true
|
||||
, gpgmeSupport ? true
|
||||
, imapSupport ? true
|
||||
, withSidebar ? false
|
||||
, withTrash ? false
|
||||
}:
|
||||
|
||||
assert headerCache -> gdbm != null;
|
||||
assert sslSupport -> openssl != null;
|
||||
assert saslSupport -> cyrus_sasl != null;
|
||||
assert gpgmeSupport -> gpgme != null;
|
||||
assert headerCache -> gdbm != null;
|
||||
assert sslSupport -> openssl != null;
|
||||
assert saslSupport -> cyrus_sasl != null;
|
||||
assert gpgmeSupport -> gpgme != null;
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
version = "1.6.0";
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mutt${stdenv.lib.optionalString withSidebar "-with-sidebar"}-${version}";
|
||||
name = "mutt-${version}";
|
||||
version = "1.6.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://ftp.mutt.org/pub/mutt/mutt-${version}.tar.gz";
|
||||
sha256 = "06bc2drbgalkk68rzg7hq2v5m5qgjxff5357wg0419dpi8ivdbr9";
|
||||
url = "http://ftp.mutt.org/pub/mutt/${name}.tar.gz";
|
||||
sha256 = "13hxmji7v9m2agmvzrs7gzx8s3c9jiwrv7pbkr7z1kc6ckq2xl65";
|
||||
};
|
||||
|
||||
buildInputs = with stdenv.lib;
|
||||
buildInputs =
|
||||
[ ncurses which perl ]
|
||||
++ optional headerCache gdbm
|
||||
++ optional sslSupport openssl
|
||||
++ optional saslSupport cyrus_sasl
|
||||
++ optional gpgmeSupport gpgme;
|
||||
|
||||
nativeBuildInputs = stdenv.lib.optional withSidebar autoreconfHook;
|
||||
++ optional headerCache gdbm
|
||||
++ optional sslSupport openssl
|
||||
++ optional saslSupport cyrus_sasl
|
||||
++ optional gpgmeSupport gpgme
|
||||
++ optional withSidebar autoreconfHook;
|
||||
|
||||
configureFlags = [
|
||||
"--with-mailpath=" "--enable-smtp"
|
||||
(enableFeature headerCache "hcache")
|
||||
(enableFeature gpgmeSupport "gpgme")
|
||||
(enableFeature imapSupport "imap")
|
||||
(enableFeature withSidebar "sidebar")
|
||||
"--enable-smtp"
|
||||
"--enable-pop"
|
||||
"--enable-imap"
|
||||
"--with-mailpath="
|
||||
|
||||
# Look in $PATH at runtime, instead of hardcoding /usr/bin/sendmail
|
||||
"ac_cv_path_SENDMAIL=sendmail"
|
||||
@ -45,36 +53,22 @@ stdenv.mkDerivation rec {
|
||||
# This allows calls with "-d N", that output debug info into ~/.muttdebug*
|
||||
"--enable-debug"
|
||||
|
||||
"--enable-pop" "--enable-imap"
|
||||
|
||||
# The next allows building mutt without having anything setgid
|
||||
# set by the installer, and removing the need for the group 'mail'
|
||||
# I set the value 'mailbox' because it is a default in the configure script
|
||||
"--with-homespool=mailbox"
|
||||
(if headerCache then "--enable-hcache" else "--disable-hcache")
|
||||
(if sslSupport then "--with-ssl" else "--without-ssl")
|
||||
(if imapSupport then "--enable-imap" else "--disable-imap")
|
||||
(if saslSupport then "--with-sasl" else "--without-sasl")
|
||||
(if gpgmeSupport then "--enable-gpgme" else "--disable-gpgme")
|
||||
];
|
||||
] ++ optional sslSupport "--with-ssl"
|
||||
++ optional saslSupport "--with-sasl";
|
||||
|
||||
# Adding the sidebar
|
||||
patches = stdenv.lib.optional withSidebar [
|
||||
./trash-folder.patch
|
||||
./sidebar.patch
|
||||
./sidebar-dotpathsep.patch
|
||||
./sidebar-utf8.patch
|
||||
./sidebar-newonly.patch
|
||||
./sidebar-delimnullwide.patch
|
||||
./sidebar-compose.patch
|
||||
./sidebar-new.patch
|
||||
];
|
||||
patches =
|
||||
optional withTrash ./trash.patch ++
|
||||
optional withSidebar ./sidebar.patch;
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
meta = {
|
||||
description = "A small but very powerful text-based mail client";
|
||||
homepage = http://www.mutt.org;
|
||||
license = stdenv.lib.licenses.gpl2Plus;
|
||||
license = licenses.gpl2Plus;
|
||||
platforms = platforms.unix;
|
||||
maintainers = with maintainers; [ the-kenny ];
|
||||
maintainers = with maintainers; [ the-kenny rnhmjoj ];
|
||||
};
|
||||
}
|
||||
|
@ -1,40 +0,0 @@
|
||||
From: Evgeni Golov <evgeni@debian.org>
|
||||
Date: Fri, 14 Mar 2014 08:54:47 +0100
|
||||
Subject: sidebar-compose
|
||||
|
||||
draw_sidebar sets SidebarWidth to 0 when sidebar_visible is false.
|
||||
However, if you start mutt in compose mode, draw_sidebar won't be
|
||||
called until the next redraw and your header lines will be off by
|
||||
the width of the sidebar, even when you did not want a sidebar at
|
||||
all.
|
||||
|
||||
Can be tested with:
|
||||
HOME=/ LC_ALL=C mutt -e 'unset sidebar_visible' -s test recipient
|
||||
|
||||
Closes: #502627
|
||||
|
||||
Gbp-Pq: Topic mutt-patched
|
||||
---
|
||||
compose.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/compose.c b/compose.c
|
||||
index b63695f..0fa6df2 100644
|
||||
--- a/compose.c
|
||||
+++ b/compose.c
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "mailbox.h"
|
||||
#include "sort.h"
|
||||
#include "charset.h"
|
||||
+#include "sidebar.h"
|
||||
|
||||
#ifdef MIXMASTER
|
||||
#include "remailer.h"
|
||||
@@ -248,6 +249,7 @@ static void draw_envelope_addr (int line, ADDRESS *addr)
|
||||
|
||||
static void draw_envelope (HEADER *msg, char *fcc)
|
||||
{
|
||||
+ draw_sidebar (MENU_COMPOSE);
|
||||
draw_envelope_addr (HDR_FROM, msg->env->from);
|
||||
draw_envelope_addr (HDR_TO, msg->env->to);
|
||||
draw_envelope_addr (HDR_CC, msg->env->cc);
|
@ -1,38 +0,0 @@
|
||||
From: Evgeni Golov <sargentd@die-welt.net>
|
||||
Date: Wed, 5 Mar 2014 17:46:07 +0100
|
||||
Subject: sidebar-delimnullwide
|
||||
|
||||
SidebarDelim can be NULL and strlen(NULL) is a bad idea, as it will segfault.
|
||||
Wrap it with NONULL().
|
||||
|
||||
While at it, change strlen to mbstowcs for better utf8 support.
|
||||
|
||||
Closes: #696145, #663883
|
||||
|
||||
Gbp-Pq: Topic mutt-patched
|
||||
---
|
||||
sidebar.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sidebar.c b/sidebar.c
|
||||
index 51a25ca..c3ea338 100644
|
||||
--- a/sidebar.c
|
||||
+++ b/sidebar.c
|
||||
@@ -88,7 +88,7 @@ char *make_sidebar_entry(char *box, int size, int new, int flagged)
|
||||
int box_len, box_bytes;
|
||||
int int_len;
|
||||
int right_offset = 0;
|
||||
- int delim_len = strlen(SidebarDelim);
|
||||
+ int delim_len = mbstowcs(NULL, NONULL(SidebarDelim), 0);
|
||||
static char *entry;
|
||||
|
||||
right_width = left_width = 0;
|
||||
@@ -178,7 +178,7 @@ int draw_sidebar(int menu) {
|
||||
#ifndef USE_SLANG_CURSES
|
||||
attr_t attrs;
|
||||
#endif
|
||||
- short delim_len = strlen(SidebarDelim);
|
||||
+ short delim_len = mbstowcs(NULL, NONULL(SidebarDelim), 0);
|
||||
short color_pair;
|
||||
|
||||
static bool initialized = false;
|
@ -1,98 +0,0 @@
|
||||
From: Fabian Groffen <grobian@gentoo.org>
|
||||
Date: Tue, 4 Mar 2014 21:12:15 +0100
|
||||
Subject: sidebar-dotpathsep
|
||||
|
||||
Make path separators for sidebar folders configurable.
|
||||
|
||||
When using IMAP, a '.' is often used as path separator, hence make the
|
||||
path separators configurable through sidebar_delim_chars variable.
|
||||
It defaults to "/." to work for both mboxes as well as IMAP folders. It
|
||||
can be set to only "/" or "." or whichever character desired as needed.
|
||||
|
||||
Gbp-Pq: Topic mutt-patched
|
||||
---
|
||||
globals.h | 1 +
|
||||
init.h | 8 ++++++++
|
||||
sidebar.c | 31 ++++++++++++++++++++++++-------
|
||||
3 files changed, 33 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/globals.h b/globals.h
|
||||
index 004c795..602f932 100644
|
||||
--- a/globals.h
|
||||
+++ b/globals.h
|
||||
@@ -119,6 +119,7 @@ WHERE char *SendCharset;
|
||||
WHERE char *Sendmail;
|
||||
WHERE char *Shell;
|
||||
WHERE char *SidebarDelim;
|
||||
+WHERE char *SidebarDelimChars INITVAL (NULL);
|
||||
WHERE char *Signature;
|
||||
WHERE char *SimpleSearch;
|
||||
#if USE_SMTP
|
||||
diff --git a/init.h b/init.h
|
||||
index c664e5f..166671b 100644
|
||||
--- a/init.h
|
||||
+++ b/init.h
|
||||
@@ -2051,6 +2051,14 @@ struct option_t MuttVars[] = {
|
||||
** .pp
|
||||
** The width of the sidebar.
|
||||
*/
|
||||
+ { "sidebar_delim_chars", DT_STR, R_NONE, UL &SidebarDelimChars, UL "/." },
|
||||
+ /*
|
||||
+ ** .pp
|
||||
+ ** This contains the list of characters which you would like to treat
|
||||
+ ** as folder separators for displaying paths in the sidebar. If
|
||||
+ ** you're not using IMAP folders, you probably prefer setting this to "/"
|
||||
+ ** alone.
|
||||
+ */
|
||||
{ "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0},
|
||||
/*
|
||||
** .pp
|
||||
diff --git a/sidebar.c b/sidebar.c
|
||||
index 6098c2a..4356ffc 100644
|
||||
--- a/sidebar.c
|
||||
+++ b/sidebar.c
|
||||
@@ -249,20 +249,37 @@ int draw_sidebar(int menu) {
|
||||
// calculate depth of current folder and generate its display name with indented spaces
|
||||
int sidebar_folder_depth = 0;
|
||||
char *sidebar_folder_name;
|
||||
- sidebar_folder_name = basename(tmp->path);
|
||||
+ int i;
|
||||
+ sidebar_folder_name = tmp->path;
|
||||
+ /* disregard a trailing separator, so strlen() - 2
|
||||
+ * https://bugs.gentoo.org/show_bug.cgi?id=373197#c16 */
|
||||
+ for (i = strlen(sidebar_folder_name) - 2; i >= 0; i--) {
|
||||
+ if (SidebarDelimChars &&
|
||||
+ strchr(SidebarDelimChars, sidebar_folder_name[i]))
|
||||
+ {
|
||||
+ sidebar_folder_name += i + 1;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
if ( maildir_is_prefix ) {
|
||||
char *tmp_folder_name;
|
||||
- int i;
|
||||
+ int lastsep = 0;
|
||||
tmp_folder_name = tmp->path + strlen(Maildir);
|
||||
- for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) {
|
||||
- if (tmp_folder_name[i] == '/') sidebar_folder_depth++;
|
||||
- }
|
||||
+ for (i = 0; i < strlen(tmp_folder_name) - 1; i++) {
|
||||
+ if (SidebarDelimChars &&
|
||||
+ strchr(SidebarDelimChars, tmp_folder_name[i]))
|
||||
+ {
|
||||
+ sidebar_folder_depth++;
|
||||
+ lastsep = i + 1;
|
||||
+ }
|
||||
+ }
|
||||
if (sidebar_folder_depth > 0) {
|
||||
- sidebar_folder_name = malloc(strlen(basename(tmp->path)) + sidebar_folder_depth + 1);
|
||||
+ tmp_folder_name += lastsep; /* basename */
|
||||
+ sidebar_folder_name = malloc(strlen(tmp_folder_name) + sidebar_folder_depth + 1);
|
||||
for (i=0; i < sidebar_folder_depth; i++)
|
||||
sidebar_folder_name[i]=' ';
|
||||
sidebar_folder_name[i]=0;
|
||||
- strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth);
|
||||
+ strncat(sidebar_folder_name, tmp_folder_name, strlen(tmp_folder_name) + sidebar_folder_depth);
|
||||
}
|
||||
}
|
||||
printw( "%.*s", SidebarWidth - delim_len + 1,
|
@ -1,97 +0,0 @@
|
||||
From 355399bde98203af59d20821f9e840fc056bd383 Mon Sep 17 00:00:00 2001
|
||||
From: Julius Haertl <jus@bitgrid.net>
|
||||
Date: Tue, 9 Sep 2014 22:31:49 +0200
|
||||
Subject: Patch for sidebar iteration functionality
|
||||
|
||||
sidebar-new will move the selected folder to the next with new messages.
|
||||
If the end is reached, it will start at the top.
|
||||
|
||||
Useful macros would be:
|
||||
|
||||
macro index <esc>a "<sidebar-new><sidebar-open>"
|
||||
macro pager <esc>a "<exit><sidebar-new><sidebar-open>"
|
||||
---
|
||||
OPS | 1 +
|
||||
curs_main.c | 1 +
|
||||
functions.h | 2 ++
|
||||
pager.c | 1 +
|
||||
sidebar.c | 10 ++++++++++
|
||||
5 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/OPS b/OPS
|
||||
index 1ed9c96..3ffb82a 100644
|
||||
--- a/OPS
|
||||
+++ b/OPS
|
||||
@@ -187,3 +187,4 @@ OP_SIDEBAR_PREV "go to previous mailbox"
|
||||
OP_SIDEBAR_OPEN "open hilighted mailbox"
|
||||
OP_SIDEBAR_NEXT_NEW "go down to next mailbox with new mail"
|
||||
OP_SIDEBAR_PREV_NEW "go to previous mailbox with new mail"
|
||||
+OP_SIDEBAR_NEW "iterate though mailboxes with new mail"
|
||||
diff --git a/curs_main.c b/curs_main.c
|
||||
index acb106d..2e35f90 100644
|
||||
--- a/curs_main.c
|
||||
+++ b/curs_main.c
|
||||
@@ -2328,6 +2328,7 @@ int mutt_index_menu (void)
|
||||
case OP_SIDEBAR_PREV:
|
||||
case OP_SIDEBAR_NEXT_NEW:
|
||||
case OP_SIDEBAR_PREV_NEW:
|
||||
+ case OP_SIDEBAR_NEW:
|
||||
scroll_sidebar(op, menu->menu);
|
||||
break;
|
||||
default:
|
||||
diff --git a/functions.h b/functions.h
|
||||
index 363b4d5..1485080 100644
|
||||
--- a/functions.h
|
||||
+++ b/functions.h
|
||||
@@ -176,6 +176,7 @@ const struct binding_t OpMain[] = { /* map: index */
|
||||
{ "sidebar-prev", OP_SIDEBAR_PREV, NULL },
|
||||
{ "sidebar-next-new", OP_SIDEBAR_NEXT_NEW, NULL},
|
||||
{ "sidebar-prev-new", OP_SIDEBAR_PREV_NEW, NULL},
|
||||
+ { "sidebar-new", OP_SIDEBAR_NEW, NULL },
|
||||
{ "sidebar-open", OP_SIDEBAR_OPEN, NULL },
|
||||
{ NULL, 0, NULL }
|
||||
};
|
||||
@@ -287,6 +288,7 @@ const struct binding_t OpPager[] = { /* map: pager */
|
||||
{ "sidebar-prev", OP_SIDEBAR_PREV, NULL },
|
||||
{ "sidebar-next-new", OP_SIDEBAR_NEXT_NEW, NULL},
|
||||
{ "sidebar-prev-new", OP_SIDEBAR_PREV_NEW, NULL},
|
||||
+ { "sidebar-new", OP_SIDEBAR_NEW, NULL },
|
||||
{ "sidebar-open", OP_SIDEBAR_OPEN, NULL },
|
||||
{ NULL, 0, NULL }
|
||||
};
|
||||
diff --git a/pager.c b/pager.c
|
||||
index 8d64fe1..696e55c 100644
|
||||
--- a/pager.c
|
||||
+++ b/pager.c
|
||||
@@ -2791,6 +2791,7 @@ search_next:
|
||||
case OP_SIDEBAR_PREV:
|
||||
case OP_SIDEBAR_NEXT_NEW:
|
||||
case OP_SIDEBAR_PREV_NEW:
|
||||
+ case OP_SIDEBAR_NEW:
|
||||
scroll_sidebar(ch, MENU_PAGER);
|
||||
break;
|
||||
|
||||
diff --git a/sidebar.c b/sidebar.c
|
||||
index c3ea338..eb8ecd2 100644
|
||||
--- a/sidebar.c
|
||||
+++ b/sidebar.c
|
||||
@@ -429,6 +429,16 @@ void scroll_sidebar(int op, int menu)
|
||||
CurBuffy = CurBuffy->next;
|
||||
}
|
||||
break;
|
||||
+ case OP_SIDEBAR_NEW:
|
||||
+ if ( (tmp = exist_next_new()) == NULL)
|
||||
+ tmp = TopBuffy;
|
||||
+ if ( tmp->msg_unread == 0 ) {
|
||||
+ CurBuffy = tmp;
|
||||
+ tmp = exist_next_new();
|
||||
+ }
|
||||
+ if ( tmp != NULL )
|
||||
+ CurBuffy = tmp;
|
||||
+ break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
--
|
||||
2.6.0.rc0.2.g7662973.dirty
|
||||
|
@ -1,198 +0,0 @@
|
||||
From: Steve Kemp <steve@steve.org.uk>
|
||||
Date: Tue, 4 Mar 2014 22:07:06 +0100
|
||||
Subject: sidebar-newonly
|
||||
|
||||
patches written by Steve Kemp, it adds two new functionalities to the sidebar,
|
||||
so only the mailbox with new messages will be shown (and/or) selected
|
||||
See Debian bug http://bugs.debian.org/532510
|
||||
|
||||
Gbp-Pq: Topic mutt-patched
|
||||
---
|
||||
OPS | 2 ++
|
||||
curs_main.c | 2 ++
|
||||
functions.h | 4 ++++
|
||||
init.h | 5 +++++
|
||||
mutt.h | 2 ++
|
||||
pager.c | 2 ++
|
||||
sidebar.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
|
||||
7 files changed, 70 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/OPS b/OPS
|
||||
index b036db9..1ed9c96 100644
|
||||
--- a/OPS
|
||||
+++ b/OPS
|
||||
@@ -185,3 +185,5 @@ OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page"
|
||||
OP_SIDEBAR_NEXT "go down to next mailbox"
|
||||
OP_SIDEBAR_PREV "go to previous mailbox"
|
||||
OP_SIDEBAR_OPEN "open hilighted mailbox"
|
||||
+OP_SIDEBAR_NEXT_NEW "go down to next mailbox with new mail"
|
||||
+OP_SIDEBAR_PREV_NEW "go to previous mailbox with new mail"
|
||||
diff --git a/curs_main.c b/curs_main.c
|
||||
index ea530a6..acb106d 100644
|
||||
--- a/curs_main.c
|
||||
+++ b/curs_main.c
|
||||
@@ -2326,6 +2326,8 @@ int mutt_index_menu (void)
|
||||
case OP_SIDEBAR_SCROLL_DOWN:
|
||||
case OP_SIDEBAR_NEXT:
|
||||
case OP_SIDEBAR_PREV:
|
||||
+ case OP_SIDEBAR_NEXT_NEW:
|
||||
+ case OP_SIDEBAR_PREV_NEW:
|
||||
scroll_sidebar(op, menu->menu);
|
||||
break;
|
||||
default:
|
||||
diff --git a/functions.h b/functions.h
|
||||
index ef8937a..363b4d5 100644
|
||||
--- a/functions.h
|
||||
+++ b/functions.h
|
||||
@@ -174,6 +174,8 @@ const struct binding_t OpMain[] = { /* map: index */
|
||||
{ "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL },
|
||||
{ "sidebar-next", OP_SIDEBAR_NEXT, NULL },
|
||||
{ "sidebar-prev", OP_SIDEBAR_PREV, NULL },
|
||||
+ { "sidebar-next-new", OP_SIDEBAR_NEXT_NEW, NULL},
|
||||
+ { "sidebar-prev-new", OP_SIDEBAR_PREV_NEW, NULL},
|
||||
{ "sidebar-open", OP_SIDEBAR_OPEN, NULL },
|
||||
{ NULL, 0, NULL }
|
||||
};
|
||||
@@ -283,6 +285,8 @@ const struct binding_t OpPager[] = { /* map: pager */
|
||||
{ "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL },
|
||||
{ "sidebar-next", OP_SIDEBAR_NEXT, NULL },
|
||||
{ "sidebar-prev", OP_SIDEBAR_PREV, NULL },
|
||||
+ { "sidebar-next-new", OP_SIDEBAR_NEXT_NEW, NULL},
|
||||
+ { "sidebar-prev-new", OP_SIDEBAR_PREV_NEW, NULL},
|
||||
{ "sidebar-open", OP_SIDEBAR_OPEN, NULL },
|
||||
{ NULL, 0, NULL }
|
||||
};
|
||||
diff --git a/init.h b/init.h
|
||||
index 166671b..a5d4238 100644
|
||||
--- a/init.h
|
||||
+++ b/init.h
|
||||
@@ -2059,6 +2059,11 @@ struct option_t MuttVars[] = {
|
||||
** you're not using IMAP folders, you probably prefer setting this to "/"
|
||||
** alone.
|
||||
*/
|
||||
+ {"sidebar_newmail_only", DT_BOOL, R_BOTH, OPTSIDEBARNEWMAILONLY, 0 },
|
||||
+ /*
|
||||
+ ** .pp
|
||||
+ ** Show only new mail in the sidebar.
|
||||
+ */
|
||||
{ "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0},
|
||||
/*
|
||||
** .pp
|
||||
diff --git a/mutt.h b/mutt.h
|
||||
index 5f25406..d73e514 100644
|
||||
--- a/mutt.h
|
||||
+++ b/mutt.h
|
||||
@@ -529,6 +529,8 @@ enum
|
||||
OPTDONTHANDLEPGPKEYS, /* (pseudo) used to extract PGP keys */
|
||||
OPTUNBUFFEREDINPUT, /* (pseudo) don't use key buffer */
|
||||
|
||||
+ OPTSIDEBARNEWMAILONLY,
|
||||
+
|
||||
OPTMAX
|
||||
};
|
||||
|
||||
diff --git a/pager.c b/pager.c
|
||||
index 5cfcb75..8d64fe1 100644
|
||||
--- a/pager.c
|
||||
+++ b/pager.c
|
||||
@@ -2789,6 +2789,8 @@ search_next:
|
||||
case OP_SIDEBAR_SCROLL_DOWN:
|
||||
case OP_SIDEBAR_NEXT:
|
||||
case OP_SIDEBAR_PREV:
|
||||
+ case OP_SIDEBAR_NEXT_NEW:
|
||||
+ case OP_SIDEBAR_PREV_NEW:
|
||||
scroll_sidebar(ch, MENU_PAGER);
|
||||
break;
|
||||
|
||||
diff --git a/sidebar.c b/sidebar.c
|
||||
index 8f58f85..51a25ca 100644
|
||||
--- a/sidebar.c
|
||||
+++ b/sidebar.c
|
||||
@@ -269,8 +269,21 @@ int draw_sidebar(int menu) {
|
||||
SETCOLOR(MT_COLOR_NEW);
|
||||
else if ( tmp->msg_flagged > 0 )
|
||||
SETCOLOR(MT_COLOR_FLAGGED);
|
||||
- else
|
||||
- SETCOLOR(MT_COLOR_NORMAL);
|
||||
+ else {
|
||||
+ /* make sure the path is either:
|
||||
+ 1. Containing new mail.
|
||||
+ 2. The inbox.
|
||||
+ 3. The current box.
|
||||
+ */
|
||||
+ if ((option (OPTSIDEBARNEWMAILONLY)) &&
|
||||
+ ( (tmp->msg_unread <= 0) &&
|
||||
+ ( tmp != Incoming ) &&
|
||||
+ Context &&
|
||||
+ ( strcmp( tmp->path, Context->path ) != 0 ) ) )
|
||||
+ continue;
|
||||
+ else
|
||||
+ SETCOLOR(MT_COLOR_NORMAL);
|
||||
+ }
|
||||
|
||||
move( lines, 0 );
|
||||
if ( Context && !strcmp( tmp->path, Context->path ) ) {
|
||||
@@ -336,6 +349,29 @@ int draw_sidebar(int menu) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
+BUFFY * exist_next_new()
|
||||
+{
|
||||
+ BUFFY *tmp = CurBuffy;
|
||||
+ if(tmp == NULL) return NULL;
|
||||
+ while (tmp->next != NULL)
|
||||
+ {
|
||||
+ tmp = tmp->next;
|
||||
+ if(tmp->msg_unread) return tmp;
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+BUFFY * exist_prev_new()
|
||||
+{
|
||||
+ BUFFY *tmp = CurBuffy;
|
||||
+ if(tmp == NULL) return NULL;
|
||||
+ while (tmp->prev != NULL)
|
||||
+ {
|
||||
+ tmp = tmp->prev;
|
||||
+ if(tmp->msg_unread) return tmp;
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
|
||||
void set_buffystats(CONTEXT* Context)
|
||||
{
|
||||
@@ -352,18 +388,33 @@ void set_buffystats(CONTEXT* Context)
|
||||
|
||||
void scroll_sidebar(int op, int menu)
|
||||
{
|
||||
+ BUFFY *tmp;
|
||||
if(!SidebarWidth) return;
|
||||
if(!CurBuffy) return;
|
||||
|
||||
switch (op) {
|
||||
case OP_SIDEBAR_NEXT:
|
||||
+ if (!option (OPTSIDEBARNEWMAILONLY)) {
|
||||
if ( CurBuffy->next == NULL ) return;
|
||||
CurBuffy = CurBuffy->next;
|
||||
break;
|
||||
+ }
|
||||
+ case OP_SIDEBAR_NEXT_NEW:
|
||||
+ if ( (tmp = exist_next_new()) == NULL)
|
||||
+ return;
|
||||
+ else CurBuffy = tmp;
|
||||
+ break;
|
||||
case OP_SIDEBAR_PREV:
|
||||
+ if (!option (OPTSIDEBARNEWMAILONLY)) {
|
||||
if ( CurBuffy->prev == NULL ) return;
|
||||
CurBuffy = CurBuffy->prev;
|
||||
break;
|
||||
+ }
|
||||
+ case OP_SIDEBAR_PREV_NEW:
|
||||
+ if ( (tmp = exist_prev_new()) == NULL)
|
||||
+ return;
|
||||
+ else CurBuffy = tmp;
|
||||
+ break;
|
||||
case OP_SIDEBAR_SCROLL_UP:
|
||||
CurBuffy = TopBuffy;
|
||||
if ( CurBuffy != Incoming ) {
|
@ -1,132 +0,0 @@
|
||||
From: Antonio Radici <antonio@debian.org>
|
||||
Date: Tue, 4 Mar 2014 15:39:14 +0100
|
||||
Subject: sidebar-utf8
|
||||
|
||||
This patch fixes a problem with utf-8 strings and the sidebar,
|
||||
it rewrites entirely make_sidebar_entry so it also fixes some
|
||||
segfaults due to misallocations and overflows.
|
||||
|
||||
See:
|
||||
http://bugs.debian.org/584581
|
||||
http://bugs.debian.org/603287
|
||||
|
||||
Gbp-Pq: Topic mutt-patched
|
||||
---
|
||||
sidebar.c | 97 +++++++++++++++++++++++++++++++++++++++++++--------------------
|
||||
1 file changed, 67 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/sidebar.c b/sidebar.c
|
||||
index 4356ffc..8f58f85 100644
|
||||
--- a/sidebar.c
|
||||
+++ b/sidebar.c
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <libgen.h>
|
||||
#include "keymap.h"
|
||||
#include <stdbool.h>
|
||||
+#include <wchar.h>
|
||||
|
||||
/*BUFFY *CurBuffy = 0;*/
|
||||
static BUFFY *TopBuffy = 0;
|
||||
@@ -82,36 +83,72 @@ void calc_boundaries (int menu)
|
||||
|
||||
char *make_sidebar_entry(char *box, int size, int new, int flagged)
|
||||
{
|
||||
- static char *entry = 0;
|
||||
- char *c;
|
||||
- int i = 0;
|
||||
- int delim_len = strlen(SidebarDelim);
|
||||
-
|
||||
- c = realloc(entry, SidebarWidth - delim_len + 2);
|
||||
- if ( c ) entry = c;
|
||||
- entry[SidebarWidth - delim_len + 1] = 0;
|
||||
- for (; i < SidebarWidth - delim_len + 1; entry[i++] = ' ' );
|
||||
- i = strlen(box);
|
||||
- strncpy( entry, box, i < (SidebarWidth - delim_len + 1) ? i : (SidebarWidth - delim_len + 1) );
|
||||
-
|
||||
- if (size == -1)
|
||||
- sprintf(entry + SidebarWidth - delim_len - 3, "?");
|
||||
- else if ( new ) {
|
||||
- if (flagged > 0) {
|
||||
- sprintf(
|
||||
- entry + SidebarWidth - delim_len - 5 - quick_log10(size) - quick_log10(new) - quick_log10(flagged),
|
||||
- "% d(%d)[%d]", size, new, flagged);
|
||||
- } else {
|
||||
- sprintf(
|
||||
- entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(new),
|
||||
- "% d(%d)", size, new);
|
||||
- }
|
||||
- } else if (flagged > 0) {
|
||||
- sprintf( entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(flagged), "% d[%d]", size, flagged);
|
||||
- } else {
|
||||
- sprintf( entry + SidebarWidth - delim_len - 1 - quick_log10(size), "% d", size);
|
||||
- }
|
||||
- return entry;
|
||||
+ char int_store[20]; // up to 64 bits integers
|
||||
+ int right_width, left_width;
|
||||
+ int box_len, box_bytes;
|
||||
+ int int_len;
|
||||
+ int right_offset = 0;
|
||||
+ int delim_len = strlen(SidebarDelim);
|
||||
+ static char *entry;
|
||||
+
|
||||
+ right_width = left_width = 0;
|
||||
+ box_len = box_bytes = 0;
|
||||
+
|
||||
+ // allocate an entry big enough to contain SidebarWidth wide chars
|
||||
+ entry = malloc((SidebarWidth*4)+1); // TODO: error check
|
||||
+
|
||||
+ // determine the right space (i.e.: how big are the numbers that we want to print)
|
||||
+ if ( size > 0 ) {
|
||||
+ int_len = snprintf(int_store, sizeof(int_store), "%d", size);
|
||||
+ right_width += int_len;
|
||||
+ } else {
|
||||
+ right_width = 1; // to represent 0
|
||||
+ }
|
||||
+ if ( new > 0 ) {
|
||||
+ int_len = snprintf(int_store, sizeof(int_store), "%d", new);
|
||||
+ right_width += int_len + 2; // 2 is for ()
|
||||
+ }
|
||||
+ if ( flagged > 0 ) {
|
||||
+ int_len = snprintf(int_store, sizeof(int_store), "%d", flagged);
|
||||
+ right_width += int_len + 2; // 2 is for []
|
||||
+ }
|
||||
+
|
||||
+ // determine how much space we have for *box and its padding (if any)
|
||||
+ left_width = SidebarWidth - right_width - 1 - delim_len; // 1 is for the space
|
||||
+ //fprintf(stdout, "left_width: %d right_width: %d\n", left_width, right_width);
|
||||
+ // right side overflow case
|
||||
+ if ( left_width <= 0 ) {
|
||||
+ snprintf(entry, SidebarWidth*4, "%-*.*s ...", SidebarWidth-4-delim_len, SidebarWidth-4-delim_len, box);
|
||||
+ return entry;
|
||||
+ }
|
||||
+ right_width -= delim_len;
|
||||
+
|
||||
+ // to support utf-8 chars we need to add enough space padding in case there
|
||||
+ // are less chars than bytes in *box
|
||||
+ box_len = mbstowcs(NULL, box, 0);
|
||||
+ box_bytes = strlen(box);
|
||||
+ // debug
|
||||
+ //fprintf(stdout, "box_len: %d box_bytes: %d (diff: %d)\n", box_len, box_bytes, (box_bytes-box_len));
|
||||
+ // if there is less string than the space we allow, then we will add the
|
||||
+ // spaces
|
||||
+ if ( box_len != -1 && box_len < left_width ) {
|
||||
+ left_width += (box_bytes - box_len);
|
||||
+ }
|
||||
+ // otherwise sprintf will truncate the string for us (therefore, no else case)
|
||||
+
|
||||
+ // print the sidebar entry (without new and flagged messages, at the moment)
|
||||
+ //fprintf(stdout, "left_width: %d right_width: %d\n", left_width, right_width);
|
||||
+ right_offset = snprintf(entry, SidebarWidth*4, "%-*.*s %d", left_width, left_width, box, size);
|
||||
+
|
||||
+ // then pad new and flagged messages if any
|
||||
+ if ( new > 0 ) {
|
||||
+ right_offset += snprintf(entry+right_offset, SidebarWidth*4-right_offset, "(%d)", new);
|
||||
+ }
|
||||
+ if ( flagged > 0 ) {
|
||||
+ right_offset += snprintf(entry+right_offset, SidebarWidth*4-right_offset, "[%d]", flagged);
|
||||
+ }
|
||||
+
|
||||
+ return entry;
|
||||
}
|
||||
|
||||
void set_curbuffy(char buf[LONG_STRING])
|
File diff suppressed because it is too large
Load Diff
@ -1,316 +0,0 @@
|
||||
From: Cedric Duval <cedricduval@free.fr>
|
||||
Date: Thu, 27 Feb 2014 12:27:41 +0100
|
||||
Subject: trash-folder
|
||||
|
||||
With this patch, if the trash variable is set to a path (unset by default), the
|
||||
deleted mails will be moved to a trash folder instead of being irremediably
|
||||
purged when syncing the mailbox.
|
||||
|
||||
For instance, set trash="~/Mail/trash" will cause every deleted mail to go to
|
||||
this folder.
|
||||
|
||||
Note that the append to the trash folder doesn't occur until the resync is
|
||||
done. This allows you to change your mind and undo deletes, and thus the moves
|
||||
to the trash folder are unnecessary.
|
||||
|
||||
Notes
|
||||
|
||||
* You might also want to have a look at the purge message feature below
|
||||
which is related to this patch.
|
||||
* IMAP is now supported. To retain the previous behavior, add this to your
|
||||
muttrc:
|
||||
folder-hook ^imap:// 'unset trash'
|
||||
|
||||
FAQ
|
||||
|
||||
Every once in a while, someone asks what are the advantages of this patch over
|
||||
a macro based solution. Here's an attempt to answer this question:
|
||||
|
||||
* The folder history doesn't clutter up with unwanted trash entries.
|
||||
* Delayed move to the trash allows to change one's mind.
|
||||
* No need to treat the case of "normal folders" and trash folders
|
||||
separately with folder-hooks, and to create two sets of macros (one for
|
||||
the index, one for the pager).
|
||||
* Works not only with delete-message, but also with every deletion
|
||||
functions like delete-pattern, delete-thread or delete-subthread.
|
||||
|
||||
To sum up, it's more integrated and transparent to the user.
|
||||
|
||||
* Patch last synced with upstream:
|
||||
- Date: 2007-02-15
|
||||
- File: http://cedricduval.free.fr/mutt/patches/download/patch-1.5.5.1.cd.trash_folder.3.4
|
||||
|
||||
* Changes made:
|
||||
- Updated to 1.5.13:
|
||||
- structure of _mutt_save_message changed (commands.c)
|
||||
- context of option (OPTCONFIRMAPPEND) changed (muttlib.c)
|
||||
- Fixed indentation of "appended" in mutt.h.
|
||||
|
||||
Signed-off-by: Matteo F. Vescovi <mfvescovi@gmail.com>
|
||||
|
||||
Gbp-Pq: Topic features
|
||||
---
|
||||
commands.c | 1 +
|
||||
flags.c | 19 +++++++++++++++++-
|
||||
globals.h | 1 +
|
||||
imap/message.c | 2 ++
|
||||
init.h | 10 ++++++++++
|
||||
mutt.h | 3 +++
|
||||
muttlib.c | 4 +++-
|
||||
mx.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
postpone.c | 3 +++
|
||||
9 files changed, 103 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/commands.c b/commands.c
|
||||
index 5dbd100..7fd014b 100644
|
||||
--- a/commands.c
|
||||
+++ b/commands.c
|
||||
@@ -720,6 +720,7 @@ int _mutt_save_message (HEADER *h, CONTEXT *ctx, int delete, int decode, int dec
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_set_flag (Context, h, M_TAG, 0);
|
||||
}
|
||||
+ mutt_set_flag (Context, h, M_APPENDED, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/flags.c b/flags.c
|
||||
index f0f3d81..dfa6a50 100644
|
||||
--- a/flags.c
|
||||
+++ b/flags.c
|
||||
@@ -65,7 +65,13 @@ void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx)
|
||||
{
|
||||
h->deleted = 0;
|
||||
update = 1;
|
||||
- if (upd_ctx) ctx->deleted--;
|
||||
+ if (upd_ctx)
|
||||
+ {
|
||||
+ ctx->deleted--;
|
||||
+ if (h->appended)
|
||||
+ ctx->appended--;
|
||||
+ }
|
||||
+ h->appended = 0; /* when undeleting, also reset the appended flag */
|
||||
#ifdef USE_IMAP
|
||||
/* see my comment above */
|
||||
if (ctx->magic == M_IMAP)
|
||||
@@ -87,6 +93,17 @@ void _mutt_set_flag (CONTEXT *ctx, HEADER *h, int flag, int bf, int upd_ctx)
|
||||
}
|
||||
break;
|
||||
|
||||
+ case M_APPENDED:
|
||||
+ if (bf)
|
||||
+ {
|
||||
+ if (!h->appended)
|
||||
+ {
|
||||
+ h->appended = 1;
|
||||
+ if (upd_ctx) ctx->appended++;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
case M_NEW:
|
||||
|
||||
if (!mutt_bit_isset(ctx->rights,M_ACL_SEEN))
|
||||
diff --git a/globals.h b/globals.h
|
||||
index e77030c..6a1b8da 100644
|
||||
--- a/globals.h
|
||||
+++ b/globals.h
|
||||
@@ -144,6 +144,7 @@ WHERE char *Tochars;
|
||||
WHERE char *TSStatusFormat;
|
||||
WHERE char *TSIconFormat;
|
||||
WHERE short TSSupported;
|
||||
+WHERE char *TrashPath;
|
||||
WHERE char *Username;
|
||||
WHERE char *Visual;
|
||||
|
||||
diff --git a/imap/message.c b/imap/message.c
|
||||
index 3877381..039fda6 100644
|
||||
--- a/imap/message.c
|
||||
+++ b/imap/message.c
|
||||
@@ -884,6 +884,7 @@ int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete)
|
||||
if (ctx->hdrs[n]->tagged)
|
||||
{
|
||||
mutt_set_flag (ctx, ctx->hdrs[n], M_DELETE, 1);
|
||||
+ mutt_set_flag (ctx, ctx->hdrs[n], M_APPENDED, 1);
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_set_flag (ctx, ctx->hdrs[n], M_TAG, 0);
|
||||
}
|
||||
@@ -891,6 +892,7 @@ int imap_copy_messages (CONTEXT* ctx, HEADER* h, char* dest, int delete)
|
||||
else
|
||||
{
|
||||
mutt_set_flag (ctx, h, M_DELETE, 1);
|
||||
+ mutt_set_flag (ctx, h, M_APPENDED, 1);
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_set_flag (ctx, h, M_TAG, 0);
|
||||
}
|
||||
diff --git a/init.h b/init.h
|
||||
index 6b49341..d3206f9 100644
|
||||
--- a/init.h
|
||||
+++ b/init.h
|
||||
@@ -3341,6 +3341,16 @@ struct option_t MuttVars[] = {
|
||||
** provided that ``$$ts_enabled'' has been set. This string is identical in
|
||||
** formatting to the one used by ``$$status_format''.
|
||||
*/
|
||||
+ { "trash", DT_PATH, R_NONE, UL &TrashPath, 0 },
|
||||
+ /*
|
||||
+ ** .pp
|
||||
+ ** If set, this variable specifies the path of the trash folder where the
|
||||
+ ** mails marked for deletion will be moved, instead of being irremediably
|
||||
+ ** purged.
|
||||
+ ** .pp
|
||||
+ ** NOTE: When you delete a message in the trash folder, it is really
|
||||
+ ** deleted, so that you have a way to clean the trash.
|
||||
+ */
|
||||
#ifdef USE_SOCKET
|
||||
{ "tunnel", DT_STR, R_NONE, UL &Tunnel, UL 0 },
|
||||
/*
|
||||
diff --git a/mutt.h b/mutt.h
|
||||
index f8565fa..29bb6c2 100644
|
||||
--- a/mutt.h
|
||||
+++ b/mutt.h
|
||||
@@ -185,6 +185,7 @@ enum
|
||||
M_DELETE,
|
||||
M_UNDELETE,
|
||||
M_DELETED,
|
||||
+ M_APPENDED,
|
||||
M_FLAG,
|
||||
M_TAG,
|
||||
M_UNTAG,
|
||||
@@ -713,6 +714,7 @@ typedef struct header
|
||||
unsigned int mime : 1; /* has a MIME-Version header? */
|
||||
unsigned int flagged : 1; /* marked important? */
|
||||
unsigned int tagged : 1;
|
||||
+ unsigned int appended : 1; /* has been saved */
|
||||
unsigned int deleted : 1;
|
||||
unsigned int changed : 1;
|
||||
unsigned int attach_del : 1; /* has an attachment marked for deletion */
|
||||
@@ -885,6 +887,7 @@ typedef struct _context
|
||||
int new; /* how many new messages? */
|
||||
int unread; /* how many unread messages? */
|
||||
int deleted; /* how many deleted messages */
|
||||
+ int appended; /* how many saved messages? */
|
||||
int flagged; /* how many flagged messages */
|
||||
int msgnotreadyet; /* which msg "new" in pager, -1 if none */
|
||||
|
||||
diff --git a/muttlib.c b/muttlib.c
|
||||
index 02067cc..0fd9766 100644
|
||||
--- a/muttlib.c
|
||||
+++ b/muttlib.c
|
||||
@@ -1505,7 +1505,9 @@ int mutt_save_confirm (const char *s, struct stat *st)
|
||||
|
||||
if (magic > 0 && !mx_access (s, W_OK))
|
||||
{
|
||||
- if (option (OPTCONFIRMAPPEND))
|
||||
+ if (option (OPTCONFIRMAPPEND) &&
|
||||
+ (!TrashPath || (mutt_strcmp (s, TrashPath) != 0)))
|
||||
+ /* if we're appending to the trash, there's no point in asking */
|
||||
{
|
||||
snprintf (tmp, sizeof (tmp), _("Append messages to %s?"), s);
|
||||
if ((rc = mutt_yesorno (tmp, M_YES)) == M_NO)
|
||||
diff --git a/mx.c b/mx.c
|
||||
index 4c5cb07..c0a6d30 100644
|
||||
--- a/mx.c
|
||||
+++ b/mx.c
|
||||
@@ -776,6 +776,53 @@ static int sync_mailbox (CONTEXT *ctx, int *index_hint)
|
||||
return rc;
|
||||
}
|
||||
|
||||
+/* move deleted mails to the trash folder */
|
||||
+static int trash_append (CONTEXT *ctx)
|
||||
+{
|
||||
+ CONTEXT *ctx_trash;
|
||||
+ int i = 0;
|
||||
+ struct stat st, stc;
|
||||
+
|
||||
+ if (!TrashPath || !ctx->deleted ||
|
||||
+ (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH)))
|
||||
+ return 0;
|
||||
+
|
||||
+ for (;i < ctx->msgcount && (!ctx->hdrs[i]->deleted ||
|
||||
+ ctx->hdrs[i]->appended); i++);
|
||||
+ if (i == ctx->msgcount)
|
||||
+ return 0; /* nothing to be done */
|
||||
+
|
||||
+ if (mutt_save_confirm (TrashPath, &st) != 0)
|
||||
+ {
|
||||
+ mutt_error _("message(s) not deleted");
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (lstat (ctx->path, &stc) == 0 && stc.st_ino == st.st_ino
|
||||
+ && stc.st_dev == st.st_dev && stc.st_rdev == st.st_rdev)
|
||||
+ return 0; /* we are in the trash folder: simple sync */
|
||||
+
|
||||
+ if ((ctx_trash = mx_open_mailbox (TrashPath, M_APPEND, NULL)) != NULL)
|
||||
+ {
|
||||
+ for (i = 0 ; i < ctx->msgcount ; i++)
|
||||
+ if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->appended
|
||||
+ && mutt_append_message (ctx_trash, ctx, ctx->hdrs[i], 0, 0) == -1)
|
||||
+ {
|
||||
+ mx_close_mailbox (ctx_trash, NULL);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ mx_close_mailbox (ctx_trash, NULL);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ mutt_error _("Can't open trash folder");
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/* save changes and close mailbox */
|
||||
int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
|
||||
{
|
||||
@@ -912,6 +959,7 @@ int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
|
||||
if (mutt_append_message (&f, ctx, ctx->hdrs[i], 0, CH_UPDATE_LEN) == 0)
|
||||
{
|
||||
mutt_set_flag (ctx, ctx->hdrs[i], M_DELETE, 1);
|
||||
+ mutt_set_flag (ctx, ctx->hdrs[i], M_APPENDED, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -936,6 +984,14 @@ int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ /* copy mails to the trash before expunging */
|
||||
+ if (purge && ctx->deleted && mutt_strcmp(ctx->path, TrashPath))
|
||||
+ if (trash_append (ctx) != 0)
|
||||
+ {
|
||||
+ ctx->closing = 0;
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
#ifdef USE_IMAP
|
||||
/* allow IMAP to preserve the deleted flag across sessions */
|
||||
if (ctx->magic == M_IMAP)
|
||||
@@ -1133,6 +1189,12 @@ int mx_sync_mailbox (CONTEXT *ctx, int *index_hint)
|
||||
msgcount = ctx->msgcount;
|
||||
deleted = ctx->deleted;
|
||||
|
||||
+ if (purge && ctx->deleted && mutt_strcmp(ctx->path, TrashPath))
|
||||
+ {
|
||||
+ if (trash_append (ctx) == -1)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
#ifdef USE_IMAP
|
||||
if (ctx->magic == M_IMAP)
|
||||
rc = imap_sync_mailbox (ctx, purge, index_hint);
|
||||
diff --git a/postpone.c b/postpone.c
|
||||
index a703161..7a4cbb1 100644
|
||||
--- a/postpone.c
|
||||
+++ b/postpone.c
|
||||
@@ -277,6 +277,9 @@ int mutt_get_postponed (CONTEXT *ctx, HEADER *hdr, HEADER **cur, char *fcc, size
|
||||
/* finished with this message, so delete it. */
|
||||
mutt_set_flag (PostContext, h, M_DELETE, 1);
|
||||
|
||||
+ /* and consider it saved, so that it won't be moved to the trash folder */
|
||||
+ mutt_set_flag (PostContext, h, M_APPENDED, 1);
|
||||
+
|
||||
/* update the count for the status display */
|
||||
PostCount = PostContext->msgcount - PostContext->deleted;
|
||||
|
797
pkgs/applications/networking/mailreaders/mutt/trash.patch
Normal file
797
pkgs/applications/networking/mailreaders/mutt/trash.patch
Normal file
@ -0,0 +1,797 @@
|
||||
diff -urN mutt-1.6.1/commands.c mutt-1.6.1-trash/commands.c
|
||||
--- mutt-1.6.1/commands.c 2016-06-12 18:43:00.397447512 +0100
|
||||
+++ mutt-1.6.1-trash/commands.c 2016-06-12 18:43:04.892517610 +0100
|
||||
@@ -720,6 +720,7 @@
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_set_flag (Context, h, M_TAG, 0);
|
||||
}
|
||||
+ mutt_set_flag (Context, h, M_APPENDED, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff -urN mutt-1.6.1/curs_main.c mutt-1.6.1-trash/curs_main.c
|
||||
--- mutt-1.6.1/curs_main.c 2016-06-12 18:43:00.399447544 +0100
|
||||
+++ mutt-1.6.1-trash/curs_main.c 2016-06-12 18:43:04.895517656 +0100
|
||||
@@ -1919,6 +1919,7 @@
|
||||
MAYBE_REDRAW (menu->redraw);
|
||||
break;
|
||||
|
||||
+ case OP_PURGE_MESSAGE:
|
||||
case OP_DELETE:
|
||||
|
||||
CHECK_MSGCOUNT;
|
||||
@@ -1930,6 +1931,7 @@
|
||||
if (tag)
|
||||
{
|
||||
mutt_tag_set_flag (M_DELETE, 1);
|
||||
+ mutt_tag_set_flag (M_PURGED, (op != OP_PURGE_MESSAGE) ? 0 : 1);
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_tag_set_flag (M_TAG, 0);
|
||||
menu->redraw = REDRAW_INDEX;
|
||||
@@ -1937,6 +1939,8 @@
|
||||
else
|
||||
{
|
||||
mutt_set_flag (Context, CURHDR, M_DELETE, 1);
|
||||
+ mutt_set_flag (Context, CURHDR, M_PURGED,
|
||||
+ (op != OP_PURGE_MESSAGE) ? 0 : 1);
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_set_flag (Context, CURHDR, M_TAG, 0);
|
||||
if (option (OPTRESOLVE))
|
||||
@@ -2242,11 +2246,13 @@
|
||||
if (tag)
|
||||
{
|
||||
mutt_tag_set_flag (M_DELETE, 0);
|
||||
+ mutt_tag_set_flag (M_PURGED, 0);
|
||||
menu->redraw = REDRAW_INDEX;
|
||||
}
|
||||
else
|
||||
{
|
||||
mutt_set_flag (Context, CURHDR, M_DELETE, 0);
|
||||
+ mutt_set_flag (Context, CURHDR, M_PURGED, 0);
|
||||
if (option (OPTRESOLVE) && menu->current < Context->vcount - 1)
|
||||
{
|
||||
menu->current++;
|
||||
@@ -2268,9 +2274,11 @@
|
||||
CHECK_ACL(M_ACL_DELETE, _("Cannot undelete message(s)"));
|
||||
|
||||
rc = mutt_thread_set_flag (CURHDR, M_DELETE, 0,
|
||||
- op == OP_UNDELETE_THREAD ? 0 : 1);
|
||||
+ op == OP_UNDELETE_THREAD ? 0 : 1)
|
||||
+ + mutt_thread_set_flag (CURHDR, M_PURGED, 0,
|
||||
+ (op == OP_UNDELETE_THREAD) ? 0 : 1);
|
||||
|
||||
- if (rc != -1)
|
||||
+ if (rc > -1)
|
||||
{
|
||||
if (option (OPTRESOLVE))
|
||||
{
|
||||
diff -urN mutt-1.6.1/doc/manual.xml.head mutt-1.6.1-trash/doc/manual.xml.head
|
||||
--- mutt-1.6.1/doc/manual.xml.head 2016-06-12 18:43:00.402447590 +0100
|
||||
+++ mutt-1.6.1-trash/doc/manual.xml.head 2016-06-12 18:43:04.901517750 +0100
|
||||
@@ -7467,6 +7467,16 @@
|
||||
|
||||
</sect2>
|
||||
|
||||
+<sect2 id="mutt-patches">
|
||||
+<title>Mutt Patches</title>
|
||||
+<para>
|
||||
+Mutt may also be <quote>patched</quote> to support smaller features.
|
||||
+These patches should add a free-form string to the end Mutt's version string.
|
||||
+Running <literal>mutt -v</literal> might show:
|
||||
+<screen>patch-1.6.1.sidebar.20160502</screen>
|
||||
+</para>
|
||||
+</sect2>
|
||||
+
|
||||
<sect2 id="url-syntax">
|
||||
<title>URL Syntax</title>
|
||||
|
||||
@@ -8081,6 +8091,175 @@
|
||||
|
||||
</sect1>
|
||||
|
||||
+<sect1 id="trash-folder">
|
||||
+ <title>Trash Folder Patch</title>
|
||||
+ <subtitle>Automatically move "deleted" emails to a trash bin</subtitle>
|
||||
+
|
||||
+ <sect2 id="trash-folder-patch">
|
||||
+ <title>Patch</title>
|
||||
+
|
||||
+ <para>
|
||||
+ To check if Mutt supports <quote>Trash Folder</quote>, look for
|
||||
+ <quote>patch-trash</quote> in the mutt version.
|
||||
+ See: <xref linkend="mutt-patches"/>.
|
||||
+ </para>
|
||||
+
|
||||
+ If IMAP is enabled, this patch will use it
|
||||
+
|
||||
+ <itemizedlist>
|
||||
+ <title>Dependencies:</title>
|
||||
+ <listitem><para>mutt-1.6.1</para></listitem>
|
||||
+ <listitem><para>IMAP support</para></listitem>
|
||||
+ </itemizedlist>
|
||||
+
|
||||
+ <para>This patch is part of the <ulink url="http://www.neomutt.org/">NeoMutt Project</ulink>.</para>
|
||||
+ </sect2>
|
||||
+
|
||||
+ <sect2 id="trash-folder-intro">
|
||||
+ <title>Introduction</title>
|
||||
+
|
||||
+ <para>
|
||||
+ In Mutt, when you <quote>delete</quote> an email it is first marked
|
||||
+ deleted. The email isn't really gone until
|
||||
+ <link linkend="index-map"><sync-mailbox></link> is called.
|
||||
+ This happens when the user leaves the folder, or the function is called
|
||||
+ manually.
|
||||
+ </para>
|
||||
+
|
||||
+ <para>
|
||||
+ After <literal><sync-mailbox></literal> has been called the email is gone forever.
|
||||
+ </para>
|
||||
+
|
||||
+ <para>
|
||||
+ The <link linkend="trash">$trash</link> variable defines a folder in
|
||||
+ which to keep old emails. As before, first you mark emails for
|
||||
+ deletion. When <sync-mailbox> is called the emails are moved to
|
||||
+ the trash folder.
|
||||
+ </para>
|
||||
+
|
||||
+ <para>
|
||||
+ The <literal>$trash</literal> path can be either a full directory,
|
||||
+ or be relative to the <link linkend="folder">$folder</link>
|
||||
+ variable, like the <literal>mailboxes</literal> command.
|
||||
+ </para>
|
||||
+
|
||||
+ <note>
|
||||
+ Emails deleted from the trash folder are gone forever.
|
||||
+ </note>
|
||||
+ </sect2>
|
||||
+
|
||||
+ <sect2 id="trash-folder-variables">
|
||||
+ <title>Variables</title>
|
||||
+ <table id="table-trash-variables">
|
||||
+ <title>Trash Variables</title>
|
||||
+ <tgroup cols="3">
|
||||
+ <thead>
|
||||
+ <row>
|
||||
+ <entry>Name</entry>
|
||||
+ <entry>Type</entry>
|
||||
+ <entry>Default</entry>
|
||||
+ </row>
|
||||
+ </thead>
|
||||
+ <tbody>
|
||||
+ <row>
|
||||
+ <entry>trash</entry>
|
||||
+ <entry>string</entry>
|
||||
+ <entry>(none)</entry>
|
||||
+ </row>
|
||||
+ </tbody>
|
||||
+ </tgroup>
|
||||
+ </table>
|
||||
+ </sect2>
|
||||
+
|
||||
+ <sect2 id="trash-folder-functions">
|
||||
+ <title>Functions</title>
|
||||
+ <table id="table-trash-functions">
|
||||
+ <title>Trash Functions</title>
|
||||
+ <tgroup cols="4">
|
||||
+ <thead>
|
||||
+ <row>
|
||||
+ <entry>Menus</entry>
|
||||
+ <entry>Default Key</entry>
|
||||
+ <entry>Function</entry>
|
||||
+ <entry>Description</entry>
|
||||
+ </row>
|
||||
+ </thead>
|
||||
+ <tbody>
|
||||
+ <row>
|
||||
+ <entry>index,pager</entry>
|
||||
+ <entry>(none)</entry>
|
||||
+ <entry><literal><purge-message></literal></entry>
|
||||
+ <entry>really delete the current entry, bypassing the trash folder</entry>
|
||||
+ </row>
|
||||
+ </tbody>
|
||||
+ </tgroup>
|
||||
+ </table>
|
||||
+ </sect2>
|
||||
+
|
||||
+<!--
|
||||
+ <sect2 id="trash-folder-commands">
|
||||
+ <title>Commands</title>
|
||||
+ <para>None</para>
|
||||
+ </sect2>
|
||||
+
|
||||
+ <sect2 id="trash-folder-colors">
|
||||
+ <title>Colors</title>
|
||||
+ <para>None</para>
|
||||
+ </sect2>
|
||||
+
|
||||
+ <sect2 id="trash-folder-sort">
|
||||
+ <title>Sort</title>
|
||||
+ <para>None</para>
|
||||
+ </sect2>
|
||||
+-->
|
||||
+
|
||||
+ <sect2 id="trash-folder-muttrc">
|
||||
+ <title>Muttrc</title>
|
||||
+<screen>
|
||||
+<emphasis role="comment"># Example Mutt config file for the 'trash' feature.
|
||||
+
|
||||
+# This feature defines a new 'trash' folder.
|
||||
+# When mail is deleted it will be moved to this folder.
|
||||
+
|
||||
+# Folder in which to put deleted emails</emphasis>
|
||||
+set trash='+Trash'
|
||||
+set trash='/home/flatcap/Mail/Trash'
|
||||
+
|
||||
+<emphasis role="comment"># The default delete key 'd' will move an email to the 'trash' folder
|
||||
+# Bind 'D' to REALLY delete an email</emphasis>
|
||||
+bind index D purge-message
|
||||
+
|
||||
+<emphasis role="comment"># Note: Deleting emails from the 'trash' folder will REALLY delete them.
|
||||
+
|
||||
+# vim: syntax=muttrc</emphasis>
|
||||
+</screen>
|
||||
+ </sect2>
|
||||
+
|
||||
+ <sect2 id="trash-folder-see-also">
|
||||
+ <title>See Also</title>
|
||||
+
|
||||
+ <itemizedlist>
|
||||
+ <listitem><para><ulink url="http://www.neomutt.org/">NeoMutt Project</ulink></para></listitem>
|
||||
+ <listitem><para><link linkend="folder-hook">folder-hook</link></para></listitem>
|
||||
+ </itemizedlist>
|
||||
+ </sect2>
|
||||
+
|
||||
+ <sect2 id="trash-folder-known-bugs">
|
||||
+ <title>Known Bugs</title>
|
||||
+ <para>None</para>
|
||||
+ </sect2>
|
||||
+
|
||||
+ <sect2 id="trash-folder-credits">
|
||||
+ <title>Credits</title>
|
||||
+ <itemizedlist>
|
||||
+ <listitem><para>Cedric Duval <email>cedricduval@free.fr</email></para></listitem>
|
||||
+ <listitem><para>Benjamin Kuperman <email>kuperman@acm.org</email></para></listitem>
|
||||
+ <listitem><para>Paul Miller <email>paul@voltar.org</email></para></listitem>
|
||||
+ <listitem><para>Richard Russon <email>rich@flatcap.org</email></para></listitem>
|
||||
+ </itemizedlist>
|
||||
+ </sect2>
|
||||
+</sect1>
|
||||
+
|
||||
</chapter>
|
||||
|
||||
<chapter id="security">
|
||||
diff -urN mutt-1.6.1/doc/muttrc.trash mutt-1.6.1-trash/doc/muttrc.trash
|
||||
--- mutt-1.6.1/doc/muttrc.trash 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ mutt-1.6.1-trash/doc/muttrc.trash 2016-06-12 18:43:04.768515676 +0100
|
||||
@@ -0,0 +1,16 @@
|
||||
+# Example Mutt config file for the 'trash' feature.
|
||||
+
|
||||
+# This feature defines a new 'trash' folder.
|
||||
+# When mail is deleted it will be moved to this folder.
|
||||
+
|
||||
+# Folder in which to put deleted emails
|
||||
+set trash='+Trash'
|
||||
+set trash='/home/flatcap/Mail/Trash'
|
||||
+
|
||||
+# The default delete key 'd' will move an email to the 'trash' folder
|
||||
+# Bind 'D' to REALLY delete an email
|
||||
+bind index D purge-message
|
||||
+
|
||||
+# Note: Deleting emails from the 'trash' folder will REALLY delete them.
|
||||
+
|
||||
+# vim: syntax=muttrc
|
||||
diff -urN mutt-1.6.1/doc/vimrc.trash mutt-1.6.1-trash/doc/vimrc.trash
|
||||
--- mutt-1.6.1/doc/vimrc.trash 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ mutt-1.6.1-trash/doc/vimrc.trash 2016-06-12 18:43:04.769515692 +0100
|
||||
@@ -0,0 +1,7 @@
|
||||
+" Vim syntax file for the mutt trash patch
|
||||
+
|
||||
+syntax keyword muttrcVarStr contained skipwhite trash nextgroup=muttrcVarEqualsIdxFmt
|
||||
+
|
||||
+syntax match muttrcFunction contained "\<purge-message\>"
|
||||
+
|
||||
+" vim: syntax=vim
|
||||
diff -urN mutt-1.6.1/flags.c mutt-1.6.1-trash/flags.c
|
||||
--- mutt-1.6.1/flags.c 2016-06-12 18:43:00.403447606 +0100
|
||||
+++ mutt-1.6.1-trash/flags.c 2016-06-12 18:43:04.902517766 +0100
|
||||
@@ -65,7 +65,13 @@
|
||||
{
|
||||
h->deleted = 0;
|
||||
update = 1;
|
||||
- if (upd_ctx) ctx->deleted--;
|
||||
+ if (upd_ctx) {
|
||||
+ ctx->deleted--;
|
||||
+ if (h->appended) {
|
||||
+ ctx->appended--;
|
||||
+ }
|
||||
+ }
|
||||
+ h->appended = 0; /* when undeleting, also reset the appended flag */
|
||||
#ifdef USE_IMAP
|
||||
/* see my comment above */
|
||||
if (ctx->magic == M_IMAP)
|
||||
@@ -87,6 +93,27 @@
|
||||
}
|
||||
break;
|
||||
|
||||
+ case M_APPENDED:
|
||||
+ if (bf) {
|
||||
+ if (!h->appended) {
|
||||
+ h->appended = 1;
|
||||
+ if (upd_ctx) {
|
||||
+ ctx->appended++;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case M_PURGED:
|
||||
+ if (bf) {
|
||||
+ if (!h->purged) {
|
||||
+ h->purged = 1;
|
||||
+ }
|
||||
+ } else if (h->purged) {
|
||||
+ h->purged = 0;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
case M_NEW:
|
||||
|
||||
if (!mutt_bit_isset(ctx->rights,M_ACL_SEEN))
|
||||
diff -urN mutt-1.6.1/functions.h mutt-1.6.1-trash/functions.h
|
||||
--- mutt-1.6.1/functions.h 2016-06-12 18:43:00.403447606 +0100
|
||||
+++ mutt-1.6.1-trash/functions.h 2016-06-12 18:43:04.902517766 +0100
|
||||
@@ -121,6 +121,7 @@
|
||||
{ "toggle-write", OP_TOGGLE_WRITE, "%" },
|
||||
{ "next-thread", OP_MAIN_NEXT_THREAD, "\016" },
|
||||
{ "next-subthread", OP_MAIN_NEXT_SUBTHREAD, "\033n" },
|
||||
+ { "purge-message", OP_PURGE_MESSAGE, NULL },
|
||||
{ "query", OP_QUERY, "Q" },
|
||||
{ "quit", OP_QUIT, "q" },
|
||||
{ "reply", OP_REPLY, "r" },
|
||||
@@ -213,6 +214,7 @@
|
||||
{ "print-message", OP_PRINT, "p" },
|
||||
{ "previous-thread", OP_MAIN_PREV_THREAD, "\020" },
|
||||
{ "previous-subthread",OP_MAIN_PREV_SUBTHREAD, "\033p" },
|
||||
+ { "purge-message", OP_PURGE_MESSAGE, NULL },
|
||||
{ "quit", OP_QUIT, "Q" },
|
||||
{ "exit", OP_EXIT, "q" },
|
||||
{ "reply", OP_REPLY, "r" },
|
||||
diff -urN mutt-1.6.1/globals.h mutt-1.6.1-trash/globals.h
|
||||
--- mutt-1.6.1/globals.h 2016-06-12 18:43:00.403447606 +0100
|
||||
+++ mutt-1.6.1-trash/globals.h 2016-06-12 18:43:04.903517781 +0100
|
||||
@@ -141,6 +141,7 @@
|
||||
WHERE char *Status;
|
||||
WHERE char *Tempdir;
|
||||
WHERE char *Tochars;
|
||||
+WHERE char *TrashPath;
|
||||
WHERE char *TSStatusFormat;
|
||||
WHERE char *TSIconFormat;
|
||||
WHERE short TSSupported;
|
||||
diff -urN mutt-1.6.1/imap/imap.c mutt-1.6.1-trash/imap/imap.c
|
||||
--- mutt-1.6.1/imap/imap.c 2016-06-12 18:43:00.405447637 +0100
|
||||
+++ mutt-1.6.1-trash/imap/imap.c 2016-06-12 18:43:04.905517812 +0100
|
||||
@@ -888,6 +888,12 @@
|
||||
if (hdrs[n]->deleted != HEADER_DATA(hdrs[n])->deleted)
|
||||
match = invert ^ hdrs[n]->deleted;
|
||||
break;
|
||||
+ case M_EXPIRED: /* imap_fast_trash version of M_DELETED */
|
||||
+ if (hdrs[n]->purged)
|
||||
+ break;
|
||||
+ if (hdrs[n]->deleted != HEADER_DATA(hdrs[n])->deleted)
|
||||
+ match = invert ^ (hdrs[n]->deleted && !hdrs[n]->appended);
|
||||
+ break;
|
||||
case M_FLAG:
|
||||
if (hdrs[n]->flagged != HEADER_DATA(hdrs[n])->flagged)
|
||||
match = invert ^ hdrs[n]->flagged;
|
||||
@@ -2038,3 +2044,53 @@
|
||||
|
||||
return -1;
|
||||
}
|
||||
+
|
||||
+/**
|
||||
+ * imap_fast_trash - XXX
|
||||
+ */
|
||||
+int
|
||||
+imap_fast_trash (void)
|
||||
+{
|
||||
+ if ((Context->magic == M_IMAP) && mx_is_imap (TrashPath)) {
|
||||
+ IMAP_MBOX mx;
|
||||
+ IMAP_DATA *idata = (IMAP_DATA *) Context->data;
|
||||
+ char mbox[LONG_STRING];
|
||||
+ char mmbox[LONG_STRING];
|
||||
+ int rc;
|
||||
+ dprint (1, (debugfile, "[itf] trashcan seems to be on imap.\n"));
|
||||
+
|
||||
+ if (imap_parse_path (TrashPath, &mx) == 0) {
|
||||
+ if (mutt_account_match (&(idata->conn->account), &(mx.account))) {
|
||||
+ dprint (1, (debugfile, "[itf] trashcan seems to be on the same account.\n"));
|
||||
+
|
||||
+ imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox));
|
||||
+ if (!*mbox)
|
||||
+ strfcpy (mbox, "INBOX", sizeof (mbox));
|
||||
+ imap_munge_mbox_name (idata, mmbox, sizeof (mmbox), mbox);
|
||||
+
|
||||
+ rc = imap_exec_msgset (idata, "UID COPY", mmbox, M_EXPIRED, 0, 0);
|
||||
+ if (rc == 0) {
|
||||
+ dprint (1, (debugfile, "imap_copy_messages: No messages del-tagged\n"));
|
||||
+ rc = -1;
|
||||
+ goto old_way;
|
||||
+ } else if (rc < 0) {
|
||||
+ dprint (1, (debugfile, "could not queue copy\n"));
|
||||
+ goto old_way;
|
||||
+ } else {
|
||||
+ mutt_message (_("Copying %d messages to %s..."), rc, mbox);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ } else {
|
||||
+ dprint (1, (debugfile, "[itf] trashcan seems to be on a different account.\n"));
|
||||
+ }
|
||||
+old_way:
|
||||
+ FREE(&mx.mbox); /* we probably only need to free this when the parse works */
|
||||
+ } else {
|
||||
+ dprint (1, (debugfile, "[itf] failed to parse TrashPath.\n"));
|
||||
+ }
|
||||
+
|
||||
+ dprint (1, (debugfile, "[itf] giving up and trying old fasioned way.\n"));
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
diff -urN mutt-1.6.1/imap/imap.h mutt-1.6.1-trash/imap/imap.h
|
||||
--- mutt-1.6.1/imap/imap.h 2016-06-12 18:43:00.405447637 +0100
|
||||
+++ mutt-1.6.1-trash/imap/imap.h 2016-06-12 18:43:04.774515769 +0100
|
||||
@@ -72,4 +72,7 @@
|
||||
|
||||
int imap_account_match (const ACCOUNT* a1, const ACCOUNT* a2);
|
||||
|
||||
+/* trash */
|
||||
+int imap_fast_trash (void);
|
||||
+
|
||||
#endif
|
||||
diff -urN mutt-1.6.1/imap/message.c mutt-1.6.1-trash/imap/message.c
|
||||
--- mutt-1.6.1/imap/message.c 2016-06-12 18:43:00.406447652 +0100
|
||||
+++ mutt-1.6.1-trash/imap/message.c 2016-06-12 18:43:04.906517828 +0100
|
||||
@@ -886,6 +886,7 @@
|
||||
if (ctx->hdrs[n]->tagged)
|
||||
{
|
||||
mutt_set_flag (ctx, ctx->hdrs[n], M_DELETE, 1);
|
||||
+ mutt_set_flag (ctx, ctx->hdrs[n], M_APPENDED, 1);
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_set_flag (ctx, ctx->hdrs[n], M_TAG, 0);
|
||||
}
|
||||
@@ -893,6 +894,7 @@
|
||||
else
|
||||
{
|
||||
mutt_set_flag (ctx, h, M_DELETE, 1);
|
||||
+ mutt_set_flag (ctx, h, M_APPENDED, 1);
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_set_flag (ctx, h, M_TAG, 0);
|
||||
}
|
||||
diff -urN mutt-1.6.1/init.h mutt-1.6.1-trash/init.h
|
||||
--- mutt-1.6.1/init.h 2016-06-12 18:43:00.408447684 +0100
|
||||
+++ mutt-1.6.1-trash/init.h 2016-06-12 18:43:04.909517875 +0100
|
||||
@@ -3419,6 +3419,16 @@
|
||||
** provided that ``$$ts_enabled'' has been set. This string is identical in
|
||||
** formatting to the one used by ``$$status_format''.
|
||||
*/
|
||||
+ { "trash", DT_PATH, R_NONE, UL &TrashPath, 0 },
|
||||
+ /*
|
||||
+ ** .pp
|
||||
+ ** If set, this variable specifies the path of the trash folder where the
|
||||
+ ** mails marked for deletion will be moved, instead of being irremediably
|
||||
+ ** purged.
|
||||
+ ** .pp
|
||||
+ ** NOTE: When you delete a message in the trash folder, it is really
|
||||
+ ** deleted, so that you have a way to clean the trash.
|
||||
+ */
|
||||
#ifdef USE_SOCKET
|
||||
{ "tunnel", DT_STR, R_NONE, UL &Tunnel, UL 0 },
|
||||
/*
|
||||
diff -urN mutt-1.6.1/mutt.h mutt-1.6.1-trash/mutt.h
|
||||
--- mutt-1.6.1/mutt.h 2016-06-12 18:43:00.410447715 +0100
|
||||
+++ mutt-1.6.1-trash/mutt.h 2016-06-12 18:43:04.912517922 +0100
|
||||
@@ -182,6 +182,8 @@
|
||||
M_DELETE,
|
||||
M_UNDELETE,
|
||||
M_DELETED,
|
||||
+ M_APPENDED,
|
||||
+ M_PURGED,
|
||||
M_FLAG,
|
||||
M_TAG,
|
||||
M_UNTAG,
|
||||
@@ -719,6 +721,8 @@
|
||||
unsigned int mime : 1; /* has a MIME-Version header? */
|
||||
unsigned int flagged : 1; /* marked important? */
|
||||
unsigned int tagged : 1;
|
||||
+ unsigned int appended : 1; /* has been saved */
|
||||
+ unsigned int purged : 1; /* bypassing the trash folder */
|
||||
unsigned int deleted : 1;
|
||||
unsigned int changed : 1;
|
||||
unsigned int attach_del : 1; /* has an attachment marked for deletion */
|
||||
@@ -891,6 +895,7 @@
|
||||
int new; /* how many new messages? */
|
||||
int unread; /* how many unread messages? */
|
||||
int deleted; /* how many deleted messages */
|
||||
+ int appended; /* how many saved messages? */
|
||||
int flagged; /* how many flagged messages */
|
||||
int msgnotreadyet; /* which msg "new" in pager, -1 if none */
|
||||
|
||||
diff -urN mutt-1.6.1/muttlib.c mutt-1.6.1-trash/muttlib.c
|
||||
--- mutt-1.6.1/muttlib.c 2016-06-12 18:43:00.411447731 +0100
|
||||
+++ mutt-1.6.1-trash/muttlib.c 2016-06-12 18:43:04.913517937 +0100
|
||||
@@ -1511,7 +1511,9 @@
|
||||
|
||||
if (magic > 0 && !mx_access (s, W_OK))
|
||||
{
|
||||
- if (option (OPTCONFIRMAPPEND))
|
||||
+ if (option (OPTCONFIRMAPPEND) &&
|
||||
+ (!TrashPath || (mutt_strcmp (s, TrashPath) != 0)))
|
||||
+ /* if we're appending to the trash, there's no point in asking */
|
||||
{
|
||||
snprintf (tmp, sizeof (tmp), _("Append messages to %s?"), s);
|
||||
if ((rc = mutt_yesorno (tmp, M_YES)) == M_NO)
|
||||
diff -urN mutt-1.6.1/mx.c mutt-1.6.1-trash/mx.c
|
||||
--- mutt-1.6.1/mx.c 2016-06-12 18:43:00.411447731 +0100
|
||||
+++ mutt-1.6.1-trash/mx.c 2016-06-12 18:43:04.914517953 +0100
|
||||
@@ -776,6 +776,62 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * trash_append - XXX
|
||||
+ *
|
||||
+ * move deleted mails to the trash folder
|
||||
+ */
|
||||
+static int trash_append (CONTEXT *ctx)
|
||||
+{
|
||||
+ CONTEXT *ctx_trash;
|
||||
+ int i = 0;
|
||||
+ struct stat st, stc;
|
||||
+
|
||||
+ if (!TrashPath || !ctx->deleted ||
|
||||
+ ((ctx->magic == M_MAILDIR) && option (OPTMAILDIRTRASH))) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ for (; i < ctx->msgcount && (!ctx->hdrs[i]->deleted || ctx->hdrs[i]->appended); i++);
|
||||
+ /* nothing */
|
||||
+
|
||||
+ if (i == ctx->msgcount)
|
||||
+ return 0; /* nothing to be done */
|
||||
+
|
||||
+ if (mutt_save_confirm (TrashPath, &st) != 0) {
|
||||
+ mutt_error _("message(s) not deleted");
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (lstat (ctx->path, &stc) == 0 && stc.st_ino == st.st_ino
|
||||
+ && stc.st_dev == st.st_dev && stc.st_rdev == st.st_rdev) {
|
||||
+ return 0; /* we are in the trash folder: simple sync */
|
||||
+ }
|
||||
+
|
||||
+#ifdef USE_IMAP
|
||||
+ if (!imap_fast_trash())
|
||||
+ return 0;
|
||||
+#endif
|
||||
+
|
||||
+ if ((ctx_trash = mx_open_mailbox (TrashPath, M_APPEND, NULL)) != NULL) {
|
||||
+ for (i = 0 ; i < ctx->msgcount ; i++) {
|
||||
+ if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->appended
|
||||
+ && !ctx->hdrs[i]->purged
|
||||
+ && mutt_append_message (ctx_trash, ctx, ctx->hdrs[i], 0, 0) == -1) {
|
||||
+ mx_close_mailbox (ctx_trash, NULL);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ mx_close_mailbox (ctx_trash, NULL);
|
||||
+ } else {
|
||||
+ mutt_error _("Can't open trash folder");
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/* save changes and close mailbox */
|
||||
int mx_close_mailbox (CONTEXT *ctx, int *index_hint)
|
||||
{
|
||||
@@ -912,6 +968,7 @@
|
||||
if (mutt_append_message (&f, ctx, ctx->hdrs[i], 0, CH_UPDATE_LEN) == 0)
|
||||
{
|
||||
mutt_set_flag (ctx, ctx->hdrs[i], M_DELETE, 1);
|
||||
+ mutt_set_flag (ctx, ctx->hdrs[i], M_APPENDED, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -936,6 +993,14 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ /* copy mails to the trash before expunging */
|
||||
+ if (purge && ctx->deleted && mutt_strcmp (ctx->path, TrashPath)) {
|
||||
+ if (trash_append (ctx) != 0) {
|
||||
+ ctx->closing = 0;
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
#ifdef USE_IMAP
|
||||
/* allow IMAP to preserve the deleted flag across sessions */
|
||||
if (ctx->magic == M_IMAP)
|
||||
@@ -1140,6 +1205,12 @@
|
||||
msgcount = ctx->msgcount;
|
||||
deleted = ctx->deleted;
|
||||
|
||||
+ if (purge && ctx->deleted && mutt_strcmp (ctx->path, TrashPath)) {
|
||||
+ if (trash_append (ctx) == -1) {
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
#ifdef USE_IMAP
|
||||
if (ctx->magic == M_IMAP)
|
||||
rc = imap_sync_mailbox (ctx, purge, index_hint);
|
||||
diff -urN mutt-1.6.1/OPS mutt-1.6.1-trash/OPS
|
||||
--- mutt-1.6.1/OPS 2016-06-12 18:43:00.389447388 +0100
|
||||
+++ mutt-1.6.1-trash/OPS 2016-06-12 18:43:04.883517469 +0100
|
||||
@@ -142,6 +142,7 @@
|
||||
OP_PREV_LINE "scroll up one line"
|
||||
OP_PREV_PAGE "move to the previous page"
|
||||
OP_PRINT "print the current entry"
|
||||
+OP_PURGE_MESSAGE "really delete the current entry, bypassing the trash folder"
|
||||
OP_QUERY "query external program for addresses"
|
||||
OP_QUERY_APPEND "append new query results to current results"
|
||||
OP_QUIT "save changes to mailbox and quit"
|
||||
diff -urN mutt-1.6.1/pager.c mutt-1.6.1-trash/pager.c
|
||||
--- mutt-1.6.1/pager.c 2016-06-12 18:43:00.412447746 +0100
|
||||
+++ mutt-1.6.1-trash/pager.c 2016-06-12 18:43:04.915517968 +0100
|
||||
@@ -2351,6 +2351,7 @@
|
||||
MAYBE_REDRAW (redraw);
|
||||
break;
|
||||
|
||||
+ case OP_PURGE_MESSAGE:
|
||||
case OP_DELETE:
|
||||
CHECK_MODE(IsHeader (extra));
|
||||
CHECK_READONLY;
|
||||
@@ -2358,6 +2359,8 @@
|
||||
CHECK_ACL(M_ACL_DELETE, _("Cannot delete message"));
|
||||
|
||||
mutt_set_flag (Context, extra->hdr, M_DELETE, 1);
|
||||
+ mutt_set_flag (Context, extra->hdr, M_PURGED,
|
||||
+ ch != OP_PURGE_MESSAGE ? 0 : 1);
|
||||
if (option (OPTDELETEUNTAG))
|
||||
mutt_set_flag (Context, extra->hdr, M_TAG, 0);
|
||||
redraw = REDRAW_STATUS | REDRAW_INDEX;
|
||||
@@ -2688,6 +2691,7 @@
|
||||
CHECK_ACL(M_ACL_DELETE, _("Cannot undelete message"));
|
||||
|
||||
mutt_set_flag (Context, extra->hdr, M_DELETE, 0);
|
||||
+ mutt_set_flag (Context, extra->hdr, M_PURGED, 0);
|
||||
redraw = REDRAW_STATUS | REDRAW_INDEX;
|
||||
if (option (OPTRESOLVE))
|
||||
{
|
||||
@@ -2704,9 +2708,11 @@
|
||||
CHECK_ACL(M_ACL_DELETE, _("Cannot undelete message(s)"));
|
||||
|
||||
r = mutt_thread_set_flag (extra->hdr, M_DELETE, 0,
|
||||
+ ch == OP_UNDELETE_THREAD ? 0 : 1)
|
||||
+ + mutt_thread_set_flag (extra->hdr, M_PURGED, 0,
|
||||
ch == OP_UNDELETE_THREAD ? 0 : 1);
|
||||
|
||||
- if (r != -1)
|
||||
+ if (r > -1)
|
||||
{
|
||||
if (option (OPTRESOLVE))
|
||||
{
|
||||
diff -urN mutt-1.6.1/PATCHES mutt-1.6.1-trash/PATCHES
|
||||
--- mutt-1.6.1/PATCHES 2016-06-12 18:43:00.395447481 +0100
|
||||
+++ mutt-1.6.1-trash/PATCHES 2016-06-12 18:43:04.889517563 +0100
|
||||
@@ -0,0 +1 @@
|
||||
+patch-trash-neo-20160612
|
||||
diff -urN mutt-1.6.1/pattern.c mutt-1.6.1-trash/pattern.c
|
||||
--- mutt-1.6.1/pattern.c 2016-06-12 18:43:00.413447762 +0100
|
||||
+++ mutt-1.6.1-trash/pattern.c 2016-06-12 18:43:04.916517984 +0100
|
||||
@@ -1367,8 +1367,9 @@
|
||||
{
|
||||
switch (op)
|
||||
{
|
||||
- case M_DELETE:
|
||||
case M_UNDELETE:
|
||||
+ mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_PURGED, 0);
|
||||
+ case M_DELETE:
|
||||
mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_DELETE,
|
||||
(op == M_DELETE));
|
||||
break;
|
||||
diff -urN mutt-1.6.1/postpone.c mutt-1.6.1-trash/postpone.c
|
||||
--- mutt-1.6.1/postpone.c 2016-06-12 18:43:00.414447777 +0100
|
||||
+++ mutt-1.6.1-trash/postpone.c 2016-06-12 18:43:04.917518000 +0100
|
||||
@@ -277,6 +277,9 @@
|
||||
/* finished with this message, so delete it. */
|
||||
mutt_set_flag (PostContext, h, M_DELETE, 1);
|
||||
|
||||
+ /* and consider it saved, so that it won't be moved to the trash folder */
|
||||
+ mutt_set_flag (PostContext, h, M_APPENDED, 1);
|
||||
+
|
||||
/* update the count for the status display */
|
||||
PostCount = PostContext->msgcount - PostContext->deleted;
|
||||
|
||||
diff -urN mutt-1.6.1/README.trash mutt-1.6.1-trash/README.trash
|
||||
--- mutt-1.6.1/README.trash 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ mutt-1.6.1-trash/README.trash 2016-06-12 18:43:04.748515364 +0100
|
||||
@@ -0,0 +1,74 @@
|
||||
+Trash Folder Patch
|
||||
+==================
|
||||
+
|
||||
+ Automatically move "deleted" emails to a trash bin
|
||||
+
|
||||
+Patch
|
||||
+-----
|
||||
+
|
||||
+ To check if Mutt supports "Trash Folder", look for "patch-trash" in the
|
||||
+ mutt version.
|
||||
+
|
||||
+ If IMAP is enabled, this patch will use it
|
||||
+
|
||||
+ Dependencies
|
||||
+ * mutt-1.6.1
|
||||
+ * IMAP support
|
||||
+
|
||||
+Introduction
|
||||
+------------
|
||||
+
|
||||
+ In Mutt, when you "delete" an email it is first marked deleted. The email
|
||||
+ isn't really gone until <sync-mailbox> is called. This happens when the
|
||||
+ user leaves the folder, or the function is called manually.
|
||||
+
|
||||
+ After '<sync-mailbox>' has been called the email is gone forever.
|
||||
+
|
||||
+ The $trash variable defines a folder in which to keep old emails. As
|
||||
+ before, first you mark emails for deletion. When <sync-mailbox> is called
|
||||
+ the emails are moved to the trash folder.
|
||||
+
|
||||
+ The '$trash' path can be either a full directory, or be relative to the
|
||||
+ $folder variable, like the 'mailboxes' command.
|
||||
+
|
||||
+ > Note
|
||||
+ >
|
||||
+ > Emails deleted from the trash folder are gone forever.
|
||||
+
|
||||
+Variables
|
||||
+---------
|
||||
+
|
||||
+ Trash Variables
|
||||
+
|
||||
+ | Name | Type | Default |
|
||||
+ |-------|--------|---------|
|
||||
+ | trash | string | (none) |
|
||||
+
|
||||
+Functions
|
||||
+---------
|
||||
+
|
||||
+ Trash Functions
|
||||
+
|
||||
+ | Menus | Default Key | Function | Description |
|
||||
+ |-------------|-------------|-------------------|-------------------------------------------------------------|
|
||||
+ | index,pager | (none) | '<purge-message>' | really delete the current entry, bypassing the trash folder |
|
||||
+
|
||||
+See Also
|
||||
+--------
|
||||
+
|
||||
+ * NeoMutt project
|
||||
+ * folder-hook
|
||||
+
|
||||
+Known Bugs
|
||||
+----------
|
||||
+
|
||||
+ None
|
||||
+
|
||||
+Credits
|
||||
+-------
|
||||
+
|
||||
+ * Cedric Duval <cedricduval@free.fr>
|
||||
+ * Benjamin Kuperman <kuperman@acm.org>
|
||||
+ * Paul Miller <paul@voltar.org>
|
||||
+ * Richard Russon <rich@flatcap.org>
|
||||
+
|
@ -11,7 +11,7 @@ assert withQt -> !withGtk && qt4 != null;
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
version = "2.0.3";
|
||||
version = "2.0.4";
|
||||
variant = if withGtk then "gtk" else if withQt then "qt" else "cli";
|
||||
in
|
||||
|
||||
@ -20,7 +20,7 @@ stdenv.mkDerivation {
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.bz2";
|
||||
sha256 = "1z358k65frp9m0l07cppwxhvbcp1w9ya5sml87pzs8gyfmp3g5p1";
|
||||
sha256 = "19g11m8m8qd7dkcvcb27lyppklg608d9ap7wr3mr88clm4nwiacy";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
@ -20,7 +20,7 @@
|
||||
libogg, libtheora, libvorbis, libdvdcss, a52dec, fdk_aac,
|
||||
lame, faac, ffmpeg, libdvdread, libdvdnav, libbluray,
|
||||
mp4v2, mpeg2dec, x264, libmkv,
|
||||
fontconfig, freetype,
|
||||
fontconfig, freetype, hicolor_icon_theme,
|
||||
glib, gtk, webkitgtk, intltool, libnotify,
|
||||
gst_all_1, dbus_glib, udev, libgudev,
|
||||
useGtk ? true,
|
||||
@ -45,7 +45,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
nativeBuildInputs = [ python pkgconfig yasm autoconf automake libtool m4 ];
|
||||
buildInputs = [
|
||||
fribidi fontconfig freetype
|
||||
fribidi fontconfig freetype hicolor_icon_theme
|
||||
libass libsamplerate libxml2 bzip2
|
||||
libogg libtheora libvorbis libdvdcss a52dec libmkv fdk_aac
|
||||
lame ffmpeg libdvdread libdvdnav libbluray mp4v2 mpeg2dec x264
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, fetchgit, pkgconfig, autoconf, automake
|
||||
{ stdenv, fetchFromGitHub, pkgconfig, autoconf, automake
|
||||
, ruby, file, xdg_utils, gettext, expat, qt5, boost
|
||||
, libebml, zlib, libmatroska, libogg, libvorbis, flac
|
||||
, withGUI ? true
|
||||
@ -10,18 +10,19 @@ with stdenv.lib;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mkvtoolnix-${version}";
|
||||
version = "8.9.0";
|
||||
version = "9.2.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://github.com/mbunkus/mkvtoolnix.git";
|
||||
rev = "54e6b52b3dde07f89da4542997ef059e18802128";
|
||||
sha256 = "1gipydk1xisqy110rr38dgjzpxl8zxbm12kf7b2f4xh4iw17j0k2";
|
||||
src = fetchFromGitHub {
|
||||
owner = "mbunkus";
|
||||
repo = "mkvtoolnix";
|
||||
rev = "release-${version}";
|
||||
sha256 = "02w3161iqaijs3bz5w2wily9nz55xnhq1bdm2s5qi8v3sbcqd6df";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ gettext ruby ];
|
||||
nativeBuildInputs = [ pkgconfig autoconf automake gettext ruby ];
|
||||
|
||||
buildInputs = [
|
||||
pkgconfig autoconf automake expat
|
||||
expat
|
||||
file xdg_utils boost libebml zlib
|
||||
libmatroska libogg libvorbis flac
|
||||
(optional withGUI qt5.qtbase)
|
||||
|
@ -62,11 +62,11 @@ in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "mpv-${version}";
|
||||
version = "0.17.0";
|
||||
version = "0.18.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/mpv-player/mpv/archive/v${version}.tar.gz";
|
||||
sha256 = "0vms3viwqcwl1mrgmf2yy4c69fvv7xpbkyrl693l6zpwynqd4b30";
|
||||
sha256 = "0ab3lkvx1j06x7qlp9m4r4zk28dr7z8ki3w4kfgkpm2axizxa4z4";
|
||||
};
|
||||
|
||||
patchPhase = ''
|
||||
|
@ -1,18 +1,23 @@
|
||||
{ stdenv, fetchsvn, automake, autoconf, zlib, popt, xorg, libvorbis, libtheora }:
|
||||
{ stdenv, fetchsvn, autoreconfHook, zlib, popt, alsaLib, libvorbis, libtheora
|
||||
, libICE, libSM, libX11, libXext, libXfixes, libXdamage }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "recordmydesktop-${version}";
|
||||
version = "0.3.8.1-svn602";
|
||||
version = "0.3.8.1-svn${rev}";
|
||||
rev = "602";
|
||||
|
||||
src = fetchsvn {
|
||||
url = https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk/recordmydesktop;
|
||||
rev = 602;
|
||||
inherit rev;
|
||||
sha256 = "1avirkc4ymrd575m616pi6wpgq1i0r5sb3qahps1g18sjpxks0lf";
|
||||
};
|
||||
|
||||
buildInputs = [ automake autoconf zlib popt xorg.libICE xorg.libSM xorg.libX11 xorg.libXext xorg.libXfixes xorg.libXdamage libvorbis libtheora ];
|
||||
nativeBuildInputs = [ autoreconfHook ];
|
||||
|
||||
preConfigure = ''./autogen.sh'';
|
||||
buildInputs = [
|
||||
zlib popt alsaLib libICE libSM libX11 libXext
|
||||
libXfixes libXdamage libvorbis libtheora
|
||||
];
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Desktop session recorder";
|
||||
|
37
pkgs/applications/video/recordmydesktop/gtk.nix
Normal file
37
pkgs/applications/video/recordmydesktop/gtk.nix
Normal file
@ -0,0 +1,37 @@
|
||||
{ stdenv, lib, fetchsvn, recordmydesktop, autoreconfHook, pkgconfig, glib
|
||||
, pythonPackages, jack2, xwininfo }:
|
||||
|
||||
let
|
||||
binPath = lib.makeBinPath [ recordmydesktop jack2 xwininfo ];
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
name = "gtk-recordmydesktop-${version}";
|
||||
version = "0.3.8-svn${recordmydesktop.rev}";
|
||||
|
||||
src = fetchsvn {
|
||||
url = https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk/gtk-recordmydesktop;
|
||||
inherit (recordmydesktop) rev;
|
||||
sha256 = "010aykgjfxhyiixq9a9fg3p1a1ixz59m1vkn16hpy0lybgf4dsby";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook pkgconfig ];
|
||||
|
||||
buildInputs = with pythonPackages; [
|
||||
python pygtk wrapPython
|
||||
];
|
||||
|
||||
pythonPath = with pythonPackages; [ pygtk ];
|
||||
|
||||
postInstall = ''
|
||||
makeWrapperArgs="--prefix PATH : ${binPath}"
|
||||
wrapPythonPrograms
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "GTK frontend for recordmydesktop";
|
||||
homepage = http://recordmydesktop.sourceforge.net/;
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ maintainers.DamienCassou ];
|
||||
};
|
||||
}
|
37
pkgs/applications/video/recordmydesktop/qt.nix
Normal file
37
pkgs/applications/video/recordmydesktop/qt.nix
Normal file
@ -0,0 +1,37 @@
|
||||
{ stdenv, lib, fetchsvn, recordmydesktop, autoreconfHook, pkgconfig
|
||||
, glib, pythonPackages, qt4, jack2, xwininfo }:
|
||||
|
||||
let
|
||||
binPath = lib.makeBinPath [ recordmydesktop jack2 xwininfo ];
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
name = "qt-recordmydesktop-${version}";
|
||||
version = "0.3.8-svn${recordmydesktop.rev}";
|
||||
|
||||
src = fetchsvn {
|
||||
url = https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk/qt-recordmydesktop;
|
||||
inherit (recordmydesktop) rev;
|
||||
sha256 = "0vz7amrmz317sbx2cv2186d0r57as4l26xa9rpim5gbvzk20caqc";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook pkgconfig ];
|
||||
|
||||
buildInputs = [ glib qt4 ] ++ (with pythonPackages; [
|
||||
python wrapPython pyqt4
|
||||
]);
|
||||
|
||||
pythonPath = with pythonPackages; [ pyqt4 ];
|
||||
|
||||
postInstall = ''
|
||||
makeWrapperArgs="--prefix PATH : ${binPath}"
|
||||
wrapPythonPrograms
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "GTK frontend for recordmydesktop";
|
||||
homepage = http://recordmydesktop.sourceforge.net/;
|
||||
license = licenses.gpl2;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ maintainers.DamienCassou ];
|
||||
};
|
||||
}
|
@ -11,7 +11,18 @@ stdenv.mkDerivation rec {
|
||||
sha256 = "1d89ncspjd8c4mckf0nb6y3hrxpv4rjpbj868pznhvfmdgr5nvql";
|
||||
};
|
||||
|
||||
postPatch = "sed '1i#include <random>' -i src/Benchmark.cpp";
|
||||
patches = [ ./fix-paths.patch ];
|
||||
|
||||
postPatch = ''
|
||||
# #455
|
||||
sed '1i#include <random>' -i src/Benchmark.cpp
|
||||
|
||||
for i in scripts/ssr-glinject src/AV/Input/GLInjectInput.cpp; do
|
||||
substituteInPlace $i \
|
||||
--subst-var out \
|
||||
--subst-var-by sh ${stdenv.shell}
|
||||
done
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
alsaLib ffmpeg libjack2 libX11 libXext libXfixes mesa pkgconfig
|
||||
|
35
pkgs/applications/video/simplescreenrecorder/fix-paths.patch
Normal file
35
pkgs/applications/video/simplescreenrecorder/fix-paths.patch
Normal file
@ -0,0 +1,35 @@
|
||||
diff --git a/scripts/ssr-glinject b/scripts/ssr-glinject
|
||||
index 48be48d..5038d4c 100755
|
||||
--- a/scripts/ssr-glinject
|
||||
+++ b/scripts/ssr-glinject
|
||||
@@ -59,6 +59,6 @@ do
|
||||
fi
|
||||
done
|
||||
|
||||
-echo "ssr-glinject: LD_PRELOAD = $LD_PRELOAD:libssr-glinject.so"
|
||||
+echo "ssr-glinject: LD_PRELOAD = $LD_PRELOAD:@out@/lib/libssr-glinject.so"
|
||||
echo "ssr-glinject: command = $@"
|
||||
-LD_PRELOAD="$LD_PRELOAD:libssr-glinject.so" "$@"
|
||||
+LD_PRELOAD="$LD_PRELOAD:@out@/lib/libssr-glinject.so" "$@"
|
||||
diff --git a/src/AV/Input/GLInjectInput.cpp b/src/AV/Input/GLInjectInput.cpp
|
||||
index 6b378f8..cbcf82b 100644
|
||||
--- a/src/AV/Input/GLInjectInput.cpp
|
||||
+++ b/src/AV/Input/GLInjectInput.cpp
|
||||
@@ -96,7 +96,7 @@ void GLInjectInput::SetCapturing(bool capturing) {
|
||||
bool GLInjectInput::LaunchApplication(const QString& channel, bool relax_permissions, const QString& command, const QString& working_directory) {
|
||||
|
||||
// prepare command
|
||||
- QString full_command = "LD_PRELOAD=\"libssr-glinject.so\" ";
|
||||
+ QString full_command = "LD_PRELOAD=\"@out@/lib/libssr-glinject.so\" ";
|
||||
full_command += "SSR_CHANNEL=\"" + ShellEscape(channel) + "\" ";
|
||||
if(relax_permissions)
|
||||
full_command += "SSR_STREAM_RELAX_PERMISSIONS=1 ";
|
||||
@@ -106,7 +106,7 @@ bool GLInjectInput::LaunchApplication(const QString& channel, bool relax_permiss
|
||||
QStringList args;
|
||||
args.push_back("-c");
|
||||
args.push_back(full_command);
|
||||
- return QProcess::startDetached("/bin/sh", args, working_directory);
|
||||
+ return QProcess::startDetached("@sh@", args, working_directory);
|
||||
|
||||
}
|
||||
|
@ -20,11 +20,11 @@ assert (!withQt5 -> qt4 != null);
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "vlc-${version}";
|
||||
version = "2.2.3";
|
||||
version = "2.2.4";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://get.videolan.org/vlc/${version}/${name}.tar.xz";
|
||||
sha256 = "0nxzspnyzlm17imlggi8ypnwiizi0f5wrj3436c3qg7i6mymimxr";
|
||||
sha256 = "1gjkrwlg8ab3skzl67cxb9qzg4187ifckd1z9kpy11q058fyjchn";
|
||||
};
|
||||
|
||||
# Comment-out the Qt 5.5 version check, as we do apply the relevant patch.
|
||||
|
@ -2,11 +2,11 @@
|
||||
pam, libX11, libev, cairo, libxkbcommon, libxkbfile }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "i3lock-2.7";
|
||||
name = "i3lock-2.8";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://i3wm.org/i3lock/${name}.tar.bz2";
|
||||
sha256 = "1qlgafbyqjpqdfs50f2y0xphn2jdigafkqqsmpikk97cs0z1i0k8";
|
||||
sha256 = "028fc0f74df10826514d5a4ed38f6895935d1f5d47ca9fcffc64b076aaf6e2f4";
|
||||
};
|
||||
|
||||
buildInputs = [ which pkgconfig libxcb xcbutilkeysyms xcbutilimage pam libX11
|
||||
|
@ -1,9 +1,11 @@
|
||||
{ stdenv, intltool, fetchurl, python, pygobject3, atk
|
||||
{ stdenv, intltool, fetchurl, atk
|
||||
, pkgconfig, gtk3, glib, libsoup
|
||||
, bash, makeWrapper, itstool, libxml2, python3Packages
|
||||
, gnome3, librsvg, gdk_pixbuf, file, libnotify }:
|
||||
, bash, makeWrapper, itstool, libxml2, python2Packages
|
||||
, gnome3, librsvg, gdk_pixbuf, file, libnotify, gobjectIntrospection, wrapGAppsHook }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
let
|
||||
python = python2Packages.python.withPackages ( ps: with ps; [ pygobject3 ] );
|
||||
in stdenv.mkDerivation rec {
|
||||
inherit (import ./src.nix fetchurl) name src;
|
||||
|
||||
doCheck = true;
|
||||
@ -15,17 +17,15 @@ stdenv.mkDerivation rec {
|
||||
buildInputs = [ pkgconfig gtk3 glib intltool itstool libxml2
|
||||
gnome3.gsettings_desktop_schemas makeWrapper file
|
||||
gdk_pixbuf gnome3.defaultIconTheme librsvg
|
||||
python pygobject3 libnotify gnome3.gnome_shell
|
||||
libnotify gnome3.gnome_shell
|
||||
libsoup gnome3.gnome_settings_daemon gnome3.nautilus
|
||||
gnome3.gnome_desktop ];
|
||||
gnome3.gnome_desktop wrapGAppsHook ];
|
||||
|
||||
preFixup = ''
|
||||
wrapProgram "$out/bin/gnome-tweak-tool" \
|
||||
--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
|
||||
--suffix XDG_DATA_DIRS : "${gtk3}/share:${gnome3.gnome_themes_standard}/share:$out/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" \
|
||||
--prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
|
||||
--prefix PYTHONPATH : "$PYTHONPATH:$(toPythonPath $out)"
|
||||
'';
|
||||
propagatedBuildInputs = [ python gobjectIntrospection ];
|
||||
|
||||
PYTHONPATH = "$out/${python.python.sitePackages}";
|
||||
|
||||
wrapPrefixVariables = [ "PYTHONPATH" ];
|
||||
|
||||
patches = [
|
||||
./find_gsettings.patch
|
||||
|
@ -0,0 +1,10 @@
|
||||
--- a/app/org.kde.ark.desktop.cmake
|
||||
+++ b/app/org.kde.ark.desktop.cmake
|
||||
@@ -154,7 +154,6 @@
|
||||
Terminal=false
|
||||
X-DBUS-StartupType=Multi
|
||||
X-DBUS-ServiceName=org.kde.ark
|
||||
-X-KDE-HasTempFileOption=true
|
||||
Categories=Qt;KDE;Utility;Archiving;Compression;X-KDE-Utilities-File;
|
||||
InitialPreference=3
|
||||
Comment=Work with file archives
|
@ -35,6 +35,9 @@ kdeApp {
|
||||
khtml ki18n kio karchive kconfig kcrash kdbusaddons kiconthemes kservice
|
||||
kpty kwidgetsaddons libarchive
|
||||
];
|
||||
patches = [
|
||||
./0001-fix-start-from-plasma.patch
|
||||
];
|
||||
postInstall = ''
|
||||
wrapQtProgram "$out/bin/ark" \
|
||||
--prefix PATH : "${PATH}"
|
@ -31,7 +31,7 @@ let
|
||||
|
||||
kdelibs = callPackage ./kdelibs { inherit (pkgs) attica phonon; };
|
||||
|
||||
ark = callPackage ./ark.nix {};
|
||||
ark = callPackage ./ark/default.nix {};
|
||||
baloo-widgets = callPackage ./baloo-widgets.nix {};
|
||||
dolphin = callPackage ./dolphin.nix {};
|
||||
dolphin-plugins = callPackage ./dolphin-plugins.nix {};
|
||||
|
@ -1,581 +0,0 @@
|
||||
# DO NOT EDIT! This file is generated automatically by fetchsrcs.sh
|
||||
{ fetchurl, mirror }:
|
||||
|
||||
{
|
||||
attica = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/attica-5.22.0.tar.xz";
|
||||
sha256 = "1i26nwxyrb62icw49znlyz9y670cv7xvibzbdfnnxq9czsalwym7";
|
||||
name = "attica-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
baloo = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/baloo-5.22.0.tar.xz";
|
||||
sha256 = "0h51j41pa8b18jkdna0247z5alqfbvgfzlxc6s6p0c7g7658z0w3";
|
||||
name = "baloo-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
bluez-qt = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/bluez-qt-5.22.0.tar.xz";
|
||||
sha256 = "1lrkkg2f2qjj8cy968l3scdrvi506m5hr9x22d1zn6r12fvq6304";
|
||||
name = "bluez-qt-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
breeze-icons = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/breeze-icons-5.22.0.tar.xz";
|
||||
sha256 = "162698h01cs7116la4jfygn8ka4ffjmnv7nxjl6yhcqrs25nky7l";
|
||||
name = "breeze-icons-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
extra-cmake-modules = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/extra-cmake-modules-5.22.0.tar.xz";
|
||||
sha256 = "042ad7kp2ijp66gvz0q60glk95wj9f0fymrjyw68253rqynf3zj3";
|
||||
name = "extra-cmake-modules-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
frameworkintegration = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/frameworkintegration-5.22.0.tar.xz";
|
||||
sha256 = "0jf9y738r86ss520hqhfll8prrfpha73myj99hbz3sqrix7b0va9";
|
||||
name = "frameworkintegration-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kactivities = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kactivities-5.22.0.tar.xz";
|
||||
sha256 = "068jhc6lw47hcibvys968m4wa1b278ccy2gas9iymzzys1ccv6kr";
|
||||
name = "kactivities-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kactivities-stats = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kactivities-stats-5.22.0.tar.xz";
|
||||
sha256 = "1gx5wm337nwbwqb56xvl16vhk47v7a5qpx5hhn7ygpfxkgxh6wiq";
|
||||
name = "kactivities-stats-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kapidox = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kapidox-5.22.0.tar.xz";
|
||||
sha256 = "0cs133g1rvbcrdvy7zvk5c14p5iwwn0x0m76c2ifal0g8qh0hmd1";
|
||||
name = "kapidox-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
karchive = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/karchive-5.22.0.tar.xz";
|
||||
sha256 = "1ywd38j6jpwj21kdp504gs0pfvlnvg6ak8hjk6a269pkci3dyf91";
|
||||
name = "karchive-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kauth = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kauth-5.22.0.tar.xz";
|
||||
sha256 = "1c0kp25g57nldh1x5vfq9fypbznc991jrry2lydvb06d3jh44vbn";
|
||||
name = "kauth-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kbookmarks = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kbookmarks-5.22.0.tar.xz";
|
||||
sha256 = "093rlg8pprjg7ba52dh2z9j2x5ir7s9kjas6ni4fqxxzpp15hh3p";
|
||||
name = "kbookmarks-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kcmutils = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kcmutils-5.22.0.tar.xz";
|
||||
sha256 = "1s7gw9l2n92rrcdzy9pnwq8na65axd8bkk9nphyhpbxk76zj1gyy";
|
||||
name = "kcmutils-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kcodecs = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kcodecs-5.22.0.tar.xz";
|
||||
sha256 = "0rlqs8m2ib2kkj679gn74zqqxzsddfcbywpgwlcd6b992i4cad87";
|
||||
name = "kcodecs-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kcompletion = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kcompletion-5.22.0.tar.xz";
|
||||
sha256 = "07jqjrddigdqsdy2adzari7g626sakilg9d765s75vncv5amrvzy";
|
||||
name = "kcompletion-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kconfig = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kconfig-5.22.0.tar.xz";
|
||||
sha256 = "0n0dzgba96pkabbvk1cfm34j9jirgbd84xha6adscpxs28506cg0";
|
||||
name = "kconfig-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kconfigwidgets = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kconfigwidgets-5.22.0.tar.xz";
|
||||
sha256 = "0jr6ygd8c0gap2ay2685wj3fx4scrahzbpaaj4bjhq2s79nvmlyg";
|
||||
name = "kconfigwidgets-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kcoreaddons = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kcoreaddons-5.22.0.tar.xz";
|
||||
sha256 = "0zzwcw0n9bd3pi3rv7cdwynb67x1bqf1bh3s59hjipf9d412wl15";
|
||||
name = "kcoreaddons-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kcrash = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kcrash-5.22.0.tar.xz";
|
||||
sha256 = "1r0i9ngk5jypzfhhssjm5b3n5sqli3jhh896r1qwpfcq9w15x7qg";
|
||||
name = "kcrash-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kdbusaddons = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kdbusaddons-5.22.0.tar.xz";
|
||||
sha256 = "0w9spb5i5qi2r5kfgrylpvw6mwjxfhd4j7yslc9jy0q4y8j3f1dk";
|
||||
name = "kdbusaddons-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kdeclarative = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kdeclarative-5.22.0.tar.xz";
|
||||
sha256 = "06n6wqy8dm2hv6dbar453z4rmiyf6f34zak1fhs38sqkfy6syva1";
|
||||
name = "kdeclarative-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kded = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kded-5.22.0.tar.xz";
|
||||
sha256 = "1zfggr6pmiypw5bnh6hr22agms589hm7hw35nhfhc4r7qd1drf6q";
|
||||
name = "kded-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kdelibs4support = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/portingAids/kdelibs4support-5.22.0.tar.xz";
|
||||
sha256 = "1mmrr54kkicnz4pjksnrh40md80m18mr5ba2la7kwjxmdyl6znm3";
|
||||
name = "kdelibs4support-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kdesignerplugin = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kdesignerplugin-5.22.0.tar.xz";
|
||||
sha256 = "0cfnmpz845l39qpy5r6pknzm78js81bci9qi0xfnrf8gm3lvjg5l";
|
||||
name = "kdesignerplugin-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kdesu = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kdesu-5.22.0.tar.xz";
|
||||
sha256 = "1jsr9m32dyzvsvsy743h3jih8v4yyr2zf15hh908anbamp7449bd";
|
||||
name = "kdesu-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kdewebkit = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kdewebkit-5.22.0.tar.xz";
|
||||
sha256 = "0rmxa4j3jx7689jcf45fghh7jff16x34xrzrw0clg3fj4w47ik0b";
|
||||
name = "kdewebkit-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kdnssd = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kdnssd-5.22.0.tar.xz";
|
||||
sha256 = "1b0s5gwn51zh2h5w2mzpzjj86qaz6pl7gzqf5q88vpzsiqjg14vp";
|
||||
name = "kdnssd-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kdoctools = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kdoctools-5.22.0.tar.xz";
|
||||
sha256 = "0y4ayms0hyj4nv5flr0a198lb545plfbxkwhqsmzc0c77gagcw5k";
|
||||
name = "kdoctools-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kemoticons = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kemoticons-5.22.0.tar.xz";
|
||||
sha256 = "1swrpqm441ngmps00hr15pgvw1382zbf2q2ncndj7i30725nfq1g";
|
||||
name = "kemoticons-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kfilemetadata = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kfilemetadata-5.22.0.tar.xz";
|
||||
sha256 = "0p6s1r2qv5396ghkw79wyf7yf4hzj562yp83wgplwmr6lgh4b2fc";
|
||||
name = "kfilemetadata-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kglobalaccel = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kglobalaccel-5.22.0.tar.xz";
|
||||
sha256 = "1m1aviz5g0vwk58j0z9jckz4rzns7md7mr3zlqqpvp1r032qc30k";
|
||||
name = "kglobalaccel-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kguiaddons = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kguiaddons-5.22.0.tar.xz";
|
||||
sha256 = "10chxcvf4hxyfkgprsj7rg4dv788dzqjgsm6m0a4m6qmx12zhckh";
|
||||
name = "kguiaddons-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
khtml = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/portingAids/khtml-5.22.0.tar.xz";
|
||||
sha256 = "1w5q41fjrqqq91j3dvhc9lrrhvrwy1izws6af7srh768gn6yig0m";
|
||||
name = "khtml-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
ki18n = {
|
||||
version = "5.22.1";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/ki18n-5.22.1.tar.xz";
|
||||
sha256 = "0fasp8akj6wysn4acf9vyivcgb8x9dlnhkqmw7j0g7z1qgvjn4pv";
|
||||
name = "ki18n-5.22.1.tar.xz";
|
||||
};
|
||||
};
|
||||
kiconthemes = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kiconthemes-5.22.0.tar.xz";
|
||||
sha256 = "1bh76f7kpha4c5qs3n8z6g1qah0rsk99yqcz8j1dlss4ws65j9j3";
|
||||
name = "kiconthemes-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kidletime = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kidletime-5.22.0.tar.xz";
|
||||
sha256 = "0dgw0rin6wz31xdspbjpvcs5x1b163ggqkz2zn73zavbr7f5jypc";
|
||||
name = "kidletime-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kimageformats = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kimageformats-5.22.0.tar.xz";
|
||||
sha256 = "0g3f73m3yj5iqivcsn83pm32w4l13zbyzz5azgm3jjfhgnd00c18";
|
||||
name = "kimageformats-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kinit = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kinit-5.22.0.tar.xz";
|
||||
sha256 = "1f71y6gf00p4jkqvpzyjlbnwc4gvjl2h4wi61xhpjz8lrmpsb6ac";
|
||||
name = "kinit-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kio = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kio-5.22.0.tar.xz";
|
||||
sha256 = "02knylbs9ymb8qm7fkp3dkdqc9cvgw2dwfl4phzl1iax2fx2zkqy";
|
||||
name = "kio-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kitemmodels = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kitemmodels-5.22.0.tar.xz";
|
||||
sha256 = "03gnglfhpzrc67bi0xdcy4xdhankic5cqnpahp9wwsis12ac6i83";
|
||||
name = "kitemmodels-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kitemviews = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kitemviews-5.22.0.tar.xz";
|
||||
sha256 = "0nhwg7bmv1c8p6pnbfsz96mq9wbq339ir9yp7kfnhfrg0wqi44ar";
|
||||
name = "kitemviews-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kjobwidgets = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kjobwidgets-5.22.0.tar.xz";
|
||||
sha256 = "1inqrb0j64b3519qcr0wk9izd4c1zi4kfjc8wa04s2kwxg6z7j1p";
|
||||
name = "kjobwidgets-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kjs = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/portingAids/kjs-5.22.0.tar.xz";
|
||||
sha256 = "0xqlkhm8r021xd5a25nwp9a4r7cbjkpqkc89fjma8qyvq5785qxw";
|
||||
name = "kjs-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kjsembed = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/portingAids/kjsembed-5.22.0.tar.xz";
|
||||
sha256 = "0fcc1lm5l8r0lj35r3niliyn8zxr90by2vjc9krzfm4i7kwij7wb";
|
||||
name = "kjsembed-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kmediaplayer = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/portingAids/kmediaplayer-5.22.0.tar.xz";
|
||||
sha256 = "1pn3fmaixcxba1wl63hblhnpj7jblrala9j3xrj8z2abhhfl5vzy";
|
||||
name = "kmediaplayer-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
knewstuff = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/knewstuff-5.22.0.tar.xz";
|
||||
sha256 = "1gr566k95bg58hpn569kkarmlxk5rp12jcxdp7ksw1j8mp6la7a7";
|
||||
name = "knewstuff-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
knotifications = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/knotifications-5.22.0.tar.xz";
|
||||
sha256 = "0fh6ahfr9pa8643i1ma40h7afnd1jn0m6dw5f9hgndxhwi6h3bps";
|
||||
name = "knotifications-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
knotifyconfig = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/knotifyconfig-5.22.0.tar.xz";
|
||||
sha256 = "0p4g7wv2w6cpjzhlkh7rnzzhwcj86sgz98fl97is1fl65q8f0szr";
|
||||
name = "knotifyconfig-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kpackage = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kpackage-5.22.0.tar.xz";
|
||||
sha256 = "1nbwjc4n8f2iisdckm5ll3qyls1sq02ia6vmhj4mfm4w44q4s1bk";
|
||||
name = "kpackage-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kparts = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kparts-5.22.0.tar.xz";
|
||||
sha256 = "091wm2flhqgpqsffdd8nlwbdffvsj7cyd0c46949d9chm64723cg";
|
||||
name = "kparts-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kpeople = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kpeople-5.22.0.tar.xz";
|
||||
sha256 = "0rbwxzmyaig92vcd26v1yqd13swk15pp0lpvjp6hdpxbhpxijyf7";
|
||||
name = "kpeople-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kplotting = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kplotting-5.22.0.tar.xz";
|
||||
sha256 = "0ljiyxa2320v937lkqkxx3jc7sg45z4vjl74lxfybwspgs6y5hqk";
|
||||
name = "kplotting-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kpty = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kpty-5.22.0.tar.xz";
|
||||
sha256 = "12lfwv45d06ksx5xc4hgk075mj2ckkqpc8mksx99f700yvcyk1db";
|
||||
name = "kpty-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kross = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/portingAids/kross-5.22.0.tar.xz";
|
||||
sha256 = "1ika9ha06vspjn8hy6mv5vi5n7xj7sj45csmjjxcqwhn2wlcdj4l";
|
||||
name = "kross-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
krunner = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/krunner-5.22.0.tar.xz";
|
||||
sha256 = "09jhdy48dciqd8hwxmvjyw547fr48mzns5f0yknsnnb8a47yhrd4";
|
||||
name = "krunner-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kservice = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kservice-5.22.0.tar.xz";
|
||||
sha256 = "1c5q8cxghbji3imamjbxymcd5cz9a9rapqriy1wmskys3ms3fag9";
|
||||
name = "kservice-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
ktexteditor = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/ktexteditor-5.22.0.tar.xz";
|
||||
sha256 = "1jsa8cfq0245bsris46i3k8f8g7l0sc5jpj4iwkxrl9m0nk5j1v0";
|
||||
name = "ktexteditor-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
ktextwidgets = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/ktextwidgets-5.22.0.tar.xz";
|
||||
sha256 = "01a2vkdpq06libap5g6a90jrcc0phmfd859kilraqyxhbrp9sw5l";
|
||||
name = "ktextwidgets-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kunitconversion = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kunitconversion-5.22.0.tar.xz";
|
||||
sha256 = "1phbqxddp8ks36nr4982n4bwwx7d6yxll629gpb0ddc4yfsjv48p";
|
||||
name = "kunitconversion-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kwallet = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kwallet-5.22.0.tar.xz";
|
||||
sha256 = "1i20kp1gkdiwmwy8vf7vd6r89qx6lpxwr6nib35khp93ci9l3838";
|
||||
name = "kwallet-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kwayland = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kwayland-5.22.0.tar.xz";
|
||||
sha256 = "1jfibqai7vy1vklj19x7z0r4qc0rc7yd5r4wpp98mmdwzpnhlrgy";
|
||||
name = "kwayland-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kwidgetsaddons = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kwidgetsaddons-5.22.0.tar.xz";
|
||||
sha256 = "1bwmnfa1l3s33nc6b0ryk78gxhrynyd07ffqw7mw211r34pg4c14";
|
||||
name = "kwidgetsaddons-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kwindowsystem = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kwindowsystem-5.22.0.tar.xz";
|
||||
sha256 = "05jwmjqk03pc2g09rnyb9qh0dfi0c46awbaxgc7i7z4i9swv1k30";
|
||||
name = "kwindowsystem-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kxmlgui = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kxmlgui-5.22.0.tar.xz";
|
||||
sha256 = "16q222jvnsd6pj49ih44qpks97lcjsamcpjg5x5ysn4a6w5h4mds";
|
||||
name = "kxmlgui-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
kxmlrpcclient = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/kxmlrpcclient-5.22.0.tar.xz";
|
||||
sha256 = "00qj4pa7r0ny6pwivq6qqw80v4dsg9lgwd2qdlp9kddi0f8i2p1b";
|
||||
name = "kxmlrpcclient-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
modemmanager-qt = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/modemmanager-qt-5.22.0.tar.xz";
|
||||
sha256 = "1b1gx33vrw7qcvy3zlc01x7wlalx5csfl590gfxlf870i3m7dnhf";
|
||||
name = "modemmanager-qt-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
networkmanager-qt = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/networkmanager-qt-5.22.0.tar.xz";
|
||||
sha256 = "03b710n4107qw9c3p7wdma9fz9vqixrjydfa02f7vgzw1rixmmqq";
|
||||
name = "networkmanager-qt-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
oxygen-icons5 = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/oxygen-icons5-5.22.0.tar.xz";
|
||||
sha256 = "1m3f5wrgahqlzzl3jyfymh6n515fsmsi8ckimvma2d8qqpb0dc2l";
|
||||
name = "oxygen-icons5-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
plasma-framework = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/plasma-framework-5.22.0.tar.xz";
|
||||
sha256 = "1wn7ib030dw8rj5dprl8bzz4c3dv4nlmrfb9wgr6x78w4ac967zc";
|
||||
name = "plasma-framework-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
solid = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/solid-5.22.0.tar.xz";
|
||||
sha256 = "04a7z5g2ylhbj2572wa6w51cs98ddn4d7lfirzawxf0f8d2693w2";
|
||||
name = "solid-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
sonnet = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/sonnet-5.22.0.tar.xz";
|
||||
sha256 = "0y8l3mfa65a59vjj424ga87q3bixx8inicp2jp9zi36p4g7xwww8";
|
||||
name = "sonnet-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
threadweaver = {
|
||||
version = "5.22.0";
|
||||
src = fetchurl {
|
||||
url = "${mirror}/stable/frameworks/5.22/threadweaver-5.22.0.tar.xz";
|
||||
sha256 = "1ax58k6nl8za79j99spa2r76m9xz8ih9iflksgpng40wlnkwlp59";
|
||||
name = "threadweaver-5.22.0.tar.xz";
|
||||
};
|
||||
};
|
||||
}
|
@ -106,6 +106,7 @@ let
|
||||
ktextwidgets = callPackage ./ktextwidgets.nix {};
|
||||
kunitconversion = callPackage ./kunitconversion.nix {};
|
||||
kwallet = callPackage ./kwallet.nix {};
|
||||
kwayland = callPackage ./kwayland.nix {};
|
||||
kwidgetsaddons = callPackage ./kwidgetsaddons.nix {};
|
||||
kwindowsystem = callPackage ./kwindowsystem.nix {};
|
||||
kxmlgui = callPackage ./kxmlgui.nix {};
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user