leatherman

command module
v0.0.0-...-325f451 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 26, 2024 License: Apache-2.0 Imports: 52 Imported by: 0

README

<!-- Code generated by maint/generate-README. DO NOT EDIT. -->
# Leatherman - fREW's favorite multitool

This is a little project simply to make trivial tools in Go effortless for my
personal usage.  These tools are almost surely of low utility to most people,
but may be instructive nonetheless.

[I have CI/CD to build this into a single
binary](https://github.com/frioux/leatherman/blob/master/.travis.yml) and [an
`explode` tool that builds
symlinks](https://github.com/frioux/leatherman/blob/master/explode.go) for each
tool in the busybox style.

[I have automation in my
dotfiles](https://github.com/frioux/dotfiles/blob/bef8303c19e2cefac7dfbec420ad8d45b95415b8/install.sh#L133-L141)
to pull the latest binary at install time and run the `explode` tool.

## Installation

Here's a copy pasteable script to install the leatherman on OSX or Linux:

``` bash
OS=$([ $(uname -s) = "Darwin" ] && echo "-osx")
LMURL="$(curl -s https://api.github.com/repos/frioux/leatherman/releases/latest |
   grep browser_download_url |
   cut -d '"' -f 4 |
   grep -F leatherman${OS}.xz )"
mkdir -p ~/bin
curl -sL "$LMURL" > ~/bin/leatherman.xz
xz -d -f ~/bin/leatherman.xz
chmod +x ~/bin/leatherman
~/bin/leatherman explode
```

This asssumes that `~/bin` is in your path.  The `explode` command will create a
symlink for each of the tools listed below.

## Usage

Each tool takes different args, but to run a tool you can either use a symlink
(presumably created by `explode`):

``` bash
$ echo "---\nfoo: 1" | yaml2json
{"foo":1}
```

or use it as a subcommand:

``` bash
echo "---\nfoo: 1" | leatherman yaml2json
{"foo":1}
```

## Tools


### allpurpose

 * `alluni`: Prints all unicode character names ([internal/tool/allpurpose/uni/alluni.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/uni/alluni.md))
 * `clocks`: Shows my personal, digital, wall of clocks ([internal/tool/allpurpose/clocks/clocks.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/clocks/clocks.md))
 * `csv2json`: Reads CSV on stdin and writes JSON on stdout ([internal/tool/allpurpose/csv/csv2json.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/csv/csv2json.md))
 * `csv2md`: Reads CSV on stdin and writes Markdown on stdout ([internal/tool/allpurpose/csv/csv2md.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/csv/csv2md.md))
 * `debounce`: Run debounces input from stdin to stdout ([internal/tool/allpurpose/debounce/debounce.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/debounce/debounce.md))
 * `dump-mozlz4`: Dumps the contents of a `mozlz4` (aka `jsonlz4`) file. ([internal/tool/allpurpose/dumpmozlz4/dump-mozlz4.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/dumpmozlz4/dump-mozlz4.md))
 * `expand-url`: Converts links in text to markdown links. ([internal/tool/allpurpose/expandurl/expand-url.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/expandurl/expand-url.md))
 * `fn`: Creates persistent functions by generating scripts. ([internal/tool/allpurpose/fn/fn.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/fn/fn.md))
 * `group-by-date`: Creates time series data by counting lines and grouping them by a given date format. ([internal/tool/allpurpose/groupbydate/group-by-date.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/groupbydate/group-by-date.md))
 * `minotaur`: Watches directories and runs a command when files change. ([internal/tool/allpurpose/minotaur/minotaur.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/minotaur/minotaur.md))
 * `name2rune`: Prints characters based on name. ([internal/tool/allpurpose/uni/name2rune.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/uni/name2rune.md))
 * `netrc-password`: Prints password for a hostname, login pair. ([internal/tool/allpurpose/netrcpassword/netrc-password.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/netrcpassword/netrc-password.md))
 * `pomotimer`: Conveniently counts down a duration. ([internal/tool/allpurpose/pomotimer/pomotimer.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/pomotimer/pomotimer.md))
 * `replace-unzip`: Does what `unzip` does more safely. ([internal/tool/allpurpose/replaceunzip/replace-unzip.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/replaceunzip/replace-unzip.md))
 * `srv`: Serves a directory over http, automatically refreshing when files change. ([internal/tool/allpurpose/srv/srv.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/srv/srv.md))
 * `toml2json`: Reads TOML on stdin and writes JSON on stdout. ([internal/tool/allpurpose/toml/toml2json.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/toml/toml2json.md))
 * `uni`: Describes unicode characters. ([internal/tool/allpurpose/uni/uni.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/uni/uni.md))
 * `yaml2json`: Reads YAML on stdin and writes JSON on stdout. ([internal/tool/allpurpose/yaml/yaml2json.md](https://github.com/frioux/leatherman/blob/main/internal/tool/allpurpose/yaml/yaml2json.md))

### chat

 * `auto-emote`: Reacts to discord messages with vaguely related emoji. ([internal/tool/chat/automoji/auto-emote.md](https://github.com/frioux/leatherman/blob/main/internal/tool/chat/automoji/auto-emote.md))
 * `slack-deaddrop`: Sends messages to a slack channel. ([internal/tool/chat/slack/slack-deaddrop.md](https://github.com/frioux/leatherman/blob/main/internal/tool/chat/slack/slack-deaddrop.md))
 * `slack-open`: Opens a channel, group message, or direct message by name. ([internal/tool/chat/slack/slack-open.md](https://github.com/frioux/leatherman/blob/main/internal/tool/chat/slack/slack-open.md))
 * `slack-status`: Sets slack status. ([internal/tool/chat/slack/slack-status.md](https://github.com/frioux/leatherman/blob/main/internal/tool/chat/slack/slack-status.md))

### leatherman

 * `update`: Installs new version of leatherman if one exists. ([internal/tool/leatherman/update/update.md](https://github.com/frioux/leatherman/blob/main/internal/tool/leatherman/update/update.md))

### misc

 * `backlight`: Modifies screen brightness. ([internal/tool/misc/backlight/backlight.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/backlight/backlight.md))
 * `draw`: Draws images with lua. ([internal/tool/misc/img/draw.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/img/draw.md))
 * `export-bamboohr`: Exports company directory as JSON. ([internal/tool/misc/bamboo/export-bamboohr.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/bamboo/export-bamboohr.md))
 * `media-remote`: `media-remote` control media players on Linux. ([internal/tool/misc/desktop/media-remote.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/desktop/media-remote.md))
 * `prepend-hist`: Combines a history file and stdin. ([internal/tool/misc/prependhist/prepend-hist.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/prependhist/prepend-hist.md))
 * `status`: Serves information about host machine. ([internal/tool/misc/status/status.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/status/status.md))
 * `steamsrv`: Steamsrv renders steam screenshots and the steam log (what games you played and when) over http. ([internal/tool/misc/steamsrv/steamsrv.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/steamsrv/steamsrv.md))
 * `twilio`: Makes callbacks like twilio. ([internal/tool/misc/twilio/twilio.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/twilio/twilio.md))
 * `wuphf`: Sends notifications on lots (2) of platforms. ([internal/tool/misc/wuphf/wuphf.md](https://github.com/frioux/leatherman/blob/main/internal/tool/misc/wuphf/wuphf.md))

### notes

 * `amygdala`: Automated assistant. ([internal/tool/notes/amygdala/amygdala.md](https://github.com/frioux/leatherman/blob/main/internal/tool/notes/amygdala/amygdala.md))
 * `brainstem`: Interacts with amygdala without using any server components. ([internal/tool/notes/brainstem/brainstem.md](https://github.com/frioux/leatherman/blob/main/internal/tool/notes/brainstem/brainstem.md))
 * `notes`: Serves my notes from disk or Dropbox. ([internal/tool/notes/now/notes.md](https://github.com/frioux/leatherman/blob/main/internal/tool/notes/now/notes.md))
 * `proj`: Integrates my various project management tools. ([internal/tool/notes/proj/proj.md](https://github.com/frioux/leatherman/blob/main/internal/tool/notes/proj/proj.md))
 * `zine`: Read only view of my notes via the filesystem. ([internal/tool/notes/zine/zine.md](https://github.com/frioux/leatherman/blob/main/internal/tool/notes/zine/zine.md))

## Debugging

In an effort to make debugging simpler, I've created three ways to see what
`leatherman` is doing:

### Tracing

`LMTRACE=$somefile` will write an execution trace to `$somefile`; look at that with `go tool trace $somefile`

Since so many of the tools are short lived my assumption is that the execution
trace will be the most useful.

### Profiling

`LMPROF=$somefile` will write a cpu profile to `$somefile`; look at that with `go tool pprof -http localhost:10123 $somefile`

If you have a long running tool, the pprof http endpoint is exposed on
`localhost:6060/debug/pprof` but picks a random port if that port is in use; the
port can be overridden by setting `LMHTTPPROF=$someport`.

## Auxiliary Tools

Some tools are annoying to have in the main leatherman tool.  Maybe they pull
in deps that are huge or need cgo, but in any case I try to keep them separate.
For now, these tools are under `leatherman/cmd` and must be built and run
separately.  At some point I may come up with a policy around building or naming these,
but for now they are simply extra tools.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
internal
lmfav
lmfav provides http.Handlers for generating favicons.
lmfav provides http.Handlers for generating favicons.
lmlua
package lmlua defines lots of general types for lua.
package lmlua defines lots of general types for lua.
log
notes/west
note ast is noteast is not east is west
note ast is noteast is not east is west
personality
Package personality returns pseudorandom responses for the lulz.
Package personality returns pseudorandom responses for the lulz.
pkg
pico8/p8file
Package p8file implements a parser and formatter for https://pico-8.fandom.com/wiki/P8FileFormat.
Package p8file implements a parser and formatter for https://pico-8.fandom.com/wiki/P8FileFormat.
shellquote
Package shellquote quotes strings for shell scripts.
Package shellquote quotes strings for shell scripts.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL