Skip to content

Latest commit

History

1,146 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Synopsis

I hate installing, configuring, and updating software on my computer. For example when I'm using a new machine, or sshing into a remote system. I've automated as much of that process as I can, keeping everything as lightweight as possible.

Do everything

Configure and install everything:

cd&& curl -LOks https://github.com/lexicalunit/dotfiles/tarball/master
tar xvzf master --strip 1 -C .&& rm master
bin/equip -f all

Usage

  1. Clone this repository into your home directory.
  2. Source your new environment by opening a new terminal or running . ~/.profile.
  3. Execute the command equip all to step through configuration of system settings, installation of applications, and creation of your complete developer environment.

You can also use the tool bin/deploy_dotfiles to automatically export these settings to a remote machine.

Maintenance

  • Your home directory is a git repository now! Track changes and commit updates as needed.
  • There are some git hooks in env that generate certain files for you.
  • Re-run equip all periodically to update applications and configuration.
  • Don't forget to git pull any updates!

Not Automated

There's some things that I would like to have automated but I haven't found a way yet.

  • Automatically start up after being installed: Dropbox, Rectangle, Flux
  • Automatically setup launch at startup: Rectangle, Amphetamine
  • Automatically setup iterm2's config location
  • Automatically set up the Dock's icons
  • Automatically install web browser extensions
  • Disable "Show recent applications in Dock"
  • Enable zoom via ctrl + mouse wheel scroll
  • Enable zoom follows mouse pointer
  • Enable text to speech for selected text via option + esc

Environment: ~/env

  • Solarized Light.itermcolors and Solarized Light xterm-256color.terminal themes to use in Terminal.app or iTerm.app.
  • com.googlecode.iterm2.plist are my settings for iTerm.app.
  • Rio.jpg is my favorite Desktop image.
  • Inconsolata.otf is my favorite font for writing code, it's automatically installed during the bin/equip env step.
  • The post-commit and pre-commit files are git hooks use to maintain this repository. They're also installed as part of the bin/equip env step.
  • prompt_lexical_setup is my prezto prompt theme, installed as part of the bin/equip env step.
  • nice.css is a nice style sheet useful for overriding annoying websites.
  • dircolors_examples.tgz is used by bin/show_dircolors.

Utilities: ~/bin

Installed into your ~/bin directory, these tools will be on your PATH. For detailed usage documentation see the README.md for ~/bin, or of course run any of the tools with the argument --help.

Note: Some scripts in this repository are written assuming that you're using zsh as your shell. As of macOS Catalina the default shell is zsh. However, most scripts in ~/bin are written with a /bin/bashshebang because I like to use shellcheck to ensure code quality. Where possible I've tried to maintain backwards compatibility with bash, but I make no guarantees. You should start using zsh as soon as possible. It's so much better. In the future there will hopefully be direct support for #!/usr/bin/env zsh in shellcheck.

