This commit is contained in:
Joshua Seigler 2025-06-12 22:27:04 -04:00
commit 86faf63084
113 changed files with 9557 additions and 0 deletions

View file

@ -0,0 +1,224 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, viewport-fit=cover"
/>
<link rel="stylesheet" href="/site.css?v=b0813e810319" />
<link
rel="webmention"
href="https://webmention.io/joshua.seigler.net/webmention"
/>
<title>Tools of the trade - joshua.seigler.net</title>
<meta name="description" content="Some dev tools I recommend." />
<meta property="og:title" content="Tools of the trade" />
<meta property="og:type" content="" />
<meta
property="og:url"
content="https://joshua.seigler.net/posts/tools-of-the-trade/"
/>
<meta name="twitter:title" content="Tools of the trade" />
<meta name="twitter:description" content="Some dev tools I recommend." />
<meta name="twitter:card" content="summary" />
<meta name="generator" content="Eleventy v3.1.0" />
<script
defer
src="https://stats.apps.seigler.net/script.js"
data-website-id="ccb4bd94-2a71-47fe-8eea-d85bf75b7f6d"
></script>
<script defer src="/scripts/effects.js?v=cd61c39d895d"></script>
</head>
<body data-font="english" data-path="/posts/tools-of-the-trade/">
<header>
<nav>
<div class="nav-row">
<div class="nav-home"><a href="/">joshua.seigler.net</a></div>
<div class="nav-settings">
<div class="nav-toggles">
<label class="nav-toggle-button" title="Light mode"
>☀️<input type="radio" name="theme" value="light"
/></label>
<label class="nav-toggle-button" title="Automatic"
>🔄<input type="radio" name="theme" value="auto"
/></label>
<label class="nav-toggle-button" title="Dark mode"
>🌒<input type="radio" name="theme" value="dark"
/></label>
</div>
<div class="nav-toggles">
<label class="nav-toggle-button" data-language="english"
>English<input type="radio" name="language" value="english"
/></label>
<label class="nav-toggle-button" data-language="aurebesh"
>Aurebesh<input type="radio" name="language" value="aurebesh"
/></label>
</div>
</div>
</div>
<div class="nav-categories">
<a class="nav-active" href="/posts/">/posts</a>
<a class="" href="/about/">/about</a>
<a class="" href="/now/">/now</a>
<a class="" href="/uses/">/uses</a>
<a class="" href="/recipes/">/recipes</a>
<a class="" href="/music/">/music</a>
<a class="" href="/books/">/books</a>
<a class="" href="/search/">/search</a>
</div>
</nav>
<h1>Tools of the trade</h1>
<div class="header-meta">
<author>Joshua Seigler</author><date>May 15, 2025</date>
</div>
</header>
<main data-pagefind-body>
<p>
Everyone has different tools that they find especially effective. Here
are some I have found with a few words about why I like them.
</p>
<blockquote>
<p>
Update: I made a <a href="/uses">/uses</a> page that lists these tools
and many others I like.
</p>
</blockquote>
<h3 id="mise-en-place" tabindex="-1">
<a class="header-anchor" href="#mise-en-place" aria-hidden="true"></a>
<a href="https://mise.jdx.dev/" target="_blank" rel="noopener"
>mise-en-place</a
>
</h3>
<p>
Universal dev tool version manager. Specify tool versions in a config
file and this tool can ensure that they are installed and active when
entering the project directory. Amazing for getting a new dev
environment set up in seconds. Replaces <code>asdf</code>,
<code>nvm</code>, <code>pyenv</code>, <code>venv</code>,
<code>rbenv</code>, and many other tool-specific version managers.
Supports an incredible number of tools thanks to compatibility with
<code>asdf</code>.
</p>
<p>
It also supports installing specific global tools, like
<code>angular-cli</code> from <code>npm</code>, or
<code>stack-pr</code> from <code>pipx</code>.
</p>
<h3 id="stack-pr" tabindex="-1">
<a class="header-anchor" href="#stack-pr" aria-hidden="true"></a>
<a
href="https://github.com/modular/stack-pr"
target="_blank"
rel="noopener"
>stack-pr</a
>
</h3>
<p>
Open source tool for
<a href="https://www.stacking.dev/" target="_blank" rel="noopener"
>stacking PRs</a
>.
</p>
<p>
PR stacks are, as far as I can tell, the best way to manage large
features in git. I first heard about this practice in a series of blog
posts from Graphite, a company offering free PR-stacking software and
related paid services. But you dont need a custom CI flow or managed
service for stacking to work - this CLI tool or one of the others at
<a href="https://www.stacking.dev/" target="_blank" rel="noopener"
>stacking.dev</a
>
can take care of this.
</p>
<p>
If you start using PR stacks your whole company will start copying you.
</p>
<h3 id="xc" tabindex="-1">
<a class="header-anchor" href="#xc" aria-hidden="true"></a>
<a href="https://xcfile.dev/" target="_blank" rel="noopener">xc</a>
</h3>
<p>Markdown based task runner.</p>
<p>
Define tasks in code blocks in markdown, and call them from the CLI.
Serves as both task definition and documentation.
</p>
<h3 id="pd2slack" tabindex="-1">
<a class="header-anchor" href="#pd2slack" aria-hidden="true"></a>
<a
href="https://github.com/sidpremkumar/pd2slack"
target="_blank"
rel="noopener"
>pd2slack</a
>
</h3>
<p>
Simple python script to update the members of a Slack group such as
<code>@oncall</code> to match the active member(s) of a PagerDuty
schedule. This replaces several expensive SAAS services.
</p>
<h3 id="syncthing" tabindex="-1">
<a class="header-anchor" href="#syncthing" aria-hidden="true"></a>
<a href="https://syncthing.net/" target="_blank" rel="noopener"
>SyncThing</a
>
</h3>
<p>
P2P alternative to Dropbox, supports mobile and desktop. Synchronize
folders of content across all my devices.
</p>
<h3 id="obsidian" tabindex="-1">
<a class="header-anchor" href="#obsidian" aria-hidden="true"></a>
<a href="https://obsidian.md/" target="_blank" rel="noopener"
>Obsidian</a
>
</h3>
<p>
For notes and reference. Sync across devices with
<code>syncthing</code>.
</p>
<h3 id="keepassxc" tabindex="-1">
<a class="header-anchor" href="#keepassxc" aria-hidden="true"></a>
<a href="https://keepassxc.org/" target="_blank" rel="noopener"
>KeePassXC</a
>
</h3>
<p>For passwords. Sync across devices with <code>syncthing</code>.</p>
<script
data-isso="//comments.apps.seigler.net/"
src="//comments.apps.seigler.net/js/embed.min.js"
></script>
<section id="isso-thread" data-title="">
<noscript>Javascript needs to be activated to view comments.</noscript>
</section>
</main>
<footer>
<section>
&copy; Joshua Seigler 2025. -
<a href="https://github.com/seigler" rel="me noopener" target="_blank"
>GitHub</a
>
-
<a href="/feed.xml">RSS</a>
-
<a rel="me" href="mailto:joshua@seigler.net?subject=Hello">Contact</a>
-
<a href="/unoffice-hours/">Unoffice Hours</a>
</section>
<section>
Webrings:
<strong>Unoffice Hours</strong>
<a href="https://unofficehours.com/prev.html" rel="noopener">Prev</a>
<a href="https://unofficehours.com/next.html" rel="noopener">Next</a>
<a href="https://unofficehours.com/random.html" rel="noopener"
>Random</a
>
<a href="https://unofficehours.com" rel="noopener">List</a>
</section>
</footer>
<div id="effects"></div>
</body>
</html>