Skip to content

Latest commit

 

History

History
175 lines (123 loc) · 9.72 KB

README.md

File metadata and controls

175 lines (123 loc) · 9.72 KB

my-software

My personal software: dot files, utility programs, setup instructions, and more.

Overview

The most impactful component of this repository might be my macOS Setup notes. It provides step-by-step instructions I like to follow for setting up a new Mac. In this repository, I've also crammed in a wide range of other personal tooling I've developed or am just experimenting with.

mac-os/

My personal instructions for configuring macOS the way I like it and installing the tools I use.

See the README in mac-os/.

bash/

My Bash config and notes about Bash auto-completion (I always forget how to set this up!).

See the README in bash/.

homebrew/

A description of my Homebrew strategy.

See the README in homebrew/.

iterm2/

My iTerm2 config.

iTerm2 is a terminal emulator for macOS that does amazing things.

-- https://iterm2.com

java/

Java code that supports my personal workflows.

See the README in java/.

javascript/

JavaScript code that supports my personal workflows.

See the README in javascript/.

jetbrains/

My configuration for JetBrains IDEs (e.g. Intellij and Android Studio).

Essential tools for software developers and teams

https://www.jetbrains.com

See the README in jetbrains/.

karabiner/

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.

-- https://github.com/pqrs-org/Karabiner-Elements

nushell

My Nushell configuration and scripts.

See the README in nushell/.

starship/

My config file for Starship.

The minimal, blazing-fast, and infinitely customizable prompt for any shell!

-- https://github.com/starship/starship

Wish List

General clean-ups, TODOs and things I wish to implement for this project:

  • Consider restoring (at b3154dde and before) the shortcuts I had defined for navi. There was some good knowledge there, but I never wound up using navi.
  • 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.)
  • DONE (It's a known bug in Atuin) 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 Revert to a more standard (non high contrast) color theme for Ghostty and instead use a more targeted approach: create higher contrast color themes/settings in specific tools like Nushell and LS_COLORS (already done). I realized that modifying the colors of the 256 ANSI colors (at least beyond the base ones) is kind of a kludgy and imperfect thing to do because it crushes most of those colors, and it doesn't even solve a global contrast problem because CLI tools can just use whatever color (hex) they want (like my own fuzzy finder). So forget it. If there is a CLI/TUI tool that has particularly bad contrast, and codes to the ANSI-256 colors, and doesn't have its own color configuration, then I'll consider "redefining ANSI 256", but overall I think that should be rare and I don't to redefine system things without big thought.
  • DONE Try out Nushell's new "vendor auto load" configuration feature
  • DONE (good enough for now; I have to use Obsidian to get more of an opinion) Obsidian + LLM. I want to browse and search my README files in a convenient way (compressed workflow). I have a decent corpus of content in the README files of my many playground-style GitHub repositories. I often want to copy specific pieces from them and find snippets of knowledge (sometimes I know I have done something but can't find the right repository). My overarching desire is to be able to have semantic search over my hard-earned writing (I write for "me" as the main audience). While I can (and do) use grep and GitHub search, I think Obsidian plus LLMs (either local or via hosted LLM APIs), is a good approach in 2025. There is a neat Obsidian plugin called Smart Connections that I want to try. As part of this idea, I need a strategy for locating the markdown files into an Obsidian vault. Obsidian does not like symlinks. So, my thought is that I should prefer a copying mechanism.
    • DONE Script out some code and notes. It's open ended.
    • DONE Install "Smart Connections". Do some embeddings and try it out.
    • Note: I'm also interested in semantic search over the many comments, function names, etc, in my actual code... but there is not an obvious way to do this... Although I'm tempted to parse out the comments (I've parsed out Go and Java with the proper compiler toolchains so, it's totally possible) and embed/index them. But the presentation part is hard
  • I really want quick, keyboard-based diff review like I have in Intellij. See microsoft/vscode#24389
  • DONE Remove duplicate strings in prompt bundles. This is what I want to use in principle: https://github.com/google-research/deduplicate-text-datasets Somewhat ambitious, but I think this has the potential to be as successful and appropriate as my fzf port. The source code is relatively small. I'd like to reimplement a toy version of it in Kotlin for short term. After I grok it, I can consider rewriting it Rust but I expect I will never need that performance. My prompt files will only ever be like a couple megabytes max, right?
    • DONE Incorporate deduplication into bundling code.

Finished Wish List Items

  • 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 the JAVA_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 in java/markdown-code-fence-reader that works as long as my JAVA_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, even BASH_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 the go-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 that brew 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.