ToolUsage
alertProvides shell level windowed alerting system.
backmostSend the current frontmost windowed macOS application to the back.
brReset hue light files.
busyTurn on a busy light.
capture_xCreates a screenshot of selected window on X11.
cardFetches card images from Scryfall and converts them to proxies sheets.
cleanupCleans system and application caches on macOS.
codeclimateRuns Code Climate on the current working directory.
colortestPrints out an entire color palette of terminal color codes.
daemonsFinds and removes unwanted daemons and agents.
deploy_dotfilesInstalls bin and env from this repository to remote server via ssh.
dieKills processes based on process name.
docBuilds HTML output from Markdown file.
dogsStreams system logs for docker containers.
drcRun a Check django backend.
equipInstall applications and development environment on an macOS or Lin...
faffSleeps for the given number of seconds, showing a progress bar.
firefox-tabsAttempts to list the currently open urls in your Firefox tabs.
flipFlips input upside down.
git-arcTool for archiving and restoring git branches.
git-authorsGit script for discovering who wrote the code at the current workin...
git-fpGit script for cleaning up stale local branches.
git-lgGit script for printing beautiful logs.
git-ltrLists (a-la 'ls -ltr') git controlled source files in current direc...
git-name-changeClones a repo then changes the name and email address in entire his...
git-parentFinds the direct parent of the current branch in git.
git-prettyRuns prettier on vue/js/ts files in the most recent N commits.
git-ptForce updates remote topic branch with local branch.
git-reconA tool for reconciling your local git repositories.
git-runRuns a command on files that have recently changed.
git-tidyTidies up all the junk this repository.
git-whatBuild a useful git description of the changes in this branch.
git-wroteWho wrote the most lines for the files in the current directory.
golistLooks for downloaded go modules in your system go path.
install_odbcSets up ODBC.
macosverPrints current macOS version information.
mc_supportHit a backend support endpoint.
monMonth name to number and vice versa.
nodeula-rasaGives you a total clean slate in your node project.
nopwEnables password-less ssh TO username@remotehost FROM localhost.
npm-updateTries to update package dependencies to latest using ncu, npm, and ...
paystubGet your latest paystub as PDF from Check's API.
pcBlow away and reinstall all pre-commit hooks.
pipcPip compiles any requirement*.in files in the current directory.
pipiPip installs any requirements files in the current directory.
pptRuns pytest tests locally.
rcSpin up or attach to tumx running Check development services.
resendResend an incident notification.
rootPrints the root of the current repository.
set_wallpaperUses Cocoa classes via PyObjC to set a desktop wallpaper on all scr...
show_dircolorsShows example output based on current dircolors settings.
sleptGet time macOS system last went to sleep.
snakeConvert camelCase to snake_case.
uninstall_homebrewUninstalls Homebrew.
usagesPrints out documentation and usages for utilities.
weatherShow the current weather directly in your terminal.
whereamiPrints your current city name using your geoip location.
wokeGet time macOS system last woke from sleep.
xdieKills processes based on their window title.
xfExtract common file formats.
yeti-no-thruDisables the "Thru" (playthrough) setting on Blue Yeti microphones.
zoomwatcherA service that watches for zoom and turns a hue light red if it is ...

What does equip all install?

Glad you asked! equip all will go through the following steps one by one. For the steps that install packages/formulas/casks/whatever, see below for the list of included items.

StepDescription
xcodeEnsure that Xcode Command Line Tools are installed
dotfilesEnsure home directory is a git repository for dotfiles
brewEnsure Homebrew installed, formulas upgraded, and Theine installed
caskEnsure Homebrew Casks are installed
extEnsure file extension associations are correct
zshEnsure shell is latest version of zsh from Homebrew
envUpdate environment configuration and submodules
pythonUpgrade/Install python and conda packages
nodeEnsure Node modules are installed via npm
goEnsure Go packages are installed
cargoEnsure Rust packages are installed via cargo
codeEnsure VS Code installed via Homebrew Cask and its packages are installed
osxOverride macOS "defaults" settings and configuration
dotRuns steps: dotfiles zsh env
appsRuns steps: xcode brew cask ext python node go cargo code
mostRuns steps: apps dot (basically everything but the osx step)
allRuns all steps

