#dotfiles #manager #dotter

app dotter

A dotfile manager and templater written in rust

51 releases

0.12.14 Aug 16, 2022
0.12.13 Jun 26, 2022
0.12.10 Apr 2, 2022
0.12.9 Dec 24, 2021
0.2.4 Nov 2, 2017

#306 in Command line utilities

Download history 292/week @ 2022-06-05 19/week @ 2022-06-12 34/week @ 2022-06-19 123/week @ 2022-06-26 60/week @ 2022-07-03 112/week @ 2022-07-10 61/week @ 2022-07-17 118/week @ 2022-07-24 6/week @ 2022-07-31 20/week @ 2022-08-07 54/week @ 2022-08-14 67/week @ 2022-08-21 12/week @ 2022-08-28 114/week @ 2022-09-04 73/week @ 2022-09-11 19/week @ 2022-09-18

259 downloads per month

Unlicense and CC-PDDC licenses

3.5K SLoC

What is Dotter?

Dotter is a dotfile manager and templater.

Dotfiles are configuration files that usually live in the home directory and start with a dot. Often times, it is desirable to have a backup of all the configurations on your system, which is why a lot of users have their dotfiles saved in a git repository, then symlinking them to their target locations using ln -s.

However, there are several issues with that barebones approach:

  • Hard to keep track of what comes from where once you have more than a handful of dotfiles
  • Tedious to setup on a new machine - you need to manually create every single link
  • No real way to handle differences between machines - say you want the battery meter on your bar to not appear on your desktop machine

Dotter aims to solve all those problems by providing a flexible configuration and automatic templating or symlinking to the target locations.


Arch Linux

The following AUR packages are available:

  • dotter-rs-bin for a precompiled version of the latest release
  • dotter-rs for the latest release's source that is built on your machine
  • dotter-rs-git for the latest commit on master that is built on your machine

All of those are maintained by orhun - huge thanks to him!


Dotter is available on Scoop. Run scoop install dotter to install the latest release.


Download the binary for your platform from the latest release and then put it in your $PATH or in your dotfile repository (then you'd run it with ./dotter). Alternatively, Dotter is on crates.io, so if you have Rustup installed, run cargo install dotter.


Check out the wiki for more information. Among other things, it explains how to setup and configure Dotter, as well as giving insight on how the templating and deployment works.


Now that you've configured all the global and local file sections, you can simply run dotter from within your repository.
All the files will be deployed to their target locations.

Check out dotter -h for the command-line flags that Dotter supports:

dotter 0.12.14
SuperCuber <amit.gold01@gmail.com>
A dotfile manager and templater written in rust


        --cache-directory <CACHE_DIRECTORY>
            Directory to cache into [default: .dotter/cache]

        --cache-file <CACHE_FILE>
            Location of cache file [default: .dotter/cache.toml]

    -d, --dry-run
            Dry run - don't do anything, only print information. Implies -v at least once

        --diff-context-lines <DIFF_CONTEXT_LINES>
            Amount of lines that are printed before and after a diff hunk [default: 3]

    -f, --force
            Force - instead of skipping, overwrite target files if their content is unexpected.
            Overrides --dry-run

    -g, --global-config <GLOBAL_CONFIG>
            Location of the global configuration [default: .dotter/global.toml]

    -h, --help
            Print help information

    -l, --local-config <LOCAL_CONFIG>
            Location of the local configuration [default: .dotter/local.toml]

    -p, --patch
            Take standard input as an additional files/variables patch, added after evaluating
            `local.toml`. Assumes --noconfirm flag because all of stdin is taken as the patch

        --post-deploy <POST_DEPLOY>
            Location of optional post-deploy hook [default: .dotter/post_deploy.sh]

        --post-undeploy <POST_UNDEPLOY>
            Location of optional post-undeploy hook [default: .dotter/post_undeploy.sh]

        --pre-deploy <PRE_DEPLOY>
            Location of optional pre-deploy hook [default: .dotter/pre_deploy.sh]

        --pre-undeploy <PRE_UNDEPLOY>
            Location of optional pre-undeploy hook [default: .dotter/pre_undeploy.sh]

    -q, --quiet
            Quiet - only print errors

    -v, --verbose
            Verbosity level - specify up to 3 times to get more detailed output. Specifying at least
            once prints the differences between what was before and after Dotter's run

    -V, --version
            Print version information

    -y, --noconfirm
            Assume "yes" instead of prompting when removing empty directories

    deploy             Deploy the files to their respective targets. This is the default
    gen-completions    Generate shell completions
    help               Print this message or the help of the given subcommand(s)
    init               Initialize global.toml with a single package containing all the files in
                           the current directory pointing to a dummy value and a local.toml that
                           selects that package
    undeploy           Delete all deployed files from their target locations. Note that this
                           operates on all files that are currently in cache
    watch              Run continuously, watching the repository for changes and deploying as
                           soon as they happen. Can be ran with `--dry-run`


Contributions to Dotter are welcome, whether in the form of a pull request or an issue (for bug repots, feature requests, or other helpful comments)


Like what I do and want to encourage me to continue?
You can donate a small amount via Paypal.
Donations are not expected but greatly appreciated.


~451K SLoC