242 lines
8.8 KiB
HTML
242 lines
8.8 KiB
HTML
<!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=88202782cebe" />
|
||
<style>
|
||
/* inter-latin-wght-normal */
|
||
@font-face {
|
||
font-family: "Inter Variable";
|
||
font-style: normal;
|
||
font-display: swap;
|
||
font-weight: 100 900;
|
||
src: url(/fonts/inter-latin-wght-normal.woff2)
|
||
format("woff2-variations");
|
||
unicode-range:
|
||
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
|
||
U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
|
||
U+2212, U+2215, U+FEFF, U+FFFD;
|
||
} /* inter-latin-wght-italic */
|
||
@font-face {
|
||
font-family: "Inter Variable";
|
||
font-style: italic;
|
||
font-display: swap;
|
||
font-weight: 100 900;
|
||
src: url(/fonts/inter-latin-wght-italic.woff2)
|
||
format("woff2-variations");
|
||
unicode-range:
|
||
U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
|
||
U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193,
|
||
U+2212, U+2215, U+FEFF, U+FFFD;
|
||
}
|
||
</style>
|
||
<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=d86d3b7642f1"></script>
|
||
<link rel="me" href="https://github.com/seigler" />
|
||
<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 name="keywords" content="posts, technical, software" />
|
||
<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" />
|
||
</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>
|
||
<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="/links/">/links</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>
|
||
|
||
<span class="tags" style="--totalTags: 11"
|
||
><a class="tag" style="--tagIndex: 5" href="/tags/technical"
|
||
>technical</a
|
||
>
|
||
<a class="tag" style="--tagIndex: 8" href="/tags/software"
|
||
>software</a
|
||
>
|
||
</span>
|
||
</div>
|
||
</header>
|
||
|
||
<header class="toc">
|
||
<span class="toc">
|
||
<ol>
|
||
<li><a href="#mise-en-place"> mise-en-place</a></li>
|
||
<li><a href="#stack-pr"> stack-pr</a></li>
|
||
<li><a href="#xc"> xc</a></li>
|
||
<li><a href="#pd2slack"> pd2slack</a></li>
|
||
<li><a href="#syncthing"> SyncThing</a></li>
|
||
<li><a href="#obsidian"> Obsidian</a></li>
|
||
<li><a href="#keepassxc"> KeePassXC</a></li>
|
||
</ol>
|
||
</span>
|
||
</header>
|
||
|
||
<main data-pagefind-body="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 don’t 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>
|
||
</main>
|
||
<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>
|
||
|
||
<footer>
|
||
© Joshua Seigler 2025. -
|
||
<a rel="me" href="mailto:joshua@seigler.net?subject=Hello">Contact</a>
|
||
-
|
||
<a href="/feed.xml">RSS</a>
|
||
-
|
||
<a href="/unoffice-hours/">Unoffice Hours</a>
|
||
-
|
||
<a href="/webrings/">Webrings</a>
|
||
</footer>
|
||
<div id="effects"></div>
|
||
</body>
|
||
</html>
|