My personal software: dot files, utility programs, setup instructions, and more.
The most useful component of this repository is the My macOS Setup section below. It provides step-by-step instructions I like to follow for setting up a new Mac.
The rest of the repository is organized in the following directories:
My personal instructions for configuring macOS the way I like it and installing the tools I use.
See the README in mac-os/.
My Bash config and notes about Bash auto-completion (I always forget how to set this up!).
See the README in bash/.
A description of my Homebrew strategy.
See the README in homebrew/.
My iTerm2 config.
iTerm2 is a terminal emulator for macOS that does amazing things.
Java code that supports my personal workflows.
See the README in java/.
My configuration for JetBrains IDEs (e.g. Intellij and Android Studio).
Essential tools for software developers and teams
See the README in jetbrains/.
My configuration for the amazing tool Karabiner-Elements https://github.com/tekezo/Karabiner-Elements.
Karabiner-Elements is a powerful utility for keyboard customization on macOS Sierra or later.
My Nushell configuration and scripts.
See the README in nushell/.
My config file for Starship.
The minimal, blazing-fast, and infinitely customizable prompt for any shell!
General clean-ups, TODOs and things I wish to implement for this project:
- Consider restoring (at
b3154dde
and before) the shortcuts I had defined fornavi
. There was some good knowledge there, but I never wound up usingnavi
. - Consider restoring (at
b3154dde
and before) my usage of markdownlint. I still like it, but I just never got used to using it. learn them better. I think I should pare down the larger one-liners. - Consider restoring (at
b3154dde
and before) my Postgres-related Bash functions. These were hard fought and useful. Maybe reimplement in Nushell. Alternatively, I often use Postgres in Docker. But still. (Same is true of the Mongo functions but not sure how much I'll ever use Mongo again.) - Why isn't
enter_accept = true
working for Atuin? It has no effect. - DONE Poetry completion isn't working... I've been here before
- DONE Completion isn't working for brew... We've been here before
- DONE System for measuring the time it takes to load scripts in
.bashrc
and.bash_profile
. I want to do something like this very cool project! - DONE (The answer is: never use eager completion loading) Loading my bash completions is slow. Doesn't bash completions support lazy loading? I have some good notes in
bash/BASH_COMPLETION.md
. Maybe most software still only provides v1 completion (which doesn't support lazy/on-demand)... - DONE Create my personal framework/strategy for managing "scripts to source during Bash shell initialization time"
- DONE Scaffold out a Perl script
- SKIP Add more external documentation to
bb
(the internal documentation in the '--help' is already extremely thorough) - SKIP (bb is complete) Implement the fifo/domain-socket -based benchmarking described in
bb
- (SKIP: virtual environments satisfy Python version switching) Python SDK management. Don't bother with custom formula. Just use the core ones, which already include 3.9, 3.10, 3.11 and 3.12. That's perfect. UPDATE: I think Python switching is not as necessary as Java or Node.js switching because we often use virtual environments. So, in a Python project, you typically activate its virtual env and that's your way of switching Python versions. And for one-off scripts, would I just be using the latest Python anyway? I'm going to skip this for now.
- DONE Node.js SDK management (I think this should be totally feasible since I figured this out with OpenJDK and am happy with that).
- DONE Make a "Java program launcher" in Go. In any interpreted program, (Java, Python, Ruby, JavaScript), the program
needs to be run with an interpreter (JVM,
python
,ruby
,node
, etc.). This is totally fine, but distributing these programs is often a challenge because the user needs to have the interpreter installed, and it needs to be a compatible version, and it needs to be discoverable when launching the program. In Java, we have things like theJAVA_HOME
environment variable to help with that. But that doesn't help with version compatibility. By contrast, programs that compile to an executable binary (e.g. Go, C) are easy to distribute. They are "all-in-one". (To be fair, the same distribution headache is true for Go and Co programs if they link to shared libraries). I have a Java program injava/markdown-code-fence-reader
that works as long as myJAVA_HOME
is a Java 21 JDK, but my shell environment differs per project. I want to solve this scenario.- DONE Go side
- DONE Gradle side
- DONE Properly add Nushell steps to instructions. Bootstrapping is important.
- DONE
pipx
shell completion is broken. It's working in bash. Not sure why not working in Nushell. Strange, evenBASH_COMPLETION_INSTALLATION_DIR=/opt/homebrew/opt/bash-completion@2 ./one-shot-bash-completion.bash "pipx "
works. - DONE
brew
completion doesn't work. - DONE Create a
java-body-omitter
program that works just like thego-body-omitter
program but for Java. - DONE Can I get rid of
bb
? I no longer have a need for the speed-up of bb and also my spread of bash files is tiny now because I'm on Nushell. The catalyst is thatbrew shellenv
is misbehaving now because it overwrites the PATH with some hardcoded stuff... not going to bother figuring that out. - DONE Split out instructions into own directory. It's worked well but now this repo is
my-software
, much more broad.