Merge branch 'master.upstream' into staging.upstream

This commit is contained in:
William A. Kennington III 2015-08-03 14:27:14 -07:00
commit a2da9cfcaf
56 changed files with 5999 additions and 253 deletions

View File

@ -179,6 +179,15 @@ nix-env -f "<nixpkgs>" -iA haskellPackages.cabal-install
</para>
</listitem>
<listitem>
<para>
The <literal>locate</literal> service no longer indexes the Nix store
by default, preventing packages with potentially numerous versions from
cluttering the output. Indexing the store can be activated by setting
<literal>services.locate.includeStore = true</literal>.
</para>
</listitem>
</itemizedlist>
</para>

View File

@ -52,9 +52,9 @@ in
systemd.services.bumblebeed = {
description = "Bumblebee Hybrid Graphics Switcher";
wantedBy = [ "display-manager.service" ];
script = "bumblebeed --use-syslog -g ${config.hardware.bumblebee.group}";
path = [ kernel.bbswitch bumblebee ];
serviceConfig = {
ExecStart = "${bumblebee}/bin/bumblebeed --use-syslog -g ${config.hardware.bumblebee.group}";
Restart = "always";
RestartSec = 60;
CPUSchedulingPolicy = "idle";

View File

@ -227,6 +227,7 @@
riemanntools = 203;
subsonic = 204;
riak = 205;
shout = 206;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -432,6 +433,7 @@
riemanntools = 203;
subsonic = 204;
riak = 205;
#shout = 206; #unused
# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal

View File

@ -35,7 +35,7 @@ in {
type = types.listOf types.str;
default = [ ];
description = ''
Extra flags to append to <command>updatedb</command>.
Extra flags to pass to <command>updatedb</command>.
'';
};
@ -56,6 +56,14 @@ in {
'';
};
includeStore = mkOption {
type = types.bool;
default = false;
description = ''
Whether to include <filename>/nix/store<filename> in the locate database.
'';
};
};
};
@ -63,7 +71,6 @@ in {
###### implementation
config = {
systemd.services.update-locatedb =
{ description = "Update Locate Database";
path = [ pkgs.su ];
@ -71,8 +78,9 @@ in {
''
mkdir -m 0755 -p $(dirname ${toString cfg.output})
exec updatedb \
--localuser=${cfg.localuser} \
--output=${toString cfg.output} ${concatStringsSep " " cfg.extraFlags}
--localuser=${cfg.localuser} \
${optionalString (!cfg.includeStore) "--prunepaths='/nix/store'"} \
--output=${toString cfg.output} ${concatStringsSep " " cfg.extraFlags}
'';
serviceConfig.Nice = 19;
serviceConfig.IOSchedulingClass = "idle";

View File

@ -328,6 +328,7 @@
./services/networking/searx.nix
./services/networking/seeks.nix
./services/networking/skydns.nix
./services/networking/shout.nix
./services/networking/spiped.nix
./services/networking/sslh.nix
./services/networking/ssh/lshd.nix

View File

@ -76,7 +76,7 @@ in
};
kernelPCRs = mkOption {
default = "10,11";
default = "8,9,10,11,12";
type = types.string;
description = "PCR indices used in the TPM for kernel measurements.";
};

View File

@ -8,6 +8,8 @@ let
homeDir = "/var/lib/gitit";
toYesNo = b: if b then "yes" else "no";
gititShared = with cfg.haskellPackages; gitit + "/share/" + pkgs.stdenv.system + "-" + ghc.name + "/" + gitit.pname + "-" + gitit.version;
gititWithPkgs = hsPkgs: extras: hsPkgs.ghcWithPackages (self: with self; [ gitit ] ++ (extras self));
@ -17,9 +19,6 @@ let
in writeScript "gitit" ''
#!${stdenv.shell}
cd $HOME
export PATH="${makeSearchPath "bin" (
[ git curl ] ++ (if cfg.pdfExport == "yes" then [texLiveFull] else [])
)}:$PATH";
export NIX_GHC="${env}/bin/ghc"
export NIX_GHCPKG="${env}/bin/ghc-pkg"
export NIX_GHC_DOCDIR="${env}/share/doc/ghc/html"
@ -27,11 +26,7 @@ let
${env}/bin/gitit -f ${configFile}
'';
gititOptions = let
yesNo = types.enum [ "yes" "no" ];
in {
gititOptions = {
enable = mkOption {
type = types.bool;
@ -202,8 +197,8 @@ let
};
showLhsBirdTracks = mkOption {
type = yesNo;
default = "no";
type = types.bool;
default = false;
description = ''
Specifies whether to show Haskell code blocks in "bird style", with
"> " at the beginning of each line.
@ -283,8 +278,8 @@ let
};
tableOfContents = mkOption {
type = yesNo;
default = "yes";
type = types.bool;
default = true;
description = ''
Specifies whether to print a tables of contents (with links to
sections) on each wiki page.
@ -292,22 +287,18 @@ let
};
plugins = mkOption {
type = types.path;
type = with types; listOf str;
description = ''
Specifies a list of plugins to load. Plugins may be specified either
by their path or by their module name. If the plugin name starts
Specifies a list of plugins to load. Plugins may be specified either
by their path or by their module name. If the plugin name starts
with Gitit.Plugin., gitit will assume that the plugin is an installed
module and will not try to find a source file.
Examples:
plugins: plugins/DotPlugin.hs, CapitalizeEmphasisPlugin.hs
plugins: plugins/DotPlugin
plugins: Gitit.Plugin.InterwikiLinks
'';
};
useCache = mkOption {
type = yesNo;
default = "no";
type = types.bool;
default = false;
description = ''
Specifies whether to cache rendered pages. Note that if use-feed is
selected, feeds will be cached regardless of the value of use-cache.
@ -338,14 +329,14 @@ let
};
debugMode = mkOption {
type = yesNo;
default = "no";
type = types.bool;
default = false;
description = "Causes debug information to be logged while gitit is running.";
};
compressResponses = mkOption {
type = yesNo;
default = "yes";
type = types.bool;
default = true;
description = "Specifies whether HTTP responses should be compressed.";
};
@ -357,16 +348,18 @@ let
line of the file should contain two fields, separated by whitespace.
The first field is the mime type, the second is a file extension.
For example:
video/x-ms-wmx wmx
<programlisting>
video/x-ms-wmx wmx
</programlisting>
If the file is not found, some simple defaults will be used.
'';
};
useReCaptcha = mkOption {
type = yesNo;
default = "no";
type = types.bool;
default = false;
description = ''
If "yes", causes gitit to use the reCAPTCHA service
If true, causes gitit to use the reCAPTCHA service
(http://recaptcha.net) to prevent bots from creating accounts.
'';
};
@ -471,8 +464,8 @@ let
};
useFeed = mkOption {
type = yesNo;
default = "no";
type = types.bool;
default = false;
description = ''
Specifies whether an ATOM feed should be enabled (for the site and
for individual pages).
@ -484,19 +477,19 @@ let
default = null;
description = ''
The base URL of the wiki, to be used in constructing feed IDs and RPX
token_urls. Set this if use-feed is 'yes' or authentication-method
token_urls. Set this if useFeed is false or authentication-method
is 'rpx'.
'';
};
absoluteUrls = mkOption {
type = yesNo;
default = "no";
type = types.bool;
default = false;
description = ''
Make wikilinks absolute with respect to the base-url. So, for
example, in a wiki served at the base URL '/wiki', on a page
Sub/Page, the wikilink '[Cactus]()' will produce a link to
'/wiki/Cactus' if absolute-urls is 'yes', and a relative link to
'/wiki/Cactus' if absoluteUrls is true, and a relative link to
'Cactus' (referring to '/wiki/Sub/Cactus') if absolute-urls is 'no'.
'';
};
@ -514,10 +507,10 @@ let
};
pdfExport = mkOption {
type = yesNo;
default = "no";
type = types.bool;
default = false;
description = ''
If yes, PDF will appear in export options. PDF will be created using
If true, PDF will appear in export options. PDF will be created using
pdflatex, which must be installed and in the path. Note that PDF
exports create significant additional server load.
'';
@ -537,10 +530,10 @@ let
};
xssSanitize = mkOption {
type = yesNo;
default = "yes";
type = types.bool;
default = true;
description = ''
If yes, all HTML (including that produced by pandoc) is filtered
If true, all HTML (including that produced by pandoc) is filtered
through xss-sanitize. Set to no only if you trust all of your users.
'';
};
@ -560,7 +553,7 @@ let
default-page-type: ${cfg.defaultPageType}
math: ${cfg.math}
mathjax-script: ${cfg.mathJaxScript}
show-lhs-bird-tracks: ${cfg.showLhsBirdTracks}
show-lhs-bird-tracks: ${toYesNo cfg.showLhsBirdTracks}
templates-dir: ${cfg.templatesDir}
log-file: ${cfg.logFile}
log-level: ${cfg.logLevel}
@ -568,16 +561,16 @@ let
no-delete: ${cfg.noDelete}
no-edit: ${cfg.noEdit}
default-summary: ${cfg.defaultSummary}
table-of-contents: ${cfg.tableOfContents}
plugins: ${cfg.plugins}
use-cache: ${cfg.useCache}
table-of-contents: ${toYesNo cfg.tableOfContents}
plugins: ${concatStringsSep "," cfg.plugins}
use-cache: ${toYesNo cfg.useCache}
cache-dir: ${cfg.cacheDir}
max-upload-size: ${cfg.maxUploadSize}
max-page-size: ${cfg.maxPageSize}
debug-mode: ${cfg.debugMode}
compress-responses: ${cfg.compressResponses}
debug-mode: ${toYesNo cfg.debugMode}
compress-responses: ${toYesNo cfg.compressResponses}
mime-types-file: ${cfg.mimeTypesFile}
use-recaptcha: ${cfg.useReCaptcha}
use-recaptcha: ${toYesNo cfg.useReCaptcha}
recaptcha-private-key: ${toString cfg.reCaptchaPrivateKey}
recaptcha-public-key: ${toString cfg.reCaptchaPublicKey}
access-question: ${cfg.accessQuestion}
@ -586,14 +579,14 @@ let
rpx-key: ${toString cfg.rpxKey}
mail-command: ${cfg.mailCommand}
reset-password-message: ${cfg.resetPasswordMessage}
use-feed: ${cfg.useFeed}
use-feed: ${toYesNo cfg.useFeed}
base-url: ${toString cfg.baseUrl}
absolute-urls: ${cfg.absoluteUrls}
absolute-urls: ${toYesNo cfg.absoluteUrls}
feed-days: ${toString cfg.feedDays}
feed-refresh-time: ${toString cfg.feedRefreshTime}
pdf-export: ${cfg.pdfExport}
pdf-export: ${toYesNo cfg.pdfExport}
pandoc-user-data: ${toString cfg.pandocUserData}
xss-sanitize: ${cfg.xssSanitize}
xss-sanitize: ${toYesNo cfg.xssSanitize}
'';
in
@ -608,7 +601,7 @@ in
haskellPackages = mkDefault pkgs.haskellPackages;
staticDir = gititShared + "/data/static";
templatesDir = gititShared + "/data/templates";
plugins = gititShared + "/plugins/Dot.hs";
plugins = [ ];
};
users.extraUsers.gitit = {
@ -628,8 +621,16 @@ in
description = "Git and Pandoc Powered Wiki";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ curl ]
++ optional cfg.pdfExport texLiveFull
++ optional (cfg.repositoryType == "darcs") darcs
++ optional (cfg.repositoryType == "mercurial") mercurial
++ optional (cfg.repositoryType == "git") git;
preStart = with cfg; ''
preStart = let
gm = "gitit@${config.networking.hostName}";
in
with cfg; ''
chown ${uid}:${gid} -R ${homeDir}
for dir in ${repositoryPath} ${staticDir} ${templatesDir} ${cacheDir}
do
@ -641,14 +642,35 @@ in
fi
done
cd ${repositoryPath}
if [ ! -d .git ]
then
${pkgs.git}/bin/git init
${pkgs.git}/bin/git config user.email "gitit@${config.networking.hostName}"
${pkgs.git}/bin/git config user.name "gitit"
chown ${uid}:${gid} -R {repositoryPath}
fi
cd -
${
if repositoryType == "darcs" then
''
if [ ! -d _darcs ]
then
${pkgs.darcs}/bin/darcs initialize
echo "${gm}" > _darcs/prefs/email
''
else if repositoryType == "mercurial" then
''
if [ ! -d .hg ]
then
${pkgs.mercurial}/bin/hg init
cat >> .hg/hgrc <<NAMED
[ui]
username = gitit ${gm}
NAMED
''
else
''
if [ ! -d .git ]
then
${pkgs.git}/bin/git init
${pkgs.git}/bin/git config user.email "${gm}"
${pkgs.git}/bin/git config user.name "gitit"
''}
chown ${uid}:${gid} -R ${repositoryPath}
fi
cd -
'';
serviceConfig = {

View File

@ -51,12 +51,37 @@ let
# ganglia_port: 8651
'';
diskConfig = pkgs.writeText "disk.yaml" ''
init_config:
instances:
- use_mount: no
'';
networkConfig = pkgs.writeText "network.yaml" ''
init_config:
instances:
# Network check only supports one configured instance
- collect_connection_state: false
excluded_interfaces:
- lo
- lo0
'';
postgresqlConfig = pkgs.writeText "postgres.yaml" cfg.postgresqlConfig;
nginxConfig = pkgs.writeText "nginx.yaml" cfg.nginxConfig;
mongoConfig = pkgs.writeText "mongo.yaml" cfg.mongoConfig;
etcfiles =
[ { source = ddConf;
target = "dd-agent/datadog.conf";
}
{ source = diskConfig;
target = "dd-agent/conf.d/disk.yaml";
}
{ source = networkConfig;
target = "dd-agent/conf.d/network.yaml";
} ] ++
(optional (cfg.postgresqlConfig != null)
{ source = postgresqlConfig;
@ -65,6 +90,10 @@ let
(optional (cfg.nginxConfig != null)
{ source = nginxConfig;
target = "dd-agent/conf.d/nginx.yaml";
}) ++
(optional (cfg.mongoConfig != null)
{ source = mongoConfig;
target = "dd-agent/conf.d/mongo.yaml";
});
in {
@ -106,6 +135,12 @@ in {
default = null;
type = types.uniq (types.nullOr types.string);
};
mongoConfig = mkOption {
description = "MongoDB integration configuration";
default = null;
type = types.uniq (types.nullOr types.string);
};
};
config = mkIf cfg.enable {
@ -123,7 +158,7 @@ in {
systemd.services.dd-agent = {
description = "Datadog agent monitor";
path = [ pkgs."dd-agent" pkgs.python pkgs.sysstat pkgs.procps];
path = [ pkgs."dd-agent" pkgs.python pkgs.sysstat pkgs.procps ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkgs.dd-agent}/bin/dd-agent foreground";
@ -132,7 +167,7 @@ in {
Restart = "always";
RestartSec = 2;
};
restartTriggers = [ pkgs.dd-agent ddConf postgresqlConfig nginxConfig ];
restartTriggers = [ pkgs.dd-agent ddConf diskConfig networkConfig postgresqlConfig nginxConfig mongoConfig ];
};
systemd.services.dogstatsd = {
@ -149,7 +184,7 @@ in {
RestartSec = 2;
};
environment.SSL_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt";
restartTriggers = [ pkgs.dd-agent ddConf postgresqlConfig nginxConfig ];
restartTriggers = [ pkgs.dd-agent ddConf diskConfig networkConfig postgresqlConfig nginxConfig mongoConfig ];
};
environment.etc = etcfiles;

View File

@ -0,0 +1,80 @@
{ pkgs, lib, config, options, ... }:
with lib;
let
cfg = config.services.shout;
shoutHome = "/var/lib/shout";
in {
options.services.shout = {
enable = mkEnableOption "Shout web IRC client";
private = mkOption {
type = types.bool;
default = false;
description = ''
Make your shout instance private. You will need to configure user
accounts by adding entries in <filename>${shoutHome}/users</filename>.
'';
};
host = mkOption {
type = types.string;
default = "0.0.0.0";
description = "IP interface to listen on for http connections.";
};
port = mkOption {
type = types.int;
default = 9000;
description = "TCP port to listen on for http connections.";
};
configFile = mkOption {
type = types.nullOr types.lines;
default = null;
description = ''
Contents of Shout's <filename>config.js</filename> file. If left empty,
Shout will generate from its defaults at first startup.
Documentation: http://shout-irc.com/docs/server/configuration.html
'';
};
};
config = mkIf cfg.enable {
users.extraUsers = singleton {
name = "shout";
uid = config.ids.uids.shout;
description = "Shout daemon user";
home = shoutHome;
createHome = true;
};
systemd.services.shout = {
description = "Shout web IRC client";
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
preStart = if isNull cfg.configFile then null
else ''
ln -sf ${pkgs.writeText "config.js" cfg.configFile} \
${shoutHome}/config.js
'';
script = concatStringsSep " " [
"${pkgs.shout}/bin/shout"
(if cfg.private then "--private" else "--public")
"--port" (toString cfg.port)
"--host" (toString cfg.host)
"--home" shoutHome
];
serviceConfig = {
User = "shout";
ProtectHome = "true";
ProtectSystem = "full";
PrivateTmp = "true";
};
};
};
}

View File

@ -1,6 +1,6 @@
{ stdenv, fetchurl, cmake, pkgconfig, intltool, vala, makeWrapper
, gtk3, webkitgtk, librsvg, libnotify, sqlite
, glib_networking, gsettings_desktop_schemas
, glib_networking, gsettings_desktop_schemas, libsoup
}:
let
@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
buildInputs = [
cmake pkgconfig intltool vala makeWrapper
webkitgtk librsvg libnotify sqlite
(libsoup.override {gnomeSupport = true;})
];
cmakeFlags = ''

View File

@ -0,0 +1,49 @@
{ stdenv, fetchFromGitHub, callPackage, python, utillinux }:
with stdenv.lib;
let
nodePackages = callPackage (import ../../../../top-level/node-packages.nix) {
neededNatives = [ python ] ++ optional (stdenv.isLinux) utillinux;
self = nodePackages;
generated = ./package.nix;
};
in nodePackages.buildNodePackage rec {
name = "shout-${version}";
version = "0.51.1";
src = fetchFromGitHub {
owner = "erming";
repo = "shout";
rev = "2cee0ea6ef5ee51de0190332f976934b55bbc8e4";
sha256 = "1kci1qha1csb9sqb4ig487q612hgdn5lycbcpad7m9r6chn835qg";
};
buildInputs = nodePackages.nativeDeps."shout" or [];
deps = [
nodePackages.by-spec."bcrypt-nodejs"."0.0.3"
nodePackages.by-spec."cheerio"."^0.17.0"
nodePackages.by-spec."commander"."^2.3.0"
nodePackages.by-spec."event-stream"."^3.1.7"
nodePackages.by-spec."express"."^4.9.5"
nodePackages.by-spec."lodash"."~2.4.1"
nodePackages.by-spec."mkdirp"."^0.5.0"
nodePackages.by-spec."moment"."~2.7.0"
nodePackages.by-spec."read"."^1.0.5"
nodePackages.by-spec."request"."^2.51.0"
nodePackages.by-spec."slate-irc"."~0.7.3"
nodePackages.by-spec."socket.io"."~1.0.6"
];
peerDependencies = [];
meta = {
description = "Web IRC client that you host on your own server";
license = licenses.mit;
homepage = http://shout-irc.com/;
maintainers = with maintainers; [ benley ];
platforms = platforms.unix;
};
}

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,13 @@
{ stdenv, fetchurl, makeDesktopItem, qt4 }:
{ stdenv, fetchurl, ffmpeg, makeDesktopItem, qt4 }:
let version = "3.4.11"; in
let version = "3.5.1"; in
stdenv.mkDerivation rec {
name = "clipgrab-${version}";
src = fetchurl {
sha256 = "10xxcnib7xkvrx7wma2vbya5fz5s5f6syc9dmr395c83lpcwpxs8";
# The "Download" button is a .tar.gz, but there's a .tar.bz2 further down:
url = "http://download.clipgrab.de/${name}.tar.bz2";
sha256 = "16hm7zv0yhxj7gdd8q462jcxy0jk6hicsk1mkhmarwrhifwsy4g9";
# The .tar.bz2 "Download" link is a binary blob, the source is .tar.gz!
url = "http://download.clipgrab.de/${name}.tar.gz";
};
meta = with stdenv.lib; {
@ -20,11 +20,17 @@ stdenv.mkDerivation rec {
'';
homepage = http://clipgrab.org/;
license = licenses.gpl3Plus;
platforms = with platforms; linux;
platforms = platforms.linux;
maintainers = with maintainers; [ nckx ];
};
buildInputs = [ qt4 ];
buildInputs = [ ffmpeg qt4 ];
postPatch = stdenv.lib.optionalString (ffmpeg != null) ''
substituteInPlace converter_ffmpeg.cpp \
--replace '"ffmpeg"' '"${ffmpeg}/bin/ffmpeg"' \
--replace '"ffmpeg ' '"${ffmpeg}/bin/ffmpeg '
'';
configurePhase = ''
qmake clipgrab.pro

View File

@ -1,6 +1,6 @@
{ stdenv, fetchurl, pkgconfig
, libxml2, libXinerama, libXcursor, libXau, libXrandr
, imlib2, pango, libstartup_notification, makeWrapper}:
, imlib2, pango, libstartup_notification, makeWrapper }:
stdenv.mkDerivation rec {
name = "openbox-3.5.2";
@ -8,8 +8,11 @@ stdenv.mkDerivation rec {
buildInputs = [
pkgconfig libxml2
libXinerama libXcursor libXau libXrandr
imlib2 pango libstartup_notification
makeWrapper
libstartup_notification makeWrapper
];
propagatedBuildInputs = [
pango imlib2
];
src = fetchurl {

View File

@ -8,7 +8,7 @@ let
# Annoyingly, these files are updated without a change in URL. This means that
# builds will start failing every month or so, until the hashes are updated.
version = "2015-07-30";
version = "2015-08-03";
in
stdenv.mkDerivation {
name = "geolite-legacy-${version}";
@ -27,10 +27,10 @@ stdenv.mkDerivation {
"0j5dq06pjrh6d94wczsg6qdys4v164nvp2a7qqrg8w4knh94qp6n";
srcGeoIPASNum = fetchDB
"asnum/GeoIPASNum.dat.gz" "GeoIPASNum.dat.gz"
"16lfazhyhwmh8fyd7pxzwxp5sxszbqw4xdx3avv78hglhyb2ijkw";
"04qlh6zr8m5qxl2gcysb721bqlnqrxhngh128zj1w8rhqckjndgj";
srcGeoIPASNumv6 = fetchDB
"asnum/GeoIPASNumv6.dat.gz" "GeoIPASNumv6.dat.gz"
"16jd6f2pwy8616jb78x8j6zda7h0p1bp786y86rq3ipgcw6g0jgn";
"06p9wnypnffsmqg5bszwygb73in4gc0h5l26wk0s43pdaldrdrx0";
meta = with stdenv.lib; {
inherit version;

View File

@ -53,7 +53,7 @@ let
gegl_0_3 = pkgs.gegl_0_3.override { inherit gtk; };
version = "3.16";
maintainers = with pkgs.lib.maintainers; [ lethalman ];
maintainers = with pkgs.lib.maintainers; [ lethalman jgeerds ];
# Simplify the nixos module and gnome packages
defaultIconTheme = adwaita-icon-theme;

View File

@ -0,0 +1,123 @@
From 175218579aa2b4f4974ff1cf4fd1ac93082a4714 Mon Sep 17 00:00:00 2001
From: Jascha Geerds <jg@ekby.de>
Date: Sat, 1 Aug 2015 21:01:11 +0200
Subject: [PATCH 1/1] Search for themes and icons in system data dirs
---
gtweak/tweaks/tweak_group_interface.py | 17 ++++-------------
gtweak/tweaks/tweak_group_keymouse.py | 7 ++-----
gtweak/utils.py | 17 +++++++++++++++++
3 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/gtweak/tweaks/tweak_group_interface.py b/gtweak/tweaks/tweak_group_interface.py
index ed2ad5f..a319907 100644
--- a/gtweak/tweaks/tweak_group_interface.py
+++ b/gtweak/tweaks/tweak_group_interface.py
@@ -26,7 +26,7 @@ from gi.repository import Gtk
from gi.repository import GLib
import gtweak
-from gtweak.utils import walk_directories, make_combo_list_with_default, extract_zip_file
+from gtweak.utils import walk_directories, make_combo_list_with_default, extract_zip_file, get_resource_dirs
from gtweak.tweakmodel import Tweak, TWEAK_GROUP_APPEARANCE
from gtweak.gshellwrapper import GnomeShellFactory
from gtweak.gsettings import GSettingsSetting
@@ -46,10 +46,7 @@ class GtkThemeSwitcher(GSettingsComboTweak):
def _get_valid_themes(self):
""" Only shows themes that have variations for gtk+-3 and gtk+-2 """
- dirs = ( os.path.join(gtweak.DATA_DIR, "themes"),
- os.path.join(GLib.get_user_data_dir(), "themes"),
- os.path.join(os.path.expanduser("~"), ".themes"))
- valid = walk_directories(dirs, lambda d:
+ valid = walk_directories(get_resource_dirs('themes'), lambda d:
os.path.exists(os.path.join(d, "gtk-2.0")) and \
os.path.exists(os.path.join(d, "gtk-3.0")))
return valid
@@ -64,10 +61,7 @@ class IconThemeSwitcher(GSettingsComboTweak):
**options)
def _get_valid_icon_themes(self):
- dirs = ( os.path.join(gtweak.DATA_DIR, "icons"),
- os.path.join(GLib.get_user_data_dir(), "icons"),
- os.path.join(os.path.expanduser("~"), ".icons"))
- valid = walk_directories(dirs, lambda d:
+ valid = walk_directories(get_resource_dirs("icons"), lambda d:
os.path.isdir(d) and \
os.path.exists(os.path.join(d, "index.theme")))
return valid
@@ -82,10 +76,7 @@ class CursorThemeSwitcher(GSettingsComboTweak):
**options)
def _get_valid_cursor_themes(self):
- dirs = ( os.path.join(gtweak.DATA_DIR, "icons"),
- os.path.join(GLib.get_user_data_dir(), "icons"),
- os.path.join(os.path.expanduser("~"), ".icons"))
- valid = walk_directories(dirs, lambda d:
+ valid = walk_directories(get_resource_dirs("icons"), lambda d:
os.path.isdir(d) and \
os.path.exists(os.path.join(d, "cursors")))
return valid
diff --git a/gtweak/tweaks/tweak_group_keymouse.py b/gtweak/tweaks/tweak_group_keymouse.py
index b56a4f4..3486098 100644
--- a/gtweak/tweaks/tweak_group_keymouse.py
+++ b/gtweak/tweaks/tweak_group_keymouse.py
@@ -20,7 +20,7 @@ import os.path
from gi.repository import GLib
import gtweak
-from gtweak.utils import XSettingsOverrides, walk_directories, make_combo_list_with_default
+from gtweak.utils import XSettingsOverrides, walk_directories, make_combo_list_with_default, get_resource_dirs
from gtweak.widgets import ListBoxTweakGroup, GSettingsComboTweak, GSettingsSwitchTweak, GetterSetterSwitchTweak, Title
class PrimaryPasteTweak(GetterSetterSwitchTweak):
@@ -47,10 +47,7 @@ class KeyThemeSwitcher(GSettingsComboTweak):
**options)
def _get_valid_key_themes(self):
- dirs = ( os.path.join(gtweak.DATA_DIR, "themes"),
- os.path.join(GLib.get_user_data_dir(), "themes"),
- os.path.join(os.path.expanduser("~"), ".themes"))
- valid = walk_directories(dirs, lambda d:
+ valid = walk_directories(get_resource_dirs("themes"), lambda d:
os.path.isfile(os.path.join(d, "gtk-3.0", "gtk-keys.css")) and \
os.path.isfile(os.path.join(d, "gtk-2.0-key", "gtkrc")))
return valid
diff --git a/gtweak/utils.py b/gtweak/utils.py
index 3d20425..0fcb51d 100644
--- a/gtweak/utils.py
+++ b/gtweak/utils.py
@@ -21,6 +21,7 @@ import tempfile
import shutil
import subprocess
import glob
+import itertools
import gtweak
from gtweak.gsettings import GSettingsSetting
@@ -114,6 +115,22 @@ def execute_subprocess(cmd_then_args, block=True):
stdout, stderr = p.communicate()
return stdout, stderr, p.returncode
+def get_resource_dirs(resource):
+ """Returns a list of all known resource dirs for a given resource.
+
+ :param str resource:
+ Name of the resource (e.g. "themes")
+ :return:
+ A list of resource dirs
+ """
+ dirs = [os.path.join(dir, resource)
+ for dir in itertools.chain(GLib.get_system_data_dirs(),
+ (gtweak.DATA_DIR,
+ GLib.get_user_data_dir()))]
+ dirs += [os.path.join(os.path.expanduser("~"), ".{}".format(resource))]
+
+ return [dir for dir in dirs if os.path.isdir(dir)]
+
@singleton
class AutostartManager:
--
2.4.5

View File

@ -0,0 +1,103 @@
From edd3203c7b7d5ba596df9f148c443cdfc8a58d88 Mon Sep 17 00:00:00 2001
From: Jascha Geerds <jg@ekby.de>
Date: Sat, 1 Aug 2015 21:26:57 +0200
Subject: [PATCH 1/1] Don't show multiple entries for a single theme
---
gtweak/tweaks/tweak_group_interface.py | 8 ++++----
gtweak/tweaks/tweak_group_keymouse.py | 4 ++--
gtweak/utils.py | 16 ++++++++++++++++
3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/gtweak/tweaks/tweak_group_interface.py b/gtweak/tweaks/tweak_group_interface.py
index a319907..82c0286 100644
--- a/gtweak/tweaks/tweak_group_interface.py
+++ b/gtweak/tweaks/tweak_group_interface.py
@@ -26,7 +26,7 @@ from gi.repository import Gtk
from gi.repository import GLib
import gtweak
-from gtweak.utils import walk_directories, make_combo_list_with_default, extract_zip_file, get_resource_dirs
+from gtweak.utils import walk_directories, make_combo_list_with_default, extract_zip_file, get_resource_dirs, get_unique_resources
from gtweak.tweakmodel import Tweak, TWEAK_GROUP_APPEARANCE
from gtweak.gshellwrapper import GnomeShellFactory
from gtweak.gsettings import GSettingsSetting
@@ -49,7 +49,7 @@ class GtkThemeSwitcher(GSettingsComboTweak):
valid = walk_directories(get_resource_dirs('themes'), lambda d:
os.path.exists(os.path.join(d, "gtk-2.0")) and \
os.path.exists(os.path.join(d, "gtk-3.0")))
- return valid
+ return get_unique_resources(valid)
class IconThemeSwitcher(GSettingsComboTweak):
def __init__(self, **options):
@@ -64,7 +64,7 @@ class IconThemeSwitcher(GSettingsComboTweak):
valid = walk_directories(get_resource_dirs("icons"), lambda d:
os.path.isdir(d) and \
os.path.exists(os.path.join(d, "index.theme")))
- return valid
+ return get_unique_resources(valid)
class CursorThemeSwitcher(GSettingsComboTweak):
def __init__(self, **options):
@@ -79,7 +79,7 @@ class CursorThemeSwitcher(GSettingsComboTweak):
valid = walk_directories(get_resource_dirs("icons"), lambda d:
os.path.isdir(d) and \
os.path.exists(os.path.join(d, "cursors")))
- return valid
+ return get_unique_resources(valid)
class ShellThemeTweak(Gtk.Box, Tweak):
diff --git a/gtweak/tweaks/tweak_group_keymouse.py b/gtweak/tweaks/tweak_group_keymouse.py
index 3486098..9f53425 100644
--- a/gtweak/tweaks/tweak_group_keymouse.py
+++ b/gtweak/tweaks/tweak_group_keymouse.py
@@ -20,7 +20,7 @@ import os.path
from gi.repository import GLib
import gtweak
-from gtweak.utils import XSettingsOverrides, walk_directories, make_combo_list_with_default, get_resource_dirs
+from gtweak.utils import XSettingsOverrides, walk_directories, make_combo_list_with_default, get_resource_dirs, get_unique_resources
from gtweak.widgets import ListBoxTweakGroup, GSettingsComboTweak, GSettingsSwitchTweak, GetterSetterSwitchTweak, Title
class PrimaryPasteTweak(GetterSetterSwitchTweak):
@@ -50,7 +50,7 @@ class KeyThemeSwitcher(GSettingsComboTweak):
valid = walk_directories(get_resource_dirs("themes"), lambda d:
os.path.isfile(os.path.join(d, "gtk-3.0", "gtk-keys.css")) and \
os.path.isfile(os.path.join(d, "gtk-2.0-key", "gtkrc")))
- return valid
+ return get_unique_resources(valid)
TWEAK_GROUPS = [
ListBoxTweakGroup(_("Keyboard and Mouse"),
diff --git a/gtweak/utils.py b/gtweak/utils.py
index 0fcb51d..ce8e12e 100644
--- a/gtweak/utils.py
+++ b/gtweak/utils.py
@@ -131,6 +131,22 @@ def get_resource_dirs(resource):
return [dir for dir in dirs if os.path.isdir(dir)]
+def get_unique_resources(dirs):
+ """Filter out duplicated resources.
+
+ :param list dirs:
+ List of resource dirs (e.g. /usr/share/themes/Adwaita)
+ :return:
+ List of dirs without duplicated resources
+ """
+ unique_dirs = {}
+ for dir in dirs:
+ basename = os.path.basename(dir)
+ if basename not in unique_dirs:
+ unique_dirs[basename] = dir
+
+ return unique_dirs
+
@singleton
class AutostartManager:
--
2.4.5

View File

@ -0,0 +1,29 @@
From dea8fc3c37c43f4fbbcc658ee995a95b93452b3c Mon Sep 17 00:00:00 2001
From: Jascha Geerds <jg@ekby.de>
Date: Sun, 2 Aug 2015 12:01:20 +0200
Subject: [PATCH 1/1] Create config dir if it doesn't exist
Otherwise gnome-tweak-tool can't enable the dark theme and fails
without a clear error message.
---
gtweak/gtksettings.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/gtweak/gtksettings.py b/gtweak/gtksettings.py
index bcec9f1..f39991b 100644
--- a/gtweak/gtksettings.py
+++ b/gtweak/gtksettings.py
@@ -35,6 +35,10 @@ class GtkSettingsManager:
def _get_keyfile(self):
keyfile = None
try:
+ config_dir = os.path.dirname(self._path)
+ if not os.path.isdir(config_dir):
+ os.makedirs(config_dir)
+
keyfile = GLib.KeyFile()
keyfile.load_from_file(self._path, 0)
except MemoryError:
--
2.4.5

View File

@ -28,12 +28,17 @@ stdenv.mkDerivation rec {
preFixup = ''
wrapProgram "$out/bin/gnome-tweak-tool" \
--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE" \
--prefix XDG_DATA_DIRS : "${gtk3}/share:${gnome3.gnome_themes_standard}/share:$out/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" \
--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)"
'';
patches = [ ./find_gsettings.patch ];
patches = [
./find_gsettings.patch
./0001-Search-for-themes-and-icons-in-system-data-dirs.patch
./0002-Don-t-show-multiple-entries-for-a-single-theme.patch
./0003-Create-config-dir-if-it-doesn-t-exist.patch
];
meta = with stdenv.lib; {
homepage = https://wiki.gnome.org/action/show/Apps/GnomeTweakTool;

View File

@ -26,14 +26,6 @@ stdenv.mkDerivation {
src = fetchurl {
inherit (s) url sha256;
};
patches = [ ./libffi-prefix.patch ];
preConfigure = ''
(cd src ; libtoolize -f)
(cd src ; autoheader -f)
(cd src ; aclocal)
(cd src ; automake --add-missing -c)
(cd src ; autoconf -f)
'';
configureFlags = [
"--enable-threads"
"--with-gmp-prefix=${gmp}"

View File

@ -1,14 +1,16 @@
{stdenv, fetchurl, pkgconfig, libsoup, glib, libxml2}:
{ stdenv, fetchurl, pkgconfig, libsoup, glib }:
stdenv.mkDerivation {
name = "gssdp-0.12.2.1";
name = "gssdp-0.14.11";
src = fetchurl {
url = mirror://gnome/sources/gssdp/0.14/gssdp-0.14.6.tar.xz;
sha256 = "1kgakr0rpdpm7nkp4ycka12nndga16wmzim79v1nbcc0j2wxxkws";
url = mirror://gnome/sources/gssdp/0.14/gssdp-0.14.11.tar.xz;
sha256 = "0njkqr2y7c6linnw4wkc4y2vq5dfkpryqcinbzn0pzhr46psxxbv";
};
buildInputs = [pkgconfig libsoup glib libxml2];
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ libsoup ];
propagatedBuildInputs = [ glib ];
meta = {
description = "GObject-based API for handling resource discovery and announcement over SSDP";

View File

@ -1,21 +1,22 @@
{ stdenv, fetchurl, gupnp, pkgconfig }:
{ stdenv, fetchurl, pkgconfig, gupnp, glib, libxml2 }:
stdenv.mkDerivation rec {
name = "gupnp-av-${version}";
majorVersion = "0.12";
version = "${majorVersion}.4";
version = "${majorVersion}.7";
src = fetchurl {
url = "mirror://gnome/sources/gupnp-av/${majorVersion}/gupnp-av-${version}.tar.xz";
sha256 = "0nvsvpiyfslz54j4hjh2gsdjkbi2qj2f4k0aw8s7f05kibprr2jl";
url = "mirror://gnome/sources/gupnp-av/${majorVersion}/${name}.tar.xz";
sha256 = "35e775bc4f7801d65dcb710905a6b8420ce751a239b5651e6d830615dc906ea8";
};
buildInputs = [ gupnp pkgconfig ];
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ gupnp glib libxml2 ];
meta = {
homepage = http://gupnp.org/;
description = "A collection of helpers for building AV (audio/video) applications using GUPnP";
longDescription = "GUPnP implements the UPnP specification: resource announcement and discovery, description, control, event notification, and presentation (GUPnP includes basic web server functionality through libsoup). GUPnP does not include helpers for construction or control of specific standardized resources (e.g. MediaServer); this is left for higher level libraries utilizing the GUPnP framework.";
license = stdenv.lib.licenses.gpl2;
platforms = stdenv.lib.platforms.linux;
};
}
}

View File

@ -1,21 +1,22 @@
{ stdenv, fetchurl, pkgconfig, glib, gupnp, python, pygobject }:
{ stdenv, fetchurl, pkgconfig, glib, gupnp }:
stdenv.mkDerivation rec {
name = "gupnp-igd-0.2.1";
name = "gupnp-igd-${version}";
majorVersion = "0.2";
version = "${majorVersion}.4";
src = fetchurl {
url = https://launchpad.net/ubuntu/+archive/primary/+files/gupnp-igd_0.2.1.orig.tar.gz;
sha256 = "18ia8l24hbylz3dnbg2jf848bmbx0hjkq4fkwzzfn57z021f0fh2";
url = "mirror://gnome/sources/gupnp-igd/${majorVersion}/${name}.tar.xz";
sha256 = "38c4a6d7718d17eac17df95a3a8c337677eda77e58978129ad3182d769c38e44";
};
propagatedBuildInputs = [ gupnp ];
buildInputs = [ glib python pygobject ];
nativeBuildInputs = [ pkgconfig ];
propagatedBuildInputs = [ glib gupnp ];
meta = {
homepage = http://www.gupnp.org/;
license = stdenv.lib.licenses.lgpl21;
platforms = stdenv.lib.platforms.linux;
};
}

View File

@ -1,24 +1,23 @@
{ stdenv, fetchurl, pkgconfig, glib, libxml2, gssdp, libsoup, libuuid }:
{ stdenv, fetchurl, pkgconfig, glib, gssdp, libsoup, libxml2, libuuid }:
stdenv.mkDerivation rec {
name = "gupnp-${version}";
majorVersion = "0.20";
version = "${majorVersion}.9";
version = "${majorVersion}.14";
src = fetchurl {
url = "mirror://gnome/sources/gupnp/${majorVersion}/gupnp-${version}.tar.xz";
sha256 = "0vicydn3f72x1rqql7857ans85mg7dfap7n7h8xrfyb9whxhlrb1";
sha256 = "77ffb940ba77c4a6426d09d41004c75d92652dcbde86c84ac1c847dbd9ad59bd";
};
propagatedBuildInputs = [ libxml2 libsoup gssdp ];
buildInputs = [ glib libuuid ];
nativeBuildInputs = [ pkgconfig ];
propagatedBuildInputs = [ glib gssdp libsoup libxml2 libuuid ];
postInstall = ''
cp -r ${libsoup}/include/libsoup-2.4/libsoup $out/include
cp -r ${gssdp}/include/gssdp-1.0/libgssdp $out/include
cp -r ${libxml2}/include/libxml2/libxml $out/include
'';
postInstall = ''
ln -sv ${libsoup}/include/*/libsoup $out/include
ln -sv ${libxml2}/include/*/libxml $out/include
ln -sv ${gssdp}/include/*/libgssdp $out/include
'';
meta = {
homepage = http://www.gupnp.org/;

View File

@ -16,9 +16,11 @@ stdenv.mkDerivation rec {
configureFlags = [ "--with-ssl=${openssl}" "--with-drill" ];
meta = {
meta = with stdenv.lib; {
description = "Library with the aim of simplifying DNS programming in C";
license = stdenv.lib.licenses.bsd3;
license = licenses.bsd3;
homepage = "http://www.nlnetlabs.nl/projects/ldns/";
platforms = platforms.linux;
maintainers = with maintainers; [ jgeerds ];
};
}

View File

@ -1,14 +1,16 @@
{ stdenv, fetchurl, pkgconfig, glib, gupnp_igd, gstreamer, gst_plugins_base }:
{ stdenv, fetchurl, pkgconfig, glib, gupnp_igd, gst_all_1 }:
stdenv.mkDerivation rec {
name = "libnice-0.1.4";
name = "libnice-0.1.13";
src = fetchurl {
url = "http://nice.freedesktop.org/releases/${name}.tar.gz";
sha256 = "0mxzr3y91hkjxdz1mzhxwi59la86hw2rzmd3y9c32801kkg1gra4";
sha256 = "1q8rhklbz1zla67r4mw0f7v3m5b32maj0prnr0kshcz97fgjs4b1";
};
buildInputs = [ pkgconfig glib gupnp_igd gstreamer gst_plugins_base ];
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ gst_all_1.gstreamer gst_all_1.gst-plugins-base ];
propagatedBuildInputs = [ glib gupnp_igd ];
meta = {
homepage = http://nice.freedesktop.org/wiki/;

View File

@ -1,11 +0,0 @@
--- a/setup.py 2014-03-20 22:27:14.000000000 +0100
+++ b/setup.py 2015-07-10 21:18:30.156196111 +0200
@@ -49,7 +49,7 @@
scripts = ['scripts/poezio'],
data_files = [('share/man/man1/', ['data/poezio.1'])],
- install_requires = ['sleekxmpp==1.2.4',
+ install_requires = ['sleekxmpp==1.2.5',
'dnspython3>=1.11.1'],
extras_require = {'OTR plugin': 'python-potr>=1.0',
'Screen autoaway plugin': 'pyinotify==0.9.4'}

View File

@ -1,25 +1,25 @@
diff -ruN a/src/config.py b/src/config.py
--- a/src/config.py 2014-03-20 22:27:05.000000000 +0100
+++ b/src/config.py 2015-07-10 21:24:37.583136078 +0200
@@ -18,6 +18,7 @@
--- a/src/config.py 2015-07-31 19:35:37.000000000 +0000
+++ b/src/config.py 2015-08-03 09:23:34.322098081 +0000
@@ -14,6 +14,7 @@
import logging.config
import os
import logging
+import stat
import sys
import pkg_resources
from configparser import RawConfigParser, NoOptionError, NoSectionError
from os import environ, makedirs, path, remove
@@ -279,6 +280,13 @@
copy2(default, options.filename)
elif path.isfile(other):
copy2(other, options.filename)
@@ -563,6 +564,13 @@
copy2(default, options.filename)
elif path.isfile(other):
copy2(other, options.filename)
+
+ # Inside the nixstore, the reference file is readonly, so is the copy.
+ # Make it writable by the user who just created it.
+ if os.path.exists(options.filename):
+ os.chmod(options.filename,
+ os.stat(options.filename).st_mode | stat.S_IWUSR)
+ # Inside the nixstore, the reference file is readonly, so is the copy.
+ # Make it writable by the user who just created it.
+ if os.path.exists(options.filename):
+ os.chmod(options.filename,
+ os.stat(options.filename).st_mode | stat.S_IWUSR)
+
firstrun = True
global firstrun
firstrun = True
try:

View File

@ -2,16 +2,16 @@ source $stdenv/setup
unpackPhase
mkdir -p $out
cp -r $name/* $out
mkdir -p $out/maven
cp -r $name/* $out/maven
wrapProgram $out/bin/mvn --set JAVA_HOME "$jdk"
makeWrapper $out/maven/bin/mvn $out/bin/mvn --set JAVA_HOME "$jdk"
# Add the maven-axis and JIRA plugin by default when using maven 1.x
if [ -e $out/bin/maven ]
if [ -e $out/maven/bin/maven ]
then
export OLD_HOME=$HOME
export HOME=.
$out/bin/maven plugin:download -DgroupId=maven-plugins -DartifactId=maven-axis-plugin -Dversion=0.7
$out/maven/bin/maven plugin:download -DgroupId=maven-plugins -DartifactId=maven-axis-plugin -Dversion=0.7
export HOME=OLD_HOME
fi

View File

@ -9,10 +9,10 @@ stdenv.mkDerivation rec {
};
installPhase = ''
mkdir -pv $out
cp -rv lib $out
mkdir -pv $out/gradle
cp -rv lib $out/gradle
gradle_launcher_jar=$(echo $out/lib/gradle-launcher-*.jar)
gradle_launcher_jar=$(echo $out/gradle/lib/gradle-launcher-*.jar)
test -f $gradle_launcher_jar
makeWrapper ${jdk}/bin/java $out/bin/gradle \
--set JAVA_HOME ${jdk} \

View File

@ -1,32 +0,0 @@
https://bugzilla.redhat.com/show_bug.cgi?id=1085663
Reported-by: Florian Weimer <fweimer at redhat.com>
Signed-off-by: Mark Wielaard <mjw at redhat.com>
---
libdw/dwarf_begin_elf.c | 8 +++++++-
2 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c
index 79daeac..34ea373 100644
--- a/libdw/dwarf_begin_elf.c
+++ b/libdw/dwarf_begin_elf.c
@@ -1,5 +1,5 @@
/* Create descriptor from ELF descriptor for processing file.
- Copyright (C) 2002-2011 Red Hat, Inc.
+ Copyright (C) 2002-2011, 2014 Red Hat, Inc.
This file is part of elfutils.
Written by Ulrich Drepper <drepper at redhat.com>, 2002.
@@ -282,6 +282,12 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp)
memcpy (&size, data->d_buf + 4, sizeof size);
size = be64toh (size);
+ /* Check for unsigned overflow so malloc always allocated
+ enough memory for both the Elf_Data header and the
+ uncompressed section data. */
+ if (unlikely (sizeof (Elf_Data) + size < size))
+ break;
+
Elf_Data *zdata = malloc (sizeof (Elf_Data) + size);
if (unlikely (zdata == NULL))
break;

View File

@ -3,21 +3,20 @@
# TODO: Look at the hardcoded paths to kernel, modules etc.
stdenv.mkDerivation rec {
name = "elfutils-${version}";
version = "0.158";
version = "0.163";
src = fetchurl {
urls = [
"http://fedorahosted.org/releases/e/l/elfutils/${version}/${name}.tar.bz2"
"mirror://gentoo/distfiles/${name}.tar.bz2"
];
sha256 = "0z9rprmizd7rwb3xwfmz5liii7hbiv3g2arl23h56brm45fay9xy";
sha256 = "7c774f1eef329309f3b05e730bdac50013155d437518a2ec0e24871d312f2e23";
};
patches = [
./CVE-2014-0172.patch
(fetchurl {
url = "http://fedorahosted.org/releases/e/l/elfutils/${version}/elfutils-portability.patch";
sha256 = "0y2fyjis5xrd3g2pcbcm145q2kmh52n5c74w8dwv3hqdp5ky7igd";
url = "http://fedorahosted.org/releases/e/l/elfutils/${version}/elfutils-portability-${version}.patch";
sha256 = "e4e82315dad2efaa4e4476503e7537e01b7c1b1f98a96de4ca1c7fa85f4f1045";
}) ];
# We need bzip2 in NativeInputs because otherwise we can't unpack the src,

View File

@ -1,14 +1,14 @@
{ stdenv, gcc5, pkgconfig, cmake, bluez, ffmpeg, libao, mesa, gtk2, glib
, gettext, git, libpthreadstubs, libXrandr, libXext, readline
, openal, libXdmcp, portaudio, SDL, fetchgit, libusb
, openal, libXdmcp, portaudio, fetchgit, libusb, libevdev
, libpulseaudio ? null }:
stdenv.mkDerivation rec {
name = "dolphin-emu-20150609";
name = "dolphin-emu-20150802";
src = fetchgit {
url = git://github.com/dolphin-emu/dolphin.git;
rev = "e47e4c677ad22895f8c8bc78676dd295e36f2695";
sha256 = "0g176x0rw9lssw68alr83cakldq1q38mzjwxdaf524bkvnn7fl3r";
rev = "5097a22844b850b429872f4de390bd958b11a616";
sha256 = "1qizkahbimpmgjs51av1cdmnnyvbz0j0gknmi5vdc38vrzxvwkrf";
fetchSubmodules = false;
};
@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
buildInputs = [ gcc5 pkgconfig cmake bluez ffmpeg libao mesa gtk2 glib
gettext libpthreadstubs libXrandr libXext readline openal
git libXdmcp portaudio SDL libusb libpulseaudio ];
libevdev git libXdmcp portaudio libusb libpulseaudio ];
meta = {
homepage = http://dolphin-emu.org/;

View File

@ -0,0 +1,20 @@
Description: Sanity check for memory allocation.
In gs_heap_alloc_bytes(), add a sanity check to ensure we don't overflow the
variable holding the actual number of bytes we allocate.
Origin: upstream, http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=0c0b085
Author: Chris Liddell <chris.liddell@artifex.com>
Forwarded: yes
Bug-Debian: http://bugs.debian.org/793489
Last-Update: 2015-07-26
--- a/base/gsmalloc.c
+++ b/base/gsmalloc.c
@@ -178,7 +178,7 @@
} else {
uint added = size + sizeof(gs_malloc_block_t);
- if (mmem->limit - added < mmem->used)
+ if (added <= size || mmem->limit - added < mmem->used)
set_msg("exceeded limit");
else if ((ptr = (byte *) Memento_label(malloc(added), cname)) == 0)
set_msg("failed");

View File

@ -57,6 +57,12 @@ stdenv.mkDerivation rec {
# [] # maybe sometimes jpeg2000 support
;
patches = [
./urw-font-files.patch
# fetched from debian's ghostscript 9.15_dfsg-1 (called 020150707~0c0b085.patch there)
./CVE-2015-3228.patch
];
makeFlags = [ "cups_serverroot=$(out)" "cups_serverbin=$(out)/lib/cups" ];
preConfigure = ''

View File

@ -1,12 +1,12 @@
{ stdenv, fetchurl, ... } @ args:
import ./generic.nix (args // rec {
version = "3.10.84";
version = "3.10.85";
extraMeta.branch = "3.10";
src = fetchurl {
url = "mirror://kernel/linux/kernel/v3.x/linux-${version}.tar.xz";
sha256 = "042cybswcxxzi22h96i4h73a4hcb4drhifs6l9jqlqamdn6xabd3";
sha256 = "1zn8113m6y1wqmnr6gjzrr7ly2l8860fp2kr4q9di3c2vmnmd9v9";
};
features.iwlwifi = true;

View File

@ -1,12 +1,12 @@
{ stdenv, fetchurl, ... } @ args:
import ./generic.nix (args // rec {
version = "3.12.44";
version = "3.12.45";
extraMeta.branch = "3.12";
src = fetchurl {
url = "mirror://kernel/linux/kernel/v3.x/linux-${version}.tar.xz";
sha256 = "05fyb49ibijq2iv4x25m5a77n8609b4lz8x8n8wfkdywm13479h8";
sha256 = "01p3zbhngqnkmzw38xmxd0lf97kf2h7ihgss6bgdnkpqrbzb1pqf";
};
features.iwlwifi = true;

View File

@ -1,12 +1,12 @@
{ stdenv, fetchurl, ... } @ args:
import ./generic.nix (args // rec {
version = "4.1.3";
version = "4.1.4";
extraMeta.branch = "4.1";
src = fetchurl {
url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
sha256 = "02z3palvki31qimmycz4y4wl4lb46n662qql46iah224k0q2rpcn";
sha256 = "17whsim5l9i486y5kchfpm9jhbr9lak4a1gdqygp5kwfrfyz5qiy";
};
features.iwlwifi = true;

View File

@ -1,13 +1,13 @@
{ stdenv, fetchurl, ... } @ args:
import ./generic.nix (args // rec {
version = "4.2-rc2";
modDirVersion = "4.2.0-rc2";
version = "4.2-rc5";
modDirVersion = "4.2.0-rc5";
extraMeta.branch = "4.2";
src = fetchurl {
url = "mirror://kernel/linux/kernel/v4.x/testing/linux-${version}.tar.xz";
sha256 = "068g71ns8d2j66hppmnssilf185p33w7argb0r2w9kplqq2ac99w";
sha256 = "1ir3g5in53qq50ygnwgkzjkl1pzb12ar8k1zvfzcxapddvnhayr0";
};
features.iwlwifi = true;

View File

@ -1,7 +1,7 @@
{ stdenv, fetchFromGitHub, autoreconfHook }:
let version = "3.0.10"; in
stdenv.mkDerivation rec {
stdenv.mkDerivation {
name = "xdelta-${version}";
src = fetchFromGitHub {
@ -15,16 +15,16 @@ stdenv.mkDerivation rec {
postPatch = ''
cd xdelta3
'' + stdenv.lib.optionalString doCheck ''
mkdir tmp
substituteInPlace testing/file.h --replace /tmp tmp
substituteInPlace xdelta3-test.h --replace /tmp $PWD/tmp
'';
enableParallelBuilding = true;
doCheck = true;
checkPhase = ''
mkdir $PWD/tmp
for i in testing/file.h xdelta3-test.h; do
substituteInPlace $i --replace /tmp $PWD/tmp
done
./xdelta3regtest
'';

View File

@ -20,7 +20,7 @@ let
canEfi = any (system: stdenv.system == system) (mapAttrsToList (name: _: name) efiSystems);
inPCSystems = any (system: stdenv.system == system) (mapAttrsToList (name: _: name) pcSystems);
version = "2.x-2015-07-05";
version = "2.x-2015-07-27";
unifont_bdf = fetchurl {
url = "http://unifoundry.com/unifont-5.1.20080820.bdf.gz";
@ -43,8 +43,8 @@ stdenv.mkDerivation rec {
src = fetchFromSavannah {
repo = "grub";
rev = "0d7c7f751dc5a8338497bef8b38f78153c4f0464";
sha256 = "1vkd7na3kp9ri4xsd3zznvnrjzz1qsz62fycg941pm2k18r3m7xd";
rev = "72fc110d95129410443b898e931ff7a1db75312e";
sha256 = "0l2hws8h1jhww5s0m8pkwdggacpqb7fvz2jx83syg7ynczpgzbxs";
};
nativeBuildInputs = [ autogen flex bison python autoconf automake ];

View File

@ -11,7 +11,7 @@ let
inPCSystems = any (system: stdenv.system == system) (mapAttrsToList (name: _: name) pcSystems);
version = "2.0-git-2015-07-04";
version = "1.2.0";
unifont_bdf = fetchurl {
url = "http://unifoundry.com/unifont-5.1.20080820.bdf.gz";
@ -28,12 +28,12 @@ let
in (
stdenv.mkDerivation rec {
name = "trustedGRUB-${version}";
name = "trustedGRUB2-${version}";
src = fetchgit {
url = "https://github.com/Sirrix-AG/TrustedGRUB2";
rev = "1865d07bdef7f39916790c77103fb85e99de14a4";
sha256 = "e6bd9edfeb653e98e585fd691a31533b649b2fca1f4a903c70f6ea371014c9f7";
rev = "1ff54a5fbe02ea01df5a7de59b1e0201e08d4f76";
sha256 = "8c17bd7e14dd96ae9c4e98723f4e18ec6b21d45ac486ecf771447649829d0b34";
};
nativeBuildInputs = [ autogen flex bison python autoconf automake ];

View File

@ -0,0 +1,42 @@
{ stdenv, fetchFromGitHub, libusb }:
let version = "2015-02-03"; in
stdenv.mkDerivation rec {
name = "ipad_charge-${version}";
src = fetchFromGitHub {
sha256 = "0f40hqx1dbqpwrhyf42h5982jwqv8j5zp5hwwakz6600hyqvnnz7";
rev = "bb24e1c3a79016cfdffb9d28189485766d655ec6";
repo = "ipad_charge";
owner = "mkorenkov";
};
buildInputs = [ libusb ];
postPatch = ''
substituteInPlace Makefile \
--replace " -o root -g root" "" \
--replace "/usr" "$out"
sed "/rules\.d/d" -i Makefile
'';
enableParallelBuilding = true;
preInstall = ''
mkdir -p $out/bin
'';
meta = with stdenv.lib; {
inherit version;
inherit (src.meta) homepage;
description = "Apple device USB charging utility for Linux";
longDescription = ''
USB charging control utility used to enable/disable charging of an Apple
device connected to USB port. For a list of supported devices, see
https://github.com/mkorenkov/ipad_charge#supported-devices.
'';
license = licenses.gpl2Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ nckx ];
};
}

View File

@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
pythonPackages.simplejson
pythonPackages.pyyaml
pythonPackages.requests
pythonPackages.pymongo
];
propagatedBuildInputs = [ python tornado ];

View File

@ -11,11 +11,11 @@ let
]);
in
stdenv.mkDerivation rec {
name = "dnsmasq-2.73";
name = "dnsmasq-2.75";
src = fetchurl {
url = "http://www.thekelleys.org.uk/dnsmasq/${name}.tar.xz";
sha256 = "1xnqfaw2l78f4zw4z9sgr9nl9yc233gxc3sd7hxapz2k7q883zqb";
sha256 = "1wa1d4if9q6k3hklv8xi06a59k3aqb7pik8rhi2l53i99hflw334";
};
preBuild = ''

View File

@ -10,7 +10,10 @@ stdenv.mkDerivation rec {
name = "ntopng-1.2.1";
src = fetchurl {
url = "mirror://sourceforge/project/ntop/ntopng/${name}.tgz";
urls = [
"mirror://sourceforge/project/ntop/ntopng/old/${name}.tgz"
"mirror://sourceforge/project/ntop/ntopng/${name}.tgz"
];
sha256 = "1db83cd1v4ivl8hxzzdvvdcgk22ji7mwrfnd5nnwll6kb11i364v";
};

View File

@ -1,4 +1,6 @@
{ stdenv, fetchurl, gmp, pkgconfig, python, autoreconfHook }:
{ stdenv, fetchurl, gmp, pkgconfig, python, autoreconfHook
, curl, trousers, sqlite
, enableTNC ? false }:
stdenv.mkDerivation rec {
name = "strongswan-5.3.2";
@ -10,7 +12,9 @@ stdenv.mkDerivation rec {
dontPatchELF = true;
buildInputs = [ gmp pkgconfig python autoreconfHook ];
buildInputs =
[ gmp pkgconfig python autoreconfHook ]
++ stdenv.lib.optionals enableTNC [ curl trousers sqlite ];
patches = [
./ext_auth-path.patch
@ -18,7 +22,17 @@ stdenv.mkDerivation rec {
./updown-path.patch
];
configureFlags = [ "--enable-swanctl" "--enable-cmd" ];
configureFlags =
[ "--enable-swanctl" "--enable-cmd" ]
++ stdenv.lib.optionals enableTNC [
"--disable-gmp" "--disable-aes" "--disable-md5" "--disable-sha1" "--disable-sha2" "--disable-fips-prf"
"--enable-curl" "--enable-openssl" "--enable-eap-identity" "--enable-eap-md5" "--enable-eap-mschapv2"
"--enable-eap-tnc" "--enable-eap-ttls" "--enable-eap-dynamic" "--enable-tnccs-20"
"--enable-tnc-imc" "--enable-imc-os" "--enable-imc-attestation"
"--enable-tnc-imv" "--enable-imv-attestation"
"--with-tss=trousers"
"--enable-aikgen"
"--enable-sqlite" ];
NIX_LDFLAGS = "-lgcc_s" ;

View File

@ -0,0 +1,25 @@
{ stdenv, fetchurl, cmake, libsodium }:
stdenv.mkDerivation rec {
name = "minisign-${version}";
version = "0.4";
src = fetchurl {
url = "https://github.com/jedisct1/minisign/archive/${version}.tar.gz";
sha256 = "1k1dk6piaz8pw4b9zg55n4wcpyc301mkxb873njm8mki7r8raxnw";
};
buildInputs = [ cmake libsodium ];
meta = with stdenv.lib; {
description = "A simple tool for signing files and verifying signatures";
longDescription = ''
minisign uses public key cryptography to help facilitate secure (but not
necessarily private) file transfer, e.g., of software artefacts. minisign
is similar to and compatible with OpenBSD's signify.
'';
homepage = https://jedisct1.github.io/minisign/;
license = licenses.isc;
maintainers = with maintainers; [ joachifm ];
};
}

View File

@ -0,0 +1,39 @@
{ stdenv, fetchurl, cmake, qt4, gdb, zlib }:
stdenv.mkDerivation rec {
name = "omapd-${version}";
version = "0.9.2";
src = fetchurl {
url = "http://omapd.googlecode.com/files/${name}.tgz";
sha256 = "0d7lgv957jhbsav60j50jhdy3rpcqgql74qsniwnnpm3yqj9p0xc";
};
patches = [ ./zlib.patch ];
buildInputs = [ cmake qt4 zlib gdb ];
phases = [ "unpackPhase" "patchPhase" "buildPhase" "installPhase" ];
buildPhase = ''
(cd plugins/RAMHashTables; qmake; make)
qmake
make
'';
installPhase = ''
mkdir -p $out $out/bin $out/etc $out/usr/lib/omapd/plugins
cp omapd $out/bin/.
cp omapd.conf $out/etc/.
cp plugins/libRAMHashTables.so $out/usr/lib/omapd/plugins/.
ln -s $out/usr/lib/omapd/plugins $out/bin/plugins
'';
meta = with stdenv.lib; {
homepage = http://code.google.com/p/omapd;
description = "IF-MAP Server that implements the IF-MAP v1.1 and v2.0 specifications published by the Trusted Computing Group (TCG)";
license = licenses.gpl3;
maintainers = [ maintainers.tstrobel ];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,9 @@
diff -uNr omapd-0.9.2-old/omapd.pro omapd-0.9.2/omapd.pro
--- omapd-0.9.2-old/omapd.pro 2015-08-03 09:46:47.463420480 +0200
+++ omapd-0.9.2/omapd.pro 2015-08-03 09:48:32.238657105 +0200
@@ -37,4 +37,4 @@
clientconfiguration.h \
managementserver.h \
json.h
-INCLUDEPATH += $$[QT_INSTALL_PREFIX]/src/3rdparty/zlib
+LIBS += -lz

View File

@ -1,11 +1,11 @@
{ stdenv, fetchurl, attr, keyutils }:
let version = "0.04.13"; in
let version = "0.04.14"; in
stdenv.mkDerivation rec {
name = "stress-ng-${version}";
src = fetchurl {
sha256 = "0h4alfylf15q1rdf9v42fy0bhh4c1s1fagiym445qb3yacf5p9g3";
sha256 = "17lgsxg2k7w12i1wmzq4zqavkicikzkgz2h7mzl8lrk8c85mwf3m";
url = "http://kernel.ubuntu.com/~cking/tarballs/stress-ng/${name}.tar.gz";
};

View File

@ -1918,6 +1918,8 @@ let
iodine = callPackage ../tools/networking/iodine { };
ipad_charge = callPackage ../tools/misc/ipad_charge { };
iperf2 = callPackage ../tools/networking/iperf/2.nix { };
iperf3 = callPackage ../tools/networking/iperf/3.nix { };
iperf = iperf3;
@ -2026,6 +2028,8 @@ let
minidlna = callPackage ../tools/networking/minidlna { };
minisign = callPackage ../tools/security/minisign { };
mmv = callPackage ../tools/misc/mmv { };
morituri = callPackage ../applications/audio/morituri { };
@ -2947,6 +2951,8 @@ let
shotwell = callPackage ../applications/graphics/shotwell { };
shout = callPackage ../applications/networking/irc/shout { };
shellinabox = callPackage ../servers/shellinabox { };
sic = callPackage ../applications/networking/irc/sic { };
@ -3062,6 +3068,8 @@ let
strongswan = callPackage ../tools/networking/strongswan { };
strongswanTNC = callPackage ../tools/networking/strongswan { enableTNC=true; };
su = shadow.su;
subsonic = callPackage ../servers/misc/subsonic { };
@ -3187,6 +3195,8 @@ let
trousers = callPackage ../tools/security/trousers { };
omapd = callPackage ../tools/security/omapd { };
ttf2pt1 = callPackage ../tools/misc/ttf2pt1 { };
ttfautohint = callPackage ../tools/misc/ttfautohint { };

View File

@ -2374,10 +2374,10 @@ let self = _self // overrides; _self = with self; {
};
DateTimeFormatNatural = buildPerlPackage {
name = "DateTime-Format-Natural-1.02";
name = "DateTime-Format-Natural-1.03";
src = fetchurl {
url = mirror://cpan/authors/id/S/SC/SCHUBIGER/DateTime-Format-Natural-1.02.tar.gz;
sha256 = "5479c48ade5eca9712784afee18c58308d56742a204d5ea9040d011f705303e3";
url = mirror://cpan/authors/id/S/SC/SCHUBIGER/DateTime-Format-Natural-1.03.tar.gz;
sha256 = "1m3bmv90kww8xr4dda75isvzigy8y3clgvk58zp0bxc5d7k4qdxi";
};
buildInputs = [ ModuleUtil TestMockTime ];
propagatedBuildInputs = [ Clone DateTime DateTimeTimeZone ListMoreUtils ParamsValidate boolean ];

View File

@ -275,6 +275,26 @@ let
};
};
aiodns = buildPythonPackage rec {
name = "aiodns-${version}";
version = "0.3.2";
src = pkgs.fetchurl {
url = "https://pypi.python.org/packages/source/a/aiodns/${name}.tar.gz";
sha256 = "0i9ypv9l4d59j87kkrsh1livfgnspyzcbx26jw9x58xs5z05xj7k";
};
propagatedBuildInputs = with self ; [
pycares
] ++ optional (isPy33) self.asyncio
++ optional (isPy26 || isPy27) self.trollius;
meta = {
homepage = http://github.com/saghul/aiodns;
license = licenses.mit;
description = "Simple DNS resolver for asyncio";
};
};
alabaster = buildPythonPackage rec {
name = "alabaster-0.7.3";
@ -517,6 +537,24 @@ let
};
};
asyncio = buildPythonPackage rec {
name = "asyncio-${version}";
version = "3.4.3";
disabled = (!isPy33);
src = pkgs.fetchurl {
url = "https://pypi.python.org/packages/source/a/asyncio/${name}.tar.gz";
sha256 = "0hfbqwk9y0bbfgxzg93s2wyk6gcjsdxlr5jwy97hx64ppkw0ydl3";
};
meta = {
description = "reference implementation of PEP 3156";
homepage = http://www.python.org/dev/peps/pep-3156;
license = licenses.free;
};
};
funcsigs = buildPythonPackage rec {
name = "funcsigs-0.4";
disabled = ! (isPy26 || isPy27 || isPy33 || isPyPy);
@ -4198,6 +4236,23 @@ let
};
};
pycares = buildPythonPackage rec {
name = "pycares-${version}";
version = "0.7.0";
src = pkgs.fetchurl {
url = "https://pypi.python.org/packages/source/p/pycares/${name}.tar.gz";
sha256 = "10lr3ij67khmfm14cb3sqch3vhv37f3j1whwznq6qy4prfmz5gvl";
};
propagatedBuildInputs = [ pkgs.c-ares ];
meta = {
homepage = http://github.com/saghul/pycares;
description = "Interface for c-ares";
license = licenses.mit;
};
};
pyramid = buildPythonPackage rec {
name = "pyramid-1.5.2";
@ -8079,6 +8134,26 @@ let
};
};
slixmpp = buildPythonPackage rec {
name = "slixmpp-${version}";
version = "1.0.post5";
disabled = (!isPy34);
src = pkgs.fetchurl {
url = "https://pypi.python.org/packages/source/s/slixmpp/${name}.tar.gz";
sha256 = "0ik23w3y52m30z56874wgac07j70k7b06n20j44slii8avf58p4b";
};
propagatedBuildInputs = with self ; [ aiodns pyasn1 ];
meta = {
meta = "Elegant Python library for XMPP";
license = licenses.mit;
homepage = https://dev.louiz.org/projects/slixmpp;
};
};
netaddr = buildPythonPackage rec {
name = "netaddr-0.7.5";
@ -16747,21 +16822,20 @@ let
poezio = buildPythonPackage rec {
name = "poezio-${version}";
version = "0.8.1";
version = "0.9";
namePrefix = "";
disabled = (!isPy3k);
propagatedBuildInputs = with self ; [ dnspython3 sleekxmpp ];
disabled = (!isPy34);
propagatedBuildInputs = with self ; [ aiodns slixmpp ];
patches =
let patch_base = ../development/python-modules/poezio ;
in [ "${patch_base}/make_default_config_writable.patch"
"${patch_base}/fix_requirements.patch"
];
src = pkgs.fetchurl {
url = "http://dev.louiz.org/attachments/download/52/${name}.tar.xz";
sha256 = "0n3phh3lc82609ssfvqvd4papvhykd1sf2bm88dggh2x4mypwjff";
url = "http://dev.louiz.org/attachments/download/91/${name}.tar.xz";
sha256 = "1vc7zn4rp0ds0cdh1xcmbwx6w2qh4pnpzi5mdnj3rpl7xdr6jqzi";
};
meta = {
@ -16825,4 +16899,27 @@ let
};
};
mps-youtube = buildPythonPackage rec {
name = "mps-youtube-${version}";
version = "0.2.5";
disabled = (!isPy3k);
src = pkgs.fetchFromGitHub {
owner = "mps-youtube";
repo = "mps-youtube";
rev = "7e457d2b4700387b88a3c96579e13cb76ca1f06b";
sha256 = "1811vlhgfi4rasjfsfdl7x174s75zk3x08p2z05wfcvinflfgxly";
};
propagatedBuildInputs = with self; [ pafy ];
meta = with stdenv.lib; {
description = "Terminal based YouTube player and downloader";
homepage = http://github.com/np1/mps-youtube;
license = licenses.gpl3;
maintainers = with maintainers; [ odi ];
};
};
}; in pythonPackages

View File

@ -7,15 +7,15 @@
{ runCommand, fetchFromGitHub, git }:
let
version = "2015-07-07";
rev = "fd9e3e4a350f5df0d975913bcc29d2051a509199";
version = "2015-08-03";
rev = "dd3e0cecc30d0efbb50dfe76c83900568502af45";
src = fetchFromGitHub {
inherit rev;
owner = "rust-lang";
repo = "crates.io-index";
sha256 = "1vm28gfq4fmialz5ab8cxk5q1kdf6hlg3ni41qpy9k61pp9bqdwr";
sha256 = "0wlbaspa0mvljhkjjnglxwpp9b4mzcxpkdzrciljxwdsr8jvlz30";
};
in