git: 933f1d5d63a4 - main - x11/kickoff: add new port

From: Jan Beich <jbeich_at_FreeBSD.org>
Date: Tue, 08 Feb 2022 00:57:42 UTC
The branch main has been updated by jbeich:

URL: https://cgit.FreeBSD.org/ports/commit/?id=933f1d5d63a4e393d7b0b86bcd721b8ea5887e58

commit 933f1d5d63a4e393d7b0b86bcd721b8ea5887e58
Author:     Jan Beich <jbeich@FreeBSD.org>
AuthorDate: 2021-08-01 15:46:05 +0000
Commit:     Jan Beich <jbeich@FreeBSD.org>
CommitDate: 2022-02-08 00:45:00 +0000

    x11/kickoff: add new port
    
    kickoff is a program launcher for Wayland. All programs found in $PATH
    are included in the search results. This list is then combined with
    your previous searches and sorted by amount of usage and if it fits
    the search query.
    
    Features:
    - Wayland native (only wlroots based compositors though)
    - Fuzzy search
    - Fast and snappy
    - Remembers often used applications
    - Argument support for launched programs
    - Paste support
    
    https://github.com/j0ru/kickoff
---
 x11/Makefile                 |   1 +
 x11/kickoff/Makefile         | 221 +++++++++++++++++++++++
 x11/kickoff/distinfo         | 405 +++++++++++++++++++++++++++++++++++++++++++
 x11/kickoff/files/patch-zbus | 226 ++++++++++++++++++++++++
 x11/kickoff/pkg-descr        |  14 ++
 5 files changed, 867 insertions(+)

diff --git a/x11/Makefile b/x11/Makefile
index eec0ec1a6428..9b6516b4e665 100644
--- a/x11/Makefile
+++ b/x11/Makefile
@@ -140,6 +140,7 @@
     SUBDIR += kf5-kwayland
     SUBDIR += kf5-kwindowsystem
     SUBDIR += kf5-plasma-framework
+    SUBDIR += kickoff
     SUBDIR += kitty
     SUBDIR += konsole
     SUBDIR += lavalauncher
