Skip to main content

No project description provided

Project description

# dfm
A dotfile manager for lazy people and pair programmers.

Dotfile Manager will allow you to create "profiles" for dotfiles underneath one
unix account and easily switch between them. It requires a git repo with your
dotfiles in it and that the dotfiles be placed how you want them represented in
your home directory.

It does not require that the dotfiles in your repo start with dots though it
handles either case equally well.

## Installation
The easiest (and currently only) way to install dfm is using pip

$ pip3 install dfm

## Updating
Make sure dfm is updated to bring in the latest bug fixes and features. If you are installing dfm for the first time, you can skip this step.

go get -u

To install in the global path you'll need to run `pip3` as root.

# pip3 install dfm

## Usage

Usage: dfm [OPTIONS] COMMAND [ARGS]...

A dotfile manager for lazy people and pair programmers.

-vv, --verbose
-c, --config PATH The path where dfm stores it's config and profiles.
--help Show this message and exit.

add Add a file or directory to the current...
checkout Switch to a different branch for the active...
clone Clone a profile from a git repo.
commit Run a git commit for the current profile.
git Run the given git command in the current...
init Create an empty profile with the given name.
license Show dfm licensing info.
link Link the profile with the given name.
pull Pull changes from the remote.
push Push local changes to the remote.
remote Set the git remote for the current profile.
rm Remove the profile with the given name.
upgrade Upgrade from the old style config to the new...
version Show the current dfm version.
where Return the path to the current profile.

dfm is mostly a thin wrapper around git and just manages repos and symlinks
for you. As such most of the dfm commands are directly analogous to git

> **A note about the $XDG\_CONFIG\_HOME (commonly $HOME/.config) directory:**
> dfm respects dotfiles which exist in the $XDG\_CONFIG\_HOME directory, meaning
> if in your repo you have a folder named config or .config it will translate
> those into the $XDG\_CONFIG\_HOME directory appropriately. Similarly when
> using `dfm add` if inside your $XDG\_CONFIG\_HOME or $HOME/.config directories
> it will add those to the repo appropriately.

### Quick Start (Existing dotfiles repo)

If you already have a dotfiles repo you can start by cloning it using the clone

**Note:** ssh urls will work as well.

dfm clone

If you're using github you can shortcut the domain:

dfm clone chasinglogic/dfiles

If you want to clone and link the dotfiles in one command:

dfm clone --link chasinglogic/dfiles

You may have to use `--force` as well if you have existing non-symlinked
versions of your dotfiles

Once you have multiple profiles you can switch between them using `dfm link`

dfm link some-other-profile

See the Usage Notes below for some quick info on what to expect from other dfm

### Quick Start (No existing dotfiles repo)

If you do not have a dotfiles repo the best place to start is with `dfm init`

dfm init my-new-profile

Then run `dfm link` to set it as the active profile, this is also how you
switch profiles

dfm link my-new-profile

Once that is done you can start adding your dotfiles

dfm add ~/.bashrc

Alternatively you can add multiple files at once

dfm add ~/.bashrc ~/.vimrc ~/.vim ~/.emacs.d

Then simply run `dfm commit` to commit them

dfm commit -am "init dotfile repo"

Then set the remote to your remote repo

**Note:** When creating the remote repo do not choose any options such as
"initialize this repo with a README" otherwise git will get cranky when you add
the remote because of a recent git update and how it handles [unrelated
if you do don't worry the linked post explains how to get past it.

dfm remote

Then simply push them up

dfm push

Now you're done!

### A quick note about git commands and flags

dfm does always simply push your commands directly through to git.

The git sub command will push directly through so you can run whatever you want
as if you were in that directory. For example:

`dfm git checkout -b my-work-laptop`

Stdin, Stdout, and Stderr are given to git so even things that run a text
editor for example will work as expected.

## Contributing

1. Fork it!
2. Create your feature branch: `git checkout -b my-new-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin my-new-feature`
5. :fire: Submit a pull request :D :fire:

All pull requests should go to the develop branch not master. Thanks!

## License

This code is distributed under the Apache 2.0 License.

Copyright 2016 Mathew Robinson

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
dfm-2.3.2-py3-none-any.whl (13.4 kB) Copy SHA256 hash SHA256 Wheel 3.6 Jul 10, 2017
dfm-2.3.2.tar.gz (8.2 kB) Copy SHA256 hash SHA256 Source None Jul 10, 2017

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page