# SPDX-FileCopyrightText: no
# SPDX-License-Identifier: CC0-1.0
#
# Mount filesystems in the target (generally, before treating the
# target as a usable chroot / "live" system). Filesystems are
# automatically mounted from the partitioning module. Filesystems
# listed here are **extra**. The filesystems listed in *extraMounts*
# are mounted in all target systems.
---
# Extra filesystems to mount. The key's value is a list of entries; each
# entry has five keys:
#   - device    The device node to mount
#   - fs (optional) The filesystem type to use
#   - mountPoint Where to mount the filesystem
#   - options (optional) An array of options to pass to mount
#   - efi (optional) A boolean that when true is only mounted for UEFI installs
#
# The device is not mounted if the mountPoint is unset or if the fs is
# set to unformatted.
#
extraMounts:
    - device: proc
      fs: proc
      mountPoint: /proc
    - device: sys
      fs: sysfs
      mountPoint: /sys
    - device: /dev
      mountPoint: /dev
      options: [ bind ]
    - device: tmpfs
      fs: tmpfs
      mountPoint: /run
    - device: /run/udev
      mountPoint: /run/udev
      options: [ bind ]
    - device: efivarfs
      fs: efivarfs
      mountPoint: /sys/firmware/efi/efivars
      efi: true

# Btrfs subvolumes to create if root filesystem is on btrfs volume.
# If *mountpoint* is mounted already to another partition, it is ignored.
# Separate subvolume for swapfile is handled separately and automatically.
#
# It is possible to prevent subvolume creation -- this is likely only relevant
# for the root (/) subvolume -- by giving an empty string as a subvolume
# name. In this case no subvolume will be created.
#
btrfsSubvolumes:
    - mountPoint: /
      subvolume: /@
    - mountPoint: /home
      subvolume: /@home
    - mountPoint: /root
      subvolume: /@root
    - mountPoint: /srv
      subvolume: /@srv
    - mountPoint: /var/cache
      subvolume: /@cache
    - mountPoint: /var/cache/pacman/pkg
      subvolume: /@pkg
    - mountPoint: /var/tmp
      subvolume: /@tmp
    - mountPoint: /var/log
      subvolume: /@log

# The name of the btrfs subvolume holding the swapfile.  This only used when
# a swapfile is selected and the root filesystem is btrfs
#
btrfsSwapSubvol: /@swap

# The mount options used to mount each filesystem.
#
# filesystem contains the name of the filesystem or on of three special
# values, "default", efi" and "btrfs_swap".  The logic is applied in this manner:
#   - If the partition is the EFI partition, the "efi" entry will be used
#   - If the fs is btrfs and the subvolume is for the swapfile,
#     the "btrfs_swap" entry is used
#   - If the  filesystem is an exact match for filesystem, that entry is used
#   - If no match is found in the above, the default entry is used
#   - If there is no match and no default entry, "defaults" is used
#   - If the mountOptions key is not present, "defaults" is used
#
# Each filesystem entry contains 3 keys, all of which are optional
#   options - An array of mount options that is used on all disk types
#   ssdOptions - An array of mount options combined with options for ssds
#   hddOptions - An array of mount options combined with options for hdds
# If combining these options results in an empty array, "defaults" is used
#
# Example 1
# In this example, there are specific options for ext4 and btrfs filesystems,
# the EFI partition and the subvolume holding the btrfs swapfile.  All other
# filesystems use the default entry.  For the btrfs filesystem, there are
# additional options specific to hdds and ssds
#
# mountOptions:
#    - filesystem: default
#      options: [ defaults ]
#    - filesystem: efi
#      options: [ defaults, umask=0077 ]
#    - filesystem: ext4
#      options: [ defaults ]
#    - filesystem: btrfs
#      options: [ defaults, compress=zstd:1 ]
#      ssdOptions: [ discard=async ]
#      hddOptions: [ autodefrag ]
#    - filesystem: btrfs_swap
#      options: [ defaults, noatime ]
#
# Example 2
# In this example there is a single default used by all filesystems
#
# mountOptions:
#    - filesystem: default
#      options: [ defaults ]
#
mountOptions:
    - filesystem: default
      options: [ defaults, noatime ]
    - filesystem: efi
      options: [ defaults, umask=0077 ]
    - filesystem: btrfs
      options: [ defaults, noatime, compress=zstd:1, space_cache=v2, commit=120 ]
      ssdOptions: [ discard=async ]
      hddOptions: [ autodefrag ]
    - filesystem: btrfs_swap
      options: [ defaults, noatime ]
    - filesystem: ext4
      options: [ defaults, noatime, commit=60 ]
    - filesystem: xfs
      options: [ defaults, lazytime, noatime, attr2, inode64, logbsize=256k, noquota ]
    - filesystem: f2fs
      options: [ defaults, compress_algorithm=lz4, compress_chksum, gc_merge, lazytime ]
