Why is this important?
Instead of installing python packages via system package manager, we should install them into virtual environment.
This is important because there has been so many complaints about the failure installing/updating python packages via system package manager, see #1017.
How to add/remove python package?
- Edit
requirements.in. You may refer to PyPI for possible package names.- See also uv doc.
- Run
uv pip compile requirements.in -o requirements.txtin this folder.
How will the python packages get installed?
- They will be installed to the virtual environment
$ILLOGICAL_IMPULSE_VIRTUAL_ENV. - The default value of
$ILLOGICAL_IMPULSE_VIRTUAL_ENVis$XDG_STATE_HOME/quickshell/.venv.- The default value of
$XDG_STATE_HOMEis$HOME/.local/state. - Currently we use
env = ILLOGICAL_IMPULSE_VIRTUAL_ENV, ~/.local/state/quickshell/.venvin~/.config/hypr/hyprland/env.confto set this environment variable.1
- The default value of
- See the function
install-python-packages()defined in/scriptdata/lib/package-installers.shfor details.
How to use the python packages installed through here?
Basically you'll need to activate the virtual environment first:
source $(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate
then use the python package inside it; After that you probably need to deactivate it:
deactivate
Situation 1: Call the command directly
Take kde-material-you-colors as example.
source "$(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate"
kde-material-you-colors "$mode_flag" --color "$color" -sv "$sv_num"
deactivate
Situation 2: Use python script (wrapped)
Take generate_colors_material.py as example:
source "$(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate"
python3 "$SCRIPT_DIR/generate_colors_material.py" "${generate_colors_material_args[@]}" \
> "$STATE_DIR"/user/generated/material_colors.scss
"$SCRIPT_DIR"/applycolor.sh
Situation 3: Use python script (shebang)
Note: This method is only for simple situation. It can not deal with complex arguments (e.g. filaname containing spaces) passed to the python script.
Take generate_colors_material.py as example, add the shebang below to its beginning:
#!/usr/bin/env -S\_/bin/sh\_-c\_"source\_\$(eval\_echo\_\$ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate&&exec\_python\_-E\_"\$0"\_"\$@""
Then you should run the script directly, i.e. ./generate_colors_material.py, not python3 generate_colors_material.py.
-
Hyprland seems to have weird problem dealing with recursive variable, so we can not use
$XDG_STATE_HOME/quickshell/.venveven if we had set$XDG_STATE_HOMEto~/.local/stateexplicitly, else$XDG_STATE_HOMEwill possibly not get expanded but get recognised as literally$XDG_STATE_HOME. This problem never happens for some users, but according to some issues when we were using recursive variable setting in the past, it's possible to happen for other users. Reason unknown. ↩︎