Sitemap

New Computer Setup for Techies 2024: NeoVim and Ollama and fish, oh my!

18 min readApr 19, 2024

Greetings Cloudlings!!

As I’ve continued my journey into Tech I decided that it was past time for a new computer. My previous MacBook Air was bought fresh and new (but a 2 year old model) when I took the Texas Bar in 2017. It has hung in there with me since then but between the battery life depletion and only 256GB of storage, it was time to put the old girl out to pasture.

I hemmed and haw’wed for a bit but finally decided on sticking with a Mac. Nothing special, just a nice machine that should hopefully last me 3–4 good years. As I’ve been exploring Coding, Development, Cloud, and DevOps I’ve come to learn about the tremendous power of the terminal, all of the code editing options, and the various applications available to make my machine exactly what I want it to be.

I’m going to take you through some of the nifty apps and CLI tools I’ve packed into this machine thus far and some of the config specifics I’ve set up. Hopefully you learn something helpful for your own workflow just as I did from other articles here on Medium and videos on YouTube.

System Search:

I have a secret to share and I hope this is a safe place for me to be vulnerable and reveal the darkest parts of myself… I never used Spotlight to search my system until 2023. I don’t even think I knew it existed. If you don’t know what I’m talking about — press cmd + space (if you’re on a Mac) and see what happens.

Spotlight is a great way to limit having to remove your hands from the keyboard to navigate your system. When you’re in the middle of a thought or work flow and you need to stop to manipulate your mouse and maneuver through your system GUI manually, it interrupts your thought process and could hinder productivity. Using the built-in keyboard shortcut to pull up Spotlight and work through your system that way is a fantastic way to keep your mental momentum flowing.

However, I only started using Spotlight when I saw a YouTube video that discussed Spotlight replacements. If you think it may help your workflow then I encourage you to check out Alfred and Raycast as Spotlight upgrades. They expand your options to allow you to not just search through your system for files or applications but enter a search in the browser of your choice, use the search bar as a calculator and currency converter, and all kinds of shenanigans I haven’t even explored yet.

Raycast

I’ve been using both Raycast and Alfred and like them both but honestly, Raycast is just prettier.

Applications:

I’ve also added a few applications to hopefully help me stay more organized and in some cases — just make things better.

  • Maccy

Maccy is a clipboard manager. Dassit. Lol. I heard good things so decided to try it out.

  • CleanShotX

As I’ve been documenting my tech exploration journey on this blog I’ve wanted a better solution for screenshots and screen recordings. Especially since the screen recording files that QuickTime creates are quite large and difficult to manage when trying to upload to a page like Medium. CleanShotX has been doing the job quite well for me thus far.

  • Rectangle

Rectangle is a great window manager that I’ve really been enjoying. Again, I’m trying my best to use the keyboard more and my mouse less, and Rectangle comes with a ton of shortcuts already configured.

Rectangle keyboard shortcuts
  • Today

Today is a simple application for accessing your calendar entries for today. Hence, the name. Get it? You get it, you’re smart, I believe in you. A big part of me putting my best foot forward this year has been creating a plan for the month and a more extended project schedule when necessary. Having quick access to what’s on the calendar for the day is pretty handy.

  • Menu Bar Calendar

Menu Bar Calendar is about the same as Today except it provides access to your full monthly calendar, not just your tasks for the day. And both Today and Menu Bar Calendar are made by the same author! Fun!

  • Plain Text Editor

And one last app from the same author. This is a literal plain text editor, lol. I have a goal to write more (not just tech documentation and blog posts) and having a distraction free canvas helps. There are lots of options out there but I like the aesthetics of this one and I honestly didn’t bother doing much searching for other options. No need to make things more complicated.

Obsidian:

I would be truly negligent if I did not mention Obsidian in this article. As I’ve become more conscious about keep track of and organizing everything I learn and concepts I want to build upon, I’ve discovered a sincere need for a formal system.

