Skip to content

Latest commit

 

History

History
255 lines (206 loc) · 10.6 KB

README.md

File metadata and controls

255 lines (206 loc) · 10.6 KB

dofiles

This is my dotfiles repository.

There are many like it, but this one is mine.

Screenshots

  • TODO

Introduction

I suppose this project has its genesis it my attempts to improve my software development skills.

I first learned to program as a CS minor in undergrad, well over a decade ago. While I'm grateful for the education I received, one thing I found sorely lacking was any emphasis on the tools of the software craftsperson's trade. Perhaps this is a consequence of having studied CS, mathematics, and statistics, rather than SWE, but emphasis was always on algorithms and data structures from a more theoretical perspective.

In recent years, however, I have gained an appreciation for the importance of cultivating one's skill with the command line. Related to this, I have also learned what profound joy and reward there is in cultivating a well-functioning and beautiful development environment.

Thus it is that I decided to take the organizing of my dotfiles more seriously and publish this repository.

I intend to continue cultivating and refining this repo indefinitely, as a garden.

So, welcome to my garden. I hope you enjoy walking through. If nothing else, I hope it inspires you to cultivate your own garden, or reinvigorates a love for the garden that may already be in your keeping.

Installation

I use toml-bombadil to manage symlinking of my dotfiles. I highly recommend that you check it out!

Assuming you've installed toml-bombadil and all of the tools mentioned below, you can install the dotfiles by running the following:

bombadil link -p desktop

My next goal in building out this repo is to set up an install.sh script to make bootstrapping easier. At that point I will also refactor some of the dotfiles themselves, leveraging toml-bombadil's templating abilities to make them platform agnostic.

Ultimately, I'd like to have a single repository which is capable of syncing my environment across all of my current (and future) devices. This way, trying out a new distro or refreshing my existing system can be as painless as possible.

Tools

I have tried to organize the dotfiles into high-level groups which are as sensible as possible. The list below is not an exhaustive list of the tools I'm currently using, but it does capture most of the key tools I use and whose configurations I have so far messed with.

[!note] Theming and Fonts After theme-hopping for several years (gruvbox was my go-to theme for most of those years), I finally settled upon Catppuccin (macchiato) to theme my various. Aside from being a great color scheme, I love how configurable (four different variants, with even more "accent" colors) and pervasive Catppuccin is. There might be color schemes that I like more in isolation, but the widespread availability of official ports and the community's emphasis on documentation means I can give basically my entire system a consistent look and feel. Check out the themes/catppuccin/ folder, which has several of these ports that I'm using throughout my system.

I've also done some font-hopping, with my current favorite being NerdFonts' port of Monaspace (called Monaspice). You can preview the font here if you're interested! (I prefer the Argon variant myself.)

Browser

  • Zen: exciting new Firefox-based browser

CLI

  • bat: like cat, but better
  • bottom: system monitoring
  • espanso: text expander
  • glow: render markdown documents with 🌈pizazz🌠
  • lazygit: cool, easy to use TUI git-interface
  • neofetch: print out a quick system summary with nice ascii art
  • tealdeer: rust-based tldr replacement; simple, community-driven man pages
  • weathercrab: rust-based weather app
  • yazi: terminal file manager, written in rust

Other noteworthy CLI tools I use whose configs do not appear here:

  • eza: rust-based ls replacement
  • zoxide: rust-based cd replacement
  • delta: rust-based git diff/merge tool
  • funzzy: rust-based filesystem watcher
  • dust: rust-based du-replacement
  • hexyl: rust-based hex viewer
  • procs: rust-based ps replacement
  • ripgrep (rg): rust-based grep replacement
  • rm-improved (rip): rust-based rm replacement
  • xsv: rust-based program for handling csv files
  • fzf: fuzzy-finder
  • keepassxc: password manager

Editor

I recently switched from JetBrains (Intellij, PyCharm) to Neovim, and I'm absolutely loving it. As an AI/Data Scientist, the only itch that Neovim can't scratch is Jupyter Notebook support, but there are plugins to work around this, and if need be, I can just fire up JupyterLab in my browser.

When I started using Neovim, I was using the AstroNvim distribution, which I would still highly recommend to anybody just starting on their Neovim odyssey. Though AstroNvim has a lot of great stuff built-in, you will still find yourself wanting to tinker with it after a bit of use (this is simply the Neovim way, I'm afraid). The editor/astro-nvim/ directory contains my AstroNvim configuration. To use this configuration, you'll need to change the editor profile being used in bombadil.toml:

# bombadil.toml
...
[profiles.desktop]
extra_profiles = [
  "browser-zen",
  "cli-go",
  "cli-node_js",
  "cli-rust",
  "cli-other",
  # "editor-astro_nvim", <-- uncomment this line
  "editor-kickstart_nvim", # <-- comment this line
  "git",
  "system-pop_os",
  "music-youtube_music",
  "python-3_12",
  "shell-bash",
  "shell-sh",
  "shell-zsh",
  "shell-multi",
  "terminal-wezterm",
]

After a couple of months using AstroNvim, however, I decided I wanted to really understand how Neovim and its configuration worked. Thus, I made the switch to a kickstart-based config (actually, I'm using kickstart-modular, which is just a modularized fork of the original kickstart). This config is maintained in the editor/kickstart-nvim/ directory.

In the remainder of this section, I'll highlight some of the key plugins I'm using.

  • Folke's plugins should be their own section
    • Lazy: plugin manager
    • which-key: keymap popup/organizer
    • noice: replacement ui for messages, cmdline, and the popupmenu
    • trouble: handy list viewer for diagnostics, quickfixes, etc.
    • snacks: tons of small QoL plugins. I'm using just about all of the included "snacks" (modules), but here I'll highlight those that provide some core functionality:
      • dashboard: aesthetic, useful landing page when entering neovim
        • (with { example = "advanced" })
      • indent: indent guides & scopes
      • notifier: pretty notification interface and history
      • picker: an amazing Telescope replacement/fuzzy finder
      • statuscolumn: pretty statuscolumn
      • zen: "Zen mode", for distraction-free coding
  • blink.cmp: completion
  • lualine: statusline
  • obsidian: integration between the Obsidian note-taking app and Neovim

Git

This directory just contains my basic .gitconfig file. Nothing too fancy.

Music

I use YouTube Music, by way of th-ch. Eventually I'll try to ween myself off of the webapp-interface, but it works well enough for now and admits of several cool customizations.

Python

As an AI/Data Scientist, Python is my primary language. Here are some of the tools I enjoy using:

  • uv: a fast package manager, virtual environment manager, and tool manager
  • ruff: a fast linter, formatter, and language server
  • basedpyright: static type analysis

Shell

I use zsh as my primary shell. Here are some of the accompanying tools I use with it:

  • antigen: plugin manager
    • special mention to Oh My Zsh, which I used for some time before the switch to antigen. In fact, I was only comfortable making the switch since you can easily install omz plugins via antigen.
  • starship: shell prompt

System

Currently, I'm running Pop!_OS (22.04), which I have not altered much from the default System76-managed distribution. As such, I'm currently using GNOME 42 as my DE.

Whenever System76 releases COSMIC I'll switch over to that.

Eventually I'll give Arch a try (the whole point of creating this repo was to encourage experimenting, after all!).

Terminal

I use WezTerm as my terminal emulator. It has builtin multiplexing and image support, plus it's highly configurable via lua.