» dotfm



a clean & simple terminal dotfile manager



  • Added aliases for all commands:
    • install, in
    • edit, ed
    • list, ls
    • remove, rm
    • update, up
  • Updated README


  • Bugfix when a blank line is found in the installed.csv file
  • Bugfix when the installed.csv directory does not exist on first run
  • Bugfix to behaviour when installing a dotfile source path that matches it's destination path
  • Bugfix when using ~ in the path of a prompted install location


  • minor fix to Makefile#link


  • total refactored on most of the code to tidyup some mess that'd been in for a while
    • logging is more consistent
    • no more duplicates in the installed.csv file
    • overall behaviour is more consistent and tidy
  • added sfeed to known dotfiles
  • added txtnish to known dotfiles
  • added '-s', '--skip' option, which will skip any prompts and use pre-defined defaults if available
  • user is now prompted for a dotfile location even if dotfm knows it (found myself wanting to use install init.vim as ~/.vimrc), the pre-defined location is used as a default


  • added -p to mkdir calls in Makefile to avoid failure when path exists
  • tidied up logging
  • bugfix when returned input prompt value is empty


  • updated the CHANGELOG
  • dotfm remove now calls rm -iv (previously rm -v), to be safe(r).


  • added the dotfm update command for updating a dotfile's source location


  • added banner.svg


  • updated the README & man file
  • formatting fixed in the README


  • compressed logo.png


  • updated LICENSE to ISC
  • added awesome logo from Marta Dias
  • minor fix in Makefile


  • updated the "list" command to use unix system commands: printf, cat, column. Provides a neater, more reliable printout and makes the implementation tidier.
  • DOTFM CSV FILE lines are now terminated with '\n' (previously '\r\n')
  • Install & Uninstall (with Makefile) will now prompt for overwriting & removing files


  • The quiet arg works properly now
  • Added code comment header documenting the dotfm functions
  • Now the DOTFILE arg can specify multiple dotfiles
  • updated the README
  • added a manpage (src/dotfm.1), which is installed with dotfm in the Makefile


dotfm now tracks dotfiles that it installs symlinks for in a file. This file is currently stored at ~/.local/dotfm/installed.csv. The file has the following structure:


location is the location dotfm installed the dotfile to (the symlink pointing to the source dotfile).

alias these are strings that dotfm uses to recognise the related dotfile (e.g. you could use "brc" as an alias for your bashrc and call "dotfm edit brc")


DOTFILE LOCATIONS has been refactored into KNOWN DOTFILES, it follows the same structure as the DOTFM CSV FILE (see above).

The purpose of this array is now to act as a knowledge base for all the location to install dotfiles to and any names that they sohuld be recognised under that dotfm recognises.

If a dotfile is within this array, dotfm will know where to install the relevant dotfile automatically and allow you to call it with the preset aliases. Don't be scared to modify this array to modify this to your hearts content.

If a dotfile is not present within this array then you'll be prompted for the install location of the dotfile and any aliases you want to allow dotfm to recognise it under. This won't be added to KNOWN DOTFILES, but will be appended to DOTFM CSV FILE.

dotfm init

This is a function that runs at the start of every runtime, it checks if the DOTFM CSV FILE is present: If it is, it's contents are loaded into memory; If it isn't, then the user is prompted where they would like to create it and the file is created with itself as the first entry.

dotfm install

Now if a dotfile is not recognsied in the KNOWN_DOTFILES array, the user will be prompted asking where to install it to and what aliases to recognise it under.

Multiple dotfiles can be passed to dotfm install, e.g.

dotfm install ./bashrc ./profile ./tmux.conf

dotfm remove

dotfm remove will now also remove the file from the DOTFM CSV FILE

dotfm list

Minor changes to dotfm list printout format. Will also print even if running in quiet mode.

dotfm list now lists all installed dotfiles by default, and only lists specifc dotfiles if specified.


  • added "-q", "--quiet" argument, using it reduces printed logs "dotfm list" will still print the file location (one line each), e.g.:

    /home/gearsix/.bashrc /home/gearsix/.profile /home/gearsix/.bash_profile ...

  • added CHANGELOG

  • updated LICENSE to BSD 4-Clause

  • added sfeed to DOTFILE_LOCATIONS

  • added TODO items


dotfm is a simple and easy to use terminal dotfile manager.

It's basically just a Python script to short-hand managment of symlinking dotfiles. It's goal is to allow you to keep all your dotfiles in a single directory (ideally without any nesting inside that dir) and allowing you to name the dotfiles whatever you want (not forcing you to use hidden file naming).

If you don't want to remember or type out the location of a dotfile everytime you want to modify it, if you just want to keep your dotfiles tidy in a repo/directory (see fig.1), maybe you swap dotfiles around a lot:

│   ├───bashrc
│   ├───nvimrc
│   ├───tmux.conf
│   ├───ssh_config
│   └───user-dirs.dirs

Opposed to the traditional approach, where you re-create the home directory structure and just clone it to your home folder (which I think is messy):

│   └───config
    │   └─── nvimrc

See the README for more details on using the tool.

  • dotfm install ~/dev/gearsix/dotfiles/bashrc
    • creates a symlink at ~/.bashrc -> ~/dev/gearsix/dotfiles/bashrc
  • dotfm edit bashrc
    • edit the dotfile at ~/dev/gearsix/dotfiles/bashrc
  • dotfm update bashrc ~/dev/gearsix/new-dotfiles/bashrc
    • update the ~/.bashrc dotfile to point to ~/dev/gearsix/new-dotfiles/bashrc
  • dotfm remove bashrc
    • remove the symlink pointing to the source dotfile (~/.bashrc), note that this makes a interactive rm call.


Just download the latest release and run sudo make install or sudo make link. The difference is that make install copies the binary and make link just creates a symlink (useful if you want to make changes to source or update via git pull)

By default the install location of dotfm is /usr/local/bin/dotfm. To modify this, just edit the value of DESTBINDIR in the Makefile.

Here are the git repositories with latest changes: