summaryrefslogtreecommitdiffstats
path: root/makefu
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2018-02-28 22:51:18 +0100
committertv <tv@krebsco.de>2018-02-28 22:51:18 +0100
commitbecf1ce7ac7688692c3770571387b3761be11698 (patch)
tree6238277fa4c42de03b393d89cdbb12d8582afba4 /makefu
parent2934d4524bcbae13043d684a27597c8b08c0851b (diff)
parent793742b9d1b2eab942e5d06ed27028c636cda583 (diff)
Merge remote-tracking branch 'prism/master'
Diffstat (limited to 'makefu')
-rw-r--r--makefu/1systems/wbob/config.nix6
-rw-r--r--makefu/1systems/x/config.nix36
-rw-r--r--makefu/2configs/git/cgit-retiolum.nix1
-rw-r--r--makefu/2configs/hydra/stockholm.nix34
-rw-r--r--makefu/2configs/urlwatch/default.nix4
-rw-r--r--makefu/3modules/awesome-extra.nix10
-rw-r--r--makefu/5pkgs/awesomecfg/default.nix25
-rw-r--r--makefu/5pkgs/awesomecfg/full.cfg14
-rw-r--r--makefu/5pkgs/custom/default.nix3
-rw-r--r--makefu/5pkgs/custom/qcma/default.nix36
-rw-r--r--makefu/5pkgs/default.nix2
-rw-r--r--makefu/5pkgs/dionaea/default.nix50
-rw-r--r--makefu/5pkgs/farpd/default.nix63
-rw-r--r--makefu/5pkgs/mcomix/default.nix4
-rw-r--r--makefu/5pkgs/opl-utils/default.nix3
-rw-r--r--makefu/5pkgs/programs-db/default.nix12
-rw-r--r--makefu/5pkgs/shackie/default.nix33
-rw-r--r--makefu/6tests/data/secrets/torrent-secrets/auth.nix1
18 files changed, 130 insertions, 207 deletions
diff --git a/makefu/1systems/wbob/config.nix b/makefu/1systems/wbob/config.nix
index 6434ba273..637d8e2d8 100644
--- a/makefu/1systems/wbob/config.nix
+++ b/makefu/1systems/wbob/config.nix
@@ -29,7 +29,8 @@ in {
# <stockholm/makefu/2configs/vncserver.nix>
# Services
- <stockholm/makefu/2configs/remote-build/slave.nix>
+ <stockholm/makefu/2configs/hydra/stockholm.nix>
+
<stockholm/makefu/2configs/share/wbob.nix>
(let
musicDirectory = "/data/music";
@@ -83,6 +84,9 @@ in {
load-module module-filter-apply
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
load-module module-switch-on-connect
+ # may be required for "system-wide" pulse to connect to bluetooth
+ #module-bluez5-device
+ #module-bluez5-discover
'';
};
# connect via https://nixos.wiki/wiki/Bluetooth#Using_Bluetooth_headsets_with_PulseAudio
diff --git a/makefu/1systems/x/config.nix b/makefu/1systems/x/config.nix
index b4d4aa66e..ad2ad8779 100644
--- a/makefu/1systems/x/config.nix
+++ b/makefu/1systems/x/config.nix
@@ -100,7 +100,43 @@ with import <stockholm/lib>;
];
};
}
+ { # bluetooth+pulse config
+ # for blueman-applet
+ users.users.makefu.packages = [
+ pkgs.blueman
+ ];
+ hardware.pulseaudio = {
+ enable = true;
+ package = pkgs.pulseaudioFull;
+ # systemWide = true;
+ support32Bit = true;
+ configFile = pkgs.writeText "default.pa" ''
+ load-module module-udev-detect
+ load-module module-bluetooth-policy
+ load-module module-bluetooth-discover
+ load-module module-native-protocol-unix
+ load-module module-always-sink
+ load-module module-console-kit
+ load-module module-systemd-login
+ load-module module-intended-roles
+ load-module module-position-event-sounds
+ load-module module-filter-heuristics
+ load-module module-filter-apply
+ load-module module-switch-on-connect
+ '';
+ };
+ # presumably a2dp Sink
+ # Enable profile:
+ ## pacmd set-card-profile "$(pactl list cards short | egrep -o bluez_card[[:alnum:]._]+)" a2dp_sink
+ hardware.bluetooth.extraConfig = '';
+ [general]
+ Enable=Source,Sink,Media,Socket
+ '';
+
+ # connect via https://nixos.wiki/wiki/Bluetooth#Using_Bluetooth_headsets_with_PulseAudio
+ hardware.bluetooth.enable = true;
+ }
{ # auto-mounting
services.udisks2.enable = true;
services.devmon.enable = true;
diff --git a/makefu/2configs/git/cgit-retiolum.nix b/makefu/2configs/git/cgit-retiolum.nix
index eacbd99cf..1109e2519 100644
--- a/makefu/2configs/git/cgit-retiolum.nix
+++ b/makefu/2configs/git/cgit-retiolum.nix
@@ -28,6 +28,7 @@ let
init-stockholm = {
cgit.desc = "Init stuff for stockholm";
};
+ hydra-stockholm = { };
};
priv-repos = mapAttrs make-priv-repo {
diff --git a/makefu/2configs/hydra/stockholm.nix b/makefu/2configs/hydra/stockholm.nix
new file mode 100644
index 000000000..4bdb09213
--- /dev/null
+++ b/makefu/2configs/hydra/stockholm.nix
@@ -0,0 +1,34 @@
+# iterative:
+# $ hydra-create-user krebs --password derp --role admin
+# curl 'http://hydra.wbob.r/project/.new' -X PUT -H 'Host: hydra.wbob.r' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'X-Requested-With: XMLHttpRequest' -H 'Cookie: redirect_to=%252F; hydra_session=abcdefghijklmnopqrstuvwxyz' -H 'Connection: keep-alive' --data 'enabled=on&visible=on&name=stockholm&displayname=Stockholm&description=make+all+systems+into+1systems&homepage=https%3A%2F%2Fkrebsco.de&owner=krebs&declfile=spec.json&decltype=git&declvalue=http%3A%2F%2Fcgit.euer.krebsco.de%2Fhydra-stockholm'
+
+{
+
+ # TODO postgres backup
+ services.postgresql.enable = true;
+
+ services.hydra = {
+ enable = true;
+ hydraURL = "http://hydra.wbob.r"; # externally visible URL
+ notificationSender = "hydra@wbob.r";
+ # you will probably also want, otherwise *everything* will be built from scratch
+ useSubstitutes = true;
+ port = 3030;
+ buildMachinesFiles = [];
+ };
+
+ networking.firewall.allowedTCPPorts = [ 80 ];
+ services.nginx = {
+ enable = true;
+ virtualHosts."hydra.wbob.r" = {
+ locations."/" = {
+ proxyPass = "http://localhost:3030/";
+ extraConfig = ''
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ '';
+ };
+ };
+ };
+}
diff --git a/makefu/2configs/urlwatch/default.nix b/makefu/2configs/urlwatch/default.nix
index 677950f43..d0fb4fe41 100644
--- a/makefu/2configs/urlwatch/default.nix
+++ b/makefu/2configs/urlwatch/default.nix
@@ -34,7 +34,7 @@ in {
http://guest:derpi@cvs2svn.tigris.org/svn/cvs2svn/tags/
http://ftp.debian.org/debian/pool/main/a/apt-cacher-ng/
https://erdgeist.org/gitweb/opentracker/info/refs?service=git-upload-pack
- https://git.tasktools.org/TM/taskd/info/refs?service=git-upload-pack
+
http://www.iozone.org/src/current/
{
@@ -51,6 +51,8 @@ in {
"embray/d2to1"
"dorimanx/exfat-nofuse"
"rapid7/metasploit-framework"
+ "GothenburgBitFactory/taskserver"
+ "GothenburgBitFactory/taskwarrior"
];
};
}
diff --git a/makefu/3modules/awesome-extra.nix b/makefu/3modules/awesome-extra.nix
index 0561c15a8..e4a79aa87 100644
--- a/makefu/3modules/awesome-extra.nix
+++ b/makefu/3modules/awesome-extra.nix
@@ -29,15 +29,7 @@ let
nixpkgs.config.packageOverrides = pkgs: rec {
awesome = pkgs.stdenv.lib.overrideDerivation pkgs.awesome (oldAttrs : {
postFixup = let
- rclua = pkgs.substituteAll {
- src = cfg.baseConfig;
- modkey = cfg.modkey;
- # inherit (cfg) modkey;
- amixer = "${pkgs.alsaUtils}/bin/amixer";
- xlock = "${pkgs.xlockmore}/bin/xlock";
- xbacklight = "${pkgs.xorg.xbacklight}/bin/xbacklight";
-
- };
+ rclua = cfg.baseConfig.override { inherit (cfg) modkey; };
in "cp ${rclua} $out/etc/xdg/awesome/rc.lua";
});
};
diff --git a/makefu/5pkgs/awesomecfg/default.nix b/makefu/5pkgs/awesomecfg/default.nix
index 3c9340692..7e9724ec8 100644
--- a/makefu/5pkgs/awesomecfg/default.nix
+++ b/makefu/5pkgs/awesomecfg/default.nix
@@ -1,7 +1,24 @@
-_:
+{ pkgs
+, lib
+, alsaUtils
+, xlockmore
+, xbacklight
+, modkey?"Mod4"
+, ... }:
{
- # replace: @amixer@ @xlock@ @xbacklight@
- full = ./full.cfg;
- kiosk = ./kiosk.lua;
+ # replace: @alsaUtils@ @xlockmore@ @xbacklight@ @modkey@
+ full = lib.makeOverridable pkgs.substituteAll {
+ name = "awesome_full_config";
+ inherit alsaUtils xlockmore xbacklight modkey;
+ isExecutable = false;
+ src = ./full.cfg;
+ };
+
+ kiosk = lib.makeOverridable pkgs.substituteAll {
+ name = "awesome_kiosk_config";
+ inherit alsaUtils xlockmore xbacklight modkey;
+ isExecutable = false;
+ src = ./kiosk.lua;
+ };
}
diff --git a/makefu/5pkgs/awesomecfg/full.cfg b/makefu/5pkgs/awesomecfg/full.cfg
index 993942771..3488d0102 100644
--- a/makefu/5pkgs/awesomecfg/full.cfg
+++ b/makefu/5pkgs/awesomecfg/full.cfg
@@ -365,22 +365,22 @@ globalkeys = awful.util.table.join(
{description = "restore minimized", group = "client"}),
awful.key({ }, "XF86MonBrightnessUp", function ()
- awful.util.spawn("@xbacklight@ -inc 5", false) end),
+ awful.util.spawn("@xbacklight@/bin/xbacklight -inc 5", false) end),
awful.key({ }, "XF86MonBrightnessDown", function ()
- awful.util.spawn("@xbacklight@ -dec 5", false) end),
+ awful.util.spawn("@xbacklight@/bin/xbacklight -dec 5", false) end),
awful.key({ }, "XF86AudioRaiseVolume", function ()
- awful.util.spawn("@amixer@ set Master 5%+", false) end),
+ awful.util.spawn("@alsaUtils@/bin/amixer set Master 5%+", false) end),
awful.key({ }, "XF86AudioLowerVolume", function ()
- awful.util.spawn("@amixer@ set Master 5%-", false) end),
+ awful.util.spawn("@alsaUtils@/bin/amixer set Master 5%-", false) end),
awful.key({ }, "XF86AudioMute", function ()
- awful.util.spawn("@amixer@ -q -D default sset Master toggle", false) end),
+ awful.util.spawn("@alsaUtils@/bin/amixer -q -D default sset Master toggle", false) end),
-- Prompt
awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end,
{description = "run prompt", group = "launcher"}),
- awful.key({ modkey,"Control" }, "BackSpace", function () awful.util.spawn("@xlock@ -mode blank") end),
- awful.key({ }, "XF86ScreenSaver", function () awful.util.spawn("@xlock@ -mode blank") end),
+ awful.key({ modkey,"Control" }, "BackSpace", function () awful.util.spawn("@xlockmore@/bin/xlock -mode blank") end),
+ awful.key({ }, "XF86ScreenSaver", function () awful.util.spawn("@xlockmore@/bin/xlock -mode blank") end),
awful.key({ modkey }, "x",
function ()
diff --git a/makefu/5pkgs/custom/default.nix b/makefu/5pkgs/custom/default.nix
deleted file mode 100644
index 626938cdc..000000000
--- a/makefu/5pkgs/custom/default.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{}:
-{
-}
diff --git a/makefu/5pkgs/custom/qcma/default.nix b/makefu/5pkgs/custom/qcma/default.nix
index d67cda142..dfb57c880 100644
--- a/makefu/5pkgs/custom/qcma/default.nix
+++ b/makefu/5pkgs/custom/qcma/default.nix
@@ -1,6 +1,9 @@
{ lib, stdenv, fetchFromGitHub, fetchgit, libusb, libtool, autoconf, pkgconfig, git,
-gettext, automake, libxml2 , qmake,
-qtbase, qttools, qtmultimedia, libnotify, ffmpeg, gdk_pixbuf }:
+gettext, automake, libxml2
+, autoreconfHook
+, qmake4Hook
+, qmake
+, qtbase, qttools, qtmultimedia, libnotify, ffmpeg, gdk_pixbuf }:
let
libvitamtp = stdenv.mkDerivation rec {
name = "libvitamtp-${version}";
@@ -13,8 +16,8 @@ let
sha256 = "09c9f7gqpyicfpnhrfb4r67s2hci6hh31bzmqlpds4fywv5mzaf8";
};
- buildInputs = [ libusb libxml2 libtool autoconf automake gettext pkgconfig ];
- preConfigure = "sh ./autogen.sh";
+ buildInputs = [ libusb libxml2 libtool autoconf automake gettext pkgconfig
+ autoreconfHook ];
meta = {
description = "Content Manager Assistant for the PS Vita";
@@ -26,40 +29,29 @@ let
};
in stdenv.mkDerivation rec {
name = "qcma-${version}";
- version = "0.3.13";
+ version = "8e6cafedc0f47733f33323f829624e3fc847a176";
- src = fetchgit {
- url = "git://github.com/codestation/qcma.git";
- rev = "refs/tags/v"+version;
- leaveDotGit = true;
- sha256 = "164abjwlw2nw2i30wlwpsavz1zjkp6a14yprvinma5hflkw4yj6i";
+ src = fetchFromGitHub {
+ owner = "codestation";
+ repo = "qcma";
+ rev = version;
+ sha256 = "1l95kx3x4pf5iwmwigbch5c6n2h27lls5qiy4xh15v59p5442yw5";
};
preConfigure = ''
lrelease common/resources/translations/*.ts
'';
- # TODO: manually adding qtbase and qtmultimedia to the library path is shit,
- # this should be done somewhere before when building the project, idk.
- installPhase = ''
- make INSTALL_ROOT="$(out)" install
- for i in qcma qcma_cli; do
- wrapQtProgram $out/bin/$i --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [
- qtbase qtmultimedia ]}
- done
- '';
-
enableParallelBuilding = true;
buildInputs = [ gdk_pixbuf ffmpeg libnotify libvitamtp git qtmultimedia qtbase ];
- nativeBuildInputs = [ qmake qttools pkgconfig ];
+ nativeBuildInputs = [ qttools pkgconfig qmake ];
meta = {
description = "Content Manager Assistant for the PS Vita";
homepage = https://github.com/codestation/qcma;
license = stdenv.lib.licenses.gpl2;
platforms = stdenv.lib.platforms.linux;
- broken = true;
maintainers = with stdenv.lib.maintainers; [ makefu ];
};
}
diff --git a/makefu/5pkgs/default.nix b/makefu/5pkgs/default.nix
index 80a0d33cd..b1d6df67e 100644
--- a/makefu/5pkgs/default.nix
+++ b/makefu/5pkgs/default.nix
@@ -3,7 +3,7 @@ self: super: let
# This callPackage will try to detect obsolete overrides.
callPackage = path: args: let
- override = super.callPackage path args;
+ override = super.callPackage path args;
upstream = optionalAttrs (override ? "name")
(super.${(parseDrvName override.name).name} or {});
in if upstream ? "name" &&
diff --git a/makefu/5pkgs/dionaea/default.nix b/makefu/5pkgs/dionaea/default.nix
deleted file mode 100644
index fef197c20..000000000
--- a/makefu/5pkgs/dionaea/default.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{ stdenv, lib, pkgs, fetchurl,fetchFromGitHub,
- libpcap, libdnet, libevent, readline, autoconf, automake, libtool, zlib, pcre,
- libev,
- ... }:
-let
- liblcfg = stdenv.mkDerivation rec {
- name = "liblcfg-${version}";
- version = "750bc90";
- src = fetchFromGitHub {
- owner = "ThomasAdam";
- repo = "liblcfg";
- rev = version;
- sha256 = "1k3r47p81paw5802jklx9xqbjrxr26pahipxn9nq3177qhxxibkr";
- };
- buildInputs = with pkgs;[ autoconf automake ];
- preConfigure = ''autoreconf -fi'';
- sourceRoot = "${name}-src/code";
- };
-in stdenv.mkDerivation rec {
- name = "liblcfg-${version}";
-
- #version = "1.5c"; #original, does not compile due to libc errors
- #src = fetchurl {
- # url = "http://www.honeyd.org/uploads/honeyd-${version}.tar.gz";
- # sha256 = "0vcih16fk5pir5ssfil8x79nvi62faw0xvk8s5klnysv111db1ii";
- #};
-
- #version = "64d087c"; # honeyd-1.6.7
- # sha256 = "0zhnn13r24y1q494xcfx64vyp84zqk8qmsl41fq2674230bn0p31";
-
- version = "6756787f94c4f1ac53d1e5545d052774a0446c04";
- src = fetchFromGitHub {
- owner = "rep";
- repo = "dionaea";
- rev = version;
- sha256 = "04zjr9b7x0rqwzgb9gfxq6pclb817gz4qaghdl8xa79bqf9vv2p7";
- };
-
- buildInputs = with pkgs;[ libtool automake autoconf ];
- configureFlags = [
- "--with-liblcfg=${liblcfg}"
- "--with-libpcap=${libpcap}"
- ];
-
- meta = {
- homepage = http://www.honeyd.org/;
- description = "virtual Honeypots";
- license = lib.licenses.gpl2;
- };
-}
diff --git a/makefu/5pkgs/farpd/default.nix b/makefu/5pkgs/farpd/default.nix
deleted file mode 100644
index 8dfcee90c..000000000
--- a/makefu/5pkgs/farpd/default.nix
+++ /dev/null
@@ -1,63 +0,0 @@
-{ stdenv, lib, pkgs, fetchurl,fetchFromGitHub,
- libpcap, libdnet, libevent, readline, autoconf, automake, libtool, zlib, pcre,
- ... }:
-stdenv.mkDerivation rec {
- name = "farpd-${version}";
-
-
- version = "0.2";
- src = fetchurl {
- url = https://launchpad.net/ubuntu/+archive/primary/+files/farpd_0.2.orig.tar.gz ;
- sha256 = "1m3pynvynr4vgkwh7z5i0yqlang2y0ph32cys3vbi2hx2apk9abd";
- };
-
- buildInputs = with pkgs;[
- automake
- gnugrep
- libpcap
- libdnet
- pcre
- libevent.out # requires .so and .h
- readline
- autoconf
- libtool
- zlib
- coreutils
- python
- pythonPackages.pysqlite
- ];
- patches = [
- ( fetchurl {
- url = https://launchpad.net/ubuntu/+archive/primary/+files/farpd_0.2-11.diff.gz;
- sha256 = "2c246b37de8aab9c73f955fb77101adefd90637d03f582b9f8ffae2903af2f94";
- })
- ];
- # removes user install script from Makefile before automake
- #patches = [ ./autoconf.patch ];
- preConfigure = ''
- autoreconf -fi
-
- substituteInPlace configure \
- --replace "dumbnet" "dnet" \
- --replace "libpcap.a" "libpcap.so" \
- --replace "libevent.a" "libevent.so" \
- --replace "net/bpf.h" "pcap/bpf.h"
- '';
-
- makeFlags = [ "LIBS=-lz" ];
- configureFlags = [
- "--with-libpcap=${libpcap}"
- "--with-libevent=${libevent}"
- "--with-libdnet=${libdnet}"
- ];
- postInstall = ''
- mv $out/sbin/arpd $out/sbin/farpd
- mv $out/share/man/man8/arpd.8 $out/share/man/man8/farpd.8
- '';
-
- meta = {
- homepage = https://launchpad.net/ubuntu/+source/farpd/ ;
- description = "fake arp";
- license = lib.licenses.gpl2;
- };
-}
diff --git a/makefu/5pkgs/mcomix/default.nix b/makefu/5pkgs/mcomix/default.nix
index a12e2e821..7fb9cd375 100644
--- a/makefu/5pkgs/mcomix/default.nix
+++ b/makefu/5pkgs/mcomix/default.nix
@@ -11,6 +11,10 @@ python2Packages.buildPythonPackage rec {
propagatedBuildInputs = with python2Packages;
[ python2Packages.pygtk gtk3 python2Packages.pillow ];
+ # for module in sys.modules.itervalues():
+ # RuntimeError: dictionary changed size during iteration
+ doCheck = false;
+
meta = {
homepage = https://github.com/pyload/pyload;
description = "Free and Open Source download manager written in Python";
diff --git a/makefu/5pkgs/opl-utils/default.nix b/makefu/5pkgs/opl-utils/default.nix
index f4430f333..5799b8e0f 100644
--- a/makefu/5pkgs/opl-utils/default.nix
+++ b/makefu/5pkgs/opl-utils/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
meta = {
homepage = https://github.com/ifcaro/Open-PS2-Loader;
description = "open-ps2-loader utils (opl2iso,iso2opl,genvmc)";
- license = lib.licenses.afl3;
+ ## not yet in stable
+ # license = lib.licenses.afl3;
};
}
diff --git a/makefu/5pkgs/programs-db/default.nix b/makefu/5pkgs/programs-db/default.nix
deleted file mode 100644
index f40b1b96e..000000000
--- a/makefu/5pkgs/programs-db/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ stdenv }:
-
-stdenv.mkDerivation rec {
- name = "programs-db";
- src = builtins.fetchTarball https://nixos.org/channels/nixos-unstable/nixexprs.tar.xz ;
-
- phases = [ "unpackPhase" "installPhase" ];
- installPhase = ''
- cp programs.sqlite $out
- '';
-
-}
diff --git a/makefu/5pkgs/shackie/default.nix b/makefu/5pkgs/shackie/default.nix
deleted file mode 100644
index b6cf8afe6..000000000
--- a/makefu/5pkgs/shackie/default.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{ pkgs, fetchFromGitHub, ... }:
-with pkgs.python3Packages;
-let
- asyncio-irc = buildPythonPackage rec {
- name = "asyncio-irc-${version}";
- version = "2016-09-02";
- src = fetchFromGitHub {
- owner = "watchtower";
- repo = "asyncirc";
- rev = "5384d19";
- sha256 = "0xgzdvp0ig0im7r3vbqd3a9rzac0lkk2mvf7y4fw56p8k61df8nv";
- };
- propagatedBuildInputs = [ blinker ];
- };
-in
-buildPythonPackage rec {
- name = "shackie-${version}";
- version = "2017-04-24";
- propagatedBuildInputs = [
- asyncio-irc
- beautifulsoup4
- lxml
- pytz
- redis
- requests
- ];
- src = fetchFromGitHub {
- owner = "shackspace";
- repo = "shackie";
- rev = "e717ec7";
- sha256 = "1ffbjm3x2xcyxl42hfsjs5xg1pm0xsprdi5if9zxa5ycqydmiw3l";
- };
-}
diff --git a/makefu/6tests/data/secrets/torrent-secrets/auth.nix b/makefu/6tests/data/secrets/torrent-secrets/auth.nix
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/makefu/6tests/data/secrets/torrent-secrets/auth.nix
@@ -0,0 +1 @@
+{}