Use mamba instead of conda. Itβs significantly faster.
Cloning envs
Currently I have ~60 mamba envs on my main dev machines. >300GB on disk, but tough early lessons that overloading envs would always lead to dll/version hell. One recently learned pro-tip. You can use a template env to speed this up: create -n [new-env] --clone [baseml-env]
On my local workstation that has a reasonably fast PCIe 4.0 NVMe SSD (5GB/s+ sequential writes) it takes about 28 s of wall time to create a clone (18GB env, 17GB of it is PyTorch):
Wait, thatβs not so fast you might say, however, even with all libs cached and using uv it takes almost 80 s (of just runtime mind you, no time running commands) to load even the most basic packages youβll use almost everywhere:
NOTE: One important note is that when you --clone a new env, it doesnβt move over your environment variables. If you assign GPU specific stuff for example, you might want to either:
uv
Implicit in that first example, but basically, I use mamba/conda since it will manage CUDA/GCC and other system libraries as well, but for Python libs, I basically stick completely to pip from within the mamba env. Or more specifically, nowadays I always first have uv as the first thing installed (pip install uv if itβs not in your --clone) and then run uv pip almost anytime Iβd normally run pip.
I havenβt aliased that yet since it will probably still get me into trouble (I have upip though), but you can broadly think of it as on the order of how mamba improves conda performance.
byobu
Iβm a long-time user of byobu, a wrapper against traditional tmux/screen terminal multiplexers. These are a must IMO for allowing easy attachment/detachment of long-running adhoc sessions.
Byobu has a bunch of extra quality of life additions, but I also add a few things to help. I have a custom function b that will also try to load up the mamba env if Iβm trying to startup/reconnect to a named session. In ~/.bashrc:
or in ~/.config/fish/config.fish:
Starship
I use Starship, a simple/fast cross-shell prompt. For the past few years Iβve mostly used fish as my shell, but often need to hop into bash for POSIX compatibility (I will probably see if I can switch to zsh and get everything Iβm used to in fish at some point).
Iβm not really a power user or a ricer, but it has a lot of nice stuff built in. One customization I use in ~/.config/starship.toml to help me tell what shell Iβm in:
Atuin is a better history manager that Iβve been using for a few years now, and despite having to do a lot of configuration to get/keep it working how I want, I couldnβt imagine going back to anything that has less functionality. It really pains me when I am on a terminal system without this.
In my ~/.config/atuin/config.toml the major changes I make from defaults:
# I almost always want to find the last thing I typed *in each session*, not globally
filter_mode_shell_up_key_binding = "session"
# when I search I usually want to see my current context
inline_height = 16
# Maybe some people want to just execute, but I like to treat the picker like a picker and either execute or edit
enter_accept = false
I donβt use the cloud syncing nor have I ever bothered to setup a my own server - at some point maybe there will be a smart SSH-based lazy-sync or something but for now, Iβve been OK with not having the sync
Tools I Want to Integrate
llm
There are a bunch of command-line LLM tools but simonwβs llm is probably the most flexible/mature. Iβve yet to really integrate it (or any related tools into my workflow)