gerrit-config: Initial commit
Change-Id: Ib457ae15f2013d4bb63c13701a1e028a89f8c3b1
diff --git a/nginx/dark.css b/nginx/dark.css
new file mode 100644
index 0000000..e3f359f
--- /dev/null
+++ b/nginx/dark.css
@@ -0,0 +1,443 @@
+/*
+ _______
+ / \
+ .==. .==.
+ (( ))==(( ))
+ / "==" "=="\
+ /____|| || ||___\
+ ________ ____ ________ ___ ___
+ | ___ \ / \ | ___ \ | | / /
+ | | \ \ / /\ \ | | \ \| |_/ /
+ | | ) / /__\ \ | |__/ /| ___ \
+ | |__/ / ______ \| ____ \| | \ \
+_______|_______/__/ ____ \__\__|___\__\__|___\__\____
+| ___ \ | ____/ / \ | ___ \ | ____| ___ \
+| | \ \| |___ / /\ \ | | \ \| |___| | \ \
+| |__/ /| ____/ /__\ \ | | ) | ____| |__/ /
+| ____ \| |__/ ______ \| |__/ /| |___| ____ \
+|__| \__\____/__/ \__\_______/ |______|__| \__\
+ https://darkreader.org
+*/
+
+/*! Dark reader generated CSS | Licensed under MIT https://github.com/darkreader/darkreader/blob/master/LICENSE */
+
+/* User-Agent Style */
+html {
+ background-color: #181a1b !important;
+}
+html {
+ color-scheme: dark !important;
+}
+html, body, input, textarea, select, button {
+ background-color: #181a1b;
+}
+html, body, input, textarea, select, button {
+ border-color: #736b5e;
+ color: #e8e6e3;
+}
+a {
+ color: #3391ff;
+}
+table {
+ border-color: #545b5e;
+}
+::placeholder {
+ color: #b2aba1;
+}
+input:-webkit-autofill,
+textarea:-webkit-autofill,
+select:-webkit-autofill {
+ background-color: #404400 !important;
+ color: #e8e6e3 !important;
+}
+::-webkit-scrollbar {
+ background-color: #202324;
+ color: #aba499;
+}
+::-webkit-scrollbar-thumb {
+ background-color: #454a4d;
+}
+::-webkit-scrollbar-thumb:hover {
+ background-color: #575e62;
+}
+::-webkit-scrollbar-thumb:active {
+ background-color: #484e51;
+}
+::-webkit-scrollbar-corner {
+ background-color: #181a1b;
+}
+* {
+ scrollbar-color: #454a4d #202324;
+}
+::selection {
+ background-color: #004daa !important;
+ color: #e8e6e3 !important;
+}
+::-moz-selection {
+ background-color: #004daa !important;
+ color: #e8e6e3 !important;
+}
+
+/* Invert Style */
+.jfk-bubble.gtx-bubble, .captcheck_answer_label > input + img, span#closed_text > img[src^="https://www.gstatic.com/images/branding/googlelogo"], span[data-href^="https://www.hcaptcha.com/"] > #icon, #bit-notification-bar-iframe, ::-webkit-calendar-picker-indicator {
+ filter: invert(100%) hue-rotate(180deg) contrast(90%) !important;
+}
+
+/* Variables Style */
+:root {
+ --darkreader-neutral-background: #131516;
+ --darkreader-neutral-text: #d8d4cf;
+ --darkreader-selection-background: #004daa;
+ --darkreader-selection-text: #e8e6e3;
+}
+
+/* Modified CSS */
+ul,
+ol {
+ list-style-image: none;
+}
+.u-sha1 {
+ background-color: rgb(31, 34, 35);
+ color: rgb(232, 230, 227);
+}
+.u-lineNum {
+ border-right-color: rgb(52, 56, 58);
+ color: rgb(168, 160, 149);
+}
+.Site {
+ background-color: rgb(24, 26, 27);
+ background-image: none;
+ color: rgb(232, 230, 227);
+}
+.Site-header,
+.Site-footer {
+ background-color: rgb(34, 36, 38);
+ background-image: none;
+}
+.Site-header--withNavbar {
+ background-color: rgb(24, 26, 27);
+ background-image: none;
+}
+.Header-anchor {
+ color: rgb(168, 160, 149);
+ text-decoration-color: currentcolor;
+}
+.Header-nav {
+ background-color: rgb(34, 36, 38);
+ background-image: none;
+}
+.Header-menuItem {
+ color: rgb(61, 132, 255);
+}
+.Header-menuItem--noAction {
+ color: inherit;
+}
+.Breadcrumbs-crumb {
+ color: rgb(61, 132, 255);
+}
+.Breadcrumbs-crumb:last-child {
+ color: rgb(232, 230, 227);
+}
+.Footer {
+ color: rgb(168, 160, 149);
+}
+.RepoList-item:link,
+.RepoList-item:visited {
+ text-decoration-color: currentcolor;
+}
+.RepoList-item:hover {
+ background-color: rgb(34, 36, 38);
+ background-image: none;
+}
+.RepoList-item--header:hover {
+ background-color: rgb(24, 26, 27);
+ background-image: none;
+}
+.RepoList-itemName {
+ text-decoration-color: currentcolor;
+}
+.RepoList-item--header > .RepoList-itemName {
+ text-decoration-color: currentcolor;
+}
+.RepoList-itemDescription {
+ color: rgb(232, 230, 227);
+}
+.RepoMirroredFrom {
+ color: rgb(168, 160, 149);
+}
+.CloneRepo {
+ background-color: rgb(34, 36, 38);
+ background-image: none;
+}
+.CloneRepo-command {
+ border-color: rgb(62, 68, 70);
+}
+.RepoIndexDoc {
+ border-top-color: rgb(58, 62, 65);
+}
+.CommitLog-item--oneline:hover {
+ background-color: rgb(34, 36, 38);
+ background-image: none;
+}
+.CommitLog-time {
+ color: rgb(168, 160, 149);
+}
+.CommitLog-branchLabel {
+ color: rgb(224, 89, 73);
+}
+.CommitLog-tagLabel {
+ color: rgb(97, 255, 150);
+}
+.MetadataMessage {
+ background-color: rgb(27, 29, 30);
+ border-color: rgb(62, 68, 70);
+ color: rgb(232, 230, 227);
+}
+.DiffTree-action--add {
+ color: rgb(133, 255, 133);
+}
+.DiffTree-action--delete {
+ color: rgb(255, 133, 133);
+}
+.DiffTree-action--rename,
+.DiffTree-action--copy {
+ color: rgb(143, 184, 255);
+}
+.FileList-item:hover {
+ background-color: rgb(34, 36, 38);
+ background-image: none;
+}
+.FileContents-line {
+ border-color: currentcolor;
+}
+.FileContents-lineNum::before {
+ color: rgb(178, 172, 162);
+}
+.FileContents-lineContents:target {
+ background-color: rgb(43, 53, 58);
+ background-image: none;
+}
+.InlineReadme {
+ border-top-color: rgb(58, 62, 65);
+}
+.InlineReadme-path {
+ color: rgb(168, 160, 149);
+}
+.Blame-region--bg1 {
+ background-color: rgb(24, 26, 27);
+ background-image: none;
+}
+.Blame-region--bg2 {
+ background-color: rgb(31, 34, 35);
+ background-image: none;
+}
+.Blame-lineNum:hover {
+ text-decoration-color: currentcolor;
+}
+.Diff-fileIndex {
+ color: rgb(189, 183, 175);
+}
+.Diff-unified {
+ border-bottom-color: rgb(58, 62, 65);
+ border-top-color: rgb(58, 62, 65);
+}
+.Diff-hunk {
+ color: rgb(82, 145, 255);
+}
+.Diff-delete {
+ color: rgb(255, 61, 61);
+}
+.Diff-insert {
+ color: rgb(109, 255, 109);
+}
+.doc hr {
+ border-color: rgb(72, 78, 81) currentcolor currentcolor;
+}
+.doc a {
+ text-decoration-color: currentcolor;
+}
+.doc a:link {
+ color: rgb(96, 161, 225);
+}
+.doc a:visited {
+ color: rgb(132, 105, 182);
+}
+.doc a:hover {
+ text-decoration-color: currentcolor;
+}
+.doc a.h:link,
+.doc a.h:visited {
+ color: rgb(189, 183, 175);
+}
+.doc a.h:focus {
+ outline-color: currentcolor;
+}
+.doc a.h:hover {
+ text-decoration-color: currentcolor;
+}
+.doc h1:hover a.h span::before,
+.doc h2:hover a.h span::before,
+.doc h3:hover a.h span::before,
+.doc h4:hover a.h span::before,
+.doc h5:hover a.h span::before,
+.doc h6:hover a.h span::before {
+ color: rgb(178, 172, 162);
+}
+.doc h1:hover a:hover.h span::before,
+.doc h2:hover a:hover.h span::before,
+.doc h3:hover a:hover.h span::before,
+.doc h4:hover a:hover.h span::before,
+.doc h5:hover a:hover.h span::before,
+.doc h6:hover a:hover.h span::before {
+ text-decoration-color: currentcolor;
+}
+.doc h1:hover a:visited.h span::before,
+.doc h2:hover a:visited.h span::before,
+.doc h3:hover a:visited.h span::before,
+.doc h4:hover a:visited.h span::before,
+.doc h5:hover a:visited.h span::before,
+.doc h6:hover a:visited.h span::before {
+ color: rgb(178, 172, 162);
+}
+.doc img {
+ border-color: currentcolor;
+}
+iframe.noborder {
+ border-color: currentcolor;
+}
+.doc strong {
+ color: inherit;
+}
+.doc blockquote {
+ background-color: rgb(49, 45, 0);
+ border-left-color: rgb(180, 132, 0);
+}
+.doc pre {
+ background-color: rgb(27, 29, 30);
+ border-color: rgb(62, 68, 70);
+}
+.doc code {
+ background-color: rgb(30, 32, 33);
+ border-color: transparent;
+}
+.doc th,
+.doc td {
+ border-color: rgb(53, 57, 59);
+}
+.doc th {
+ background-color: rgb(30, 32, 33);
+}
+.toc-aux {
+ background-color: rgb(27, 30, 31);
+ background-image: none;
+ border-color: rgb(52, 56, 58);
+}
+.toc ul li {
+ list-style-image: none;
+}
+.toc ul ul li {
+ list-style-image: none;
+}
+.note,
+.promo,
+.aside {
+ border-color: currentcolor;
+}
+.note {
+ background-color: rgb(50, 43, 0);
+ background-image: none;
+ border-color: rgb(87, 80, 24);
+}
+.promo {
+ background-color: rgb(27, 29, 30);
+ background-image: none;
+ border-color: rgb(30, 44, 79);
+}
+.aside {
+ background-color: rgb(27, 30, 31);
+ background-image: none;
+ border-color: rgb(52, 56, 58);
+}
+
+/* Override Style */
+.vimvixen-hint {
+ background-color: #7b5300 !important;
+ border-color: #d8b013 !important;
+ color: #f3e8c8 !important;
+}
+::placeholder {
+ opacity: 0.5 !important;
+}
+#edge-translate-panel-body,
+.MuiTypography-body1 {
+ color: var(--darkreader-neutral-text) !important;
+}
+gr-main-header {
+ background-color: #0f3a48 !important;
+}
+.tou-z65h9k,
+.tou-mignzq,
+.tou-1b6i2ox,
+.tou-lnqlqk {
+ background-color: var(--darkreader-neutral-background) !important;
+}
+.tou-75mvi {
+ background-color: #032029 !important;
+}
+.tou-ta9e87,
+.tou-1w3fhi0,
+.tou-1b8t2us,
+.tou-py7lfi,
+.tou-1lpmd9d,
+.tou-1frrtv8,
+.tou-17ezmgn {
+ background-color: #0a0a0a !important;
+}
+.tou-uknfeu {
+ background-color: #231603 !important;
+}
+.tou-6i3zyv {
+ background-color: #19576c !important;
+}
+embed[type="application/pdf"] { filter: invert(100%) contrast(90%); }
+
+/* Merged from file viewer */
+.tag {
+ color: rgb(122, 171, 255) !important;
+}
+
+.atn {
+ color: rgb(255, 133, 255) !important;
+}
+
+.pun {
+ color: rgb(255, 255, 133) !important;
+}
+
+.atv {
+ color: rgb(109, 255, 109) !important;
+}
+
+.pln {
+ color: rgb(232, 230, 227) !important;
+}
+
+.str {
+ color: rgb(109, 255, 109) !important;
+}
+
+.com {
+ color: rgb(255, 109, 109) !important;
+}
+
+.kwd {
+ color: rgb(122, 171, 255) !important;
+}
+
+.typ {
+ color: rgb(255, 133, 255) !important;
+}
+
+.lit {
+ color: rgb(133, 255, 255) !important;
+}
diff --git a/nginx/git.leafos.org b/nginx/git.leafos.org
new file mode 100644
index 0000000..83b0308
--- /dev/null
+++ b/nginx/git.leafos.org
@@ -0,0 +1,74 @@
+server {
+ listen 80;
+ listen [::]:80;
+ server_name git.leafos.org;
+ return 301 https://$server_name$request_uri;
+ root /var/www/git.leafos.org/;
+
+ access_log /var/log/nginx/access/git.leafos.org.log;
+ error_log /var/log/nginx/error/git.leafos.org.log;
+}
+
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+
+ include hsts.conf;
+
+ root /var/www/git.leafos.org/;
+
+ # Add index.php to the list if you are using PHP
+ index index.html index.htm index.php;
+
+ server_name git.leafos.org;
+ access_log /var/log/nginx/access/git.leafos.org.log;
+ error_log /var/log/nginx/error/git.leafos.org.log;
+
+ location / {
+ proxy_pass http://localhost:8080/;
+ proxy_set_header Accept-Encoding "";
+ proxy_cookie_domain review.leafos.org $host;
+ # Rewrite Location: headers
+ proxy_redirect https://localhost:8080/ /;
+ sub_filter_types *;
+ sub_filter '/' '/';
+ sub_filter 'LeafOS Git repositories' 'LeafOS Git repositories';
+ sub_filter 'Git repositories on LeafOS' 'Git repositories on LeafOS';
+ sub_filter 'review.leafos.org</a>' 'LeafOS</a>';
+ sub_filter '' '';
+ # Redirect sign in link
+ sub_filter '/login/git.leafos.org%2F' '/login/git.leafos.org%2F';
+ # Remove disallowed repos
+ sub_filter 'href="/All-Users/"' 'href="/All-Users/" style="display: none;"';
+ sub_filter 'href="/All-Projects/"' 'href="/All-Projects/" style="display: none;"';
+ sub_filter 'href="/Leaf-' 'style="display: none;" href="/Leaf-';
+ sub_filter 'href="/OEM-' 'style="display: none;" href="/OEM-';
+ sub_filter 'href="/PROJECT-' 'style="display: none;" href="/PROJECT-';
+ # Inject custom javascript for theme changes
+ sub_filter '<head>' '<head><script type="text/javascript" src="/static/leaf-gitiles.js"></script>';
+ sub_filter_once off;
+ }
+
+ location /static {
+ root /var/www/git.leafos.org;
+ }
+
+ # Gerrit resources
+ location /styles {
+ proxy_pass http://localhost:8080;
+ }
+ location /fonts {
+ proxy_pass http://localhost:8080;
+ }
+ location /favicon.ico {
+ proxy_pass http://localhost:8080;
+ }
+
+ # git clone
+ location ~ ^.*/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {
+ proxy_pass http://localhost:8080;
+ }
+
+ ssl_certificate /etc/letsencrypt/live/leafos.org/fullchain.pem; # managed by Certbot
+ ssl_certificate_key /etc/letsencrypt/live/leafos.org/privkey.pem; # managed by Certbot
+}
diff --git a/nginx/leaf-gitiles.js b/nginx/leaf-gitiles.js
new file mode 100644
index 0000000..765c50c
--- /dev/null
+++ b/nginx/leaf-gitiles.js
@@ -0,0 +1,20 @@
+function getCookie(name){
+ var pattern = RegExp(name + "=.[^;]*")
+ var matched = document.cookie.match(pattern)
+ if(matched){
+ var cookie = matched[0].split('=')
+ return cookie[1]
+ }
+ return false
+}
+
+window.addEventListener('DOMContentLoaded', (event) => {
+ // Dark Theme support, see also leaf.js gerrit plugin
+ if (getCookie("LeafDarkTheme") == "true") {
+ var element = document.createElement("link");
+ element.setAttribute("rel", "stylesheet");
+ element.setAttribute("type", "text/css");
+ element.setAttribute("href", "/static/dark.css");
+ document.head.appendChild(element);
+ }
+});
diff --git a/nginx/review.leafos.org b/nginx/LeafOS
new file mode 100644
index 0000000..60a8213
--- /dev/null
+++ b/nginx/review.leafos.org
@@ -0,0 +1,44 @@
+server {
+ listen 80;
+ listen [::]:80;
+ server_name review.leafos.org;
+ return 301 https://$server_name$request_uri;
+ root /var/www/review.leafos.org/;
+
+ access_log /var/log/nginx/access/review.leafos.org.log;
+ error_log /var/log/nginx/error/review.leafos.org.log;
+}
+
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+
+ include hsts.conf;
+
+ root /var/www/review.leafos.org/;
+
+ # Add index.php to the list if you are using PHP
+ index index.html index.htm index.php;
+
+ server_name review.leafos.org;
+ access_log /var/log/nginx/access/review.leafos.org.log;
+ error_log /var/log/nginx/error/review.leafos.org.log;
+
+ location / {
+ proxy_pass http://localhost:8080;
+ proxy_set_header Accept-Encoding "";
+ proxy_redirect https://localhost:8080/ /;
+ sub_filter_types *;
+ # Rewrite gitiles path
+ sub_filter '/' 'https://git.leafos.org/';
+ sub_filter_once off;
+ }
+
+ location ^~ /git.leafos.org {
+ # Used for login redirect on git.leafos.org
+ rewrite ^/git.leafos.org?(.*)$ https://git.leafos.org/$1 permanent;
+ }
+
+ ssl_certificate /etc/letsencrypt/live/leafos.org/fullchain.pem; # managed by Certbot
+ ssl_certificate_key /etc/letsencrypt/live/leafos.org/privkey.pem; # managed by Certbot
+}
diff --git a/plugins/leaf.js b/plugins/leaf.js
new file mode 100644
index 0000000..c1f4c2e
--- /dev/null
+++ b/plugins/leaf.js
@@ -0,0 +1,56 @@
+function getSeason() {
+ var month = new Date().toString().split(" ")[1];
+ var date = new Date().toString().split(" ")[2];
+ switch (month) {
+ case "Jan":
+ case "Feb":
+ return "Winter";
+ case "Mar":
+ return date < 20 ? "Winter" : "Spring";
+ case "Apr":
+ case "May":
+ return "Spring";
+ case "Jun":
+ return date < 21 ? "Spring" : "Summer";
+ case "Jul":
+ case "Aug":
+ return "Summer";
+ case "Sep":
+ return date < 22 ? "Summer" : "Autumn";
+ case "Oct":
+ case "Nov":
+ return "Autumn";
+ case "Dec":
+ return date < 22 ? "Autumn" : "Winter";
+ }
+}
+
+Gerrit.install(plugin => {
+ var bgColor = "#90ee90";
+/* switch (getSeason()) {
+ case "Autumn":
+ bgColor = "#ffee90";
+ break;
+ case "Winter":
+ bgColor = "#eeffee";
+ break;
+ }*/
+
+ const styleEl = document.createElement('style');
+ styleEl.innerHTML = `
+ html, html.darkTheme {
+ --header-background-color: ` + bgColor + `;
+ --header-text-color: var(--gray-900);
+ --header-title-content: 'LeafOS Gerrit';
+ }
+ `;
+ document.head.appendChild(styleEl);
+
+ // Set a dark-theme cookie for use on git.leafos.org
+ // Gerrit is always reloading after switching theme
+ // As of Gerrit v3.7 there is no known way to check if dark theme is enabled
+ var date = new Date();
+ date.setYear(date.getYear() + 1900 + 5);
+ document.cookie = "LeafDarkTheme=true; domain=.leafos.org; path=/; SameSite=Strict; expires=" + date.toGMTString() + ";";
+});
+
diff --git a/structure.yaml b/structure.yaml
new file mode 100644
index 0000000..c48b541
--- /dev/null
+++ b/structure.yaml
@@ -0,0 +1,198 @@
+All-Projects:
+ - All-Users
+ - Leaf-Device-Projects
+ - LeafOS-Blobs/proprietary_external_leaf-fonts
+ - LeafOS-Blobs/proprietary_vendor_gapps
+ - LeafOS-Project/android
+ - LeafOS-Project/android_art
+ - LeafOS-Project/android_bootable_recovery
+ - LeafOS-Project/android_build
+ - LeafOS-Project/android_build_soong
+ - LeafOS-Project/android_device_leaf_sepolicy
+ - LeafOS-Project/android_device_lineage_sepolicy
+ - LeafOS-Project/android_external_ant-wireless_ant_client
+ - LeafOS-Project/android_external_ant-wireless_ant_native
+ - LeafOS-Project/android_external_ant-wireless_ant_service
+ - LeafOS-Project/android_external_ant-wireless_hidl
+ - LeafOS-Project/android_external_chromium
+ - LeafOS-Project/android_external_colorkt
+ - LeafOS-Project/android_external_gptfdisk
+ - LeafOS-Project/android_external_leaf-prebuilts
+ - LeafOS-Project/android_external_setupcompat
+ - LeafOS-Project/android_external_themelib
+ - LeafOS-Project/android_external_tinycompress
+ - LeafOS-Project/android_external_wpa_supplicant_8
+ - LeafOS-Project/android_external_yifan
+ - LeafOS-Project/android_frameworks_av
+ - LeafOS-Project/android_frameworks_base
+ - LeafOS-Project/android_frameworks_libs_net
+ - LeafOS-Project/android_frameworks_libs_systemui
+ - LeafOS-Project/android_frameworks_native
+ - LeafOS-Project/android_frameworks_opt_colorpicker
+ - LeafOS-Project/android_frameworks_opt_timezonepicker
+ - LeafOS-Project/android_hardware_interfaces
+ - LeafOS-Project/android_hardware_libhardware
+ - LeafOS-Project/android_hardware_lineage_interfaces
+ - LeafOS-Project/android_packages_apps_Aperture
+ - LeafOS-Project/android_packages_apps_Bromite
+ - LeafOS-Project/android_packages_apps_Contacts
+ - LeafOS-Project/android_packages_apps_DeskClock
+ - LeafOS-Project/android_packages_apps_Dialer
+ - LeafOS-Project/android_packages_apps_DocumentsUI
+ - LeafOS-Project/android_packages_apps_Etar
+ - LeafOS-Project/android_packages_apps_ExactCalculator
+ - LeafOS-Project/android_packages_apps_FaceUnlock
+ - LeafOS-Project/android_packages_apps_Gallery2
+ - LeafOS-Project/android_packages_apps_Glimpse
+ - LeafOS-Project/android_packages_apps_GrapheneCamera
+ - LeafOS-Project/android_packages_apps_Launcher3
+ - LeafOS-Project/android_packages_apps_LeafBackgrounds
+ - LeafOS-Project/android_packages_apps_Messaging
+ - LeafOS-Project/android_packages_apps_MuPDF
+ - LeafOS-Project/android_packages_apps_Seedvault
+ - LeafOS-Project/android_packages_apps_Settings
+ - LeafOS-Project/android_packages_apps_SettingsIntelligence
+ - LeafOS-Project/android_packages_apps_SetupWizard
+ - LeafOS-Project/android_packages_apps_SimpleDeviceConfig
+ - LeafOS-Project/android_packages_apps_Stk
+ - LeafOS-Project/android_packages_apps_ThemePicker
+ - LeafOS-Project/android_packages_apps_Updater
+ - LeafOS-Project/android_packages_apps_WallpaperPicker2
+ - LeafOS-Project/android_packages_inputmethods_LatinIME
+ - LeafOS-Project/android_packages_modules_Bluetooth
+ - LeafOS-Project/android_packages_modules_Connectivity
+ - LeafOS-Project/android_packages_modules_adb
+ - LeafOS-Project/android_packages_overlays_Leaf
+ - LeafOS-Project/android_packages_resources_devicesettings
+ - LeafOS-Project/android_prebuilts_extract-tools
+ - LeafOS-Project/android_prebuilts_tools-leaf
+ - LeafOS-Project/android_prebuilts_tools-lineage
+ - LeafOS-Project/android_system_core
+ - LeafOS-Project/android_system_sepolicy
+ - LeafOS-Project/android_system_tools_mkbootimg
+ - LeafOS-Project/android_tools_extract-utils
+ - LeafOS-Project/android_vendor_crowdin
+ - LeafOS-Project/android_vendor_lawnicons
+ - LeafOS-Project/android_vendor_leaf
+ - LeafOS-Project/android_vendor_leaf-apps_ThemePickerLeaf
+ - LeafOS-Project/android_vendor_lineage_compat
+ - LeafOS-Project/android_vendor_microg
+ - LeafOS-Project/leaf_build
+ - LeafOS-Project/leaf_crowdin
+ - LeafOS-Project/leaf_devices
+ - LeafOS-Project/leaf_gerrit-config
+ - LeafOS-Project/leaf_ota
+ - LeafOS-Project/leaf_scripts
+ - LeafOS-Project/leaf_www
+Leaf-Device-Projects:
+ - LeafOS-Blobs/proprietary_vendor_firmware
+ - OEM-MediaTek
+ - OEM-Realme
+ - OEM-Samsung
+ - OEM-qcom
+OEM-MediaTek:
+ - PROJECT-MediaTek-hardware
+OEM-Realme:
+ - PROJECT-Realme-RM6785
+OEM-Samsung:
+ - PROJECT-Samsung-exynos9820
+ - PROJECT-Samsung-gta4xl
+ - PROJECT-Samsung-hardware
+ - PROJECT-Samsung-universal7904
+OEM-qcom:
+ - PROJECT-qcom-hardware
+PROJECT-MediaTek-hardware:
+ - LeafOS-Devices/android_device_mediatek_sepolicy
+ - LeafOS-Devices/android_device_mediatek_sepolicy_vndr
+ - LeafOS-Devices/android_hardware_mediatek
+ - LeafOS-Devices/android_vendor_mediatek_opensource_interfaces
+PROJECT-Realme-RM6785:
+ - LeafOS-Blobs/proprietary_vendor_realme_RM6785
+ - LeafOS-Devices/android_device_realme_RM6785
+ - LeafOS-Devices/android_kernel_realme_mt6785
+PROJECT-Samsung-exynos9820:
+ - LeafOS-Blobs/proprietary_vendor_samsung_beyond0lte
+ - LeafOS-Blobs/proprietary_vendor_samsung_beyond1lte
+ - LeafOS-Blobs/proprietary_vendor_samsung_beyond2lte
+ - LeafOS-Blobs/proprietary_vendor_samsung_beyondx
+ - LeafOS-Blobs/proprietary_vendor_samsung_d1
+ - LeafOS-Blobs/proprietary_vendor_samsung_d2s
+ - LeafOS-Blobs/proprietary_vendor_samsung_d2x
+ - LeafOS-Blobs/proprietary_vendor_samsung_exynos9820-common
+ - LeafOS-Blobs/proprietary_vendor_samsung_f62
+ - LeafOS-Devices/android_device_samsung_beyond0lte
+ - LeafOS-Devices/android_device_samsung_beyond1lte
+ - LeafOS-Devices/android_device_samsung_beyond2lte
+ - LeafOS-Devices/android_device_samsung_beyondx
+ - LeafOS-Devices/android_device_samsung_d1
+ - LeafOS-Devices/android_device_samsung_d2s
+ - LeafOS-Devices/android_device_samsung_d2x
+ - LeafOS-Devices/android_device_samsung_exynos9820-common
+ - LeafOS-Devices/android_device_samsung_f62
+ - LeafOS-Devices/android_kernel_samsung_exynos9820
+PROJECT-Samsung-gta4xl:
+ - LeafOS-Blobs/proprietary_vendor_samsung_gta4xl
+ - LeafOS-Blobs/proprietary_vendor_samsung_gta4xl-common
+ - LeafOS-Blobs/proprietary_vendor_samsung_gta4xlwifi
+ - LeafOS-Devices/android_device_samsung_gta4xl
+ - LeafOS-Devices/android_device_samsung_gta4xl-common
+ - LeafOS-Devices/android_device_samsung_gta4xlwifi
+ - LeafOS-Devices/android_kernel_samsung_gta4xl
+PROJECT-Samsung-hardware:
+ - LeafOS-Devices/android_device_samsung_slsi_sepolicy
+ - LeafOS-Devices/android_hardware_samsung
+ - LeafOS-Devices/android_hardware_samsung_slsi-linaro_config
+ - LeafOS-Devices/android_hardware_samsung_slsi-linaro_exynos
+ - LeafOS-Devices/android_hardware_samsung_slsi-linaro_exynos5
+ - LeafOS-Devices/android_hardware_samsung_slsi-linaro_graphics
+ - LeafOS-Devices/android_hardware_samsung_slsi-linaro_openmax
+ - LeafOS-Devices/android_hardware_samsung_slsi_libbt
+ - LeafOS-Devices/android_hardware_samsung_slsi_scsc_wifibt_wifi_hal
+ - LeafOS-Devices/android_hardware_samsung_slsi_scsc_wifibt_wpa_supplicant_lib
+PROJECT-Samsung-universal7904:
+ - LeafOS-Blobs/proprietary_vendor_samsung_m20lte
+ - LeafOS-Blobs/proprietary_vendor_samsung_universal7904-common
+ - LeafOS-Devices/android_device_samsung_m20lte
+ - LeafOS-Devices/android_device_samsung_universal7904-common
+ - LeafOS-Devices/android_kernel_samsung_universal7904
+PROJECT-qcom-hardware:
+ - LeafOS-Project/android_device_qcom_sepolicy
+ - LeafOS-Project/android_device_qcom_sepolicy_vndr
+ - LeafOS-Project/android_external_json-c
+ - LeafOS-Project/android_hardware_qcom-caf_common
+ - LeafOS-Project/android_hardware_qcom_audio
+ - LeafOS-Project/android_hardware_qcom_audio-ar
+ - LeafOS-Project/android_hardware_qcom_bootctrl
+ - LeafOS-Project/android_hardware_qcom_bt
+ - LeafOS-Project/android_hardware_qcom_display
+ - LeafOS-Project/android_hardware_qcom_media
+ - LeafOS-Project/android_hardware_qcom_sdm845_data_ipacfg-mgr
+ - LeafOS-Project/android_hardware_qcom_sdm845_display
+ - LeafOS-Project/android_hardware_qcom_sdm845_gps
+ - LeafOS-Project/android_hardware_qcom_sdm845_media
+ - LeafOS-Project/android_hardware_qcom_thermal
+ - LeafOS-Project/android_hardware_qcom_vr
+ - LeafOS-Project/android_hardware_qcom_wlan
+ - LeafOS-Project/android_vendor_codeaurora_telephony
+ - LeafOS-Project/android_vendor_qcom_opensource_agm
+ - LeafOS-Project/android_vendor_qcom_opensource_arpal-lx
+ - LeafOS-Project/android_vendor_qcom_opensource_audio
+ - LeafOS-Project/android_vendor_qcom_opensource_audio-hal_st-hal
+ - LeafOS-Project/android_vendor_qcom_opensource_audio-hal_st-hal-ar
+ - LeafOS-Project/android_vendor_qcom_opensource_core-utils-sys
+ - LeafOS-Project/android_vendor_qcom_opensource_core-utils-vendor
+ - LeafOS-Project/android_vendor_qcom_opensource_data-ipa-cfg-mgr
+ - LeafOS-Project/android_vendor_qcom_opensource_dataipa
+ - LeafOS-Project/android_vendor_qcom_opensource_dataservices
+ - LeafOS-Project/android_vendor_qcom_opensource_display
+ - LeafOS-Project/android_vendor_qcom_opensource_display-commonsys
+ - LeafOS-Project/android_vendor_qcom_opensource_display-commonsys-intf
+ - LeafOS-Project/android_vendor_qcom_opensource_fm-commonsys
+ - LeafOS-Project/android_vendor_qcom_opensource_healthd-ext
+ - LeafOS-Project/android_vendor_qcom_opensource_interfaces
+ - LeafOS-Project/android_vendor_qcom_opensource_libfmjni
+ - LeafOS-Project/android_vendor_qcom_opensource_power
+ - LeafOS-Project/android_vendor_qcom_opensource_thermal-engine
+ - LeafOS-Project/android_vendor_qcom_opensource_usb
+ - LeafOS-Project/android_vendor_qcom_opensource_vibrator
+ - LeafOS-Project/android_vendor_qcom_opensource_wfd-commonsys