Homebrew Formulas: autoconf, awscli, bash, basictex, brotli, c-ares, ca-certificates, cabal-install, cairo, chrome-cli, clang-format, corepack, coreutils, defaultbrowser, diff-so-fancy, direnv, duti, exiftool, expect, fontconfig, freetype, fribidi, fzf, gdbm, gettext, gh, ghc, ghostscript, giflib, git, git-lfs, git-secrets, glib, gmp, gnu-sed, gnu-tar, go, gobject-introspection, graphite2, harfbuzz, hashicorp/tap/terraform, icu4c@77, imagemagick@6, jbig2dec, jemalloc, jez/formulae/pandoc-sidenote, jpeg, jpeg-turbo, jq, krb5, leptonica, libarchive, libb2, libev, libevent, libffi, libgit2, libidn, libidn2, libnghttp2, libnghttp3, libngtcp2, libpng, libpq, libpthread-stubs, libssh2, libtiff, libtommath, libtool, libunistring, libusb, libuv, libx11, libxau, libxcb, libxdmcp, libxext, libxrender, libyaml, little-cms2, llvm, lsd, lz4, lzo, m4, mas, mpdecimal, ncurses, nghttp2, node, nvm, oniguruma, openhue/cli/openhue-cli, openjpeg, openssl@3, pandoc, pango, pcre, pcre2, pidof, pixman, pkg-config, pkgconf, postgresql@15, pyenv, pyenv-virtualenv, pyenv-virtualenvwrapper, pyright, python@3.13, readline, ripgrep, rlwrap, rust, rustup, shellcheck, shfmt, simdjson, sqlite, tcl-tk, tcl-tk@8, tesseract, tex-fmt, tflint, tmux, tree, utf8proc, uv, uvwasi, vramsteg, watch, wdiff, webp, wget, xorgproto, xz, z3, zsh, zstd

Homebrew Casks: 1password, 1password/tap/1password-cli, chromedriver, discord, docker, docker-desktop, dropbox, fantastical, flux-app, font-fira-code, font-hack-nerd-font, google-chrome, iexplorer, iterm2, lingon-x, ngrok, obsidian, omnifocus, rectangle, signal, slack, snes9x, sourcetree, spotify, steam, tableplus, the-unarchiver, transmission, vagrant, visual-studio-code, vlc

Code Packages: be5invis.toml, bibhasdn.unique-lines, charliermarsh.ruff, DavidAnson.vscode-markdownlint, dbaeumer.vscode-eslint, eamodio.gitlens, esbenp.prettier-vscode, exiasr.hadolint, foxundermoon.shell-format, GitHub.copilot, GitHub.copilot-chat, hashicorp.terraform, James-Yu.latex-workshop, joe-re.sql-language-server, karunamurti.haml, mgmcdermott.vscode-language-babel, mike-co.import-sorter, mohsen1.prettify-json, ms-azuretools.vscode-docker, ms-python.debugpy, ms-python.python, ms-python.vscode-pylance, ms-vscode.live-server, nickmillerdev.pytest-fixtures, PascalReitermann93.vscode-yaml-sort, redhat.vscode-yaml, richie5um2.vscode-sort-json, streetsidesoftware.code-spell-checker, sysoev.language-stylus, timonwong.shellcheck

Conda Packages: appdirs, appnope, attrs, backcall, brotlipy, ca-certificates, cachecontrol, cachy, certifi, cffi, charset-normalizer, cleo, clikit, crashtest, cryptography, decorator, distlib, filelock, html5lib, idna, importlib_metadata, importlib-metadata, iniconfig, ipython, ipython_genutils, jedi, jsonschema, keyring, libcxx, libffi, lockfile, lz4, lz4-c, matplotlib-inline, more-itertools, msgpack-python, ncurses, openssl, packaging, parso, pastel, pexpect, pickleshare, pip, pkginfo, pluggy, prompt-toolkit, ptyprocess, py, pycosat, pycparser, pygments, pylev, pyopenssl, pyparsing, pyrsistent, pysocks, pytest, pyyaml, readline, requests, requests-toolbelt, ruamel_yaml, setuptools, shellingham, six, tk, toml, tomlkit, tqdm, traitlets, urllib3, virtualenv, wcwidth, webencodings, wheel, xz, yaml, zipp, zlib

Node Modules: @ibm/plex, dockerlint, tmpin, typescript

Go Packages: github.com/BurntSushi/toml, github.com/BurntSushi/toml/cmd/tomlv

Cargo Packages: cargo-update, jless, loc, porsmo

License

Inconsolata font Created by Raph Levien using his own tools and FontForge.
Copyright 2006 Raph Levien. Released under the SIL Open Font License.
The MIT License (MIT)
Copyright (c) 2026, lexicalunit@lexicalunit.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

About

Install applications and development environment on a macOS or Linux machine.

Resources

Stars

14 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages