Dotfiles, utilities, and other apparatus.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Brennen Bearnes 7c83dec4ec rm home/bin/git-local-to-remote-status 7 years ago
apache2 apache2.conf 8 years ago
etc/default keyboard: add compose key, capslock -> ctrl at system level 7 years ago
home rm home/bin/git-local-to-remote-status 7 years ago
.gitignore clean up some xmonad weirdness 7 years ago add a handful of recent commands to 7 years ago a stub installer script 7 years ago
ns-control dependency .deb: add byzanz and festival 7 years ago


This repo is for dotfiles, utility scripts, and other things in my personal setup. Ideally, it includes most of the bits and pieces that make a personal machine usable for me.

I mostly use Debian and Debian-like GNU/Linux systems (including Ubuntu). I usually edit text in Vim, and use the xmonad tiling window manager.

I have a partially-finished book about the command line which may be relevant.


As of October 2016, most of this collection is actively maintained, although it doesn't meet the standards of quality, consistency, or documentation you might quite reasonably want from a real software project.

(Then again, neither do most software projects.)


I thief ideas and bits of configuration from the following people and projects:


shell stuff

These days I use ZSH on personal systems and Bash when writing tutorials or doing tech support. I like to keep lots and lots of history. I think shell scripting is a nightmare for most real tasks, but I do it sometimes anyway.

  • .bashrc
  • .zshrc - nothing fancy
  • .sh_common - aliases and variables for both Bash and ZSH; no Bash compatibility guarantees here, since I mostly don't use custom aliases in Bash

scripts in home/bin/

Scripts here fall into a handful of categories:

  • Short wrappers for getting (or remembering) specific behavior from other tools
  • Screenshot and screencast tools used in my work as a writer for DigitalOcean and Adafruit
  • Things for working with the p1k3 repo and site
  • Text filters and fragments, mostly for use with Vim aliases
  • Miscellaneous utilities

Most of these are unlikely to be portable, useful, or documented.

  • chrome-incognito: run Google Chrome in incognito mode
  • cheat: a place to hang a personal cheatsheet of sorts
  • dmenu_unique: run dmenu with big fonts and vertical, only showing each entry once
  • dog: concatenate argument strings and stdin
  • filter-decorate: splat some text dingbats into HTML I write sometimes
  • filter-exec-raw: like above, but different
  • filter-exec: replace text in-between markers with result of shell-script execution
  • filter-markdownify: convert a few things in old DigitalOcean tutorials to Markdown
  • filter-vertical: verticalize a string
  • firefox-fromselection: open a selected url in firefox
  • fragment-bullet: print out a "random" dingbat character
  • get-external-ip: print public IP address
  • gif-sel, gif-sel-4, gif-sel-15: take an animated gif of selected screen region
  • git-diff-wrapper: use vim with git-diff-tool
  • git-local-to-remote-status
  • grab, grab-sel: take a screenshot, take a screenshot of a selected region
  • json_decode.php: decode JSON into PHP data structures
  • pretty-print JSON with Perl
  • jump-to-window: use wmctrl and dmenu to pick a window to jump to
  • listusers: print an HTML list of users
  • notesession: start a tmux named session for notes
  • photocp: copy photos from various media to a home directory location
  • pmwhich: find the on-filesystem location of a Perl module
  • rightnow: print the current time in a variety of formats
  • saytime: speak the time with Festival
  • timelog: parse a timelogging format (I use this to bill for contracting)
  • today: print a date
  • todaydir: find a p1k3 dir for the current date
  • uni: search unicode codepoint names (via @chneukirchen)
  • unsorted-unique: print all lines of input once (just an awk one-liner)
  • wip: move a p1k3 file into a work-in-progress directory
  • words: split input into individual words
  • xm: call xmodmap (dumb)
  • xmonad.start: personal version of xmonad startup script
  • xtfix: do a subtle color shift within the current xterm
  • yank, unyank: stash a file path, move it to the current directory


I use tmux for terminal multiplexing (i.e., most of what GNU Screen does). In practice, this means that I rely on it for

  • persistent shell sessions, sometimes attached to multiple machines
  • putting a bunch of shell / editor buffers inside one ssh or mosh session
  • capturing and scrolling back through a bunch of output

My .tmux.conf is brief, but does contain one useful snippet for correcting weird Esc-key behavior in Vim.

vim config

  • .vimrc - see file for installation details
  • uses Vundle to manage plugins and such
  • pulls in a ton of plugins, some more useful than others

window management

  • .xmodmap
    • capslock -> ctrl
    • I run this a bunch with bin/xm, which is dumb
  • .xinitrc
    • sources .hacksrc if it exists
  • .Xresources tweaks xterm behavior and a number of fonts
    • behavior changes depending on whether .hacksrc is linked to .hacksrc_hi_dpi
  • XMonad config -
    • .xmobarrc, .xmonad/
    • see bin/xmonad.start for a drop-in replacement for default XMonad startup on some Debian-like systems, including Gnome/Unity stuff and the like. Perpetually not-quite-right.

building a debian package for dependencies

See instructions in ns-control.