hnjobs
A console tool to find your best match on Who's Hiring. Exports to JSON for automated ennui.
It:
- Finds the latest Who's Hiring post and fetches / caches all job comments locally in sqlite.
- Scores job postings according to your criteria.
- Provides a TUI to help you review the jobs and track which ones are interesting / applied to / ruled out.
Installation
go install github.com/mwinters0/hnjobs@latest
Or grab a binary from the releases
Usage
On first run, a config file is created at UserConfigDir/hnjobs/config.json. (On linux this is
~/.config/hnjobs/config.json.)
👉 You should edit the config file👈 before running any other commands, as this is
where your scoring rules are stored. Some samples rules are provided in the generated file. Each rule is a
golang regex which must be JSON escaped (\b -> \\b).
After you've set up your rules, run hnjobs again and it will auto-fetch the most-recent job story, score the jobs by
your criteria, and show the TUI.
TUI bindings
- Basics
ESC- close dialogsTAB- switch focus (so you can scroll a long job listing if needed)jkand up/down arrows - scrollg,G,Ctrl-d,Ctrl-u- scroll harder
f- fetch latest (only fetches new / TTL expired jobs, with default TTL of 1 day)F- force fetch all jobs (ignore TTL)q- quit
- Job Filtering
r- mark read / unreadx- mark job uninterested (hidden) or interested (default)p- mark priority / not prioritya- mark applied to / not applied tos- reload config file and re-score the jobs (useful if you've changed your rules)
- Display
X- toggle hiding of jobs marked uninterestedT- toggle hiding of jobs below your score threshold (set in the config file)m- select month (if multiple in your DB) / delete old months
Commands
hnjobs # Works offline. hnjobs fetch # Just fetch, no TUI. Run this before hopping on a plane. hnjobs fetch -x # Fetch and set exit code according to results. 0 = new jobs available. hnjobs rescore # Re-score the cached jobs. Only needed if you've changed your rules. hnjobs dump # Dump the current month's data to JSON on stdout.
Scoring rules FAQ
text_missingrules match if the regex fails. Use this to influence the score if a word is missing from a listing.whyandwhy_nottags are optional. I like to analyze my past decisions whenever I watch my credit score drop. 🤷 These will become visible in the TUI eventually.colorizeis an optional boolean that defaults totrue. Set tofalseif you don't want this rule to be colorized in the display.
Styling
If you hate orange, you can edit your config file to use one of the built-in themes: material or
gruvbox[dark|light]<hard|soft> (example: gruvboxdarkhard).
If you want to take a crack at making your own, have a look at the default theme which is generated on first-run at
UserConfigDir/hnjobs/theme-default.json (on linux: ~/.config/hnjobs/theme-default.json). You can either edit this
or copy it to theme-foo.json and set your config's theme to foo.
Misc
The database is stored at UserDataDir/hnjobs/hnjobs.sqlite (on linux: ~/.local/share/hnjobs/hnjobs.sqlite).
