I spent some time answering a post on r/gentoo titled "Ideal size for my root partition while having a separate home partition?", in part just to analyze my own system a bit to reconfirm my priors.
Reposting it here for posterity.
My "daily driver" is really a 64GB VM with a single partition using btrfs; no subvolumes or anything. I run mate. I have a bunch of the usual stuff installed (emacs, chromium, firefox, gimp, audacity), but it's fairly light-weight.
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 64G 53G 11G 83% /
Here's the top-level breakout:
[2025-12-08T08:46:46 root@water:/]# du --max-depth=1 --human-readable --exclude=./home/jsled/earth --exclude=./home/jsled/text --exclude=./proc | sort --human-numeric-sort --reverse | head -8
51G .
23G ./home
14G ./usr
8.2G ./var
5.7G ./opt
39M ./boot
30M ./etc
13M ./root
/opt deserves some unpacking:
[2025-12-08T08:53:55 root@water:/opt]# du --max-depth=1 --human-readable | sort --human-numeric-sort --reverse
5.7G .
685M ./zoom
560M ./rust-bin-1.89.0
550M ./rust-bin-1.88.0
549M ./rust-bin-1.87.0
531M ./rust-bin-1.86.0
502M ./rust-bin-1.84.1
495M ./rust-bin-1.85.1
494M ./rust-bin-1.83.0
438M ./Signal
374M ./google
301M ./Bitwarden
286M ./firefox
I'm not sure why /home is so large, since "everything" of interest are mounts against my NAS (/home/jsled/earth, /home/jsled/text) … oh, yeah, it's almost all cached data:
[2025-12-08T08:48:50 root@water:~]# du --max-depth=1 --human-readable --exclude=./earth --exclude=./text | sort --human-numeric-sort --reverse | head -10
23G .
8.4G ./.mozilla
5.2G ./.local
3.9G ./.cache
2.1G ./phoenix
2.0G ./.config
362M ./.npm
231M ./zoom
169M ./.emacs.d
159M ./.zoom
And an aborted local Steam install…
[2025-12-08T08:49:05 root@water:~]# cd .local
[2025-12-08T08:49:14 root@water:~/.local]# du --max-depth=1 --human-readable | sort --human-numeric-sort --reverse | head -10
5.2G ./share
5.2G .
12K ./state
[2025-12-08T08:51:23 root@water:~/.local/share]# du --max-depth=1 --human-readable | sort --human-numeric-sort --reverse | head -10
5.2G .
4.8G ./Steam
But, again, that's /home, which you'll put on a separate subvol/partition anyways, so not your concern, here.
The key things for / are:
14G ./usr
8.2G ./var
5.7G ./opt
These sum to ~27GB. A 32GB / will likely be regularly tight; you'll need to make sure log rotation is in place / journald is configured to be bounded (it is by default), and maybe wipe /var/cache/distfiles if you run out of space. Keep an eye on /var/log/portage/, too, if you've enabled PORTAGE_ELOG_SYSTEM="save"; I run sudo /bin/bash -c 'cd /var/log/portage; rm $(find -mtime +90)' after updates to keep it bounded.
I'd suggest 48 or 64GB.
I'd echo the others: don't partition unless you have a compelling reason to do so, use a modern filesystem (btrfs) that supports logical volume management and subvolumes. Copy-on-write filesystems are great.
Portage is configured to compile out of tmpfs / /dev/shm:
[2025-12-08T09:08:56 jsled@water:~]$ grep "TMPDIR" /etc/portage/make.conf
PORTAGE_TMPDIR=/dev/shm
Which works for 99% of packages well, but you're going to want some non-tmpfs space for compiling large packages…
[2025-12-08T08:56:04 root@water:~]# cat /etc/portage/package.env
dev-lang/rust notmpfs.conf
dev-lang/spidermonkey notmpfs.conf
sys-devel/gcc notmpfs.conf
media-libs/opus opus.conf
[2025-12-08T08:56:09 root@water:~]# cat $(find /etc/portage/ -iname notmpfs.conf)
PORTAGE_TMPDIR="/var/tmp/notmpfs"
But you could easily put that directory outside of /, too.
Obviously if your system is regularly memory-constrained, that approach won't work for you. Even still, /tons/ of packages need just a few(-hundred) MB to unpack and compile, so the "compile in tmpfs" approach still works well.