I heard the cool kids are putting their dotfiles under version control. Seemed like a good idea to me.
Will they be useful to anyone else? Probably not. But here they are.
This is the stock WSL/Ubuntu bashrc with a few additions:
- PATH: Local bin directories and pnpm directory added so local binaries and pnpm will work correctly. Why aren't these in the user profile? See the profile section below.
- vscode: I use vscode in portable mode in WSL and want to run it from the command prompt. I have a bash function called "code" that starts vscode by running the shell script that ships with vscode.
- editor: Set nano as default editor for things like npm and opencode.
- nvm: Run the recommended commands to make nvm available for managing node.
- shell: Set a prompt using oh-my-posh.
I symlink the repo copy of bashrc to $HOME/.bashrc
In WSL, some shells are started as non-login shells (e.g. vscode terminals can do this, depending on configuration). In those cases the user profile isn't sourced, only bashrc is. This means I need all my PATH stuff in bashrc. Otherwise those shells don't work as expected.
Regular login shells, however, will source the user profile. To make both shell types work, I need a bare profile that only imports bashrc and does nothing else. All PATH stuff needs to be in bashrc.
By convention, paths should really go in user profile, so they still work no matter which shell you're using. Making that work with non-login shells requires a complicated mess of conditional sourcing files, which I'd rather not maintain. So this is how I have it set up.
I symlink the repo copy of profile to $HOME/.profile
I have an evolving list of git aliases in gitconfig.aliases, which I symlink to $HOME/.gitconfig.aliases
I have playwright-cli installed globally so that LLM agents can use it to read and interactive with websites.
In WSL, it's easier to have playwright-cli use its own chromium browser. I have that set up in cli.config.json, which I symlink to $HOME/.playwright/cli.config.json