mo() {
	local directory="${1}"
	local file
	if [ -n "${directory}" ]; then
		directory="$(realpath "${directory}")"
		file="${directory}/filesystem.squashfs"
		if mkdir "overlay"; then
			cd "overlay"
			mkdir {lower,upper,work,mount}
			if mount "${file}" "lower"; then
				mount \
					-o lowerdir="lower",upperdir="upper",workdir="work" \
					-t "overlay" \
					"overlay" "mount"
			fi
			cd ..
		fi
	else
		echo "KO: directory?"
	fi
}

uo() {
	cd "overlay"
	if umount "mount"; then
		rmdir "mount"
		rm --recursive "upper" "work"
		if umount "lower"; then
			rmdir "lower"
		fi
	fi
	cd ..
	rmdir "overlay"
}

mr() {
	local f
	for f in "dev" "dev/pts" "proc" "sys"; do
		mount --bind "/${f}" "overlay/mount/${f}"
	done
}

alias cr="\
chroot \
\"overlay/mount\" \
"

alias cru="\
chroot \
--userspec \"1000:1000\" \
\"overlay/mount\" \
"

ur() {
	local f
	for f in "sys" "proc" "dev/pts" "dev"; do
		umount --lazy "overlay/mount/${f}"
	done
}

mm() {
	mount --make-rslave --rbind "/deb" "overlay/mount/deb"
}

um() {
	umount --recursive "overlay/mount/deb"
}

ms() {
	local directory="${1}"
	local level="${2}"
	if [ -n "${directory}" ]; then
		if mkdir "${directory}"; then
			[ -n "${level}" ] || level="18"
			cp overlay/mount/{vmlinuz,initrd.img} "${directory}"
			mksquashfs \
				"overlay/mount" "${directory}/filesystem.squashfs" \
				-noappend \
				-comp "zstd" -Xcompression-level "${level}"
			chown --recursive 1000:1000 "${directory}"
		fi
	fi
}