# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
#
# Unsquash / unpack a filesystem. Multiple sources are supported, and
# they may be squashed or plain filesystems.
#
# Configuration:
#
#   from globalstorage: rootMountPoint
#   from job.configuration: the path to where to mount the source image(s)
#       for copying an ordered list of unpack mappings for image file <->
#       target dir relative to rootMountPoint.

---
# Each list item is unpacked, in order, to the target system.
#
# Each list item has the following **mandatory** attributes:
#   - *source* path relative to the live / intstalling system to the image
#   - *sourcefs* the type of the source files; valid entries are
#       - `ext4` (copies the filesystem contents)
#       - `squashfs` (unsquashes)
#       - `file` (copies a file or directory)
#       - (may be others if mount supports it)
#   - *destination* path relative to rootMountPoint (so in the target
#       system) where this filesystem is unpacked. It may be an
#       empty string, which effectively is / (the root) of the target
#       system.
#
# Each list item **optionally** can include the following attributes:
#   - *exclude* is a list of values that is expanded into --exclude
#       arguments for rsync (each entry in exclude gets its own --exclude).
#   - *excludeFile* is a single file that is passed to rsync as an
#       --exclude-file argument. This should be a full pathname
#       inside the **host** filesystem.
#   - *weight* is useful when the entries take wildly different
#       times to unpack (e.g. with a squashfs, and one single file)
#       and the total weight of this module should be distributed
#       differently between the entries. (This is only relevant when
#       there is more than one entry; by default all the entries
#       have the same weight, 1)
#
# EXAMPLES
#
# Usually you list a filesystem image to unpack; you can use
# squashfs or an ext4 image. An empty destination is equivalent to "/",
# the root of the target system. The destination directory must exist
# in the target system.
#
#   -   source: "/path/to/filesystem.sqfs"
#       sourcefs: "squashfs"
#       destination: ""
#
# Multiple entries are unpacked in-order; if there is more than one
# item then only the first must exist beforehand -- it's ok to
# create directories with one unsquash and then to use those
# directories as a target from a second unsquash.
#
#   -   source: "/path/to/another/filesystem.img"
#       sourcefs: "ext4"
#       destination: ""
#   -   source: "/path/to/another/filesystem2.img"
#       sourcefs: "ext4"
#       destination: "/usr/lib/extra"
#
# You can list filesystem source paths relative to the Calamares run
# directory, if you use -d (this is only useful for testing, though).
#
#    -   source: ./example.sqfs
#        sourcefs: squashfs
#        destination: ""
#
# You can list individual files (copied one-by-one), or directories
# (the files inside this directory are copied directly to the destination,
# so no "dummycpp/" subdirectory is created in this example).
# Do note that the target directory must exist already (e.g. from
# extracting some other filesystem).
#
#    -   source: ../CHANGES
#        sourcefs: file
#        destination: "/tmp/derp"
#    -   source: ../src/modules/dummycpp
#        sourcefs: file
#        destination: "/tmp/derp"
#
# The *destination* and *source* are handed off to rsync, so the semantics
# of trailing slashes apply. In order to *rename* a file as it is
# copied, specify one single file (e.g. CHANGES) and a full pathname
# for its destination name, as in the example below.

unpack:
    -   source: "/run/archiso/bootmnt/arch/x86_64/airootfs.sfs"
        sourcefs: "squashfs"
        destination: ""
    -   source: "/run/archiso/bootmnt/arch/boot/x86_64/vmlinuz-linux"
        sourcefs: "file"
        destination: "/boot/vmlinuz-linux"