If you’ve been anywhere on the internet lately then you’ve heard about Notion. She’s a cute girl, I worked with her for some months and she got the job done when working my way through my first few certifications last year. But, eventually I had to accept that I have no interest in building a system and a GUI the way that Notion requires. It’s just not my thing. Notion’s tremendous customization ability is also a big reason it didn’t work for me. Configuring the “perfect” system became more of a distraction than a help.

Luckily for me, I did enough clicking around on YouTube and stumbled into the Obsidian fanclub. I discovered my people! I’ve seen folks call Obsidian a “knowledge management system” and that’s definitely how I’ve been using it. Not just for exploring tech and creating study sheets for certifications, but for bits of interesting information, technology concepts, recent legal cases, etc.

An example note in my Obsidian vault.

Anything I pick up in my daily life and want to remember ends up in my Obsidian vault. Not only because its an easy-to-use system, but also because it’s made to link information together and show you those connections in visual form.

My Obsidian graph view — April 2024.

In its simplest form Obsidian is a markdown editor and file/folder organizer on your local system. Markdown is a fairly simple notation format that you may be familiar with from GitHub Readme files.

Examples of Markdown (.md) notation.

When you create an Obsidian vault it’s simply a folder on your machine. Any other files and folders you create within your vault are organized accordingly within that local folder. Any other vaults are set up the same way and you can setup as many vaults as you want. For folks who want to compartmentalize parts of their lives, Obsidian vaults are a great way to do it.

I’m currently using a combination of the Zettlekasten system and the PARA method to keep myself organized, keep thoughts and project ideas at hand, and make sure I keep re-usable resources at hand and connected to relevant notes using Obsidian’s link system.

My Obsidian vault called “Second Brain” in the Obsidian software GUI.
My Obsidian vault view from the Finder GUI.

As I become slightly more privacy focused, the idea of my Notion files being cloud based and not truly my own began to bother me as well. Although I’m exploring cloud technology and love how much it can do, I want to have a tighter hold on my personal files. Obsidian solves that problem for me AND gives me a simple UI to create and organize everything. Notion is cute but Obsidian is that girl. This is my personal experience and I have no issues with folks using Notion, it’s a great app. But we’re Obsidian gang over here!

NeoVim:

If you have somehow found your way to this article and my Medium profile I doubt that I need to explain what an IDE is. But for the sake of being thorough I’ll run it down really quickly.

An IDE (Integrated Development Environment) is software used to assist engineers and developers in writing, building, testing, debugging, and running code. At it’s most basic level an IDE is a text editor with a bunch of extra stuff piled on top to allow the software to understand various programming languages and how to render them.

I like to stick with the basics and just use VS Code. I’m simply not experienced enough as a developer to get into the differences between VS Code and Jet Brains and whatever else. However, I was recently scrolling YouTube, as I like to do, and found a video on coding in NeoVim instead of VS Code. The title didn’t mean much to me at first since I had no idea what NeoVim was but the more I watched, the more interested I got.

I’m still learning the ins and outs of NeoVim myself, but a short explanation is that vi is a text editor, created by Bill Joy in 1976, for the UNIX system. Later, a developer named Bram Moolenaar pushed vi forward into the VIM text editor that you can find as default software on macOS systems. Head to your terminal and just type in “vim”.

VIM homescreen

NeoVim is an extension of Vim that the creators call a “refactor” of the software.

NeoVim adds A TON of features to Vim for editing code, not just writing plain text. It also creates a simple system to further extend the usability of the software to include plugins written in the Lua programming language. These plugins basically take what could be a slightly bloated text editor and push it right to the line of being a full IDE. Some folks would argue that is a full IDE in every since of the term.

I am absolutely aware that I lack the range to try to explain the density of NeoVim so I’m simply going to provide you with a few YouTube videos that will showcase how a great number of programmers are using NeoVim as their primary code editor.

Now if wrapping your head around Vim, NeoVim, and this new world of programming wasn’t enough, let me throw something else at you. There are different flavors of NeoVim! Yep, just like ice cream (or Linux distros). Since NeoVim requires a bucket of plugins to make it an effective code editor, some great folks in the community have developed NeoVim distributions that come preloaded with everything necessary to immediately start coding after installing the software.

Personally, I’ve been exploring NVChad and LunarVim. Both of which are very popular flavors of NeoVim. I still have no idea what I’m doing and I’m hesitant to attempt a full coding project with NeoVim but I do wish get there one day.

NVChad loading page on my local machine
NVChad
LunarVim loading page on my local machine.
LunarVim

Bruno:

To wrap up the Development environments and tools I just wanted to mention an open-source API client I’ve been using — Bruno. When I first started learning about APIs and endpoints the only options I was presented with were Postman and Insomnia. Later, Thunderclient got thrown into the mix as a VS Code extension.

I am not a full-time developer and have no plans to pursue becoming one so I won’t pretend to be an authority on API clients but Bruno hasn’t let me down yet and I love to support open-source software when I can.

Bruno loading page on my local machine.

Terminal Shenanigans:

Holy shit, how do I even start an explanation of the ins and outs of the terminal?

Well, let’s begin at the beginning. The terminal or command line is the most efficient way of speaking directly to your machine’s back-end. All the good stuff going on underneath the pretty hood of your OS. There are different flavors of command line scripting language but they all (generally) serve the same purpose. Since Linux and macOS are both derived from Unix, their command lines share a great number of similarities.

If you’re ever used the terminal on your computer it may look something like this:

The information on it will be customized to your machine and user profile, but if you’re on a Mac the basics are the same. The application itself is called Terminal and it’s running zsh as the shell as noted in the title bar. The terminal prompt is “mello@Noir ~ %” which notes my user profile @ my local machine name plus the “%” symbol that indicates the shell I’m using. If you’re embarking on a career in hands-on tech of some sort, then you will probably need to learn to use the terminal. It’s the most effective way of manipulating a computer.

Sometime last year I started learning about Virtual Machines and accessing them on my local machine through SSH. All of it was like magic to me and when I decided to learn more about working in the terminal I learned about the true world of nerds — terminal customization.

As I noted above, there are many moving parts in that simple terminal. The terminal application itself, the shell inside the terminal, and the terminal prompt that precedes your commands. I discovered that all 3 parts are customizable to the extreme.

There are many terminal applications (also called terminal emulators) available. They all act as a replacement to the default Terminal application but they usually add speed and features like auto-suggestions, shortcuts, and other customizations depending on your needs. I’ve been exploring both Alacritty and Warp. Both of which I really like, but I have only really done in-depth customization on Alacritty. Other terminal applications include:

  • iTerm2
  • Hyper
  • Kitty
  • Wezterm
  • GNOME Terminal (Linux)
  • Terminator (Linux)
My custom Alacritty terminal.
My Warp terminal.

Terminal Shell:

The shell is the binary “language” or script you use to interact with your computer. Remember that computers speak computer language and despite the cool commands that have been developed for the command line, the computer must have those commands translated to a language it understands. Different shells use slightly different “languages” when it comes to scripting and how they translate to the computer.

Thus far I’ve been primarily focused on bash and fish. bash because it is the major shell in the back-end world (also Powershell in a Windows environment) and fish because it’s called fish and that really entertains me.

Both bash and fish will get you to the same end goal (usually) but bash (Bourne Again SHell) would assign and access a variable like this:

name="John Doe"
echo $name

while fish (Friendly Interactive SHell) would do it this way:

set name "John Doe"
echo $name

You can see that they are very similar but include some small differences that do expand a bit as you get into more advanced scripting. Frankly, if you are working on learning the command line for professional purposes I absolutely recommend focusing on bash. bash is a POSIX compliant shell which means it meets certain standards that maintain cross-platform compatibility. But the others like fish and more listed below are fun to play around with.

  • zsh (currently the default on macOS and POSIX compliant as well)
  • elvish
  • ksh
  • dash
  • xonsh
  • mksh
  • tcsh

Terminal Prompt:

The terminal prompt is the generally unimportant part of the terminal experience. At it’s most basic, it notes information about the machine and the current user as well as showing your path as you move through your file system.

