echo "Resize zram to match the shipped config" # 90-omarchy.conf changed the device size. The migration that first applied the # zram tuning is one-shot, so machines that already ran it have the new file on # disk and the old device still running; nothing would pick the size up until # something else rebooted them. zram_disksize=${OMARCHY_ZRAM_DISKSIZE:-/sys/block/zram0/disksize} swaps=${OMARCHY_SWAPS:-/proc/swaps} # The size is an expression, and the generator is the only thing that evaluates # it. Ask it what the shipped config comes to rather than repeating the # arithmetic here, where the two would drift apart on the next tuning change. units=$(mktemp -d) trap 'rm -rf "$units"' EXIT desired_mb=$(/usr/lib/systemd/system-generators/zram-generator "$units" 2>&1 | grep -oP '/dev/zram0 with \K[0-9]+') || true actual_bytes=$(cat "$zram_disksize" 2>/dev/null) || actual_bytes=0 # A device already at the right size needs neither a restart nor a reboot, # whether an earlier boot picked the config up or another user got here first. if [[ -n $desired_mb && $actual_bytes == $((desired_mb * 1024 * 1024)) ]]; then exit 0 fi if sudo systemctl daemon-reload; then # Resizing swaps the device off first, which faults every stored page back # into memory. That's only cheap while it's empty, so a device under # pressure keeps its old size until the next boot. zram_used=$(awk '$1 == "/dev/zram0" {print $4}' "$swaps") if [[ ${zram_used:-0} == 0 ]] && sudo systemctl restart dev-zram0.swap; then exit 0 fi fi omarchy-state set reboot-required