diff --git a/x11/kickoff/Makefile b/x11/kickoff/Makefile
new file mode 100644
index 000000000000..f2a31d3f4ca6
--- /dev/null
+++ b/x11/kickoff/Makefile
@@ -0,0 +1,221 @@
+PORTNAME=	kickoff
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.4.5
+CATEGORIES=	x11
+
+MAINTAINER=	jbeich@FreeBSD.org
+COMMENT=	Minimalistic program launcher
+
+LICENSE=	GPLv3+
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+LIB_DEPENDS=	libfontconfig.so:x11-fonts/fontconfig
+
+USES=		cargo
+USE_GITHUB=	yes
+GH_ACCOUNT=	j0ru
+PLIST_FILES=	bin/${PORTNAME}
+
+CARGO_CRATES=	adler-1.0.2 \
+		adler32-1.2.0 \
+		ahash-0.4.7 \
+		aho-corasick-0.7.18 \
+		arrayref-0.3.6 \
+		arrayvec-0.4.12 \
+		arrayvec-0.5.2 \
+		async-io-1.6.0 \
+		autocfg-1.0.1 \
+		base64-0.13.0 \
+		bitflags-0.9.1 \
+		bitflags-1.2.1 \
+		blake2b_simd-0.5.11 \
+		block-0.1.6 \
+		bytemuck-1.7.2 \
+		byteorder-1.4.3 \
+		bytes-1.0.1 \
+		cache-padded-1.1.1 \
+		calloop-0.7.2 \
+		cc-1.0.69 \
+		cfg-if-0.1.10 \
+		cfg-if-1.0.0 \
+		chrono-0.4.19 \
+		cmake-0.1.45 \
+		color_quant-1.1.0 \
+		concurrent-queue-1.2.2 \
+		constant_time_eq-0.1.5 \
+		core-foundation-0.9.1 \
+		core-foundation-sys-0.8.2 \
+		core-graphics-0.22.2 \
+		core-graphics-types-0.1.1 \
+		core-text-19.2.0 \
+		crc32fast-1.2.1 \
+		crossbeam-channel-0.5.1 \
+		crossbeam-deque-0.8.1 \
+		crossbeam-epoch-0.9.5 \
+		crossbeam-utils-0.8.5 \
+		css-color-0.1.1 \
+		deflate-0.8.6 \
+		derivative-2.2.0 \
+		dirs-1.0.5 \
+		dlib-0.5.0 \
+		downcast-rs-1.2.0 \
+		either-1.6.1 \
+		enumflags2-0.6.4 \
+		enumflags2_derive-0.6.4 \
+		errno-0.2.7 \
+		errno-dragonfly-0.1.1 \
+		exec-0.3.1 \
+		expat-sys-2.1.6 \
+		fastrand-1.5.0 \
+		font-loader-0.11.0 \
+		fontdue-0.5.2 \
+		foreign-types-0.3.2 \
+		foreign-types-shared-0.1.1 \
+		freetype-sys-0.13.1 \
+		futures-0.3.16 \
+		futures-channel-0.3.16 \
+		futures-core-0.3.16 \
+		futures-executor-0.3.16 \
+		futures-io-0.3.16 \
+		futures-lite-1.12.0 \
+		futures-macro-0.3.16 \
+		futures-sink-0.3.16 \
+		futures-task-0.3.16 \
+		futures-util-0.3.16 \
+		fuzzy-matcher-0.3.7 \
+		gcc-0.3.55 \
+		getrandom-0.1.16 \
+		gif-0.11.2 \
+		hashbrown-0.9.1 \
+		hermit-abi-0.1.19 \
+		hex-0.4.3 \
+		image-0.23.14 \
+		instant-0.1.10 \
+		jpeg-decoder-0.1.22 \
+		lazy_static-1.4.0 \
+		lexical-2.2.4 \
+		lexical-core-0.4.8 \
+		libc-0.2.98 \
+		libloading-0.7.0 \
+		lock_api-0.4.4 \
+		log-0.4.14 \
+		mac-notification-sys-0.3.0 \
+		malloc_buf-0.0.6 \
+		memchr-2.4.0 \
+		memmap2-0.2.3 \
+		memoffset-0.6.4 \
+		miniz_oxide-0.3.7 \
+		miniz_oxide-0.4.4 \
+		mio-0.7.13 \
+		miow-0.3.7 \
+		nb-connect-1.2.0 \
+		nix-0.19.1 \
+		nix-0.20.0 \
+		nix-0.22.0 \
+		nodrop-0.1.14 \
+		nom-6.1.2 \
+		notify-rust-4.5.2 \
+		ntapi-0.3.6 \
+		num-integer-0.1.44 \
+		num-iter-0.1.42 \
+		num-rational-0.3.2 \
+		num-traits-0.2.14 \
+		num_cpus-1.13.0 \
+		objc-0.2.7 \
+		objc-foundation-0.1.1 \
+		objc_id-0.1.1 \
+		once_cell-1.8.0 \
+		parking-2.0.0 \
+		parking_lot-0.11.1 \
+		parking_lot_core-0.8.3 \
+		pin-project-lite-0.2.7 \
+		pin-utils-0.1.0 \
+		pkg-config-0.3.19 \
+		png-0.16.8 \
+		polling-2.1.0 \
+		proc-macro-crate-0.1.5 \
+		proc-macro-crate-1.0.0 \
+		proc-macro-hack-0.5.19 \
+		proc-macro-nested-0.1.7 \
+		proc-macro2-1.0.28 \
+		quote-0.3.15 \
+		quote-1.0.9 \
+		rayon-1.5.1 \
+		rayon-core-1.9.1 \
+		redox_syscall-0.1.57 \
+		redox_syscall-0.2.9 \
+		redox_users-0.3.5 \
+		regex-1.5.4 \
+		regex-syntax-0.6.25 \
+		rust-argon2-0.8.3 \
+		rustc_version-0.2.3 \
+		ryu-1.0.5 \
+		scoped-tls-1.0.0 \
+		scoped_threadpool-0.1.9 \
+		scopeguard-1.1.0 \
+		semver-0.9.0 \
+		semver-parser-0.7.0 \
+		serde-1.0.127 \
+		serde_derive-1.0.127 \
+		serde_repr-0.1.7 \
+		servo-fontconfig-0.5.1 \
+		servo-fontconfig-sys-5.1.0 \
+		shellwords-1.1.0 \
+		signal-hook-registry-1.4.0 \
+		simplelog-0.10.0 \
+		slab-0.4.3 \
+		smallvec-1.6.1 \
+		smithay-client-toolkit-0.14.0 \
+		smithay-clipboard-0.6.4 \
+		socket2-0.4.1 \
+		static_assertions-0.3.4 \
+		static_assertions-1.1.0 \
+		strum-0.8.0 \
+		strum_macros-0.8.0 \
+		syn-0.11.11 \
+		syn-1.0.74 \
+		synom-0.11.3 \
+		termcolor-1.1.2 \
+		thiserror-1.0.26 \
+		thiserror-impl-1.0.26 \
+		thread_local-1.1.3 \
+		tiff-0.6.1 \
+		time-0.1.44 \
+		tokio-1.9.0 \
+		tokio-macros-1.3.0 \
+		toml-0.5.8 \
+		ttf-parser-0.12.3 \
+		unicode-xid-0.0.4 \
+		unicode-xid-0.2.2 \
+		version_check-0.9.3 \
+		waker-fn-1.1.0 \
+		wasi-0.9.0+wasi-snapshot-preview1 \
+		wasi-0.10.0+wasi-snapshot-preview1 \
+		wayland-client-0.28.6 \
+		wayland-client-0.29.0 \
+		wayland-commons-0.28.6 \
+		wayland-commons-0.29.0 \
+		wayland-cursor-0.28.6 \
+		wayland-protocols-0.28.6 \
+		wayland-scanner-0.28.6 \
+		wayland-scanner-0.29.0 \
+		wayland-sys-0.28.6 \
+		wayland-sys-0.29.0 \
+		weezl-0.1.5 \
+		wepoll-ffi-0.1.2 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-util-0.1.5 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		winrt-0.4.0 \
+		winrt-notification-0.2.4 \
+		xcursor-0.3.3 \
+		xdg-2.2.0 \
+		xml-rs-0.6.1 \
+		xml-rs-0.8.4 \
+		zbus-1.9.1 \
+		zbus_macros-1.9.1 \
+		zvariant-2.8.0 \
+		zvariant_derive-2.8.0
+
+.include <bsd.port.mk>
diff --git a/x11/kickoff/distinfo b/x11/kickoff/distinfo
new file mode 100644
index 000000000000..de59d33220fa
--- /dev/null
+++ b/x11/kickoff/distinfo
@@ -0,0 +1,405 @@
+TIMESTAMP = 1627832765
+SHA256 (rust/crates/adler-1.0.2.crate) = f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe
+SIZE (rust/crates/adler-1.0.2.crate) = 12778
+SHA256 (rust/crates/adler32-1.2.0.crate) = aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234
+SIZE (rust/crates/adler32-1.2.0.crate) = 6411
+SHA256 (rust/crates/ahash-0.4.7.crate) = 739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e
+SIZE (rust/crates/ahash-0.4.7.crate) = 51474
+SHA256 (rust/crates/aho-corasick-0.7.18.crate) = 1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f
+SIZE (rust/crates/aho-corasick-0.7.18.crate) = 112923
+SHA256 (rust/crates/arrayref-0.3.6.crate) = a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544
+SIZE (rust/crates/arrayref-0.3.6.crate) = 10035
+SHA256 (rust/crates/arrayvec-0.4.12.crate) = cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9
+SIZE (rust/crates/arrayvec-0.4.12.crate) = 26551
+SHA256 (rust/crates/arrayvec-0.5.2.crate) = 23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b
+SIZE (rust/crates/arrayvec-0.5.2.crate) = 27838
+SHA256 (rust/crates/async-io-1.6.0.crate) = a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b
+SIZE (rust/crates/async-io-1.6.0.crate) = 32282
+SHA256 (rust/crates/autocfg-1.0.1.crate) = cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a
+SIZE (rust/crates/autocfg-1.0.1.crate) = 12908
+SHA256 (rust/crates/base64-0.13.0.crate) = 904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd
+SIZE (rust/crates/base64-0.13.0.crate) = 62070
+SHA256 (rust/crates/bitflags-0.9.1.crate) = 4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5
+SIZE (rust/crates/bitflags-0.9.1.crate) = 12406
+SHA256 (rust/crates/bitflags-1.2.1.crate) = cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693
+SIZE (rust/crates/bitflags-1.2.1.crate) = 16745
+SHA256 (rust/crates/blake2b_simd-0.5.11.crate) = afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587
+SIZE (rust/crates/blake2b_simd-0.5.11.crate) = 34096
+SHA256 (rust/crates/block-0.1.6.crate) = 0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a
+SIZE (rust/crates/block-0.1.6.crate) = 4077
+SHA256 (rust/crates/bytemuck-1.7.2.crate) = 72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b
+SIZE (rust/crates/bytemuck-1.7.2.crate) = 27489
+SHA256 (rust/crates/byteorder-1.4.3.crate) = 14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610
+SIZE (rust/crates/byteorder-1.4.3.crate) = 22512
+SHA256 (rust/crates/bytes-1.0.1.crate) = b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040
+SIZE (rust/crates/bytes-1.0.1.crate) = 48142
+SHA256 (rust/crates/cache-padded-1.1.1.crate) = 631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba
+SIZE (rust/crates/cache-padded-1.1.1.crate) = 8798
+SHA256 (rust/crates/calloop-0.7.2.crate) = 9d0a1340115d6bd81e1066469091596a339f68878a2ce3c2f39e546607d22131
+SIZE (rust/crates/calloop-0.7.2.crate) = 32010
+SHA256 (rust/crates/cc-1.0.69.crate) = e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2
+SIZE (rust/crates/cc-1.0.69.crate) = 56044
+SHA256 (rust/crates/cfg-if-0.1.10.crate) = 4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822
+SIZE (rust/crates/cfg-if-0.1.10.crate) = 7933
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/chrono-0.4.19.crate) = 670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73
+SIZE (rust/crates/chrono-0.4.19.crate) = 155663
+SHA256 (rust/crates/cmake-0.1.45.crate) = eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855
+SIZE (rust/crates/cmake-0.1.45.crate) = 14375
+SHA256 (rust/crates/color_quant-1.1.0.crate) = 3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b
+SIZE (rust/crates/color_quant-1.1.0.crate) = 6649
+SHA256 (rust/crates/concurrent-queue-1.2.2.crate) = 30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3
+SIZE (rust/crates/concurrent-queue-1.2.2.crate) = 15859
+SHA256 (rust/crates/constant_time_eq-0.1.5.crate) = 245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc
+SIZE (rust/crates/constant_time_eq-0.1.5.crate) = 4936
+SHA256 (rust/crates/core-foundation-0.9.1.crate) = 0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62
+SIZE (rust/crates/core-foundation-0.9.1.crate) = 25985
+SHA256 (rust/crates/core-foundation-sys-0.8.2.crate) = ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b
+SIZE (rust/crates/core-foundation-sys-0.8.2.crate) = 17461
+SHA256 (rust/crates/core-graphics-0.22.2.crate) = 269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86
+SIZE (rust/crates/core-graphics-0.22.2.crate) = 28263
+SHA256 (rust/crates/core-graphics-types-0.1.1.crate) = 3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b
+SIZE (rust/crates/core-graphics-types-0.1.1.crate) = 2530
+SHA256 (rust/crates/core-text-19.2.0.crate) = 99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25
+SIZE (rust/crates/core-text-19.2.0.crate) = 18446
+SHA256 (rust/crates/crc32fast-1.2.1.crate) = 81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a
+SIZE (rust/crates/crc32fast-1.2.1.crate) = 38172
+SHA256 (rust/crates/crossbeam-channel-0.5.1.crate) = 06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4
+SIZE (rust/crates/crossbeam-channel-0.5.1.crate) = 86919
+SHA256 (rust/crates/crossbeam-deque-0.8.1.crate) = 6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e
+SIZE (rust/crates/crossbeam-deque-0.8.1.crate) = 20852
+SHA256 (rust/crates/crossbeam-epoch-0.9.5.crate) = 4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd
+SIZE (rust/crates/crossbeam-epoch-0.9.5.crate) = 43883
+SHA256 (rust/crates/crossbeam-utils-0.8.5.crate) = d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db
+SIZE (rust/crates/crossbeam-utils-0.8.5.crate) = 38414
+SHA256 (rust/crates/css-color-0.1.1.crate) = a254bc4cf4e80026fd4c6e2dc5e8ec7ab077f4970229507548a441265eaca282
+SIZE (rust/crates/css-color-0.1.1.crate) = 94899
+SHA256 (rust/crates/deflate-0.8.6.crate) = 73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174
+SIZE (rust/crates/deflate-0.8.6.crate) = 62365
+SHA256 (rust/crates/derivative-2.2.0.crate) = fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b
+SIZE (rust/crates/derivative-2.2.0.crate) = 48076
+SHA256 (rust/crates/dirs-1.0.5.crate) = 3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901
+SIZE (rust/crates/dirs-1.0.5.crate) = 12908
+SHA256 (rust/crates/dlib-0.5.0.crate) = ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794
+SIZE (rust/crates/dlib-0.5.0.crate) = 5788
+SHA256 (rust/crates/downcast-rs-1.2.0.crate) = 9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650
+SIZE (rust/crates/downcast-rs-1.2.0.crate) = 11670
+SHA256 (rust/crates/either-1.6.1.crate) = e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457
+SIZE (rust/crates/either-1.6.1.crate) = 13641
+SHA256 (rust/crates/enumflags2-0.6.4.crate) = 83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0
+SIZE (rust/crates/enumflags2-0.6.4.crate) = 10713
+SHA256 (rust/crates/enumflags2_derive-0.6.4.crate) = 946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce
+SIZE (rust/crates/enumflags2_derive-0.6.4.crate) = 3659
+SHA256 (rust/crates/errno-0.2.7.crate) = fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe
+SIZE (rust/crates/errno-0.2.7.crate) = 8960
+SHA256 (rust/crates/errno-dragonfly-0.1.1.crate) = 14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067
+SIZE (rust/crates/errno-dragonfly-0.1.1.crate) = 1370
+SHA256 (rust/crates/exec-0.3.1.crate) = 886b70328cba8871bfc025858e1de4be16b1d5088f2ba50b57816f4210672615
+SIZE (rust/crates/exec-0.3.1.crate) = 8748
+SHA256 (rust/crates/expat-sys-2.1.6.crate) = 658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa
+SIZE (rust/crates/expat-sys-2.1.6.crate) = 518887
+SHA256 (rust/crates/fastrand-1.5.0.crate) = b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e
+SIZE (rust/crates/fastrand-1.5.0.crate) = 11100
+SHA256 (rust/crates/font-loader-0.11.0.crate) = c49d6b4c11dca1a1dd931a34a9f397e2da91abe3de4110505f3530a80e560b52
+SIZE (rust/crates/font-loader-0.11.0.crate) = 8535
+SHA256 (rust/crates/fontdue-0.5.2.crate) = c75712fff1702bac51b7eaa5a5ca9f9853b8055ef5906088a32f4fe196595a1d
+SIZE (rust/crates/fontdue-0.5.2.crate) = 140953
+SHA256 (rust/crates/foreign-types-0.3.2.crate) = f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1
+SIZE (rust/crates/foreign-types-0.3.2.crate) = 7504
+SHA256 (rust/crates/foreign-types-shared-0.1.1.crate) = 00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b
+SIZE (rust/crates/foreign-types-shared-0.1.1.crate) = 5672
+SHA256 (rust/crates/freetype-sys-0.13.1.crate) = a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a
+SIZE (rust/crates/freetype-sys-0.13.1.crate) = 1917785
+SHA256 (rust/crates/futures-0.3.16.crate) = 1adc00f486adfc9ce99f77d717836f0c5aa84965eb0b4f051f4e83f7cab53f8b
+SIZE (rust/crates/futures-0.3.16.crate) = 46410
+SHA256 (rust/crates/futures-channel-0.3.16.crate) = 74ed2411805f6e4e3d9bc904c95d5d423b89b3b25dc0250aa74729de20629ff9
+SIZE (rust/crates/futures-channel-0.3.16.crate) = 31765
+SHA256 (rust/crates/futures-core-0.3.16.crate) = af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99
+SIZE (rust/crates/futures-core-0.3.16.crate) = 14486
+SHA256 (rust/crates/futures-executor-0.3.16.crate) = 4d0d535a57b87e1ae31437b892713aee90cd2d7b0ee48727cd11fc72ef54761c
+SIZE (rust/crates/futures-executor-0.3.16.crate) = 17104
+SHA256 (rust/crates/futures-io-0.3.16.crate) = 0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582
+SIZE (rust/crates/futures-io-0.3.16.crate) = 9050
+SHA256 (rust/crates/futures-lite-1.12.0.crate) = 7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48
+SIZE (rust/crates/futures-lite-1.12.0.crate) = 36032
+SHA256 (rust/crates/futures-macro-0.3.16.crate) = c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57
+SIZE (rust/crates/futures-macro-0.3.16.crate) = 10779
+SHA256 (rust/crates/futures-sink-0.3.16.crate) = c0f30aaa67363d119812743aa5f33c201a7a66329f97d1a887022971feea4b53
+SIZE (rust/crates/futures-sink-0.3.16.crate) = 7663
+SHA256 (rust/crates/futures-task-0.3.16.crate) = bbe54a98670017f3be909561f6ad13e810d9a51f3f061b902062ca3da80799f2
+SIZE (rust/crates/futures-task-0.3.16.crate) = 11712
+SHA256 (rust/crates/futures-util-0.3.16.crate) = 67eb846bfd58e44a8481a00049e82c43e0ccb5d61f8dc071057cb19249dd4d78
+SIZE (rust/crates/futures-util-0.3.16.crate) = 144642
+SHA256 (rust/crates/fuzzy-matcher-0.3.7.crate) = 54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94
+SIZE (rust/crates/fuzzy-matcher-0.3.7.crate) = 18047
+SHA256 (rust/crates/gcc-0.3.55.crate) = 8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2
+SIZE (rust/crates/gcc-0.3.55.crate) = 37262
+SHA256 (rust/crates/getrandom-0.1.16.crate) = 8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce
+SIZE (rust/crates/getrandom-0.1.16.crate) = 25077
+SHA256 (rust/crates/gif-0.11.2.crate) = 5a668f699973d0f573d15749b7002a9ac9e1f9c6b220e7b165601334c173d8de
+SIZE (rust/crates/gif-0.11.2.crate) = 34068
+SHA256 (rust/crates/hashbrown-0.9.1.crate) = d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04
+SIZE (rust/crates/hashbrown-0.9.1.crate) = 77734
+SHA256 (rust/crates/hermit-abi-0.1.19.crate) = 62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33
+SIZE (rust/crates/hermit-abi-0.1.19.crate) = 9979
+SHA256 (rust/crates/hex-0.4.3.crate) = 7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70
+SIZE (rust/crates/hex-0.4.3.crate) = 13299
+SHA256 (rust/crates/image-0.23.14.crate) = 24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1
+SIZE (rust/crates/image-0.23.14.crate) = 226804
+SHA256 (rust/crates/instant-0.1.10.crate) = bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d
+SIZE (rust/crates/instant-0.1.10.crate) = 5218
+SHA256 (rust/crates/jpeg-decoder-0.1.22.crate) = 229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2
+SIZE (rust/crates/jpeg-decoder-0.1.22.crate) = 228366
+SHA256 (rust/crates/lazy_static-1.4.0.crate) = e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646
+SIZE (rust/crates/lazy_static-1.4.0.crate) = 10443
+SHA256 (rust/crates/lexical-2.2.4.crate) = c9d189f82a78aa5c06e64f60cbd6f9ec37fe1cdb453dfd88ac2128c81157dc6c
+SIZE (rust/crates/lexical-2.2.4.crate) = 99320
+SHA256 (rust/crates/lexical-core-0.4.8.crate) = 34449d00c5d4066537f4dc72320b18e3aa421e8e92669250eecd664c618fefce
+SIZE (rust/crates/lexical-core-0.4.8.crate) = 445432
+SHA256 (rust/crates/libc-0.2.98.crate) = 320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790
+SIZE (rust/crates/libc-0.2.98.crate) = 522087
+SHA256 (rust/crates/libloading-0.7.0.crate) = 6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a
+SIZE (rust/crates/libloading-0.7.0.crate) = 26216
+SHA256 (rust/crates/lock_api-0.4.4.crate) = 0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb
+SIZE (rust/crates/lock_api-0.4.4.crate) = 20356
+SHA256 (rust/crates/log-0.4.14.crate) = 51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710
+SIZE (rust/crates/log-0.4.14.crate) = 34582
+SHA256 (rust/crates/mac-notification-sys-0.3.0.crate) = 3dfb6b71a9a89cd38b395d994214297447e8e63b1ba5708a9a2b0b1048ceda76
+SIZE (rust/crates/mac-notification-sys-0.3.0.crate) = 4757
+SHA256 (rust/crates/malloc_buf-0.0.6.crate) = 62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb
+SIZE (rust/crates/malloc_buf-0.0.6.crate) = 1239
+SHA256 (rust/crates/memchr-2.4.0.crate) = b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc
+SIZE (rust/crates/memchr-2.4.0.crate) = 63392
+SHA256 (rust/crates/memmap2-0.2.3.crate) = 723e3ebdcdc5c023db1df315364573789f8857c11b631a2fdfad7c00f5c046b4
+SIZE (rust/crates/memmap2-0.2.3.crate) = 17669
+SHA256 (rust/crates/memoffset-0.6.4.crate) = 59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9
+SIZE (rust/crates/memoffset-0.6.4.crate) = 7664
+SHA256 (rust/crates/miniz_oxide-0.3.7.crate) = 791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435
+SIZE (rust/crates/miniz_oxide-0.3.7.crate) = 44996
+SHA256 (rust/crates/miniz_oxide-0.4.4.crate) = a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b
+SIZE (rust/crates/miniz_oxide-0.4.4.crate) = 49938
+SHA256 (rust/crates/mio-0.7.13.crate) = 8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16
+SIZE (rust/crates/mio-0.7.13.crate) = 87027
+SHA256 (rust/crates/miow-0.3.7.crate) = b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21
+SIZE (rust/crates/miow-0.3.7.crate) = 24563
+SHA256 (rust/crates/nb-connect-1.2.0.crate) = b1bb540dc6ef51cfe1916ec038ce7a620daf3a111e2502d745197cd53d6bca15
+SIZE (rust/crates/nb-connect-1.2.0.crate) = 8126
+SHA256 (rust/crates/nix-0.19.1.crate) = b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2
+SIZE (rust/crates/nix-0.19.1.crate) = 213462
+SHA256 (rust/crates/nix-0.20.0.crate) = fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a
+SIZE (rust/crates/nix-0.20.0.crate) = 216983
+SHA256 (rust/crates/nix-0.22.0.crate) = cf1e25ee6b412c2a1e3fcb6a4499a5c1bfe7f43e014bdce9a6b6666e5aa2d187
+SIZE (rust/crates/nix-0.22.0.crate) = 227091
+SHA256 (rust/crates/nodrop-0.1.14.crate) = 72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb
+SIZE (rust/crates/nodrop-0.1.14.crate) = 7667
+SHA256 (rust/crates/nom-6.1.2.crate) = e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2
+SIZE (rust/crates/nom-6.1.2.crate) = 147539
+SHA256 (rust/crates/notify-rust-4.5.2.crate) = 2a2ca742cd7268b60c35828d318357f0b1bb9b82088e157ccf3013eb3ce70247
+SIZE (rust/crates/notify-rust-4.5.2.crate) = 45725
+SHA256 (rust/crates/ntapi-0.3.6.crate) = 3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44
+SIZE (rust/crates/ntapi-0.3.6.crate) = 127221
+SHA256 (rust/crates/num-integer-0.1.44.crate) = d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db
+SIZE (rust/crates/num-integer-0.1.44.crate) = 22216
+SHA256 (rust/crates/num-iter-0.1.42.crate) = b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59
+SIZE (rust/crates/num-iter-0.1.42.crate) = 10450
+SHA256 (rust/crates/num-rational-0.3.2.crate) = 12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07
+SIZE (rust/crates/num-rational-0.3.2.crate) = 26359
+SHA256 (rust/crates/num-traits-0.2.14.crate) = 9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290
+SIZE (rust/crates/num-traits-0.2.14.crate) = 45476
+SHA256 (rust/crates/num_cpus-1.13.0.crate) = 05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3
+SIZE (rust/crates/num_cpus-1.13.0.crate) = 14704
+SHA256 (rust/crates/objc-0.2.7.crate) = 915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1
+SIZE (rust/crates/objc-0.2.7.crate) = 22036
+SHA256 (rust/crates/objc-foundation-0.1.1.crate) = 1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9
+SIZE (rust/crates/objc-foundation-0.1.1.crate) = 9063
+SHA256 (rust/crates/objc_id-0.1.1.crate) = c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b
+SIZE (rust/crates/objc_id-0.1.1.crate) = 3258
+SHA256 (rust/crates/once_cell-1.8.0.crate) = 692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56
+SIZE (rust/crates/once_cell-1.8.0.crate) = 28925
+SHA256 (rust/crates/parking-2.0.0.crate) = 427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72
+SIZE (rust/crates/parking-2.0.0.crate) = 9714
+SHA256 (rust/crates/parking_lot-0.11.1.crate) = 6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb
+SIZE (rust/crates/parking_lot-0.11.1.crate) = 39854
+SHA256 (rust/crates/parking_lot_core-0.8.3.crate) = fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018
+SIZE (rust/crates/parking_lot_core-0.8.3.crate) = 32147
+SHA256 (rust/crates/pin-project-lite-0.2.7.crate) = 8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443
+SIZE (rust/crates/pin-project-lite-0.2.7.crate) = 27212
+SHA256 (rust/crates/pin-utils-0.1.0.crate) = 8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184
+SIZE (rust/crates/pin-utils-0.1.0.crate) = 7580
+SHA256 (rust/crates/pkg-config-0.3.19.crate) = 3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c
+SIZE (rust/crates/pkg-config-0.3.19.crate) = 15451
+SHA256 (rust/crates/png-0.16.8.crate) = 3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6
+SIZE (rust/crates/png-0.16.8.crate) = 52598
+SHA256 (rust/crates/polling-2.1.0.crate) = 92341d779fa34ea8437ef4d82d440d5e1ce3f3ff7f824aa64424cd481f9a1f25
+SIZE (rust/crates/polling-2.1.0.crate) = 17682
+SHA256 (rust/crates/proc-macro-crate-0.1.5.crate) = 1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785
+SIZE (rust/crates/proc-macro-crate-0.1.5.crate) = 8096
+SHA256 (rust/crates/proc-macro-crate-1.0.0.crate) = 41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92
+SIZE (rust/crates/proc-macro-crate-1.0.0.crate) = 8442
+SHA256 (rust/crates/proc-macro-hack-0.5.19.crate) = dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5
+SIZE (rust/crates/proc-macro-hack-0.5.19.crate) = 15556
+SHA256 (rust/crates/proc-macro-nested-0.1.7.crate) = bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086
+SIZE (rust/crates/proc-macro-nested-0.1.7.crate) = 6495
+SHA256 (rust/crates/proc-macro2-1.0.28.crate) = 5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612
+SIZE (rust/crates/proc-macro2-1.0.28.crate) = 38732
+SHA256 (rust/crates/quote-0.3.15.crate) = 7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a
+SIZE (rust/crates/quote-0.3.15.crate) = 12041
+SHA256 (rust/crates/quote-1.0.9.crate) = c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7
+SIZE (rust/crates/quote-1.0.9.crate) = 25042
+SHA256 (rust/crates/rayon-1.5.1.crate) = c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90
+SIZE (rust/crates/rayon-1.5.1.crate) = 160424
+SHA256 (rust/crates/rayon-core-1.9.1.crate) = d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e
+SIZE (rust/crates/rayon-core-1.9.1.crate) = 64961
+SHA256 (rust/crates/redox_syscall-0.1.57.crate) = 41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce
+SIZE (rust/crates/redox_syscall-0.1.57.crate) = 17087
+SHA256 (rust/crates/redox_syscall-0.2.9.crate) = 5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee
+SIZE (rust/crates/redox_syscall-0.2.9.crate) = 23533
+SHA256 (rust/crates/redox_users-0.3.5.crate) = de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d
+SIZE (rust/crates/redox_users-0.3.5.crate) = 12644
+SHA256 (rust/crates/regex-1.5.4.crate) = d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461
+SIZE (rust/crates/regex-1.5.4.crate) = 236581
+SHA256 (rust/crates/regex-syntax-0.6.25.crate) = f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b
+SIZE (rust/crates/regex-syntax-0.6.25.crate) = 293293
+SHA256 (rust/crates/rust-argon2-0.8.3.crate) = 4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb
+SIZE (rust/crates/rust-argon2-0.8.3.crate) = 28313
+SHA256 (rust/crates/rustc_version-0.2.3.crate) = 138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a
+SIZE (rust/crates/rustc_version-0.2.3.crate) = 10210
+SHA256 (rust/crates/ryu-1.0.5.crate) = 71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e
+SIZE (rust/crates/ryu-1.0.5.crate) = 49570
+SHA256 (rust/crates/scoped-tls-1.0.0.crate) = ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2
+SIZE (rust/crates/scoped-tls-1.0.0.crate) = 9146
+SHA256 (rust/crates/scoped_threadpool-0.1.9.crate) = 1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8
+SIZE (rust/crates/scoped_threadpool-0.1.9.crate) = 7800
+SHA256 (rust/crates/scopeguard-1.1.0.crate) = d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd
+SIZE (rust/crates/scopeguard-1.1.0.crate) = 11470
+SHA256 (rust/crates/semver-0.9.0.crate) = 1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403
+SIZE (rust/crates/semver-0.9.0.crate) = 17344
+SHA256 (rust/crates/semver-parser-0.7.0.crate) = 388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3
+SIZE (rust/crates/semver-parser-0.7.0.crate) = 10268
+SHA256 (rust/crates/serde-1.0.127.crate) = f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8
+SIZE (rust/crates/serde-1.0.127.crate) = 75162
+SHA256 (rust/crates/serde_derive-1.0.127.crate) = a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc
+SIZE (rust/crates/serde_derive-1.0.127.crate) = 54201
+SHA256 (rust/crates/serde_repr-0.1.7.crate) = 98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5
+SIZE (rust/crates/serde_repr-0.1.7.crate) = 10173
+SHA256 (rust/crates/servo-fontconfig-0.5.1.crate) = c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c
+SIZE (rust/crates/servo-fontconfig-0.5.1.crate) = 9738
+SHA256 (rust/crates/servo-fontconfig-sys-5.1.0.crate) = e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388
+SIZE (rust/crates/servo-fontconfig-sys-5.1.0.crate) = 1790708
+SHA256 (rust/crates/shellwords-1.1.0.crate) = 89e515aa4699a88148ed5ef96413ceef0048ce95b43fbc955a33bde0a70fcae6
+SIZE (rust/crates/shellwords-1.1.0.crate) = 3965
+SHA256 (rust/crates/signal-hook-registry-1.4.0.crate) = e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0
+SIZE (rust/crates/signal-hook-registry-1.4.0.crate) = 17912
+SHA256 (rust/crates/simplelog-0.10.0.crate) = 59d0fe306a0ced1c88a58042dc22fc2ddd000982c26d75f6aa09a394547c41e0
+SIZE (rust/crates/simplelog-0.10.0.crate) = 17910
+SHA256 (rust/crates/slab-0.4.3.crate) = f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527
+SIZE (rust/crates/slab-0.4.3.crate) = 15681
+SHA256 (rust/crates/smallvec-1.6.1.crate) = fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e
+SIZE (rust/crates/smallvec-1.6.1.crate) = 26444
+SHA256 (rust/crates/smithay-client-toolkit-0.14.0.crate) = ec783683499a2cfc85b6df3d04f83b1907b5cbd98a1aed44667dbdf1eac4e64c
+SIZE (rust/crates/smithay-client-toolkit-0.14.0.crate) = 127701
+SHA256 (rust/crates/smithay-clipboard-0.6.4.crate) = 986c5b4a7bd4f50d4c51f81f844745535cb488360f9cf63293780b109b9295f3
+SIZE (rust/crates/smithay-clipboard-0.6.4.crate) = 16234
+SHA256 (rust/crates/socket2-0.4.1.crate) = 765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad
+SIZE (rust/crates/socket2-0.4.1.crate) = 41364
+SHA256 (rust/crates/static_assertions-0.3.4.crate) = 7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3
+SIZE (rust/crates/static_assertions-0.3.4.crate) = 15034
+SHA256 (rust/crates/static_assertions-1.1.0.crate) = a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f
+SIZE (rust/crates/static_assertions-1.1.0.crate) = 18480
+SHA256 (rust/crates/strum-0.8.0.crate) = 4ca6e4730f517e041e547ffe23d29daab8de6b73af4b6ae2a002108169f5e7da
+SIZE (rust/crates/strum-0.8.0.crate) = 6135
+SHA256 (rust/crates/strum_macros-0.8.0.crate) = 3384590878eb0cab3b128e844412e2d010821e7e091211b9d87324173ada7db8
+SIZE (rust/crates/strum_macros-0.8.0.crate) = 4793
+SHA256 (rust/crates/syn-0.11.11.crate) = d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad
+SIZE (rust/crates/syn-0.11.11.crate) = 63309
+SHA256 (rust/crates/syn-1.0.74.crate) = 1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c
+SIZE (rust/crates/syn-1.0.74.crate) = 232974
+SHA256 (rust/crates/synom-0.11.3.crate) = a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6
+SIZE (rust/crates/synom-0.11.3.crate) = 17120
+SHA256 (rust/crates/termcolor-1.1.2.crate) = 2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4
+SIZE (rust/crates/termcolor-1.1.2.crate) = 17287
+SHA256 (rust/crates/thiserror-1.0.26.crate) = 93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2
+SIZE (rust/crates/thiserror-1.0.26.crate) = 16711
+SHA256 (rust/crates/thiserror-impl-1.0.26.crate) = 060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745
+SIZE (rust/crates/thiserror-impl-1.0.26.crate) = 13431
+SHA256 (rust/crates/thread_local-1.1.3.crate) = 8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd
+SIZE (rust/crates/thread_local-1.1.3.crate) = 13111
+SHA256 (rust/crates/tiff-0.6.1.crate) = 9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437
+SIZE (rust/crates/tiff-0.6.1.crate) = 1399263
+SHA256 (rust/crates/time-0.1.44.crate) = 6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255
+SIZE (rust/crates/time-0.1.44.crate) = 28885
+SHA256 (rust/crates/tokio-1.9.0.crate) = 4b7b349f11a7047e6d1276853e612d152f5e8a352c61917887cc2169e2366b4c
+SIZE (rust/crates/tokio-1.9.0.crate) = 499709
+SHA256 (rust/crates/tokio-macros-1.3.0.crate) = 54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110
+SIZE (rust/crates/tokio-macros-1.3.0.crate) = 7876
+SHA256 (rust/crates/toml-0.5.8.crate) = a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa
+SIZE (rust/crates/toml-0.5.8.crate) = 54219
+SHA256 (rust/crates/ttf-parser-0.12.3.crate) = 7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6
+SIZE (rust/crates/ttf-parser-0.12.3.crate) = 105969
+SHA256 (rust/crates/unicode-xid-0.0.4.crate) = 8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc
+SIZE (rust/crates/unicode-xid-0.0.4.crate) = 16034
+SHA256 (rust/crates/unicode-xid-0.2.2.crate) = 8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3
+SIZE (rust/crates/unicode-xid-0.2.2.crate) = 14955
+SHA256 (rust/crates/version_check-0.9.3.crate) = 5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe
+SIZE (rust/crates/version_check-0.9.3.crate) = 12547
+SHA256 (rust/crates/waker-fn-1.1.0.crate) = 9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca
+SIZE (rust/crates/waker-fn-1.1.0.crate) = 7114
+SHA256 (rust/crates/wasi-0.9.0+wasi-snapshot-preview1.crate) = cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519
+SIZE (rust/crates/wasi-0.9.0+wasi-snapshot-preview1.crate) = 31521
+SHA256 (rust/crates/wasi-0.10.0+wasi-snapshot-preview1.crate) = 1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f
+SIZE (rust/crates/wasi-0.10.0+wasi-snapshot-preview1.crate) = 26964
+SHA256 (rust/crates/wayland-client-0.28.6.crate) = e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355
+SIZE (rust/crates/wayland-client-0.28.6.crate) = 69347
+SHA256 (rust/crates/wayland-client-0.29.0.crate) = 6deeba72b1fd9e9fc6641603bd5f72fa465857e3577b9a823fc316ffd45e69b4
+SIZE (rust/crates/wayland-client-0.29.0.crate) = 69451
+SHA256 (rust/crates/wayland-commons-0.28.6.crate) = a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda
+SIZE (rust/crates/wayland-commons-0.28.6.crate) = 20581
+SHA256 (rust/crates/wayland-commons-0.29.0.crate) = 93d6377fc0efc620da05cb78c5dc846420940e7b2c471aa2faf59c58e063c2b7
+SIZE (rust/crates/wayland-commons-0.29.0.crate) = 20726
+SHA256 (rust/crates/wayland-cursor-0.28.6.crate) = be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a
+SIZE (rust/crates/wayland-cursor-0.28.6.crate) = 6176
+SHA256 (rust/crates/wayland-protocols-0.28.6.crate) = 286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f
+SIZE (rust/crates/wayland-protocols-0.28.6.crate) = 125975
+SHA256 (rust/crates/wayland-scanner-0.28.6.crate) = ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1
+SIZE (rust/crates/wayland-scanner-0.28.6.crate) = 17226
+SHA256 (rust/crates/wayland-scanner-0.29.0.crate) = 7d3d043a8926b2836749018bfb393e2328cac86bd414b9c3d3f8c523d0dee2dd
+SIZE (rust/crates/wayland-scanner-0.29.0.crate) = 17229
+SHA256 (rust/crates/wayland-sys-0.28.6.crate) = d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8
+SIZE (rust/crates/wayland-sys-0.28.6.crate) = 7937
+SHA256 (rust/crates/wayland-sys-0.29.0.crate) = fef2a7d20f93be1379a2dfd9457c291e840b942fa38fe0b95ad6b0425a22d43a
+SIZE (rust/crates/wayland-sys-0.29.0.crate) = 7936
+SHA256 (rust/crates/weezl-0.1.5.crate) = d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e
+SIZE (rust/crates/weezl-0.1.5.crate) = 34944
+SHA256 (rust/crates/wepoll-ffi-0.1.2.crate) = d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb
+SIZE (rust/crates/wepoll-ffi-0.1.2.crate) = 31309
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-util-0.1.5.crate) = 70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178
+SIZE (rust/crates/winapi-util-0.1.5.crate) = 10164
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/winrt-0.4.0.crate) = 7e30cba82e22b083dc5a422c2ee77e20dc7927271a0dc981360c57c1453cb48d
+SIZE (rust/crates/winrt-0.4.0.crate) = 1615271
+SHA256 (rust/crates/winrt-notification-0.2.4.crate) = 57790eb281688a4682dab44df2a1ba8b78373233bd71cb291c3e75fecb1a01c4
+SIZE (rust/crates/winrt-notification-0.2.4.crate) = 32299
+SHA256 (rust/crates/xcursor-0.3.3.crate) = 3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08
+SIZE (rust/crates/xcursor-0.3.3.crate) = 6130
+SHA256 (rust/crates/xdg-2.2.0.crate) = d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57
+SIZE (rust/crates/xdg-2.2.0.crate) = 13387
+SHA256 (rust/crates/xml-rs-0.6.1.crate) = e1945e12e16b951721d7976520b0832496ef79c31602c7a29d950de79ba74621
+SIZE (rust/crates/xml-rs-0.6.1.crate) = 50922
+SHA256 (rust/crates/xml-rs-0.8.4.crate) = d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3
+SIZE (rust/crates/xml-rs-0.8.4.crate) = 52690
+SHA256 (rust/crates/zbus-1.9.1.crate) = 2326acc379a3ac4e34b794089f5bdb17086bf29a5fdf619b7b4cc772dc2e9dad
+SIZE (rust/crates/zbus-1.9.1.crate) = 62908
+SHA256 (rust/crates/zbus_macros-1.9.1.crate) = a482c56029e48681b89b92b5db3c446db0915e8dd1052c0328a574eda38d5f93
+SIZE (rust/crates/zbus_macros-1.9.1.crate) = 14675
+SHA256 (rust/crates/zvariant-2.8.0.crate) = fa4b785b8b32b0f8433b4474e6bb4ea77b37c1960e84d7598e01dd199b2b23ef
+SIZE (rust/crates/zvariant-2.8.0.crate) = 60913
+SHA256 (rust/crates/zvariant_derive-2.8.0.crate) = b42af4ee88fb928781391216c34be77ec7cdb3546042b2947ce38d86aa5f37dd
+SIZE (rust/crates/zvariant_derive-2.8.0.crate) = 8771
+SHA256 (j0ru-kickoff-v0.4.5_GH0.tar.gz) = 5f8f42943dd27d80b852a4ef10bee603686e418bf9ecad9c1e4e6d3e9cbbedb6
+SIZE (j0ru-kickoff-v0.4.5_GH0.tar.gz) = 304863
diff --git a/x11/kickoff/files/patch-zbus b/x11/kickoff/files/patch-zbus
new file mode 100644
index 000000000000..b80b1f6418b4
--- /dev/null
+++ b/x11/kickoff/files/patch-zbus
@@ -0,0 +1,226 @@
+https://gitlab.freedesktop.org/dbus/zbus/-/commit/01d8f0ec41d3
+https://gitlab.freedesktop.org/dbus/zbus/-/commit/807909a6c7bf
+https://gitlab.freedesktop.org/dbus/zbus/-/commit/e3e2f7ddfd6e
+https://gitlab.freedesktop.org/dbus/zbus/-/commit/35d1b8778754
+
+--- cargo-crates/zbus-1.9.1/Cargo.toml.orig	1970-01-01 00:00:00 UTC
++++ cargo-crates/zbus-1.9.1/Cargo.toml
+@@ -48,7 +48,7 @@ version = "0.3.8"
+ version = "1.0.2"
+ 
+ [dependencies.nix]
+-version = "^0.17"
++version = "0.20.0"
+ 
+ [dependencies.once_cell]
+ version = "1.4.0"
+--- cargo-crates/zbus-1.9.1/src/address.rs.orig	1970-01-01 00:00:00 UTC
++++ cargo-crates/zbus-1.9.1/src/address.rs
+@@ -55,8 +55,9 @@ impl Address {
+         match env::var("DBUS_SESSION_BUS_ADDRESS") {
+             Ok(val) => Self::from_str(&val),
+             _ => {
+-                let uid = Uid::current();
+-                let path = format!("unix:path=/run/user/{}/bus", uid);
++                let runtime_dir = env::var("XDG_RUNTIME_DIR")
++                    .unwrap_or_else(|_| format!("/run/user/{}", Uid::current()));
++                let path = format!("unix:path={}/bus", runtime_dir);
+ 
+                 Self::from_str(&path)
+             }
+--- cargo-crates/zbus-1.9.1/src/azync/connection.rs.orig	1970-01-01 00:00:00 UTC
++++ cargo-crates/zbus-1.9.1/src/azync/connection.rs
+@@ -177,13 +177,29 @@ where
+     /// Upon successful return, the connection is fully established and negotiated: D-Bus messages
+     /// can be sent and received.
+     pub async fn new_server(stream: S, guid: &Guid) -> Result<Self> {
+-        use nix::sys::socket::{getsockopt, sockopt::PeerCredentials};
++        #[cfg(any(target_os = "android", target_os = "linux"))]
++        let client_uid = {
++            use nix::sys::socket::{getsockopt, sockopt::PeerCredentials};
+ 
+-        // FIXME: Could and should this be async?
+-        let creds = getsockopt(stream.as_raw_fd(), PeerCredentials)
+-            .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?;
++            let creds = getsockopt(stream.as_raw_fd(), PeerCredentials)
++                .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?;
+ 
+-        let auth = Authenticated::server(Async::new(stream)?, guid.clone(), creds.uid()).await?;
++            creds.uid()
++        };
++        #[cfg(any(
++            target_os = "macos",
++            target_os = "ios",
++            target_os = "freebsd",
++            target_os = "dragonfly",
++            target_os = "openbsd",
++            target_os = "netbsd"
++        ))]
++        let client_uid = nix::unistd::getpeereid(stream.as_raw_fd())
++            .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?
++            .0
++            .into();
++
++        let auth = Authenticated::server(Async::new(stream)?, guid.clone(), client_uid).await?;
+ 
+         Ok(Self::new_authenticated(auth))
+     }
+--- cargo-crates/zbus-1.9.1/src/connection.rs.orig	1970-01-01 00:00:00 UTC
++++ cargo-crates/zbus-1.9.1/src/connection.rs
+@@ -160,12 +160,29 @@ impl Connection {
+     /// Upon successful return, the connection is fully established and negotiated: D-Bus messages
+     /// can be sent and received.
+     pub fn new_unix_server(stream: UnixStream, guid: &Guid) -> Result<Self> {
+-        use nix::sys::socket::{getsockopt, sockopt::PeerCredentials};
++        #[cfg(any(target_os = "android", target_os = "linux"))]
++        let client_uid = {
++            use nix::sys::socket::{getsockopt, sockopt::PeerCredentials};
+ 
+-        let creds = getsockopt(stream.as_raw_fd(), PeerCredentials)
+-            .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?;
++            let creds = getsockopt(stream.as_raw_fd(), PeerCredentials)
++                .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?;
+ 
+-        let handshake = ServerHandshake::new(stream, guid.clone(), creds.uid());
++            creds.uid()
++        };
++        #[cfg(any(
++            target_os = "macos",
++            target_os = "ios",
++            target_os = "freebsd",
++            target_os = "dragonfly",
++            target_os = "openbsd",
++            target_os = "netbsd"
++        ))]
++        let client_uid = nix::unistd::getpeereid(stream.as_raw_fd())
++            .map_err(|e| Error::Handshake(format!("Failed to get peer credentials: {}", e)))?
++            .0
++            .into();
++
++        let handshake = ServerHandshake::new(stream, guid.clone(), client_uid);
+         handshake
+             .blocking_finish()
+             .map(Connection::new_authenticated_unix)
+--- cargo-crates/zbus-1.9.1/src/handshake.rs.orig	1970-01-01 00:00:00 UTC
++++ cargo-crates/zbus-1.9.1/src/handshake.rs
+@@ -124,7 +124,7 @@ impl<S: Socket> ClientHandshake<S> {
+ 
+     fn flush_buffer(&mut self) -> Result<()> {
+         while !self.buffer.is_empty() {
+-            let written = self.socket.sendmsg(&self.buffer, &[])?;
++            let written = self.socket.sendmsg(&self.buffer, &[], false)?;
+             self.buffer.drain(..written);
+         }
+         Ok(())
+@@ -182,6 +182,15 @@ impl<S: Socket> Handshake<S> for ClientHandshake<S> {
+                     self.step = ClientHandshakeStep::SendingOauth;
+                 }
+                 ClientHandshakeStep::SendingOauth => {
++                    #[cfg(any(target_os = "freebsd", target_os = "dragonfly"))]
++                    {
++                        let zero = self.buffer.drain(..1).next().unwrap();
++                        if self.socket.sendmsg(&[zero], &[], true)? != 1 {
++                            return Err(Error::Handshake(
++                                "Could not send zero byte with credentials".to_string(),
++                            ));
++                        }
++                    }
+                     self.flush_buffer()?;
+                     self.step = ClientHandshakeStep::WaitOauth;
+                 }
+@@ -385,7 +394,7 @@ impl<S: Socket> ServerHandshake<S> {
+ 
+     fn flush_buffer(&mut self) -> Result<()> {
+         while !self.buffer.is_empty() {
+-            let written = self.socket.sendmsg(&self.buffer, &[])?;
++            let written = self.socket.sendmsg(&self.buffer, &[], false)?;
+             self.buffer.drain(..written);
+         }
+         Ok(())
+--- cargo-crates/zbus-1.9.1/src/raw/connection.rs.orig	1970-01-01 00:00:00 UTC
++++ cargo-crates/zbus-1.9.1/src/raw/connection.rs
+@@ -47,7 +47,7 @@ impl<S: Socket> Connection<S> {
+             // VecDeque should never return an empty front buffer if the VecDeque
+             // itself is not empty
+             debug_assert!(!front.is_empty());
+-            let written = self.socket.sendmsg(front, &[])?;
++            let written = self.socket.sendmsg(front, &[], false)?;
+             self.raw_out_buffer.drain(..written);
+         }
+ 
+@@ -55,14 +55,14 @@ impl<S: Socket> Connection<S> {
+         while let Some(msg) = self.msg_out_buffer.front() {
+             let mut data = msg.as_bytes();
+             let fds = msg.fds();
+-            let written = self.socket.sendmsg(data, &fds)?;
++            let written = self.socket.sendmsg(data, &fds, false)?;
+             // at least some part of the message has been sent, see if we can/need to send more
+             // now the message must be removed from msg_out_buffer and any leftover bytes
+             // must be stored into raw_out_buffer
+             let msg = self.msg_out_buffer.pop_front().unwrap();
+             data = &msg.as_bytes()[written..];
+             while !data.is_empty() {
+-                match self.socket.sendmsg(data, &[]) {
++                match self.socket.sendmsg(data, &[], false) {
+                     Ok(n) => data = &data[n..],
+                     Err(e) => {
+                         // an error occured, we cannot send more, store the remaining into
+--- cargo-crates/zbus-1.9.1/src/raw/socket.rs.orig	1970-01-01 00:00:00 UTC
++++ cargo-crates/zbus-1.9.1/src/raw/socket.rs
+@@ -47,7 +47,7 @@ pub trait Socket {
+     ///
+     /// If the underlying transport does not support transmitting file descriptors, this
+     /// will return `Err(ErrorKind::InvalidInput)`.
+-    fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd]) -> io::Result<usize>;
++    fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd], creds: bool) -> io::Result<usize>;
+ 
+     /// Close the socket.
+     ///
+@@ -74,6 +74,10 @@ impl Socket for UnixStream {
+             Ok(msg) => {
+                 let mut fds = vec![];
+                 for cmsg in msg.cmsgs() {
++                    #[cfg(any(target_os = "freebsd", target_os = "dragonfly"))]
++                    if let ControlMessageOwned::ScmCreds(_) = cmsg {
++                        continue;
++                    }
+                     if let ControlMessageOwned::ScmRights(fd) = cmsg {
+                         fds.extend(fd.iter().map(|&f| unsafe { OwnedFd::from_raw_fd(f) }));
+                     } else {
+@@ -90,12 +94,23 @@ impl Socket for UnixStream {
+         }
+     }
+ 
+-    fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd]) -> io::Result<usize> {
+-        let cmsg = if !fds.is_empty() {
++    fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd], creds: bool) -> io::Result<usize> {
++        let mut cmsg = if !fds.is_empty() {
+             vec![ControlMessage::ScmRights(fds)]
+         } else {
+             vec![]
+         };
++        #[cfg(any(target_os = "android", target_os = "linux"))]
++        let unix_creds;
++        if creds {
++            #[cfg(any(target_os = "android", target_os = "linux"))]
++            {
++                unix_creds = Some(nix::sys::socket::UnixCredentials::new());
++                cmsg.push(ControlMessage::ScmCredentials(unix_creds.as_ref().unwrap()));
++            }
++            #[cfg(any(target_os = "freebsd", target_os = "dragonfly"))]
++            cmsg.push(ControlMessage::ScmCreds);
++        }
+         let iov = [IoVec::from_slice(buffer)];
+         match sendmsg(self.as_raw_fd(), &iov, &cmsg, MsgFlags::empty(), None) {
+             // can it really happen?
+@@ -124,8 +139,8 @@ where
+         self.get_mut().recvmsg(buffer)
+     }
+ 
+-    fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd]) -> io::Result<usize> {
+-        self.get_mut().sendmsg(buffer, fds)
++    fn sendmsg(&mut self, buffer: &[u8], fds: &[RawFd], creds: bool) -> io::Result<usize> {
++        self.get_mut().sendmsg(buffer, fds, creds)
+     }
+ 
+     fn close(&self) -> io::Result<()> {
diff --git a/x11/kickoff/pkg-descr b/x11/kickoff/pkg-descr
new file mode 100644
index 000000000000..a5ad0621cc5b
--- /dev/null
+++ b/x11/kickoff/pkg-descr
@@ -0,0 +1,14 @@
+kickoff is a program launcher for Wayland. All programs found in $PATH
+are included in the search results. This list is then combined with
+your previous searches and sorted by amount of usage and if it fits
+the search query.
+
+Features:
+- Wayland native (only wlroots based compositors though)
+- Fuzzy search
+- Fast and snappy
+- Remembers often used applications
+- Argument support for launched programs
+- Paste support
+
+WWW: https://github.com/j0ru/kickoff