Many terminal emulators come with built-in command prompt customization but I chose to use a third-party application — Starship. I had a lot of fun customizing my prompt just the way I wanted it and learned the TOML (Tom’s Obvious Minimal Language) file configuration “language” in the process. Yes, there’s another file format beyond YAML and JSON, lol. But it wasn’t difficult to pick up and Starship’s documentation has great breakdowns of how to customize your prompt and even presets that can get you started out of the box.

  • Starship

When customizing your command prompt through a command prompt application or directly through your terminal emulator, Nerd Fonts is a website you’re going to need to keep handy. Using a Nerd Font in your terminal allows for some pretty nice icons and font customization that can be extended to your IDE (like VS Code).

  • Nerd Fonts

My current terminal is Alacritty running fish with Starship as the prompt and using the SauceCodePro Nerd Font.

A stroll through my current custom terminal.

Terminal Utilities:

This article is wayyy longer than I ever intended it to be so I’m not going to go in depth on these utilities/applications but they all add some functionality to your terminal. Some extend a feature or command already available in the terminal and others add a useful feature that may help you be more productive. If any of them catch your eye I encourage you to check them out more in-depth on YouTube or Reddit.

  • tmux

tmux is a terminal multiplexer which means it allows you section out your visual window to access and include other applications at the same time. So instead of having to open up multiple terminal windows at the same time to access different applications or run new workflows, tmux allows you to do so in the same window or session.

tmux with the pane split vertically
  • thefuck

thefuck is a very aggressively named app that will correct an improperly entered command.

  • btop

btop will show you a very detailed overview of system and the resources being used

  • eza

eza is a replacement for ls that adds more functionality

ls vs. eza and it’s extra functionality
  • fzf

fzf allows you to search through your system files straight from the command line. Once you have installed the application, run the “fzf” command to initialize the app and then you can enter a file title to search directly.

searching my system for “Azure Translator” using fzf
  • zoxide

zoxide is a replacement for cd that remembers previously used file paths so you can get there directly with the “z” command followed by an auto-suggestion of the file path. A great tool if you have deep folders.

  • ripgrep

ripgrep is an extension of the grep command that will search inside of files for an entered phrase or word.

  • bat

bat is an extension of the cat command that will display files with icons and syntax highlighting rather than plain text

  • tldr

tldr is basically an extension of man and is a collection of help pages for anything you can think of. Use tldr followed by the command you are confused about.

  • rip

rip is a replacement for rm

  • navi

navi allows you to create your own or download “cheatsheets” for how to use commands or CLIs. This is especially helpful if you’re working with Cloud providers and need to remember how to use the AWS or Azure CLI

  • broot

broot is a replacement for tree so that your entire terminal is not taken over by running down every file and folder in your system

  • devtoys

Ollama:

And finally we’re here. Ollama is amazing for nothing if not the application icon. Who doesn’t love a llama?

But seriously, Ollama is an open-source application for utilizing LLMs (Large Language Models). To keep it short — Ollama is a free, open-source application that allows the user to access GPT-like LLMs. Ollama runs through the terminal but does have a GUI to make it more accessible. There are also a ton of LLMs available for use through Ollama.

In English — you can use an application like Chat-GPT for free and on your local system rather than on the internet.

Ollama running the Llama2 LLM in the terminal.

Ollama also facilitates a coding assistant in VS Code as a replacement for GitHub Copilot. I’m currently using the Continue VS Code extension which allows me to access the LLMs I’ve downloaded through Ollama within VS Code. The Continue extension provides a simple GUI for asking questions and getting suggestions for issues that come up while writing code.

VS Code open with the Continue extension running the Starcode LLM.

If you’re like me and find a project like Ollama deeply interesting then I would encourage you to also check out HuggingFace and Kaggle’s ML offerings.

I’m Finally Done:

Ya’ll I’m tired of typing. I had no idea this article would get this long but I sincerely hope I showed you something new and interesting to spice up your productivity and workflows. I gotta go let my fingers rest.

See ya around the Cloud!

--

--

Melissa Richard
Melissa Richard

Written by Melissa Richard

Hello! Thank you for checking out my page. I'm an Attorney exploring the exciting world of web3 - Cloud, AI, and Blockchain.

Responses (11)