Ну например если мне нужен пакет одноразово, без флейков я бы юзал nix-shell -p htop --run "htop"
ну или спавнил бы баш и в нём запускал.
Когда я работаю с проектом, где есть пакеты, которые мне не нужны в повседневной жизни, то создаю shell.nix, в нём описываю зависимости, а direnv при заходе в папку с проектом мне обновляет окружение текущего шелла как надо и я могу в zsh юзать нужные мне программы.
ну и в новом nix cli можно делать nix shell nixpkgs#htop, который работает примерно как nix-shell -p htop, но не спавнит баш. Для этого в системе должен быть nixFlakes или nixUnstable установлен.
проблема в том, что часто бывают и cli-приложения и фиг найдешь команду с ним, как последний раз запуаскал