In Gentoo, Portage USE flags are switches that tell Portage which optional features to compile into packages.
For example, if you install a media player, USE flags determine whether it gets support for Bluetooth, Wayland, X11, PipeWire, FFmpeg, etc.
Simple example
Suppose a package supports:
That means those features are enabled when Portage builds the package.
A minus sign means disabled:
Here, X11 support is disabled.
See your system-wide USE flags
Your primary global configuration is:
For example:
These flags apply broadly to packages that support them.
Package-specific USE flags
Usually, you should make special changes in:
For example:
Then:
Disable something with -:
This is generally better than putting package-specific settings into make.conf.
Find available USE flags
For an installed or available package:
You might see:
The flags without - are enabled. Flags beginning with - are disabled.
For much better descriptions, install gentoolkit:
Then:
This tells you what each USE flag actually does.
Why Portage sometimes tells you to change USE flags
You've probably seen something like:
Portage is saying:
To satisfy the dependency configuration you've requested, this package needs to be rebuilt with the X feature enabled.
You can add it manually:
Then retry:
Portage can manage required changes for you
When updating Gentoo, I recommend:
If Portage reports required USE changes, you can have it write them automatically:
Then inspect the changes:
and rerun:
The important distinction is:
USE flags control features compiled into packages.
make.conf is good for system-wide policy, while /etc/portage/package.use/ is the preferred place for exceptions affecting individual packages.