In [my last post exploring `nvim`](https://blog.mcknight.tech/2025/05/21/nvim/), I mentioned some potential next projects on my agenda.
Well, I wasted no time continuing down the path of trying to perfect my shell experience. I very quickly updated my
[dotfiles repository](https://forge.mcknight.tech/d_mcknight/dotfiles) to be compatible with GNU `stow` and then went on to work on my
`.zshrc` file. Neither of these are major projects, so I figured they can share this one post.
## GNU stow
There are a few ways to use GNU stow and I always recommend people to
[RTFM](https://www.gnu.org/software/stow/manual/stow.html#Invoking-Stow) if you ever run into problems or have questions about
CLI arguments. Alternatively, this package is old and stable enough that Claude or ChatGPT can easily answer any questions you
may have. For my use, I am [already keeping my dotfiles](https://blog.mcknight.tech/2024/06/21/Dotfiles/) in `~/.dotfiles`, so
it makes sense for me to make that repository look like my home directory. By default, `stow` will apply the contents of
my stow directory (`~/.dotfiels`) to its parent directory (`~/`).
You can see my [dotfiles repository](https://forge.mcknight.tech/d_mcknight/dotfiles/src/commit/e23e66f801b0549d6195d7115ed6f033ed4318e6)
now contains the same files it did before, but they are organized as if the repository root is my Home directory. One potential downside
of this organization is that it adds complexity if I wanted to apply only specific dotfiles or directories, but I can't think of anything
here that I would want to selectively apply to any environments. It is also worth noting that I had to remove any existing files or
symlinks before running `stow .` from my `~/.dotfiles` directory, otherwise `stow` would refuse to overwrite existing files. There may be
an argument to force overwrite destination files, but I prefer to manually delete things, just to make sure I'm not deleting/overwriting
something I want to keep.
### Some dotfiles updates
There are a few updates to my dotfiles that I never documented in my
[original dotfiles post](https://blog.mcknight.tech/2024/06/21/Dotfiles/), or [Neovim post](https://blog.mcknight.tech/2025/05/21/nvim/).
This may not be exhaustive, but here are some of the highlights:
#### `alacritty.toml`
I have been using [Alacritty](https://alacritty.org/) for my regular terminal emulator,
so I have [some customizations](https://forge.mcknight.tech/d_mcknight/dotfiles/src/commit/e23e66f801b0549d6195d7115ed6f033ed4318e6/.config/alacritty/alacritty.toml)
I like to apply. Below is my configuration with annotations explaining everything.
```toml
[general]
# Apply a GitHub dark theme for a consistent look
import = ["./github_dark_high_contrast.toml" ]
[colors.primary]
# Override background to a neutral dark color
background = "#111111"
[colors.normal]
# I picked this color when configuring tmux, override terminal text color to match
cyan = '#008b8b'
[font.normal]
# Use a Nerd Font for extra symbols. I have this included in my `dotfiles` repository
family = 'JetBrainsMono Nerd Font Mono'
style = 'Regular'
[cursor]
# I prefer a blinking input cursor
blink_interval = 500
blink_timeout = 0
[cursor.style]
# I tried `Underline`, but I think I prefer the default block
blinking = "Always"
#shape = "Underline"
[window]
# Make the window slightly transparent to peek at what's behind
opacity = 0.95
# Hide the top bar because I never close the terminal and use gTile to position it on screen
decorations = "None"
# I have `level` set, but it doesn't appear to do anything in Cinnamon :/
level = "AlwaysOnTop"
# dynamic_padding splits extra vertical/horizontal space which makes tmux and nvim status bars look a little nicer
dynamic_padding = true
```
#### JetBrains Nerd Font
[Nerd Fonts](https://www.nerdfonts.com/font-downloads) let you get a consistent font
that includes extra characters like filetype icons, emojis, and ligatures (special
characters for things like `==`, `->`, and other character combinations). Since I
have this configured in my terminal config, it makes sense to make sure the font is
always available so I just include it in my dotfiles repository.
## zsh
[`zsh`](https://www.zsh.org/) is a shell, like [`bash`](https://www.gnu.org/software/bash/),
but with some different features that are interesting. It's worth nothing that I fully intend on using `bash`
for scripting since it is far more ubiquitous than `zsh` and I am more familiar with it and its quirks.
I will also note that zsh is NOT a [POSIX shell](https://en.wikipedia.org/wiki/POSIX);
up on the popular options I could find and some [LLM summary comparisons](https://search.brave.com/search?q=zinit+vs+omz&source=desktop&summary=1&conversation=f5495011020a89faf13bf1),