diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9171cb3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+./sstate
+./sstate-cache
+./download
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8aa2645
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) [year] [fullname]
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..32f1bc5
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,3 @@
+Used docker container: MIT license, copyright notice: (C) 2021-2023 jhnc-oss
+./dev/bootstrap.sh (modified): MIT license, copyright notice: (C) 2021-2023 jhnc-oss
+./dev/init_env.sh (modified): MIT license, copyright notice: (C) 2021-2023 jhnc-oss
diff --git a/default.xml b/default.xml
new file mode 100644
index 0000000..16afe6b
--- /dev/null
+++ b/default.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/AddUserToSubgidAndSubuid.sh b/dev/AddUserToSubgidAndSubuid.sh
new file mode 100755
index 0000000..f831a7c
--- /dev/null
+++ b/dev/AddUserToSubgidAndSubuid.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -o errexit
+set -o nounset
+
+USERNAME="$(logname)"
+echo "${USERNAME}":"$(id -u "${USERNAME}")":65536 >> /etc/subuid
+echo "${USERNAME}":"$(id -g "${USERNAME}")":65536 >> /etc/subgid
diff --git a/dev/bootstrap.sh b/dev/bootstrap.sh
new file mode 100755
index 0000000..9a0402c
--- /dev/null
+++ b/dev/bootstrap.sh
@@ -0,0 +1,90 @@
+#!/usr/bin/env bash
+
+set -o errexit
+set -o pipefail
+
+MANIFEST_BRANCH="${1:-main}"
+
+YOCTO_GID="4040"
+YOCTO_UID="2000"
+YOCTO_USER="yocto"
+YOCTO_WORKDIR="/opt/${YOCTO_USER}"
+
+[[ -d "$PWD"/download ]] || mkdir "$PWD"/download
+[[ -d "$PWD"/sstate-cache ]] || mkdir "$PWD"/sstate-cache
+
+#sudo chmod -R 775 "${PWD}"/{download,sstate-cache}
+
+subgidSize=$(( $(podman info --format "{{ range .Host.IDMappings.GIDMap }}+{{.Size }}{{end }}" ) - 1 ))
+subuidSize=$(( $(podman info --format "{{ range .Host.IDMappings.UIDMap }}+{{.Size }}{{end }}" ) - 1 ))
+
+
+if [ -z "$DO_DEPLOY" ] ; then DO_DEPLOY=false ; fi
+if [ -z "$DO_SSTATE" ] ; then DO_SSTATE=false ; fi
+
+usage() {
+ echo " --deploy map deploy folder for outside access"
+ echo " --sstate map sstate folder to preserve regarless of container"
+ echo " --name= assign a name to the container"
+}
+
+while [ -n "$1" ] ; do
+ case "$1" in
+ --deploy)
+ DO_DEPLOY=true
+ ;;
+ --sstate)
+ DO_SSTATE=true
+ ;;
+ --name=*)
+ CONTAINER_NAME="$1"
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+
+if $DO_SSTATE ; then
+ SSTATE_PATH="sstate-cache"
+ mkdir -p $SSTATE_PATH
+ sstate_param1="-v"
+ sstate_param2="${PWD}"/"${SSTATE_PATH}":"${YOCTO_WORKDIR}"/"${SSTATE_PATH}"
+fi
+
+if $DO_DEPLOY ; then
+ DEPLOY_PATH="deploy-rpms"
+ mkdir -p $DEPLOAY_PATH
+ deploy_param1="-v"
+ deploy_param2="${PWD}"/"${DEPOLY_PATH}":"${YOCTO_WORKDIR}"/"${DEPLOY_PATH}"
+fi
+
+
+
+podman run \
+ -ti \
+ --rm \
+ --pull=always \
+ --gidmap ${YOCTO_GID}:0:1 \
+ --gidmap $((YOCTO_GID+1)):$((YOCTO_GID+1)):$((subgidSize-YOCTO_GID)) \
+ --gidmap 0:1:${YOCTO_GID} \
+ --uidmap ${YOCTO_UID}:0:1 \
+ --uidmap $((YOCTO_UID+1)):$((YOCTO_UID+1)):$((subuidSize-YOCTO_UID)) \
+ --uidmap 0:1:${YOCTO_UID} \
+ --user "${YOCTO_USER}:${YOCTO_USER}" \
+ --workdir "${YOCTO_WORKDIR}" \
+ ${deploy_param1} ${deploy_param2} \
+ ${sstate_param1} ${sstate_param2} \
+ -v "${PWD}"/default.xml:"${YOCTO_WORKDIR}"/default.xml \
+ -v "${PWD}"/meta-caros:"${YOCTO_WORKDIR}"/meta-caros:Z \
+ -v "${PWD}"/dev:"${YOCTO_WORKDIR}"/dev:Z \
+ -v "${PWD}"/download:"${YOCTO_WORKDIR}"/download:Z \
+ -v "${PWD}"/sstate:"${YOCTO_WORKDIR}"/sstate:Z \
+ --env TEMPLATECONF="${YOCTO_WORKDIR}"/meta-caros/conf/templates \
+ --env SSTATE_PATH="${SSTATE_PATH}" \
+ ${CONTAINER_NAME} \
+ ghcr.io/jhnc-oss/yocto-image/yocto:38 \
+ bash -c "dev/init_env.sh "
diff --git a/dev/init_env.sh b/dev/init_env.sh
new file mode 100755
index 0000000..055d348
--- /dev/null
+++ b/dev/init_env.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+set -o errexit
+
+# Workaround for unsupported local manifest
+mkdir _local
+cd "${YOCTO_DIR}/_local"
+cp "${YOCTO_DIR}/default.xml" .
+git init -b master
+git add .
+git commit -m "local manifest"
+cd - > /dev/null
+
+repo --color=always init _local
+repo sync --no-clone-bundle
+rm -rf "${YOCTO_DIR}/_local"
+
+source poky/oe-init-build-env
+
+exec /bin/bash
diff --git a/meta-caros/conf/distro/caros.conf b/meta-caros/conf/distro/caros.conf
new file mode 100644
index 0000000..1761061
--- /dev/null
+++ b/meta-caros/conf/distro/caros.conf
@@ -0,0 +1,18 @@
+include conf/distro/include/preferred-versions.conf
+
+include conf/distro/poky.conf
+
+DISTRO = "caros"
+DISTRO_NAME = "CaROS (Car Realtime Operating System)"
+
+DISTRO_VERSION = "0.0.1"
+DISTRO_CODENAME = "ganymed"
+SDK_VENDOR = "-carossdk"
+SDK_VERSION = "${@d.getVar('DISTRO_VERSION').replace('snapshot-${METADATA_REVISION}', 'snapshot')}"
+SDK_VERSION[vardepvalue] = "${SDK_VERSION}"
+
+MAINTAINER = "Lars Niesen "
+
+TARGET_VENDOR = "-caros"
+
+DISTRO_FEATURES ?= ""
diff --git a/meta-caros/conf/distro/include/preferred-versions.conf b/meta-caros/conf/distro/include/preferred-versions.conf
new file mode 100644
index 0000000..f8668af
--- /dev/null
+++ b/meta-caros/conf/distro/include/preferred-versions.conf
@@ -0,0 +1,5 @@
+#########################
+# Enforce package version
+#########################
+PREFERRED_VERSION_linux-yocto ?= "5.15%"
+PREFERRED_VERSION_linux-yocto-rt ?= "5.15%"
diff --git a/meta-caros/conf/layer.conf b/meta-caros/conf/layer.conf
new file mode 100644
index 0000000..140ed38
--- /dev/null
+++ b/meta-caros/conf/layer.conf
@@ -0,0 +1,20 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH =. "${LAYERDIR}:"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "meta-caros"
+BBFILE_PATTERN_meta-caros = "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-caros = "5"
+
+LAYERSERIES_COMPAT_meta-caros = "kirkstone"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_meta-caros = "1"
+
+LAYERDEPENDS_meta-caros = "core"
+
+REQUIRED_POKY_BBLAYERS_CONF_VERSION = "2"
diff --git a/meta-caros/conf/templates/bblayers.conf.sample b/meta-caros/conf/templates/bblayers.conf.sample
new file mode 100644
index 0000000..9f1b450
--- /dev/null
+++ b/meta-caros/conf/templates/bblayers.conf.sample
@@ -0,0 +1,25 @@
+# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
+# changes incompatibly
+POKY_BBLAYERS_CONF_VERSION = "1"
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+
+BBLAYERS ?= " \
+ ${TOPDIR}/../poky/meta \
+ ${TOPDIR}/../poky/meta-poky \
+ ${TOPDIR}/../poky/meta-yocto-bsp \
+ ${TOPDIR}/../meta-qt6 \
+ ${TOPDIR}/../meta-selinux \
+ ${TOPDIR}/../meta-oe/meta-filesystems \
+ ${TOPDIR}/../meta-oe/meta-gnome \
+ ${TOPDIR}/../meta-oe/meta-initramfs \
+ ${TOPDIR}/../meta-oe/meta-multimedia \
+ ${TOPDIR}/../meta-oe/meta-networking \
+ ${TOPDIR}/../meta-oe/meta-oe \
+ ${TOPDIR}/../meta-oe/meta-perl \
+ ${TOPDIR}/../meta-oe/meta-python \
+ ${TOPDIR}/../meta-oe/meta-webserver \
+ ${TOPDIR}/../meta-oe/meta-xfce \
+"
+
diff --git a/meta-caros/conf/templates/conf-notes.txt b/meta-caros/conf/templates/conf-notes.txt
new file mode 100644
index 0000000..16f37b2
--- /dev/null
+++ b/meta-caros/conf/templates/conf-notes.txt
@@ -0,0 +1,27 @@
+
+ ██████╗ █████╗ ██████╗ ██████╗ ███████╗
+██╔════╝██╔══██╗██╔══██╗██╔═══██╗██╔════╝
+██║ ███████║██████╔╝██║ ██║███████╗
+██║ ██╔══██║██╔══██╗██║ ██║╚════██║
+╚██████╗██║ ██║██║ ██║╚██████╔╝███████║
+ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
+
+
+Welcome to the CaROS yocto buildsystem.
+
+
+You can now run 'bitbake '
+
+Common targets are:
+ core-image-minimal
+ core-image-full-cmdline
+ core-image-sato
+ core-image-weston
+ meta-toolchain
+ meta-ide-support
+
+Other commonly useful commands are:
+ - 'devtool' and 'recipetool' handle common recipe tasks
+ - 'bitbake-layers' handles common layer tasks
+ - 'oe-pkgdata-util' handles common target package tasks
+
diff --git a/meta-caros/conf/templates/local.conf.sample b/meta-caros/conf/templates/local.conf.sample
new file mode 100644
index 0000000..3f099ef
--- /dev/null
+++ b/meta-caros/conf/templates/local.conf.sample
@@ -0,0 +1,120 @@
+MACHINE ?= "genericx86-64"
+
+DL_DIR ?= "${TOPDIR}/downloads"
+
+SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
+
+DISTRO ?= "caros"
+
+PACKAGE_CLASSES ?= "package_rpm"
+
+#
+# SDK target architecture
+#
+# This variable specifies the architecture to build SDK items for and means
+# you can build the SDK packages for architectures other than the machine you are
+# running the build on (i.e. building i686 packages on an x86_64 host).
+# Supported values are i686, x86_64, aarch64
+SDKMACHINE ?= "x86_64"
+
+#
+# Extra image configuration defaults
+#
+# The EXTRA_IMAGE_FEATURES variable allows extra packages to be added to the generated
+# images. Some of these options are added to certain image types automatically. The
+# variable can contain the following options:
+# "dbg-pkgs" - add -dbg packages for all installed packages
+# (adds symbol information for debugging/profiling)
+# "src-pkgs" - add -src packages for all installed packages
+# (adds source code for debugging)
+# "dev-pkgs" - add -dev packages for all installed packages
+# (useful if you want to develop against libs in the image)
+# "ptest-pkgs" - add -ptest packages for all ptest-enabled packages
+# (useful if you want to run the package test suites)
+# "tools-sdk" - add development tools (gcc, make, pkgconfig etc.)
+# "tools-debug" - add debugging tools (gdb, strace)
+# "eclipse-debug" - add Eclipse remote debugging support
+# "tools-profile" - add profiling tools (oprofile, lttng, valgrind)
+# "tools-testapps" - add useful testing tools (ts_print, aplay, arecord etc.)
+# "debug-tweaks" - make an image suitable for development
+# e.g. ssh root access has a blank password
+# There are other application targets that can be used here too, see
+# meta/classes/image.bbclass and meta/classes/core-image.bbclass for more details.
+# We default to enabling the debugging tweaks.
+EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
+
+#
+# Additional image features
+#
+# The following is a list of additional classes to use when building images which
+# enable extra features. Some available options which can be included in this variable
+# are:
+# - 'buildstats' collect build statistics
+USER_CLASSES ?= "buildstats"
+
+PATCHRESOLVE = "noop"
+
+#
+# Disk Space Monitoring during the build
+#
+# Monitor the disk space during the build. If there is less that 1GB of space or less
+# than 100K inodes in any key build location (TMPDIR, DL_DIR, SSTATE_DIR), gracefully
+# shutdown the build. If there is less than 100MB or 1K inodes, perform a hard halt
+# of the build. The reason for this is that running completely out of space can corrupt
+# files and damages the build in ways which may not be easily recoverable.
+# It's necessary to monitor /tmp, if there is no space left the build will fail
+# with very exotic errors.
+BB_DISKMON_DIRS ??= "\
+ STOPTASKS,${TMPDIR},1G,100K \
+ STOPTASKS,${DL_DIR},1G,100K \
+ STOPTASKS,${SSTATE_DIR},1G,100K \
+ STOPTASKS,/tmp,100M,100K \
+ HALT,${TMPDIR},100M,1K \
+ HALT,${DL_DIR},100M,1K \
+ HALT,${SSTATE_DIR},100M,1K \
+ HALT,/tmp,10M,1K"
+
+#
+# Yocto Project SState Mirror
+#
+# The Yocto Project has prebuilt artefacts available for its releases, you can enable
+# use of these by uncommenting the following lines. This will mean the build uses
+# the network to check for artefacts at the start of builds, which does slow it down
+# equally, it will also speed up the builds by not having to build things if they are
+# present in the cache. It assumes you can download something faster than you can build it
+# which will depend on your network.
+# Note: For this to work you also need hash-equivalence passthrough to the matching server
+#
+#BB_HASHSERVE_UPSTREAM = "hashserv.yocto.io:8687"
+#SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
+
+
+#
+# Hash Equivalence
+#
+# Enable support for automatically running a local hash equivalence server and
+# instruct bitbake to use a hash equivalence aware signature generator. Hash
+# equivalence improves reuse of sstate by detecting when a given sstate
+# artifact can be reused as equivalent, even if the current task hash doesn't
+# match the one that generated the artifact.
+#
+# A shared hash equivalent server can be set with ":" format
+#
+#BB_HASHSERVE = "auto"
+#BB_SIGNATURE_HANDLER = "OEEquivHash"
+
+#
+# Memory Resident Bitbake
+#
+# Bitbake's server component can stay in memory after the UI for the current command
+# has completed. This means subsequent commands can run faster since there is no need
+# for bitbake to reload cache files and so on. Number is in seconds, after which the
+# server will shut down.
+#
+#BB_SERVER_TIMEOUT = "60"
+
+# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to
+# track the version of this file when it was generated. This can safely be ignored if
+# this doesn't mean anything to you.
+CONF_VERSION = "2"
+